@elastic/synthetics 1.0.0-beta.8 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -4
- package/dist/cli.js +139 -165
- package/dist/cli.js.map +1 -1
- package/dist/common_types.d.ts +158 -34
- package/dist/common_types.d.ts.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -6
- package/dist/config.js.map +1 -1
- package/dist/core/browser-service.d.ts +1 -1
- package/dist/core/browser-service.d.ts.map +1 -1
- package/dist/core/browser-service.js +7 -6
- package/dist/core/browser-service.js.map +1 -1
- package/dist/core/expect.d.ts +25 -25
- package/dist/core/expect.d.ts.map +1 -1
- package/dist/core/expect.js.map +1 -1
- package/dist/core/gatherer.d.ts +5 -8
- package/dist/core/gatherer.d.ts.map +1 -1
- package/dist/core/gatherer.js +75 -17
- package/dist/core/gatherer.js.map +1 -1
- package/dist/core/index.d.ts +5 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +23 -11
- package/dist/core/index.js.map +1 -1
- package/dist/core/logger.d.ts +0 -1
- package/dist/core/logger.d.ts.map +1 -1
- package/dist/core/logger.js +10 -17
- package/dist/core/logger.js.map +1 -1
- package/dist/core/runner.d.ts +12 -63
- package/dist/core/runner.d.ts.map +1 -1
- package/dist/core/runner.js +159 -92
- package/dist/core/runner.js.map +1 -1
- package/dist/core/transform.d.ts +37 -0
- package/dist/core/transform.d.ts.map +1 -0
- package/dist/core/transform.js +148 -0
- package/dist/core/transform.js.map +1 -0
- package/dist/dsl/index.js +5 -1
- package/dist/dsl/index.js.map +1 -1
- package/dist/dsl/journey.d.ts +9 -7
- package/dist/dsl/journey.d.ts.map +1 -1
- package/dist/dsl/journey.js +32 -39
- package/dist/dsl/journey.js.map +1 -1
- package/dist/dsl/monitor.d.ts +93 -0
- package/dist/dsl/monitor.d.ts.map +1 -0
- package/dist/dsl/monitor.js +110 -0
- package/dist/dsl/monitor.js.map +1 -0
- package/dist/dsl/step.d.ts +3 -2
- package/dist/dsl/step.d.ts.map +1 -1
- package/dist/dsl/step.js +6 -1
- package/dist/dsl/step.js.map +1 -1
- package/dist/formatter/javascript.d.ts +115 -0
- package/dist/formatter/javascript.d.ts.map +1 -0
- package/dist/formatter/javascript.js +331 -0
- package/dist/formatter/javascript.js.map +1 -0
- package/dist/generator/index.d.ts +24 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +241 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/{reporters/reporter.js → generator/utils.d.ts} +5 -3
- package/dist/generator/utils.d.ts.map +1 -0
- package/dist/generator/utils.js +84 -0
- package/dist/generator/utils.js.map +1 -0
- package/dist/helpers.d.ts +36 -9
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +170 -24
- package/dist/helpers.js.map +1 -1
- package/dist/index.d.ts +5 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -26
- package/dist/index.js.map +1 -1
- package/dist/loader.d.ts +34 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +153 -0
- package/dist/loader.js.map +1 -0
- package/dist/locations/index.d.ts +45 -0
- package/dist/locations/index.d.ts.map +1 -0
- package/dist/locations/index.js +83 -0
- package/dist/locations/index.js.map +1 -0
- package/dist/{reporters/reporter.d.ts → locations/public-locations.d.ts} +12 -8
- package/dist/locations/public-locations.d.ts.map +1 -0
- package/dist/locations/public-locations.js +41 -0
- package/dist/locations/public-locations.js.map +1 -0
- package/dist/options.d.ts +42 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +146 -0
- package/dist/options.js.map +1 -0
- package/dist/plugins/browser-console.d.ts +5 -4
- package/dist/plugins/browser-console.d.ts.map +1 -1
- package/dist/plugins/browser-console.js +47 -24
- package/dist/plugins/browser-console.js.map +1 -1
- package/dist/plugins/index.js +5 -1
- package/dist/plugins/index.js.map +1 -1
- package/dist/plugins/network.d.ts +24 -31
- package/dist/plugins/network.d.ts.map +1 -1
- package/dist/plugins/network.js +226 -229
- package/dist/plugins/network.js.map +1 -1
- package/dist/plugins/performance.d.ts +4 -19
- package/dist/plugins/performance.d.ts.map +1 -1
- package/dist/plugins/performance.js +6 -5
- package/dist/plugins/performance.js.map +1 -1
- package/dist/plugins/plugin-manager.d.ts +9 -5
- package/dist/plugins/plugin-manager.d.ts.map +1 -1
- package/dist/plugins/plugin-manager.js +46 -30
- package/dist/plugins/plugin-manager.js.map +1 -1
- package/dist/plugins/tracing.d.ts +6 -6
- package/dist/plugins/tracing.d.ts.map +1 -1
- package/dist/plugins/tracing.js +13 -7
- package/dist/plugins/tracing.js.map +1 -1
- package/dist/push/bundler.d.ts +35 -0
- package/dist/push/bundler.d.ts.map +1 -0
- package/dist/push/bundler.js +131 -0
- package/dist/push/bundler.js.map +1 -0
- package/dist/push/index.d.ts +10 -0
- package/dist/push/index.d.ts.map +1 -0
- package/dist/push/index.js +235 -0
- package/dist/push/index.js.map +1 -0
- package/dist/push/kibana_api.d.ts +56 -0
- package/dist/push/kibana_api.d.ts.map +1 -0
- package/dist/push/kibana_api.js +135 -0
- package/dist/push/kibana_api.js.map +1 -0
- package/dist/push/monitor.d.ts +55 -0
- package/dist/push/monitor.d.ts.map +1 -0
- package/dist/push/monitor.js +268 -0
- package/dist/push/monitor.js.map +1 -0
- package/dist/{parse_args.d.ts → push/plugin.d.ts} +9 -6
- package/dist/push/plugin.d.ts.map +1 -0
- package/dist/push/plugin.js +66 -0
- package/dist/push/plugin.js.map +1 -0
- package/dist/push/request.d.ts +45 -0
- package/dist/push/request.d.ts.map +1 -0
- package/dist/push/request.js +109 -0
- package/dist/push/request.js.map +1 -0
- package/dist/push/utils.d.ts +31 -0
- package/dist/push/utils.d.ts.map +1 -0
- package/dist/push/utils.js +64 -0
- package/dist/push/utils.js.map +1 -0
- package/dist/reporters/base.d.ts +14 -6
- package/dist/reporters/base.d.ts.map +1 -1
- package/dist/reporters/base.js +58 -50
- package/dist/reporters/base.js.map +1 -1
- package/dist/reporters/index.d.ts +18 -8
- package/dist/reporters/index.d.ts.map +1 -1
- package/dist/reporters/index.js.map +1 -1
- package/dist/reporters/json.d.ts +17 -62
- package/dist/reporters/json.d.ts.map +1 -1
- package/dist/reporters/json.js +147 -177
- package/dist/reporters/json.js.map +1 -1
- package/dist/reporters/junit.d.ts +7 -1
- package/dist/reporters/junit.d.ts.map +1 -1
- package/dist/reporters/junit.js +90 -95
- package/dist/reporters/junit.js.map +1 -1
- package/dist/sdk/lh-trace-processor.d.ts +35 -9
- package/dist/sdk/lh-trace-processor.d.ts.map +1 -1
- package/dist/sdk/lh-trace-processor.js +114 -53
- package/dist/sdk/lh-trace-processor.js.map +1 -1
- package/dist/sdk/trace-metrics.d.ts +4 -4
- package/dist/sdk/trace-metrics.d.ts.map +1 -1
- package/dist/sdk/trace-metrics.js +3 -4
- package/dist/sdk/trace-metrics.js.map +1 -1
- package/dist/sdk/trace-processor.d.ts +11 -3
- package/dist/sdk/trace-processor.d.ts.map +1 -1
- package/dist/sdk/trace-processor.js +17 -9
- package/dist/sdk/trace-processor.js.map +1 -1
- package/package.json +38 -30
- package/src/cli.ts +223 -158
- package/src/common_types.ts +191 -34
- package/src/config.ts +1 -1
- package/src/core/expect.ts +58 -24
- package/src/core/gatherer.ts +92 -25
- package/src/core/index.ts +36 -15
- package/src/core/logger.ts +8 -12
- package/src/core/runner.ts +158 -148
- package/src/core/transform.ts +160 -0
- package/src/dsl/journey.ts +41 -21
- package/src/dsl/monitor.ts +152 -0
- package/src/dsl/step.ts +9 -2
- package/src/formatter/javascript.ts +414 -0
- package/src/generator/index.ts +308 -0
- package/src/generator/utils.ts +84 -0
- package/src/helpers.ts +182 -16
- package/src/index.ts +21 -22
- package/src/loader.ts +171 -0
- package/src/locations/index.ts +95 -0
- package/src/{reporters/reporter.ts → locations/public-locations.ts} +12 -9
- package/src/options.ts +175 -0
- package/src/plugins/browser-console.ts +33 -8
- package/src/plugins/network.ts +266 -284
- package/src/plugins/performance.ts +6 -22
- package/src/plugins/plugin-manager.ts +49 -31
- package/src/plugins/tracing.ts +11 -9
- package/src/push/bundler.ts +112 -0
- package/src/push/index.ts +291 -0
- package/src/push/kibana_api.ts +191 -0
- package/src/push/monitor.ts +307 -0
- package/src/push/plugin.ts +66 -0
- package/src/push/request.ts +141 -0
- package/src/push/utils.ts +77 -0
- package/src/reporters/base.ts +63 -52
- package/src/reporters/index.ts +26 -3
- package/src/reporters/json.ts +181 -201
- package/src/reporters/junit.ts +98 -93
- package/src/sdk/lh-trace-processor.ts +132 -68
- package/src/sdk/trace-metrics.ts +8 -4
- package/src/sdk/trace-processor.ts +28 -13
- package/templates/.github/workflows/run-synthetics.yml +27 -0
- package/templates/README.md +21 -0
- package/templates/journeys/advanced-example-helpers.ts +54 -0
- package/templates/journeys/advanced-example.journey.ts +43 -0
- package/templates/journeys/example.journey.ts +18 -0
- package/templates/lightweight/heartbeat.yml +9 -0
- package/templates/synthetics.config.ts +35 -0
- package/CHANGELOG.md +0 -181
- package/NOTICE.txt +0 -221
- package/dist/parse_args.d.ts.map +0 -1
- package/dist/parse_args.js +0 -98
- package/dist/parse_args.js.map +0 -1
- package/dist/reporters/reporter.d.ts.map +0 -1
- package/dist/reporters/reporter.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1895
- package/src/parse_args.ts +0 -146
package/dist/reporters/base.d.ts
CHANGED
|
@@ -23,14 +23,22 @@
|
|
|
23
23
|
*
|
|
24
24
|
*/
|
|
25
25
|
import SonicBoom from 'sonic-boom';
|
|
26
|
-
import
|
|
27
|
-
import {
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
import { Reporter, ReporterOptions } from '.';
|
|
27
|
+
import { JourneyEndResult, JourneyStartResult, StepEndResult } from '../common_types';
|
|
28
|
+
import { Journey, Step } from '../dsl';
|
|
29
|
+
export default class BaseReporter implements Reporter {
|
|
30
30
|
stream: SonicBoom;
|
|
31
31
|
fd: number;
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
metrics: {
|
|
33
|
+
succeeded: number;
|
|
34
|
+
failed: number;
|
|
35
|
+
skipped: number;
|
|
36
|
+
};
|
|
37
|
+
constructor(options?: ReporterOptions);
|
|
38
|
+
onJourneyStart(journey: Journey, {}: JourneyStartResult): void;
|
|
39
|
+
onStepEnd(_: Journey, step: Step, result: StepEndResult): void;
|
|
40
|
+
onJourneyEnd(_: Journey, { error }: JourneyEndResult): void;
|
|
41
|
+
onEnd(): void;
|
|
34
42
|
write(message: any): void;
|
|
35
43
|
}
|
|
36
44
|
//# sourceMappingURL=base.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/reporters/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/reporters/base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,SAAS,MAAM,YAAY,CAAC;AASnC,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,GAAG,CAAC;AAC9C,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACd,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAyBvC,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,QAAQ;IACnD,MAAM,EAAE,SAAS,CAAC;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO;;;;MAIL;gBAEU,OAAO,GAAE,eAAoB;IAUzC,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,kBAAkB;IAIvD,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa;IAWvD,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,EAAE,gBAAgB;IAYpD,KAAK;IAwBL,KAAK,CAAC,OAAO,KAAA;CAMd"}
|
package/dist/reporters/base.js
CHANGED
|
@@ -32,75 +32,83 @@ const colors_1 = require("kleur/colors");
|
|
|
32
32
|
const helpers_1 = require("../helpers");
|
|
33
33
|
function renderError(error) {
|
|
34
34
|
let output = '';
|
|
35
|
-
const outer = helpers_1.indent('');
|
|
36
|
-
const inner = helpers_1.indent(outer);
|
|
35
|
+
const outer = (0, helpers_1.indent)('');
|
|
36
|
+
const inner = (0, helpers_1.indent)(outer);
|
|
37
37
|
const container = outer + '---\n';
|
|
38
38
|
output += container;
|
|
39
39
|
let stack = error.stack;
|
|
40
40
|
if (stack) {
|
|
41
41
|
output += inner + 'stack: |-\n';
|
|
42
|
-
stack = helpers_1.rewriteErrorStack(stack, helpers_1.findPWLogsIndexes(stack));
|
|
42
|
+
stack = (0, helpers_1.rewriteErrorStack)(stack, (0, helpers_1.findPWLogsIndexes)(stack));
|
|
43
43
|
const lines = String(stack).split('\n');
|
|
44
44
|
for (const line of lines) {
|
|
45
45
|
output += inner + ' ' + line + '\n';
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
output += container;
|
|
49
|
-
return colors_1.red(output);
|
|
49
|
+
return (0, colors_1.red)(output);
|
|
50
50
|
}
|
|
51
51
|
function renderDuration(durationMs) {
|
|
52
52
|
return parseInt(durationMs);
|
|
53
53
|
}
|
|
54
54
|
class BaseReporter {
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
stream;
|
|
56
|
+
fd;
|
|
57
|
+
metrics = {
|
|
58
|
+
succeeded: 0,
|
|
59
|
+
failed: 0,
|
|
60
|
+
skipped: 0,
|
|
61
|
+
};
|
|
62
|
+
constructor(options = {}) {
|
|
57
63
|
this.fd = options.fd || process.stdout.fd;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
64
|
+
/**
|
|
65
|
+
* minLength is set to 1 byte to make sure we flush the
|
|
66
|
+
* content even if its the last byte on the stream buffer
|
|
67
|
+
* before destroying the pipe with underlying file descriptor
|
|
68
|
+
*/
|
|
69
|
+
this.stream = new sonic_boom_1.default({ fd: this.fd, sync: true, minLength: 1 });
|
|
61
70
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
}
|
|
68
|
-
this.
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
let message = '\n';
|
|
92
|
-
if (total === 0) {
|
|
93
|
-
message = 'No tests found!';
|
|
94
|
-
message += ` (${renderDuration(helpers_1.now())} ms) \n`;
|
|
95
|
-
this.write(message);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
message += succeeded > 0 ? colors_1.green(` ${succeeded} passed`) : '';
|
|
99
|
-
message += failed > 0 ? colors_1.red(` ${failed} failed`) : '';
|
|
100
|
-
message += skipped > 0 ? colors_1.cyan(` ${skipped} skipped`) : '';
|
|
101
|
-
message += ` (${renderDuration(helpers_1.now())} ms) \n`;
|
|
71
|
+
onJourneyStart(journey, {}) {
|
|
72
|
+
this.write(`\nJourney: ${journey.name}`);
|
|
73
|
+
}
|
|
74
|
+
onStepEnd(_, step, result) {
|
|
75
|
+
const { status, end, start, error } = result;
|
|
76
|
+
const message = `${helpers_1.symbols[status]} Step: '${step.name}' ${status} (${renderDuration((end - start) * 1000)} ms)`;
|
|
77
|
+
this.write((0, helpers_1.indent)(message));
|
|
78
|
+
error && this.write(renderError(error));
|
|
79
|
+
this.metrics[status]++;
|
|
80
|
+
}
|
|
81
|
+
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
82
|
+
onJourneyEnd(_, { error }) {
|
|
83
|
+
const { failed, succeeded, skipped } = this.metrics;
|
|
84
|
+
const total = failed + succeeded + skipped;
|
|
85
|
+
/**
|
|
86
|
+
* Render the error on the terminal only when no steps could
|
|
87
|
+
* be executed which means the error happened in one of the hooks
|
|
88
|
+
*/
|
|
89
|
+
if (total === 0 && error) {
|
|
90
|
+
this.write(renderError(error));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
onEnd() {
|
|
94
|
+
const { failed, succeeded, skipped } = this.metrics;
|
|
95
|
+
const total = failed + succeeded + skipped;
|
|
96
|
+
let message = '\n';
|
|
97
|
+
if (total === 0) {
|
|
98
|
+
message = 'No tests found!';
|
|
99
|
+
message += ` (${renderDuration((0, helpers_1.now)())} ms) \n`;
|
|
102
100
|
this.write(message);
|
|
103
|
-
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
message += succeeded > 0 ? (0, colors_1.green)(` ${succeeded} passed`) : '';
|
|
104
|
+
message += failed > 0 ? (0, colors_1.red)(` ${failed} failed`) : '';
|
|
105
|
+
message += skipped > 0 ? (0, colors_1.cyan)(` ${skipped} skipped`) : '';
|
|
106
|
+
message += ` (${renderDuration((0, helpers_1.now)())} ms) \n`;
|
|
107
|
+
this.write(message);
|
|
108
|
+
// flushSync is used here to make sure all the data from the underlying
|
|
109
|
+
// SonicBoom stream buffer is completely written to the fd before closing
|
|
110
|
+
// the process
|
|
111
|
+
this.stream.flushSync();
|
|
104
112
|
}
|
|
105
113
|
write(message) {
|
|
106
114
|
if (typeof message == 'object') {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/reporters/base.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;AAEH,4DAAmC;AACnC,yCAAgD;
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/reporters/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,14 +22,24 @@
|
|
|
22
22
|
* THE SOFTWARE.
|
|
23
23
|
*
|
|
24
24
|
*/
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
25
|
+
import { Journey, Step } from '../dsl';
|
|
26
|
+
import { StartEvent, JourneyEndResult, JourneyStartResult, StepEndResult } from '../common_types';
|
|
27
|
+
export declare type ReporterOptions = {
|
|
28
|
+
fd?: number;
|
|
29
|
+
colors?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export declare type BuiltInReporterName = 'default' | 'json' | 'junit';
|
|
32
|
+
export declare type ReporterInstance = new (opts: ReporterOptions) => Reporter;
|
|
30
33
|
export declare const reporters: {
|
|
31
|
-
|
|
32
|
-
json: typeof JSONReporter;
|
|
33
|
-
junit: typeof JUnitReporter;
|
|
34
|
+
[key in BuiltInReporterName]: ReporterInstance;
|
|
34
35
|
};
|
|
36
|
+
export interface Reporter {
|
|
37
|
+
onStart?(params: StartEvent): void;
|
|
38
|
+
onJourneyRegister?(journey: Journey): void;
|
|
39
|
+
onJourneyStart?(journey: Journey, result: JourneyStartResult): void;
|
|
40
|
+
onStepStart?(journey: Journey, step: Step): void;
|
|
41
|
+
onStepEnd?(journey: Journey, step: Step, result: StepEndResult): void;
|
|
42
|
+
onJourneyEnd?(journey: Journey, result: JourneyEndResult): void | Promise<void>;
|
|
43
|
+
onEnd?(): void | Promise<void>;
|
|
44
|
+
}
|
|
35
45
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAKH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACd,MAAM,iBAAiB,CAAC;AAEzB,oBAAY,eAAe,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAChE,oBAAY,mBAAmB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAC/D,oBAAY,gBAAgB,GAAG,KAAK,IAAI,EAAE,eAAe,KAAK,QAAQ,CAAC;AACvE,eAAO,MAAM,SAAS,EAAE;KACrB,GAAG,IAAI,mBAAmB,GAAG,gBAAgB;CAK/C,CAAC;AAEF,MAAM,WAAW,QAAQ;IACvB,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,iBAAiB,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3C,cAAc,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IACpE,WAAW,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IACjD,SAAS,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IACtE,YAAY,CAAC,CACX,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,gBAAgB,GACvB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;AAEH,kDAAkC;AAClC,kDAAkC;AAClC,oDAAoC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;;;;;AAEH,kDAAkC;AAClC,kDAAkC;AAClC,oDAAoC;AAYvB,QAAA,SAAS,GAElB;IACF,OAAO,EAAE,cAAY;IACrB,IAAI,EAAE,cAAY;IAClB,KAAK,EAAE,eAAa;CACrB,CAAC"}
|
package/dist/reporters/json.d.ts
CHANGED
|
@@ -25,21 +25,19 @@
|
|
|
25
25
|
/// <reference types="node" />
|
|
26
26
|
import BaseReporter from './base';
|
|
27
27
|
import { Journey, Step } from '../dsl';
|
|
28
|
-
import { NetworkInfo, TraceOutput, StatusValue, PerfMetrics,
|
|
29
|
-
|
|
30
|
-
import { Metrics } from '../plugins';
|
|
31
|
-
declare type OutputType = 'synthetics/metadata' | 'journey/register' | 'journey/start' | 'screenshot/block' | 'step/screenshot_ref' | 'step/screenshot' | 'step/end' | 'journey/network_info' | 'journey/filmstrips' | 'journey/browserconsole' | 'journey/metrics' | 'journey/end';
|
|
28
|
+
import { NetworkInfo, NetworkConditions, TraceOutput, StatusValue, PerfMetrics, Screenshot, StartEvent, JourneyStartResult, StepEndResult, JourneyEndResult, PageMetrics } from '../common_types';
|
|
29
|
+
declare type OutputType = 'synthetics/metadata' | 'journey/register' | 'journey/start' | 'screenshot/block' | 'step/screenshot_ref' | 'step/screenshot' | 'step/metrics' | 'step/filmstrips' | 'step/end' | 'journey/network_info' | 'journey/browserconsole' | 'journey/end';
|
|
32
30
|
declare type Payload = {
|
|
33
31
|
source?: string;
|
|
34
32
|
start?: number;
|
|
35
33
|
end?: number;
|
|
36
34
|
url?: string;
|
|
37
|
-
status?: StatusValue
|
|
38
|
-
|
|
39
|
-
params?: Params;
|
|
35
|
+
status?: StatusValue;
|
|
36
|
+
pagemetrics?: PageMetrics;
|
|
40
37
|
type?: OutputType;
|
|
41
38
|
text?: string;
|
|
42
39
|
index?: number;
|
|
40
|
+
network_conditions?: NetworkConditions;
|
|
43
41
|
};
|
|
44
42
|
declare type OutputFields = {
|
|
45
43
|
type: OutputType;
|
|
@@ -54,7 +52,7 @@ declare type OutputFields = {
|
|
|
54
52
|
};
|
|
55
53
|
error?: Error;
|
|
56
54
|
root_fields?: Record<string, unknown>;
|
|
57
|
-
payload?: Payload
|
|
55
|
+
payload?: Payload;
|
|
58
56
|
blob?: string;
|
|
59
57
|
blob_mime?: string;
|
|
60
58
|
};
|
|
@@ -82,58 +80,10 @@ export declare function formatNetworkFields(network: NetworkInfo): {
|
|
|
82
80
|
original: string;
|
|
83
81
|
};
|
|
84
82
|
http: {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
body: {
|
|
88
|
-
bytes: number;
|
|
89
|
-
content: string;
|
|
90
|
-
};
|
|
91
|
-
referrer: string;
|
|
92
|
-
url: string;
|
|
93
|
-
urlFragment?: string;
|
|
94
|
-
method: string;
|
|
95
|
-
headers: Protocol.Network.Headers;
|
|
96
|
-
postData?: string;
|
|
97
|
-
hasPostData?: boolean;
|
|
98
|
-
postDataEntries?: Protocol.Network.PostDataEntry[];
|
|
99
|
-
mixedContentType?: Protocol.Security.MixedContentType;
|
|
100
|
-
initialPriority: Protocol.Network.ResourcePriority;
|
|
101
|
-
referrerPolicy: "unsafe-url" | "no-referrer-when-downgrade" | "no-referrer" | "origin" | "origin-when-cross-origin" | "same-origin" | "strict-origin" | "strict-origin-when-cross-origin";
|
|
102
|
-
isLinkPreload?: boolean;
|
|
103
|
-
trustTokenParams?: Protocol.Network.TrustTokenParams;
|
|
104
|
-
};
|
|
105
|
-
response: {
|
|
106
|
-
body: {
|
|
107
|
-
bytes: number;
|
|
108
|
-
};
|
|
109
|
-
status_code: number;
|
|
110
|
-
url: string;
|
|
111
|
-
status: number;
|
|
112
|
-
statusText: string;
|
|
113
|
-
headers: Protocol.Network.Headers;
|
|
114
|
-
headersText?: string;
|
|
115
|
-
mimeType: string;
|
|
116
|
-
requestHeaders?: Protocol.Network.Headers;
|
|
117
|
-
requestHeadersText?: string;
|
|
118
|
-
connectionReused: boolean;
|
|
119
|
-
connectionId: number;
|
|
120
|
-
remoteIPAddress?: string;
|
|
121
|
-
remotePort?: number;
|
|
122
|
-
fromDiskCache?: boolean;
|
|
123
|
-
fromServiceWorker?: boolean;
|
|
124
|
-
fromPrefetchCache?: boolean;
|
|
125
|
-
encodedDataLength: number;
|
|
126
|
-
timing?: Protocol.Network.ResourceTiming;
|
|
127
|
-
serviceWorkerResponseSource?: Protocol.Network.ServiceWorkerResponseSource;
|
|
128
|
-
responseTime?: number;
|
|
129
|
-
cacheStorageCacheName?: string;
|
|
130
|
-
protocol?: string;
|
|
131
|
-
securityState: Protocol.Security.SecurityState;
|
|
132
|
-
securityDetails?: Protocol.Network.SecurityDetails;
|
|
133
|
-
};
|
|
83
|
+
request: import("../common_types").Request;
|
|
84
|
+
response: import("../common_types").Response;
|
|
134
85
|
};
|
|
135
86
|
tls: {
|
|
136
|
-
cipher: string;
|
|
137
87
|
server: {
|
|
138
88
|
x509: {
|
|
139
89
|
issuer: {
|
|
@@ -162,11 +112,16 @@ export declare function getScreenshotBlocks(screenshot: Buffer): Promise<{
|
|
|
162
112
|
* at the end of each journey and construct equally sized blocks out
|
|
163
113
|
* of the individual screenshot image.
|
|
164
114
|
*/
|
|
165
|
-
export declare function gatherScreenshots(screenshotsPath: string, callback: (
|
|
115
|
+
export declare function gatherScreenshots(screenshotsPath: string, callback: (data: Screenshot) => Promise<void>): Promise<void>;
|
|
166
116
|
export default class JSONReporter extends BaseReporter {
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
117
|
+
onStart(event: StartEvent): void;
|
|
118
|
+
onJourneyRegister(journey: Journey): void;
|
|
119
|
+
onJourneyStart(journey: Journey, { timestamp }: JourneyStartResult): void;
|
|
120
|
+
onStepEnd(journey: Journey, step: Step, { start, end, error, url, status, pagemetrics, traces, metrics, filmstrips, }: StepEndResult): void;
|
|
121
|
+
onJourneyEnd(journey: Journey, { timestamp, start, end, networkinfo, browserconsole, status, error, options, }: JourneyEndResult): Promise<void>;
|
|
122
|
+
onEnd(): void;
|
|
123
|
+
writeScreenshotBlocks(journey: Journey, screenshot: Screenshot): Promise<void>;
|
|
124
|
+
writeMetrics(journey: Journey, step: Step, type: string, events: Array<TraceOutput> | PerfMetrics): void;
|
|
170
125
|
writeJSON({ _id, journey, type, timestamp, step, root_fields, error, payload, blob, blob_mime, url, }: OutputFields): void;
|
|
171
126
|
}
|
|
172
127
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/reporters/json.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;;AAMH,OAAO,YAAY,MAAM,QAAQ,CAAC;AASlC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EACL,WAAW,
|
|
1
|
+
{"version":3,"file":"json.d.ts","sourceRoot":"","sources":["../../src/reporters/json.ts"],"names":[],"mappings":"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"}
|