@azure/microsoft-playwright-testing 1.0.0-alpha.20240911.2

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 (127) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/LICENSE +21 -0
  3. package/README.md +151 -0
  4. package/dist/common/constants.d.ts +92 -0
  5. package/dist/common/constants.d.ts.map +1 -0
  6. package/dist/common/constants.js +222 -0
  7. package/dist/common/constants.js.map +1 -0
  8. package/dist/common/customerConfig.d.ts +9 -0
  9. package/dist/common/customerConfig.d.ts.map +1 -0
  10. package/dist/common/customerConfig.js +15 -0
  11. package/dist/common/customerConfig.js.map +1 -0
  12. package/dist/common/entraIdAccessToken.d.ts +12 -0
  13. package/dist/common/entraIdAccessToken.d.ts.map +1 -0
  14. package/dist/common/entraIdAccessToken.js +72 -0
  15. package/dist/common/entraIdAccessToken.js.map +1 -0
  16. package/dist/common/environmentVariables.d.ts +12 -0
  17. package/dist/common/environmentVariables.d.ts.map +1 -0
  18. package/dist/common/environmentVariables.js +17 -0
  19. package/dist/common/environmentVariables.js.map +1 -0
  20. package/dist/common/executor.d.ts +2 -0
  21. package/dist/common/executor.d.ts.map +1 -0
  22. package/dist/common/executor.js +79 -0
  23. package/dist/common/executor.js.map +1 -0
  24. package/dist/common/httpService.d.ts +5 -0
  25. package/dist/common/httpService.d.ts.map +1 -0
  26. package/dist/common/httpService.js +37 -0
  27. package/dist/common/httpService.js.map +1 -0
  28. package/dist/common/logger.d.ts +3 -0
  29. package/dist/common/logger.d.ts.map +1 -0
  30. package/dist/common/logger.js +9 -0
  31. package/dist/common/logger.js.map +1 -0
  32. package/dist/common/messages.d.ts +9 -0
  33. package/dist/common/messages.d.ts.map +1 -0
  34. package/dist/common/messages.js +14 -0
  35. package/dist/common/messages.js.map +1 -0
  36. package/dist/common/multimap.d.ts +16 -0
  37. package/dist/common/multimap.d.ts.map +1 -0
  38. package/dist/common/multimap.js +64 -0
  39. package/dist/common/multimap.js.map +1 -0
  40. package/dist/common/playwrightServiceConfig.d.ts +12 -0
  41. package/dist/common/playwrightServiceConfig.d.ts.map +1 -0
  42. package/dist/common/playwrightServiceConfig.js +39 -0
  43. package/dist/common/playwrightServiceConfig.js.map +1 -0
  44. package/dist/common/types.d.ts +301 -0
  45. package/dist/common/types.d.ts.map +1 -0
  46. package/dist/common/types.js +5 -0
  47. package/dist/common/types.js.map +1 -0
  48. package/dist/core/global/playwright-service-global-setup.d.ts +4 -0
  49. package/dist/core/global/playwright-service-global-setup.d.ts.map +1 -0
  50. package/dist/core/global/playwright-service-global-setup.js +19 -0
  51. package/dist/core/global/playwright-service-global-setup.js.map +1 -0
  52. package/dist/core/global/playwright-service-global-teardown.d.ts +4 -0
  53. package/dist/core/global/playwright-service-global-teardown.d.ts.map +1 -0
  54. package/dist/core/global/playwright-service-global-teardown.js +19 -0
  55. package/dist/core/global/playwright-service-global-teardown.js.map +1 -0
  56. package/dist/core/playwrightService.d.ts +63 -0
  57. package/dist/core/playwrightService.d.ts.map +1 -0
  58. package/dist/core/playwrightService.js +131 -0
  59. package/dist/core/playwrightService.js.map +1 -0
  60. package/dist/core/playwrightServiceEntra.d.ts +16 -0
  61. package/dist/core/playwrightServiceEntra.d.ts.map +1 -0
  62. package/dist/core/playwrightServiceEntra.js +51 -0
  63. package/dist/core/playwrightServiceEntra.js.map +1 -0
  64. package/dist/index.d.ts +10 -0
  65. package/dist/index.d.ts.map +1 -0
  66. package/dist/index.js +19 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/model/entraTokenDetails.d.ts +5 -0
  69. package/dist/model/entraTokenDetails.d.ts.map +1 -0
  70. package/dist/model/entraTokenDetails.js +9 -0
  71. package/dist/model/entraTokenDetails.js.map +1 -0
  72. package/dist/model/mptTokenDetails.d.ts +11 -0
  73. package/dist/model/mptTokenDetails.d.ts.map +1 -0
  74. package/dist/model/mptTokenDetails.js +14 -0
  75. package/dist/model/mptTokenDetails.js.map +1 -0
  76. package/dist/model/shard.d.ts +41 -0
  77. package/dist/model/shard.d.ts.map +1 -0
  78. package/dist/model/shard.js +24 -0
  79. package/dist/model/shard.js.map +1 -0
  80. package/dist/model/storageUri.d.ts +14 -0
  81. package/dist/model/storageUri.d.ts.map +1 -0
  82. package/dist/model/storageUri.js +22 -0
  83. package/dist/model/storageUri.js.map +1 -0
  84. package/dist/model/testResult.d.ts +40 -0
  85. package/dist/model/testResult.d.ts.map +1 -0
  86. package/dist/model/testResult.js +9 -0
  87. package/dist/model/testResult.js.map +1 -0
  88. package/dist/model/testRun.d.ts +36 -0
  89. package/dist/model/testRun.d.ts.map +1 -0
  90. package/dist/model/testRun.js +12 -0
  91. package/dist/model/testRun.js.map +1 -0
  92. package/dist/reporter/index.d.ts +10 -0
  93. package/dist/reporter/index.d.ts.map +1 -0
  94. package/dist/reporter/index.js +15 -0
  95. package/dist/reporter/index.js.map +1 -0
  96. package/dist/reporter/mptReporter.d.ts +96 -0
  97. package/dist/reporter/mptReporter.d.ts.map +1 -0
  98. package/dist/reporter/mptReporter.js +350 -0
  99. package/dist/reporter/mptReporter.js.map +1 -0
  100. package/dist/tsdoc-metadata.json +11 -0
  101. package/dist/utils/cIInfoProvider.d.ts +25 -0
  102. package/dist/utils/cIInfoProvider.d.ts.map +1 -0
  103. package/dist/utils/cIInfoProvider.js +107 -0
  104. package/dist/utils/cIInfoProvider.js.map +1 -0
  105. package/dist/utils/packageManager.d.ts +15 -0
  106. package/dist/utils/packageManager.d.ts.map +1 -0
  107. package/dist/utils/packageManager.js +54 -0
  108. package/dist/utils/packageManager.js.map +1 -0
  109. package/dist/utils/reporterUtils.d.ts +57 -0
  110. package/dist/utils/reporterUtils.d.ts.map +1 -0
  111. package/dist/utils/reporterUtils.js +547 -0
  112. package/dist/utils/reporterUtils.js.map +1 -0
  113. package/dist/utils/serviceClient.d.ts +23 -0
  114. package/dist/utils/serviceClient.d.ts.map +1 -0
  115. package/dist/utils/serviceClient.js +91 -0
  116. package/dist/utils/serviceClient.js.map +1 -0
  117. package/dist/utils/storageClient.d.ts +6 -0
  118. package/dist/utils/storageClient.d.ts.map +1 -0
  119. package/dist/utils/storageClient.js +41 -0
  120. package/dist/utils/storageClient.js.map +1 -0
  121. package/dist/utils/utils.d.ts +17 -0
  122. package/dist/utils/utils.d.ts.map +1 -0
  123. package/dist/utils/utils.js +143 -0
  124. package/dist/utils/utils.js.map +1 -0
  125. package/package.json +104 -0
  126. package/types/microsoft-playwright-testing.d.ts +352 -0
  127. package/types/reporter/microsoft-playwright-testing.d.ts +146 -0
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.EntraIdAccessToken = void 0;
6
+ const identity_1 = require("@azure/identity");
7
+ const logger_1 = require("./logger");
8
+ const constants_1 = require("./constants");
9
+ const utils_1 = require("../utils/utils");
10
+ const messages_1 = require("./messages");
11
+ class EntraIdAccessToken {
12
+ constructor(credential) {
13
+ this.fetchEntraIdAccessToken = async () => {
14
+ try {
15
+ logger_1.coreLogger.info("Fetching entra id access token");
16
+ const accessToken = await this._credential.getToken(constants_1.EntraIdAccessTokenConstants.SCOPE);
17
+ if (!accessToken) {
18
+ throw new Error("Entra id access token is null");
19
+ }
20
+ if (accessToken.token === this.token) {
21
+ // azure identity library can fetch the same token again from cache. 10 mins before expiry, it allows token refresh
22
+ logger_1.coreLogger.info("Cached access token is returned, will be retried again.");
23
+ return;
24
+ }
25
+ this.token = accessToken.token;
26
+ this._expiryTimestamp = accessToken.expiresOnTimestamp;
27
+ process.env[constants_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN] = this.token;
28
+ logger_1.coreLogger.info("Entra id access token fetched and set in environment variable");
29
+ logger_1.coreLogger.info("Entra id access token expiry:", new Date(this._expiryTimestamp).toISOString());
30
+ return;
31
+ }
32
+ catch (err) {
33
+ logger_1.coreLogger.error(err);
34
+ process.env[constants_1.InternalEnvironmentVariables.MPT_SETUP_FATAL_ERROR] = "true";
35
+ throw new Error(messages_1.ServiceErrorMessageConstants.NO_AUTH_ERROR);
36
+ }
37
+ };
38
+ this.setEntraIdAccessTokenFromEnvironment = () => {
39
+ try {
40
+ const token = process.env[constants_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];
41
+ if (!token) {
42
+ return;
43
+ }
44
+ const claims = (0, utils_1.parseJwt)(token);
45
+ if (claims.accountId || claims.aid) {
46
+ return;
47
+ } // mpt PAT
48
+ const expiry = new Date(claims.exp * 1000);
49
+ this.token = token;
50
+ this._expiryTimestamp = expiry.getTime();
51
+ }
52
+ catch (_) {
53
+ return;
54
+ }
55
+ };
56
+ this._credential = credential !== null && credential !== void 0 ? credential : new identity_1.DefaultAzureCredential();
57
+ this.setEntraIdAccessTokenFromEnvironment();
58
+ }
59
+ doesEntraIdAccessTokenNeedRotation() {
60
+ if (!this.token) {
61
+ logger_1.coreLogger.info("Entra id access token not found, needs rotation");
62
+ return true;
63
+ }
64
+ const lifetimeLeft = this._expiryTimestamp - new Date().getTime();
65
+ const doesEntraTokenRequireRotation = lifetimeLeft <
66
+ constants_1.EntraIdAccessTokenConstants.LIFETIME_LEFT_THRESHOLD_IN_MINUTES_FOR_ROTATION * 60 * 1000;
67
+ logger_1.coreLogger.info("Entra id access token requires rotation:", doesEntraTokenRequireRotation ? "Yes" : "No");
68
+ return doesEntraTokenRequireRotation;
69
+ }
70
+ }
71
+ exports.EntraIdAccessToken = EntraIdAccessToken;
72
+ //# sourceMappingURL=entraIdAccessToken.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entraIdAccessToken.js","sourceRoot":"","sources":["../../src/common/entraIdAccessToken.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,8CAA0E;AAC1E,qCAAsC;AACtC,2CAIqB;AAErB,0CAA0C;AAC1C,yCAA0D;AAE1D,MAAM,kBAAkB;IAKtB,YAAY,UAA4B;QAKjC,4BAAuB,GAAG,KAAK,IAAmB,EAAE;YACzD,IAAI,CAAC;gBACH,mBAAU,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;gBAClD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAY,CAAC,QAAQ,CAAC,uCAA2B,CAAC,KAAK,CAAC,CAAC;gBACxF,IAAI,CAAC,WAAW,EAAE,CAAC;oBACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBACnD,CAAC;gBACD,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;oBACrC,mHAAmH;oBACnH,mBAAU,CAAC,IAAI,CAAC,yDAAyD,CAAC,CAAC;oBAC3E,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;gBAC/B,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC,kBAAkB,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,sCAA0B,CAAC,+BAA+B,CAAC,GAAG,IAAI,CAAC,KAAM,CAAC;gBACtF,mBAAU,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;gBACjF,mBAAU,CAAC,IAAI,CACb,+BAA+B,EAC/B,IAAI,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAC9C,CAAC;gBACF,OAAO;YACT,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,mBAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtB,OAAO,CAAC,GAAG,CAAC,wCAA4B,CAAC,qBAAqB,CAAC,GAAG,MAAM,CAAC;gBACzE,MAAM,IAAI,KAAK,CAAC,uCAA4B,CAAC,aAAa,CAAC,CAAC;YAC9D,CAAC;QACH,CAAC,CAAC;QAkBM,yCAAoC,GAAG,GAAS,EAAE;YACxD,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,sCAA0B,CAAC,+BAA+B,CAAC,CAAC;gBACtF,IAAI,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO;gBACT,CAAC;gBACD,MAAM,MAAM,GAAG,IAAA,gBAAQ,EAA6B,KAAK,CAAC,CAAC;gBAC3D,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;oBACnC,OAAO;gBACT,CAAC,CAAC,UAAU;gBACZ,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,GAAI,GAAG,IAAI,CAAC,CAAC;gBAC5C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;gBACnB,IAAI,CAAC,gBAAgB,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YAC3C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;QACH,CAAC,CAAC;QAhEA,IAAI,CAAC,WAAW,GAAG,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,IAAI,iCAAsB,EAAE,CAAC;QAC9D,IAAI,CAAC,oCAAoC,EAAE,CAAC;IAC9C,CAAC;IA8BM,kCAAkC;QACvC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,mBAAU,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC;YACnE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAiB,GAAG,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QACnE,MAAM,6BAA6B,GACjC,YAAY;YACZ,uCAA2B,CAAC,+CAA+C,GAAG,EAAE,GAAG,IAAI,CAAC;QAC1F,mBAAU,CAAC,IAAI,CACb,0CAA0C,EAC1C,6BAA6B,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAC7C,CAAC;QACF,OAAO,6BAA6B,CAAC;IACvC,CAAC;CAmBF;AAEQ,gDAAkB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { DefaultAzureCredential, TokenCredential } from \"@azure/identity\";\nimport { coreLogger } from \"./logger\";\nimport {\n EntraIdAccessTokenConstants,\n InternalEnvironmentVariables,\n ServiceEnvironmentVariable,\n} from \"./constants\";\nimport { AccessTokenClaims } from \"./types\";\nimport { parseJwt } from \"../utils/utils\";\nimport { ServiceErrorMessageConstants } from \"./messages\";\n\nclass EntraIdAccessToken {\n public token?: string;\n private _expiryTimestamp?: number; // in milli seconds\n private _credential?: TokenCredential;\n\n constructor(credential?: TokenCredential) {\n this._credential = credential ?? new DefaultAzureCredential();\n this.setEntraIdAccessTokenFromEnvironment();\n }\n\n public fetchEntraIdAccessToken = async (): Promise<void> => {\n try {\n coreLogger.info(\"Fetching entra id access token\");\n const accessToken = await this._credential!.getToken(EntraIdAccessTokenConstants.SCOPE);\n if (!accessToken) {\n throw new Error(\"Entra id access token is null\");\n }\n if (accessToken.token === this.token) {\n // azure identity library can fetch the same token again from cache. 10 mins before expiry, it allows token refresh\n coreLogger.info(\"Cached access token is returned, will be retried again.\");\n return;\n }\n this.token = accessToken.token;\n this._expiryTimestamp = accessToken.expiresOnTimestamp;\n process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN] = this.token!;\n coreLogger.info(\"Entra id access token fetched and set in environment variable\");\n coreLogger.info(\n \"Entra id access token expiry:\",\n new Date(this._expiryTimestamp).toISOString(),\n );\n return;\n } catch (err) {\n coreLogger.error(err);\n process.env[InternalEnvironmentVariables.MPT_SETUP_FATAL_ERROR] = \"true\";\n throw new Error(ServiceErrorMessageConstants.NO_AUTH_ERROR);\n }\n };\n\n public doesEntraIdAccessTokenNeedRotation(): boolean {\n if (!this.token) {\n coreLogger.info(\"Entra id access token not found, needs rotation\");\n return true;\n }\n const lifetimeLeft = this._expiryTimestamp! - new Date().getTime();\n const doesEntraTokenRequireRotation =\n lifetimeLeft <\n EntraIdAccessTokenConstants.LIFETIME_LEFT_THRESHOLD_IN_MINUTES_FOR_ROTATION * 60 * 1000;\n coreLogger.info(\n \"Entra id access token requires rotation:\",\n doesEntraTokenRequireRotation ? \"Yes\" : \"No\",\n );\n return doesEntraTokenRequireRotation;\n }\n\n private setEntraIdAccessTokenFromEnvironment = (): void => {\n try {\n const token = process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_ACCESS_TOKEN];\n if (!token) {\n return;\n }\n const claims = parseJwt<Partial<AccessTokenClaims>>(token);\n if (claims.accountId || claims.aid) {\n return;\n } // mpt PAT\n const expiry = new Date(claims.exp! * 1000);\n this.token = token;\n this._expiryTimestamp = expiry.getTime();\n } catch (_) {\n return;\n }\n };\n}\n\nexport { EntraIdAccessToken };\n"]}
@@ -0,0 +1,12 @@
1
+ export declare class EnvironmentVariables {
2
+ get accessToken(): string;
3
+ runId: string;
4
+ accountId: string | undefined;
5
+ userId: string | undefined;
6
+ userName: string | undefined;
7
+ correlationId: string | undefined;
8
+ shardId: string | undefined;
9
+ region: string | undefined;
10
+ constructor();
11
+ }
12
+ //# sourceMappingURL=environmentVariables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environmentVariables.d.ts","sourceRoot":"","sources":["../../src/common/environmentVariables.ts"],"names":[],"mappings":"AAKA,qBAAa,oBAAoB;IAC/B,IAAI,WAAW,IAAI,MAAM,CAExB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;;CAK5B"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.EnvironmentVariables = void 0;
6
+ const crypto_1 = require("crypto");
7
+ class EnvironmentVariables {
8
+ get accessToken() {
9
+ return process.env["PLAYWRIGHT_SERVICE_ACCESS_TOKEN"];
10
+ }
11
+ constructor() {
12
+ this.runId = process.env["PLAYWRIGHT_SERVICE_RUN_ID"];
13
+ this.correlationId = (0, crypto_1.randomUUID)();
14
+ }
15
+ }
16
+ exports.EnvironmentVariables = EnvironmentVariables;
17
+ //# sourceMappingURL=environmentVariables.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environmentVariables.js","sourceRoot":"","sources":["../../src/common/environmentVariables.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,mCAAoC;AAEpC,MAAa,oBAAoB;IAC/B,IAAI,WAAW;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAE,CAAC;IACzD,CAAC;IAQD;QACE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAE,CAAC;QACvD,IAAI,CAAC,aAAa,GAAG,IAAA,mBAAU,GAAE,CAAC;IACpC,CAAC;CACF;AAfD,oDAeC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"crypto\";\n\nexport class EnvironmentVariables {\n get accessToken(): string {\n return process.env[\"PLAYWRIGHT_SERVICE_ACCESS_TOKEN\"]!;\n }\n runId: string;\n accountId: string | undefined;\n userId: string | undefined;\n userName: string | undefined;\n correlationId: string | undefined;\n shardId: string | undefined;\n region: string | undefined;\n constructor() {\n this.runId = process.env[\"PLAYWRIGHT_SERVICE_RUN_ID\"]!;\n this.correlationId = randomUUID();\n }\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare const loadCustomerGlobalFunction: (rootDir: string, customerFunctionFileName?: string) => any;
2
+ //# sourceMappingURL=executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../src/common/executor.ts"],"names":[],"mappings":"AAqEA,eAAO,MAAM,0BAA0B,YAC5B,MAAM,6BACY,MAAM,KAChC,GAMF,CAAC"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.loadCustomerGlobalFunction = void 0;
6
+ const tslib_1 = require("tslib");
7
+ const path_1 = require("path");
8
+ const fs_1 = tslib_1.__importDefault(require("fs"));
9
+ const url_1 = tslib_1.__importDefault(require("url"));
10
+ const path_2 = tslib_1.__importDefault(require("path"));
11
+ const messages_1 = require("./messages");
12
+ const getPackageJsonPath = (folderPath) => {
13
+ const packageJsonPath = path_2.default.join(folderPath, "package.json");
14
+ if (fs_1.default.existsSync(packageJsonPath)) {
15
+ return packageJsonPath;
16
+ }
17
+ const parentFolder = path_2.default.dirname(folderPath);
18
+ if (folderPath === parentFolder) {
19
+ return "";
20
+ }
21
+ const result = getPackageJsonPath(parentFolder);
22
+ return result;
23
+ };
24
+ const folderIsModule = (folder) => {
25
+ const packageJsonPath = getPackageJsonPath(folder);
26
+ if (!packageJsonPath)
27
+ return false;
28
+ // Rely on `require` internal caching logic.
29
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
30
+ return require(packageJsonPath).type === "module";
31
+ };
32
+ const fileIsModule = (file) => {
33
+ if (file.endsWith(".mjs") || file.endsWith(".mts"))
34
+ return true;
35
+ if (file.endsWith(".cjs") || file.endsWith(".cts"))
36
+ return false;
37
+ const folder = path_2.default.dirname(file);
38
+ return folderIsModule(folder);
39
+ };
40
+ const resolveFile = (id, rootDir) => {
41
+ if (!id) {
42
+ return undefined;
43
+ }
44
+ const localPath = path_2.default.resolve(rootDir, id);
45
+ if (fs_1.default.existsSync(localPath)) {
46
+ return localPath;
47
+ }
48
+ return require.resolve(id, { paths: [rootDir] });
49
+ };
50
+ const requireOrImportDefaultFunction = async (file) => {
51
+ const fileName = (0, path_1.basename)(file);
52
+ const isModule = fileIsModule(file);
53
+ let func;
54
+ if (isModule)
55
+ func = await eval(`import(${JSON.stringify(url_1.default.pathToFileURL(file))})`);
56
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
57
+ else
58
+ func = require(file);
59
+ if (func && typeof func === "object" && "default" in func) {
60
+ func = func.default;
61
+ }
62
+ if (typeof func !== "function") {
63
+ // match playwright's error style
64
+ const error = new Error(`${fileName}: ${messages_1.ServiceErrorMessageConstants.INVALID_GLOBAL_FUNCTION}`);
65
+ error.stack = "";
66
+ throw error;
67
+ }
68
+ return func;
69
+ };
70
+ const loadCustomerGlobalFunction = (rootDir, customerFunctionFileName) => {
71
+ var _a;
72
+ if (!customerFunctionFileName) {
73
+ return null;
74
+ }
75
+ const file = path_2.default.resolve(rootDir, (_a = resolveFile(customerFunctionFileName, rootDir)) !== null && _a !== void 0 ? _a : "");
76
+ return requireOrImportDefaultFunction(file);
77
+ };
78
+ exports.loadCustomerGlobalFunction = loadCustomerGlobalFunction;
79
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/common/executor.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { basename } from \"path\";\nimport fs from \"fs\";\nimport url from \"url\";\nimport path from \"path\";\nimport { ServiceErrorMessageConstants } from \"./messages\";\n\nconst getPackageJsonPath = (folderPath: string): string => {\n const packageJsonPath = path.join(folderPath, \"package.json\");\n if (fs.existsSync(packageJsonPath)) {\n return packageJsonPath;\n }\n\n const parentFolder = path.dirname(folderPath);\n if (folderPath === parentFolder) {\n return \"\";\n }\n\n const result = getPackageJsonPath(parentFolder);\n return result;\n};\n\nconst folderIsModule = (folder: string): boolean => {\n const packageJsonPath = getPackageJsonPath(folder);\n if (!packageJsonPath) return false;\n // Rely on `require` internal caching logic.\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require(packageJsonPath).type === \"module\";\n};\n\nconst fileIsModule = (file: string): boolean => {\n if (file.endsWith(\".mjs\") || file.endsWith(\".mts\")) return true;\n if (file.endsWith(\".cjs\") || file.endsWith(\".cts\")) return false;\n const folder = path.dirname(file);\n return folderIsModule(folder);\n};\n\nconst resolveFile = (id: string | undefined, rootDir: string): string | undefined => {\n if (!id) {\n return undefined;\n }\n const localPath = path.resolve(rootDir, id);\n if (fs.existsSync(localPath)) {\n return localPath;\n }\n return require.resolve(id, { paths: [rootDir] });\n};\n\nconst requireOrImportDefaultFunction = async (file: string): Promise<any> => {\n const fileName = basename(file);\n const isModule = fileIsModule(file);\n let func: any;\n if (isModule) func = await eval(`import(${JSON.stringify(url.pathToFileURL(file))})`);\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n else func = require(file);\n if (func && typeof func === \"object\" && \"default\" in func) {\n func = func.default;\n }\n if (typeof func !== \"function\") {\n // match playwright's error style\n const error = new Error(`${fileName}: ${ServiceErrorMessageConstants.INVALID_GLOBAL_FUNCTION}`);\n error.stack = \"\";\n throw error;\n }\n return func;\n};\n\nexport const loadCustomerGlobalFunction = (\n rootDir: string,\n customerFunctionFileName?: string,\n): any => {\n if (!customerFunctionFileName) {\n return null;\n }\n const file = path.resolve(rootDir, resolveFile(customerFunctionFileName, rootDir) ?? \"\");\n return requireOrImportDefaultFunction(file);\n};\n"]}
@@ -0,0 +1,5 @@
1
+ import { PipelineResponse, HttpMethods } from "@azure/core-rest-pipeline";
2
+ export declare class HttpService {
3
+ callAPI(method: HttpMethods, url: string, data: any | null, token: string, contentType: string, correlationId: string): Promise<PipelineResponse>;
4
+ }
5
+ //# sourceMappingURL=httpService.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpService.d.ts","sourceRoot":"","sources":["../../src/common/httpService.ts"],"names":[],"mappings":"AAIA,OAAO,EAIL,gBAAgB,EAChB,WAAW,EAEZ,MAAM,2BAA2B,CAAC;AAKnC,qBAAa,WAAW;IACT,OAAO,CAClB,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,GAAG,GAAG,IAAI,EAChB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,CAAC;CA0B7B"}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.HttpService = void 0;
6
+ const crypto_1 = require("crypto");
7
+ const core_rest_pipeline_1 = require("@azure/core-rest-pipeline");
8
+ const logger_1 = require("./logger");
9
+ const HTTP_CALL_TIMEOUT = 70000;
10
+ class HttpService {
11
+ async callAPI(method, url, data, token, contentType, correlationId) {
12
+ const pipeline = (0, core_rest_pipeline_1.createPipelineFromOptions)({
13
+ loggingOptions: {
14
+ logger: logger_1.reporterLogger.info,
15
+ },
16
+ });
17
+ const httpClient = (0, core_rest_pipeline_1.createDefaultHttpClient)();
18
+ const request = (0, core_rest_pipeline_1.createPipelineRequest)({
19
+ url,
20
+ method,
21
+ headers: (0, core_rest_pipeline_1.createHttpHeaders)({
22
+ "Content-Type": contentType,
23
+ Accept: "*/*",
24
+ Authorization: `Bearer ${token}`,
25
+ "x-ms-client-request-id": `${(0, crypto_1.randomUUID)()}`,
26
+ "x-correlation-id": correlationId,
27
+ }),
28
+ timeout: HTTP_CALL_TIMEOUT,
29
+ });
30
+ if (data) {
31
+ request.body = data;
32
+ }
33
+ return pipeline.sendRequest(httpClient, request);
34
+ }
35
+ }
36
+ exports.HttpService = HttpService;
37
+ //# sourceMappingURL=httpService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpService.js","sourceRoot":"","sources":["../../src/common/httpService.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,mCAAoC;AACpC,kEAOmC;AACnC,qCAA0C;AAE1C,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAEhC,MAAa,WAAW;IACf,KAAK,CAAC,OAAO,CAClB,MAAmB,EACnB,GAAW,EACX,IAAgB,EAChB,KAAa,EACb,WAAmB,EACnB,aAAqB;QAErB,MAAM,QAAQ,GAAG,IAAA,8CAAyB,EAAC;YACzC,cAAc,EAAE;gBACd,MAAM,EAAE,uBAAc,CAAC,IAAI;aAC5B;SACF,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,IAAA,4CAAuB,GAAE,CAAC;QAC7C,MAAM,OAAO,GAAG,IAAA,0CAAqB,EAAC;YACpC,GAAG;YACH,MAAM;YACN,OAAO,EAAE,IAAA,sCAAiB,EAAC;gBACzB,cAAc,EAAE,WAAW;gBAC3B,MAAM,EAAE,KAAK;gBACb,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,wBAAwB,EAAE,GAAG,IAAA,mBAAU,GAAE,EAAE;gBAC3C,kBAAkB,EAAE,aAAa;aAClC,CAAC;YACF,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;QAEH,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACtB,CAAC;QACD,OAAO,QAAQ,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;CACF;AAlCD,kCAkCC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"crypto\";\nimport {\n createDefaultHttpClient,\n createHttpHeaders,\n createPipelineRequest,\n PipelineResponse,\n HttpMethods,\n createPipelineFromOptions,\n} from \"@azure/core-rest-pipeline\";\nimport { reporterLogger } from \"./logger\";\n\nconst HTTP_CALL_TIMEOUT = 70000;\n\nexport class HttpService {\n public async callAPI(\n method: HttpMethods,\n url: string,\n data: any | null,\n token: string,\n contentType: string,\n correlationId: string,\n ): Promise<PipelineResponse> {\n const pipeline = createPipelineFromOptions({\n loggingOptions: {\n logger: reporterLogger.info,\n },\n });\n\n const httpClient = createDefaultHttpClient();\n const request = createPipelineRequest({\n url,\n method,\n headers: createHttpHeaders({\n \"Content-Type\": contentType,\n Accept: \"*/*\",\n Authorization: `Bearer ${token}`,\n \"x-ms-client-request-id\": `${randomUUID()}`,\n \"x-correlation-id\": correlationId,\n }),\n timeout: HTTP_CALL_TIMEOUT,\n });\n\n if (data) {\n request.body = data;\n }\n return pipeline.sendRequest(httpClient, request);\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare const coreLogger: import("@azure/logger").AzureLogger;
2
+ export declare const reporterLogger: import("@azure/logger").AzureLogger;
3
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/common/logger.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,UAAU,qCAA4B,CAAC;AACpD,eAAO,MAAM,cAAc,qCAAqC,CAAC"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.reporterLogger = exports.coreLogger = void 0;
6
+ const logger_1 = require("@azure/logger");
7
+ exports.coreLogger = (0, logger_1.createClientLogger)("mpt");
8
+ exports.reporterLogger = (0, logger_1.createClientLogger)("mpt:reporter");
9
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/common/logger.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,0CAAmD;AAEtC,QAAA,UAAU,GAAG,IAAA,2BAAkB,EAAC,KAAK,CAAC,CAAC;AACvC,QAAA,cAAc,GAAG,IAAA,2BAAkB,EAAC,cAAc,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createClientLogger } from \"@azure/logger\";\n\nexport const coreLogger = createClientLogger(\"mpt\");\nexport const reporterLogger = createClientLogger(\"mpt:reporter\");\n"]}
@@ -0,0 +1,9 @@
1
+ export declare const ServiceErrorMessageConstants: {
2
+ NO_AUTH_ERROR: string;
3
+ NO_SERVICE_URL_ERROR: string;
4
+ INVALID_MPT_PAT_ERROR: string;
5
+ EXPIRED_MPT_PAT_ERROR: string;
6
+ INVALID_GLOBAL_FUNCTION: string;
7
+ INVALID_PLAYWRIGHT_VERSION_ERROR: string;
8
+ };
9
+ //# sourceMappingURL=messages.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/common/messages.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,4BAA4B;;;;;;;CAWxC,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.ServiceErrorMessageConstants = void 0;
6
+ exports.ServiceErrorMessageConstants = {
7
+ NO_AUTH_ERROR: "Could not authenticate with the service. Please refer to https://aka.ms/mpt/authentication for more information.", // no mpt pat set and could not fetch entra token
8
+ NO_SERVICE_URL_ERROR: "The value for the PLAYWRIGHT_SERVICE_URL variable is not set correctly. Please verify the URL and try again.",
9
+ INVALID_MPT_PAT_ERROR: "The authentication token provided is invalid. Check the token and try again.",
10
+ EXPIRED_MPT_PAT_ERROR: "Your authentication token has expired. Create a new token.",
11
+ INVALID_GLOBAL_FUNCTION: "file must export a single function",
12
+ INVALID_PLAYWRIGHT_VERSION_ERROR: "The Playwright version you are using is not supported. See the list of supported versions at https://aka.ms/mpt/supported-versions.",
13
+ };
14
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/common/messages.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAErB,QAAA,4BAA4B,GAAG;IAC1C,aAAa,EACX,kHAAkH,EAAE,iDAAiD;IACvK,oBAAoB,EAClB,8GAA8G;IAChH,qBAAqB,EACnB,8EAA8E;IAChF,qBAAqB,EAAE,4DAA4D;IACnF,uBAAuB,EAAE,oCAAoC;IAC7D,gCAAgC,EAC9B,qIAAqI;CACxI,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport const ServiceErrorMessageConstants = {\n NO_AUTH_ERROR:\n \"Could not authenticate with the service. Please refer to https://aka.ms/mpt/authentication for more information.\", // no mpt pat set and could not fetch entra token\n NO_SERVICE_URL_ERROR:\n \"The value for the PLAYWRIGHT_SERVICE_URL variable is not set correctly. Please verify the URL and try again.\",\n INVALID_MPT_PAT_ERROR:\n \"The authentication token provided is invalid. Check the token and try again.\",\n EXPIRED_MPT_PAT_ERROR: \"Your authentication token has expired. Create a new token.\",\n INVALID_GLOBAL_FUNCTION: \"file must export a single function\",\n INVALID_PLAYWRIGHT_VERSION_ERROR:\n \"The Playwright version you are using is not supported. See the list of supported versions at https://aka.ms/mpt/supported-versions.\",\n};\n"]}
@@ -0,0 +1,16 @@
1
+ export declare class MultiMap<K, V> {
2
+ private _map;
3
+ constructor();
4
+ set(key: K, value: V): void;
5
+ get(key: K): V[];
6
+ has(key: K): boolean;
7
+ delete(key: K, value: V): void;
8
+ deleteAll(key: K): void;
9
+ hasValue(key: K, value: V): boolean;
10
+ get size(): number;
11
+ [Symbol.iterator](): Iterator<[K, V[]]>;
12
+ keys(): IterableIterator<K>;
13
+ values(): Iterable<V>;
14
+ clear(): void;
15
+ }
16
+ //# sourceMappingURL=multimap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multimap.d.ts","sourceRoot":"","sources":["../../src/common/multimap.ts"],"names":[],"mappings":"AAGA,qBAAa,QAAQ,CAAC,CAAC,EAAE,CAAC;IACxB,OAAO,CAAC,IAAI,CAAc;;IAM1B,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAS3B,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE;IAIhB,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,OAAO;IAIpB,MAAM,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAa9B,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI;IAIvB,QAAQ,CAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO;IAQnC,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAIvC,IAAI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IAI3B,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC;IAQrB,KAAK,IAAI,IAAI;CAGd"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.MultiMap = void 0;
6
+ class MultiMap {
7
+ constructor() {
8
+ this._map = new Map();
9
+ }
10
+ set(key, value) {
11
+ let values = this._map.get(key);
12
+ if (!values) {
13
+ values = [];
14
+ this._map.set(key, values);
15
+ }
16
+ values.push(value);
17
+ }
18
+ get(key) {
19
+ return this._map.get(key) || [];
20
+ }
21
+ has(key) {
22
+ return this._map.has(key);
23
+ }
24
+ delete(key, value) {
25
+ const values = this._map.get(key);
26
+ if (!values) {
27
+ return;
28
+ }
29
+ if (values.includes(value)) {
30
+ this._map.set(key, values.filter((v) => value !== v));
31
+ }
32
+ }
33
+ deleteAll(key) {
34
+ this._map.delete(key);
35
+ }
36
+ hasValue(key, value) {
37
+ const values = this._map.get(key);
38
+ if (!values) {
39
+ return false;
40
+ }
41
+ return values.includes(value);
42
+ }
43
+ get size() {
44
+ return this._map.size;
45
+ }
46
+ [Symbol.iterator]() {
47
+ return this._map[Symbol.iterator]();
48
+ }
49
+ keys() {
50
+ return this._map.keys();
51
+ }
52
+ values() {
53
+ const result = [];
54
+ for (const key of this.keys()) {
55
+ result.push(...this.get(key));
56
+ }
57
+ return result;
58
+ }
59
+ clear() {
60
+ this._map.clear();
61
+ }
62
+ }
63
+ exports.MultiMap = MultiMap;
64
+ //# sourceMappingURL=multimap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multimap.js","sourceRoot":"","sources":["../../src/common/multimap.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,MAAa,QAAQ;IAGnB;QACE,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,CAAC;IAED,GAAG,CAAC,GAAM,EAAE,KAAQ;QAClB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC7B,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,GAAM;QACR,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,GAAM,EAAE,KAAQ;QACrB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;QACT,CAAC;QACD,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,GAAG,CACX,GAAG,EACH,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAClC,CAAC;QACJ,CAAC;IACH,CAAC;IAED,SAAS,CAAC,GAAM;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,GAAM,EAAE,KAAQ;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,CAAC,MAAM,CAAC,QAAQ,CAAC;QACf,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;IACtC,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM;QACJ,MAAM,MAAM,GAAQ,EAAE,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;CACF;AAxED,4BAwEC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport class MultiMap<K, V> {\n private _map: Map<K, V[]>;\n\n constructor() {\n this._map = new Map<K, V[]>();\n }\n\n set(key: K, value: V): void {\n let values = this._map.get(key);\n if (!values) {\n values = [];\n this._map.set(key, values);\n }\n values.push(value);\n }\n\n get(key: K): V[] {\n return this._map.get(key) || [];\n }\n\n has(key: K): boolean {\n return this._map.has(key);\n }\n\n delete(key: K, value: V): void {\n const values = this._map.get(key);\n if (!values) {\n return;\n }\n if (values.includes(value)) {\n this._map.set(\n key,\n values.filter((v) => value !== v),\n );\n }\n }\n\n deleteAll(key: K): void {\n this._map.delete(key);\n }\n\n hasValue(key: K, value: V): boolean {\n const values = this._map.get(key);\n if (!values) {\n return false;\n }\n return values.includes(value);\n }\n\n get size(): number {\n return this._map.size;\n }\n\n [Symbol.iterator](): Iterator<[K, V[]]> {\n return this._map[Symbol.iterator]();\n }\n\n keys(): IterableIterator<K> {\n return this._map.keys();\n }\n\n values(): Iterable<V> {\n const result: V[] = [];\n for (const key of this.keys()) {\n result.push(...this.get(key));\n }\n return result;\n }\n\n clear(): void {\n this._map.clear();\n }\n}\n"]}
@@ -0,0 +1,12 @@
1
+ import { PlaywrightServiceAdditionalOptions, OsType } from "./types";
2
+ declare class PlaywrightServiceConfig {
3
+ serviceOs: OsType;
4
+ runId: string;
5
+ timeout: number;
6
+ slowMo: number;
7
+ exposeNetwork: string;
8
+ constructor();
9
+ setOptions: (options?: PlaywrightServiceAdditionalOptions) => void;
10
+ }
11
+ export { PlaywrightServiceConfig };
12
+ //# sourceMappingURL=playwrightServiceConfig.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwrightServiceConfig.d.ts","sourceRoot":"","sources":["../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,kCAAkC,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGrE,cAAM,uBAAuB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;;IAY7B,UAAU,aAAc,kCAAkC,KAAG,IAAI,CAkB/D;CACH;AAED,OAAO,EAAE,uBAAuB,EAAE,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ // Copyright (c) Microsoft Corporation.
3
+ // Licensed under the MIT License.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.PlaywrightServiceConfig = void 0;
6
+ const constants_1 = require("./constants");
7
+ const utils_1 = require("../utils/utils");
8
+ class PlaywrightServiceConfig {
9
+ constructor() {
10
+ this.setOptions = (options) => {
11
+ if (options === null || options === void 0 ? void 0 : options.exposeNetwork) {
12
+ this.exposeNetwork = options.exposeNetwork;
13
+ }
14
+ if (options === null || options === void 0 ? void 0 : options.runId) {
15
+ this.runId = options.runId;
16
+ process.env[constants_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_RUN_ID] = this.runId;
17
+ }
18
+ if (options === null || options === void 0 ? void 0 : options.os) {
19
+ this.serviceOs = options.os;
20
+ process.env[constants_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_OS] = this.serviceOs;
21
+ }
22
+ if (options === null || options === void 0 ? void 0 : options.slowMo) {
23
+ this.slowMo = options.slowMo;
24
+ }
25
+ if (options === null || options === void 0 ? void 0 : options.timeout) {
26
+ this.timeout = options.timeout;
27
+ }
28
+ };
29
+ this.serviceOs = (process.env[constants_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_OS] ||
30
+ constants_1.DefaultConnectOptionsConstants.DEFAULT_SERVICE_OS);
31
+ this.runId =
32
+ process.env[constants_1.ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_RUN_ID] || (0, utils_1.getDefaultRunId)();
33
+ this.timeout = constants_1.DefaultConnectOptionsConstants.DEFAULT_TIMEOUT;
34
+ this.slowMo = constants_1.DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;
35
+ this.exposeNetwork = constants_1.DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;
36
+ }
37
+ }
38
+ exports.PlaywrightServiceConfig = PlaywrightServiceConfig;
39
+ //# sourceMappingURL=playwrightServiceConfig.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playwrightServiceConfig.js","sourceRoot":"","sources":["../../src/common/playwrightServiceConfig.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,2CAAyF;AAEzF,0CAAiD;AAEjD,MAAM,uBAAuB;IAO3B;QAUA,eAAU,GAAG,CAAC,OAA4C,EAAQ,EAAE;YAClE,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,aAAa,EAAE,CAAC;gBAC3B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;YAC7C,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;gBAC3B,OAAO,CAAC,GAAG,CAAC,sCAA0B,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC;YACjF,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,EAAE,EAAE,CAAC;gBAChB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,sCAA0B,CAAC,qBAAqB,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;YACjF,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,MAAM,EAAE,CAAC;gBACpB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC/B,CAAC;YACD,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,OAAO,EAAE,CAAC;gBACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;YACjC,CAAC;QACH,CAAC,CAAC;QA3BA,IAAI,CAAC,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,sCAA0B,CAAC,qBAAqB,CAAC;YAC7E,0CAA8B,CAAC,kBAAkB,CAAW,CAAC;QAC/D,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,GAAG,CAAC,sCAA0B,CAAC,yBAAyB,CAAC,IAAI,IAAA,uBAAe,GAAE,CAAC;QACzF,IAAI,CAAC,OAAO,GAAG,0CAA8B,CAAC,eAAe,CAAC;QAC9D,IAAI,CAAC,MAAM,GAAG,0CAA8B,CAAC,eAAe,CAAC;QAC7D,IAAI,CAAC,aAAa,GAAG,0CAA8B,CAAC,sBAAsB,CAAC;IAC7E,CAAC;CAqBF;AAEQ,0DAAuB","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { DefaultConnectOptionsConstants, ServiceEnvironmentVariable } from \"./constants\";\nimport { PlaywrightServiceAdditionalOptions, OsType } from \"./types\";\nimport { getDefaultRunId } from \"../utils/utils\";\n\nclass PlaywrightServiceConfig {\n public serviceOs: OsType;\n public runId: string;\n public timeout: number;\n public slowMo: number;\n public exposeNetwork: string;\n\n constructor() {\n this.serviceOs = (process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_OS] ||\n DefaultConnectOptionsConstants.DEFAULT_SERVICE_OS) as OsType;\n this.runId =\n process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_RUN_ID] || getDefaultRunId();\n this.timeout = DefaultConnectOptionsConstants.DEFAULT_TIMEOUT;\n this.slowMo = DefaultConnectOptionsConstants.DEFAULT_SLOW_MO;\n this.exposeNetwork = DefaultConnectOptionsConstants.DEFAULT_EXPOSE_NETWORK;\n }\n\n setOptions = (options?: PlaywrightServiceAdditionalOptions): void => {\n if (options?.exposeNetwork) {\n this.exposeNetwork = options.exposeNetwork;\n }\n if (options?.runId) {\n this.runId = options.runId;\n process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_RUN_ID] = this.runId;\n }\n if (options?.os) {\n this.serviceOs = options.os;\n process.env[ServiceEnvironmentVariable.PLAYWRIGHT_SERVICE_OS] = this.serviceOs;\n }\n if (options?.slowMo) {\n this.slowMo = options.slowMo;\n }\n if (options?.timeout) {\n this.timeout = options.timeout;\n }\n };\n}\n\nexport { PlaywrightServiceConfig };\n"]}