@azure/playwright 1.1.3-alpha.20260310.1 → 1.1.3
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.
- package/dist/browser/common/constants.d.ts +3 -0
- package/dist/browser/common/constants.d.ts.map +1 -1
- package/dist/browser/common/constants.js +3 -0
- package/dist/browser/common/constants.js.map +1 -1
- package/dist/browser/common/types.d.ts +8 -0
- package/dist/browser/common/types.d.ts.map +1 -1
- package/dist/browser/common/types.js.map +1 -1
- package/dist/browser/core/playwrightService.d.ts.map +1 -1
- package/dist/browser/core/playwrightService.js +6 -0
- package/dist/browser/core/playwrightService.js.map +1 -1
- package/dist/browser/utils/utils.d.ts.map +1 -1
- package/dist/browser/utils/utils.js +2 -3
- package/dist/browser/utils/utils.js.map +1 -1
- package/dist/commonjs/common/constants.d.ts +3 -0
- package/dist/commonjs/common/constants.d.ts.map +1 -1
- package/dist/commonjs/common/constants.js +97 -126
- package/dist/commonjs/common/constants.js.map +1 -7
- package/dist/commonjs/common/customerConfig.js +14 -31
- package/dist/commonjs/common/customerConfig.js.map +1 -7
- package/dist/commonjs/common/entraIdAccessToken.js +83 -106
- package/dist/commonjs/common/entraIdAccessToken.js.map +1 -7
- package/dist/commonjs/common/environmentVariables.js +24 -43
- package/dist/commonjs/common/environmentVariables.js.map +1 -7
- package/dist/commonjs/common/executor.js +67 -88
- package/dist/commonjs/common/executor.js.map +1 -7
- package/dist/commonjs/common/httpService.js +35 -54
- package/dist/commonjs/common/httpService.js.map +1 -7
- package/dist/commonjs/common/logger.js +8 -28
- package/dist/commonjs/common/logger.js.map +1 -7
- package/dist/commonjs/common/messages.js +169 -189
- package/dist/commonjs/common/messages.js.map +1 -7
- package/dist/commonjs/common/playwrightServiceConfig.js +98 -113
- package/dist/commonjs/common/playwrightServiceConfig.js.map +1 -7
- package/dist/commonjs/common/state.js +10 -30
- package/dist/commonjs/common/state.js.map +1 -7
- package/dist/commonjs/common/types.d.ts +8 -0
- package/dist/commonjs/common/types.d.ts.map +1 -1
- package/dist/commonjs/common/types.js +5 -15
- package/dist/commonjs/common/types.js.map +1 -7
- package/dist/commonjs/core/global/playwright-service-global-setup.js +26 -52
- package/dist/commonjs/core/global/playwright-service-global-setup.js.map +1 -7
- package/dist/commonjs/core/global/playwright-service-global-teardown.js +20 -49
- package/dist/commonjs/core/global/playwright-service-global-teardown.js.map +1 -7
- package/dist/commonjs/core/initializePlaywrightServiceTestRun.js +27 -39
- package/dist/commonjs/core/initializePlaywrightServiceTestRun.js.map +1 -7
- package/dist/commonjs/core/playwrightService.d.ts.map +1 -1
- package/dist/commonjs/core/playwrightService.js +211 -166
- package/dist/commonjs/core/playwrightService.js.map +1 -7
- package/dist/commonjs/core/playwrightServiceEntra.js +48 -67
- package/dist/commonjs/core/playwrightServiceEntra.js.map +1 -7
- package/dist/commonjs/core/playwrightServiceUtils.d.ts.map +1 -1
- package/dist/commonjs/core/playwrightServiceUtils.js +11 -44
- package/dist/commonjs/core/playwrightServiceUtils.js.map +1 -7
- package/dist/commonjs/index.js +18 -36
- package/dist/commonjs/index.js.map +1 -7
- package/dist/commonjs/reporter/index.js +15 -34
- package/dist/commonjs/reporter/index.js.map +1 -7
- package/dist/commonjs/reporter/playwrightReporter.js +216 -222
- package/dist/commonjs/reporter/playwrightReporter.js.map +1 -7
- package/dist/commonjs/utils/PlaywrightServiceClient.js +91 -140
- package/dist/commonjs/utils/PlaywrightServiceClient.js.map +1 -7
- package/dist/commonjs/utils/cIInfoProvider.js +74 -81
- package/dist/commonjs/utils/cIInfoProvider.js.map +1 -7
- package/dist/commonjs/utils/getPackageVersion.d.ts.map +1 -1
- package/dist/commonjs/utils/getPackageVersion.js +19 -50
- package/dist/commonjs/utils/getPackageVersion.js.map +1 -7
- package/dist/commonjs/utils/getPlaywrightVersion.js +21 -42
- package/dist/commonjs/utils/getPlaywrightVersion.js.map +1 -7
- package/dist/commonjs/utils/packageManager.js +40 -59
- package/dist/commonjs/utils/packageManager.js.map +1 -7
- package/dist/commonjs/utils/parseJwt.js +17 -37
- package/dist/commonjs/utils/parseJwt.js.map +1 -7
- package/dist/commonjs/utils/playwrightReporterStorageManager.js +342 -381
- package/dist/commonjs/utils/playwrightReporterStorageManager.js.map +1 -7
- package/dist/commonjs/utils/utils.d.ts.map +1 -1
- package/dist/commonjs/utils/utils.js +368 -417
- package/dist/commonjs/utils/utils.js.map +1 -7
- package/dist/esm/common/constants.d.ts +3 -0
- package/dist/esm/common/constants.d.ts.map +1 -1
- package/dist/esm/common/constants.js +4 -0
- package/dist/esm/common/constants.js.map +2 -2
- package/dist/esm/common/types.d.ts +8 -0
- package/dist/esm/common/types.d.ts.map +1 -1
- package/dist/esm/core/playwrightService.d.ts.map +1 -1
- package/dist/esm/core/playwrightService.js +6 -0
- package/dist/esm/core/playwrightService.js.map +2 -2
- package/dist/esm/utils/utils.d.ts.map +1 -1
- package/dist/esm/utils/utils.js +4 -3
- package/dist/esm/utils/utils.js.map +2 -2
- package/dist/react-native/common/constants.d.ts +3 -0
- package/dist/react-native/common/constants.d.ts.map +1 -1
- package/dist/react-native/common/constants.js +3 -0
- package/dist/react-native/common/constants.js.map +1 -1
- package/dist/react-native/common/types.d.ts +8 -0
- package/dist/react-native/common/types.d.ts.map +1 -1
- package/dist/react-native/common/types.js.map +1 -1
- package/dist/react-native/core/playwrightService.d.ts.map +1 -1
- package/dist/react-native/core/playwrightService.js +6 -0
- package/dist/react-native/core/playwrightService.js.map +1 -1
- package/dist/react-native/utils/utils.d.ts.map +1 -1
- package/dist/react-native/utils/utils.js +2 -3
- package/dist/react-native/utils/utils.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["/mnt/vss/_work/1/s/sdk/loadtesting/playwright/src/common/environmentVariables.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"node:crypto\";\nimport { InternalEnvironmentVariables } from \"./constants.js\";\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 region: string | undefined;\n runName: string;\n constructor() {\n this.runName = process.env[\"_MPT_SERVICE_RUN_NAME\"]!;\n this.runId = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]!;\n this.correlationId = randomUUID();\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,yBAA2B;AAC3B,uBAA6C;AAEtC,MAAM,qBAAqB;AAAA,EAChC,IAAI,cAAsB;AACxB,WAAO,QAAQ,IAAI,iCAAiC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,cAAc;AACZ,SAAK,UAAU,QAAQ,IAAI,uBAAuB;AAClD,SAAK,QAAQ,QAAQ,IAAI,8CAA6B,kBAAkB;AACxE,SAAK,oBAAgB,+BAAW;AAAA,EAClC;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"environmentVariables.js","sourceRoot":"","sources":["../../../src/common/environmentVariables.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,6CAAyC;AACzC,iDAA8D;AAE9D,MAAa,oBAAoB;IAC/B,IAAI,WAAW;QACb,OAAO,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAE,CAAC;IACzD,CAAC;IACD,KAAK,CAAS;IACd,SAAS,CAAqB;IAC9B,MAAM,CAAqB;IAC3B,QAAQ,CAAqB;IAC7B,aAAa,CAAqB;IAClC,MAAM,CAAqB;IAC3B,OAAO,CAAS;IAChB;QACE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAE,CAAC;QACrD,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,2CAA4B,CAAC,kBAAkB,CAAE,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAG,IAAA,wBAAU,GAAE,CAAC;IACpC,CAAC;CACF;AAhBD,oDAgBC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"node:crypto\";\nimport { InternalEnvironmentVariables } from \"./constants.js\";\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 region: string | undefined;\n runName: string;\n constructor() {\n this.runName = process.env[\"_MPT_SERVICE_RUN_NAME\"]!;\n this.runId = process.env[InternalEnvironmentVariables.MPT_SERVICE_RUN_ID]!;\n this.correlationId = randomUUID();\n }\n}\n"]}
|
|
@@ -1,99 +1,78 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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 executor_exports = {};
|
|
29
|
-
__export(executor_exports, {
|
|
30
|
-
loadCustomerGlobalFunction: () => loadCustomerGlobalFunction
|
|
31
|
-
});
|
|
32
|
-
module.exports = __toCommonJS(executor_exports);
|
|
33
|
-
var import_node_path = require("node:path");
|
|
34
|
-
var import_node_fs = __toESM(require("node:fs"));
|
|
35
|
-
var import_url = __toESM(require("url"));
|
|
36
|
-
var import_node_path2 = __toESM(require("node:path"));
|
|
37
|
-
var import_messages = require("./messages.js");
|
|
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 node_path_1 = require("node:path");
|
|
8
|
+
const node_fs_1 = tslib_1.__importDefault(require("node:fs"));
|
|
9
|
+
const url_1 = tslib_1.__importDefault(require("url"));
|
|
10
|
+
const node_path_2 = tslib_1.__importDefault(require("node:path"));
|
|
11
|
+
const messages_js_1 = require("./messages.js");
|
|
38
12
|
const getPackageJsonPath = (folderPath) => {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
13
|
+
const packageJsonPath = node_path_2.default.join(folderPath, "package.json");
|
|
14
|
+
if (node_fs_1.default.existsSync(packageJsonPath)) {
|
|
15
|
+
return packageJsonPath;
|
|
16
|
+
}
|
|
17
|
+
const parentFolder = node_path_2.default.dirname(folderPath);
|
|
18
|
+
if (folderPath === parentFolder) {
|
|
19
|
+
return "";
|
|
20
|
+
}
|
|
21
|
+
const result = getPackageJsonPath(parentFolder);
|
|
22
|
+
return result;
|
|
49
23
|
};
|
|
50
24
|
const folderIsModule = (folder) => {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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";
|
|
54
31
|
};
|
|
55
|
-
const fileIsModule = (
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
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 = node_path_2.default.dirname(file);
|
|
38
|
+
return folderIsModule(folder);
|
|
60
39
|
};
|
|
61
40
|
const resolveFile = (id, rootDir) => {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
41
|
+
if (!id) {
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
const localPath = node_path_2.default.resolve(rootDir, id);
|
|
45
|
+
if (node_fs_1.default.existsSync(localPath)) {
|
|
46
|
+
return localPath;
|
|
47
|
+
}
|
|
48
|
+
return require.resolve(id, { paths: [rootDir] });
|
|
70
49
|
};
|
|
71
50
|
const requireOrImportDefaultFunction = async (file) => {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
51
|
+
const fileName = (0, node_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_js_1.ServiceErrorMessageConstants.INVALID_GLOBAL_FUNCTION.message}`);
|
|
65
|
+
error.stack = "";
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
return func;
|
|
88
69
|
};
|
|
89
70
|
const loadCustomerGlobalFunction = (rootDir, customerFunctionFileName) => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
71
|
+
if (!customerFunctionFileName) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const file = node_path_2.default.resolve(rootDir, resolveFile(customerFunctionFileName, rootDir) ?? "");
|
|
75
|
+
return requireOrImportDefaultFunction(file);
|
|
95
76
|
};
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
loadCustomerGlobalFunction
|
|
99
|
-
});
|
|
77
|
+
exports.loadCustomerGlobalFunction = loadCustomerGlobalFunction;
|
|
78
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["/mnt/vss/_work/1/s/sdk/loadtesting/playwright/src/common/executor.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { basename } from \"node:path\";\nimport fs from \"node:fs\";\nimport url from \"url\";\nimport path from \"node:path\";\nimport { ServiceErrorMessageConstants } from \"./messages.js\";\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(\n `${fileName}: ${ServiceErrorMessageConstants.INVALID_GLOBAL_FUNCTION.message}`,\n );\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"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAyB;AACzB,qBAAe;AACf,iBAAgB;AAChB,IAAAA,oBAAiB;AACjB,sBAA6C;AAE7C,MAAM,qBAAqB,CAAC,eAA+B;AACzD,QAAM,kBAAkB,kBAAAC,QAAK,KAAK,YAAY,cAAc;AAC5D,MAAI,eAAAC,QAAG,WAAW,eAAe,GAAG;AAClC,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,kBAAAD,QAAK,QAAQ,UAAU;AAC5C,MAAI,eAAe,cAAc;AAC/B,WAAO;AAAA,EACT;AAEA,QAAM,SAAS,mBAAmB,YAAY;AAC9C,SAAO;AACT;AAEA,MAAM,iBAAiB,CAAC,WAA4B;AAClD,QAAM,kBAAkB,mBAAmB,MAAM;AACjD,MAAI,CAAC,gBAAiB,QAAO;AAG7B,SAAO,QAAQ,eAAe,EAAE,SAAS;AAC3C;AAEA,MAAM,eAAe,CAACE,UAA0B;AAC9C,MAAIA,MAAK,SAAS,MAAM,KAAKA,MAAK,SAAS,MAAM,EAAG,QAAO;AAC3D,MAAIA,MAAK,SAAS,MAAM,KAAKA,MAAK,SAAS,MAAM,EAAG,QAAO;AAC3D,QAAM,SAAS,kBAAAF,QAAK,QAAQE,KAAI;AAChC,SAAO,eAAe,MAAM;AAC9B;AAEA,MAAM,cAAc,CAAC,IAAwB,YAAwC;AACnF,MAAI,CAAC,IAAI;AACP,WAAO;AAAA,EACT;AACA,QAAM,YAAY,kBAAAF,QAAK,QAAQ,SAAS,EAAE;AAC1C,MAAI,eAAAC,QAAG,WAAW,SAAS,GAAG;AAC5B,WAAO;AAAA,EACT;AACA,SAAO,QAAQ,QAAQ,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;AACjD;AAEA,MAAM,iCAAiC,OAAO,SAA+B;AAC3E,QAAM,eAAW,2BAAS,IAAI;AAC9B,QAAM,WAAW,aAAa,IAAI;AAClC,MAAI;AACJ,MAAI,SAAU,QAAO,MAAM,KAAK,UAAU,KAAK,UAAU,WAAAE,QAAI,cAAc,IAAI,CAAC,CAAC,GAAG;AAAA,MAE/E,QAAO,QAAQ,IAAI;AACxB,MAAI,QAAQ,OAAO,SAAS,YAAY,aAAa,MAAM;AACzD,WAAO,KAAK;AAAA,EACd;AACA,MAAI,OAAO,SAAS,YAAY;AAE9B,UAAM,QAAQ,IAAI;AAAA,MAChB,GAAG,QAAQ,KAAK,6CAA6B,wBAAwB,OAAO;AAAA,IAC9E;AACA,UAAM,QAAQ;AACd,UAAM;AAAA,EACR;AACA,SAAO;AACT;AAEO,MAAM,6BAA6B,CACxC,SACA,6BACQ;AACR,MAAI,CAAC,0BAA0B;AAC7B,WAAO;AAAA,EACT;AACA,QAAMD,QAAO,kBAAAF,QAAK,QAAQ,SAAS,YAAY,0BAA0B,OAAO,KAAK,EAAE;AACvF,SAAO,+BAA+BE,KAAI;AAC5C;",
|
|
6
|
-
"names": ["import_node_path", "path", "fs", "file", "url"]
|
|
7
|
-
}
|
|
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 \"node:path\";\nimport fs from \"node:fs\";\nimport url from \"url\";\nimport path from \"node:path\";\nimport { ServiceErrorMessageConstants } from \"./messages.js\";\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(\n `${fileName}: ${ServiceErrorMessageConstants.INVALID_GLOBAL_FUNCTION.message}`,\n );\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"]}
|
|
@@ -1,57 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var httpService_exports = {};
|
|
19
|
-
__export(httpService_exports, {
|
|
20
|
-
HttpService: () => HttpService
|
|
21
|
-
});
|
|
22
|
-
module.exports = __toCommonJS(httpService_exports);
|
|
23
|
-
var import_crypto = require("crypto");
|
|
24
|
-
var import_core_rest_pipeline = require("@azure/core-rest-pipeline");
|
|
25
|
-
var import_logger = require("../common/logger.js");
|
|
26
|
-
var import_constants = require("./constants.js");
|
|
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_js_1 = require("../common/logger.js");
|
|
9
|
+
const constants_js_1 = require("./constants.js");
|
|
27
10
|
class HttpService {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
11
|
+
async callAPI(method, url, data, token, contentType, correlationId) {
|
|
12
|
+
const pipeline = (0, core_rest_pipeline_1.createPipelineFromOptions)({
|
|
13
|
+
loggingOptions: {
|
|
14
|
+
logger: logger_js_1.coreLogger.info,
|
|
15
|
+
},
|
|
16
|
+
retryOptions: {},
|
|
17
|
+
});
|
|
18
|
+
const httpClient = (0, core_rest_pipeline_1.createDefaultHttpClient)();
|
|
19
|
+
const request = (0, core_rest_pipeline_1.createPipelineRequest)({
|
|
20
|
+
url,
|
|
21
|
+
method,
|
|
22
|
+
headers: (0, core_rest_pipeline_1.createHttpHeaders)({
|
|
23
|
+
"Content-Type": contentType,
|
|
24
|
+
Accept: "*/*",
|
|
25
|
+
Authorization: `Bearer ${token}`,
|
|
26
|
+
"x-ms-client-request-id": `${(0, crypto_1.randomUUID)()}`,
|
|
27
|
+
"x-correlation-id": correlationId,
|
|
28
|
+
}),
|
|
29
|
+
timeout: constants_js_1.Constants.HTTP_CALL_TIMEOUT,
|
|
30
|
+
});
|
|
31
|
+
if (data) {
|
|
32
|
+
request.body = data;
|
|
33
|
+
}
|
|
34
|
+
return pipeline.sendRequest(httpClient, request);
|
|
50
35
|
}
|
|
51
|
-
return pipeline.sendRequest(httpClient, request);
|
|
52
|
-
}
|
|
53
36
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
HttpService
|
|
57
|
-
});
|
|
37
|
+
exports.HttpService = HttpService;
|
|
38
|
+
//# sourceMappingURL=httpService.js.map
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["/mnt/vss/_work/1/s/sdk/loadtesting/playwright/src/common/httpService.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"crypto\";\nimport type { PipelineResponse, HttpMethods } from \"@azure/core-rest-pipeline\";\nimport {\n createDefaultHttpClient,\n createHttpHeaders,\n createPipelineRequest,\n createPipelineFromOptions,\n} from \"@azure/core-rest-pipeline\";\nimport { coreLogger } from \"../common/logger.js\";\nimport { Constants } from \"./constants.js\";\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: coreLogger.info,\n },\n retryOptions: {},\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: Constants.HTTP_CALL_TIMEOUT,\n });\n\n if (data) {\n request.body = data;\n }\n return pipeline.sendRequest(httpClient, request);\n }\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAA2B;AAE3B,gCAKO;AACP,oBAA2B;AAC3B,uBAA0B;AAEnB,MAAM,YAAY;AAAA,EACvB,MAAa,QACX,QACA,KACA,MACA,OACA,aACA,eAC2B;AAC3B,UAAM,eAAW,qDAA0B;AAAA,MACzC,gBAAgB;AAAA,QACd,QAAQ,yBAAW;AAAA,MACrB;AAAA,MACA,cAAc,CAAC;AAAA,IACjB,CAAC;AAED,UAAM,iBAAa,mDAAwB;AAC3C,UAAM,cAAU,iDAAsB;AAAA,MACpC;AAAA,MACA;AAAA,MACA,aAAS,6CAAkB;AAAA,QACzB,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,eAAe,UAAU,KAAK;AAAA,QAC9B,0BAA0B,OAAG,0BAAW,CAAC;AAAA,QACzC,oBAAoB;AAAA,MACtB,CAAC;AAAA,MACD,SAAS,2BAAU;AAAA,IACrB,CAAC;AAED,QAAI,MAAM;AACR,cAAQ,OAAO;AAAA,IACjB;AACA,WAAO,SAAS,YAAY,YAAY,OAAO;AAAA,EACjD;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
1
|
+
{"version":3,"file":"httpService.js","sourceRoot":"","sources":["../../../src/common/httpService.ts"],"names":[],"mappings":";AAAA,uCAAuC;AACvC,kCAAkC;;;AAElC,mCAAoC;AAEpC,kEAKmC;AACnC,mDAAiD;AACjD,iDAA2C;AAE3C,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,sBAAU,CAAC,IAAI;aACxB;YACD,YAAY,EAAE,EAAE;SACjB,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,wBAAS,CAAC,iBAAiB;SACrC,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;AAnCD,kCAmCC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { randomUUID } from \"crypto\";\nimport type { PipelineResponse, HttpMethods } from \"@azure/core-rest-pipeline\";\nimport {\n createDefaultHttpClient,\n createHttpHeaders,\n createPipelineRequest,\n createPipelineFromOptions,\n} from \"@azure/core-rest-pipeline\";\nimport { coreLogger } from \"../common/logger.js\";\nimport { Constants } from \"./constants.js\";\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: coreLogger.info,\n },\n retryOptions: {},\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: Constants.HTTP_CALL_TIMEOUT,\n });\n\n if (data) {\n request.body = data;\n }\n return pipeline.sendRequest(httpClient, request);\n }\n}\n"]}
|
|
@@ -1,28 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
var __copyProps = (to, from, except, desc) => {
|
|
10
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
-
for (let key of __getOwnPropNames(from))
|
|
12
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
-
}
|
|
15
|
-
return to;
|
|
16
|
-
};
|
|
17
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var logger_exports = {};
|
|
19
|
-
__export(logger_exports, {
|
|
20
|
-
coreLogger: () => coreLogger
|
|
21
|
-
});
|
|
22
|
-
module.exports = __toCommonJS(logger_exports);
|
|
23
|
-
var import_logger = require("@azure/logger");
|
|
24
|
-
const coreLogger = (0, import_logger.createClientLogger)("playwright");
|
|
25
|
-
// Annotate the CommonJS export names for ESM import in node:
|
|
26
|
-
0 && (module.exports = {
|
|
27
|
-
coreLogger
|
|
28
|
-
});
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright (c) Microsoft Corporation.
|
|
3
|
+
// Licensed under the MIT License.
|
|
4
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
+
exports.coreLogger = void 0;
|
|
6
|
+
const logger_1 = require("@azure/logger");
|
|
7
|
+
exports.coreLogger = (0, logger_1.createClientLogger)("playwright");
|
|
8
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["/mnt/vss/_work/1/s/sdk/loadtesting/playwright/src/common/logger.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createClientLogger } from \"@azure/logger\";\n\nexport const coreLogger = createClientLogger(\"playwright\");\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,oBAAmC;AAE5B,MAAM,iBAAa,kCAAmB,YAAY;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
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,YAAY,CAAC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { createClientLogger } from \"@azure/logger\";\n\nexport const coreLogger = createClientLogger(\"playwright\");\n"]}
|