@serenity-js/playwright-test 3.41.2 → 3.42.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/CHANGELOG.md +11 -0
- package/esm/api/PerformActivitiesAsPlaywrightSteps.d.ts +14 -0
- package/esm/api/PerformActivitiesAsPlaywrightSteps.d.ts.map +1 -0
- package/esm/api/PerformActivitiesAsPlaywrightSteps.js +40 -0
- package/esm/api/PerformActivitiesAsPlaywrightSteps.js.map +1 -0
- package/esm/api/PlaywrightTestConfig.d.ts +42 -0
- package/esm/api/PlaywrightTestConfig.d.ts.map +1 -0
- package/esm/api/PlaywrightTestConfig.js +2 -0
- package/esm/api/PlaywrightTestConfig.js.map +1 -0
- package/esm/api/WorkerEventStreamReader.d.ts +13 -0
- package/esm/api/WorkerEventStreamReader.d.ts.map +1 -0
- package/esm/api/WorkerEventStreamReader.js +18 -0
- package/esm/api/WorkerEventStreamReader.js.map +1 -0
- package/esm/api/WorkerEventStreamWriter.d.ts +24 -0
- package/esm/api/WorkerEventStreamWriter.d.ts.map +1 -0
- package/esm/api/WorkerEventStreamWriter.js +79 -0
- package/esm/api/WorkerEventStreamWriter.js.map +1 -0
- package/esm/api/index.d.ts +4 -0
- package/esm/api/index.d.ts.map +1 -0
- package/esm/api/index.js +4 -0
- package/esm/api/index.js.map +1 -0
- package/esm/api/serenity-fixtures.d.ts +452 -0
- package/esm/api/serenity-fixtures.d.ts.map +1 -0
- package/esm/api/serenity-fixtures.js +2 -0
- package/esm/api/serenity-fixtures.js.map +1 -0
- package/esm/api/test-api.d.ts +387 -0
- package/esm/api/test-api.d.ts.map +1 -0
- package/esm/api/test-api.js +521 -0
- package/esm/api/test-api.js.map +1 -0
- package/esm/events/EventFactory.d.ts +16 -0
- package/esm/events/EventFactory.d.ts.map +1 -0
- package/esm/events/EventFactory.js +90 -0
- package/esm/events/EventFactory.js.map +1 -0
- package/esm/events/PlaywrightSceneId.d.ts +7 -0
- package/esm/events/PlaywrightSceneId.d.ts.map +1 -0
- package/esm/events/PlaywrightSceneId.js +15 -0
- package/esm/events/PlaywrightSceneId.js.map +1 -0
- package/esm/events/index.d.ts +3 -0
- package/esm/events/index.d.ts.map +1 -0
- package/esm/events/index.js +3 -0
- package/esm/events/index.js.map +1 -0
- package/esm/index.d.ts +3 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +3 -0
- package/esm/index.js.map +1 -0
- package/esm/reporter/PlaywrightErrorParser.d.ts +7 -0
- package/esm/reporter/PlaywrightErrorParser.d.ts.map +1 -0
- package/esm/reporter/PlaywrightErrorParser.js +23 -0
- package/esm/reporter/PlaywrightErrorParser.js.map +1 -0
- package/esm/reporter/PlaywrightEventBuffer.d.ts +25 -0
- package/esm/reporter/PlaywrightEventBuffer.d.ts.map +1 -0
- package/esm/reporter/PlaywrightEventBuffer.js +143 -0
- package/esm/reporter/PlaywrightEventBuffer.js.map +1 -0
- package/esm/reporter/PlaywrightStepReporter.d.ts +14 -0
- package/esm/reporter/PlaywrightStepReporter.d.ts.map +1 -0
- package/esm/reporter/PlaywrightStepReporter.js +38 -0
- package/esm/reporter/PlaywrightStepReporter.js.map +1 -0
- package/esm/reporter/PlaywrightTestSceneIdFactory.d.ts +8 -0
- package/esm/reporter/PlaywrightTestSceneIdFactory.d.ts.map +1 -0
- package/esm/reporter/PlaywrightTestSceneIdFactory.js +11 -0
- package/esm/reporter/PlaywrightTestSceneIdFactory.js.map +1 -0
- package/esm/reporter/SerenityReporterForPlaywrightTest.d.ts +58 -0
- package/esm/reporter/SerenityReporterForPlaywrightTest.d.ts.map +1 -0
- package/esm/reporter/SerenityReporterForPlaywrightTest.js +112 -0
- package/esm/reporter/SerenityReporterForPlaywrightTest.js.map +1 -0
- package/esm/reporter/index.d.ts +3 -0
- package/esm/reporter/index.d.ts.map +1 -0
- package/esm/reporter/index.js +3 -0
- package/esm/reporter/index.js.map +1 -0
- package/lib/api/PerformActivitiesAsPlaywrightSteps.d.ts +1 -1
- package/lib/api/PerformActivitiesAsPlaywrightSteps.d.ts.map +1 -1
- package/lib/api/PerformActivitiesAsPlaywrightSteps.js +2 -2
- package/lib/api/PerformActivitiesAsPlaywrightSteps.js.map +1 -1
- package/lib/api/PlaywrightTestConfig.d.ts +1 -1
- package/lib/api/PlaywrightTestConfig.d.ts.map +1 -1
- package/lib/api/WorkerEventStreamReader.d.ts +1 -1
- package/lib/api/WorkerEventStreamReader.d.ts.map +1 -1
- package/lib/api/WorkerEventStreamReader.js +1 -1
- package/lib/api/WorkerEventStreamReader.js.map +1 -1
- package/lib/api/WorkerEventStreamWriter.d.ts +2 -2
- package/lib/api/WorkerEventStreamWriter.d.ts.map +1 -1
- package/lib/api/WorkerEventStreamWriter.js +1 -1
- package/lib/api/WorkerEventStreamWriter.js.map +1 -1
- package/lib/api/index.d.ts +3 -3
- package/lib/api/index.d.ts.map +1 -1
- package/lib/api/index.js +3 -3
- package/lib/api/index.js.map +1 -1
- package/lib/api/test-api.d.ts +3 -3
- package/lib/api/test-api.d.ts.map +1 -1
- package/lib/api/test-api.js +12 -12
- package/lib/api/test-api.js.map +1 -1
- package/lib/events/EventFactory.d.ts +3 -3
- package/lib/events/EventFactory.d.ts.map +1 -1
- package/lib/events/EventFactory.js +6 -6
- package/lib/events/EventFactory.js.map +1 -1
- package/lib/events/PlaywrightSceneId.d.ts +1 -1
- package/lib/events/PlaywrightSceneId.d.ts.map +1 -1
- package/lib/events/PlaywrightSceneId.js +1 -1
- package/lib/events/PlaywrightSceneId.js.map +1 -1
- package/lib/events/index.d.ts +2 -2
- package/lib/events/index.d.ts.map +1 -1
- package/lib/events/index.js +2 -2
- package/lib/events/index.js.map +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -0
- package/lib/reporter/PlaywrightEventBuffer.d.ts +1 -1
- package/lib/reporter/PlaywrightEventBuffer.d.ts.map +1 -1
- package/lib/reporter/PlaywrightEventBuffer.js +12 -12
- package/lib/reporter/PlaywrightEventBuffer.js.map +1 -1
- package/lib/reporter/PlaywrightStepReporter.d.ts +1 -1
- package/lib/reporter/PlaywrightStepReporter.d.ts.map +1 -1
- package/lib/reporter/PlaywrightStepReporter.js +2 -2
- package/lib/reporter/PlaywrightStepReporter.js.map +1 -1
- package/lib/reporter/PlaywrightTestSceneIdFactory.d.ts +2 -2
- package/lib/reporter/PlaywrightTestSceneIdFactory.d.ts.map +1 -1
- package/lib/reporter/PlaywrightTestSceneIdFactory.js +1 -1
- package/lib/reporter/PlaywrightTestSceneIdFactory.js.map +1 -1
- package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts +1 -1
- package/lib/reporter/SerenityReporterForPlaywrightTest.d.ts.map +1 -1
- package/lib/reporter/SerenityReporterForPlaywrightTest.js +8 -8
- package/lib/reporter/SerenityReporterForPlaywrightTest.js.map +1 -1
- package/lib/reporter/index.d.ts +2 -2
- package/lib/reporter/index.d.ts.map +1 -1
- package/lib/reporter/index.js +2 -2
- package/lib/reporter/index.js.map +1 -1
- package/package.json +57 -9
- package/src/api/PerformActivitiesAsPlaywrightSteps.ts +2 -2
- package/src/api/PlaywrightTestConfig.ts +1 -1
- package/src/api/WorkerEventStreamReader.ts +2 -2
- package/src/api/WorkerEventStreamWriter.ts +2 -2
- package/src/api/index.ts +3 -3
- package/src/api/test-api.ts +8 -8
- package/src/events/EventFactory.ts +5 -5
- package/src/events/PlaywrightSceneId.ts +1 -1
- package/src/events/index.ts +2 -2
- package/src/index.ts +2 -2
- package/src/reporter/PlaywrightEventBuffer.ts +8 -8
- package/src/reporter/PlaywrightStepReporter.ts +4 -4
- package/src/reporter/PlaywrightTestSceneIdFactory.ts +2 -2
- package/src/reporter/SerenityReporterForPlaywrightTest.ts +6 -6
- package/src/reporter/index.ts +2 -2
- package/tsconfig-cjs.build.json +18 -0
- package/tsconfig-esm.build.json +18 -0
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [3.42.0](https://github.com/serenity-js/serenity-js/compare/v3.41.2...v3.42.0) (2026-03-19)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **core:** add ESM/CJS dual build support for web packages ([94c5a64](https://github.com/serenity-js/serenity-js/commit/94c5a6423dc369477bbabbacee5a54f8fca20209))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [3.41.2](https://github.com/serenity-js/serenity-js/compare/v3.41.1...v3.41.2) (2026-03-05)
|
|
7
18
|
|
|
8
19
|
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { test as base } from '@playwright/test';
|
|
2
|
+
import type { Activity, AnswersQuestions, PerformsActivities, UsesAbilities } from '@serenity-js/core';
|
|
3
|
+
import { PerformActivities } from '@serenity-js/core';
|
|
4
|
+
import type { EmitsDomainEvents } from '@serenity-js/core/events';
|
|
5
|
+
export declare class PerformActivitiesAsPlaywrightSteps extends PerformActivities {
|
|
6
|
+
private readonly test;
|
|
7
|
+
constructor(actor: AnswersQuestions & UsesAbilities & PerformsActivities & {
|
|
8
|
+
name: string;
|
|
9
|
+
}, stage: EmitsDomainEvents, test: typeof base);
|
|
10
|
+
perform(activity: Activity): Promise<void>;
|
|
11
|
+
private parametersOf;
|
|
12
|
+
private locationOf;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=PerformActivitiesAsPlaywrightSteps.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformActivitiesAsPlaywrightSteps.d.ts","sourceRoot":"","sources":["../../src/api/PerformActivitiesAsPlaywrightSteps.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,IAAI,EAAY,MAAM,kBAAkB,CAAC;AAC/D,OAAO,KAAK,EACR,QAAQ,EACR,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EAChB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAkB,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,qBAAa,kCAAmC,SAAQ,iBAAiB;IAKjE,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAFrB,KAAK,EAAE,gBAAgB,GAAG,aAAa,GAAG,kBAAkB,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAC/E,KAAK,EAAE,iBAAiB,EACP,IAAI,EAAE,OAAO,IAAI;IAKvB,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBzD,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,UAAU;CAQrB"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { d, Interaction, PerformActivities } from '@serenity-js/core';
|
|
2
|
+
import { significantFieldsOf } from 'tiny-types/lib/objects/significantFields.js';
|
|
3
|
+
export class PerformActivitiesAsPlaywrightSteps extends PerformActivities {
|
|
4
|
+
test;
|
|
5
|
+
constructor(actor, stage, test) {
|
|
6
|
+
super(actor, stage);
|
|
7
|
+
this.test = test;
|
|
8
|
+
}
|
|
9
|
+
async perform(activity) {
|
|
10
|
+
const testInfo = this.test.info();
|
|
11
|
+
// Monkey-patch addStep to allow for passing a pre-computed location
|
|
12
|
+
// see https://github.com/microsoft/playwright/issues/30160
|
|
13
|
+
const originalAddStep = testInfo._addStep;
|
|
14
|
+
testInfo._addStep = (data) => {
|
|
15
|
+
data.location = this.locationOf(activity);
|
|
16
|
+
data.params = this.parametersOf(activity);
|
|
17
|
+
return originalAddStep.call(testInfo, data);
|
|
18
|
+
};
|
|
19
|
+
await this.test.step(await activity.describedBy(this.actor), () => super.perform(activity));
|
|
20
|
+
testInfo._addStep = originalAddStep;
|
|
21
|
+
}
|
|
22
|
+
parametersOf(activity) {
|
|
23
|
+
if (activity instanceof Interaction) {
|
|
24
|
+
return significantFieldsOf(activity).reduce((acc, field) => {
|
|
25
|
+
acc[field] = d `${activity[field]}`;
|
|
26
|
+
return acc;
|
|
27
|
+
}, {});
|
|
28
|
+
}
|
|
29
|
+
return {};
|
|
30
|
+
}
|
|
31
|
+
locationOf(activity) {
|
|
32
|
+
const instantiationLocation = activity.instantiationLocation();
|
|
33
|
+
return {
|
|
34
|
+
file: instantiationLocation.path.value,
|
|
35
|
+
line: instantiationLocation.line,
|
|
36
|
+
column: instantiationLocation.column
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=PerformActivitiesAsPlaywrightSteps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PerformActivitiesAsPlaywrightSteps.js","sourceRoot":"","sources":["../../src/api/PerformActivitiesAsPlaywrightSteps.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAElF,MAAM,OAAO,kCAAmC,SAAQ,iBAAiB;IAKhD;IAHrB,YACI,KAA+E,EAC/E,KAAwB,EACP,IAAiB;QAElC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAFH,SAAI,GAAJ,IAAI,CAAa;IAGtC,CAAC;IAEQ,KAAK,CAAC,OAAO,CAAC,QAAkB;QACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAE9B,CAAC;QAEF,oEAAoE;QACpE,2DAA2D;QAC3D,MAAM,eAAe,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC1C,QAAQ,CAAC,QAAQ,GAAG,CAAC,IAAsB,EAAE,EAAE;YAE3C,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;YAE1C,OAAO,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC,CAAA;QAED,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAChB,MAAM,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EACtC,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAChC,CAAC;QAEF,QAAQ,CAAC,QAAQ,GAAG,eAAe,CAAC;IACxC,CAAC;IAEO,YAAY,CAAC,QAAkB;QACnC,IAAI,QAAQ,YAAY,WAAW,EAAE,CAAC;YAClC,OAAO,mBAAmB,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACvD,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,GAAI,QAAQ,CAAC,KAAK,CAAE,EAAE,CAAC;gBACrC,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,EAAE,CAAC,CAAC;QACX,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAEO,UAAU,CAAC,QAAkB;QACjC,MAAM,qBAAqB,GAAG,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAC/D,OAAO;YACH,IAAI,EAAE,qBAAqB,CAAC,IAAI,CAAC,KAAK;YACtC,IAAI,EAAE,qBAAqB,CAAC,IAAI;YAChC,MAAM,EAAE,qBAAqB,CAAC,MAAM;SACvC,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { PlaywrightTestConfig as BasePlaywrightTestConfig } from '@playwright/test';
|
|
2
|
+
import type { SerenityFixtures, SerenityWorkerFixtures } from './serenity-fixtures.js';
|
|
3
|
+
/**
|
|
4
|
+
* Convenience alias for [PlaywrightTestConfig](https://playwright.dev/docs/test-configuration) object
|
|
5
|
+
* that includes [`SerenityFixtures`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/) and
|
|
6
|
+
* [`SerenityWorkerFixtures`](https://serenity-js.org/api/playwright-test/interface/SerenityWorkerFixtures/) and allows for any other custom options when needed.
|
|
7
|
+
*
|
|
8
|
+
* #### Example
|
|
9
|
+
* Configuring Playwright Test using the standard `PlaywrightTestConfig` from `@playwright/test`:
|
|
10
|
+
*
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // playwright.config.ts
|
|
13
|
+
* import type { PlaywrightTestConfig } from '@playwright/test'
|
|
14
|
+
* import type { SerenityFixtures, SerenityWorkerFixtures } from '@serenity-js/playwright-test'
|
|
15
|
+
*
|
|
16
|
+
* const config: PlaywrightTestConfig<SerenityFixtures & MyCustomOptions, SerenityWorkerFixtures> = {
|
|
17
|
+
* // ...
|
|
18
|
+
* }
|
|
19
|
+
*
|
|
20
|
+
* export default config
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* Simplified configuration using Serenity/JS `PlaywrightTestConfig` from `@serenity-js/playwright-test`:
|
|
24
|
+
*
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // playwright.config.ts
|
|
27
|
+
* import type { PlaywrightTestConfig } from '@serenity-js/playwright-test'
|
|
28
|
+
*
|
|
29
|
+
* const config: PlaywrightTestConfig<MyCustomOptions> = {
|
|
30
|
+
* // ...
|
|
31
|
+
* }
|
|
32
|
+
* export default config
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* #### Learn more
|
|
36
|
+
* - [`SerenityFixtures`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/)
|
|
37
|
+
* - [`SerenityWorkerFixtures`](https://serenity-js.org/api/playwright-test/interface/SerenityWorkerFixtures/)
|
|
38
|
+
* - [`SerenityReporterForPlaywrightTestConfig`](https://serenity-js.org/api/playwright-test/interface/SerenityReporterForPlaywrightTestConfig/)
|
|
39
|
+
* - [Playwright Test configuration](https://playwright.dev/docs/test-configuration)
|
|
40
|
+
*/
|
|
41
|
+
export type PlaywrightTestConfig<TestArgs = object, WorkerArgs = object> = BasePlaywrightTestConfig<SerenityFixtures & TestArgs, SerenityWorkerFixtures & WorkerArgs>;
|
|
42
|
+
//# sourceMappingURL=PlaywrightTestConfig.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightTestConfig.d.ts","sourceRoot":"","sources":["../../src/api/PlaywrightTestConfig.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,IAAI,wBAAwB,EAAE,MAAM,kBAAkB,CAAC;AAEzF,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEvF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,MAAM,oBAAoB,CAAC,QAAQ,GAAG,MAAM,EAAE,UAAU,GAAG,MAAM,IAAI,wBAAwB,CAAC,gBAAgB,GAAG,QAAQ,EAAE,sBAAsB,GAAG,UAAU,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaywrightTestConfig.js","sourceRoot":"","sources":["../../src/api/PlaywrightTestConfig.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { DomainEvent } from '@serenity-js/core/events';
|
|
2
|
+
import type { JSONObject } from 'tiny-types';
|
|
3
|
+
export declare class WorkerEventStreamReader {
|
|
4
|
+
hasStream(pathToEventStreamFile: string): boolean;
|
|
5
|
+
read<T extends DomainEvent>(pathToEventStreamFile: string, mapper?: (input: {
|
|
6
|
+
type: string;
|
|
7
|
+
value: JSONObject;
|
|
8
|
+
}) => {
|
|
9
|
+
type: string;
|
|
10
|
+
value: JSONObject;
|
|
11
|
+
}): T[];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=WorkerEventStreamReader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamReader.d.ts","sourceRoot":"","sources":["../../src/api/WorkerEventStreamReader.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,qBAAa,uBAAuB;IAEhC,SAAS,CAAC,qBAAqB,EAAE,MAAM,GAAG,OAAO;IAIjD,IAAI,CAAC,CAAC,SAAS,WAAW,EACtB,qBAAqB,EAAE,MAAM,EAC7B,MAAM,GAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,KAAK;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAmB,GAC7G,CAAC,EAAE;CAWT"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import * as events from '@serenity-js/core/events';
|
|
3
|
+
export class WorkerEventStreamReader {
|
|
4
|
+
hasStream(pathToEventStreamFile) {
|
|
5
|
+
return fs.existsSync(pathToEventStreamFile);
|
|
6
|
+
}
|
|
7
|
+
read(pathToEventStreamFile, mapper = input => input) {
|
|
8
|
+
const content = fs.readFileSync(pathToEventStreamFile, 'utf8');
|
|
9
|
+
return content
|
|
10
|
+
.split('\n')
|
|
11
|
+
.filter(Boolean)
|
|
12
|
+
.map(line => {
|
|
13
|
+
const { type, value } = mapper(JSON.parse(line));
|
|
14
|
+
return events[type].fromJSON(value);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=WorkerEventStreamReader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamReader.js","sourceRoot":"","sources":["../../src/api/WorkerEventStreamReader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AAGzB,OAAO,KAAK,MAAM,MAAM,0BAA0B,CAAC;AAGnD,MAAM,OAAO,uBAAuB;IAEhC,SAAS,CAAC,qBAA6B;QACnC,OAAO,EAAE,CAAC,UAAU,CAAC,qBAAqB,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,CACA,qBAA6B,EAC7B,SAA8F,KAAK,CAAC,EAAE,CAAC,KAAK;QAE5G,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAE/D,OAAO,OAAO;aACT,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,OAAO,CAAC;aACf,GAAG,CAAC,IAAI,CAAC,EAAE;YACR,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;IACX,CAAC;CACJ"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { type WorkerInfo } from '@playwright/test';
|
|
2
|
+
import type { TestCase } from '@playwright/test/reporter';
|
|
3
|
+
import type { Stage, StageCrewMember } from '@serenity-js/core';
|
|
4
|
+
import type { DomainEvent } from '@serenity-js/core/events';
|
|
5
|
+
import { CorrelationId } from '@serenity-js/core/model';
|
|
6
|
+
export declare class WorkerEventStreamWriter implements StageCrewMember {
|
|
7
|
+
private readonly outputDirectory;
|
|
8
|
+
private readonly workerInfo;
|
|
9
|
+
private stage?;
|
|
10
|
+
private readonly beforeAllId;
|
|
11
|
+
private activeSceneId;
|
|
12
|
+
private events;
|
|
13
|
+
static workerStreamIdFor(workerIndex: number): CorrelationId;
|
|
14
|
+
constructor(outputDirectory: string, workerInfo: WorkerInfo, stage?: Stage);
|
|
15
|
+
assignedTo(stage: Stage): StageCrewMember;
|
|
16
|
+
notifyOf(event: DomainEvent): void;
|
|
17
|
+
private isSceneEvent;
|
|
18
|
+
private activeSceneExistsFor;
|
|
19
|
+
private activateScene;
|
|
20
|
+
persistAll(workerBeforeAllSceneId: CorrelationId): Promise<void>;
|
|
21
|
+
persist(testId: TestCase['id'], workerBeforeAllSceneId?: CorrelationId): Promise<void>;
|
|
22
|
+
private flush;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=WorkerEventStreamWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamWriter.d.ts","sourceRoot":"","sources":["../../src/api/WorkerEventStreamWriter.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEhE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAGxD,qBAAa,uBAAwB,YAAW,eAAe;IAYvD,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,KAAK,CAAC;IAZlB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAC5C,OAAO,CAAC,aAAa,CAAgB;IAErC,OAAO,CAAC,MAAM,CAAiD;IAE/D,MAAM,CAAC,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;gBAKvC,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,UAAU,EAC/B,KAAK,CAAC,EAAE,KAAK;IAQzB,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,eAAe;IAMzC,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IASlC,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,oBAAoB;IAI5B,OAAO,CAAC,aAAa;IAgBf,UAAU,CAAC,sBAAsB,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAMhE,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,sBAAsB,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B5F,OAAO,CAAC,KAAK;CAUhB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import path from 'node:path';
|
|
3
|
+
import { LogicError } from '@serenity-js/core';
|
|
4
|
+
import { CorrelationId } from '@serenity-js/core/model';
|
|
5
|
+
export class WorkerEventStreamWriter {
|
|
6
|
+
outputDirectory;
|
|
7
|
+
workerInfo;
|
|
8
|
+
stage;
|
|
9
|
+
beforeAllId; // = new CorrelationId('unknown');
|
|
10
|
+
activeSceneId; // = WorkerEventStreamWriter.beforeTest;
|
|
11
|
+
events = new Map();
|
|
12
|
+
static workerStreamIdFor(workerIndex) {
|
|
13
|
+
return new CorrelationId(`worker-${workerIndex}`);
|
|
14
|
+
}
|
|
15
|
+
constructor(outputDirectory, workerInfo, stage) {
|
|
16
|
+
this.outputDirectory = outputDirectory;
|
|
17
|
+
this.workerInfo = workerInfo;
|
|
18
|
+
this.stage = stage;
|
|
19
|
+
this.beforeAllId = WorkerEventStreamWriter.workerStreamIdFor(this.workerInfo.workerIndex);
|
|
20
|
+
this.activeSceneId = this.beforeAllId;
|
|
21
|
+
this.events.set(this.beforeAllId.value, []);
|
|
22
|
+
}
|
|
23
|
+
assignedTo(stage) {
|
|
24
|
+
this.stage = stage;
|
|
25
|
+
return this;
|
|
26
|
+
}
|
|
27
|
+
notifyOf(event) {
|
|
28
|
+
if (this.isSceneEvent(event) && !this.activeSceneExistsFor(event)) {
|
|
29
|
+
this.activateScene(event);
|
|
30
|
+
}
|
|
31
|
+
this.events.get(this.activeSceneId.value).push(event);
|
|
32
|
+
}
|
|
33
|
+
isSceneEvent(event) {
|
|
34
|
+
return event['sceneId'] instanceof CorrelationId;
|
|
35
|
+
}
|
|
36
|
+
activeSceneExistsFor(event) {
|
|
37
|
+
return this.activeSceneId.equals(event.sceneId);
|
|
38
|
+
}
|
|
39
|
+
activateScene(event) {
|
|
40
|
+
this.activeSceneId = event.sceneId;
|
|
41
|
+
const testId = event.sceneId.value;
|
|
42
|
+
if (!this.events.has(testId)) {
|
|
43
|
+
this.events.set(testId, []);
|
|
44
|
+
}
|
|
45
|
+
this.events.get(testId).push(...this.events.get(this.beforeAllId.value));
|
|
46
|
+
this.events.set(this.beforeAllId.value, []);
|
|
47
|
+
}
|
|
48
|
+
async persistAll(workerBeforeAllSceneId) {
|
|
49
|
+
const testIds = [...this.events.keys()];
|
|
50
|
+
await Promise.all(testIds.map(testId => this.persist(testId, workerBeforeAllSceneId)));
|
|
51
|
+
}
|
|
52
|
+
async persist(testId, workerBeforeAllSceneId) {
|
|
53
|
+
const testOutputDirectory = path.join(this.outputDirectory, testId);
|
|
54
|
+
const filePath = path.join(testOutputDirectory, 'events.ndjson');
|
|
55
|
+
const events = this.flush(testId);
|
|
56
|
+
if (events.length === 0) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
await fs.promises.mkdir(testOutputDirectory, { recursive: true });
|
|
60
|
+
for (const event of events) {
|
|
61
|
+
const shouldReattachToScene = event['sceneId'] && event['sceneId'].equals(workerBeforeAllSceneId);
|
|
62
|
+
const type = event.constructor.name;
|
|
63
|
+
const value = shouldReattachToScene
|
|
64
|
+
? ({ ...event.toJSON(), sceneId: testId })
|
|
65
|
+
: event.toJSON();
|
|
66
|
+
const serialisedEvent = JSON.stringify({ type, value }, undefined, 0);
|
|
67
|
+
await fs.promises.appendFile(filePath, serialisedEvent + '\n');
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
flush(testId) {
|
|
71
|
+
if (!this.events.has(testId)) {
|
|
72
|
+
throw new LogicError(`No events recorded for test with id ${testId}`);
|
|
73
|
+
}
|
|
74
|
+
const events = this.events.get(testId);
|
|
75
|
+
this.events.set(testId, []);
|
|
76
|
+
return events;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=WorkerEventStreamWriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerEventStreamWriter.js","sourceRoot":"","sources":["../../src/api/WorkerEventStreamWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC"}
|
package/esm/api/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC"}
|