@perforce-perfecto/scriptless-helpers 1.44.4 → 1.45.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.
package/package.json CHANGED
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@perforce-perfecto/scriptless-helpers",
3
- "version": "1.44.4",
3
+ "version": "1.45.1",
4
4
  "type": "commonjs",
5
5
  "main": "./src/index.js",
6
6
  "types": "./src/index.d.ts",
7
7
  "dependencies": {
8
- "tslib": "^2.3.0"
8
+ "tslib": "^2.3.0",
9
+ "webdriverio": "^9.21.0",
10
+ "lodash": "^4.17.21",
11
+ "axios": "^1.12.2"
9
12
  },
10
13
  "publishConfig": {
11
14
  "access": "public"
package/src/index.d.ts CHANGED
@@ -1 +1,3 @@
1
- export * from './lib/scriptless-helpers';
1
+ export * from './lib/webdriver-session-helper';
2
+ export * from './lib/http-request-helper';
3
+ export * from './lib/message-helper';
package/src/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
- tslib_1.__exportStar(require("./lib/scriptless-helpers"), exports);
4
+ tslib_1.__exportStar(require("./lib/webdriver-session-helper"), exports);
5
+ tslib_1.__exportStar(require("./lib/http-request-helper"), exports);
6
+ tslib_1.__exportStar(require("./lib/message-helper"), exports);
5
7
  //# sourceMappingURL=index.js.map
package/src/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/execution-helpers-public/src/index.ts"],"names":[],"mappings":";;;AAAA,mEAAyC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/execution-helpers-public/src/index.ts"],"names":[],"mappings":";;;AAAA,yEAA+C;AAC/C,oEAA0C;AAC1C,+DAAqC"}
@@ -0,0 +1,22 @@
1
+ import { ScriptlessHelper } from '../types/scriptless-helper';
2
+ import { Logger } from '../types/logger';
3
+ type RequestData = {
4
+ method: string;
5
+ url: string;
6
+ execution?: string | undefined;
7
+ timeout?: string | undefined;
8
+ post?: string | undefined;
9
+ headers?: string | Array<string> | undefined;
10
+ parameters?: string | Array<string> | undefined;
11
+ };
12
+ export declare class HttpRequestHelper extends ScriptlessHelper {
13
+ constructor(logger?: Logger);
14
+ sendHttpRequest(requestData: RequestData): Promise<any>;
15
+ private createAxiosCallParameters;
16
+ private createQueryString;
17
+ private createHeaders;
18
+ private createRequestBody;
19
+ private formatJsonBody;
20
+ private formatRequestData;
21
+ }
22
+ export {};
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HttpRequestHelper = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const axios_1 = tslib_1.__importDefault(require("axios"));
6
+ const scriptless_helper_1 = require("../types/scriptless-helper");
7
+ const message_helper_1 = require("./message-helper");
8
+ class HttpRequestHelper extends scriptless_helper_1.ScriptlessHelper {
9
+ constructor(logger) {
10
+ super(logger);
11
+ }
12
+ sendHttpRequest(requestData) {
13
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
14
+ try {
15
+ const requestObject = this.createAxiosCallParameters(requestData);
16
+ this.logger.info('HTTP request object for API call:', requestObject);
17
+ const response = yield (0, axios_1.default)(requestObject);
18
+ return response.data;
19
+ }
20
+ catch (error) {
21
+ this.logger.error(`HTTP ${requestData.execution} request failed:`, error);
22
+ throw error;
23
+ }
24
+ });
25
+ }
26
+ createAxiosCallParameters(requestData) {
27
+ this.logger.log('HTTP request requestData:', requestData);
28
+ const formattedData = this.formatRequestData(requestData);
29
+ this.logger.log('HTTP request formattedData:', formattedData);
30
+ const requestObject = {
31
+ url: formattedData.url,
32
+ method: formattedData.method || 'GET',
33
+ execution: formattedData.execution,
34
+ data: {},
35
+ headers: formattedData.headers && formattedData.headers.length > 0
36
+ ? this.createHeaders(formattedData.headers)
37
+ : undefined,
38
+ timeout: (formattedData === null || formattedData === void 0 ? void 0 : formattedData.timeout)
39
+ ? parseInt(formattedData.timeout) * 1000
40
+ : undefined
41
+ };
42
+ if (formattedData.parameters && formattedData.parameters.length > 0) {
43
+ requestObject.url += this.createQueryString(formattedData.parameters);
44
+ }
45
+ if (formattedData.post && formattedData.method !== 'GET') {
46
+ requestObject.data = this.createRequestBody(formattedData.post, requestObject.headers);
47
+ }
48
+ return requestObject;
49
+ }
50
+ createQueryString(parameters) {
51
+ return parameters.reduce((queryString, parameter) => {
52
+ if (parameter === '' || !parameter) {
53
+ return queryString;
54
+ }
55
+ const [key, value] = parameter.split('=');
56
+ if (!key || !value || key.indexOf('"') > -1 || value.indexOf('"') > -1) {
57
+ throw new Error(message_helper_1.errorDisplayMessage.command.execute.http.invalidParameters);
58
+ }
59
+ return queryString + (queryString ? '&' : '?') + `${key}=${value}`;
60
+ }, '');
61
+ }
62
+ createHeaders(headers) {
63
+ return headers.reduce((headerObject, header) => {
64
+ if (header === '' || !header) {
65
+ return headerObject;
66
+ }
67
+ const [key, value] = header.split(':');
68
+ if (!key || !value || key.indexOf('"') > -1 || value.indexOf('"') > -1) {
69
+ throw new Error(message_helper_1.errorDisplayMessage.command.execute.http.invalidHeaders);
70
+ }
71
+ headerObject[key.trim()] = value.trim();
72
+ return headerObject;
73
+ }, {});
74
+ }
75
+ createRequestBody(payload, headers) {
76
+ const contentType = headers &&
77
+ Object.keys(headers).find((key) => key.toLowerCase() === 'content-type');
78
+ if (contentType) {
79
+ if (headers[contentType].includes('application/json')) {
80
+ return this.formatJsonBody(payload);
81
+ }
82
+ else if (headers[contentType].includes('application/x-www-form-urlencoded')) {
83
+ return new URLSearchParams(payload).toString();
84
+ }
85
+ return payload;
86
+ }
87
+ return this.formatJsonBody(payload);
88
+ }
89
+ formatJsonBody(payload) {
90
+ try {
91
+ return JSON.parse(payload.replace(/'/g, '').replace(/\\"/g, '"'));
92
+ }
93
+ catch (error) {
94
+ throw new Error(message_helper_1.errorDisplayMessage.command.execute.http.invalidPostData);
95
+ }
96
+ }
97
+ formatRequestData(requestData) {
98
+ var _a, _b, _c;
99
+ return {
100
+ url: requestData.url.replace(/'/g, ''),
101
+ execution: (_a = requestData.execution) === null || _a === void 0 ? void 0 : _a.replace(/'/g, ''),
102
+ method: (_b = requestData.method) === null || _b === void 0 ? void 0 : _b.toUpperCase().replace(/'/g, ''),
103
+ timeout: (_c = requestData.timeout) === null || _c === void 0 ? void 0 : _c.replace(/'/g, ''),
104
+ post: requestData.post,
105
+ headers: requestData.headers && Array.isArray(requestData.headers)
106
+ ? requestData.headers
107
+ .filter((header) => header)
108
+ .map((header) => header.replace(/'/g, ''))
109
+ : undefined,
110
+ parameters: requestData.parameters && Array.isArray(requestData.parameters)
111
+ ? requestData.parameters
112
+ .filter((parameter) => parameter)
113
+ .map((parameter) => parameter.replace(/'/g, ''))
114
+ : undefined
115
+ };
116
+ }
117
+ }
118
+ exports.HttpRequestHelper = HttpRequestHelper;
119
+ //# sourceMappingURL=http-request-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-request-helper.js","sourceRoot":"","sources":["../../../../../libs/execution-helpers-public/src/lib/http-request-helper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ export declare const errorDisplayMessage: {
2
+ command: {
3
+ script: {
4
+ flow: {
5
+ type: string;
6
+ break: string;
7
+ continue: string;
8
+ };
9
+ };
10
+ timer: {
11
+ statusTimer: {
12
+ returnedFalse: string;
13
+ };
14
+ timerStop: {
15
+ invalidTimerId: string;
16
+ };
17
+ timerInfo: {
18
+ invalidTimerId: string;
19
+ };
20
+ timerCheck: {
21
+ noLimitProvided: string;
22
+ };
23
+ };
24
+ execute: {
25
+ http: {
26
+ invalidParameters: string;
27
+ invalidHeaders: string;
28
+ invalidPostData: string;
29
+ };
30
+ script: {
31
+ invalidExecutionMode: string;
32
+ maxNestedScriptDepth: string;
33
+ };
34
+ };
35
+ text: {
36
+ find: {
37
+ returnedFalse: string;
38
+ };
39
+ };
40
+ device: {
41
+ handsetOpen: {
42
+ invalidParameters: string;
43
+ };
44
+ };
45
+ touch: {
46
+ drag: {
47
+ invalidParameters: string;
48
+ invalidDuration: string;
49
+ };
50
+ };
51
+ };
52
+ checkpoint: {
53
+ text: {
54
+ returnedFalse: string;
55
+ };
56
+ image: {
57
+ returnedFalse: string;
58
+ };
59
+ reporting: {
60
+ assert: {
61
+ returnedFalse: string;
62
+ };
63
+ };
64
+ script: {
65
+ integerAttribute: {
66
+ returnedFalse: string;
67
+ };
68
+ textAttribute: {
69
+ returnedFalse: string;
70
+ };
71
+ textCompare: {
72
+ returnedFalse: string;
73
+ };
74
+ counterCheck: {
75
+ returnedFalse: string;
76
+ };
77
+ integerCompare: {
78
+ returnedFalse: string;
79
+ };
80
+ timerCheck: {
81
+ returnedFalse: string;
82
+ };
83
+ };
84
+ validation: {
85
+ resultFailed: string;
86
+ };
87
+ };
88
+ parameter: {
89
+ statusUnknownValue: string;
90
+ reportUnknownValue: string;
91
+ };
92
+ };
93
+ export declare const successDisplayMessage: {
94
+ command: {
95
+ script: {
96
+ flow: {
97
+ type: string;
98
+ break: string;
99
+ continue: string;
100
+ exit: string;
101
+ };
102
+ };
103
+ };
104
+ parameter: {};
105
+ };
@@ -0,0 +1,109 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.successDisplayMessage = exports.errorDisplayMessage = void 0;
4
+ exports.errorDisplayMessage = {
5
+ command: {
6
+ script: {
7
+ flow: {
8
+ type: 'SCRIPT_ERROR: ',
9
+ break: 'Flow directive BREAK invoked outside of a loop.',
10
+ continue: 'Flow directive CONTINUE invoked outside of a loop.'
11
+ }
12
+ },
13
+ timer: {
14
+ statusTimer: {
15
+ returnedFalse: `VALIDATION_FAILURE: Status was calculated/marked as failure.`
16
+ },
17
+ timerStop: {
18
+ invalidTimerId: `Timer with ID [timerId] does not exist.`
19
+ },
20
+ timerInfo: {
21
+ invalidTimerId: `Timer with ID [timerId] does not exist.`
22
+ },
23
+ timerCheck: {
24
+ noLimitProvided: `No limits provided for timer check.`
25
+ }
26
+ },
27
+ execute: {
28
+ http: {
29
+ invalidParameters: `Parameters should be passed in <name>=<value> format, e.g. page=12.`,
30
+ invalidHeaders: `Headers should be in <name>: <value> format, e.g. Content-Type: application/json.`,
31
+ invalidPostData: `Body should be in json {"key": "value"} format for POST & PUT call.`
32
+ },
33
+ script: {
34
+ invalidExecutionMode: `Error parsing function 'execute script'. Unrecognized option: [executionMode]`,
35
+ maxNestedScriptDepth: `Execution has reached a nesting depth of {maxAllowedNestedScriptDepth} - cannot execute script {script}. Make sure none of the scripts that participate in this execution calls itself recursively.`
36
+ }
37
+ },
38
+ text: {
39
+ find: {
40
+ returnedFalse: `VALIDATION_FAILURE: Needle not found for expected value: "[expectedValue]"`
41
+ }
42
+ },
43
+ device: {
44
+ handsetOpen: {
45
+ invalidParameters: `Invalid value specified for parameter '[parameterName]': [parameterValue]`
46
+ }
47
+ },
48
+ touch: {
49
+ drag: {
50
+ invalidParameters: `Invalid value specified for parameter '[parameterName]': [parameterValue]`,
51
+ invalidDuration: `Error parsing function 'touch drag', 'duration' must be within range: 1 - 30, actual value was '[duration]'.`
52
+ }
53
+ }
54
+ },
55
+ checkpoint: {
56
+ text: {
57
+ returnedFalse: `VALIDATION_FAILURE: Validation failed for expected value: "[dataContent]" and condition: '[dataCondition]'`
58
+ },
59
+ image: {
60
+ returnedFalse: `VALIDATION_FAILURE: Validation failed for expected value: "[expectedImage]" and condition: '[condition]'`
61
+ },
62
+ reporting: {
63
+ assert: {
64
+ returnedFalse: `Test running failed - Completed With Errors`
65
+ }
66
+ },
67
+ script: {
68
+ integerAttribute: {
69
+ returnedFalse: `Variable value [evaluatedValue] is not [attribute].`
70
+ },
71
+ textAttribute: {
72
+ returnedFalse: `Variable value "[evaluatedValue]" is not [attribute].`
73
+ },
74
+ textCompare: {
75
+ returnedFalse: `Condition "[evaluatedValue]" [operator] "[associatedValue]" was not met.`
76
+ },
77
+ counterCheck: {
78
+ returnedFalse: `VALIDATION_FAILURE: Condition [counter] [operator] [expectedValue] was not met.`
79
+ },
80
+ integerCompare: {
81
+ returnedFalse: `VALIDATION_FAILURE: Condition [evaluatedValue] [operator] [expectedValue] was not met.`
82
+ },
83
+ timerCheck: {
84
+ returnedFalse: `VALIDATION_FAILURE: Validation failed: Value of [type] timer [timerId] is [timeInMs] milliseconds, and does not meet condition [unmetCondition].`
85
+ }
86
+ },
87
+ validation: {
88
+ resultFailed: `VALIDATION_FAILURE: Manual validation failed`
89
+ }
90
+ },
91
+ parameter: {
92
+ statusUnknownValue: `Could not parse options: 'status' must be one of [ok, error], actual value was [statusParameterValue].`,
93
+ reportUnknownValue: `Could not parse options: Error parsing function '[commandName]', 'report' must be one of [screenshot, screenshot-on-error, none, text, all, all-on-error], actual value was [reportParameterValue].`
94
+ }
95
+ };
96
+ exports.successDisplayMessage = {
97
+ command: {
98
+ script: {
99
+ flow: {
100
+ type: 'FLOW_CHANGE_REQUESTED: ',
101
+ break: 'Flow change initiated by script command - break',
102
+ continue: 'Flow change initiated by script command - continue',
103
+ exit: 'Flow change initiated by script command - exit'
104
+ }
105
+ }
106
+ },
107
+ parameter: {}
108
+ };
109
+ //# sourceMappingURL=message-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-helper.js","sourceRoot":"","sources":["../../../../../libs/execution-helpers-public/src/lib/message-helper.ts"],"names":[],"mappings":";;;AAAa,QAAA,mBAAmB,GAAG;IACjC,OAAO,EAAE;QACP,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,IAAI,EAAE,gBAAgB;gBACtB,KAAK,EAAE,iDAAiD;gBACxD,QAAQ,EAAE,oDAAoD;aAC/D;SACF;QACD,KAAK,EAAE;YACL,WAAW,EAAE;gBACX,aAAa,EAAE,8DAA8D;aAC9E;YACD,SAAS,EAAE;gBACT,cAAc,EAAE,yCAAyC;aAC1D;YACD,SAAS,EAAE;gBACT,cAAc,EAAE,yCAAyC;aAC1D;YACD,UAAU,EAAE;gBACV,eAAe,EAAE,qCAAqC;aACvD;SACF;QACD,OAAO,EAAE;YACP,IAAI,EAAE;gBACJ,iBAAiB,EAAE,qEAAqE;gBACxF,cAAc,EAAE,mFAAmF;gBACnG,eAAe,EAAE,qEAAqE;aACvF;YACD,MAAM,EAAE;gBACN,oBAAoB,EAAE,+EAA+E;gBACrG,oBAAoB,EAAE,qMAAqM;aAC5N;SACF;QACD,IAAI,EAAE;YACJ,IAAI,EAAE;gBACJ,aAAa,EAAE,4EAA4E;aAC5F;SACF;QACD,MAAM,EAAE;YACN,WAAW,EAAE;gBACX,iBAAiB,EAAE,2EAA2E;aAC/F;SACF;QACD,KAAK,EAAE;YACL,IAAI,EAAE;gBACJ,iBAAiB,EAAE,2EAA2E;gBAC9F,eAAe,EAAE,8GAA8G;aAChI;SACF;KACF;IACD,UAAU,EAAE;QACV,IAAI,EAAE;YACJ,aAAa,EAAE,4GAA4G;SAC5H;QACD,KAAK,EAAE;YACL,aAAa,EAAE,0GAA0G;SAC1H;QACD,SAAS,EAAE;YACT,MAAM,EAAE;gBACN,aAAa,EAAE,6CAA6C;aAC7D;SACF;QACD,MAAM,EAAE;YACN,gBAAgB,EAAE;gBAChB,aAAa,EAAE,qDAAqD;aACrE;YACD,aAAa,EAAE;gBACb,aAAa,EAAE,uDAAuD;aACvE;YACD,WAAW,EAAE;gBACX,aAAa,EAAE,0EAA0E;aAC1F;YACD,YAAY,EAAE;gBACZ,aAAa,EAAE,iFAAiF;aACjG;YACD,cAAc,EAAE;gBACd,aAAa,EAAE,wFAAwF;aACxG;YACD,UAAU,EAAE;gBACV,aAAa,EAAE,kJAAkJ;aAClK;SACF;QACD,UAAU,EAAE;YACV,YAAY,EAAE,8CAA8C;SAC7D;KACF;IACD,SAAS,EAAE;QACT,kBAAkB,EAAE,wGAAwG;QAC5H,kBAAkB,EAAE,qMAAqM;KAC1N;CACF,CAAC;AAEW,QAAA,qBAAqB,GAAG;IACnC,OAAO,EAAE;QACP,MAAM,EAAE;YACN,IAAI,EAAE;gBACJ,IAAI,EAAE,yBAAyB;gBAC/B,KAAK,EAAE,iDAAiD;gBACxD,QAAQ,EAAE,oDAAoD;gBAC9D,IAAI,EAAE,gDAAgD;aACvD;SACF;KACF;IACD,SAAS,EAAE,EAAE;CACd,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Browser } from 'webdriverio';
2
+ import { ScriptlessHelper } from '../types/scriptless-helper';
3
+ import { Logger } from '../types/logger';
4
+ export declare class WebdriverSessionHelper extends ScriptlessHelper {
5
+ static keepAliveIntervals: Record<string, NodeJS.Timer>;
6
+ constructor(logger?: Logger);
7
+ stopKeepAliveForSession(session: Browser): void;
8
+ startKeepAliveForSession(session: Browser): Promise<void>;
9
+ closeWebdriverSessionsInParallel(sessions: Browser[]): Promise<void>;
10
+ getRemoteModifier(): (client: Browser) => Browser;
11
+ }
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WebdriverSessionHelper = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const lodash_1 = tslib_1.__importDefault(require("lodash"));
6
+ const scriptless_helper_1 = require("../types/scriptless-helper");
7
+ class WebdriverSessionHelper extends scriptless_helper_1.ScriptlessHelper {
8
+ constructor(logger) {
9
+ super(logger);
10
+ }
11
+ stopKeepAliveForSession(session) {
12
+ const interval = WebdriverSessionHelper.keepAliveIntervals[session.sessionId];
13
+ if (interval) {
14
+ clearInterval(interval);
15
+ delete WebdriverSessionHelper.keepAliveIntervals[session.sessionId];
16
+ }
17
+ }
18
+ startKeepAliveForSession(session) {
19
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
20
+ const interval = setInterval(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
21
+ try {
22
+ yield session.executeScript('keep-alive', []);
23
+ }
24
+ catch (error) {
25
+ this.logger.error(`Error keeping session ${session.sessionId} alive:`, error);
26
+ this.stopKeepAliveForSession(session);
27
+ }
28
+ }), 60000);
29
+ WebdriverSessionHelper.keepAliveIntervals[session.sessionId] = interval;
30
+ });
31
+ }
32
+ closeWebdriverSessionsInParallel(sessions) {
33
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
34
+ this.logger.debug(`Closing ${sessions.length} webdriver sessions in parallel`);
35
+ const deleteSessionPromises = sessions.map((session) => {
36
+ this.stopKeepAliveForSession(session);
37
+ return session.deleteSession();
38
+ });
39
+ yield Promise.all(deleteSessionPromises);
40
+ });
41
+ }
42
+ getRemoteModifier() {
43
+ const logger = this.logger;
44
+ return (client) => {
45
+ client.on('command', (param) => {
46
+ logger.info('webdriver: command', param);
47
+ });
48
+ client.on('request.start', (param) => {
49
+ logger.info('webdriver: request.start', param);
50
+ });
51
+ client.on('request.retry', (param) => {
52
+ logger.info('webdriver: request.retry', param);
53
+ });
54
+ client.on('result', (param) => {
55
+ const sanitizedParam = lodash_1.default.cloneDeep(param);
56
+ if (sanitizedParam.command === 'takeScreenshot') {
57
+ delete sanitizedParam.result.value;
58
+ }
59
+ logger.info('webdriver: result', sanitizedParam);
60
+ });
61
+ return client;
62
+ };
63
+ }
64
+ }
65
+ exports.WebdriverSessionHelper = WebdriverSessionHelper;
66
+ WebdriverSessionHelper.keepAliveIntervals = {};
67
+ //# sourceMappingURL=webdriver-session-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webdriver-session-helper.js","sourceRoot":"","sources":["../../../../../libs/execution-helpers-public/src/lib/webdriver-session-helper.ts"],"names":[],"mappings":";;;;AACA,4DAAuB;AACvB,kEAA8D;AAG9D,MAAa,sBAAuB,SAAQ,oCAAgB;IAE1D,YAAY,MAAe;QACzB,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAEM,uBAAuB,CAAC,OAAgB;QAC7C,MAAM,QAAQ,GACZ,sBAAsB,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC/D,IAAI,QAAQ,EAAE,CAAC;YACb,aAAa,CAAC,QAAQ,CAAC,CAAC;YACxB,OAAO,sBAAsB,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IAEY,wBAAwB,CAAC,OAAgB;;YACpD,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAS,EAAE;gBACtC,IAAI,CAAC;oBACH,MAAM,OAAO,CAAC,aAAa,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;gBAChD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,yBAAyB,OAAO,CAAC,SAAS,SAAS,EACnD,KAAK,CACN,CAAC;oBACF,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,CAAA,EAAE,KAAK,CAAC,CAAC;YACV,sBAAsB,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;QAC1E,CAAC;KAAA;IAEY,gCAAgC,CAAC,QAAmB;;YAC/D,IAAI,CAAC,MAAM,CAAC,KAAK,CACf,WAAW,QAAQ,CAAC,MAAM,iCAAiC,CAC5D,CAAC;YACF,MAAM,qBAAqB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACrD,IAAI,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;gBACtC,OAAO,OAAO,CAAC,aAAa,EAAE,CAAC;YACjC,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC3C,CAAC;KAAA;IAEM,iBAAiB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,OAAO,CAAC,MAAe,EAAE,EAAE;YACzB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC7B,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC3C,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;gBACnC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,CAAC,CAAC,CAAC;YACH,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;gBAC5B,MAAM,cAAc,GAAQ,gBAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC/C,IAAI,cAAc,CAAC,OAAO,KAAK,gBAAgB,EAAE,CAAC;oBAChD,OAAO,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;gBACrC,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;IACJ,CAAC;;AA9DH,wDA+DC;AA9DQ,yCAAkB,GAAiC,EAAE,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface Logger {
2
+ log(message: unknown, ...optionalParams: unknown[]): void;
3
+ info(message: unknown, ...optionalParams: unknown[]): void;
4
+ warn(message: unknown, ...optionalParams: unknown[]): void;
5
+ debug(message: unknown, ...optionalParams: unknown[]): void;
6
+ profile(id: string, ...optionalParams: unknown[]): void;
7
+ error(message: unknown, errorData?: unknown): void;
8
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../../../libs/execution-helpers-public/src/types/logger.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import { Logger } from './logger';
2
+ export declare abstract class ScriptlessHelper {
3
+ protected logger: Logger;
4
+ constructor(logger?: Logger);
5
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ScriptlessHelper = void 0;
4
+ class ScriptlessHelper {
5
+ constructor(logger) {
6
+ this.logger = logger || console;
7
+ }
8
+ }
9
+ exports.ScriptlessHelper = ScriptlessHelper;
10
+ //# sourceMappingURL=scriptless-helper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scriptless-helper.js","sourceRoot":"","sources":["../../../../../libs/execution-helpers-public/src/types/scriptless-helper.ts"],"names":[],"mappings":";;;AAEA,MAAsB,gBAAgB;IAEpC,YAAY,MAAe;QACzB,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC;IAClC,CAAC;CACF;AALD,4CAKC"}
@@ -1 +0,0 @@
1
- export declare function scriptlessHelpers(): string;
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scriptlessHelpers = scriptlessHelpers;
4
- function scriptlessHelpers() {
5
- return 'scriptless-helpers';
6
- }
7
- //# sourceMappingURL=scriptless-helpers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scriptless-helpers.js","sourceRoot":"","sources":["../../../../../libs/execution-helpers-public/src/lib/scriptless-helpers.ts"],"names":[],"mappings":";;AAAA,8CAEC;AAFD,SAAgB,iBAAiB;IAC/B,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}