@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 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 activated
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;;;;;GAKG;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"}
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 activated
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;;;;;GAKG;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
+ {"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,4 +1,5 @@
1
1
  export * from './ActorEntersStage';
2
+ export * from './ActorSpotlighted';
2
3
  export * from './ActorStageExitAttempted';
3
4
  export * from './ActorStageExitCompleted';
4
5
  export * from './ActorStageExitFailed';
@@ -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"}
@@ -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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Stage.d.ts","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Stage.d.ts","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
@@ -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
- if (this.actorsOnBackstage.has(name)) {
119
- this.announce(new events_1.ActorEntersStage(this.currentScene, this.actorsOnBackstage.get(name).toJSON()));
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
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Stage.js","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Stage.js","sourceRoot":"","sources":["../../src/stage/Stage.ts"],"names":[],"mappings":";;;AAAA,2CAAyD;AAGzD,sCAOmB;AACnB,sCAYmB;AACnB,oCAAgG;AAChG,8CAA+F;AAK/F;;;;;;;;;;;;;;;GAeG;AACH,MAAa,KAAK;IA0CF;IACA;IACA;IACS;IACT;IACS;IA7Cd,MAAM,CAAU,cAAc,GAAG,IAAI,qBAAa,CAAC,SAAS,CAAC,CAAA;IAEpE;;;OAGG;IACK,kBAAkB,GAAuB,IAAI,GAAG,EAAiB,CAAC;IAE1E;;;OAGG;IACK,iBAAiB,GAAuB,IAAI,GAAG,EAAiB,CAAC;IAEjE,aAAa,GAAuB,IAAI,CAAC,iBAAiB,CAAC;IAEnE;;OAEG;IACK,mBAAmB,GAAU,SAAS,CAAC;IAE/C;;;OAGG;IACK,uBAAuB,GAAkB,SAAS,CAAC;IAEnD,eAAe,GAAoD,SAAS,CAAC;IAE7E,YAAY,GAAkB,KAAK,CAAC,cAAc,CAAC;IAE3D;;;;;;;OAOG;IACH,YACY,IAAU,EACV,OAAqB,EACrB,MAAoB,EACX,KAAY,EACrB,kBAA4B,EACnB,iBAAuC,qBAAa;QAL7D,SAAI,GAAJ,IAAI,CAAM;QACV,YAAO,GAAP,OAAO,CAAc;QACrB,WAAM,GAAN,MAAM,CAAc;QACX,UAAK,GAAL,KAAK,CAAO;QACrB,uBAAkB,GAAlB,kBAAkB,CAAU;QACnB,mBAAc,GAAd,cAAc,CAAsC;QAErE,IAAA,mBAAM,EAAC,MAAM,EAAE,IAAI,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAClC,IAAA,mBAAM,EAAC,cAAc,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC7C,IAAA,mBAAM,EAAC,cAAc,EAAE,MAAM,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC5C,IAAA,mBAAM,EAAC,OAAO,EAAE,KAAK,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QACpC,IAAA,mBAAM,EAAC,oBAAoB,EAAE,kBAAkB,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC9D,IAAA,mBAAM,EAAC,gBAAgB,EAAE,cAAc,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;IAC1D,CAAC;IAED,SAAS,CAAC,OAA+F;QACrG,IAAI,CAAC,kBAAkB,GAAG,OAAO,CAAC,kBAAkB,IAAI,IAAI,CAAC,kBAAkB,CAAC;QAEhF,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;QAC9D,CAAC;QAED,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAY,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,IAAY;QACd,IAAI,CAAE,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,IAAI,KAAK,CAAC;YACV,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,IAAI,kBAAK,CAAC,IAAI,EAAE,IAAI,EAAE;oBACnC,IAAI,oBAAW,CAAC,IAAI,CAAC;oBACrB,IAAI,yBAAY,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,kBAAkB,CAAC;iBACxD,CAAC,CAAC;gBAEH,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxC,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,MAAM,IAAI,2BAAkB,CAAC,GAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAE,gDAAiD,IAAK,aAAa,EAAE,KAAK,CAAC,CAAC;YACxI,CAAC;YAED,IAAI,CAAE,CAAC,KAAK,YAAY,kBAAK,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,2BAAkB,CAAC,uCAAwC,IAAK,MAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAE,aAAc,KAAM,EAAE,CAAC,CAAC;YACpI,CAAC;YAED,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAEpC,IAAI,CAAC,QAAQ,CACT,IAAI,yBAAgB,CAChB,IAAI,CAAC,YAAY,EACjB,KAAK,CAAC,MAAM,EAAE,CACjB,CACJ,CAAA;QACL,CAAC;QAED,MAAM,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,CAAC;QAC1D,MAAM,+BAA+B,GAAG,IAAI,CAAC,uBAAuB,CAAC;QACrE,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,YAAY,CAAC;QAEjD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,KAAK,wBAAwB;eACvE,CAAE,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC;QAEnE,IAAI,gBAAgB,EAAE,CAAC;YACnB,IAAI,CAAC,QAAQ,CACT,IAAI,yBAAgB,CAChB,IAAI,CAAC,YAAY,EACjB,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,CACpC,CACJ,CAAC;QACN,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED;;;;;;OAMG;IACH,sBAAsB;QAClB,IAAI,CAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,IAAI,mBAAU,CAAC,+HAA+H,CAAC,CAAC;QAC1J,CAAC;QAED,OAAO,IAAI,CAAC,mBAAmB,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACb,OAAO,CAAC,CAAE,IAAI,CAAC,mBAAmB,CAAC;IACvC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,MAAY;QACf,IAAI,CAAC,IAAI,GAAG,IAAA,mBAAM,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAA,sBAAS,GAAE,EAAE,IAAA,qBAAQ,EAAC,SAAS,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAG,SAAkC;QACxC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,QAAQ,CAAC,GAAG,MAA0B;QAClC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACnB,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC,CAAC,CAAC;IACP,CAAC;IAEO,cAAc,CAAC,KAAkB;QACrC,IAAI,KAAK,YAAY,oBAAW,EAAE,CAAC;YAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC;QACjD,CAAC;QAED,IAAI,KAAK,YAAY,sBAAa,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;YACrE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAE7B,IAAI,KAAK,YAAY,sBAAa,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAEjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,iBAAiB,CAAC;QAChD,CAAC;QAED,IAAI,KAAK,YAAY,wBAAe,EAAE,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACrC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,WAAW;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;IACtC,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC;QAEjD,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;;OAKG;IACH,cAAc;QACV,OAAO,IAAI,CAAC,YAAY,CAAC;IAC7B,CAAC;IAED;;;;;;;;;OASG;IACH,mBAAmB,CAAC,eAAgC;QAChD,IAAI,CAAC,eAAe,GAAG;YACnB,EAAE,EAAE,qBAAa,CAAC,MAAM,EAAE;YAC1B,OAAO,EAAE,eAAe;SAC3B,CAAC;QAEF,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACnC,CAAC;IAED;;;;;OAKG;IACH,iBAAiB;QACb,IAAI,CAAE,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,mBAAU,CAAC,qGAAqG,CAAC,CAAC;QAChI,CAAC;QAED,OAAO,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;OAOG;IACH,cAAc;QACV,OAAO,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;IACzC,CAAC;IAED,WAAW,CAA0B,SAAqC,EAAE,OAAqB;QAC7F,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE;YACjC,QAAQ,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,QAAQ;YAChD,GAAG,OAAO;SACb,CAAC,CAAC;IACP,CAAC;IAEO,uBAAuB,CAAC,IAAY;QACxC,OAAO,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YACnC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC;YAClC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3C,CAAC;IAEO,iBAAiB,CAAC,OAAsB;QAC5C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,IAAI,6BAAoB,CAClC,OAAO,EACP,KAAK,CAAC,MAAM,EAAE,EACd,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,OAAO,CAAC,YAAgC;QAClD,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;QAEjD,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC5C,IAAI,CAAC,mBAAmB,GAAG,SAAS,CAAC;QACzC,CAAC;QAED,6DAA6D;QAC7D,MAAM,IAAI,CAAC,OAAO,CAAC,gCAAgC,EAAE,CAAC;QAEtD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAuB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,qBAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;QAE5G,KAAK,MAAM,CAAE,KAAK,EAAE,aAAa,CAAE,IAAI,eAAe,EAAE,CAAC;YACrD,IAAI,CAAC,QAAQ,CAAC,IAAI,gCAAuB,CACrC,aAAa,EACb,IAAI,YAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EACpB,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC,CAAC;QACP,CAAC;QAED,4BAA4B;QAC5B,KAAK,MAAM,CAAE,KAAK,EAAE,aAAa,CAAE,IAAI,eAAe,EAAE,CAAC;YACrD,IAAI,CAAC;gBACD,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;gBAEtB,IAAI,CAAC,QAAQ,CAAC,IAAI,gCAAuB,CAAC,aAAa,EAAE,IAAI,YAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;YACxG,CAAC;YACD,OAAO,KAAK,EAAE,CAAC;gBACX,IAAI,CAAC,QAAQ,CAAC,IAAI,6BAAoB,CAClC,KAAK,EACL,aAAa,EACb,IAAI,CAAC,WAAW,EAAE,CACrB,CAAC,CAAC;YACP,CAAC;QACL,CAAC;QAED,YAAY,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,MAAM,CAAC,IAAU;QACrB,OAAO,IAAI,CAAC,WAAW,KAAK,MAAM;YAC9B,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IAChC,CAAC;;AAvWL,sBAwWC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/core",
3
- "version": "3.40.0",
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.3",
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": "185b8435cf6e87b8a54f10944da3e652227ecb6e"
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 activated
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
+ }
@@ -1,4 +1,5 @@
1
1
  export * from './ActorEntersStage';
2
+ export * from './ActorSpotlighted';
2
3
  export * from './ActorStageExitAttempted';
3
4
  export * from './ActorStageExitCompleted';
4
5
  export * from './ActorStageExitFailed';
@@ -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
- if (this.actorsOnBackstage.has(name)) {
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 ActorEntersStage(
175
+ new ActorSpotlighted(
161
176
  this.currentScene,
162
- this.actorsOnBackstage.get(name).toJSON(),
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