@serenity-js/core 3.40.0 → 3.41.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 +16 -0
- package/lib/events/actor/ActorEntersStage.d.ts +7 -1
- package/lib/events/actor/ActorEntersStage.d.ts.map +1 -1
- package/lib/events/actor/ActorEntersStage.js +7 -1
- package/lib/events/actor/ActorEntersStage.js.map +1 -1
- package/lib/events/actor/ActorSpotlighted.d.ts +25 -0
- package/lib/events/actor/ActorSpotlighted.d.ts.map +1 -0
- package/lib/events/actor/ActorSpotlighted.js +36 -0
- package/lib/events/actor/ActorSpotlighted.js.map +1 -0
- package/lib/events/actor/index.d.ts +1 -0
- package/lib/events/actor/index.d.ts.map +1 -1
- package/lib/events/actor/index.js +1 -0
- package/lib/events/actor/index.js.map +1 -1
- package/lib/stage/Stage.d.ts +5 -0
- package/lib/stage/Stage.d.ts.map +1 -1
- package/lib/stage/Stage.js +13 -3
- package/lib/stage/Stage.js.map +1 -1
- package/package.json +3 -3
- package/src/events/actor/ActorEntersStage.ts +7 -1
- package/src/events/actor/ActorSpotlighted.ts +40 -0
- package/src/events/actor/index.ts +1 -0
- package/src/stage/Stage.ts +19 -6
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
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.41.0](https://github.com/serenity-js/serenity-js/compare/v3.40.0...v3.41.0) (2026-02-15)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* **deps:** update dependency semver to v7.7.4 ([e2e2df1](https://github.com/serenity-js/serenity-js/commit/e2e2df1398e6b6fcc7df2e6b413f6345cc0c2e87))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
|
|
16
|
+
* **core:** differentiate between ActorEntersStage and ActorSpotlighted events ([62e8bb4](https://github.com/serenity-js/serenity-js/commit/62e8bb47cbb9aa60bf4da504f0eb92b16ae2c281)), closes [#2855](https://github.com/serenity-js/serenity-js/issues/2855)
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
6
22
|
# [3.40.0](https://github.com/serenity-js/serenity-js/compare/v3.39.0...v3.40.0) (2026-02-04)
|
|
7
23
|
|
|
8
24
|
|
|
@@ -3,9 +3,15 @@ import { CorrelationId } from '../../model';
|
|
|
3
3
|
import { type SerialisedActor, Timestamp } from '../../screenplay';
|
|
4
4
|
import { DomainEvent } from '../DomainEvent';
|
|
5
5
|
/**
|
|
6
|
-
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) is
|
|
6
|
+
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) is first instantiated
|
|
7
7
|
* as the result of invoking [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
|
|
8
8
|
*
|
|
9
|
+
* This event is emitted only once per actor, when they are first created.
|
|
10
|
+
* Subsequent retrievals of the same actor do not emit this event.
|
|
11
|
+
*
|
|
12
|
+
* To track when the spotlight shifts to a different actor, listen for
|
|
13
|
+
* [`ActorSpotlighted`](https://serenity-js.org/api/core-events/class/ActorSpotlighted/) instead.
|
|
14
|
+
*
|
|
9
15
|
* @group Events
|
|
10
16
|
*/
|
|
11
17
|
export declare class ActorEntersStage extends DomainEvent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorEntersStage.d.ts","sourceRoot":"","sources":["../../../src/events/actor/ActorEntersStage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"ActorEntersStage.d.ts","sourceRoot":"","sources":["../../../src/events/actor/ActorEntersStage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,KAAK,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;GAWG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;aAUzB,OAAO,EAAE,aAAa;aACtB,KAAK,EAAE,eAAe;WAV5B,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,gBAAgB;gBASnC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,eAAe,EACtC,SAAS,CAAC,EAAE,SAAS;CAM5B"}
|
|
@@ -6,9 +6,15 @@ const model_1 = require("../../model");
|
|
|
6
6
|
const screenplay_1 = require("../../screenplay");
|
|
7
7
|
const DomainEvent_1 = require("../DomainEvent");
|
|
8
8
|
/**
|
|
9
|
-
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) is
|
|
9
|
+
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) is first instantiated
|
|
10
10
|
* as the result of invoking [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
|
|
11
11
|
*
|
|
12
|
+
* This event is emitted only once per actor, when they are first created.
|
|
13
|
+
* Subsequent retrievals of the same actor do not emit this event.
|
|
14
|
+
*
|
|
15
|
+
* To track when the spotlight shifts to a different actor, listen for
|
|
16
|
+
* [`ActorSpotlighted`](https://serenity-js.org/api/core-events/class/ActorSpotlighted/) instead.
|
|
17
|
+
*
|
|
12
18
|
* @group Events
|
|
13
19
|
*/
|
|
14
20
|
class ActorEntersStage extends DomainEvent_1.DomainEvent {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorEntersStage.js","sourceRoot":"","sources":["../../../src/events/actor/ActorEntersStage.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAE/C,uCAA4C;AAC5C,iDAAmE;AACnE,gDAA6C;AAE7C
|
|
1
|
+
{"version":3,"file":"ActorEntersStage.js","sourceRoot":"","sources":["../../../src/events/actor/ActorEntersStage.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAE/C,uCAA4C;AAC5C,iDAAmE;AACnE,gDAA6C;AAE7C;;;;;;;;;;;GAWG;AACH,MAAa,gBAAiB,SAAQ,yBAAW;IAUzB;IACA;IAVb,MAAM,CAAC,QAAQ,CAAC,CAAa;QAChC,OAAO,IAAI,gBAAgB,CACvB,qBAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAiB,CAAC,EAC3C,CAAC,CAAC,KAAmC,EACrC,sBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAmB,CAAC,CAC5C,CAAC;IACN,CAAC;IAED,YACoB,OAAsB,EACtB,KAAsB,EACtC,SAAqB;QAErB,KAAK,CAAC,SAAS,CAAC,CAAC;QAJD,YAAO,GAAP,OAAO,CAAe;QACtB,UAAK,GAAL,KAAK,CAAiB;QAItC,IAAA,mBAAM,EAAC,SAAS,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QACxC,IAAA,mBAAM,EAAC,OAAO,EAAE,KAAK,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;IACxC,CAAC;CACJ;AAlBD,4CAkBC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { JSONObject } from 'tiny-types';
|
|
2
|
+
import { CorrelationId } from '../../model';
|
|
3
|
+
import type { SerialisedActor } from '../../screenplay';
|
|
4
|
+
import { Timestamp } from '../../screenplay';
|
|
5
|
+
import { DomainEvent } from '../DomainEvent';
|
|
6
|
+
/**
|
|
7
|
+
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) becomes
|
|
8
|
+
* the active actor (moves into the spotlight) as the result of invoking
|
|
9
|
+
* [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
|
|
10
|
+
*
|
|
11
|
+
* This event is emitted only when the spotlight shifts to a different actor.
|
|
12
|
+
* Consecutive retrievals of the same actor do not emit additional events.
|
|
13
|
+
*
|
|
14
|
+
* To detect when an actor is instantiated for the first time, listen for
|
|
15
|
+
* [`ActorEntersStage`](https://serenity-js.org/api/core-events/class/ActorEntersStage/).
|
|
16
|
+
*
|
|
17
|
+
* @group Events
|
|
18
|
+
*/
|
|
19
|
+
export declare class ActorSpotlighted extends DomainEvent {
|
|
20
|
+
readonly sceneId: CorrelationId;
|
|
21
|
+
readonly actor: SerialisedActor;
|
|
22
|
+
static fromJSON(o: JSONObject): ActorSpotlighted;
|
|
23
|
+
constructor(sceneId: CorrelationId, actor: SerialisedActor, timestamp?: Timestamp);
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ActorSpotlighted.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActorSpotlighted.d.ts","sourceRoot":"","sources":["../../../src/events/actor/ActorSpotlighted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,SAAQ,WAAW;aAUzB,OAAO,EAAE,aAAa;aACtB,KAAK,EAAE,eAAe;WAV5B,QAAQ,CAAC,CAAC,EAAE,UAAU,GAAG,gBAAgB;gBASnC,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,eAAe,EACtC,SAAS,CAAC,EAAE,SAAS;CAM5B"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActorSpotlighted = void 0;
|
|
4
|
+
const tiny_types_1 = require("tiny-types");
|
|
5
|
+
const model_1 = require("../../model");
|
|
6
|
+
const screenplay_1 = require("../../screenplay");
|
|
7
|
+
const DomainEvent_1 = require("../DomainEvent");
|
|
8
|
+
/**
|
|
9
|
+
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) becomes
|
|
10
|
+
* the active actor (moves into the spotlight) as the result of invoking
|
|
11
|
+
* [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
|
|
12
|
+
*
|
|
13
|
+
* This event is emitted only when the spotlight shifts to a different actor.
|
|
14
|
+
* Consecutive retrievals of the same actor do not emit additional events.
|
|
15
|
+
*
|
|
16
|
+
* To detect when an actor is instantiated for the first time, listen for
|
|
17
|
+
* [`ActorEntersStage`](https://serenity-js.org/api/core-events/class/ActorEntersStage/).
|
|
18
|
+
*
|
|
19
|
+
* @group Events
|
|
20
|
+
*/
|
|
21
|
+
class ActorSpotlighted extends DomainEvent_1.DomainEvent {
|
|
22
|
+
sceneId;
|
|
23
|
+
actor;
|
|
24
|
+
static fromJSON(o) {
|
|
25
|
+
return new ActorSpotlighted(model_1.CorrelationId.fromJSON(o.sceneId), o.actor, screenplay_1.Timestamp.fromJSON(o.timestamp));
|
|
26
|
+
}
|
|
27
|
+
constructor(sceneId, actor, timestamp) {
|
|
28
|
+
super(timestamp);
|
|
29
|
+
this.sceneId = sceneId;
|
|
30
|
+
this.actor = actor;
|
|
31
|
+
(0, tiny_types_1.ensure)('sceneId', sceneId, (0, tiny_types_1.isDefined)());
|
|
32
|
+
(0, tiny_types_1.ensure)('actor', actor, (0, tiny_types_1.isDefined)());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ActorSpotlighted = ActorSpotlighted;
|
|
36
|
+
//# sourceMappingURL=ActorSpotlighted.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ActorSpotlighted.js","sourceRoot":"","sources":["../../../src/events/actor/ActorSpotlighted.ts"],"names":[],"mappings":";;;AACA,2CAA+C;AAE/C,uCAA4C;AAE5C,iDAA6C;AAC7C,gDAA6C;AAE7C;;;;;;;;;;;;GAYG;AACH,MAAa,gBAAiB,SAAQ,yBAAW;IAUzB;IACA;IAVb,MAAM,CAAC,QAAQ,CAAC,CAAa;QAChC,OAAO,IAAI,gBAAgB,CACvB,qBAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAiB,CAAC,EAC3C,CAAC,CAAC,KAAmC,EACrC,sBAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAmB,CAAC,CAC5C,CAAC;IACN,CAAC;IAED,YACoB,OAAsB,EACtB,KAAsB,EACtC,SAAqB;QAErB,KAAK,CAAC,SAAS,CAAC,CAAC;QAJD,YAAO,GAAP,OAAO,CAAe;QACtB,UAAK,GAAL,KAAK,CAAiB;QAItC,IAAA,mBAAM,EAAC,SAAS,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QACxC,IAAA,mBAAM,EAAC,OAAO,EAAE,KAAK,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;IACxC,CAAC;CACJ;AAlBD,4CAkBC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/actor/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/events/actor/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC"}
|
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./ActorEntersStage"), exports);
|
|
18
|
+
__exportStar(require("./ActorSpotlighted"), exports);
|
|
18
19
|
__exportStar(require("./ActorStageExitAttempted"), exports);
|
|
19
20
|
__exportStar(require("./ActorStageExitCompleted"), exports);
|
|
20
21
|
__exportStar(require("./ActorStageExitFailed"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/actor/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,4DAA0C;AAC1C,4DAA0C;AAC1C,yDAAuC;AACvC,yDAAuC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/events/actor/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,qDAAmC;AACnC,4DAA0C;AAC1C,4DAA0C;AAC1C,yDAAuC;AACvC,yDAAuC"}
|
package/lib/stage/Stage.d.ts
CHANGED
|
@@ -45,6 +45,11 @@ export declare class Stage implements EmitsDomainEvents {
|
|
|
45
45
|
* The most recent actor referenced via the [`Actor`](https://serenity-js.org/api/core/class/Actor/) method
|
|
46
46
|
*/
|
|
47
47
|
private actorInTheSpotlight;
|
|
48
|
+
/**
|
|
49
|
+
* The scene in which the spotlight was last set.
|
|
50
|
+
* Used to detect when the spotlight shifts to a different scene context.
|
|
51
|
+
*/
|
|
52
|
+
private sceneOfSpotlightedActor;
|
|
48
53
|
private currentActivity;
|
|
49
54
|
private currentScene;
|
|
50
55
|
/**
|
package/lib/stage/Stage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stage.d.ts","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAEH,YAAY,EACZ,KAAK,YAAY,EAGjB,KAAK,YAAY,EACpB,MAAM,WAAW,CAAC;AACnB,OAAO,
|
|
1
|
+
{"version":3,"file":"Stage.d.ts","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
|
package/lib/stage/Stage.js
CHANGED
|
@@ -45,6 +45,11 @@ class Stage {
|
|
|
45
45
|
* The most recent actor referenced via the [`Actor`](https://serenity-js.org/api/core/class/Actor/) method
|
|
46
46
|
*/
|
|
47
47
|
actorInTheSpotlight = undefined;
|
|
48
|
+
/**
|
|
49
|
+
* The scene in which the spotlight was last set.
|
|
50
|
+
* Used to detect when the spotlight shifts to a different scene context.
|
|
51
|
+
*/
|
|
52
|
+
sceneOfSpotlightedActor = undefined;
|
|
48
53
|
currentActivity = undefined;
|
|
49
54
|
currentScene = Stage.unknownSceneId;
|
|
50
55
|
/**
|
|
@@ -115,10 +120,15 @@ class Stage {
|
|
|
115
120
|
this.actorsOnStage.set(name, actor);
|
|
116
121
|
this.announce(new events_1.ActorEntersStage(this.currentScene, actor.toJSON()));
|
|
117
122
|
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
}
|
|
123
|
+
const previousActorInSpotlight = this.actorInTheSpotlight;
|
|
124
|
+
const previousSceneOfSpotlightedActor = this.sceneOfSpotlightedActor;
|
|
121
125
|
this.actorInTheSpotlight = this.instantiatedActorCalled(name);
|
|
126
|
+
this.sceneOfSpotlightedActor = this.currentScene;
|
|
127
|
+
const spotlightShifted = this.actorInTheSpotlight !== previousActorInSpotlight
|
|
128
|
+
|| !this.currentScene.equals(previousSceneOfSpotlightedActor);
|
|
129
|
+
if (spotlightShifted) {
|
|
130
|
+
this.announce(new events_1.ActorSpotlighted(this.currentScene, this.actorInTheSpotlight.toJSON()));
|
|
131
|
+
}
|
|
122
132
|
return this.actorInTheSpotlight;
|
|
123
133
|
}
|
|
124
134
|
/**
|
package/lib/stage/Stage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Stage.js","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":";;;AAAA,2CAAyD;AAGzD,sCAOmB;AACnB,
|
|
1
|
+
{"version":3,"file":"Stage.js","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@serenity-js/core",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.41.0",
|
|
4
4
|
"description": "The core Serenity/JS framework, providing the Screenplay Pattern interfaces, as well as the test reporting and integration infrastructure",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Jan Molak",
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"fast-glob": "3.3.3",
|
|
45
45
|
"filenamify": "4.3.0",
|
|
46
46
|
"graceful-fs": "4.2.11",
|
|
47
|
-
"semver": "7.7.
|
|
47
|
+
"semver": "7.7.4",
|
|
48
48
|
"tiny-types": "1.24.3",
|
|
49
49
|
"upath": "2.0.1",
|
|
50
50
|
"validate-npm-package-name": "7.0.2"
|
|
@@ -74,5 +74,5 @@
|
|
|
74
74
|
"engines": {
|
|
75
75
|
"node": "^20 || ^22 || ^24"
|
|
76
76
|
},
|
|
77
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "ab51d003053c1a89896f7719f8bbc0eab6b78513"
|
|
78
78
|
}
|
|
@@ -6,9 +6,15 @@ import { type SerialisedActor, Timestamp } from '../../screenplay';
|
|
|
6
6
|
import { DomainEvent } from '../DomainEvent';
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) is
|
|
9
|
+
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) is first instantiated
|
|
10
10
|
* as the result of invoking [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
|
|
11
11
|
*
|
|
12
|
+
* This event is emitted only once per actor, when they are first created.
|
|
13
|
+
* Subsequent retrievals of the same actor do not emit this event.
|
|
14
|
+
*
|
|
15
|
+
* To track when the spotlight shifts to a different actor, listen for
|
|
16
|
+
* [`ActorSpotlighted`](https://serenity-js.org/api/core-events/class/ActorSpotlighted/) instead.
|
|
17
|
+
*
|
|
12
18
|
* @group Events
|
|
13
19
|
*/
|
|
14
20
|
export class ActorEntersStage extends DomainEvent {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { JSONObject } from 'tiny-types';
|
|
2
|
+
import { ensure, isDefined } from 'tiny-types';
|
|
3
|
+
|
|
4
|
+
import { CorrelationId } from '../../model';
|
|
5
|
+
import type { SerialisedActor } from '../../screenplay';
|
|
6
|
+
import { Timestamp } from '../../screenplay';
|
|
7
|
+
import { DomainEvent } from '../DomainEvent';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Emitted when an [`Actor`](https://serenity-js.org/api/core/class/Actor/) becomes
|
|
11
|
+
* the active actor (moves into the spotlight) as the result of invoking
|
|
12
|
+
* [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
|
|
13
|
+
*
|
|
14
|
+
* This event is emitted only when the spotlight shifts to a different actor.
|
|
15
|
+
* Consecutive retrievals of the same actor do not emit additional events.
|
|
16
|
+
*
|
|
17
|
+
* To detect when an actor is instantiated for the first time, listen for
|
|
18
|
+
* [`ActorEntersStage`](https://serenity-js.org/api/core-events/class/ActorEntersStage/).
|
|
19
|
+
*
|
|
20
|
+
* @group Events
|
|
21
|
+
*/
|
|
22
|
+
export class ActorSpotlighted extends DomainEvent {
|
|
23
|
+
public static fromJSON(o: JSONObject): ActorSpotlighted {
|
|
24
|
+
return new ActorSpotlighted(
|
|
25
|
+
CorrelationId.fromJSON(o.sceneId as string),
|
|
26
|
+
o.actor as unknown as SerialisedActor,
|
|
27
|
+
Timestamp.fromJSON(o.timestamp as string),
|
|
28
|
+
);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
public readonly sceneId: CorrelationId,
|
|
33
|
+
public readonly actor: SerialisedActor,
|
|
34
|
+
timestamp?: Timestamp,
|
|
35
|
+
) {
|
|
36
|
+
super(timestamp);
|
|
37
|
+
ensure('sceneId', sceneId, isDefined());
|
|
38
|
+
ensure('actor', actor, isDefined());
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/stage/Stage.ts
CHANGED
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
} from '../errors';
|
|
12
12
|
import {
|
|
13
13
|
ActorEntersStage,
|
|
14
|
+
ActorSpotlighted,
|
|
14
15
|
ActorStageExitAttempted,
|
|
15
16
|
ActorStageExitCompleted,
|
|
16
17
|
ActorStageExitFailed,
|
|
@@ -66,6 +67,12 @@ export class Stage implements EmitsDomainEvents {
|
|
|
66
67
|
*/
|
|
67
68
|
private actorInTheSpotlight: Actor = undefined;
|
|
68
69
|
|
|
70
|
+
/**
|
|
71
|
+
* The scene in which the spotlight was last set.
|
|
72
|
+
* Used to detect when the spotlight shifts to a different scene context.
|
|
73
|
+
*/
|
|
74
|
+
private sceneOfSpotlightedActor: CorrelationId = undefined;
|
|
75
|
+
|
|
69
76
|
private currentActivity: { id: CorrelationId, details: ActivityDetails } = undefined;
|
|
70
77
|
|
|
71
78
|
private currentScene: CorrelationId = Stage.unknownSceneId;
|
|
@@ -155,17 +162,23 @@ export class Stage implements EmitsDomainEvents {
|
|
|
155
162
|
)
|
|
156
163
|
}
|
|
157
164
|
|
|
158
|
-
|
|
165
|
+
const previousActorInSpotlight = this.actorInTheSpotlight;
|
|
166
|
+
const previousSceneOfSpotlightedActor = this.sceneOfSpotlightedActor;
|
|
167
|
+
this.actorInTheSpotlight = this.instantiatedActorCalled(name);
|
|
168
|
+
this.sceneOfSpotlightedActor = this.currentScene;
|
|
169
|
+
|
|
170
|
+
const spotlightShifted = this.actorInTheSpotlight !== previousActorInSpotlight
|
|
171
|
+
|| ! this.currentScene.equals(previousSceneOfSpotlightedActor);
|
|
172
|
+
|
|
173
|
+
if (spotlightShifted) {
|
|
159
174
|
this.announce(
|
|
160
|
-
new
|
|
175
|
+
new ActorSpotlighted(
|
|
161
176
|
this.currentScene,
|
|
162
|
-
this.
|
|
177
|
+
this.actorInTheSpotlight.toJSON(),
|
|
163
178
|
)
|
|
164
|
-
)
|
|
179
|
+
);
|
|
165
180
|
}
|
|
166
181
|
|
|
167
|
-
this.actorInTheSpotlight = this.instantiatedActorCalled(name);
|
|
168
|
-
|
|
169
182
|
return this.actorInTheSpotlight;
|
|
170
183
|
}
|
|
171
184
|
|