Socket
Socket
Sign inDemoInstall

@serenity-js/core

Package Overview
Dependencies
Maintainers
0
Versions
374
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@serenity-js/core - npm Package Compare versions

Comparing version 3.25.0 to 3.25.1

11

CHANGELOG.md

@@ -6,2 +6,13 @@ # Change Log

## [3.25.1](https://github.com/serenity-js/serenity-js/compare/v3.25.0...v3.25.1) (2024-07-10)
### Bug Fixes
* **core:** all the API docs now link to the online Serenity/JS API documentation ([f8f451d](https://github.com/serenity-js/serenity-js/commit/f8f451dffdb4caaa2e31a860f59d59470f4856ad))
# [3.25.0](https://github.com/serenity-js/serenity-js/compare/v3.24.1...v3.25.0) (2024-07-03)

@@ -8,0 +19,0 @@

9

lib/adapter/OutputStream.d.ts
/**
* An output stream to be injected into {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders} configured via {@apilink SerenityConfig.crew}.
* An output stream to be injected into [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* configured via [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew).
*
* ## Learn more
* - {@apilink StageCrewMemberBuilder}
* - {@apilink Serenity.configure}
* - {@apilink SerenityConfig.crew}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure)
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
*

@@ -9,0 +10,0 @@ * @group Integration

@@ -15,3 +15,3 @@ import type { Outcome } from '../model';

*
* @throws {@apilink LogicError}
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If called before `load`

@@ -23,3 +23,3 @@ */

*
* @throws {@apilink LogicError}
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If called before `load`

@@ -26,0 +26,0 @@ */

@@ -6,3 +6,3 @@ /**

*
* `ClassDescription` is used to describe the {@apilink StageCrewMember|StageCrewMembers} passed to {@apilink SerenityConfig}.
* `ClassDescription` is used to describe the [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/) passed to [`SerenityConfig`](https://serenity-js.org/api/core/class/SerenityConfig/).
*

@@ -9,0 +9,0 @@ * The most basic class description is the name of a Node module that must provide a `default` export.

@@ -7,11 +7,11 @@ import type { OutputStream } from '../adapter';

/**
* Describes the configuration object accepted by the {@apilink configure} function.
* Describes the configuration object accepted by the [`configure`](https://serenity-js.org/api/core/function/configure/) function.
*
* ## Learn more
* - {@apilink configure}
* - {@apilink Cast}
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink ClassDescription}
* - {@apilink Stage.waitForNextCue}
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`ClassDescription`](https://serenity-js.org/api/core/#ClassDescription)
* - [`Stage.waitForNextCue`](https://serenity-js.org/api/core/class/Stage/#waitForNextCue)
*

@@ -22,11 +22,11 @@ * @group Serenity

/**
* A {@apilink Cast} of {@apilink Actor}s to be used when {@apilink actorCalled}
* and {@apilink actorInTheSpotlight} functions are called.
* A [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/) to be used when [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* and [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/) functions are called.
*/
actors?: Cast;
/**
* A list of {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders} or {@apilink StageCrewMember|StageCrewMembers}
* to be notified of {@apilink DomainEvent|DomainEvents} that occur during the scenario execution.
* A list of [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/) or [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/)
* to be notified of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/) that occur during the scenario execution.
*
* Note that the `crew` can also be configured using {@apilink ClassDescription|ClassDescriptions}.
* Note that the `crew` can also be configured using [class descriptions](https://serenity-js.org/api/core/#ClassDescription).
* This is useful when you need to load the configuration from a static `json` file, or when the test runner doesn't support

@@ -37,6 +37,6 @@ * providing class instances in configuration (e.g. Playwright Test).

/**
* The maximum amount of time between {@apilink SceneFinishes} and {@apilink SceneFinished} events
* The maximum amount of time between [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/) and [SceneFinished](https://serenity-js.org/api/core-events/class/SceneFinished/) events
* that Serenity/JS should wait for any post-scenario
* async operations to complete. Those include generating the screenshots,
* saving reports to disk, {@apilink Discardable|dismissing the actors}, and so on.
* saving reports to disk, [dismissing the actors](https://serenity-js.org/api/core/interface/Discardable/), and so on.
*

@@ -50,3 +50,3 @@ * Defaults to 5 seconds.

/**
* The maximum default amount of time allowed for interactions such as {@apilink Wait.until}
* The maximum default amount of time allowed for interactions such as [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
* to complete.

@@ -60,14 +60,16 @@ *

* #### Learn more
* - {@apilink Wait.until}
* - [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
*/
interactionTimeout?: Duration;
/**
* {@apilink DiffFormatter} that should be used by the {@apilink ErrorFactory} and the ability to {@apilink RaiseErrors}
* when generating diffs included in {@apilink RuntimeError} objects.
* [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that
* should be used by the [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/) and the ability
* to [`RaiseErrors`](https://serenity-js.org/api/core/class/RaiseErrors/)
* when generating diffs included in [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/) objects.
*
* By default, Serenity/JS uses {@apilink NoOpDiffFormatter}.
* By default, Serenity/JS uses [`NoOpDiffFormatter`](https://serenity-js.org/api/core/class/NoOpDiffFormatter/)
*/
diffFormatter?: DiffFormatter;
/**
* An output stream to be injected into {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders}
* An output stream to be injected into [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
*

@@ -74,0 +76,0 @@ * Defaults to [`process.stdout`](https://nodejs.org/api/process.html#process_process_stdout).

@@ -5,11 +5,11 @@ "use strict";

/**
* Describes the configuration object accepted by the {@apilink configure} function.
* Describes the configuration object accepted by the [`configure`](https://serenity-js.org/api/core/function/configure/) function.
*
* ## Learn more
* - {@apilink configure}
* - {@apilink Cast}
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink ClassDescription}
* - {@apilink Stage.waitForNextCue}
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`ClassDescription`](https://serenity-js.org/api/core/#ClassDescription)
* - [`Stage.waitForNextCue`](https://serenity-js.org/api/core/class/Stage/#waitForNextCue)
*

@@ -20,11 +20,11 @@ * @group Serenity

/**
* A {@apilink Cast} of {@apilink Actor}s to be used when {@apilink actorCalled}
* and {@apilink actorInTheSpotlight} functions are called.
* A [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/) to be used when [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* and [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/) functions are called.
*/
actors;
/**
* A list of {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders} or {@apilink StageCrewMember|StageCrewMembers}
* to be notified of {@apilink DomainEvent|DomainEvents} that occur during the scenario execution.
* A list of [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/) or [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/)
* to be notified of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/) that occur during the scenario execution.
*
* Note that the `crew` can also be configured using {@apilink ClassDescription|ClassDescriptions}.
* Note that the `crew` can also be configured using [class descriptions](https://serenity-js.org/api/core/#ClassDescription).
* This is useful when you need to load the configuration from a static `json` file, or when the test runner doesn't support

@@ -35,6 +35,6 @@ * providing class instances in configuration (e.g. Playwright Test).

/**
* The maximum amount of time between {@apilink SceneFinishes} and {@apilink SceneFinished} events
* The maximum amount of time between [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/) and [SceneFinished](https://serenity-js.org/api/core-events/class/SceneFinished/) events
* that Serenity/JS should wait for any post-scenario
* async operations to complete. Those include generating the screenshots,
* saving reports to disk, {@apilink Discardable|dismissing the actors}, and so on.
* saving reports to disk, [dismissing the actors](https://serenity-js.org/api/core/interface/Discardable/), and so on.
*

@@ -48,3 +48,3 @@ * Defaults to 5 seconds.

/**
* The maximum default amount of time allowed for interactions such as {@apilink Wait.until}
* The maximum default amount of time allowed for interactions such as [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
* to complete.

@@ -58,14 +58,16 @@ *

* #### Learn more
* - {@apilink Wait.until}
* - [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
*/
interactionTimeout;
/**
* {@apilink DiffFormatter} that should be used by the {@apilink ErrorFactory} and the ability to {@apilink RaiseErrors}
* when generating diffs included in {@apilink RuntimeError} objects.
* [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that
* should be used by the [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/) and the ability
* to [`RaiseErrors`](https://serenity-js.org/api/core/class/RaiseErrors/)
* when generating diffs included in [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/) objects.
*
* By default, Serenity/JS uses {@apilink NoOpDiffFormatter}.
* By default, Serenity/JS uses [`NoOpDiffFormatter`](https://serenity-js.org/api/core/class/NoOpDiffFormatter/)
*/
diffFormatter;
/**
* An output stream to be injected into {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders}
* An output stream to be injected into [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
*

@@ -72,0 +74,0 @@ * Defaults to [`process.stdout`](https://nodejs.org/api/process.html#process_process_stdout).

import type { Options } from 'chalk';
import type { DiffFormatter } from './DiffFormatter';
/**
* A {@apilink DiffFormatter} that uses [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
* A [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that uses [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
* to format the output.

@@ -6,0 +6,0 @@ *

@@ -6,3 +6,3 @@ "use strict";

/**
* A {@apilink DiffFormatter} that uses [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
* A [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that uses [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
* to format the output.

@@ -9,0 +9,0 @@ *

/**
* Formats text representing expected, received, and unchanged lines of a diff
* produced by the {@apilink ErrorFactory}, so that they can be presented to a developer
* produced by the [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/), so that they can be presented to a developer
* in a visually distinctive way.

@@ -5,0 +5,0 @@ *

import type { DiffFormatter } from './DiffFormatter';
/**
* A no-op {@apilink DiffFormatter} that produces output identical to input.
* A no-op [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that produces output identical to input.
*

@@ -5,0 +5,0 @@ * @group Errors

@@ -5,3 +5,3 @@ "use strict";

/**
* A no-op {@apilink DiffFormatter} that produces output identical to input.
* A no-op [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that produces output identical to input.
*

@@ -8,0 +8,0 @@ * @group Errors

@@ -5,3 +5,4 @@ import type { DiffFormatter } from './diff';

/**
* Generates Serenity/JS {@apilink RuntimeError} objects based on provided {@apilink ErrorOptions|configuration}.
* Generates Serenity/JS [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/) objects based
* on the provided [configuration](https://serenity-js.org/api/core/interface/ErrorOptions/).
*

@@ -8,0 +9,0 @@ * @group Errors

@@ -11,3 +11,4 @@ "use strict";

/**
* Generates Serenity/JS {@apilink RuntimeError} objects based on provided {@apilink ErrorOptions|configuration}.
* Generates Serenity/JS [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/) objects based
* on the provided [configuration](https://serenity-js.org/api/core/interface/ErrorOptions/).
*

@@ -14,0 +15,0 @@ * @group Errors

@@ -12,3 +12,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error and the difference between the expected and actual values
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -15,0 +15,0 @@ constructor(message: string, cause?: Error);

@@ -19,3 +19,3 @@ "use strict";

* @param message - Human-readable description of the error and the difference between the expected and actual values
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -22,0 +22,0 @@ constructor(message, cause) {

@@ -12,3 +12,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -15,0 +15,0 @@ constructor(message: string, cause?: Error);

@@ -19,3 +19,3 @@ "use strict";

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -22,0 +22,0 @@ constructor(message, cause) {

import type { JSONObject } from 'tiny-types';
import { RuntimeError } from './RuntimeError';
/**
* Thrown to indicate that the {@apilink Actor} attempted to perform
* a {@apilink Task} or {@apilink Interaction} that hasn't been implemented yet.
* Thrown to indicate that the [`Actor`](https://serenity-js.org/api/core/class/Actor/) attempted to perform
* a [`Task`](https://serenity-js.org/api/core/class/Task/) or [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) that hasn't been implemented yet.
*

@@ -33,3 +33,3 @@ * ## A pending Task

* @param {string} message - Human-readable description of the error
* @param {Error} [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param {Error} [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -36,0 +36,0 @@ constructor(message: string, cause?: Error);

@@ -7,4 +7,4 @@ "use strict";

/**
* Thrown to indicate that the {@apilink Actor} attempted to perform
* a {@apilink Task} or {@apilink Interaction} that hasn't been implemented yet.
* Thrown to indicate that the [`Actor`](https://serenity-js.org/api/core/class/Actor/) attempted to perform
* a [`Task`](https://serenity-js.org/api/core/class/Task/) or [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) that hasn't been implemented yet.
*

@@ -41,3 +41,3 @@ * ## A pending Task

* @param {string} message - Human-readable description of the error
* @param {Error} [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param {Error} [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -44,0 +44,0 @@ constructor(message, cause) {

import type { JSONObject } from 'tiny-types';
import { RuntimeError } from './RuntimeError';
/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* can't be executed due to no items are found in a list.

@@ -16,3 +16,3 @@ *

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink ListItemNotFoundError}, if any
* @param [cause] - The root cause of this [`ListItemNotFoundError`](https://serenity-js.org/api/core/class/ListItemNotFoundError/), if any
*/

@@ -19,0 +19,0 @@ constructor(message: string, cause?: Error);

@@ -7,3 +7,3 @@ "use strict";

/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* can't be executed due to no items are found in a list.

@@ -24,3 +24,3 @@ *

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink ListItemNotFoundError}, if any
* @param [cause] - The root cause of this [`ListItemNotFoundError`](https://serenity-js.org/api/core/class/ListItemNotFoundError/), if any
*/

@@ -27,0 +27,0 @@ constructor(message, cause) {

import type { JSONObject } from 'tiny-types';
import { RuntimeError } from './RuntimeError';
/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* can't be executed due to a logical error.

@@ -16,3 +16,3 @@ *

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -19,0 +19,0 @@ constructor(message: string, cause?: Error);

@@ -7,3 +7,3 @@ "use strict";

/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* can't be executed due to a logical error.

@@ -24,3 +24,3 @@ *

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -27,0 +27,0 @@ constructor(message, cause) {

import type { JSONObject } from 'tiny-types';
import { RuntimeError } from './RuntimeError';
/**
* Thrown to indicate that a {@apilink Scheduler|scheduled operation}
* Thrown to indicate that a [scheduled operation](https://serenity-js.org/api/core/class/Scheduler/)
* has been stopped before it was completed.

@@ -16,3 +16,3 @@ *

* @param [cause]
* The root cause of this {@apilink RuntimeError}, if any
* The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -19,0 +19,0 @@ constructor(message: string, cause?: Error);

@@ -7,3 +7,3 @@ "use strict";

/**
* Thrown to indicate that a {@apilink Scheduler|scheduled operation}
* Thrown to indicate that a [scheduled operation](https://serenity-js.org/api/core/class/Scheduler/)
* has been stopped before it was completed.

@@ -24,3 +24,3 @@ *

* @param [cause]
* The root cause of this {@apilink RuntimeError}, if any
* The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -27,0 +27,0 @@ constructor(message, cause) {

@@ -37,3 +37,3 @@ /**

*
* ## Registering a custom error with {@apilink ErrorSerialiser}
* ## Registering a custom error with [`ErrorSerialiser`](https://serenity-js.org/api/core/class/ErrorSerialiser/)
*

@@ -72,3 +72,3 @@ * ```ts

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -75,0 +75,0 @@ protected constructor(type: new (...args: any[]) => RuntimeError, message: string, cause?: Error);

@@ -41,3 +41,3 @@ "use strict";

*
* ## Registering a custom error with {@apilink ErrorSerialiser}
* ## Registering a custom error with [`ErrorSerialiser`](https://serenity-js.org/api/core/class/ErrorSerialiser/)
*

@@ -76,3 +76,3 @@ * ```ts

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -79,0 +79,0 @@ constructor(type, message, cause) {

@@ -27,3 +27,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -30,0 +30,0 @@ constructor(message: string, cause?: Error);

@@ -34,3 +34,3 @@ "use strict";

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -37,0 +37,0 @@ constructor(message, cause) {

import type { JSONObject } from 'tiny-types';
import { RuntimeError } from './RuntimeError';
/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* took longer to execute than the expected timeout.

@@ -16,3 +16,3 @@ *

* @param [cause]
* The root cause of this {@apilink RuntimeError}, if any
* The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -19,0 +19,0 @@ constructor(message: string, cause?: Error);

@@ -7,3 +7,3 @@ "use strict";

/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* took longer to execute than the expected timeout.

@@ -24,3 +24,3 @@ *

* @param [cause]
* The root cause of this {@apilink RuntimeError}, if any
* The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -27,0 +27,0 @@ constructor(message, cause) {

@@ -12,3 +12,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -15,0 +15,0 @@ constructor(message: string, cause?: Error);

@@ -19,3 +19,3 @@ "use strict";

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -22,0 +22,0 @@ constructor(message, cause) {

@@ -6,4 +6,4 @@ import { Ability } from '../screenplay/abilities/Ability';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to create a Serenity/JS {@apilink RuntimeError}
* from within a custom {@apilink Interaction}.
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to create a Serenity/JS [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/)
* from within a custom [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -43,9 +43,9 @@ * The stack trace of an error created this way includes the filesystem location pointing to where the interaction was invoked,

* ## Learn more
* - {@apilink ErrorOptions}
* - {@apilink ErrorFactory}
* - {@apilink AssertionError}
* - {@apilink ConfigurationError}
* - {@apilink LogicError}
* - {@apilink RuntimeError}
* - {@apilink TestCompromisedError}
* - [`ErrorOptions`](https://serenity-js.org/api/core/interface/ErrorOptions/)
* - [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/)
* - [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/)
* - [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/)
* - [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* - [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/)
* - [`TestCompromisedError`](https://serenity-js.org/api/core/class/TestCompromisedError/)
*

@@ -52,0 +52,0 @@ * @group Errors

@@ -6,4 +6,4 @@ "use strict";

/**
* An {@apilink Ability} that enables an {@apilink Actor} to create a Serenity/JS {@apilink RuntimeError}
* from within a custom {@apilink Interaction}.
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to create a Serenity/JS [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/)
* from within a custom [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -43,9 +43,9 @@ * The stack trace of an error created this way includes the filesystem location pointing to where the interaction was invoked,

* ## Learn more
* - {@apilink ErrorOptions}
* - {@apilink ErrorFactory}
* - {@apilink AssertionError}
* - {@apilink ConfigurationError}
* - {@apilink LogicError}
* - {@apilink RuntimeError}
* - {@apilink TestCompromisedError}
* - [`ErrorOptions`](https://serenity-js.org/api/core/interface/ErrorOptions/)
* - [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/)
* - [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/)
* - [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/)
* - [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* - [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/)
* - [`TestCompromisedError`](https://serenity-js.org/api/core/class/TestCompromisedError/)
*

@@ -52,0 +52,0 @@ * @group Errors

@@ -5,3 +5,3 @@ import type { ActivityDetails, CorrelationId, Outcome } from '../model';

/**
* Emitted when an {@apilink Activity} is finished.
* Emitted when an [`Activity`](https://serenity-js.org/api/core/class/Activity/) is finished.
*

@@ -8,0 +8,0 @@ * @group Events

@@ -7,3 +7,3 @@ "use strict";

/**
* Emitted when an {@apilink Activity} is finished.
* Emitted when an [`Activity`](https://serenity-js.org/api/core/class/Activity/) is finished.
*

@@ -10,0 +10,0 @@ * @group Events

@@ -5,3 +5,3 @@ import type { ActivityDetails, CorrelationId } from '../model';

/**
* Emitted when an {@apilink Activity} starts.
* Emitted when an [`Activity`](https://serenity-js.org/api/core/class/Activity/) starts.
*

@@ -8,0 +8,0 @@ * @group Events

@@ -7,3 +7,3 @@ "use strict";

/**
* Emitted when an {@apilink Activity} starts.
* Emitted when an [`Activity`](https://serenity-js.org/api/core/class/Activity/) starts.
*

@@ -10,0 +10,0 @@ * @group Events

@@ -6,3 +6,3 @@ import type { JSONObject } from 'tiny-types';

/**
* Emitted by [@serenity-js/cucumber](/api/cucumber)
* Emitted by [@serenity-js/cucumber](https://serenity-js.org/api/cucumber)
* when a [business rule](https://cucumber.io/docs/gherkin/reference/#rule) is detected.

@@ -9,0 +9,0 @@ *

@@ -9,3 +9,3 @@ "use strict";

/**
* Emitted by [@serenity-js/cucumber](/api/cucumber)
* Emitted by [@serenity-js/cucumber](https://serenity-js.org/api/cucumber)
* when a [business rule](https://cucumber.io/docs/gherkin/reference/#rule) is detected.

@@ -12,0 +12,0 @@ *

@@ -7,3 +7,4 @@ import type { JSONObject } from 'tiny-types';

* Emitted by a Serenity/JS test runner adapter, right before a test and all its associated test hooks finish.
* Triggers any clean-up operations that might be required, such as discarding of the {@apilink Discardable} abilities.
* Triggers any clean-up operations that might be required, such as discarding of
* the [discardable](https://serenity-js.org/api/core/interface/Discardable/) abilities.
*

@@ -10,0 +11,0 @@ * @group Events

@@ -10,3 +10,4 @@ "use strict";

* Emitted by a Serenity/JS test runner adapter, right before a test and all its associated test hooks finish.
* Triggers any clean-up operations that might be required, such as discarding of the {@apilink Discardable} abilities.
* Triggers any clean-up operations that might be required, such as discarding of
* the [discardable](https://serenity-js.org/api/core/interface/Discardable/) abilities.
*

@@ -13,0 +14,0 @@ * @group Events

@@ -17,6 +17,6 @@ import type { SerenityConfig } from './config';

*
* This function is an alias for {@apilink Serenity.configure}.
* This function is an alias for [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure).
*
* :::tip configure vs engage
* If you want to retain the configuration but reset the {@apilink Cast|cast of actors}, use {@apilink engage} instead.
* If you want to retain the configuration but reset the [cast of actors](https://serenity-js.org/api/core/class/Cast/), use [`engage`](https://serenity-js.org/api/core/function/engage/) instead.
* :::

@@ -30,16 +30,16 @@ *

/**
* Re-configures Serenity/JS with a new {@apilink Cast} of {@apilink Actor|actors}
* you want to use in any subsequent calls to {@apilink actorCalled}.
* Re-configures Serenity/JS with a new [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/)
* you want to use in any subsequent calls to [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* This function is an alias for {@apilink Serenity.engage},
* which provides an alternative to calling {@apilink Actor.whoCan} directly in your tests
* This function is an alias for [`Serenity.engage`](https://serenity-js.org/api/core/class/Serenity/#engage),
* which provides an alternative to calling [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) directly in your tests
* and is typically invoked in a "before all" or "before each" hook of your test runner of choice.
*
* :::tip configure vs engage
* Calling {@apilink engage} replaces the currently configured {@apilink Cast|cast of actors},
* Calling [`engage`](https://serenity-js.org/api/core/function/engage/) replaces the currently configured [cast of actors](https://serenity-js.org/api/core/class/Cast/),
* but doesn't affect any other configuration.
* If you want to reset the Serenity/JS configuration completely, use {@apilink configure} instead.
* If you want to reset the Serenity/JS configuration completely, use [`configure`](https://serenity-js.org/api/core/function/configure/) instead.
* :::
*
* If your implementation of the {@apilink Cast} interface is stateless,
* If your implementation of the [cast](https://serenity-js.org/api/core/class/Cast/) interface is stateless,
* you can invoke this function just once before your entire test suite is executed, see

@@ -50,3 +50,3 @@ * - [`beforeAll`](https://jasmine.github.io/api/3.6/global.html#beforeAll) in Jasmine,

*
* However, if your {@apilink Cast} holds state that you want to reset before each scenario,
* However, if your [cast](https://serenity-js.org/api/core/class/Cast/) holds state that you want to reset before each scenario,
* it's better to invoke `engage` before each test using:

@@ -114,4 +114,4 @@ * - [`beforeEach`](https://jasmine.github.io/api/3.6/global.html#beforeEach) in Jasmine

*
* [Serenity/JS Playwright Test module](/api/playwright-test) will configure the cast on your behalf,
* so you don't need to call {@apilink engage}.
* [Serenity/JS Playwright Test module](https://serenity-js.org/api/playwright-test) will configure the cast on your behalf,
* so you don't need to call [`engage`](https://serenity-js.org/api/core/function/engage/).
*

@@ -133,5 +133,5 @@ * ```ts

* ## Learn more
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink Serenity.engage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Serenity.engage`](https://serenity-js.org/api/core/class/Serenity/#engage)
*

@@ -144,6 +144,6 @@ * @param actors

/**
* Instantiates or retrieves an {@apilink Actor}
* Instantiates or retrieves an [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* called `name` if one has already been instantiated.
*
* This method is an alias for {@apilink Serenity.theActorCalled}.
* This method is an alias for [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled).
*

@@ -197,5 +197,5 @@ * ## Usage with Cucumber

*
* When using [Serenity/JS with Playwright Test](/api/playwright-test/), you should use either
* the default [`actor`](/api/playwright-test/interface/SerenityFixtures/#actorCalled) fixture
* or the injected [`actorCalled`](/api/playwright-test/interface/SerenityFixtures/#actorCalled) function
* When using [Serenity/JS with Playwright Test](https://serenity-js.org/api/playwright-test/), you should use either
* the default [`actor`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/#actorCalled) fixture
* or the injected [`actorCalled`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/#actorCalled) function
* instead of importing it from `@serenity-js/core`.

@@ -218,6 +218,6 @@ *

*
* - {@apilink engage}
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink Serenity.theActorCalled}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled)
*

@@ -232,7 +232,7 @@ * @param name

* Retrieves an actor who was last instantiated or retrieved
* using {@apilink actorCalled}.
* using [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* This function is particularly useful when automating Cucumber scenarios.
*
* This function is an alias for {@apilink Serenity.theActorInTheSpotlight}.
* This function is an alias for [`Serenity.theActorInTheSpotlight`](https://serenity-js.org/api/core/class/Serenity/#theActorInTheSpotlight).
*

@@ -258,6 +258,6 @@ * ## Usage with Cucumber

*
* - {@apilink engage}
* - {@apilink actorCalled}
* - {@apilink Actor}
* - {@apilink Cast}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*

@@ -264,0 +264,0 @@ * @group Actors

@@ -19,6 +19,6 @@ "use strict";

*
* This function is an alias for {@apilink Serenity.configure}.
* This function is an alias for [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure).
*
* :::tip configure vs engage
* If you want to retain the configuration but reset the {@apilink Cast|cast of actors}, use {@apilink engage} instead.
* If you want to retain the configuration but reset the [cast of actors](https://serenity-js.org/api/core/class/Cast/), use [`engage`](https://serenity-js.org/api/core/function/engage/) instead.
* :::

@@ -35,16 +35,16 @@ *

/**
* Re-configures Serenity/JS with a new {@apilink Cast} of {@apilink Actor|actors}
* you want to use in any subsequent calls to {@apilink actorCalled}.
* Re-configures Serenity/JS with a new [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/)
* you want to use in any subsequent calls to [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* This function is an alias for {@apilink Serenity.engage},
* which provides an alternative to calling {@apilink Actor.whoCan} directly in your tests
* This function is an alias for [`Serenity.engage`](https://serenity-js.org/api/core/class/Serenity/#engage),
* which provides an alternative to calling [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) directly in your tests
* and is typically invoked in a "before all" or "before each" hook of your test runner of choice.
*
* :::tip configure vs engage
* Calling {@apilink engage} replaces the currently configured {@apilink Cast|cast of actors},
* Calling [`engage`](https://serenity-js.org/api/core/function/engage/) replaces the currently configured [cast of actors](https://serenity-js.org/api/core/class/Cast/),
* but doesn't affect any other configuration.
* If you want to reset the Serenity/JS configuration completely, use {@apilink configure} instead.
* If you want to reset the Serenity/JS configuration completely, use [`configure`](https://serenity-js.org/api/core/function/configure/) instead.
* :::
*
* If your implementation of the {@apilink Cast} interface is stateless,
* If your implementation of the [cast](https://serenity-js.org/api/core/class/Cast/) interface is stateless,
* you can invoke this function just once before your entire test suite is executed, see

@@ -55,3 +55,3 @@ * - [`beforeAll`](https://jasmine.github.io/api/3.6/global.html#beforeAll) in Jasmine,

*
* However, if your {@apilink Cast} holds state that you want to reset before each scenario,
* However, if your [cast](https://serenity-js.org/api/core/class/Cast/) holds state that you want to reset before each scenario,
* it's better to invoke `engage` before each test using:

@@ -119,4 +119,4 @@ * - [`beforeEach`](https://jasmine.github.io/api/3.6/global.html#beforeEach) in Jasmine

*
* [Serenity/JS Playwright Test module](/api/playwright-test) will configure the cast on your behalf,
* so you don't need to call {@apilink engage}.
* [Serenity/JS Playwright Test module](https://serenity-js.org/api/playwright-test) will configure the cast on your behalf,
* so you don't need to call [`engage`](https://serenity-js.org/api/core/function/engage/).
*

@@ -138,5 +138,5 @@ * ```ts

* ## Learn more
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink Serenity.engage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Serenity.engage`](https://serenity-js.org/api/core/class/Serenity/#engage)
*

@@ -152,6 +152,6 @@ * @param actors

/**
* Instantiates or retrieves an {@apilink Actor}
* Instantiates or retrieves an [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* called `name` if one has already been instantiated.
*
* This method is an alias for {@apilink Serenity.theActorCalled}.
* This method is an alias for [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled).
*

@@ -205,5 +205,5 @@ * ## Usage with Cucumber

*
* When using [Serenity/JS with Playwright Test](/api/playwright-test/), you should use either
* the default [`actor`](/api/playwright-test/interface/SerenityFixtures/#actorCalled) fixture
* or the injected [`actorCalled`](/api/playwright-test/interface/SerenityFixtures/#actorCalled) function
* When using [Serenity/JS with Playwright Test](https://serenity-js.org/api/playwright-test/), you should use either
* the default [`actor`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/#actorCalled) fixture
* or the injected [`actorCalled`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/#actorCalled) function
* instead of importing it from `@serenity-js/core`.

@@ -226,6 +226,6 @@ *

*
* - {@apilink engage}
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink Serenity.theActorCalled}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled)
*

@@ -243,7 +243,7 @@ * @param name

* Retrieves an actor who was last instantiated or retrieved
* using {@apilink actorCalled}.
* using [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* This function is particularly useful when automating Cucumber scenarios.
*
* This function is an alias for {@apilink Serenity.theActorInTheSpotlight}.
* This function is an alias for [`Serenity.theActorInTheSpotlight`](https://serenity-js.org/api/core/class/Serenity/#theActorInTheSpotlight).
*

@@ -269,6 +269,6 @@ * ## Usage with Cucumber

*
* - {@apilink engage}
* - {@apilink actorCalled}
* - {@apilink Actor}
* - {@apilink Cast}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*

@@ -275,0 +275,0 @@ * @group Actors

import type { Answerable } from '../screenplay';
/**
* {@apilink format} is a factory function returning
* `format` is a factory function returning
* a [tag function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals)
* that produces a human-readable description of a template containing
* one or more {@apilink Answerable|Answerables}.
* that produces a human-readable `string` description of a template containing
* one or more [answerables](https://serenity-js.org/api/core/#Answerable).
*
* Typically, you'll want to use {@apilink d} and {@apilink f} shorthands instead:
* - the {@apilink d} function works best for generating a **description** of a parameterised {@apilink Activity}
* - the {@apilink f} function is better suited for debugging.
* Typically, you'll want to use `d` and `f` shorthands instead, or the modern alternative - `the`:
* - the [`d`](https://serenity-js.org/api/core/function/d/) function works best for generating a **static description** of a parameterised [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - the [`f`](https://serenity-js.org/api/core/function/f/) function is better suited for debugging
* - the [`the`](https://serenity-js.org/api/core/function/f/) function works best for generating a **dynamic description** of a parameterised [`Activity`](https://serenity-js.org/api/core/class/Activity/)
*
* :::tip Use `the` instead of `format`
* `format`, `d` and `f` are the original Serenity/JS string formatting functions,
* still present in the framework for backwards compatibility purposes.
*
* To generate a dynamic description of a `Question` or `Interaction`,
* use [`the`](https://serenity-js.org/api/core/function/the/) function instead.
* :::
*
* ## Using `format`

@@ -13,0 +22,0 @@ *

@@ -6,11 +6,20 @@ "use strict";

/**
* {@apilink format} is a factory function returning
* `format` is a factory function returning
* a [tag function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals)
* that produces a human-readable description of a template containing
* one or more {@apilink Answerable|Answerables}.
* that produces a human-readable `string` description of a template containing
* one or more [answerables](https://serenity-js.org/api/core/#Answerable).
*
* Typically, you'll want to use {@apilink d} and {@apilink f} shorthands instead:
* - the {@apilink d} function works best for generating a **description** of a parameterised {@apilink Activity}
* - the {@apilink f} function is better suited for debugging.
* Typically, you'll want to use `d` and `f` shorthands instead, or the modern alternative - `the`:
* - the [`d`](https://serenity-js.org/api/core/function/d/) function works best for generating a **static description** of a parameterised [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - the [`f`](https://serenity-js.org/api/core/function/f/) function is better suited for debugging
* - the [`the`](https://serenity-js.org/api/core/function/f/) function works best for generating a **dynamic description** of a parameterised [`Activity`](https://serenity-js.org/api/core/class/Activity/)
*
* :::tip Use `the` instead of `format`
* `format`, `d` and `f` are the original Serenity/JS string formatting functions,
* still present in the framework for backwards compatibility purposes.
*
* To generate a dynamic description of a `Question` or `Interaction`,
* use [`the`](https://serenity-js.org/api/core/function/the/) function instead.
* :::
*
* ## Using `format`

@@ -17,0 +26,0 @@ *

@@ -41,3 +41,3 @@ import { Version } from '../Version';

/**
* Returns {@apilink Version} of module specified by `moduleId`, based on its `package.json`.
* Returns `Version` of module specified by `moduleId`, based on its `package.json`.
*

@@ -44,0 +44,0 @@ * @param moduleId

@@ -99,3 +99,3 @@ "use strict";

/**
* Returns {@apilink Version} of module specified by `moduleId`, based on its `package.json`.
* Returns `Version` of module specified by `moduleId`, based on its `package.json`.
*

@@ -102,0 +102,0 @@ * @param moduleId

@@ -5,3 +5,3 @@ export declare class ValueInspector {

/**
* Checks if the value is a named {@apilink Function}
* Checks if the value is a named [`Function`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)
*

@@ -8,0 +8,0 @@ * @param value

@@ -14,3 +14,3 @@ "use strict";

/**
* Checks if the value is a named {@apilink Function}
* Checks if the value is a named [`Function`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)
*

@@ -107,3 +107,3 @@ * @param value

static isNative(value) {
const toString = Object.prototype.toString, // Used to resolve the internal `{@apilink Class}` of values
const toString = Object.prototype.toString, // Used to resolve the internal `Class` of values
fnToString = Function.prototype.toString, // Used to resolve the decompiled source of functions

@@ -110,0 +110,0 @@ hostConstructor = /^\[object .+?Constructor]$/; // Used to detect host constructors (Safari > 4; really typed array specific)

@@ -8,3 +8,3 @@ import type { Answerable } from '../screenplay/Answerable';

/**
* Provides a human-readable description of the {@apilink Answerable<T>}.
* Provides a human-readable description of the [`Answerable<T>`](https://serenity-js.org/api/core/#Answerable).
* Similar to [Node util~inspect](https://nodejs.org/api/util.html#utilinspectobject-options).

@@ -11,0 +11,0 @@ *

@@ -9,3 +9,3 @@ "use strict";

/**
* Provides a human-readable description of the {@apilink Answerable<T>}.
* Provides a human-readable description of the [`Answerable<T>`](https://serenity-js.org/api/core/#Answerable).
* Similar to [Node util~inspect](https://nodejs.org/api/util.html#utilinspectobject-options).

@@ -12,0 +12,0 @@ *

/**
* A tag function trimming the leading and trailing whitespace from multi-line strings.
*
* @apilink https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals
*

@@ -6,0 +6,0 @@ * @param templates

@@ -7,3 +7,3 @@ "use strict";

*
* @apilink https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals
*

@@ -10,0 +10,0 @@ * @param templates

import type { JSONObject } from 'tiny-types';
import { JSONData } from './JSONData';
/**
* The value of the {@apilink HTTPRequestResponse} {@apilink Artifact} describing an HTTP request/response pair.
* The value of the `HTTPRequestResponse` artifact describing an HTTP request/response pair.
*/

@@ -22,3 +22,3 @@ export interface RequestAndResponse extends JSONObject {

/**
* An {@apilink Artifact} describing a HTTP request/response pair.
* An artifact describing a HTTP request/response pair.
*/

@@ -25,0 +25,0 @@ export declare class HTTPRequestResponse extends JSONData {

@@ -6,3 +6,3 @@ "use strict";

/**
* An {@apilink Artifact} describing a HTTP request/response pair.
* An artifact describing a HTTP request/response pair.
*/

@@ -9,0 +9,0 @@ class HTTPRequestResponse extends JSONData_1.JSONData {

import type { AbilityType } from './AbilityType';
import type { UsesAbilities } from './UsesAbilities';
/**
* **Abilities** enable {@apilink Actor|actors}
* to perform {@apilink Interaction|interactions} with the system under test
* and answer {@apilink Question|questions} about its state.
* **Abilities** enable [actors](https://serenity-js.org/api/core/class/Actor/)
* to perform [interactions](https://serenity-js.org/api/core/class/Interaction/) with the system under test
* and answer [questions](https://serenity-js.org/api/core/class/Question/) about its state.
*
* From the technical perspective, **abilities** act as **wrappers** around any **integration libraries** required
* to communicate with the external interfaces of system under test,
* such as {@apilink BrowseTheWeb|web browser drivers} or an {@apilink CallAnApi|HTTP client}.
* They also enable [portability](/handbook/design/portable-test-code)
* such as [web browser drivers](https://serenity-js.org/api/web/class/BrowseTheWeb/) or an [HTTP client](https://serenity-js.org/api/rest/class/CallAnApi/).
* They also enable [portability](https://serenity-js.org/handbook/design/portable-test-code)
* of your test code across such integration libraries.
*
* Abilities are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Interaction|Interactions}, {@apilink Question|Questions}, and {@apilink Task|Tasks}.
* Abilities are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [interactions](https://serenity-js.org/api/core/class/Interaction/),
* [questions](https://serenity-js.org/api/core/class/Question/), and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor|Actors}
* - {@apilink Cast|Configuring actors using Casts}
* - {@apilink Interaction|Interactions}
* - {@apilink Question|Questions}
* - [Web testing](/handbook/web-testing/)
* - [API testing](/handbook/api-testing/)
* - [Mobile testing](/handbook/mobile-testing/)
* - [Actors](https://serenity-js.org/api/core/class/Actor/)
* - [Configuring actors using Casts](https://serenity-js.org/api/core/class/Cast/)
* - [Interactions](https://serenity-js.org/api/core/class/Interaction/)
* - [Questions](https://serenity-js.org/api/core/class/Question/)
* - [Web testing](https://serenity-js.org/handbook/web-testing/)
* - [API testing](https://serenity-js.org/handbook/api-testing/)
* - [Mobile testing](https://serenity-js.org/handbook/mobile-testing/)
*

@@ -31,6 +32,6 @@ * ## Giving actors the abilities to interact

* Serenity/JS actors are capable of interacting with **any interface** of the system under test,
* be it a [web UI](/handbook/web-testing/), a [mobile app](/handbook/mobile-testing/), a [web service](/handbook/api-testing/),
* or {@apilink Ability|anything else} that a Node.js program can talk to.
* be it a [web UI](https://serenity-js.org/handbook/web-testing/), a [mobile app](https://serenity-js.org/handbook/mobile-testing/), a [web service](https://serenity-js.org/handbook/api-testing/),
* or [anything else](https://serenity-js.org/api/core/class/Ability/) that a Node.js program can talk to.
* This flexibility is enabled by a mechanism called _**abilities**_
* and achieved without introducing any unnecessary dependencies to your code base thanks to the [modular architecture](/handbook/about/architecture) of Serenity/JS.
* and achieved without introducing any unnecessary dependencies to your code base thanks to the [modular architecture](https://serenity-js.org/handbook/getting-started/architecture) of Serenity/JS.
*

@@ -44,4 +45,4 @@ * :::tip Remember

* You give an actor an ability, and it's the ability's responsibility to provide a consistent API around the integration library and deal with any of its quirks.
* Abilities **encapsulate integration libraries** and handle their {@apilink Initialisable|configuration and initialisation},
* the process of {@apilink Discardable|freeing up any resources} they hold,
* Abilities **encapsulate integration libraries** and handle their [configuration and initialisation](https://serenity-js.org/api/core/interface/Initialisable/),
* the process of [freeing up any resources](https://serenity-js.org/api/core/interface/Discardable/) they hold,
* as well as managing any state associated with the library.

@@ -52,7 +53,7 @@ *

* To make your Serenity/JS actors interact with web interfaces,
* you call the [`Actor.whoCan`](/api/core/class/Actor#whoCan) method and give them an implementation of the ability to [`BrowseTheWeb`](/api/web/class/BrowseTheWeb),
* you call the [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor#whoCan) method and give them an implementation of the ability to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb),
* specific to your web integration tool of choice.
*
* Note how {@apilink BrowseTheWebWithPlaywright}, {@apilink BrowseTheWebWithWebdriverIO}, and {@apilink BrowseTheWebWithProtractor}
* all **extend** the base ability to {@apilink BrowseTheWeb}.
* Note how [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/), [`BrowseTheWebWithWebdriverIO`](https://serenity-js.org/api/webdriverio/class/BrowseTheWebWithWebdriverIO/), and [`BrowseTheWebWithProtractor`](https://serenity-js.org/api/protractor/class/BrowseTheWebWithProtractor/)
* all **extend** the base ability to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/).
*

@@ -95,6 +96,6 @@ * #### Playwright

*
* Use {@apilink Ability.as} to retrieve an ability in a custom {@apilink Interaction} or {@apilink Question} implementation.
* Use [`PerformActivities`](https://serenity-js.org/api/core/class/PerformActivities/)} to retrieve an ability in a custom [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) or [`Question`](https://serenity-js.org/api/core/class/Question/) implementation.
*
* Here, `Ability` can be the integration library-specific class, for example {@apilink BrowseTheWebWithPlaywright},
* or its library-agnostic parent class, like {@apilink BrowseTheWeb}.
* Here, `Ability` can be the integration library-specific class, for example [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/),
* or its library-agnostic parent class, like [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/).
*

@@ -116,6 +117,6 @@ * To make your code portable across the various integration libraries, retrieve the ability

* and make the abilities of the same type **interchangeable**.
* For example, [Serenity/JS web modules](/handbook/web-testing/serenity-js-web-modules) offer an abstraction that lets you switch between web integration libraries
* For example, [Serenity/JS web modules](https://serenity-js.org/handbook/web-testing/serenity-js-web-modules) offer an abstraction that lets you switch between web integration libraries
* as vastly different as Selenium, WebdriverIO, or Playwright without having to change _anything whatsoever_ in your test scenarios.
*
* What this means is that your test code can become [portable and reusable across projects and teams](/handbook/design/portable-test-code),
* What this means is that your test code can become [portable and reusable across projects and teams](https://serenity-js.org/handbook/design/portable-test-code),
* even if they don't use the same low-level integration tools. It also helps you to **avoid vendor lock-in**, as you can wrap any third-party integration library

@@ -125,3 +126,3 @@ * into an ability and swap it out for another implementation if you need to.

* However, Serenity/JS **doesn't prevent you** from using the integration libraries directly.
* When you need to, you can use a library-specific ability like {@apilink BrowseTheWebWithPlaywright}
* When you need to, you can use a library-specific ability like [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/)
* to trade portability for access to library-specific low-level methods:

@@ -149,3 +150,3 @@ *

* One more reason to use abilities is that abilities can also help you to **associate actors with data** they need to perform their activities.
* For example, a commonly used ability is one to [`TakeNotes`](/api/core/class/TakeNotes), which allows your actors to start the test scenario
* For example, a commonly used ability is one to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes), which allows your actors to start the test scenario
* equipped with some data set, or record information about what they see in the test scenario so that they can act upon it later:

@@ -175,3 +176,3 @@ *

* Of course, an actor can have **any number of abilities** they need to play their role.
* For example, it is quite common for an actor to be able to [`BrowseTheWeb`](/api/web/class/BrowseTheWeb), [`TakeNotes`](/api/core/class/TakeNotes), and [`CallAnApi`](/api/rest/class/CallAnApi):
* For example, it is quite common for an actor to be able to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb), [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes), and [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi):
*

@@ -208,8 +209,8 @@ * ```typescript

* If your system under test provides a type of interface that Serenity/JS doesn't support yet,
* you might want to implement a custom {@apilink Ability}, as well as {@apilink Interaction|interactions}
* and {@apilink Question|questions} to interact with it.
* you might want to implement a custom [`Ability`](https://serenity-js.org/api/core/class/Ability/), as well as [interactions](https://serenity-js.org/api/core/class/Interaction/)
* and [questions](https://serenity-js.org/api/core/class/Question/) to interact with it.
*
* The best way to start with that is for you to review the examples in the {@apilink Ability|Screenplay Pattern API docs},
* The best way to start with that is for you to review the examples in the [Screenplay Pattern API docs](https://serenity-js.org/api/core/class/Ability/),
* as well as the [Serenity/JS code base on GitHub](https://github.com/serenity-js/serenity-js/tree/main/packages).
* Also note that all the [Serenity/JS modules](/handbook/about/architecture)
* Also note that all the [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture)
* have their automated tests written in such a way to not only provide an **extremely high test coverage** for the framework itself,

@@ -219,3 +220,3 @@ * but to be **accessible** and act as a **reference implementation for you** to create your own integrations.

* If you believe that the custom integration you've developed could benefit the wider Serenity/JS community,
* please consider open-sourcing it yourself, or [contributing it](/contributing) to the main framework.
* please consider open-sourcing it yourself, or [contributing it](https://serenity-js.org/community/contributing/) to the main framework.
*

@@ -278,4 +279,5 @@ * [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)

* Abilities that rely on resources that need to be initialised before they can be used,
* or discarded before the actor is dismissed can implement the {@apilink Initialisable}
* or {@apilink Discardable} interfaces, respectively.
* or discarded before the actor is dismissed can implement
* the [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
* or [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/) interfaces, respectively.
*

@@ -361,8 +363,8 @@ * ### Defining a custom ability to `QueryPostgresDB`

* ## Learn more
* - {@apilink AbilityType}
* - {@apilink Initialisable}
* - {@apilink Discardable}
* - {@apilink BrowseTheWeb}
* - {@apilink CallAnApi}
* - {@apilink TakeNotes}
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
* - [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/)
* - [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
*

@@ -373,4 +375,4 @@ * @group Screenplay Pattern

/**
* Used to access an {@apilink Actor|actor's} {@apilink Ability|ability} of the given type
* from within the {@apilink Interaction} and {@apilink Question} classes.
* Used to access an [actor's](https://serenity-js.org/api/core/class/Actor/) [ability](https://serenity-js.org/api/core/class/Ability/) of the given type
* from within the [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) and [`Question`](https://serenity-js.org/api/core/class/Question/) classes.
*

@@ -377,0 +379,0 @@ * #### Retrieving an ability in an interaction definition

@@ -5,25 +5,26 @@ "use strict";

/**
* **Abilities** enable {@apilink Actor|actors}
* to perform {@apilink Interaction|interactions} with the system under test
* and answer {@apilink Question|questions} about its state.
* **Abilities** enable [actors](https://serenity-js.org/api/core/class/Actor/)
* to perform [interactions](https://serenity-js.org/api/core/class/Interaction/) with the system under test
* and answer [questions](https://serenity-js.org/api/core/class/Question/) about its state.
*
* From the technical perspective, **abilities** act as **wrappers** around any **integration libraries** required
* to communicate with the external interfaces of system under test,
* such as {@apilink BrowseTheWeb|web browser drivers} or an {@apilink CallAnApi|HTTP client}.
* They also enable [portability](/handbook/design/portable-test-code)
* such as [web browser drivers](https://serenity-js.org/api/web/class/BrowseTheWeb/) or an [HTTP client](https://serenity-js.org/api/rest/class/CallAnApi/).
* They also enable [portability](https://serenity-js.org/handbook/design/portable-test-code)
* of your test code across such integration libraries.
*
* Abilities are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Interaction|Interactions}, {@apilink Question|Questions}, and {@apilink Task|Tasks}.
* Abilities are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [interactions](https://serenity-js.org/api/core/class/Interaction/),
* [questions](https://serenity-js.org/api/core/class/Question/), and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor|Actors}
* - {@apilink Cast|Configuring actors using Casts}
* - {@apilink Interaction|Interactions}
* - {@apilink Question|Questions}
* - [Web testing](/handbook/web-testing/)
* - [API testing](/handbook/api-testing/)
* - [Mobile testing](/handbook/mobile-testing/)
* - [Actors](https://serenity-js.org/api/core/class/Actor/)
* - [Configuring actors using Casts](https://serenity-js.org/api/core/class/Cast/)
* - [Interactions](https://serenity-js.org/api/core/class/Interaction/)
* - [Questions](https://serenity-js.org/api/core/class/Question/)
* - [Web testing](https://serenity-js.org/handbook/web-testing/)
* - [API testing](https://serenity-js.org/handbook/api-testing/)
* - [Mobile testing](https://serenity-js.org/handbook/mobile-testing/)
*

@@ -33,6 +34,6 @@ * ## Giving actors the abilities to interact

* Serenity/JS actors are capable of interacting with **any interface** of the system under test,
* be it a [web UI](/handbook/web-testing/), a [mobile app](/handbook/mobile-testing/), a [web service](/handbook/api-testing/),
* or {@apilink Ability|anything else} that a Node.js program can talk to.
* be it a [web UI](https://serenity-js.org/handbook/web-testing/), a [mobile app](https://serenity-js.org/handbook/mobile-testing/), a [web service](https://serenity-js.org/handbook/api-testing/),
* or [anything else](https://serenity-js.org/api/core/class/Ability/) that a Node.js program can talk to.
* This flexibility is enabled by a mechanism called _**abilities**_
* and achieved without introducing any unnecessary dependencies to your code base thanks to the [modular architecture](/handbook/about/architecture) of Serenity/JS.
* and achieved without introducing any unnecessary dependencies to your code base thanks to the [modular architecture](https://serenity-js.org/handbook/getting-started/architecture) of Serenity/JS.
*

@@ -46,4 +47,4 @@ * :::tip Remember

* You give an actor an ability, and it's the ability's responsibility to provide a consistent API around the integration library and deal with any of its quirks.
* Abilities **encapsulate integration libraries** and handle their {@apilink Initialisable|configuration and initialisation},
* the process of {@apilink Discardable|freeing up any resources} they hold,
* Abilities **encapsulate integration libraries** and handle their [configuration and initialisation](https://serenity-js.org/api/core/interface/Initialisable/),
* the process of [freeing up any resources](https://serenity-js.org/api/core/interface/Discardable/) they hold,
* as well as managing any state associated with the library.

@@ -54,7 +55,7 @@ *

* To make your Serenity/JS actors interact with web interfaces,
* you call the [`Actor.whoCan`](/api/core/class/Actor#whoCan) method and give them an implementation of the ability to [`BrowseTheWeb`](/api/web/class/BrowseTheWeb),
* you call the [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor#whoCan) method and give them an implementation of the ability to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb),
* specific to your web integration tool of choice.
*
* Note how {@apilink BrowseTheWebWithPlaywright}, {@apilink BrowseTheWebWithWebdriverIO}, and {@apilink BrowseTheWebWithProtractor}
* all **extend** the base ability to {@apilink BrowseTheWeb}.
* Note how [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/), [`BrowseTheWebWithWebdriverIO`](https://serenity-js.org/api/webdriverio/class/BrowseTheWebWithWebdriverIO/), and [`BrowseTheWebWithProtractor`](https://serenity-js.org/api/protractor/class/BrowseTheWebWithProtractor/)
* all **extend** the base ability to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/).
*

@@ -97,6 +98,6 @@ * #### Playwright

*
* Use {@apilink Ability.as} to retrieve an ability in a custom {@apilink Interaction} or {@apilink Question} implementation.
* Use [`PerformActivities`](https://serenity-js.org/api/core/class/PerformActivities/)} to retrieve an ability in a custom [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) or [`Question`](https://serenity-js.org/api/core/class/Question/) implementation.
*
* Here, `Ability` can be the integration library-specific class, for example {@apilink BrowseTheWebWithPlaywright},
* or its library-agnostic parent class, like {@apilink BrowseTheWeb}.
* Here, `Ability` can be the integration library-specific class, for example [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/),
* or its library-agnostic parent class, like [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/).
*

@@ -118,6 +119,6 @@ * To make your code portable across the various integration libraries, retrieve the ability

* and make the abilities of the same type **interchangeable**.
* For example, [Serenity/JS web modules](/handbook/web-testing/serenity-js-web-modules) offer an abstraction that lets you switch between web integration libraries
* For example, [Serenity/JS web modules](https://serenity-js.org/handbook/web-testing/serenity-js-web-modules) offer an abstraction that lets you switch between web integration libraries
* as vastly different as Selenium, WebdriverIO, or Playwright without having to change _anything whatsoever_ in your test scenarios.
*
* What this means is that your test code can become [portable and reusable across projects and teams](/handbook/design/portable-test-code),
* What this means is that your test code can become [portable and reusable across projects and teams](https://serenity-js.org/handbook/design/portable-test-code),
* even if they don't use the same low-level integration tools. It also helps you to **avoid vendor lock-in**, as you can wrap any third-party integration library

@@ -127,3 +128,3 @@ * into an ability and swap it out for another implementation if you need to.

* However, Serenity/JS **doesn't prevent you** from using the integration libraries directly.
* When you need to, you can use a library-specific ability like {@apilink BrowseTheWebWithPlaywright}
* When you need to, you can use a library-specific ability like [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/)
* to trade portability for access to library-specific low-level methods:

@@ -151,3 +152,3 @@ *

* One more reason to use abilities is that abilities can also help you to **associate actors with data** they need to perform their activities.
* For example, a commonly used ability is one to [`TakeNotes`](/api/core/class/TakeNotes), which allows your actors to start the test scenario
* For example, a commonly used ability is one to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes), which allows your actors to start the test scenario
* equipped with some data set, or record information about what they see in the test scenario so that they can act upon it later:

@@ -177,3 +178,3 @@ *

* Of course, an actor can have **any number of abilities** they need to play their role.
* For example, it is quite common for an actor to be able to [`BrowseTheWeb`](/api/web/class/BrowseTheWeb), [`TakeNotes`](/api/core/class/TakeNotes), and [`CallAnApi`](/api/rest/class/CallAnApi):
* For example, it is quite common for an actor to be able to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb), [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes), and [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi):
*

@@ -210,8 +211,8 @@ * ```typescript

* If your system under test provides a type of interface that Serenity/JS doesn't support yet,
* you might want to implement a custom {@apilink Ability}, as well as {@apilink Interaction|interactions}
* and {@apilink Question|questions} to interact with it.
* you might want to implement a custom [`Ability`](https://serenity-js.org/api/core/class/Ability/), as well as [interactions](https://serenity-js.org/api/core/class/Interaction/)
* and [questions](https://serenity-js.org/api/core/class/Question/) to interact with it.
*
* The best way to start with that is for you to review the examples in the {@apilink Ability|Screenplay Pattern API docs},
* The best way to start with that is for you to review the examples in the [Screenplay Pattern API docs](https://serenity-js.org/api/core/class/Ability/),
* as well as the [Serenity/JS code base on GitHub](https://github.com/serenity-js/serenity-js/tree/main/packages).
* Also note that all the [Serenity/JS modules](/handbook/about/architecture)
* Also note that all the [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture)
* have their automated tests written in such a way to not only provide an **extremely high test coverage** for the framework itself,

@@ -221,3 +222,3 @@ * but to be **accessible** and act as a **reference implementation for you** to create your own integrations.

* If you believe that the custom integration you've developed could benefit the wider Serenity/JS community,
* please consider open-sourcing it yourself, or [contributing it](/contributing) to the main framework.
* please consider open-sourcing it yourself, or [contributing it](https://serenity-js.org/community/contributing/) to the main framework.
*

@@ -280,4 +281,5 @@ * [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)

* Abilities that rely on resources that need to be initialised before they can be used,
* or discarded before the actor is dismissed can implement the {@apilink Initialisable}
* or {@apilink Discardable} interfaces, respectively.
* or discarded before the actor is dismissed can implement
* the [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
* or [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/) interfaces, respectively.
*

@@ -363,8 +365,8 @@ * ### Defining a custom ability to `QueryPostgresDB`

* ## Learn more
* - {@apilink AbilityType}
* - {@apilink Initialisable}
* - {@apilink Discardable}
* - {@apilink BrowseTheWeb}
* - {@apilink CallAnApi}
* - {@apilink TakeNotes}
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
* - [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/)
* - [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
*

@@ -375,4 +377,4 @@ * @group Screenplay Pattern

/**
* Used to access an {@apilink Actor|actor's} {@apilink Ability|ability} of the given type
* from within the {@apilink Interaction} and {@apilink Question} classes.
* Used to access an [actor's](https://serenity-js.org/api/core/class/Actor/) [ability](https://serenity-js.org/api/core/class/Ability/) of the given type
* from within the [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) and [`Question`](https://serenity-js.org/api/core/class/Question/) classes.
*

@@ -379,0 +381,0 @@ * #### Retrieving an ability in an interaction definition

import type { Ability } from './Ability';
/**
* An interface describing the static access method that every {@apilink Ability} class
* needs to provide in order to be accessible from within the {@apilink Interaction|interactions}.
* An interface describing the static access method that every [`Ability`](https://serenity-js.org/api/core/class/Ability/) class
* needs to provide in order to be accessible from within the [interactions](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -38,5 +38,5 @@ * #### Retrieving an ability from an interaction

* ## Learn more
* - {@apilink Ability}
* - {@apilink Actor}
* - {@apilink Interaction}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
*

@@ -43,0 +43,0 @@ * @group Abilities

@@ -6,7 +6,7 @@ import type { Answerable } from '../Answerable';

/**
* This {@apilink Ability} enables an {@apilink Actor} to resolve the value of a given {@apilink Answerable}.
* This [`Ability`](https://serenity-js.org/api/core/class/Ability/) enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to resolve the value of a given [`Answerable`](https://serenity-js.org/api/core/#Answerable).
*
* {@apilink AnswerQuestions} is used internally by {@apilink Actor.answer}, and it is unlikely you'll ever need to use it directly in your code.
* `AnswerQuestions` is used internally by [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer), and it is unlikely you'll ever need to use it directly in your code.
* That is, unless you're building a custom Serenity/JS extension and want to override the default behaviour of the framework,
* in which case you should check out the [Contributor's Guide](/contributing).
* in which case you should check out the [Contributor's Guide](https://serenity-js.org/community/contributing/).
*

@@ -13,0 +13,0 @@ * @group Abilities

@@ -8,7 +8,7 @@ "use strict";

/**
* This {@apilink Ability} enables an {@apilink Actor} to resolve the value of a given {@apilink Answerable}.
* This [`Ability`](https://serenity-js.org/api/core/class/Ability/) enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to resolve the value of a given [`Answerable`](https://serenity-js.org/api/core/#Answerable).
*
* {@apilink AnswerQuestions} is used internally by {@apilink Actor.answer}, and it is unlikely you'll ever need to use it directly in your code.
* `AnswerQuestions` is used internally by [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer), and it is unlikely you'll ever need to use it directly in your code.
* That is, unless you're building a custom Serenity/JS extension and want to override the default behaviour of the framework,
* in which case you should check out the [Contributor's Guide](/contributing).
* in which case you should check out the [Contributor's Guide](https://serenity-js.org/community/contributing/).
*

@@ -15,0 +15,0 @@ * @group Abilities

import type { Ability } from './Ability';
import type { UsesAbilities } from './UsesAbilities';
/**
* Describes an {@apilink Actor} who can have an {@apilink Ability} to perform some {@apilink Activity}.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can have an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to perform some [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* ## Learn more
*
* - {@apilink Ability}
* - {@apilink Actor}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -15,3 +15,3 @@ * @group Actors

/**
* Assigns an {@apilink Ability} or several abilities to the {@apilink Actor}
* Assigns an [`Ability`](https://serenity-js.org/api/core/class/Ability/) or several abilities to the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*/

@@ -18,0 +18,0 @@ whoCan(...abilities: Ability[]): Returned_Type;

/**
* An interface to be implemented by any {@apilink Ability} that needs to free up
* An interface to be implemented by any [`Ability`](https://serenity-js.org/api/core/class/Ability/) that needs to free up
* the resources it uses, e.g. disconnect from a database.
*
* This {@apilink Discardable.discard} method is invoked directly by the {@apilink Actor}, and indirectly by {@apilink Stage}:
* - when {@apilink SceneFinishes}, for actors instantiated after {@apilink SceneStarts} - e.g. within a test scenario or in a "before each" hook
* - when {@apilink TestRunFinishes}, for actors instantiated before {@apilink SceneStarts} - e.g. in a "before all" hook
* This [`Discardable.discard`](https://serenity-js.org/api/core/interface/Discardable/#discard) method is invoked directly by the [actor](https://serenity-js.org/api/core/class/Actor/), and indirectly by the [stage](https://serenity-js.org/api/core/class/Stage/):
* - when [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/), for actors instantiated after [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) - e.g. within a test scenario or in a "before each" hook
* - when [`TestRunFinishes`](https://serenity-js.org/api/core-events/class/TestRunFinishes/), for actors instantiated before [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) - e.g. in a "before all" hook
*
* Note that events such as {@apilink SceneFinishes} and {@apilink TestRunFinishes} are emitted by Serenity/JS test runner adapters,
* Note that events such as [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/) and [`TestRunFinishes`](https://serenity-js.org/api/core-events/class/TestRunFinishes/) are emitted by Serenity/JS test runner adapters,
* such as `@serenity-js/cucumber`, `@serenity-js/mocha`, `@serenity-js/jasmine`, and so on.

@@ -14,5 +14,5 @@ * Consult their respective readmes to learn how to register them with your test runner of choice.

* ## Learn more
* - {@apilink Ability}
* - {@apilink AbilityType}
* - {@apilink Initialisable}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
*

@@ -19,0 +19,0 @@ * @group Abilities

/**
* An interface to be implemented by any {@apilink Ability} that needs to initialise
* An interface to be implemented by any [`Ability`](https://serenity-js.org/api/core/class/Ability/) that needs to initialise
* the resources it uses, e.g. establish a database connection.
*
* The {@apilink Initialisable.initialise} method is invoked whenever {@apilink Actor.attemptsTo} method is called,
* but **only when** {@apilink Initialisable.isInitialised} returns false. This is to avoid initialising abilities more than once.
* The [`Initialisable.initialise`](https://serenity-js.org/api/core/interface/Initialisable/#initialise) method is invoked whenever [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo) method is called,
* but **only when** [`Initialisable.isInitialised`](https://serenity-js.org/api/core/interface/Initialisable/#isInitialised) returns false. This is to avoid initialising abilities more than once.
*
* ## Learn more
* - {@apilink Ability}
* - {@apilink AbilityType}
* - {@apilink Discardable}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
*

@@ -17,6 +17,6 @@ * @group Abilities

/**
* Initialises the ability. Invoked whenever {@apilink Actor.attemptsTo} method is called,
* but **only when** {@apilink Initialisable.isInitialised} returns false.
* Initialises the ability. Invoked whenever [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo) method is called,
* but **only when** [`Initialisable.isInitialised`](https://serenity-js.org/api/core/interface/Initialisable/#isInitialised) returns false.
*
* Make sure to implement {@apilink Initialisable.isInitialised} so that it returns `true`
* Make sure to implement [`Initialisable.isInitialised`](https://serenity-js.org/api/core/interface/Initialisable/#isInitialised) so that it returns `true`
* when the ability has been successfully initialised.

@@ -27,4 +27,4 @@ */

* Should return `true` when all the resources that the given ability needs
* have been initialised. Should return `false` if the {@apilink Actor} should
* initialise them again when {@apilink Actor.attemptsTo} is called.
* have been initialised. Should return `false` if the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should
* initialise them again when [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo) is called.
*

@@ -31,0 +31,0 @@ * @returns {boolean}

@@ -9,7 +9,7 @@ import type { EmitsDomainEvents } from '../../events';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to perform a given {@apilink Activity}.
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform a given [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* {@apilink PerformActivities} is used internally by {@apilink Actor.perform}, and it is unlikely you'll ever need to use it directly in your code.
* [`PerformActivities`](https://serenity-js.org/api/core/class/PerformActivities/) is used internally by [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo), and it is unlikely you'll ever need to use it directly in your code.
* That is, unless you're building a custom Serenity/JS extension and want to override the default behaviour of the framework,
* in which case you should check out the [Contributor's Guide](/contributing).
* in which case you should check out the [Contributor's Guide](https://serenity-js.org/community/contributing).
*

@@ -16,0 +16,0 @@ * @group Abilities

@@ -12,7 +12,7 @@ "use strict";

/**
* An {@apilink Ability} that enables an {@apilink Actor} to perform a given {@apilink Activity}.
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform a given [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* {@apilink PerformActivities} is used internally by {@apilink Actor.perform}, and it is unlikely you'll ever need to use it directly in your code.
* [`PerformActivities`](https://serenity-js.org/api/core/class/PerformActivities/) is used internally by [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo), and it is unlikely you'll ever need to use it directly in your code.
* That is, unless you're building a custom Serenity/JS extension and want to override the default behaviour of the framework,
* in which case you should check out the [Contributor's Guide](/contributing).
* in which case you should check out the [Contributor's Guide](https://serenity-js.org/community/contributing).
*

@@ -19,0 +19,0 @@ * @group Abilities

import type { Ability } from './Ability';
import type { AbilityType } from './AbilityType';
/**
* Describes an {@apilink Actor} who can use their {@apilink Ability|abilities} to perform an {@apilink Activity}
* or answer a {@apilink Question}.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can use their [abilities](https://serenity-js.org/api/core/class/Ability/) to perform an [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* or answer a [`Question`](https://serenity-js.org/api/core/class/Question/).
*
* ## Learn more
*
* - {@apilink Ability}
* - {@apilink Actor}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -16,6 +16,6 @@ * @group Actors

/**
* Provides access to the {@apilink Actor|actor's} {@apilink Ability} to do something
* Provides access to the [actor's](https://serenity-js.org/api/core/class/Actor/) [`Ability`](https://serenity-js.org/api/core/class/Ability/) to do something
*
* @param doSomething
* The type of ability to look up, e.g. {@apilink BrowseTheWeb} or {@apilink CallAnApi}
* The type of ability to look up, e.g. [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/) or [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
*/

@@ -22,0 +22,0 @@ abilityTo<T extends Ability>(doSomething: AbilityType<T>): T;

import type { Activity } from '../Activity';
/**
* Describes an {@apilink Actor} who can perform a sequence of {@apilink Activity|Activities},
* such as {@apilink Task|tasks} or {@apilink Interaction|interactions}.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can perform a sequence of [activities](https://serenity-js.org/api/core/class/Activity/),
* such as [tasks](https://serenity-js.org/api/core/class/Task/) or [interactions](https://serenity-js.org/api/core/class/Interaction/).
*
* ## Learn more
* - {@apilink Activity}
* - {@apilink Interaction}
* - {@apilink Task}
* - {@apilink Actor}
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`Task`](https://serenity-js.org/api/core/class/Task/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -16,3 +16,3 @@ * @group Actors

/**
* Makes the {@apilink Actor} attempt to perform a sequence of {@apilink Activity|Activities}.
* Makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/) attempt to perform a sequence of [activities](https://serenity-js.org/api/core/class/Activity/).
*/

@@ -19,0 +19,0 @@ attemptsTo: (...activities: Activity[]) => Promise<void>;

@@ -8,8 +8,8 @@ import { FileSystemLocation } from '../io';

/**
* **Activities** represents {@apilink Task|tasks} and {@apilink Interaction|interactions} to be performed by an {@apilink Actor|actor}.
* **Activities** represents [tasks](https://serenity-js.org/api/core/class/Task/) and [interactions](https://serenity-js.org/api/core/class/Interaction/) to be performed by an [actor](https://serenity-js.org/api/core/class/Actor/).
*
* Learn more about:
* - [Performing activities at multiple levels](/handbook/design/screenplay-pattern#performing-activities-at-multiple-levels)
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - [Performing activities at multiple levels](https://serenity-js.org/handbook/design/screenplay-pattern#performing-activities-at-multiple-levels)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [Command design pattern on Wikipedia](https://en.wikipedia.org/wiki/Command_pattern)

@@ -24,7 +24,7 @@ *

/**
* Returns the location where this {@apilink Activity} was instantiated.
* Returns the location where this [`Activity`](https://serenity-js.org/api/core/class/Activity/) was instantiated.
*/
instantiationLocation(): FileSystemLocation;
/**
* Instructs the provided {@apilink Actor} to perform this {@apilink Activity}.
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform this [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*

@@ -34,6 +34,6 @@ * @param actor

* #### Learn more
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - {@apilink UsesAbilities}
* - {@apilink AnswersQuestions}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [`UsesAbilities`](https://serenity-js.org/api/core/interface/UsesAbilities/)
* - [`AnswersQuestions`](https://serenity-js.org/api/core/interface/AnswersQuestions/)
*/

@@ -40,0 +40,0 @@ abstract performAs(actor: PerformsActivities | UsesAbilities | AnswersQuestions): Promise<any>;

@@ -12,8 +12,8 @@ "use strict";

/**
* **Activities** represents {@apilink Task|tasks} and {@apilink Interaction|interactions} to be performed by an {@apilink Actor|actor}.
* **Activities** represents [tasks](https://serenity-js.org/api/core/class/Task/) and [interactions](https://serenity-js.org/api/core/class/Interaction/) to be performed by an [actor](https://serenity-js.org/api/core/class/Actor/).
*
* Learn more about:
* - [Performing activities at multiple levels](/handbook/design/screenplay-pattern#performing-activities-at-multiple-levels)
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - [Performing activities at multiple levels](https://serenity-js.org/handbook/design/screenplay-pattern#performing-activities-at-multiple-levels)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [Command design pattern on Wikipedia](https://en.wikipedia.org/wiki/Command_pattern)

@@ -31,3 +31,3 @@ *

/**
* Returns the location where this {@apilink Activity} was instantiated.
* Returns the location where this [`Activity`](https://serenity-js.org/api/core/class/Activity/) was instantiated.
*/

@@ -34,0 +34,0 @@ instantiationLocation() {

@@ -14,22 +14,22 @@ import type { Artifact } from '../model';

* **Actors** represent **people** and **external systems** interacting with the system under test.
* Their role is to perform {@apilink Activity|activities} that demonstrate how to accomplish a given goal.
* Their role is to perform [activities](https://serenity-js.org/api/core/class/Activity/) that demonstrate how to accomplish a given goal.
*
* Actors are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, {@apilink Task|Tasks}, and {@apilink Question|Questions}.
* Actors are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [abilities](https://serenity-js.org/api/core/class/Ability/), [interactions](https://serenity-js.org/api/core/class/Interaction/), [tasks](https://serenity-js.org/api/core/class/Task/), and [questions](https://serenity-js.org/api/core/class/Question/).
* Actors are also the first thing you see in a typical Serenity/JS test scenario.
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Cast}
* - {@apilink Stage}
* - {@apilink Ability|Abilities}
* - {@apilink Activity|Activities}
* - {@apilink Interaction|Interactions}
* - {@apilink Task|Tasks}
* - {@apilink Question|Questions}
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Stage`](https://serenity-js.org/api/core/class/Stage/)
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`Task`](https://serenity-js.org/api/core/class/Task/)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
*
* ## Representing people and systems as actors
*
* To use a Serenity/JS {@apilink Actor}, all you need is to say their name:
* To use a Serenity/JS [`Actor`](https://serenity-js.org/api/core/class/Actor/), all you need is to say their name:
*

@@ -43,4 +43,4 @@ * ```typescript

*
* Serenity/JS actors perform within the scope of a test scenario, so the first time you invoke {@apilink actorCalled},
* Serenity/JS instantiates a new actor from the default {@apilink Cast} of actors (or any custom cast you might have {@apilink configured|configured}).
* Serenity/JS actors perform within the scope of a test scenario, so the first time you invoke [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/),
* Serenity/JS instantiates a new actor from the default [cast](https://serenity-js.org/api/core/class/Cast/) of actors (or any custom cast you might have [configured](https://serenity-js.org/api/core/function/configure/)).
* Any subsequent invocations of this function within the scope of the same test scenario retrieve the already instantiated actor, identified by their name.

@@ -79,8 +79,8 @@ *

/**
* Retrieves actor's {@apilink Ability} of `abilityType`, or one that extends `abilityType`.
* Retrieves actor's [`Ability`](https://serenity-js.org/api/core/class/Ability/) of `abilityType`, or one that extends `abilityType`.
*
* Please note that this method performs an {@apilink instanceof} check against abilities
* given to this actor via {@apilink Actor.whoCan}.
* Please note that this method performs an [`instanceof`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof) check against abilities
* given to this actor via [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan).
*
* Please also note that {@apilink Actor.whoCan} performs the same check when abilities are assigned to the actor
* Please also note that [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) performs the same check when abilities are assigned to the actor
* to ensure the actor has at most one instance of a given ability type.

@@ -92,4 +92,4 @@ *

/**
* Instructs the actor to attempt to perform a number of {@apilink Activity|activities},
* so either {@apilink Task|Tasks} or {@apilink Interaction|Interactions}),
* Instructs the actor to attempt to perform a number of [activities](https://serenity-js.org/api/core/class/Activity/),
* so either [tasks](https://serenity-js.org/api/core/class/Task/) or [interactions](https://serenity-js.org/api/core/class/Interaction/)),
* one by one.

@@ -101,3 +101,3 @@ *

/**
* Gives this Actor a list of {@apilink Ability|abilities} they can use
* Gives this Actor a list of [abilities](https://serenity-js.org/api/core/class/Ability/) they can use
* to interact with the system under test or the test environment.

@@ -111,3 +111,3 @@ *

*
* @throws {@apilink ConfigurationError}
* @throws [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/)
* Throws a ConfigurationError if the actor already has an ability of this type.

@@ -118,3 +118,3 @@ */

* @param answerable -
* An {@apilink Answerable} to answer (resolve the value of).
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) to answer (resolve the value of).
*

@@ -134,4 +134,4 @@ * @returns

/**
* Instructs the actor to invoke {@apilink Discardable.discard} method on any
* {@apilink Discardable} {@apilink Ability} it's been configured with.
* Instructs the actor to invoke [`Discardable.discard`](https://serenity-js.org/api/core/interface/Discardable/#discard) method on any
* [discardable](https://serenity-js.org/api/core/interface/Discardable/) [ability](https://serenity-js.org/api/core/class/Ability/) it's been configured with.
*/

@@ -142,3 +142,3 @@ dismiss(): Promise<void>;

*
* **PRO TIP:** To get the name of the actor, use {@apilink Actor.name}
* **PRO TIP:** To get the name of the actor, use [`Actor.name`](https://serenity-js.org/api/core/class/Actor/#name)
*/

@@ -152,4 +152,4 @@ toString(): string;

/**
* Instantiates a {@apilink Name} based on the string value of the parameter,
* or returns the argument if it's already an instance of {@apilink Name}.
* Instantiates a `Name` based on the string value of the parameter,
* or returns the argument if it's already an instance of `Name`.
*

@@ -156,0 +156,0 @@ * @param maybeName

@@ -11,22 +11,22 @@ "use strict";

* **Actors** represent **people** and **external systems** interacting with the system under test.
* Their role is to perform {@apilink Activity|activities} that demonstrate how to accomplish a given goal.
* Their role is to perform [activities](https://serenity-js.org/api/core/class/Activity/) that demonstrate how to accomplish a given goal.
*
* Actors are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, {@apilink Task|Tasks}, and {@apilink Question|Questions}.
* Actors are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [abilities](https://serenity-js.org/api/core/class/Ability/), [interactions](https://serenity-js.org/api/core/class/Interaction/), [tasks](https://serenity-js.org/api/core/class/Task/), and [questions](https://serenity-js.org/api/core/class/Question/).
* Actors are also the first thing you see in a typical Serenity/JS test scenario.
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Cast}
* - {@apilink Stage}
* - {@apilink Ability|Abilities}
* - {@apilink Activity|Activities}
* - {@apilink Interaction|Interactions}
* - {@apilink Task|Tasks}
* - {@apilink Question|Questions}
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Stage`](https://serenity-js.org/api/core/class/Stage/)
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`Task`](https://serenity-js.org/api/core/class/Task/)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
*
* ## Representing people and systems as actors
*
* To use a Serenity/JS {@apilink Actor}, all you need is to say their name:
* To use a Serenity/JS [`Actor`](https://serenity-js.org/api/core/class/Actor/), all you need is to say their name:
*

@@ -40,4 +40,4 @@ * ```typescript

*
* Serenity/JS actors perform within the scope of a test scenario, so the first time you invoke {@apilink actorCalled},
* Serenity/JS instantiates a new actor from the default {@apilink Cast} of actors (or any custom cast you might have {@apilink configured|configured}).
* Serenity/JS actors perform within the scope of a test scenario, so the first time you invoke [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/),
* Serenity/JS instantiates a new actor from the default [cast](https://serenity-js.org/api/core/class/Cast/) of actors (or any custom cast you might have [configured](https://serenity-js.org/api/core/function/configure/)).
* Any subsequent invocations of this function within the scope of the same test scenario retrieve the already instantiated actor, identified by their name.

@@ -84,8 +84,8 @@ *

/**
* Retrieves actor's {@apilink Ability} of `abilityType`, or one that extends `abilityType`.
* Retrieves actor's [`Ability`](https://serenity-js.org/api/core/class/Ability/) of `abilityType`, or one that extends `abilityType`.
*
* Please note that this method performs an {@apilink instanceof} check against abilities
* given to this actor via {@apilink Actor.whoCan}.
* Please note that this method performs an [`instanceof`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof) check against abilities
* given to this actor via [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan).
*
* Please also note that {@apilink Actor.whoCan} performs the same check when abilities are assigned to the actor
* Please also note that [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) performs the same check when abilities are assigned to the actor
* to ensure the actor has at most one instance of a given ability type.

@@ -105,4 +105,4 @@ *

/**
* Instructs the actor to attempt to perform a number of {@apilink Activity|activities},
* so either {@apilink Task|Tasks} or {@apilink Interaction|Interactions}),
* Instructs the actor to attempt to perform a number of [activities](https://serenity-js.org/api/core/class/Activity/),
* so either [tasks](https://serenity-js.org/api/core/class/Task/) or [interactions](https://serenity-js.org/api/core/class/Interaction/)),
* one by one.

@@ -120,3 +120,3 @@ *

/**
* Gives this Actor a list of {@apilink Ability|abilities} they can use
* Gives this Actor a list of [abilities](https://serenity-js.org/api/core/class/Ability/) they can use
* to interact with the system under test or the test environment.

@@ -130,3 +130,3 @@ *

*
* @throws {@apilink ConfigurationError}
* @throws [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/)
* Throws a ConfigurationError if the actor already has an ability of this type.

@@ -140,3 +140,3 @@ */

* @param answerable -
* An {@apilink Answerable} to answer (resolve the value of).
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) to answer (resolve the value of).
*

@@ -162,4 +162,4 @@ * @returns

/**
* Instructs the actor to invoke {@apilink Discardable.discard} method on any
* {@apilink Discardable} {@apilink Ability} it's been configured with.
* Instructs the actor to invoke [`Discardable.discard`](https://serenity-js.org/api/core/interface/Discardable/#discard) method on any
* [discardable](https://serenity-js.org/api/core/interface/Discardable/) [ability](https://serenity-js.org/api/core/class/Ability/) it's been configured with.
*/

@@ -173,3 +173,3 @@ dismiss() {

*
* **PRO TIP:** To get the name of the actor, use {@apilink Actor.name}
* **PRO TIP:** To get the name of the actor, use [`Actor.name`](https://serenity-js.org/api/core/class/Actor/#name)
*/

@@ -213,4 +213,4 @@ toString() {

/**
* Instantiates a {@apilink Name} based on the string value of the parameter,
* or returns the argument if it's already an instance of {@apilink Name}.
* Instantiates a `Name` based on the string value of the parameter,
* or returns the argument if it's already an instance of `Name`.
*

@@ -217,0 +217,0 @@ * @param maybeName

import type { Question } from './Question';
/**
* A union type that provides a convenient way to represent any value
* that can be resolved by {@apilink Actor.answer}.
* that can be resolved by [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -6,0 +6,0 @@ * @group Questions

import type { Question } from './Question';
/**
* Describes the type of answer a given {@apilink Answerable} would
* resolve to when given to {@apilink Actor.answer}.
* Describes the type of answer a given [`Answerable`](https://serenity-js.org/api/core/#Answerable) would
* resolve to when given to [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -6,0 +6,0 @@ * ```ts

import type { Artifact, Name } from '../../model';
/**
* Describes an {@apilink Actor} who can collect {@apilink Artifact|Artifacts}, such as {@apilink Photo|Photos} or {@apilink JSONData},
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can collect artifacts, such as photos or `JSON` data.,
* while the scenario is being executed
*
* ## Learn more
* - {@apilink Artifact}
* - {@apilink Actor}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -14,3 +13,3 @@ * @group Actors

/**
* Makes the {@apilink Actor} collect an {@apilink Artifact} so that it can be included in the test report.
* Makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/) collect an artifact so that it can be included in the test report.
*

@@ -72,3 +71,3 @@ * #### Implementing a custom interaction to attach artifacts

* @param artifact
* The artifact to be collected, such as {@apilink JSONData}
* The artifact to be collected, such as `JSON` data.
*

@@ -75,0 +74,0 @@ * @param name

@@ -9,3 +9,3 @@ import type { UsesAbilities } from '../abilities';

/**
* Instructs the {@apilink Actor|actor} to evaluate and {@apilink Log|log} the provided {@apilink Answerable|answerable} values.
* Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate and [log](https://serenity-js.org/api/core/class/Log/) the provided [answerable](https://serenity-js.org/api/core/#Answerable) values.
*

@@ -18,4 +18,4 @@ * Since this interaction **accepts a callback function** that receives the evaluated results,

*
* {@apilink Debug.values} accepts a callback function that receives an array of {@apilink DebuggingResult} objects,
* as well as the result of evaluating each provided {@apilink Answerable|answerable} with {@apilink Actor.answer}.
* [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values) accepts a callback function that receives an array of [`DebuggingResult`](https://serenity-js.org/api/core/interface/DebuggingResult/) objects,
* as well as the result of evaluating each provided [answerable](https://serenity-js.org/api/core/#Answerable) with [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -43,4 +43,5 @@ * ```typescript

*
* Since this functionality is specific to [Playwright](/api/playwright), you can use it by passing {@apilink PlaywrightPage.current|`PlaywrightPage.current().nativePage()`}
* to Serenity/JS {@apilink Debug.values}. Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects.
* Since this functionality is specific to [Playwright](https://serenity-js.org/api/playwright),
* you can use it by passing [`PlaywrightPage.current().nativePage()`](https://serenity-js.org/api/playwright/class/PlaywrightPage/#current)
* to Serenity/JS [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values). Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects.
*

@@ -76,3 +77,3 @@ * ```typescript

/**
* Instructs the {@apilink Actor|actor} to evaluate the provided `values`,
* Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate the provided `values`,
* log the results, and then pass them to your `debuggerFunction`.

@@ -79,0 +80,0 @@ *

@@ -10,3 +10,3 @@ "use strict";

/**
* Instructs the {@apilink Actor|actor} to evaluate and {@apilink Log|log} the provided {@apilink Answerable|answerable} values.
* Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate and [log](https://serenity-js.org/api/core/class/Log/) the provided [answerable](https://serenity-js.org/api/core/#Answerable) values.
*

@@ -19,4 +19,4 @@ * Since this interaction **accepts a callback function** that receives the evaluated results,

*
* {@apilink Debug.values} accepts a callback function that receives an array of {@apilink DebuggingResult} objects,
* as well as the result of evaluating each provided {@apilink Answerable|answerable} with {@apilink Actor.answer}.
* [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values) accepts a callback function that receives an array of [`DebuggingResult`](https://serenity-js.org/api/core/interface/DebuggingResult/) objects,
* as well as the result of evaluating each provided [answerable](https://serenity-js.org/api/core/#Answerable) with [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -44,4 +44,5 @@ * ```typescript

*
* Since this functionality is specific to [Playwright](/api/playwright), you can use it by passing {@apilink PlaywrightPage.current|`PlaywrightPage.current().nativePage()`}
* to Serenity/JS {@apilink Debug.values}. Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects.
* Since this functionality is specific to [Playwright](https://serenity-js.org/api/playwright),
* you can use it by passing [`PlaywrightPage.current().nativePage()`](https://serenity-js.org/api/playwright/class/PlaywrightPage/#current)
* to Serenity/JS [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values). Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects.
*

@@ -77,3 +78,3 @@ * ```typescript

/**
* Instructs the {@apilink Actor|actor} to evaluate the provided `values`,
* Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate the provided `values`,
* log the results, and then pass them to your `debuggerFunction`.

@@ -80,0 +81,0 @@ *

/**
* An interface describing debugging data received by the callback function passed to {@apilink Debug.values}.
* An interface describing debugging data received by the callback function passed to [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values).
*

@@ -4,0 +4,0 @@ * @group Activities

@@ -7,6 +7,8 @@ import type { UsesAbilities } from '../abilities';

/**
* Instructs the {@apilink Actor} to {@apilink CollectsArtifacts|collect} arbitrary static values and answers to {@apilink Answerable|Answerables},
* so that they can be sent to the {@apilink StageCrewMember|StageCrewMembers}
* and printed to the terminal by the {@apilink ConsoleReporter}
* or attached to the HTML report by the {@apilink SerenityBDDReporter}.
* Instructs the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* to [collect](https://serenity-js.org/api/core/interface/CollectsArtifacts/) arbitrary static values
* and answers to [answerables](https://serenity-js.org/api/core/#Answerable),
* so that they can be sent to the [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/)
* and printed to the terminal by the [`ConsoleReporter`](https://serenity-js.org/api/console-reporter/class/ConsoleReporter/)
* or attached to the HTML report by the [`SerenityBDDReporter`](https://serenity-js.org/api/serenity-bdd/class/SerenityBDDReporter/).
*

@@ -29,3 +31,3 @@ * ## Logging static and `Answerable` values

/**
* Instantiates a new {@apilink Interaction|interaction} to {@apilink Log}
* Instantiates a new [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Log`](https://serenity-js.org/api/core/class/Log/)
*

@@ -32,0 +34,0 @@ * Note that this method accepts [variable number of arguments](https://www.typescriptlang.org/docs/handbook/functions.html#rest-parameters),

@@ -9,6 +9,8 @@ "use strict";

/**
* Instructs the {@apilink Actor} to {@apilink CollectsArtifacts|collect} arbitrary static values and answers to {@apilink Answerable|Answerables},
* so that they can be sent to the {@apilink StageCrewMember|StageCrewMembers}
* and printed to the terminal by the {@apilink ConsoleReporter}
* or attached to the HTML report by the {@apilink SerenityBDDReporter}.
* Instructs the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* to [collect](https://serenity-js.org/api/core/interface/CollectsArtifacts/) arbitrary static values
* and answers to [answerables](https://serenity-js.org/api/core/#Answerable),
* so that they can be sent to the [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/)
* and printed to the terminal by the [`ConsoleReporter`](https://serenity-js.org/api/console-reporter/class/ConsoleReporter/)
* or attached to the HTML report by the [`SerenityBDDReporter`](https://serenity-js.org/api/serenity-bdd/class/SerenityBDDReporter/).
*

@@ -31,3 +33,3 @@ * ## Logging static and `Answerable` values

/**
* Instantiates a new {@apilink Interaction|interaction} to {@apilink Log}
* Instantiates a new [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Log`](https://serenity-js.org/api/core/class/Log/)
*

@@ -34,0 +36,0 @@ * Note that this method accepts [variable number of arguments](https://www.typescriptlang.org/docs/handbook/functions.html#rest-parameters),

@@ -7,4 +7,4 @@ import type { UsesAbilities } from './abilities';

/**
* **Interactions** are low-level {@apilink Activity|activities} that encapsulate
* a handful of instructions for an {@apilink Actor|actor} on how to use their {@apilink Ability|abilities}
* **Interactions** are low-level [activities](https://serenity-js.org/api/core/class/Activity/) that encapsulate
* a handful of instructions for an [actor](https://serenity-js.org/api/core/class/Actor/) on how to use their [abilities](https://serenity-js.org/api/core/class/Ability/)
* to perform an individual interaction with the given interface of the system under test.

@@ -14,24 +14,24 @@ *

* Because of their low-level nature, interactions are named using the vocabulary of the [solution domain](https://blog.mattwynne.net/2013/01/17/the-problem-with-solutions/),
* and represent an individual interaction with the given interface, e.g. {@apilink Click}, {@apilink Enter}, or {@apilink Send}.
* and represent an individual interaction with the given interface, e.g. [`Click`](https://serenity-js.org/api/web/class/Click/), [`Enter`](https://serenity-js.org/api/web/class/Enter/), or [`Send`](https://serenity-js.org/api/rest/class/Send/).
*
* Interactions follow the [Single Responsibility Principle](https://en.wikipedia.org/wiki/Single_responsibility_principle) which means that they do _one thing and one thing only_.
* If you're considering implementing an "interaction" that performs more than one logical activity, e.g. checks if the button is visible and then clicks on it if is,
* consider using separate interactions for separate responsibilities and then composing them using a {@apilink Task|task}.
* consider using separate interactions for separate responsibilities and then composing them using a [task](https://serenity-js.org/api/core/class/Task/).
* :::
*
* Interactions are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Question|Questions}, and {@apilink Task|Tasks}.
* Interactions are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/), [questions](https://serenity-js.org/api/core/class/Question/), and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor|Actor}
* - {@apilink Ability|Abilities}
* - {@apilink Activity|Activities}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [Abilities](https://serenity-js.org/api/core/class/Ability/)
* - [Activities](https://serenity-js.org/api/core/class/Activity/)
*
* ## Writing a custom interaction
*
* [Serenity/JS modules](/handbook/about/architecture) ship with dozens of interactions to help you compose your test scenarios.
* [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture) ship with dozens of interactions to help you compose your test scenarios.
* However, if you need to interact with a non-standard interface, or want to create a flavour of a given interaction that behaves slightly differently than the built-in version,
* you can easily create your own implementations using the {@apilink Interaction.where} factory method.
* you can easily create your own implementations using the [`Interaction.where`](https://serenity-js.org/api/core/class/Interaction/#where) factory method.
*

@@ -81,9 +81,9 @@ * ```ts

/**
* Instructs the provided {@apilink Actor} to perform this {@apilink Interaction}.
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*
* #### Learn more
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - {@apilink UsesAbilities}
* - {@apilink AnswersQuestions}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [`UsesAbilities`](https://serenity-js.org/api/core/interface/UsesAbilities/)
* - [`AnswersQuestions`](https://serenity-js.org/api/core/interface/AnswersQuestions/)
*

@@ -90,0 +90,0 @@ * @param actor

@@ -6,4 +6,4 @@ "use strict";

/**
* **Interactions** are low-level {@apilink Activity|activities} that encapsulate
* a handful of instructions for an {@apilink Actor|actor} on how to use their {@apilink Ability|abilities}
* **Interactions** are low-level [activities](https://serenity-js.org/api/core/class/Activity/) that encapsulate
* a handful of instructions for an [actor](https://serenity-js.org/api/core/class/Actor/) on how to use their [abilities](https://serenity-js.org/api/core/class/Ability/)
* to perform an individual interaction with the given interface of the system under test.

@@ -13,24 +13,24 @@ *

* Because of their low-level nature, interactions are named using the vocabulary of the [solution domain](https://blog.mattwynne.net/2013/01/17/the-problem-with-solutions/),
* and represent an individual interaction with the given interface, e.g. {@apilink Click}, {@apilink Enter}, or {@apilink Send}.
* and represent an individual interaction with the given interface, e.g. [`Click`](https://serenity-js.org/api/web/class/Click/), [`Enter`](https://serenity-js.org/api/web/class/Enter/), or [`Send`](https://serenity-js.org/api/rest/class/Send/).
*
* Interactions follow the [Single Responsibility Principle](https://en.wikipedia.org/wiki/Single_responsibility_principle) which means that they do _one thing and one thing only_.
* If you're considering implementing an "interaction" that performs more than one logical activity, e.g. checks if the button is visible and then clicks on it if is,
* consider using separate interactions for separate responsibilities and then composing them using a {@apilink Task|task}.
* consider using separate interactions for separate responsibilities and then composing them using a [task](https://serenity-js.org/api/core/class/Task/).
* :::
*
* Interactions are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Question|Questions}, and {@apilink Task|Tasks}.
* Interactions are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/), [questions](https://serenity-js.org/api/core/class/Question/), and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor|Actor}
* - {@apilink Ability|Abilities}
* - {@apilink Activity|Activities}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [Abilities](https://serenity-js.org/api/core/class/Ability/)
* - [Activities](https://serenity-js.org/api/core/class/Activity/)
*
* ## Writing a custom interaction
*
* [Serenity/JS modules](/handbook/about/architecture) ship with dozens of interactions to help you compose your test scenarios.
* [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture) ship with dozens of interactions to help you compose your test scenarios.
* However, if you need to interact with a non-standard interface, or want to create a flavour of a given interaction that behaves slightly differently than the built-in version,
* you can easily create your own implementations using the {@apilink Interaction.where} factory method.
* you can easily create your own implementations using the [`Interaction.where`](https://serenity-js.org/api/core/class/Interaction/#where) factory method.
*

@@ -37,0 +37,0 @@ * ```ts

import { TinyType } from 'tiny-types';
import { NotepadAdapter } from './NotepadAdapter';
/**
* Stores notes recorded by an {@apilink Actor}.
* Stores notes recorded by an [`Actor`](https://serenity-js.org/api/core/class/Actor/).
*
* See {@apilink TakeNotes} and [notes](/api/core/function/notes) for more usage examples.
* See [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) and [notes](https://serenity-js.org/api/core/function/notes) for more usage examples.
*

@@ -46,5 +46,5 @@ * ## Sharing a notepad between actors

*
* - {@apilink TakeNotes}
* - [notes](/api/core/function/notes)
* - {@apilink Cast}
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*

@@ -96,13 +96,13 @@ * @group Notes

/**
* Creates a {@apilink QuestionAdapter} that simplifies access to the notes
* stored in this notepad. Allows the {@apilink Actor} to record, read, and remove notes.
* Creates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that simplifies access to the notes
* stored in this notepad. Allows the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to record, read, and remove notes.
*
* #### Learn more
* - [notes](/api/core/function/notes)
* - {@apilink TakeNotes}
* - {@apilink Notepad}
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
* - [`Notepad`](https://serenity-js.org/api/core/class/Notepad/)
*/
static notes<N extends Record<any, any>>(): NotepadAdapter<N>;
/**
* Instantiates a {@apilink Notepad} with an initial state.
* Instantiates a [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) with an initial state.
*

@@ -132,4 +132,4 @@ * @param recordedNotes

*
* @throws {@apilink LogicError}
* Throws a {@apilink LogicError} if the note with a given `subject`
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* Throws a [`LogicError`](https://serenity-js.org/api/core/class/LogicError/) if the note with a given `subject`
* has never been recorded.

@@ -136,0 +136,0 @@ */

@@ -9,5 +9,5 @@ "use strict";

/**
* Stores notes recorded by an {@apilink Actor}.
* Stores notes recorded by an [`Actor`](https://serenity-js.org/api/core/class/Actor/).
*
* See {@apilink TakeNotes} and [notes](/api/core/function/notes) for more usage examples.
* See [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) and [notes](https://serenity-js.org/api/core/function/notes) for more usage examples.
*

@@ -52,5 +52,5 @@ * ## Sharing a notepad between actors

*
* - {@apilink TakeNotes}
* - [notes](/api/core/function/notes)
* - {@apilink Cast}
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*

@@ -106,9 +106,9 @@ * @group Notes

/**
* Creates a {@apilink QuestionAdapter} that simplifies access to the notes
* stored in this notepad. Allows the {@apilink Actor} to record, read, and remove notes.
* Creates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that simplifies access to the notes
* stored in this notepad. Allows the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to record, read, and remove notes.
*
* #### Learn more
* - [notes](/api/core/function/notes)
* - {@apilink TakeNotes}
* - {@apilink Notepad}
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
* - [`Notepad`](https://serenity-js.org/api/core/class/Notepad/)
*/

@@ -119,3 +119,3 @@ static notes() {

/**
* Instantiates a {@apilink Notepad} with an initial state.
* Instantiates a [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) with an initial state.
*

@@ -150,4 +150,4 @@ * @param recordedNotes

*
* @throws {@apilink LogicError}
* Throws a {@apilink LogicError} if the note with a given `subject`
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* Throws a [`LogicError`](https://serenity-js.org/api/core/class/LogicError/) if the note with a given `subject`
* has never been recorded.

@@ -154,0 +154,0 @@ */

@@ -7,6 +7,6 @@ import type { JSONObject } from 'tiny-types';

/**
* Serenity/JS Screenplay Pattern-style adapter for the {@apilink Notepad},
* that makes it easier for the {@apilink Actor|actors} to access its APIs.
* Serenity/JS Screenplay Pattern-style adapter for the [`Notepad`](https://serenity-js.org/api/core/class/Notepad/),
* that makes it easier for the [actors](https://serenity-js.org/api/core/class/Actor/) to access its APIs.
*
* See {@apilink TakeNotes}, {@apilink Notepad} and {@apilink notes} for more examples.
* See [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/), [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) and [`notes`](https://serenity-js.org/api/core/function/notes/) for more examples.
*

@@ -20,3 +20,3 @@ * @group Notes

* #### Learn more
* - {@apilink Notepad.has}
* - [`Notepad.has`](https://serenity-js.org/api/core/class/Notepad/#has)}
*

@@ -34,3 +34,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.get}
* - [`Notepad.get`](https://serenity-js.org/api/core/class/Notepad/#get)}
*

@@ -43,4 +43,4 @@ * @param subject

*
* @throws {LogicError}
* Throws a {@apilink LogicError} if the note with a given `subject`
* @throws
* Throws a [`LogicError`](https://serenity-js.org/api/core/class/LogicError/) if the note with a given `subject`
* has never been recorded.

@@ -54,5 +54,5 @@ */

* **Pro tip:** calls to `set` can be chained and result in an accumulation
* of values to be recorded in the {@apilink Notepad}.
* Those values are resolved and recorded when the {@apilink Interaction}
* returned by this method is performed by an {@apilink Actor}.
* of values to be recorded in the [`Notepad`](https://serenity-js.org/api/core/class/Notepad/).
* Those values are resolved and recorded when the [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* returned by this method is performed by an [`Actor`](https://serenity-js.org/api/core/class/Actor/).
*

@@ -88,3 +88,3 @@ * If a note identified by a given `subject` is set multiple times,

* #### Learn more
* - {@apilink Notepad.set}
* - [`Notepad.set`](https://serenity-js.org/api/core/class/Notepad/#set)
*

@@ -156,3 +156,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.delete}
* - [`Notepad.delete`](https://serenity-js.org/api/core/class/Notepad/#delete)
*

@@ -188,3 +188,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.clear}
* - [`Notepad.clear`](https://serenity-js.org/api/core/class/Notepad/#clear)
*/

@@ -213,7 +213,7 @@ clear(): Interaction;

* #### Learn more
* - {@apilink Notepad.size}
* - [`Notepad.size`](https://serenity-js.org/api/core/class/Notepad/#size)
*/
size(): QuestionAdapter<number>;
/**
* Produces a {@apilink QuestionAdapter} that resolves to a `JSONObject`
* Produces a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves to a `JSONObject`
* representing the resolved notes stored in the notepad.

@@ -223,3 +223,3 @@ *

* but are commonly used in data structures representing actor's notes.
* For example a {@apilink Map} will be serialised as a regular JSON object, a {@apilink Set} will be serialised as {@apilink Array}.
* For example a [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) will be serialised as a regular JSON object, a [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) will be serialised as [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
*

@@ -226,0 +226,0 @@ * Additionally, notepad assumes that the data structure you use it with does not contain cyclic references.

@@ -10,6 +10,6 @@ "use strict";

/**
* Serenity/JS Screenplay Pattern-style adapter for the {@apilink Notepad},
* that makes it easier for the {@apilink Actor|actors} to access its APIs.
* Serenity/JS Screenplay Pattern-style adapter for the [`Notepad`](https://serenity-js.org/api/core/class/Notepad/),
* that makes it easier for the [actors](https://serenity-js.org/api/core/class/Actor/) to access its APIs.
*
* See {@apilink TakeNotes}, {@apilink Notepad} and {@apilink notes} for more examples.
* See [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/), [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) and [`notes`](https://serenity-js.org/api/core/function/notes/) for more examples.
*

@@ -23,3 +23,3 @@ * @group Notes

* #### Learn more
* - {@apilink Notepad.has}
* - [`Notepad.has`](https://serenity-js.org/api/core/class/Notepad/#has)}
*

@@ -41,3 +41,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.get}
* - [`Notepad.get`](https://serenity-js.org/api/core/class/Notepad/#get)}
*

@@ -50,4 +50,4 @@ * @param subject

*
* @throws {LogicError}
* Throws a {@apilink LogicError} if the note with a given `subject`
* @throws
* Throws a [`LogicError`](https://serenity-js.org/api/core/class/LogicError/) if the note with a given `subject`
* has never been recorded.

@@ -65,5 +65,5 @@ */

* **Pro tip:** calls to `set` can be chained and result in an accumulation
* of values to be recorded in the {@apilink Notepad}.
* Those values are resolved and recorded when the {@apilink Interaction}
* returned by this method is performed by an {@apilink Actor}.
* of values to be recorded in the [`Notepad`](https://serenity-js.org/api/core/class/Notepad/).
* Those values are resolved and recorded when the [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* returned by this method is performed by an [`Actor`](https://serenity-js.org/api/core/class/Actor/).
*

@@ -99,3 +99,3 @@ * If a note identified by a given `subject` is set multiple times,

* #### Learn more
* - {@apilink Notepad.set}
* - [`Notepad.set`](https://serenity-js.org/api/core/class/Notepad/#set)
*

@@ -169,3 +169,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.delete}
* - [`Notepad.delete`](https://serenity-js.org/api/core/class/Notepad/#delete)
*

@@ -205,3 +205,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.clear}
* - [`Notepad.clear`](https://serenity-js.org/api/core/class/Notepad/#clear)
*/

@@ -234,3 +234,3 @@ clear() {

* #### Learn more
* - {@apilink Notepad.size}
* - [`Notepad.size`](https://serenity-js.org/api/core/class/Notepad/#size)
*/

@@ -243,3 +243,3 @@ size() {

/**
* Produces a {@apilink QuestionAdapter} that resolves to a `JSONObject`
* Produces a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves to a `JSONObject`
* representing the resolved notes stored in the notepad.

@@ -249,3 +249,3 @@ *

* but are commonly used in data structures representing actor's notes.
* For example a {@apilink Map} will be serialised as a regular JSON object, a {@apilink Set} will be serialised as {@apilink Array}.
* For example a [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) will be serialised as a regular JSON object, a [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) will be serialised as [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
*

@@ -252,0 +252,0 @@ * Additionally, notepad assumes that the data structure you use it with does not contain cyclic references.

import type { NotepadAdapter } from './NotepadAdapter';
/**
* Alias for {@apilink Notepad.notes}.
* Alias for [`Notepad.notes`](https://serenity-js.org/api/core/class/Notepad/#notes).
*
* **Pro tip:** `notes<T>().get(subject)` returns a {@apilink NotepadAdapter} to make accessing the APIs
* of the underlying type easier. Check {@apilink NotepadAdapter} for more examples.
* **Pro tip:** `notes<T>().get(subject)` returns a [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/) to make accessing the APIs
* of the underlying type easier. Check [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/) for more examples.
*

@@ -110,5 +110,5 @@ * ## Working with untyped notes

*
* - {@apilink NotepadAdapter}
* - {@apilink Notepad.notes}
* - {@apilink QuestionAdapter}
* - [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/)
* - [`Notepad.notes`](https://serenity-js.org/api/core/class/Notepad/#notes)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -115,0 +115,0 @@ * @group Notes

@@ -6,6 +6,6 @@ "use strict";

/**
* Alias for {@apilink Notepad.notes}.
* Alias for [`Notepad.notes`](https://serenity-js.org/api/core/class/Notepad/#notes).
*
* **Pro tip:** `notes<T>().get(subject)` returns a {@apilink NotepadAdapter} to make accessing the APIs
* of the underlying type easier. Check {@apilink NotepadAdapter} for more examples.
* **Pro tip:** `notes<T>().get(subject)` returns a [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/) to make accessing the APIs
* of the underlying type easier. Check [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/) for more examples.
*

@@ -114,5 +114,5 @@ * ## Working with untyped notes

*
* - {@apilink NotepadAdapter}
* - {@apilink Notepad.notes}
* - {@apilink QuestionAdapter}
* - [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/)
* - [`Notepad.notes`](https://serenity-js.org/api/core/class/Notepad/#notes)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -119,0 +119,0 @@ * @group Notes

import { Ability } from '../abilities';
import { Notepad } from './Notepad';
/**
* An {@apilink Ability} that enables an {@apilink Actor} to remember information
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to remember information
* to be recalled during a test scenario.
*
* Under the hood, {@apilink TakeNotes} uses a {@apilink Notepad}, which state
* Under the hood, [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) uses a [`Notepad`](https://serenity-js.org/api/core/class/Notepad/), which state
* can be populated both during initialisation or while the test scenario is executed.

@@ -14,7 +14,7 @@ * Populating the notepad when it's initialised can be useful to associate authentication credentials

*
* **Pro tip:** {@apilink TakeNotes}, {@apilink Notepad} and {@apilink notes} can be typed
* **Pro tip:** [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/), [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) and [`notes`](https://serenity-js.org/api/core/function/notes/) can be typed
* using [TypeScript generics](https://www.typescriptlang.org/docs/handbook/2/generics.html)
* to help you avoid typos when specifying note names.
*
* See [notes](/api/core/function/notes) and {@apilink Notepad} for more usage examples.
* See [notes](https://serenity-js.org/api/core/function/notes) and [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) for more usage examples.
*

@@ -227,4 +227,4 @@ * ## Remembering and retrieving a value

*
* - [notes](/api/core/function/notes)
* - {@apilink Notepad}
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`Notepad`](https://serenity-js.org/api/core/class/Notepad/)
*

@@ -236,8 +236,8 @@ * @group Notes

/**
* Initialises an {@apilink Ability} to {@apilink TakeNotes} with {@apilink Notepad.empty}.
* Initialises an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) with [`Notepad.empty`](https://serenity-js.org/api/core/class/Notepad/#empty).
*/
static usingAnEmptyNotepad<N extends Record<any, any>>(): TakeNotes<N>;
/**
* Initialises an {@apilink Ability} to {@apilink TakeNotes} using
* a {@apilink Notepad.with} some initial state.
* Initialises an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) using
* a [`Notepad.with`](https://serenity-js.org/api/core/class/Notepad/#with) some initial state.
*

@@ -244,0 +244,0 @@ * @param notepad

@@ -7,6 +7,6 @@ "use strict";

/**
* An {@apilink Ability} that enables an {@apilink Actor} to remember information
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to remember information
* to be recalled during a test scenario.
*
* Under the hood, {@apilink TakeNotes} uses a {@apilink Notepad}, which state
* Under the hood, [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) uses a [`Notepad`](https://serenity-js.org/api/core/class/Notepad/), which state
* can be populated both during initialisation or while the test scenario is executed.

@@ -18,7 +18,7 @@ * Populating the notepad when it's initialised can be useful to associate authentication credentials

*
* **Pro tip:** {@apilink TakeNotes}, {@apilink Notepad} and {@apilink notes} can be typed
* **Pro tip:** [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/), [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) and [`notes`](https://serenity-js.org/api/core/function/notes/) can be typed
* using [TypeScript generics](https://www.typescriptlang.org/docs/handbook/2/generics.html)
* to help you avoid typos when specifying note names.
*
* See [notes](/api/core/function/notes) and {@apilink Notepad} for more usage examples.
* See [notes](https://serenity-js.org/api/core/function/notes) and [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) for more usage examples.
*

@@ -231,4 +231,4 @@ * ## Remembering and retrieving a value

*
* - [notes](/api/core/function/notes)
* - {@apilink Notepad}
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`Notepad`](https://serenity-js.org/api/core/class/Notepad/)
*

@@ -240,3 +240,3 @@ * @group Notes

/**
* Initialises an {@apilink Ability} to {@apilink TakeNotes} with {@apilink Notepad.empty}.
* Initialises an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) with [`Notepad.empty`](https://serenity-js.org/api/core/class/Notepad/#empty).
*/

@@ -247,4 +247,4 @@ static usingAnEmptyNotepad() {

/**
* Initialises an {@apilink Ability} to {@apilink TakeNotes} using
* a {@apilink Notepad.with} some initial state.
* Initialises an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) using
* a [`Notepad.with`](https://serenity-js.org/api/core/class/Notepad/#with) some initial state.
*

@@ -251,0 +251,0 @@ * @param notepad

@@ -21,3 +21,3 @@ import type { Answerable } from './Answerable';

/**
* Returns an {@apilink Answerable} that resolves to `true` when the optional value
* Returns an [`Answerable`](https://serenity-js.org/api/core/#Answerable) that resolves to `true` when the optional value
* is present, `false` otherwise.

@@ -24,0 +24,0 @@ */

@@ -15,14 +15,16 @@ /// <reference types="node" />

/**
* **Questions** describe how {@apilink Actor|actors} should query the system under test or the test environment to retrieve some information.
* **Questions** describe how [actors](https://serenity-js.org/api/core/class/Actor/) should query the system under test or the test environment to retrieve some information.
*
* Questions are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, and {@apilink Task|Tasks}.
* Questions are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/),
* [interactions](https://serenity-js.org/api/core/class/Interaction/),
* and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor}
* - {@apilink Ability|Abilities}
* - {@apilink Interaction}
* - {@apilink QuestionAdapter}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -47,6 +49,6 @@ * ## Implementing a basic custom Question

*
* Just like the {@apilink Interaction|interactions}, a {@apilink Question}
* also can use {@apilink Actor|actor's} {@apilink Ability|abilities}.
* Just like the [interactions](https://serenity-js.org/api/core/class/Interaction/), a [`Question`](https://serenity-js.org/api/core/class/Question/)
* also can use [actor's](https://serenity-js.org/api/core/class/Actor/) [abilities](https://serenity-js.org/api/core/class/Ability/).
*
* Here, we use the ability to {@apilink CallAnApi} to retrieve a property of
* Here, we use the ability to [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/) to retrieve a property of
* an HTTP response.

@@ -65,11 +67,11 @@ *

* #### Learn more
* - {@apilink CallAnApi}
* - {@apilink LastResponse}
* - [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
* - [`LastResponse`](https://serenity-js.org/api/rest/class/LastResponse/)
*
* ## Mapping answers to other questions
*
* Apart from retrieving information, {@apilink Question|questions} can be used to transform information retrieved by other questions.
* Apart from retrieving information, [questions](https://serenity-js.org/api/core/class/Question/) can be used to transform information retrieved by other questions.
*
* Here, we use the factory method {@apilink Question.about} to produce a question that makes the received {@apilink Actor|actor}
* answer {@apilink LastResponse.status} and then compare it against some expected value.
* Here, we use the factory method [`Question.about`](https://serenity-js.org/api/core/class/Question/#about) to produce a question that makes the received [actor](https://serenity-js.org/api/core/class/Actor/)
* answer [`LastResponse.status`](https://serenity-js.org/api/rest/class/LastResponse/#status) and then compare it against some expected value.
*

@@ -97,3 +99,3 @@ * ```ts

* Note that the above example is for demonstration purposes only, Serenity/JS provides an easier way to
* verify the response status of the {@apilink LastResponse}:
* verify the response status of the [`LastResponse`](https://serenity-js.org/api/rest/class/LastResponse/):
*

@@ -135,5 +137,6 @@ * ```ts

/**
* Generates a {@apilink QuestionAdapter} that recursively resolves
* any {@apilink Answerable} fields of the provided object,
* including {@apilink Answerable} fields of {@apilink WithAnswerableProperties|nested objects}.
* Generates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that recursively resolves
* any [`Answerable`](https://serenity-js.org/api/core/#Answerable) fields of the provided object,
* including [`Answerable`](https://serenity-js.org/api/core/#Answerable) fields
* of [nested objects](https://serenity-js.org/api/core/#WithAnswerableProperties).
*

@@ -191,5 +194,5 @@ * Optionally, the method accepts `overrides` to be shallow-merged with the fields of the original `source`,

* #### Learn more
* - {@apilink WithAnswerableProperties}
* - {@apilink RecursivelyAnswered}
* - {@apilink Answerable}
* - [`WithAnswerableProperties`](https://serenity-js.org/api/core/#WithAnswerableProperties)
* - [`RecursivelyAnswered`](https://serenity-js.org/api/core/#RecursivelyAnswered)
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
*

@@ -201,8 +204,8 @@ * @param source

/**
* Generates a {@apilink QuestionAdapter} that resolves
* any {@apilink Answerable} elements of the provided array.
* Generates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves
* any [`Answerable`](https://serenity-js.org/api/core/#Answerable) elements of the provided array.
*/
static fromArray<Source_Type>(source: Array<Answerable<Source_Type>>, options?: DescriptionFormattingOptions): QuestionAdapter<Source_Type[]>;
/**
* Checks if the value is a {@apilink Question}.
* Checks if the value is a [`Question`](https://serenity-js.org/api/core/class/Question/).
*

@@ -214,3 +217,3 @@ * @param maybeQuestion

/**
* Checks if the value is a {@apilink MetaQuestion}.
* Checks if the value is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/).
*

@@ -222,3 +225,3 @@ * @param maybeMetaQuestion

/**
* Creates a {@apilink MetaQuestion} that can be composed with any {@apilink Answerable}
* Creates a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be composed with any [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* to produce a single-line description of its value.

@@ -245,7 +248,7 @@ *

/**
* Creates a {@apilink MetaQuestion} that can be composed with any {@apilink Answerable}
* to return its value when the answerable is a {@apilink Question},
* Creates a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be composed with any [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* to return its value when the answerable is a [`Question`](https://serenity-js.org/api/core/class/Question/),
* or the answerable itself otherwise.
*
* The description of the resulting question is produced by calling {@apilink Question.description} on the
* The description of the resulting question is produced by calling [`Question.describedBy`](https://serenity-js.org/api/core/class/Question/#describedBy) on the
* provided answerable.

@@ -277,3 +280,3 @@ *

/**
* Instructs the provided {@apilink Actor} to use their {@apilink Ability|abilities}
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to use their [abilities](https://serenity-js.org/api/core/class/Ability/)
* to answer this question.

@@ -283,9 +286,9 @@ */

/**
* Changes the description of this object, as returned by {@apilink Describable.describedBy}
* and {@apilink Describable.toString}.
* Changes the description of this object, as returned by [`Describable.describedBy`](https://serenity-js.org/api/core/class/Describable/#describedBy)
* and [`Describable.toString`](https://serenity-js.org/api/core/class/Describable/#toString).
*
* @param description
* Replaces the current description according to the following rules:
* - If `description` is an {@apilink Answerable}, it replaces the current description
* - If `description` is a {@apilink MetaQuestion}, the current description is passed as `context` to `description.of(context)`, and the result replaces the current description
* - If `description` is an [`Answerable`](https://serenity-js.org/api/core/#Answerable), it replaces the current description
* - If `description` is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/), the current description is passed as `context` to `description.of(context)`, and the result replaces the current description
*/

@@ -311,5 +314,5 @@ describedAs(description: Answerable<string> | MetaQuestion<Awaited<T>, Question<Promise<string>>>): this;

/**
* Describes an object recursively wrapped in {@apilink QuestionAdapter} proxies, so that:
* - both methods and fields of the wrapped object can be used as {@apilink Question|questions} or {@apilink Interactions|interactions}
* - method parameters of the wrapped object will accept {@apilink Answerable|Answerable<T>}
* Describes an object recursively wrapped in [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) proxies, so that:
* - both methods and fields of the wrapped object can be used as [questions](https://serenity-js.org/api/core/class/Question/) or [interactions](https://serenity-js.org/api/core/class/Interaction/)
* - method parameters of the wrapped object will accept [`Answerable<T>`](https://serenity-js.org/api/core/#Answerable)
*

@@ -324,6 +327,6 @@ * @group Questions

/**
* A union type representing a proxy object returned by {@apilink Question.about}.
* A union type representing a proxy object returned by [`Question.about`](https://serenity-js.org/api/core/class/Question/#about).
*
* {@apilink QuestionAdapter} proxies the methods and fields of the wrapped object recursively,
* allowing them to be used as either a {@apilink Question} or an {@apilink Interaction}.
* [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) proxies the methods and fields of the wrapped object recursively,
* allowing them to be used as either a [`Question`](https://serenity-js.org/api/core/class/Question/) or an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -336,4 +339,4 @@ * @group Questions

/**
* An extension of {@apilink QuestionAdapter}, that in addition to proxying methods and fields
* of the wrapped object can also act as a {@apilink MetaQuestion}.
* An extension of [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter), that in addition to proxying methods and fields
* of the wrapped object can also act as a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/).
*

@@ -351,3 +354,3 @@ * @group Questions

/**
* Returns a Question that resolves to `true` if resolving the {@apilink QuestionStatement}
* Returns a Question that resolves to `true` if resolving the `QuestionStatement`
* returns a value other than `null` or `undefined`, and doesn't throw errors.

@@ -354,0 +357,0 @@ */

@@ -36,14 +36,16 @@ "use strict";

/**
* **Questions** describe how {@apilink Actor|actors} should query the system under test or the test environment to retrieve some information.
* **Questions** describe how [actors](https://serenity-js.org/api/core/class/Actor/) should query the system under test or the test environment to retrieve some information.
*
* Questions are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, and {@apilink Task|Tasks}.
* Questions are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/),
* [interactions](https://serenity-js.org/api/core/class/Interaction/),
* and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor}
* - {@apilink Ability|Abilities}
* - {@apilink Interaction}
* - {@apilink QuestionAdapter}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -68,6 +70,6 @@ * ## Implementing a basic custom Question

*
* Just like the {@apilink Interaction|interactions}, a {@apilink Question}
* also can use {@apilink Actor|actor's} {@apilink Ability|abilities}.
* Just like the [interactions](https://serenity-js.org/api/core/class/Interaction/), a [`Question`](https://serenity-js.org/api/core/class/Question/)
* also can use [actor's](https://serenity-js.org/api/core/class/Actor/) [abilities](https://serenity-js.org/api/core/class/Ability/).
*
* Here, we use the ability to {@apilink CallAnApi} to retrieve a property of
* Here, we use the ability to [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/) to retrieve a property of
* an HTTP response.

@@ -86,11 +88,11 @@ *

* #### Learn more
* - {@apilink CallAnApi}
* - {@apilink LastResponse}
* - [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
* - [`LastResponse`](https://serenity-js.org/api/rest/class/LastResponse/)
*
* ## Mapping answers to other questions
*
* Apart from retrieving information, {@apilink Question|questions} can be used to transform information retrieved by other questions.
* Apart from retrieving information, [questions](https://serenity-js.org/api/core/class/Question/) can be used to transform information retrieved by other questions.
*
* Here, we use the factory method {@apilink Question.about} to produce a question that makes the received {@apilink Actor|actor}
* answer {@apilink LastResponse.status} and then compare it against some expected value.
* Here, we use the factory method [`Question.about`](https://serenity-js.org/api/core/class/Question/#about) to produce a question that makes the received [actor](https://serenity-js.org/api/core/class/Actor/)
* answer [`LastResponse.status`](https://serenity-js.org/api/rest/class/LastResponse/#status) and then compare it against some expected value.
*

@@ -118,3 +120,3 @@ * ```ts

* Note that the above example is for demonstration purposes only, Serenity/JS provides an easier way to
* verify the response status of the {@apilink LastResponse}:
* verify the response status of the [`LastResponse`](https://serenity-js.org/api/rest/class/LastResponse/):
*

@@ -144,5 +146,6 @@ * ```ts

/**
* Generates a {@apilink QuestionAdapter} that recursively resolves
* any {@apilink Answerable} fields of the provided object,
* including {@apilink Answerable} fields of {@apilink WithAnswerableProperties|nested objects}.
* Generates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that recursively resolves
* any [`Answerable`](https://serenity-js.org/api/core/#Answerable) fields of the provided object,
* including [`Answerable`](https://serenity-js.org/api/core/#Answerable) fields
* of [nested objects](https://serenity-js.org/api/core/#WithAnswerableProperties).
*

@@ -200,5 +203,5 @@ * Optionally, the method accepts `overrides` to be shallow-merged with the fields of the original `source`,

* #### Learn more
* - {@apilink WithAnswerableProperties}
* - {@apilink RecursivelyAnswered}
* - {@apilink Answerable}
* - [`WithAnswerableProperties`](https://serenity-js.org/api/core/#WithAnswerableProperties)
* - [`RecursivelyAnswered`](https://serenity-js.org/api/core/#RecursivelyAnswered)
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
*

@@ -221,4 +224,4 @@ * @param source

/**
* Generates a {@apilink QuestionAdapter} that resolves
* any {@apilink Answerable} elements of the provided array.
* Generates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves
* any [`Answerable`](https://serenity-js.org/api/core/#Answerable) elements of the provided array.
*/

@@ -240,3 +243,3 @@ static fromArray(source, options) {

/**
* Checks if the value is a {@apilink Question}.
* Checks if the value is a [`Question`](https://serenity-js.org/api/core/class/Question/).
*

@@ -251,3 +254,3 @@ * @param maybeQuestion

/**
* Checks if the value is a {@apilink MetaQuestion}.
* Checks if the value is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/).
*

@@ -263,3 +266,3 @@ * @param maybeMetaQuestion

/**
* Creates a {@apilink MetaQuestion} that can be composed with any {@apilink Answerable}
* Creates a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be composed with any [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* to produce a single-line description of its value.

@@ -288,7 +291,7 @@ *

/**
* Creates a {@apilink MetaQuestion} that can be composed with any {@apilink Answerable}
* to return its value when the answerable is a {@apilink Question},
* Creates a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be composed with any [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* to return its value when the answerable is a [`Question`](https://serenity-js.org/api/core/class/Question/),
* or the answerable itself otherwise.
*
* The description of the resulting question is produced by calling {@apilink Question.description} on the
* The description of the resulting question is produced by calling [`Question.describedBy`](https://serenity-js.org/api/core/class/Question/#describedBy) on the
* provided answerable.

@@ -415,9 +418,9 @@ *

/**
* Changes the description of this object, as returned by {@apilink Describable.describedBy}
* and {@apilink Describable.toString}.
* Changes the description of this object, as returned by [`Describable.describedBy`](https://serenity-js.org/api/core/class/Describable/#describedBy)
* and [`Describable.toString`](https://serenity-js.org/api/core/class/Describable/#toString).
*
* @param description
* Replaces the current description according to the following rules:
* - If `description` is an {@apilink Answerable}, it replaces the current description
* - If `description` is a {@apilink MetaQuestion}, the current description is passed as `context` to `description.of(context)`, and the result replaces the current description
* - If `description` is an [`Answerable`](https://serenity-js.org/api/core/#Answerable), it replaces the current description
* - If `description` is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/), the current description is passed as `context` to `description.of(context)`, and the result replaces the current description
*/

@@ -459,3 +462,3 @@ describedAs(description) {

/**
* Returns a Question that resolves to `true` if resolving the {@apilink QuestionStatement}
* Returns a Question that resolves to `true` if resolving the `QuestionStatement`
* returns a value other than `null` or `undefined`, and doesn't throw errors.

@@ -462,0 +465,0 @@ */

import type { Answerable } from '../Answerable';
/**
* Describes an {@apilink Actor} who can answer a {@apilink Question} about the system under test.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can answer a [`Question`](https://serenity-js.org/api/core/class/Question/) about the system under test.
*
* ## Learn more
*
* - {@apilink Question}
* - {@apilink Actor}
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -14,3 +14,3 @@ * @group Actors

/**
* Makes the {@apilink Actor} evaluate an {@apilink Answerable}
* Makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/) evaluate an [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* and return the value it holds.

@@ -17,0 +17,0 @@ */

@@ -5,10 +5,10 @@ import type { Answerable } from '../Answerable';

/**
* A chainable meta-question is a {@apilink MetaQuestion} that can be answered
* in the context of another {@apilink Answerable},
* A chainable meta-question is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be answered
* in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable),
* and form a chain of transformations.
*
* {@apilink MetaQuestion|Meta questions} are typically used when filtering a {@apilink List}.
* [Meta-questions](https://serenity-js.org/api/core/interface/MetaQuestion/) are typically used when filtering a [`List`](https://serenity-js.org/api/core/class/List/).
*
* ## Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*

@@ -19,7 +19,7 @@ * @group Questions

/**
* Answers the given `ChainableMetaQuestion` in the context of another {@apilink Answerable}
* Answers the given `ChainableMetaQuestion` in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* and returns another `ChainableMetaQuestion` ready for further chaining.
*
* #### Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*/

@@ -26,0 +26,0 @@ of(context: Answerable<Supported_Context_Type>): Returned_Question_Type & ChainableMetaQuestion<Supported_Context_Type, Returned_Question_Type>;

@@ -9,3 +9,3 @@ import type { PerformsActivities } from '../activities';

* A [flow control statement](https://en.wikipedia.org/wiki/Control_flow)
* that enables an {@apilink Actor} to decide between two alternate series of {@apilink Activity|activities}.
* that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to decide between two alternate series of [activities](https://serenity-js.org/api/core/class/Activity/).
*

@@ -58,3 +58,3 @@ * Think of it as a Screenplay Pattern equivalent of the traditional `if` statement.

* @param alternativeActivities
* A sequence of {@apilink Activity|activities} to perform when the {@apilink Expectation} is not met.
* A sequence of [activities](https://serenity-js.org/api/core/class/Activity/) to perform when the [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) is not met.
*/

@@ -61,0 +61,0 @@ otherwise(...alternativeActivities: Activity[]): Task;

@@ -9,3 +9,3 @@ "use strict";

* A [flow control statement](https://en.wikipedia.org/wiki/Control_flow)
* that enables an {@apilink Actor} to decide between two alternate series of {@apilink Activity|activities}.
* that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to decide between two alternate series of [activities](https://serenity-js.org/api/core/class/Activity/).
*

@@ -67,3 +67,3 @@ * Think of it as a Screenplay Pattern equivalent of the traditional `if` statement.

* @param alternativeActivities
* A sequence of {@apilink Activity|activities} to perform when the {@apilink Expectation} is not met.
* A sequence of [activities](https://serenity-js.org/api/core/class/Activity/) to perform when the [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) is not met.
*/

@@ -70,0 +70,0 @@ otherwise(...alternativeActivities) {

/**
* Configuration options for {@apilink Question.formattedValue} and
* the [`the`](/api/core/function/the/) function.
* Configuration options for [`Question.formattedValue`](https://serenity-js.org/api/core/class/Question/#formattedValue) and
* the [`the`](https://serenity-js.org/api/core/function/the/) function.
*

@@ -5,0 +5,0 @@ * @group Questions

@@ -12,4 +12,7 @@ import type { Answerable, AnswersQuestions, QuestionAdapter } from '../index';

/**
* Defines an expectation to be used with {@apilink @apilink Wait.until}, {@apilink Check.whether}, {@apilink Ensure.that}
* and as part of the Page Element Query Language with {@apilink PageElements.where} and {@apilink List.where}.
* Defines an expectation to be used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until),
* [`Check.whether`](https://serenity-js.org/api/core/class/Check/#whether),
* [`Ensure.that`](https://serenity-js.org/api/assertions/class/Ensure/#that)
* and as part of the Page Element Query Language with [`PageElements.where`](https://serenity-js.org/api/web/class/PageElements/#where)
* and [`List.where`](https://serenity-js.org/api/core/class/List/#where).
*

@@ -22,3 +25,3 @@ * @group Expectations

/**
* A factory method to that makes defining custom {@apilink Expectation|expectations} easier
* A factory method to that makes defining custom [expectations](https://serenity-js.org/api/core/class/Expectation/) easier
*

@@ -94,12 +97,12 @@ * #### Defining a custom expectation

* #### Learn more
* - {@apilink Ensure}
* - {@apilink Check}
* - {@apilink Wait}
* - [`Ensure`](https://serenity-js.org/api/assertions/class/Ensure/)
* - [`Check`](https://serenity-js.org/api/core/class/Check/)
* - [`Wait`](https://serenity-js.org/api/core/class/Wait/)
*
* @param functionName
* Name of the expectation function to be used when producing an {@apilink AssertionError}
* Name of the expectation function to be used when producing an [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/)
*
* @param relationship
* Human-readable description of the relationship between the `expected` and the `actual` values.
* Used when reporting {@apilink Activity|activities} performed by an {@apilink Actor|actor}
* Used when reporting [activities](https://serenity-js.org/api/core/class/Activity/) performed by an [actor](https://serenity-js.org/api/core/class/Actor/)
*

@@ -110,3 +113,3 @@ * @param predicate

/**
* Used to define a simple {@apilink Expectation}
* Used to define a simple [`Expectation`](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -140,5 +143,5 @@ * #### Simple parameterised expectation

/**
* Used to compose {@apilink Expectation|expectations}.
* Used to compose [expectations](https://serenity-js.org/api/core/class/Expectation/).
*
* #### Composing {@apilink Expectation|expectations}
* #### Composing [expectations](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -175,5 +178,5 @@ * ```ts

/**
* Returns a {@apilink QuestionAdapter} that resolves to {@apilink ExpectationOutcome}
* indicating that the {@apilink ExpectationMet|expectation was met}
* or that the {@apilink ExpectationNotMet|expectation was not met}
* Returns a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves to [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/)
* indicating that the [expectation was met](https://serenity-js.org/api/core/class/ExpectationMet/)
* or that the [expectation was not met](https://serenity-js.org/api/core/class/ExpectationNotMet/)
*

@@ -180,0 +183,0 @@ * @param actual

@@ -10,4 +10,7 @@ "use strict";

/**
* Defines an expectation to be used with {@apilink @apilink Wait.until}, {@apilink Check.whether}, {@apilink Ensure.that}
* and as part of the Page Element Query Language with {@apilink PageElements.where} and {@apilink List.where}.
* Defines an expectation to be used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until),
* [`Check.whether`](https://serenity-js.org/api/core/class/Check/#whether),
* [`Ensure.that`](https://serenity-js.org/api/assertions/class/Ensure/#that)
* and as part of the Page Element Query Language with [`PageElements.where`](https://serenity-js.org/api/web/class/PageElements/#where)
* and [`List.where`](https://serenity-js.org/api/core/class/List/#where).
*

@@ -20,3 +23,3 @@ * @group Expectations

/**
* A factory method to that makes defining custom {@apilink Expectation|expectations} easier
* A factory method to that makes defining custom [expectations](https://serenity-js.org/api/core/class/Expectation/) easier
*

@@ -92,12 +95,12 @@ * #### Defining a custom expectation

* #### Learn more
* - {@apilink Ensure}
* - {@apilink Check}
* - {@apilink Wait}
* - [`Ensure`](https://serenity-js.org/api/assertions/class/Ensure/)
* - [`Check`](https://serenity-js.org/api/core/class/Check/)
* - [`Wait`](https://serenity-js.org/api/core/class/Wait/)
*
* @param functionName
* Name of the expectation function to be used when producing an {@apilink AssertionError}
* Name of the expectation function to be used when producing an [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/)
*
* @param relationship
* Human-readable description of the relationship between the `expected` and the `actual` values.
* Used when reporting {@apilink Activity|activities} performed by an {@apilink Actor|actor}
* Used when reporting [activities](https://serenity-js.org/api/core/class/Activity/) performed by an [actor](https://serenity-js.org/api/core/class/Actor/)
*

@@ -127,3 +130,3 @@ * @param predicate

/**
* Used to define a simple {@apilink Expectation}
* Used to define a simple [`Expectation`](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -170,5 +173,5 @@ * #### Simple parameterised expectation

/**
* Used to compose {@apilink Expectation|expectations}.
* Used to compose [expectations](https://serenity-js.org/api/core/class/Expectation/).
*
* #### Composing {@apilink Expectation|expectations}
* #### Composing [expectations](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -215,5 +218,5 @@ * ```ts

/**
* Returns a {@apilink QuestionAdapter} that resolves to {@apilink ExpectationOutcome}
* indicating that the {@apilink ExpectationMet|expectation was met}
* or that the {@apilink ExpectationNotMet|expectation was not met}
* Returns a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves to [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/)
* indicating that the [expectation was met](https://serenity-js.org/api/core/class/ExpectationMet/)
* or that the [expectation was not met](https://serenity-js.org/api/core/class/ExpectationNotMet/)
*

@@ -220,0 +223,0 @@ * @param actual

@@ -6,3 +6,3 @@ import type { JSONObject, JSONValue } from 'tiny-types';

/**
* Used with {@apilink ExpectationOutcome} to describe an {@apilink Expectation} and the arguments it's been executed with.
* Used with [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/) to describe an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) and the arguments it's been executed with.
*

@@ -9,0 +9,0 @@ * @group Expectations

@@ -9,3 +9,3 @@ "use strict";

/**
* Used with {@apilink ExpectationOutcome} to describe an {@apilink Expectation} and the arguments it's been executed with.
* Used with [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/) to describe an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) and the arguments it's been executed with.
*

@@ -12,0 +12,0 @@ * @group Expectations

import { ExpectationOutcome } from './ExpectationOutcome';
/**
* Indicates that an {@apilink Expectation} was met.
* Indicates that an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) was met.
*

@@ -5,0 +5,0 @@ * @group Expectations

@@ -6,3 +6,3 @@ "use strict";

/**
* Indicates that an {@apilink Expectation} was met.
* Indicates that an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) was met.
*

@@ -9,0 +9,0 @@ * @group Expectations

import { ExpectationOutcome } from './ExpectationOutcome';
/**
* Indicates that an {@apilink Expectation} was not met.
* Indicates that an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) was not met.
*

@@ -5,0 +5,0 @@ * @group Expectations

@@ -6,3 +6,3 @@ "use strict";

/**
* Indicates that an {@apilink Expectation} was not met.
* Indicates that an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) was not met.
*

@@ -9,0 +9,0 @@ * @group Expectations

import { TinyType } from 'tiny-types';
import type { ExpectationDetails } from './ExpectationDetails';
/**
* An outcome of an {@apilink Expectation},
* which could be either {@apilink ExpectationMet|met} or {@apilink ExpectationNotMet|not met}.
* An outcome of an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/),
* which could be either [met](https://serenity-js.org/api/core/class/ExpectationMet/) or [not met](https://serenity-js.org/api/core/class/ExpectationNotMet/).
*

@@ -7,0 +7,0 @@ * @group Expectations

@@ -6,4 +6,4 @@ "use strict";

/**
* An outcome of an {@apilink Expectation},
* which could be either {@apilink ExpectationMet|met} or {@apilink ExpectationNotMet|not met}.
* An outcome of an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/),
* which could be either [met](https://serenity-js.org/api/core/class/ExpectationMet/) or [not met](https://serenity-js.org/api/core/class/ExpectationNotMet/).
*

@@ -10,0 +10,0 @@ * @group Expectations

@@ -10,4 +10,4 @@ import type { UsesAbilities } from '../abilities';

/**
* Serenity/JS Screenplay Pattern-style wrapper around {@apilink Array}
* and array-like structures - see {@apilink PageElements}.
* Serenity/JS Screenplay Pattern-style wrapper around [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
* and array-like structures - see [`PageElement`](https://serenity-js.org/api/web/class/PageElements/).
*

@@ -37,6 +37,6 @@ * @group Questions

* Serenity/JS Screenplay Pattern-style wrapper around
* a {@apilink ChainableMetaQuestion} representing a collection
* that can be resolved in `Supported_Context_Type` of another {@apilink Question}.
* a [`ChainableMetaQuestion`](https://serenity-js.org/api/core/interface/ChainableMetaQuestion/) representing a collection
* that can be resolved in `Supported_Context_Type` of another [`Question`](https://serenity-js.org/api/core/class/Question/).
*
* For example, {@apilink PageElements.located} returns `MetaList<PageElement>`,
* For example, [`PageElements.located`](https://serenity-js.org/api/web/class/PageElements/#located) returns `MetaList<PageElement>`,
* which allows for the collection of page elements to be resolved in the context

@@ -43,0 +43,0 @@ * of dynamically-provided root element.

@@ -10,4 +10,4 @@ "use strict";

/**
* Serenity/JS Screenplay Pattern-style wrapper around {@apilink Array}
* and array-like structures - see {@apilink PageElements}.
* Serenity/JS Screenplay Pattern-style wrapper around [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
* and array-like structures - see [`PageElement`](https://serenity-js.org/api/web/class/PageElements/).
*

@@ -103,6 +103,6 @@ * @group Questions

* Serenity/JS Screenplay Pattern-style wrapper around
* a {@apilink ChainableMetaQuestion} representing a collection
* that can be resolved in `Supported_Context_Type` of another {@apilink Question}.
* a [`ChainableMetaQuestion`](https://serenity-js.org/api/core/interface/ChainableMetaQuestion/) representing a collection
* that can be resolved in `Supported_Context_Type` of another [`Question`](https://serenity-js.org/api/core/class/Question/).
*
* For example, {@apilink PageElements.located} returns `MetaList<PageElement>`,
* For example, [`PageElements.located`](https://serenity-js.org/api/web/class/PageElements/#located) returns `MetaList<PageElement>`,
* which allows for the collection of page elements to be resolved in the context

@@ -109,0 +109,0 @@ * of dynamically-provided root element.

@@ -30,4 +30,6 @@ import { type Answerable } from '../Answerable';

*
* @param parameter - An {@link Answerable} representing the masked value.
* @returns A {@link QuestionAdapter} representing the masked value.
* @param parameter
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) representing the masked value.
* @returns
* A [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) representing the masked value.
*/

@@ -34,0 +36,0 @@ static valueOf(parameter: Answerable<string>): QuestionAdapter<string>;

@@ -32,4 +32,6 @@ "use strict";

*
* @param parameter - An {@link Answerable} representing the masked value.
* @returns A {@link QuestionAdapter} representing the masked value.
* @param parameter
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) representing the masked value.
* @returns
* A [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) representing the masked value.
*/

@@ -36,0 +38,0 @@ static valueOf(parameter) {

import type { Answerable } from '../Answerable';
import type { Question } from '../Question';
/**
* A meta-question is a {@apilink Question} that can be answered
* in the context of another {@apilink Answerable},
* A meta-question is a [`Question`](https://serenity-js.org/api/core/class/Question/) that can be answered
* in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable),
* typically to transform its value.
*
* For example, the question {@apilink Text.of} can be answered in the context
* of a {@apilink PageElement} to return its text content.
* For example, the question [`Text.of`](https://serenity-js.org/api/web/class/Text/#of) can be answered in the context
* of a [`PageElement`](https://serenity-js.org/api/web/class/PageElement/) to return its text content.
*
* {@apilink MetaQuestion|Meta questions} are typically used when filtering a {@apilink List}.
* [Meta-questions](https://serenity-js.org/api/core/interface/MetaQuestion/) are typically used when filtering a [`List`](https://serenity-js.org/api/core/class/List/).
*
* ## Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*

@@ -20,10 +20,10 @@ * @group Questions

/**
* Answers the given `MetaQuestion` in the context of another {@apilink Answerable}.
* Answers the given `MetaQuestion` in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable).
*
* #### Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*/
of(context: Answerable<Supported_Context_Type>): Returned_Question_Type;
/**
* Human-readable description of this {@apilink MetaQuestion},
* Human-readable description of this [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/),
* typically involving the description of the subject.

@@ -30,0 +30,0 @@ *

@@ -6,8 +6,9 @@ import type { Answerable } from '../Answerable';

/**
* Creates a single-line description of an {@apilink Activity} by transforming
* Creates a single-line description of an [`Activity`](https://serenity-js.org/api/core/class/Activity/) by transforming
* a [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates),
* parameterised with [primitive data types](https://developer.mozilla.org/en-US/docs/Glossary/Primitive),
* [complex data structures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#objects),
* or any other {@apilink Answerable|Answerables}, into a {@link QuestionAdapter|`QuestionAdapter<string>`}
* that can be used with {@apilink Task.where} and {@apilink Interaction.where} methods.
* or any other [answerables](https://serenity-js.org/api/core/#Answerable),
* into a [`QuestionAdapter<string>`](https://serenity-js.org/api/core/#QuestionAdapter)
* that can be used with [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) and [`Interaction.where`](https://serenity-js.org/api/core/class/Interaction/#where) methods.
*

@@ -26,3 +27,4 @@ * ```ts

*
* Use {@apilink DescriptionFormattingOptions} to trim the descriptions of template parameters.
* Use [`DescriptionFormattingOptions`](http://serenity-js.org/api/core/interface/DescriptionFormattingOptions/)
* to trim the descriptions of template parameters.
* By default, the output is displayed in full.

@@ -44,5 +46,5 @@ *

*
* When `the` is parameterised with {@apilink Question|Questions},
* it retrieves their description by calling {@apilink Question.describedBy}
* in the context of the {@apilink Actor} performing the {@apilink Activity}.
* When `the` is parameterised with [questions](https://serenity-js.org/api/core/class/Question/),
* it retrieves their description by calling [`Question.describedBy`](https://serenity-js.org/api/core/class/Question/#describedBy)
* in the context of the [`Actor`](https://serenity-js.org/api/core/class/Actor/) performing the [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*

@@ -66,3 +68,3 @@ * ```ts

*
* If you'd like the question to be described using its formatted value instead of its description, use {@apilink Question.formattedValue}.
* If you'd like the question to be described using its formatted value instead of its description, use [`Question.formattedValue`](https://serenity-js.org/api/core/class/Question/#formattedValue).
*

@@ -90,3 +92,3 @@ * ```ts

* a custom [`toString()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) method,
* or {@link Answerable|Answerables} resolving to such objects, the `toString()` method is called to produce the resulting description.
* or [answerables](https://serenity-js.org/api/core/#Answerable) resolving to such objects, the `toString()` method is called to produce the resulting description.
*

@@ -120,3 +122,3 @@ * ```ts

* When `the` is parameterised with complex objects that don't have a custom `toString()` method,
* or {@link Answerable}s resolving to such objects,
* or [`Answerable`](https://serenity-js.org/api/core/#Answerable)s resolving to such objects,
* the resulting description will contain a JSON-like string representation of the object.

@@ -144,3 +146,3 @@ *

*
* When `the` is parameterised with {@apilink Masked} values,
* When `the` is parameterised with [masked values](https://serenity-js.org/api/core/class/Masked/),
* the resulting description will contain a masked representation of the values.

@@ -162,7 +164,7 @@ *

*
* - {@apilink Answerable}
* - {@apilink Question}
* - {@apilink Question.describedAs}
* - {@apilink QuestionAdapter}
* - {@apilink Masked}
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Question.describedAs`](https://serenity-js.org/api/core/class/Question/#describedAs)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
* - [`Masked`](https://serenity-js.org/api/core/class/Masked/)
*

@@ -210,3 +212,3 @@ * @group Questions

*
* The mechanism presented below relies on {@apilink QuestionAdapter}.
* The mechanism presented below relies on [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter).
*

@@ -226,6 +228,6 @@ * ```ts

*
* - {@apilink Answerable}
* - {@apilink Question}
* - {@apilink Question.describedAs}
* - {@apilink QuestionAdapter}
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Question.describedAs`](https://serenity-js.org/api/core/class/Question/#describedAs)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -232,0 +234,0 @@ * @group Questions

@@ -52,3 +52,3 @@ "use strict";

*
* The mechanism presented below relies on {@apilink QuestionAdapter}.
* The mechanism presented below relies on [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter).
*

@@ -68,6 +68,6 @@ * ```ts

*
* - {@apilink Answerable}
* - {@apilink Question}
* - {@apilink Question.describedAs}
* - {@apilink QuestionAdapter}
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Question.describedAs`](https://serenity-js.org/api/core/class/Question/#describedAs)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -74,0 +74,0 @@ * @group Questions

@@ -6,4 +6,4 @@ /// <reference types="node" />

/**
* A placeholder value signifying that a {@apilink Question}
* has not been answered by an {@apilink Actor} when producing an {@apilink ExpectationOutcome}.
* A placeholder value signifying that a [`Question`](https://serenity-js.org/api/core/class/Question/)
* has not been answered by an [`Actor`](https://serenity-js.org/api/core/class/Actor/) when producing an [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/).
* This happens when Serenity/JS decides that answering a given question

@@ -10,0 +10,0 @@ * won't affect the outcome.

@@ -30,4 +30,4 @@ "use strict";

/**
* A placeholder value signifying that a {@apilink Question}
* has not been answered by an {@apilink Actor} when producing an {@apilink ExpectationOutcome}.
* A placeholder value signifying that a [`Question`](https://serenity-js.org/api/core/class/Question/)
* has not been answered by an [`Actor`](https://serenity-js.org/api/core/class/Actor/) when producing an [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/).
* This happens when Serenity/JS decides that answering a given question

@@ -34,0 +34,0 @@ * won't affect the outcome.

import type { Question } from './Question';
/**
* Describes a recursively resolved plain JavaScript {@apilink WithAnswerableProperties}.
* Describes a recursively resolved plain JavaScript object with [answerable properties](https://serenity-js.org/api/core/#WithAnswerableProperties).
*
* Typically, used in conjunction with {@apilink Question.fromObject}.
* Typically, used in conjunction with [`Question.fromObject`](https://serenity-js.org/api/core/class/Question/#fromObject).
*

@@ -7,0 +7,0 @@ * ## Using `RecursivelyAnswered`

@@ -5,4 +5,4 @@ import type { PerformsActivities } from './activities';

/**
* **Tasks** model **{@apilink Activity|sequences of activities}**
* and help you capture meaningful steps of an {@apilink Actor|actor} workflow
* **Tasks** model **[sequences of activities](https://serenity-js.org/api/core/class/Activity/)**
* and help you capture meaningful steps of an [actor](https://serenity-js.org/api/core/class/Actor/) workflow
* in your domain.

@@ -15,16 +15,16 @@ *

*
* The lowest-level tasks in your abstraction hierarchy should be composed of {@apilink Interaction|interactions}.
* For example, a low-level task to `ProvideUsername` could be composed of an interaction to {@apilink Enter} the value
* into a form field and {@apilink Press} the {@apilink Key.Enter}.
* The lowest-level tasks in your abstraction hierarchy should be composed of [interactions](https://serenity-js.org/api/core/class/Interaction/).
* For example, a low-level task to `ProvideUsername` could be composed of an interaction to [enter](https://serenity-js.org/api/web/class/Enter/) the value
* into a form field and [press](https://serenity-js.org/api/web/class/Press/) the [`Key.Enter`](https://serenity-js.org/api/web/class/Key/#Enter).
*
* Tasks are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, and {@apilink Question|Questions}.
* Tasks are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/), [interactions](https://serenity-js.org/api/core/class/Interaction/), and [questions](https://serenity-js.org/api/core/class/Question/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - [User-Centred Design: How a 50 year old technique became the key to scalable test automation](https://janmolak.com/user-centred-design-how-a-50-year-old-technique-became-the-key-to-scalable-test-automation-66a658a36555)
* - {@apilink Actor|Actors}
* - {@apilink Activity|Activities}
* - {@apilink Interaction|Interactions}
* - [Actors](https://serenity-js.org/api/core/class/Actor/)
* - [Activities](https://serenity-js.org/api/core/class/Activity/)
* - [Interactions](https://serenity-js.org/api/core/class/Interaction/)
*

@@ -47,3 +47,3 @@ * ## Defining a task

*
* Note that calling {@apilink Task.where} method without providing the sequence of {@apilink Activity|activities}
* Note that calling [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) method without providing the sequence of [activities](https://serenity-js.org/api/core/class/Activity/)
* produces a Task that's marked as "pending" in the test report.

@@ -76,3 +76,3 @@ *

*
* The easiest way to implement such task, and any custom Serenity/JS task for this matter, is to use the {@apilink Task.where} method to compose the lower-level activities:
* The easiest way to implement such task, and any custom Serenity/JS task for this matter, is to use the [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) method to compose the lower-level activities:
*

@@ -99,5 +99,5 @@ * ```typescript

*
* Conveniently, [Serenity/JS modules](/handbook/about/architecture) provide low-level activities that
* Conveniently, [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture) provide low-level activities that
* allow actors to interact with the various interfaces of the system under test.
* For example, [Serenity/JS Web module](/api/web) ships with activities such as {@apilink Click} or {@apilink Enter},
* For example, [Serenity/JS Web module](https://serenity-js.org/api/web) ships with activities such as [`Click`](https://serenity-js.org/api/web/class/Click/) or [`Enter`](https://serenity-js.org/api/web/class/Enter/),
* which we can incorporate into our task definitions just like any other activities:

@@ -190,3 +190,3 @@ *

/**
* Instructs the provided {@apilink Actor} to perform this {@apilink Task}.
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform this [`Task`](https://serenity-js.org/api/core/class/Task/).
*

@@ -196,5 +196,5 @@ * @param {PerformsActivities} actor

* #### Learn more
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - {@apilink Activity}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
*/

@@ -201,0 +201,0 @@ abstract performAs(actor: PerformsActivities): Promise<void>;

@@ -7,4 +7,4 @@ "use strict";

/**
* **Tasks** model **{@apilink Activity|sequences of activities}**
* and help you capture meaningful steps of an {@apilink Actor|actor} workflow
* **Tasks** model **[sequences of activities](https://serenity-js.org/api/core/class/Activity/)**
* and help you capture meaningful steps of an [actor](https://serenity-js.org/api/core/class/Actor/) workflow
* in your domain.

@@ -17,16 +17,16 @@ *

*
* The lowest-level tasks in your abstraction hierarchy should be composed of {@apilink Interaction|interactions}.
* For example, a low-level task to `ProvideUsername` could be composed of an interaction to {@apilink Enter} the value
* into a form field and {@apilink Press} the {@apilink Key.Enter}.
* The lowest-level tasks in your abstraction hierarchy should be composed of [interactions](https://serenity-js.org/api/core/class/Interaction/).
* For example, a low-level task to `ProvideUsername` could be composed of an interaction to [enter](https://serenity-js.org/api/web/class/Enter/) the value
* into a form field and [press](https://serenity-js.org/api/web/class/Press/) the [`Key.Enter`](https://serenity-js.org/api/web/class/Key/#Enter).
*
* Tasks are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, and {@apilink Question|Questions}.
* Tasks are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/), [interactions](https://serenity-js.org/api/core/class/Interaction/), and [questions](https://serenity-js.org/api/core/class/Question/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - [User-Centred Design: How a 50 year old technique became the key to scalable test automation](https://janmolak.com/user-centred-design-how-a-50-year-old-technique-became-the-key-to-scalable-test-automation-66a658a36555)
* - {@apilink Actor|Actors}
* - {@apilink Activity|Activities}
* - {@apilink Interaction|Interactions}
* - [Actors](https://serenity-js.org/api/core/class/Actor/)
* - [Activities](https://serenity-js.org/api/core/class/Activity/)
* - [Interactions](https://serenity-js.org/api/core/class/Interaction/)
*

@@ -49,3 +49,3 @@ * ## Defining a task

*
* Note that calling {@apilink Task.where} method without providing the sequence of {@apilink Activity|activities}
* Note that calling [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) method without providing the sequence of [activities](https://serenity-js.org/api/core/class/Activity/)
* produces a Task that's marked as "pending" in the test report.

@@ -78,3 +78,3 @@ *

*
* The easiest way to implement such task, and any custom Serenity/JS task for this matter, is to use the {@apilink Task.where} method to compose the lower-level activities:
* The easiest way to implement such task, and any custom Serenity/JS task for this matter, is to use the [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) method to compose the lower-level activities:
*

@@ -101,5 +101,5 @@ * ```typescript

*
* Conveniently, [Serenity/JS modules](/handbook/about/architecture) provide low-level activities that
* Conveniently, [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture) provide low-level activities that
* allow actors to interact with the various interfaces of the system under test.
* For example, [Serenity/JS Web module](/api/web) ships with activities such as {@apilink Click} or {@apilink Enter},
* For example, [Serenity/JS Web module](https://serenity-js.org/api/web) ships with activities such as [`Click`](https://serenity-js.org/api/web/class/Click/) or [`Enter`](https://serenity-js.org/api/web/class/Enter/),
* which we can incorporate into our task definitions just like any other activities:

@@ -106,0 +106,0 @@ *

@@ -5,6 +5,6 @@ import type { Discardable } from '../../abilities';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to schedule a callback function
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to schedule a callback function
* to be executed with a delay, or until some condition is met.
*
* Used internally by the {@apilink Interaction|interaction} to {@apilink Wait}.
* Used internally by the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Wait`](https://serenity-js.org/api/core/class/Wait/).
*

@@ -11,0 +11,0 @@ * @experimental

@@ -7,6 +7,6 @@ "use strict";

/**
* An {@apilink Ability} that enables an {@apilink Actor} to schedule a callback function
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to schedule a callback function
* to be executed with a delay, or until some condition is met.
*
* Used internally by the {@apilink Interaction|interaction} to {@apilink Wait}.
* Used internally by the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Wait`](https://serenity-js.org/api/core/class/Wait/).
*

@@ -13,0 +13,0 @@ * @experimental

@@ -7,9 +7,9 @@ import type { UsesAbilities } from '../../abilities';

/**
* `Wait` is a synchronisation statement that instructs the {@apilink Actor|actor}
* to wait before proceeding with their next {@apilink Activity|activity},
* either for a set {@apilink Duration|duration}, or until a given {@apilink Expectation|expectation} is met.
* `Wait` is a synchronisation statement that instructs the [actor](https://serenity-js.org/api/core/class/Actor/)
* to wait before proceeding with their next [activity](https://serenity-js.org/api/core/class/Activity/),
* either for a set [duration](https://serenity-js.org/api/core/class/Duration/), or until a given [expectation](https://serenity-js.org/api/core/class/Expectation/) is met.
*
* You can configure the timeout of the interaction to {@apilink Wait.until}:
* - globally, using {@apilink SerenityConfig.interactionTimeout}
* - locally, on a per-interaction basis using {@apilink Wait.upTo}
* You can configure the timeout of the interaction to [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until):
* - globally, using [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
* - locally, on a per-interaction basis using [`Wait.upTo`](https://serenity-js.org/api/core/class/Wait/#upTo)
*

@@ -94,3 +94,4 @@ * :::tip Portable waiting

*
* `Wait.until` makes the {@apilink Actor} keep asking the {@apilink Question},
* `Wait.until` makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* keep asking the [`Question`](https://serenity-js.org/api/core/class/Question/),
* in this case `Text.of(App.status)`, until the answer meets

@@ -122,5 +123,5 @@ * the expectation, or a timeout expires (default: 5s).

* ## Learn more
* - {@apilink SerenityConfig.interactionTimeout}
* - {@apilink Duration}
* - {@apilink Expectation}
* - [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
* - [`Expectation`](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -131,3 +132,3 @@ * @group Time

/**
* Minimum timeout that can be used with {@apilink Wait.until},
* Minimum timeout that can be used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until),
* defaults to 250 milliseconds,

@@ -137,6 +138,6 @@ */

/**
* The amount of time {@apilink Wait.until} should wait between condition checks,
* The amount of time [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until) should wait between condition checks,
* defaults to 500ms.
*
* Use {@apilink WaitUntil.pollingEvery} to override it for a given interaction.
* Use [`WaitUntil.pollingEvery`](https://serenity-js.org/api/core/class/WaitUntil/#pollingEvery) to override it for a given interaction.
*

@@ -147,15 +148,15 @@ * @type {Duration}

/**
* Minimum polling interval of 50ms between condition checks, used with {@apilink Wait.until}.
* Minimum polling interval of 50ms between condition checks, used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until).
*/
static readonly minimumPollingInterval: Duration;
/**
* Instantiates a version of this {@apilink Interaction}
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* configured to wait for a set duration.
*
* @param duration
* A set duration the {@apilink Actor} should wait for before proceeding.
* A set duration the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should wait for before proceeding.
*/
static for(duration: Answerable<Duration>): Interaction;
/**
* Instantiates a version of this {@apilink Interaction}
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* configured to wait until the answer to the question `actual` meets the `expectation`,

@@ -165,3 +166,3 @@ * or the `timeout` expires.

* @param timeout
* Custom timeout to override {@apilink SerenityConfig.interactionTimeout}
* Custom timeout to override [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
*/

@@ -172,4 +173,4 @@ static upTo(timeout: Duration): {

/**
* Instantiates a version of this {@apilink Interaction} configured to
* poll every {@apilink Wait.defaultPollingInterval} for the result of the provided
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) configured to
* poll every [`Wait.defaultPollingInterval`](https://serenity-js.org/api/core/class/Wait/#defaultPollingInterval) for the result of the provided
* question (`actual`) until it meets the `expectation`,

@@ -179,7 +180,7 @@ * or the timeout expires.

* @param actual
* An {@apilink Answerable} that the {@apilink Actor} will keep answering
* until the answer meets the {@apilink Expectation} provided, or the timeout expires.
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) that the [`Actor`](https://serenity-js.org/api/core/class/Actor/) will keep answering
* until the answer meets the [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) provided, or the timeout expires.
*
* @param expectation
* An {@apilink Expectation} to be met before proceeding
* An [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) to be met before proceeding
*/

@@ -189,10 +190,11 @@ static until<Actual>(actual: Answerable<Actual>, expectation: Expectation<Actual>): WaitUntil<Actual>;

/**
* Synchronisation statement that instructs the {@apilink Actor} to wait before proceeding until a given {@apilink Expectation} is met.
* Synchronisation statement that instructs the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to wait before proceeding until a given [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) is met.
*
* :::tip
* To instantiate {@apilink Interaction|interaction} to {@apilink WaitUntil}, use the factory method {@apilink Wait.until}.
* To instantiate the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`WaitUntil`](https://serenity-js.org/api/core/class/WaitUntil/),
* use the factory method [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until).
* :::
*
* ## Learn more
* * {@apilink Wait.until}
* * [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
*

@@ -208,3 +210,3 @@ * @group Time

/**
* Configure how frequently the {@apilink Actor} should check if the answer meets the expectation.
* Configure how frequently the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should check if the answer meets the expectation.
*

@@ -211,0 +213,0 @@ * Note that the polling interval defines the delay between subsequent attempts

@@ -13,9 +13,9 @@ "use strict";

/**
* `Wait` is a synchronisation statement that instructs the {@apilink Actor|actor}
* to wait before proceeding with their next {@apilink Activity|activity},
* either for a set {@apilink Duration|duration}, or until a given {@apilink Expectation|expectation} is met.
* `Wait` is a synchronisation statement that instructs the [actor](https://serenity-js.org/api/core/class/Actor/)
* to wait before proceeding with their next [activity](https://serenity-js.org/api/core/class/Activity/),
* either for a set [duration](https://serenity-js.org/api/core/class/Duration/), or until a given [expectation](https://serenity-js.org/api/core/class/Expectation/) is met.
*
* You can configure the timeout of the interaction to {@apilink Wait.until}:
* - globally, using {@apilink SerenityConfig.interactionTimeout}
* - locally, on a per-interaction basis using {@apilink Wait.upTo}
* You can configure the timeout of the interaction to [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until):
* - globally, using [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
* - locally, on a per-interaction basis using [`Wait.upTo`](https://serenity-js.org/api/core/class/Wait/#upTo)
*

@@ -100,3 +100,4 @@ * :::tip Portable waiting

*
* `Wait.until` makes the {@apilink Actor} keep asking the {@apilink Question},
* `Wait.until` makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* keep asking the [`Question`](https://serenity-js.org/api/core/class/Question/),
* in this case `Text.of(App.status)`, until the answer meets

@@ -128,5 +129,5 @@ * the expectation, or a timeout expires (default: 5s).

* ## Learn more
* - {@apilink SerenityConfig.interactionTimeout}
* - {@apilink Duration}
* - {@apilink Expectation}
* - [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
* - [`Expectation`](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -137,3 +138,3 @@ * @group Time

/**
* Minimum timeout that can be used with {@apilink Wait.until},
* Minimum timeout that can be used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until),
* defaults to 250 milliseconds,

@@ -143,6 +144,6 @@ */

/**
* The amount of time {@apilink Wait.until} should wait between condition checks,
* The amount of time [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until) should wait between condition checks,
* defaults to 500ms.
*
* Use {@apilink WaitUntil.pollingEvery} to override it for a given interaction.
* Use [`WaitUntil.pollingEvery`](https://serenity-js.org/api/core/class/WaitUntil/#pollingEvery) to override it for a given interaction.
*

@@ -153,11 +154,11 @@ * @type {Duration}

/**
* Minimum polling interval of 50ms between condition checks, used with {@apilink Wait.until}.
* Minimum polling interval of 50ms between condition checks, used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until).
*/
static minimumPollingInterval = models_1.Duration.ofMilliseconds(50);
/**
* Instantiates a version of this {@apilink Interaction}
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* configured to wait for a set duration.
*
* @param duration
* A set duration the {@apilink Actor} should wait for before proceeding.
* A set duration the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should wait for before proceeding.
*/

@@ -168,3 +169,3 @@ static for(duration) {

/**
* Instantiates a version of this {@apilink Interaction}
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* configured to wait until the answer to the question `actual` meets the `expectation`,

@@ -174,3 +175,3 @@ * or the `timeout` expires.

* @param timeout
* Custom timeout to override {@apilink SerenityConfig.interactionTimeout}
* Custom timeout to override [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
*/

@@ -183,4 +184,4 @@ static upTo(timeout) {

/**
* Instantiates a version of this {@apilink Interaction} configured to
* poll every {@apilink Wait.defaultPollingInterval} for the result of the provided
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) configured to
* poll every [`Wait.defaultPollingInterval`](https://serenity-js.org/api/core/class/Wait/#defaultPollingInterval) for the result of the provided
* question (`actual`) until it meets the `expectation`,

@@ -190,7 +191,7 @@ * or the timeout expires.

* @param actual
* An {@apilink Answerable} that the {@apilink Actor} will keep answering
* until the answer meets the {@apilink Expectation} provided, or the timeout expires.
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) that the [`Actor`](https://serenity-js.org/api/core/class/Actor/) will keep answering
* until the answer meets the [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) provided, or the timeout expires.
*
* @param expectation
* An {@apilink Expectation} to be met before proceeding
* An [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) to be met before proceeding
*/

@@ -217,10 +218,11 @@ static until(actual, expectation) {

/**
* Synchronisation statement that instructs the {@apilink Actor} to wait before proceeding until a given {@apilink Expectation} is met.
* Synchronisation statement that instructs the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to wait before proceeding until a given [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) is met.
*
* :::tip
* To instantiate {@apilink Interaction|interaction} to {@apilink WaitUntil}, use the factory method {@apilink Wait.until}.
* To instantiate the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`WaitUntil`](https://serenity-js.org/api/core/class/WaitUntil/),
* use the factory method [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until).
* :::
*
* ## Learn more
* * {@apilink Wait.until}
* * [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
*

@@ -247,3 +249,3 @@ * @group Time

/**
* Configure how frequently the {@apilink Actor} should check if the answer meets the expectation.
* Configure how frequently the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should check if the answer meets the expectation.
*

@@ -250,0 +252,0 @@ * Note that the polling interval defines the delay between subsequent attempts

import { Duration } from './Duration';
import { Timestamp } from './Timestamp';
/**
* A {@apilink Clock} tells the time. This abstraction allows Serenity/JS to have a single place
* A [`Clock`](https://serenity-js.org/api/core/class/Clock/) tells the time. This abstraction allows Serenity/JS to have a single place
* in the framework responsible for telling the time, and one that can be easily mocked for internal testing.

@@ -12,4 +12,4 @@ *

* ## Learn more
* - {@apilink Timestamp}
* - {@apilink Duration}
* - [`Timestamp`](https://serenity-js.org/api/core/class/Timestamp/)
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
*

@@ -25,3 +25,3 @@ * @group Time

* Sets the clock ahead to force early resolution of promises
* returned by {@apilink Clock.waitFor};
* returned by [`Clock.waitFor`](https://serenity-js.org/api/core/class/Clock/#waitFor).
*

@@ -28,0 +28,0 @@ * Useful for test purposes to avoid unnecessary delays.

@@ -8,3 +8,3 @@ "use strict";

/**
* A {@apilink Clock} tells the time. This abstraction allows Serenity/JS to have a single place
* A [`Clock`](https://serenity-js.org/api/core/class/Clock/) tells the time. This abstraction allows Serenity/JS to have a single place
* in the framework responsible for telling the time, and one that can be easily mocked for internal testing.

@@ -17,4 +17,4 @@ *

* ## Learn more
* - {@apilink Timestamp}
* - {@apilink Duration}
* - [`Timestamp`](https://serenity-js.org/api/core/class/Timestamp/)
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
*

@@ -32,3 +32,3 @@ * @group Time

* Sets the clock ahead to force early resolution of promises
* returned by {@apilink Clock.waitFor};
* returned by [`Clock.waitFor`](https://serenity-js.org/api/core/class/Clock/#waitFor).
*

@@ -35,0 +35,0 @@ * Useful for test purposes to avoid unnecessary delays.

import type { JSONObject } from 'tiny-types';
import { TinyType } from 'tiny-types';
/**
* Represents a duration in milliseconds between two {@apilink Timestamp|timestamps}.
* Represents a duration in milliseconds between two [timestamps](https://serenity-js.org/api/core/class/Timestamp/).
*

@@ -6,0 +6,0 @@ * @group Time

@@ -6,3 +6,3 @@ "use strict";

/**
* Represents a duration in milliseconds between two {@apilink Timestamp|timestamps}.
* Represents a duration in milliseconds between two [timestamps](https://serenity-js.org/api/core/class/Timestamp/).
*

@@ -9,0 +9,0 @@ * @group Time

@@ -8,6 +8,6 @@ /// <reference types="node" />

*
* `Timestamp` makes it easier for you to work with information related to time, like {@apilink DomainEvent|domain events}.
* `Timestamp` makes it easier for you to work with information related to time, like [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/).
*
* ## Learn more
* - {@apilink Duration}
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
* - [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)

@@ -14,0 +14,0 @@ *

@@ -10,6 +10,6 @@ "use strict";

*
* `Timestamp` makes it easier for you to work with information related to time, like {@apilink DomainEvent|domain events}.
* `Timestamp` makes it easier for you to work with information related to time, like [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/).
*
* ## Learn more
* - {@apilink Duration}
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
* - [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)

@@ -16,0 +16,0 @@ *

import type { Timestamp } from './models';
/**
* Describes an {@apilink Actor} or a supporting class capable of telling
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) or a supporting class capable of telling
* the current wall clock time.
*
* ## Learn more
* - {@apilink Actor}
* - {@apilink Serenity}
* - {@apilink Stage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Serenity`](https://serenity-js.org/api/core/class/Serenity/)
* - [`Stage`](https://serenity-js.org/api/core/class/Stage/)
*

@@ -11,0 +11,0 @@ * @group Time

import type { Answerable } from './Answerable';
import type { Question } from './Question';
/**
* Describes a plain JavaScript object with {@apilink Answerable} properties.
* Typically, used in conjunction with {@apilink RecursivelyAnswered} and {@apilink Question.fromObject}.
* Describes a plain JavaScript object with [`Answerable`](https://serenity-js.org/api/core/#Answerable) properties.
* Typically, used in conjunction with [`RecursivelyAnswered`](https://serenity-js.org/api/core/#RecursivelyAnswered) and [`Question.fromObject`](https://serenity-js.org/api/core/class/Question/#fromObject).
*

@@ -7,0 +7,0 @@ * ```ts

@@ -37,10 +37,10 @@ import type { SerenityConfig } from './config';

/**
* Re-configures Serenity/JS with a new {@apilink Cast} of {@apilink Actor|actors}
* you want to use in any subsequent calls to {@apilink actorCalled}.
* Re-configures Serenity/JS with a new [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/)
* you want to use in any subsequent calls to [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* For your convenience, use {@apilink engage} function instead,
* which provides an alternative to calling {@apilink Actor.whoCan} directly in your tests
* For your convenience, use [`engage`](https://serenity-js.org/api/core/function/engage/) function instead,
* which provides an alternative to calling [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) directly in your tests
* and is typically invoked in a "before all" or "before each" hook of your test runner of choice.
*
* If your implementation of the {@apilink Cast} interface is stateless,
* If your implementation of the [cast](https://serenity-js.org/api/core/class/Cast/) interface is stateless,
* you can invoke this function just once before your entire test suite is executed, see

@@ -51,3 +51,3 @@ * - [`beforeAll`](https://jasmine.github.io/api/3.6/global.html#beforeAll) in Jasmine,

*
* However, if your {@apilink Cast} holds state that you want to reset before each scenario,
* However, if your [cast](https://serenity-js.org/api/core/class/Cast/) holds state that you want to reset before each scenario,
* it's better to invoke `engage` before each test using:

@@ -99,5 +99,5 @@ * - [`beforeEach`](https://jasmine.github.io/api/3.6/global.html#beforeEach) in Jasmine

* ## Learn more
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink engage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*

@@ -108,6 +108,6 @@ * @param actors

/**
* Instantiates or retrieves an {@apilink Actor}
* Instantiates or retrieves an [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* called `name` if one has already been instantiated.
*
* For your convenience, use {@apilink actorCalled} function instead.
* For your convenience, use [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) function instead.
*

@@ -158,6 +158,6 @@ * ## Usage with Mocha

*
* - {@apilink engage}
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink actorCalled}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
*

@@ -170,7 +170,7 @@ * @param name

* Retrieves an actor who was last instantiated or retrieved
* using {@apilink Serenity.theActorCalled}.
* using [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled).
*
* This function is particularly useful when automating Cucumber scenarios.
*
* For your convenience, use {@apilink actorInTheSpotlight} function instead.
* For your convenience, use [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/) function instead.
*

@@ -196,7 +196,7 @@ * ## Usage with Cucumber

*
* - {@apilink engage}
* - {@apilink actorCalled}
* - {@apilink actorInTheSpotlight}
* - {@apilink Actor}
* - {@apilink Cast}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* - [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*/

@@ -203,0 +203,0 @@ theActorInTheSpotlight(): Actor;

@@ -79,10 +79,10 @@ "use strict";

/**
* Re-configures Serenity/JS with a new {@apilink Cast} of {@apilink Actor|actors}
* you want to use in any subsequent calls to {@apilink actorCalled}.
* Re-configures Serenity/JS with a new [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/)
* you want to use in any subsequent calls to [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* For your convenience, use {@apilink engage} function instead,
* which provides an alternative to calling {@apilink Actor.whoCan} directly in your tests
* For your convenience, use [`engage`](https://serenity-js.org/api/core/function/engage/) function instead,
* which provides an alternative to calling [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) directly in your tests
* and is typically invoked in a "before all" or "before each" hook of your test runner of choice.
*
* If your implementation of the {@apilink Cast} interface is stateless,
* If your implementation of the [cast](https://serenity-js.org/api/core/class/Cast/) interface is stateless,
* you can invoke this function just once before your entire test suite is executed, see

@@ -93,3 +93,3 @@ * - [`beforeAll`](https://jasmine.github.io/api/3.6/global.html#beforeAll) in Jasmine,

*
* However, if your {@apilink Cast} holds state that you want to reset before each scenario,
* However, if your [cast](https://serenity-js.org/api/core/class/Cast/) holds state that you want to reset before each scenario,
* it's better to invoke `engage` before each test using:

@@ -141,5 +141,5 @@ * - [`beforeEach`](https://jasmine.github.io/api/3.6/global.html#beforeEach) in Jasmine

* ## Learn more
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink engage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*

@@ -152,6 +152,6 @@ * @param actors

/**
* Instantiates or retrieves an {@apilink Actor}
* Instantiates or retrieves an [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* called `name` if one has already been instantiated.
*
* For your convenience, use {@apilink actorCalled} function instead.
* For your convenience, use [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) function instead.
*

@@ -202,6 +202,6 @@ * ## Usage with Mocha

*
* - {@apilink engage}
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink actorCalled}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
*

@@ -216,7 +216,7 @@ * @param name

* Retrieves an actor who was last instantiated or retrieved
* using {@apilink Serenity.theActorCalled}.
* using [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled).
*
* This function is particularly useful when automating Cucumber scenarios.
*
* For your convenience, use {@apilink actorInTheSpotlight} function instead.
* For your convenience, use [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/) function instead.
*

@@ -242,7 +242,7 @@ * ## Usage with Cucumber

*
* - {@apilink engage}
* - {@apilink actorCalled}
* - {@apilink actorInTheSpotlight}
* - {@apilink Actor}
* - {@apilink Cast}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* - [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*/

@@ -249,0 +249,0 @@ theActorInTheSpotlight() {

import type { Actor } from '../screenplay';
/**
* Serenity/JS uses the concept of a _**cast of actors**_ to centralise the process of configuring the {@apilink Actor|actors} and assigning their {@apilink Ability|abilities}.
* Serenity/JS uses the concept of a _**cast of actors**_ to centralise the process of configuring the [actors](https://serenity-js.org/api/core/class/Actor/) and assigning their [abilities](https://serenity-js.org/api/core/class/Ability/).
*
* When you invoke {@apilink actorCalled} for the first time in a test scenario,
* Serenity/JS {@apilink Actor|instantiates a new actor}
* and passes it through the {@apilink Cast.prepare} method.
* When you invoke [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) for the first time in a test scenario,
* Serenity/JS [instantiates a new actor](https://serenity-js.org/api/core/class/Actor/)
* and passes it through the [`Cast.prepare`](https://serenity-js.org/api/core/class/Cast/#prepare) method.
* Specifying a **custom cast** gives you an opportunity to configure the actor with the abilities

@@ -20,3 +20,3 @@ * they need before it's returned to the caller,

* When working with relatively **simple scenarios** where all the actors should always receive the same set of abilities,
* you can {@apilink configure} Serenity/JS to use a generic {@apilink Cast.where}:
* you can [`engage`](https://serenity-js.org/api/core/function/engage/) Serenity/JS to use a generic [`Cast.where`](https://serenity-js.org/api/core/class/Cast/#where):
*

@@ -35,24 +35,24 @@ * ```typescript

*
* If you're using Serenity/JS with one of the [supported test runners](/handbook/test-runners/),
* If you're using Serenity/JS with one of the [supported test runners](https://serenity-js.org/handbook/test-runners/),
* you might prefer to use your test runner's native configuration mechanism
* instead of invoking {@apilink configure} explicitly.
* instead of invoking [`engage`](https://serenity-js.org/api/core/function/engage/) explicitly.
*
* :::tip configure vs engage
* Calling {@apilink configure} resets the entire Serenity/JS configuration
* Calling [`configure`](https://serenity-js.org/api/core/function/configure/) resets the entire Serenity/JS configuration
* and should be done exactly once in your entire test suite.
* If you want to retain the configuration but reset the cast, use {@apilink engage} instead.
* If you want to retain the configuration but reset the cast, use [`engage`](https://serenity-js.org/api/core/function/engage/) instead.
* :::
*
* Learn more about configuring Serenity/JS with:
* - [Cucumber.js](/handbook/test-runners/cucumber)
* - [Jasmine](/handbook/test-runners/jasmine)
* - [Mocha](/handbook/test-runners/mocha)
* - [Playwright Test](/handbook/test-runners/playwright-test)
* - [Protractor](/handbook/test-runners/protractor)
* - [WebdriverIO](/handbook/test-runners/webdriverio)
* - [Cucumber.js](https://serenity-js.org/handbook/test-runners/cucumber)
* - [Jasmine](https://serenity-js.org/handbook/test-runners/jasmine)
* - [Mocha](https://serenity-js.org/handbook/test-runners/mocha)
* - [Playwright Test](https://serenity-js.org/handbook/test-runners/playwright-test)
* - [Protractor](https://serenity-js.org/handbook/test-runners/protractor)
* - [WebdriverIO](https://serenity-js.org/handbook/test-runners/webdriverio)
*
* ## Engaging a cast of actors for the specific scenario
*
* If you want to retain Serenity/JS configuration, but set a different {@apilink Cast}
* for the given test scenario you should use {@apilink engage} instead of {@apilink configure}.
* If you want to retain Serenity/JS configuration, but set a different [cast](https://serenity-js.org/api/core/class/Cast/)
* for the given test scenario you should use [`engage`](https://serenity-js.org/api/core/function/engage/) instead of [`configure`](https://serenity-js.org/api/core/function/configure/).
*

@@ -81,6 +81,6 @@ * This approach is useful for example when your entire test suite is dedicated to interacting with the system

* In **complex scenarios** that involve multiple **actors with different abilities**,
* you should create a custom implementation of the {@apilink Cast}.
* you should create a custom implementation of the [cast](https://serenity-js.org/api/core/class/Cast/).
*
* Examples of such scenarios include those where actors use separate browser instances, interact with different REST APIs,
* or start with different data in their {@apilink Notepad|notepads}.
* or start with different data in their [notepads](https://serenity-js.org/api/core/class/Notepad/).
*

@@ -161,3 +161,3 @@ * ### Defining a custom cast of actors interacting with a Web UI

/**
* Configures an {@apilink Actor} instantiated when {@apilink Stage.actor} is invoked.
* Configures an [`Actor`](https://serenity-js.org/api/core/class/Actor/) instantiated when [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor) is invoked.
*

@@ -167,3 +167,3 @@ * @param actor

* #### Learn more
* - {@apilink engage}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*/

@@ -170,0 +170,0 @@ abstract prepare(actor: Actor): Actor;

@@ -5,7 +5,7 @@ "use strict";

/**
* Serenity/JS uses the concept of a _**cast of actors**_ to centralise the process of configuring the {@apilink Actor|actors} and assigning their {@apilink Ability|abilities}.
* Serenity/JS uses the concept of a _**cast of actors**_ to centralise the process of configuring the [actors](https://serenity-js.org/api/core/class/Actor/) and assigning their [abilities](https://serenity-js.org/api/core/class/Ability/).
*
* When you invoke {@apilink actorCalled} for the first time in a test scenario,
* Serenity/JS {@apilink Actor|instantiates a new actor}
* and passes it through the {@apilink Cast.prepare} method.
* When you invoke [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) for the first time in a test scenario,
* Serenity/JS [instantiates a new actor](https://serenity-js.org/api/core/class/Actor/)
* and passes it through the [`Cast.prepare`](https://serenity-js.org/api/core/class/Cast/#prepare) method.
* Specifying a **custom cast** gives you an opportunity to configure the actor with the abilities

@@ -23,3 +23,3 @@ * they need before it's returned to the caller,

* When working with relatively **simple scenarios** where all the actors should always receive the same set of abilities,
* you can {@apilink configure} Serenity/JS to use a generic {@apilink Cast.where}:
* you can [`engage`](https://serenity-js.org/api/core/function/engage/) Serenity/JS to use a generic [`Cast.where`](https://serenity-js.org/api/core/class/Cast/#where):
*

@@ -38,24 +38,24 @@ * ```typescript

*
* If you're using Serenity/JS with one of the [supported test runners](/handbook/test-runners/),
* If you're using Serenity/JS with one of the [supported test runners](https://serenity-js.org/handbook/test-runners/),
* you might prefer to use your test runner's native configuration mechanism
* instead of invoking {@apilink configure} explicitly.
* instead of invoking [`engage`](https://serenity-js.org/api/core/function/engage/) explicitly.
*
* :::tip configure vs engage
* Calling {@apilink configure} resets the entire Serenity/JS configuration
* Calling [`configure`](https://serenity-js.org/api/core/function/configure/) resets the entire Serenity/JS configuration
* and should be done exactly once in your entire test suite.
* If you want to retain the configuration but reset the cast, use {@apilink engage} instead.
* If you want to retain the configuration but reset the cast, use [`engage`](https://serenity-js.org/api/core/function/engage/) instead.
* :::
*
* Learn more about configuring Serenity/JS with:
* - [Cucumber.js](/handbook/test-runners/cucumber)
* - [Jasmine](/handbook/test-runners/jasmine)
* - [Mocha](/handbook/test-runners/mocha)
* - [Playwright Test](/handbook/test-runners/playwright-test)
* - [Protractor](/handbook/test-runners/protractor)
* - [WebdriverIO](/handbook/test-runners/webdriverio)
* - [Cucumber.js](https://serenity-js.org/handbook/test-runners/cucumber)
* - [Jasmine](https://serenity-js.org/handbook/test-runners/jasmine)
* - [Mocha](https://serenity-js.org/handbook/test-runners/mocha)
* - [Playwright Test](https://serenity-js.org/handbook/test-runners/playwright-test)
* - [Protractor](https://serenity-js.org/handbook/test-runners/protractor)
* - [WebdriverIO](https://serenity-js.org/handbook/test-runners/webdriverio)
*
* ## Engaging a cast of actors for the specific scenario
*
* If you want to retain Serenity/JS configuration, but set a different {@apilink Cast}
* for the given test scenario you should use {@apilink engage} instead of {@apilink configure}.
* If you want to retain Serenity/JS configuration, but set a different [cast](https://serenity-js.org/api/core/class/Cast/)
* for the given test scenario you should use [`engage`](https://serenity-js.org/api/core/function/engage/) instead of [`configure`](https://serenity-js.org/api/core/function/configure/).
*

@@ -84,6 +84,6 @@ * This approach is useful for example when your entire test suite is dedicated to interacting with the system

* In **complex scenarios** that involve multiple **actors with different abilities**,
* you should create a custom implementation of the {@apilink Cast}.
* you should create a custom implementation of the [cast](https://serenity-js.org/api/core/class/Cast/).
*
* Examples of such scenarios include those where actors use separate browser instances, interact with different REST APIs,
* or start with different data in their {@apilink Notepad|notepads}.
* or start with different data in their [notepads](https://serenity-js.org/api/core/class/Notepad/).
*

@@ -90,0 +90,0 @@ * ### Defining a custom cast of actors interacting with a Web UI

@@ -6,3 +6,3 @@ import type { DomainEvent } from '../../../events';

/**
* Stores any {@apilink Artifact|artifacts} emitted via {@apilink ArtifactGenerated} events on the {@apilink FileSystem}.
* Stores any artifacts emitted via [`ArtifactGenerated`](https://serenity-js.org/api/core-events/class/ArtifactGenerated/) events on the file system.
*

@@ -108,3 +108,3 @@ * ## Registering Artifact Archiver programmatically

* @param {Stage} [stage]
* The stage this {@apilink StageCrewMember} should be assigned to
* The stage this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) should be assigned to
*/

@@ -114,5 +114,5 @@ constructor(fileSystem: FileSystem, stage?: Stage);

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink StageManager}.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/).
*
* @see {@apilink StageCrewMember}
* @see [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*

@@ -119,0 +119,0 @@ * @listens {ArtifactGenerated}

@@ -10,3 +10,3 @@ "use strict";

/**
* Stores any {@apilink Artifact|artifacts} emitted via {@apilink ArtifactGenerated} events on the {@apilink FileSystem}.
* Stores any artifacts emitted via [`ArtifactGenerated`](https://serenity-js.org/api/core-events/class/ArtifactGenerated/) events on the file system.
*

@@ -117,3 +117,3 @@ * ## Registering Artifact Archiver programmatically

* @param {Stage} [stage]
* The stage this {@apilink StageCrewMember} should be assigned to
* The stage this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) should be assigned to
*/

@@ -129,5 +129,5 @@ constructor(fileSystem, stage) {

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink StageManager}.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/).
*
* @see {@apilink StageCrewMember}
* @see [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*

@@ -134,0 +134,0 @@ * @listens {ArtifactGenerated}

@@ -7,3 +7,3 @@ /// <reference types="node" />

/**
* Serialises all the {@apilink DomainEvent} objects it receives and streams
* Serialises all the [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects it receives and streams
* them as [ndjson](http://ndjson.org/) to the output stream or file.

@@ -103,3 +103,3 @@ *

/**
* Instantiates a `StreamReporter` outputting a stream of {@apilink DomainEvent|domain events}
* Instantiates a `StreamReporter` outputting a stream of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* to an `outputFile` at the given location.

@@ -118,17 +118,17 @@ *

* @param {Stage} [stage]
* The stage this {@apilink StageCrewMember} should be assigned to
* The stage this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) should be assigned to
*/
constructor(output?: Writable, stage?: Stage);
/**
* Creates a new instance of this {@apilink StageCrewMember} and assigns it to a given {@apilink Stage}.
* Creates a new instance of this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) and assigns it to a given [`Stage`](https://serenity-js.org/api/core/class/Stage/).
*
* @param stage
* An instance of a {@apilink Stage} this {@apilink StageCrewMember} will be assigned to
* An instance of a [`Stage`](https://serenity-js.org/api/core/class/Stage/) this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) will be assigned to
*
* @returns {StageCrewMember}
* A new instance of this {@apilink StageCrewMember}
* A new instance of this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*/
assignedTo(stage: Stage): StageCrewMember;
/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink StageManager}.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/).
*

@@ -135,0 +135,0 @@ * @listens {DomainEvent}

@@ -7,3 +7,3 @@ "use strict";

/**
* Serialises all the {@apilink DomainEvent} objects it receives and streams
* Serialises all the [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects it receives and streams
* them as [ndjson](http://ndjson.org/) to the output stream or file.

@@ -103,3 +103,3 @@ *

/**
* Instantiates a `StreamReporter` outputting a stream of {@apilink DomainEvent|domain events}
* Instantiates a `StreamReporter` outputting a stream of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* to an `outputFile` at the given location.

@@ -120,3 +120,3 @@ *

* @param {Stage} [stage]
* The stage this {@apilink StageCrewMember} should be assigned to
* The stage this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) should be assigned to
*/

@@ -128,9 +128,9 @@ constructor(output = process.stdout, stage) {

/**
* Creates a new instance of this {@apilink StageCrewMember} and assigns it to a given {@apilink Stage}.
* Creates a new instance of this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) and assigns it to a given [`Stage`](https://serenity-js.org/api/core/class/Stage/).
*
* @param stage
* An instance of a {@apilink Stage} this {@apilink StageCrewMember} will be assigned to
* An instance of a [`Stage`](https://serenity-js.org/api/core/class/Stage/) this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) will be assigned to
*
* @returns {StageCrewMember}
* A new instance of this {@apilink StageCrewMember}
* A new instance of this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*/

@@ -141,3 +141,3 @@ assignedTo(stage) {

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink StageManager}.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/).
*

@@ -144,0 +144,0 @@ * @listens {DomainEvent}

import type { Actor } from '../screenplay';
import type { Cast } from './Cast';
/**
* Produces no-op actors with no special {@apilink Ability}
* Produces no-op actors with no special [`Ability`](https://serenity-js.org/api/core/class/Ability/)
*/

@@ -6,0 +6,0 @@ export declare class Extras implements Cast {

@@ -5,3 +5,3 @@ "use strict";

/**
* Produces no-op actors with no special {@apilink Ability}
* Produces no-op actors with no special [`Ability`](https://serenity-js.org/api/core/class/Ability/)
*/

@@ -8,0 +8,0 @@ class Extras {

import type { DomainEvent } from '../events';
/**
* A {@apilink StageCrewMember} that can listen and react to {@apilink DomainEvent|DomainEvents}
* A [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) that can listen and react to [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
*
* ## Learn more
*
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink configure}
* - {@apilink SerenityConfig.crew}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
*

@@ -16,4 +16,4 @@ * @group Stage

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink Stage}
* that this {@apilink StageCrewMember} is assigned to.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`Stage`](https://serenity-js.org/api/core/class/Stage/)
* that this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) is assigned to.
*

@@ -20,0 +20,0 @@ * @param event

@@ -11,13 +11,13 @@ import type { ErrorFactory, ErrorOptions, RuntimeError } from '../errors';

/**
* Stage is the place where {@apilink Actor|actors} perform.
* Stage is the place where [actors](https://serenity-js.org/api/core/class/Actor/) perform.
*
* In more technical terms, the Stage is the main event bus propagating {@apilink DomainEvent|DomainEvents}
* to {@apilink Actor|Actors} it instantiates and {@apilink StageCrewMember|StageCrewMembers} that have been registered with it.
* In more technical terms, the Stage is the main event bus propagating [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* to [actors](https://serenity-js.org/api/core/class/Actor/) it instantiates and [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/) that have been registered with it.
*
* It is unlikely that you'll ever need to interact with the `Stage` directly in your tests. Instead, you'll use functions like
* {@apilink actorCalled} and {@apilink actorInTheSpotlight}.
* [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) and [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/).
*
* ## Learn more
* - {@apilink configure}
* - {@apilink engage}
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*

@@ -45,3 +45,3 @@ * @group Stage

/**
* The most recent actor referenced via the {@apilink actor} method
* The most recent actor referenced via the [`Actor`](https://serenity-js.org/api/core/class/Actor/) method
*/

@@ -60,3 +60,3 @@ private actorInTheSpotlight;

/**
* An alias for {@apilink Stage.actor}
* An alias for [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor)
*

@@ -67,3 +67,3 @@ * @param name

/**
* Instantiates a new {@apilink Actor} or fetches an existing one
* Instantiates a new [`Actor`](https://serenity-js.org/api/core/class/Actor/) or fetches an existing one
* identified by their name if they've already been instantiated.

@@ -76,16 +76,16 @@ *

/**
* Returns the last {@apilink Actor} instantiated via {@apilink Stage.actor}.
* Returns the last [`Actor`](https://serenity-js.org/api/core/class/Actor/) instantiated via [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor).
* Useful when you don't can't or choose not to reference the actor by their name.
*
* @throws {LogicError}
* If no {@apilink Actor} has been activated yet
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If no [`Actor`](https://serenity-js.org/api/core/class/Actor/) has been activated yet
*/
theActorInTheSpotlight(): Actor;
/**
* Returns `true` if there is an {@apilink Actor} in the spotlight, `false` otherwise.
* Returns `true` if there is an [`Actor`](https://serenity-js.org/api/core/class/Actor/) in the spotlight, `false` otherwise.
*/
theShowHasStarted(): boolean;
/**
* Configures the Stage to prepare {@apilink Actor|Actors}
* instantiated via {@apilink Stage.actor} using the provided {@apilink Cast}.
* Configures the Stage to prepare [actors](https://serenity-js.org/api/core/class/Actor/)
* instantiated via [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor) using the provided [cast](https://serenity-js.org/api/core/class/Cast/).
*

@@ -96,4 +96,4 @@ * @param actors

/**
* Assigns listeners to be notified of {@apilink DomainEvent|DomainEvents}
* emitted via {@apilink Stage.announce}.s
* Assigns listeners to be notified of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* emitted via [`Stage.announce`](https://serenity-js.org/api/core/class/Stage/#announce).s
*

@@ -113,40 +113,39 @@ * @param listeners

* Returns current time. This method should be used whenever
* {@apilink DomainEvent} objects are instantiated by you programmatically.
* [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects are instantiated by you programmatically.
*/
currentTime(): Timestamp;
/**
* Generates and remembers a {@apilink CorrelationId}
* Generates and remembers a `CorrelationId`
* for the current scene.
*
* This method should be used in custom test runner adapters
* when instantiating a {@apilink SceneStarts} event.
* when instantiating a [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) event.
*
* #### Learn more
* - {@apilink Stage.currentSceneId}
* - {@apilink CorrelationId}
* - [`Stage.currentSceneId`](https://serenity-js.org/api/core/class/Stage/#currentSceneId)
*/
assignNewSceneId(): CorrelationId;
/**
* Returns the {@apilink CorrelationId} for the current scene.
* Returns the `CorrelationId` for the current scene.
*
* #### Learn more
* - {@apilink Stage.assignNewSceneId}
* - [`Stage.assignNewSceneId`](https://serenity-js.org/api/core/class/Stage/#assignNewSceneId)
*/
currentSceneId(): CorrelationId;
/**
* Generates and remembers a {@apilink CorrelationId}
* for the current {@apilink Activity}.
* Generates and remembers a `CorrelationId`
* for the current [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* This method should be used in custom test runner adapters
* when instantiating the {@apilink ActivityStarts} event.
* when instantiating the [ActivityStarts](https://serenity-js.org/api/core-events/class/ActivityStarts/) event.
*
* #### Learn more
* - {@apilink Stage.currentActivityId}
* - [`Stage.currentActivityId`](https://serenity-js.org/api/core/class/Stage/#currentActivityId)
*/
assignNewActivityId(activityDetails: ActivityDetails): CorrelationId;
/**
* Returns the {@apilink CorrelationId} for the current {@apilink Activity}.
* Returns the `CorrelationId` for the current [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* #### Learn more
* - {@apilink Stage.assignNewSceneId}
* - [`Stage.assignNewSceneId`](https://serenity-js.org/api/core/class/Stage/#assignNewSceneId)
*/

@@ -153,0 +152,0 @@ currentActivityId(): CorrelationId;

@@ -10,13 +10,13 @@ "use strict";

/**
* Stage is the place where {@apilink Actor|actors} perform.
* Stage is the place where [actors](https://serenity-js.org/api/core/class/Actor/) perform.
*
* In more technical terms, the Stage is the main event bus propagating {@apilink DomainEvent|DomainEvents}
* to {@apilink Actor|Actors} it instantiates and {@apilink StageCrewMember|StageCrewMembers} that have been registered with it.
* In more technical terms, the Stage is the main event bus propagating [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* to [actors](https://serenity-js.org/api/core/class/Actor/) it instantiates and [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/) that have been registered with it.
*
* It is unlikely that you'll ever need to interact with the `Stage` directly in your tests. Instead, you'll use functions like
* {@apilink actorCalled} and {@apilink actorInTheSpotlight}.
* [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) and [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/).
*
* ## Learn more
* - {@apilink configure}
* - {@apilink engage}
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*

@@ -44,3 +44,3 @@ * @group Stage

/**
* The most recent actor referenced via the {@apilink actor} method
* The most recent actor referenced via the [`Actor`](https://serenity-js.org/api/core/class/Actor/) method
*/

@@ -70,3 +70,3 @@ actorInTheSpotlight = undefined;

/**
* An alias for {@apilink Stage.actor}
* An alias for [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor)
*

@@ -79,3 +79,3 @@ * @param name

/**
* Instantiates a new {@apilink Actor} or fetches an existing one
* Instantiates a new [`Actor`](https://serenity-js.org/api/core/class/Actor/) or fetches an existing one
* identified by their name if they've already been instantiated.

@@ -110,7 +110,7 @@ *

/**
* Returns the last {@apilink Actor} instantiated via {@apilink Stage.actor}.
* Returns the last [`Actor`](https://serenity-js.org/api/core/class/Actor/) instantiated via [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor).
* Useful when you don't can't or choose not to reference the actor by their name.
*
* @throws {LogicError}
* If no {@apilink Actor} has been activated yet
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If no [`Actor`](https://serenity-js.org/api/core/class/Actor/) has been activated yet
*/

@@ -124,3 +124,3 @@ theActorInTheSpotlight() {

/**
* Returns `true` if there is an {@apilink Actor} in the spotlight, `false` otherwise.
* Returns `true` if there is an [`Actor`](https://serenity-js.org/api/core/class/Actor/) in the spotlight, `false` otherwise.
*/

@@ -131,4 +131,4 @@ theShowHasStarted() {

/**
* Configures the Stage to prepare {@apilink Actor|Actors}
* instantiated via {@apilink Stage.actor} using the provided {@apilink Cast}.
* Configures the Stage to prepare [actors](https://serenity-js.org/api/core/class/Actor/)
* instantiated via [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor) using the provided [cast](https://serenity-js.org/api/core/class/Cast/).
*

@@ -142,4 +142,4 @@ * @param actors

/**
* Assigns listeners to be notified of {@apilink DomainEvent|DomainEvents}
* emitted via {@apilink Stage.announce}.s
* Assigns listeners to be notified of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* emitted via [`Stage.announce`](https://serenity-js.org/api/core/class/Stage/#announce).s
*

@@ -177,3 +177,3 @@ * @param listeners

* Returns current time. This method should be used whenever
* {@apilink DomainEvent} objects are instantiated by you programmatically.
* [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects are instantiated by you programmatically.
*/

@@ -184,11 +184,10 @@ currentTime() {

/**
* Generates and remembers a {@apilink CorrelationId}
* Generates and remembers a `CorrelationId`
* for the current scene.
*
* This method should be used in custom test runner adapters
* when instantiating a {@apilink SceneStarts} event.
* when instantiating a [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) event.
*
* #### Learn more
* - {@apilink Stage.currentSceneId}
* - {@apilink CorrelationId}
* - [`Stage.currentSceneId`](https://serenity-js.org/api/core/class/Stage/#currentSceneId)
*/

@@ -201,6 +200,6 @@ assignNewSceneId() {

/**
* Returns the {@apilink CorrelationId} for the current scene.
* Returns the `CorrelationId` for the current scene.
*
* #### Learn more
* - {@apilink Stage.assignNewSceneId}
* - [`Stage.assignNewSceneId`](https://serenity-js.org/api/core/class/Stage/#assignNewSceneId)
*/

@@ -211,10 +210,10 @@ currentSceneId() {

/**
* Generates and remembers a {@apilink CorrelationId}
* for the current {@apilink Activity}.
* Generates and remembers a `CorrelationId`
* for the current [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* This method should be used in custom test runner adapters
* when instantiating the {@apilink ActivityStarts} event.
* when instantiating the [ActivityStarts](https://serenity-js.org/api/core-events/class/ActivityStarts/) event.
*
* #### Learn more
* - {@apilink Stage.currentActivityId}
* - [`Stage.currentActivityId`](https://serenity-js.org/api/core/class/Stage/#currentActivityId)
*/

@@ -229,6 +228,6 @@ assignNewActivityId(activityDetails) {

/**
* Returns the {@apilink CorrelationId} for the current {@apilink Activity}.
* Returns the `CorrelationId` for the current [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* #### Learn more
* - {@apilink Stage.assignNewSceneId}
* - [`Stage.assignNewSceneId`](https://serenity-js.org/api/core/class/Stage/#assignNewSceneId)
*/

@@ -235,0 +234,0 @@ currentActivityId() {

import type { ListensToDomainEvents } from './ListensToDomainEvents';
import type { Stage } from './Stage';
/**
* You can think of the {@apilink StageCrewMember} as an in-memory microservice that reacts to {@apilink DomainEvent|domain events},
* published by the {@apilink StageManager}, and originally emitted by {@apilink Actor|actors} performing activities and Serenity/JS
* test runner adapters notifying the framework about test scenario-specific events like {@apilink SceneStarts} or {@apilink SceneFinishes}.
* You can think of the [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) as an in-memory microservice that reacts to [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/),
* published by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/), and originally emitted by [actors](https://serenity-js.org/api/core/class/Actor/) performing activities and Serenity/JS
* test runner adapters notifying the framework about test scenario-specific events like [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) or [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/).
*
* Every {@apilink StageCrewMember} receives a reference to the {@apilink Stage},
* and therefore {@apilink StageManager} as well, which enables them to emit {@apilink DomainEvent}s back.
* Every [stage crew member](https://serenity-js.org/api/core/interface/StageCrewMember/) receives a reference to the [stage](https://serenity-js.org/api/core/class/Stage/),
* and therefore the [stage manager](https://serenity-js.org/api/core/class/StageManager/), which enables them to emit [domain events](https://serenity-js.org/api/core-events/class/DomainEvent/) back.
*

@@ -64,7 +64,7 @@ * This interface is useful when you're interested in implementing custom Serenity/JS reporters or supporting services.

* ## Learn more
* - {@apilink SerenityConfig.crew}
* - {@apilink configure}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink ListensToDomainEvents}
* - {@apilink DomainEvent}
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`ListensToDomainEvents`](https://serenity-js.org/api/core/interface/ListensToDomainEvents/)
* - [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/)
*

@@ -75,3 +75,3 @@ * @group Stage

/**
* Assigns a {@apilink Stage} to this {@apilink StageCrewMember}
* Assigns a [`Stage`](https://serenity-js.org/api/core/class/Stage/) to this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*/

@@ -78,0 +78,0 @@ assignedTo(stage: Stage): StageCrewMember;

import type { ListensToDomainEvents } from './ListensToDomainEvents';
import type { StageCrewMemberBuilderDependencies } from './StageCrewMemberBuilderDependencies';
/**
* Use a {@apilink StageCrewMemberBuilder} to configure complex {@apilink StageCrewMember} objects.
* Use a [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/) to configure complex [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) objects.
*
* Useful when you're interested in implementing custom reporters with multiple configuration options.
* See {@apilink ConsoleReporter} for an example.
* See [`ConsoleReporter`](https://serenity-js.org/api/console-reporter/class/ConsoleReporter/) for an example.
*
* ## Learn more
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilderDependencies}
* - {@apilink SerenityConfig.crew}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMemberBuilderDependencies`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilderDependencies/)
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
*

@@ -18,4 +18,4 @@ * @group Stage

/**
* Instantiates a {@apilink StageCrewMember}, giving it access to shared dependencies
* such as {@apilink Stage} or {@apilink OutputStream}
* Instantiates a [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/), giving it access to shared dependencies
* such as [`Stage`](https://serenity-js.org/api/core/class/Stage/) or [`OutputStream`](https://serenity-js.org/api/core-adapter/interface/OutputStream/)
*/

@@ -22,0 +22,0 @@ build(dependencies: StageCrewMemberBuilderDependencies): T;

@@ -5,6 +5,6 @@ import type { OutputStream } from '../adapter';

/**
* Dependencies injected by {@apilink Serenity.configure} into {@apilink StageCrewMemberBuilder.build}
* Dependencies injected by [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure) into [`StageCrewMemberBuilder.build`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/#build)
*
* ## Learn more
* - {@apilink StageCrewMemberBuilder}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
*

@@ -11,0 +11,0 @@ * @group Stage

{
"name": "@serenity-js/core",
"version": "3.25.0",
"version": "3.25.1",
"description": "Serenity/JS Screenplay, reporting engine and core interfaces.",

@@ -74,3 +74,3 @@ "author": {

},
"gitHead": "22657b685b6002f75b2569db54f4bea31ab91d12"
"gitHead": "450b994115cf9f1a1547ef92ac9387e0c57821ce"
}

@@ -20,3 +20,3 @@ # Serenity/JS

- Find answers to your Serenity/JS questions on the [Serenity/JS Forum](https://github.com/orgs/serenity-js/discussions/categories/how-do-i),
- Learn how to [contribute to Serenity/JS](https://serenity-js.org/contributing),
- Learn how to [contribute to Serenity/JS](https://serenity-js.org/community/contributing/),
- Support the project and gain access to [Serenity/JS Playbooks](https://github.com/serenity-js/playbooks) by becoming a [Serenity/JS GitHub Sponsor](https://github.com/sponsors/serenity-js)!

@@ -23,0 +23,0 @@

/**
* An output stream to be injected into {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders} configured via {@apilink SerenityConfig.crew}.
* An output stream to be injected into [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* configured via [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew).
*
* ## Learn more
* - {@apilink StageCrewMemberBuilder}
* - {@apilink Serenity.configure}
* - {@apilink SerenityConfig.crew}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure)
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
*

@@ -9,0 +10,0 @@ * @group Integration

@@ -18,3 +18,3 @@ import type { Outcome } from '../model';

*
* @throws {@apilink LogicError}
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If called before `load`

@@ -27,3 +27,3 @@ */

*
* @throws {@apilink LogicError}
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If called before `load`

@@ -30,0 +30,0 @@ */

@@ -6,3 +6,3 @@ /**

*
* `ClassDescription` is used to describe the {@apilink StageCrewMember|StageCrewMembers} passed to {@apilink SerenityConfig}.
* `ClassDescription` is used to describe the [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/) passed to [`SerenityConfig`](https://serenity-js.org/api/core/class/SerenityConfig/).
*

@@ -9,0 +9,0 @@ * The most basic class description is the name of a Node module that must provide a `default` export.

@@ -8,11 +8,11 @@ import type { OutputStream } from '../adapter';

/**
* Describes the configuration object accepted by the {@apilink configure} function.
* Describes the configuration object accepted by the [`configure`](https://serenity-js.org/api/core/function/configure/) function.
*
* ## Learn more
* - {@apilink configure}
* - {@apilink Cast}
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink ClassDescription}
* - {@apilink Stage.waitForNextCue}
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`ClassDescription`](https://serenity-js.org/api/core/#ClassDescription)
* - [`Stage.waitForNextCue`](https://serenity-js.org/api/core/class/Stage/#waitForNextCue)
*

@@ -24,4 +24,4 @@ * @group Serenity

/**
* A {@apilink Cast} of {@apilink Actor}s to be used when {@apilink actorCalled}
* and {@apilink actorInTheSpotlight} functions are called.
* A [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/) to be used when [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* and [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/) functions are called.
*/

@@ -31,6 +31,6 @@ actors?: Cast;

/**
* A list of {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders} or {@apilink StageCrewMember|StageCrewMembers}
* to be notified of {@apilink DomainEvent|DomainEvents} that occur during the scenario execution.
* A list of [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/) or [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/)
* to be notified of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/) that occur during the scenario execution.
*
* Note that the `crew` can also be configured using {@apilink ClassDescription|ClassDescriptions}.
* Note that the `crew` can also be configured using [class descriptions](https://serenity-js.org/api/core/#ClassDescription).
* This is useful when you need to load the configuration from a static `json` file, or when the test runner doesn't support

@@ -42,6 +42,6 @@ * providing class instances in configuration (e.g. Playwright Test).

/**
* The maximum amount of time between {@apilink SceneFinishes} and {@apilink SceneFinished} events
* The maximum amount of time between [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/) and [SceneFinished](https://serenity-js.org/api/core-events/class/SceneFinished/) events
* that Serenity/JS should wait for any post-scenario
* async operations to complete. Those include generating the screenshots,
* saving reports to disk, {@apilink Discardable|dismissing the actors}, and so on.
* saving reports to disk, [dismissing the actors](https://serenity-js.org/api/core/interface/Discardable/), and so on.
*

@@ -56,3 +56,3 @@ * Defaults to 5 seconds.

/**
* The maximum default amount of time allowed for interactions such as {@apilink Wait.until}
* The maximum default amount of time allowed for interactions such as [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
* to complete.

@@ -66,3 +66,3 @@ *

* #### Learn more
* - {@apilink Wait.until}
* - [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
*/

@@ -72,6 +72,8 @@ interactionTimeout?: Duration;

/**
* {@apilink DiffFormatter} that should be used by the {@apilink ErrorFactory} and the ability to {@apilink RaiseErrors}
* when generating diffs included in {@apilink RuntimeError} objects.
* [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that
* should be used by the [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/) and the ability
* to [`RaiseErrors`](https://serenity-js.org/api/core/class/RaiseErrors/)
* when generating diffs included in [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/) objects.
*
* By default, Serenity/JS uses {@apilink NoOpDiffFormatter}.
* By default, Serenity/JS uses [`NoOpDiffFormatter`](https://serenity-js.org/api/core/class/NoOpDiffFormatter/)
*/

@@ -81,3 +83,3 @@ diffFormatter?: DiffFormatter;

/**
* An output stream to be injected into {@apilink StageCrewMemberBuilder|StageCrewMemberBuilders}
* An output stream to be injected into [stage crew member builders](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
*

@@ -84,0 +86,0 @@ * Defaults to [`process.stdout`](https://nodejs.org/api/process.html#process_process_stdout).

@@ -7,3 +7,3 @@ import type { Chalk, Options } from 'chalk'; // eslint-disable-line unicorn/import-style

/**
* A {@apilink DiffFormatter} that uses [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
* A [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that uses [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
* to format the output.

@@ -10,0 +10,0 @@ *

/**
* Formats text representing expected, received, and unchanged lines of a diff
* produced by the {@apilink ErrorFactory}, so that they can be presented to a developer
* produced by the [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/), so that they can be presented to a developer
* in a visually distinctive way.

@@ -5,0 +5,0 @@ *

import type { DiffFormatter } from './DiffFormatter';
/**
* A no-op {@apilink DiffFormatter} that produces output identical to input.
* A no-op [`DiffFormatter`](https://serenity-js.org/api/core/interface/DiffFormatter/) that produces output identical to input.
*

@@ -6,0 +6,0 @@ * @group Errors

@@ -14,3 +14,4 @@ import type { ArrayChange, Change } from 'diff';

/**
* Generates Serenity/JS {@apilink RuntimeError} objects based on provided {@apilink ErrorOptions|configuration}.
* Generates Serenity/JS [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/) objects based
* on the provided [configuration](https://serenity-js.org/api/core/interface/ErrorOptions/).
*

@@ -17,0 +18,0 @@ * @group Errors

@@ -94,3 +94,3 @@ import type { JSONObject, JSONValue } from 'tiny-types';

* Name of the constructor function used to instantiate
* the original {@apilink Error} object.
* the original [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object.
*/

@@ -100,3 +100,3 @@ name: string;

/**
* Message of the original {@apilink Error} object
* Message of the original [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object
*/

@@ -106,5 +106,5 @@ message: string;

/**
* Stack trace of the original {@apilink Error} object
* Stack trace of the original [`Error`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) object
*/
stack: string;
}

@@ -26,3 +26,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error and the difference between the expected and actual values
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -29,0 +29,0 @@ constructor(message: string, cause?: Error) {

@@ -26,3 +26,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -29,0 +29,0 @@ constructor(message: string, cause?: Error) {

@@ -7,4 +7,4 @@ import type { JSONObject } from 'tiny-types';

/**
* Thrown to indicate that the {@apilink Actor} attempted to perform
* a {@apilink Task} or {@apilink Interaction} that hasn't been implemented yet.
* Thrown to indicate that the [`Actor`](https://serenity-js.org/api/core/class/Actor/) attempted to perform
* a [`Task`](https://serenity-js.org/api/core/class/Task/) or [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) that hasn't been implemented yet.
*

@@ -48,3 +48,3 @@ * ## A pending Task

* @param {string} message - Human-readable description of the error
* @param {Error} [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param {Error} [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -51,0 +51,0 @@ constructor(message: string, cause?: Error) {

@@ -7,3 +7,3 @@ import type { JSONObject } from 'tiny-types';

/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* can't be executed due to no items are found in a list.

@@ -31,3 +31,3 @@ *

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink ListItemNotFoundError}, if any
* @param [cause] - The root cause of this [`ListItemNotFoundError`](https://serenity-js.org/api/core/class/ListItemNotFoundError/), if any
*/

@@ -34,0 +34,0 @@ constructor(message: string, cause?: Error) {

@@ -7,3 +7,3 @@ import type { JSONObject } from 'tiny-types';

/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* can't be executed due to a logical error.

@@ -31,3 +31,3 @@ *

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -34,0 +34,0 @@ constructor(message: string, cause?: Error) {

@@ -7,3 +7,3 @@ import type { JSONObject } from 'tiny-types';

/**
* Thrown to indicate that a {@apilink Scheduler|scheduled operation}
* Thrown to indicate that a [scheduled operation](https://serenity-js.org/api/core/class/Scheduler/)
* has been stopped before it was completed.

@@ -31,3 +31,3 @@ *

* @param [cause]
* The root cause of this {@apilink RuntimeError}, if any
* The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -34,0 +34,0 @@ constructor(

@@ -39,3 +39,3 @@ import { TinyType } from 'tiny-types';

*
* ## Registering a custom error with {@apilink ErrorSerialiser}
* ## Registering a custom error with [`ErrorSerialiser`](https://serenity-js.org/api/core/class/ErrorSerialiser/)
*

@@ -74,3 +74,3 @@ * ```ts

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -77,0 +77,0 @@ protected constructor(

@@ -41,3 +41,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -44,0 +44,0 @@ constructor(message: string, cause?: Error) {

@@ -7,3 +7,3 @@ import type { JSONObject } from 'tiny-types';

/**
* Thrown to indicate that an {@apilink Interaction}, a {@apilink Task} or a test scenario
* Thrown to indicate that an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/), a [`Task`](https://serenity-js.org/api/core/class/Task/) or a test scenario
* took longer to execute than the expected timeout.

@@ -31,3 +31,3 @@ *

* @param [cause]
* The root cause of this {@apilink RuntimeError}, if any
* The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -34,0 +34,0 @@ constructor(

@@ -26,3 +26,3 @@ import type { JSONObject } from 'tiny-types';

* @param message - Human-readable description of the error
* @param [cause] - The root cause of this {@apilink RuntimeError}, if any
* @param [cause] - The root cause of this [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/), if any
*/

@@ -29,0 +29,0 @@ constructor(message: string, cause?: Error) {

@@ -7,4 +7,4 @@ import { Ability } from '../screenplay/abilities/Ability';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to create a Serenity/JS {@apilink RuntimeError}
* from within a custom {@apilink Interaction}.
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to create a Serenity/JS [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/)
* from within a custom [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -44,9 +44,9 @@ * The stack trace of an error created this way includes the filesystem location pointing to where the interaction was invoked,

* ## Learn more
* - {@apilink ErrorOptions}
* - {@apilink ErrorFactory}
* - {@apilink AssertionError}
* - {@apilink ConfigurationError}
* - {@apilink LogicError}
* - {@apilink RuntimeError}
* - {@apilink TestCompromisedError}
* - [`ErrorOptions`](https://serenity-js.org/api/core/interface/ErrorOptions/)
* - [`ErrorFactory`](https://serenity-js.org/api/core/class/ErrorFactory/)
* - [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/)
* - [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/)
* - [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* - [`RuntimeError`](https://serenity-js.org/api/core/class/RuntimeError/)
* - [`TestCompromisedError`](https://serenity-js.org/api/core/class/TestCompromisedError/)
*

@@ -53,0 +53,0 @@ * @group Errors

@@ -8,3 +8,3 @@ import { ensure, isDefined } from 'tiny-types';

/**
* Emitted when an {@apilink Activity} is finished.
* Emitted when an [`Activity`](https://serenity-js.org/api/core/class/Activity/) is finished.
*

@@ -11,0 +11,0 @@ * @group Events

@@ -8,3 +8,3 @@ import { ensure, isDefined } from 'tiny-types';

/**
* Emitted when an {@apilink Activity} starts.
* Emitted when an [`Activity`](https://serenity-js.org/api/core/class/Activity/) starts.
*

@@ -11,0 +11,0 @@ * @group Events

@@ -9,3 +9,3 @@ import type { JSONObject } from 'tiny-types';

/**
* Emitted by [@serenity-js/cucumber](/api/cucumber)
* Emitted by [@serenity-js/cucumber](https://serenity-js.org/api/cucumber)
* when a [business rule](https://cucumber.io/docs/gherkin/reference/#rule) is detected.

@@ -12,0 +12,0 @@ *

@@ -10,3 +10,4 @@ import type { JSONObject } from 'tiny-types';

* Emitted by a Serenity/JS test runner adapter, right before a test and all its associated test hooks finish.
* Triggers any clean-up operations that might be required, such as discarding of the {@apilink Discardable} abilities.
* Triggers any clean-up operations that might be required, such as discarding of
* the [discardable](https://serenity-js.org/api/core/interface/Discardable/) abilities.
*

@@ -13,0 +14,0 @@ * @group Events

@@ -22,6 +22,6 @@ import type { SerenityConfig } from './config';

*
* This function is an alias for {@apilink Serenity.configure}.
* This function is an alias for [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure).
*
* :::tip configure vs engage
* If you want to retain the configuration but reset the {@apilink Cast|cast of actors}, use {@apilink engage} instead.
* If you want to retain the configuration but reset the [cast of actors](https://serenity-js.org/api/core/class/Cast/), use [`engage`](https://serenity-js.org/api/core/function/engage/) instead.
* :::

@@ -38,16 +38,16 @@ *

/**
* Re-configures Serenity/JS with a new {@apilink Cast} of {@apilink Actor|actors}
* you want to use in any subsequent calls to {@apilink actorCalled}.
* Re-configures Serenity/JS with a new [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/)
* you want to use in any subsequent calls to [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* This function is an alias for {@apilink Serenity.engage},
* which provides an alternative to calling {@apilink Actor.whoCan} directly in your tests
* This function is an alias for [`Serenity.engage`](https://serenity-js.org/api/core/class/Serenity/#engage),
* which provides an alternative to calling [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) directly in your tests
* and is typically invoked in a "before all" or "before each" hook of your test runner of choice.
*
* :::tip configure vs engage
* Calling {@apilink engage} replaces the currently configured {@apilink Cast|cast of actors},
* Calling [`engage`](https://serenity-js.org/api/core/function/engage/) replaces the currently configured [cast of actors](https://serenity-js.org/api/core/class/Cast/),
* but doesn't affect any other configuration.
* If you want to reset the Serenity/JS configuration completely, use {@apilink configure} instead.
* If you want to reset the Serenity/JS configuration completely, use [`configure`](https://serenity-js.org/api/core/function/configure/) instead.
* :::
*
* If your implementation of the {@apilink Cast} interface is stateless,
* If your implementation of the [cast](https://serenity-js.org/api/core/class/Cast/) interface is stateless,
* you can invoke this function just once before your entire test suite is executed, see

@@ -58,3 +58,3 @@ * - [`beforeAll`](https://jasmine.github.io/api/3.6/global.html#beforeAll) in Jasmine,

*
* However, if your {@apilink Cast} holds state that you want to reset before each scenario,
* However, if your [cast](https://serenity-js.org/api/core/class/Cast/) holds state that you want to reset before each scenario,
* it's better to invoke `engage` before each test using:

@@ -122,4 +122,4 @@ * - [`beforeEach`](https://jasmine.github.io/api/3.6/global.html#beforeEach) in Jasmine

*
* [Serenity/JS Playwright Test module](/api/playwright-test) will configure the cast on your behalf,
* so you don't need to call {@apilink engage}.
* [Serenity/JS Playwright Test module](https://serenity-js.org/api/playwright-test) will configure the cast on your behalf,
* so you don't need to call [`engage`](https://serenity-js.org/api/core/function/engage/).
*

@@ -141,5 +141,5 @@ * ```ts

* ## Learn more
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink Serenity.engage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Serenity.engage`](https://serenity-js.org/api/core/class/Serenity/#engage)
*

@@ -155,6 +155,6 @@ * @param actors

/**
* Instantiates or retrieves an {@apilink Actor}
* Instantiates or retrieves an [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* called `name` if one has already been instantiated.
*
* This method is an alias for {@apilink Serenity.theActorCalled}.
* This method is an alias for [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled).
*

@@ -208,5 +208,5 @@ * ## Usage with Cucumber

*
* When using [Serenity/JS with Playwright Test](/api/playwright-test/), you should use either
* the default [`actor`](/api/playwright-test/interface/SerenityFixtures/#actorCalled) fixture
* or the injected [`actorCalled`](/api/playwright-test/interface/SerenityFixtures/#actorCalled) function
* When using [Serenity/JS with Playwright Test](https://serenity-js.org/api/playwright-test/), you should use either
* the default [`actor`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/#actorCalled) fixture
* or the injected [`actorCalled`](https://serenity-js.org/api/playwright-test/interface/SerenityFixtures/#actorCalled) function
* instead of importing it from `@serenity-js/core`.

@@ -229,6 +229,6 @@ *

*
* - {@apilink engage}
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink Serenity.theActorCalled}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled)
*

@@ -246,7 +246,7 @@ * @param name

* Retrieves an actor who was last instantiated or retrieved
* using {@apilink actorCalled}.
* using [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* This function is particularly useful when automating Cucumber scenarios.
*
* This function is an alias for {@apilink Serenity.theActorInTheSpotlight}.
* This function is an alias for [`Serenity.theActorInTheSpotlight`](https://serenity-js.org/api/core/class/Serenity/#theActorInTheSpotlight).
*

@@ -272,6 +272,6 @@ * ## Usage with Cucumber

*
* - {@apilink engage}
* - {@apilink actorCalled}
* - {@apilink Actor}
* - {@apilink Cast}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*

@@ -278,0 +278,0 @@ * @group Actors

@@ -5,11 +5,20 @@ import type { Answerable } from '../screenplay';

/**
* {@apilink format} is a factory function returning
* `format` is a factory function returning
* a [tag function](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals)
* that produces a human-readable description of a template containing
* one or more {@apilink Answerable|Answerables}.
* that produces a human-readable `string` description of a template containing
* one or more [answerables](https://serenity-js.org/api/core/#Answerable).
*
* Typically, you'll want to use {@apilink d} and {@apilink f} shorthands instead:
* - the {@apilink d} function works best for generating a **description** of a parameterised {@apilink Activity}
* - the {@apilink f} function is better suited for debugging.
* Typically, you'll want to use `d` and `f` shorthands instead, or the modern alternative - `the`:
* - the [`d`](https://serenity-js.org/api/core/function/d/) function works best for generating a **static description** of a parameterised [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - the [`f`](https://serenity-js.org/api/core/function/f/) function is better suited for debugging
* - the [`the`](https://serenity-js.org/api/core/function/f/) function works best for generating a **dynamic description** of a parameterised [`Activity`](https://serenity-js.org/api/core/class/Activity/)
*
* :::tip Use `the` instead of `format`
* `format`, `d` and `f` are the original Serenity/JS string formatting functions,
* still present in the framework for backwards compatibility purposes.
*
* To generate a dynamic description of a `Question` or `Interaction`,
* use [`the`](https://serenity-js.org/api/core/function/the/) function instead.
* :::
*
* ## Using `format`

@@ -16,0 +25,0 @@ *

@@ -81,3 +81,3 @@ // eslint-disable-next-line @typescript-eslint/no-var-requires

/**
* Returns {@apilink Version} of module specified by `moduleId`, based on its `package.json`.
* Returns `Version` of module specified by `moduleId`, based on its `package.json`.
*

@@ -84,0 +84,0 @@ * @param moduleId

@@ -14,3 +14,3 @@ import { types } from 'node:util';

/**
* Checks if the value is a named {@apilink Function}
* Checks if the value is a named [`Function`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function)
*

@@ -119,4 +119,4 @@ * @param value

const
toString = Object.prototype.toString, // Used to resolve the internal `{@apilink Class}` of values
fnToString = Function.prototype.toString, // Used to resolve the decompiled source of functions
toString = Object.prototype.toString, // Used to resolve the internal `Class` of values
fnToString = Function.prototype.toString, // Used to resolve the decompiled source of functions
hostConstructor = /^\[object .+?Constructor]$/; // Used to detect host constructors (Safari > 4; really typed array specific)

@@ -123,0 +123,0 @@

@@ -16,3 +16,3 @@ import { inspect } from 'util';

/**
* Provides a human-readable description of the {@apilink Answerable<T>}.
* Provides a human-readable description of the [`Answerable<T>`](https://serenity-js.org/api/core/#Answerable).
* Similar to [Node util~inspect](https://nodejs.org/api/util.html#utilinspectobject-options).

@@ -19,0 +19,0 @@ *

/**
* A tag function trimming the leading and trailing whitespace from multi-line strings.
*
* @apilink https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_template_literals
*

@@ -6,0 +6,0 @@ * @param templates

@@ -6,3 +6,3 @@ import type { JSONObject } from 'tiny-types';

/**
* The value of the {@apilink HTTPRequestResponse} {@apilink Artifact} describing an HTTP request/response pair.
* The value of the `HTTPRequestResponse` artifact describing an HTTP request/response pair.
*/

@@ -26,3 +26,3 @@ export interface RequestAndResponse extends JSONObject {

/**
* An {@apilink Artifact} describing a HTTP request/response pair.
* An artifact describing a HTTP request/response pair.
*/

@@ -29,0 +29,0 @@ export class HTTPRequestResponse extends JSONData {

@@ -5,25 +5,26 @@ import type { AbilityType } from './AbilityType';

/**
* **Abilities** enable {@apilink Actor|actors}
* to perform {@apilink Interaction|interactions} with the system under test
* and answer {@apilink Question|questions} about its state.
* **Abilities** enable [actors](https://serenity-js.org/api/core/class/Actor/)
* to perform [interactions](https://serenity-js.org/api/core/class/Interaction/) with the system under test
* and answer [questions](https://serenity-js.org/api/core/class/Question/) about its state.
*
* From the technical perspective, **abilities** act as **wrappers** around any **integration libraries** required
* to communicate with the external interfaces of system under test,
* such as {@apilink BrowseTheWeb|web browser drivers} or an {@apilink CallAnApi|HTTP client}.
* They also enable [portability](/handbook/design/portable-test-code)
* such as [web browser drivers](https://serenity-js.org/api/web/class/BrowseTheWeb/) or an [HTTP client](https://serenity-js.org/api/rest/class/CallAnApi/).
* They also enable [portability](https://serenity-js.org/handbook/design/portable-test-code)
* of your test code across such integration libraries.
*
* Abilities are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Interaction|Interactions}, {@apilink Question|Questions}, and {@apilink Task|Tasks}.
* Abilities are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [interactions](https://serenity-js.org/api/core/class/Interaction/),
* [questions](https://serenity-js.org/api/core/class/Question/), and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor|Actors}
* - {@apilink Cast|Configuring actors using Casts}
* - {@apilink Interaction|Interactions}
* - {@apilink Question|Questions}
* - [Web testing](/handbook/web-testing/)
* - [API testing](/handbook/api-testing/)
* - [Mobile testing](/handbook/mobile-testing/)
* - [Actors](https://serenity-js.org/api/core/class/Actor/)
* - [Configuring actors using Casts](https://serenity-js.org/api/core/class/Cast/)
* - [Interactions](https://serenity-js.org/api/core/class/Interaction/)
* - [Questions](https://serenity-js.org/api/core/class/Question/)
* - [Web testing](https://serenity-js.org/handbook/web-testing/)
* - [API testing](https://serenity-js.org/handbook/api-testing/)
* - [Mobile testing](https://serenity-js.org/handbook/mobile-testing/)
*

@@ -33,6 +34,6 @@ * ## Giving actors the abilities to interact

* Serenity/JS actors are capable of interacting with **any interface** of the system under test,
* be it a [web UI](/handbook/web-testing/), a [mobile app](/handbook/mobile-testing/), a [web service](/handbook/api-testing/),
* or {@apilink Ability|anything else} that a Node.js program can talk to.
* be it a [web UI](https://serenity-js.org/handbook/web-testing/), a [mobile app](https://serenity-js.org/handbook/mobile-testing/), a [web service](https://serenity-js.org/handbook/api-testing/),
* or [anything else](https://serenity-js.org/api/core/class/Ability/) that a Node.js program can talk to.
* This flexibility is enabled by a mechanism called _**abilities**_
* and achieved without introducing any unnecessary dependencies to your code base thanks to the [modular architecture](/handbook/about/architecture) of Serenity/JS.
* and achieved without introducing any unnecessary dependencies to your code base thanks to the [modular architecture](https://serenity-js.org/handbook/getting-started/architecture) of Serenity/JS.
*

@@ -46,4 +47,4 @@ * :::tip Remember

* You give an actor an ability, and it's the ability's responsibility to provide a consistent API around the integration library and deal with any of its quirks.
* Abilities **encapsulate integration libraries** and handle their {@apilink Initialisable|configuration and initialisation},
* the process of {@apilink Discardable|freeing up any resources} they hold,
* Abilities **encapsulate integration libraries** and handle their [configuration and initialisation](https://serenity-js.org/api/core/interface/Initialisable/),
* the process of [freeing up any resources](https://serenity-js.org/api/core/interface/Discardable/) they hold,
* as well as managing any state associated with the library.

@@ -54,7 +55,7 @@ *

* To make your Serenity/JS actors interact with web interfaces,
* you call the [`Actor.whoCan`](/api/core/class/Actor#whoCan) method and give them an implementation of the ability to [`BrowseTheWeb`](/api/web/class/BrowseTheWeb),
* you call the [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor#whoCan) method and give them an implementation of the ability to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb),
* specific to your web integration tool of choice.
*
* Note how {@apilink BrowseTheWebWithPlaywright}, {@apilink BrowseTheWebWithWebdriverIO}, and {@apilink BrowseTheWebWithProtractor}
* all **extend** the base ability to {@apilink BrowseTheWeb}.
* Note how [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/), [`BrowseTheWebWithWebdriverIO`](https://serenity-js.org/api/webdriverio/class/BrowseTheWebWithWebdriverIO/), and [`BrowseTheWebWithProtractor`](https://serenity-js.org/api/protractor/class/BrowseTheWebWithProtractor/)
* all **extend** the base ability to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/).
*

@@ -97,6 +98,6 @@ * #### Playwright

*
* Use {@apilink Ability.as} to retrieve an ability in a custom {@apilink Interaction} or {@apilink Question} implementation.
* Use [`PerformActivities`](https://serenity-js.org/api/core/class/PerformActivities/)} to retrieve an ability in a custom [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) or [`Question`](https://serenity-js.org/api/core/class/Question/) implementation.
*
* Here, `Ability` can be the integration library-specific class, for example {@apilink BrowseTheWebWithPlaywright},
* or its library-agnostic parent class, like {@apilink BrowseTheWeb}.
* Here, `Ability` can be the integration library-specific class, for example [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/),
* or its library-agnostic parent class, like [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/).
*

@@ -118,6 +119,6 @@ * To make your code portable across the various integration libraries, retrieve the ability

* and make the abilities of the same type **interchangeable**.
* For example, [Serenity/JS web modules](/handbook/web-testing/serenity-js-web-modules) offer an abstraction that lets you switch between web integration libraries
* For example, [Serenity/JS web modules](https://serenity-js.org/handbook/web-testing/serenity-js-web-modules) offer an abstraction that lets you switch between web integration libraries
* as vastly different as Selenium, WebdriverIO, or Playwright without having to change _anything whatsoever_ in your test scenarios.
*
* What this means is that your test code can become [portable and reusable across projects and teams](/handbook/design/portable-test-code),
* What this means is that your test code can become [portable and reusable across projects and teams](https://serenity-js.org/handbook/design/portable-test-code),
* even if they don't use the same low-level integration tools. It also helps you to **avoid vendor lock-in**, as you can wrap any third-party integration library

@@ -127,3 +128,3 @@ * into an ability and swap it out for another implementation if you need to.

* However, Serenity/JS **doesn't prevent you** from using the integration libraries directly.
* When you need to, you can use a library-specific ability like {@apilink BrowseTheWebWithPlaywright}
* When you need to, you can use a library-specific ability like [`BrowseTheWebWithPlaywright`](https://serenity-js.org/api/playwright/class/BrowseTheWebWithPlaywright/)
* to trade portability for access to library-specific low-level methods:

@@ -151,3 +152,3 @@ *

* One more reason to use abilities is that abilities can also help you to **associate actors with data** they need to perform their activities.
* For example, a commonly used ability is one to [`TakeNotes`](/api/core/class/TakeNotes), which allows your actors to start the test scenario
* For example, a commonly used ability is one to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes), which allows your actors to start the test scenario
* equipped with some data set, or record information about what they see in the test scenario so that they can act upon it later:

@@ -177,3 +178,3 @@ *

* Of course, an actor can have **any number of abilities** they need to play their role.
* For example, it is quite common for an actor to be able to [`BrowseTheWeb`](/api/web/class/BrowseTheWeb), [`TakeNotes`](/api/core/class/TakeNotes), and [`CallAnApi`](/api/rest/class/CallAnApi):
* For example, it is quite common for an actor to be able to [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb), [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes), and [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi):
*

@@ -210,8 +211,8 @@ * ```typescript

* If your system under test provides a type of interface that Serenity/JS doesn't support yet,
* you might want to implement a custom {@apilink Ability}, as well as {@apilink Interaction|interactions}
* and {@apilink Question|questions} to interact with it.
* you might want to implement a custom [`Ability`](https://serenity-js.org/api/core/class/Ability/), as well as [interactions](https://serenity-js.org/api/core/class/Interaction/)
* and [questions](https://serenity-js.org/api/core/class/Question/) to interact with it.
*
* The best way to start with that is for you to review the examples in the {@apilink Ability|Screenplay Pattern API docs},
* The best way to start with that is for you to review the examples in the [Screenplay Pattern API docs](https://serenity-js.org/api/core/class/Ability/),
* as well as the [Serenity/JS code base on GitHub](https://github.com/serenity-js/serenity-js/tree/main/packages).
* Also note that all the [Serenity/JS modules](/handbook/about/architecture)
* Also note that all the [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture)
* have their automated tests written in such a way to not only provide an **extremely high test coverage** for the framework itself,

@@ -221,3 +222,3 @@ * but to be **accessible** and act as a **reference implementation for you** to create your own integrations.

* If you believe that the custom integration you've developed could benefit the wider Serenity/JS community,
* please consider open-sourcing it yourself, or [contributing it](/contributing) to the main framework.
* please consider open-sourcing it yourself, or [contributing it](https://serenity-js.org/community/contributing/) to the main framework.
*

@@ -280,4 +281,5 @@ * [![Join Serenity/JS Community Chat](https://img.shields.io/badge/Chat-Serenity%2FJS%20Community-FBD30B?logo=matrix)](https://matrix.to/#/#serenity-js:gitter.im)

* Abilities that rely on resources that need to be initialised before they can be used,
* or discarded before the actor is dismissed can implement the {@apilink Initialisable}
* or {@apilink Discardable} interfaces, respectively.
* or discarded before the actor is dismissed can implement
* the [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
* or [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/) interfaces, respectively.
*

@@ -363,8 +365,8 @@ * ### Defining a custom ability to `QueryPostgresDB`

* ## Learn more
* - {@apilink AbilityType}
* - {@apilink Initialisable}
* - {@apilink Discardable}
* - {@apilink BrowseTheWeb}
* - {@apilink CallAnApi}
* - {@apilink TakeNotes}
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
* - [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/)
* - [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
*

@@ -376,4 +378,4 @@ * @group Screenplay Pattern

/**
* Used to access an {@apilink Actor|actor's} {@apilink Ability|ability} of the given type
* from within the {@apilink Interaction} and {@apilink Question} classes.
* Used to access an [actor's](https://serenity-js.org/api/core/class/Actor/) [ability](https://serenity-js.org/api/core/class/Ability/) of the given type
* from within the [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) and [`Question`](https://serenity-js.org/api/core/class/Question/) classes.
*

@@ -380,0 +382,0 @@ * #### Retrieving an ability in an interaction definition

import type { Ability } from './Ability';
/**
* An interface describing the static access method that every {@apilink Ability} class
* needs to provide in order to be accessible from within the {@apilink Interaction|interactions}.
* An interface describing the static access method that every [`Ability`](https://serenity-js.org/api/core/class/Ability/) class
* needs to provide in order to be accessible from within the [interactions](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -39,5 +39,5 @@ * #### Retrieving an ability from an interaction

* ## Learn more
* - {@apilink Ability}
* - {@apilink Actor}
* - {@apilink Interaction}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
*

@@ -44,0 +44,0 @@ * @group Abilities

@@ -9,7 +9,7 @@ import { ValueInspector } from '../../io';

/**
* This {@apilink Ability} enables an {@apilink Actor} to resolve the value of a given {@apilink Answerable}.
* This [`Ability`](https://serenity-js.org/api/core/class/Ability/) enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to resolve the value of a given [`Answerable`](https://serenity-js.org/api/core/#Answerable).
*
* {@apilink AnswerQuestions} is used internally by {@apilink Actor.answer}, and it is unlikely you'll ever need to use it directly in your code.
* `AnswerQuestions` is used internally by [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer), and it is unlikely you'll ever need to use it directly in your code.
* That is, unless you're building a custom Serenity/JS extension and want to override the default behaviour of the framework,
* in which case you should check out the [Contributor's Guide](/contributing).
* in which case you should check out the [Contributor's Guide](https://serenity-js.org/community/contributing/).
*

@@ -16,0 +16,0 @@ * @group Abilities

@@ -5,8 +5,8 @@ import type { Ability } from './Ability';

/**
* Describes an {@apilink Actor} who can have an {@apilink Ability} to perform some {@apilink Activity}.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can have an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to perform some [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* ## Learn more
*
* - {@apilink Ability}
* - {@apilink Actor}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -18,5 +18,5 @@ * @group Actors

/**
* Assigns an {@apilink Ability} or several abilities to the {@apilink Actor}
* Assigns an [`Ability`](https://serenity-js.org/api/core/class/Ability/) or several abilities to the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*/
whoCan(...abilities: Ability[]): Returned_Type;
}
/**
* An interface to be implemented by any {@apilink Ability} that needs to free up
* An interface to be implemented by any [`Ability`](https://serenity-js.org/api/core/class/Ability/) that needs to free up
* the resources it uses, e.g. disconnect from a database.
*
* This {@apilink Discardable.discard} method is invoked directly by the {@apilink Actor}, and indirectly by {@apilink Stage}:
* - when {@apilink SceneFinishes}, for actors instantiated after {@apilink SceneStarts} - e.g. within a test scenario or in a "before each" hook
* - when {@apilink TestRunFinishes}, for actors instantiated before {@apilink SceneStarts} - e.g. in a "before all" hook
* This [`Discardable.discard`](https://serenity-js.org/api/core/interface/Discardable/#discard) method is invoked directly by the [actor](https://serenity-js.org/api/core/class/Actor/), and indirectly by the [stage](https://serenity-js.org/api/core/class/Stage/):
* - when [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/), for actors instantiated after [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) - e.g. within a test scenario or in a "before each" hook
* - when [`TestRunFinishes`](https://serenity-js.org/api/core-events/class/TestRunFinishes/), for actors instantiated before [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) - e.g. in a "before all" hook
*
* Note that events such as {@apilink SceneFinishes} and {@apilink TestRunFinishes} are emitted by Serenity/JS test runner adapters,
* Note that events such as [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/) and [`TestRunFinishes`](https://serenity-js.org/api/core-events/class/TestRunFinishes/) are emitted by Serenity/JS test runner adapters,
* such as `@serenity-js/cucumber`, `@serenity-js/mocha`, `@serenity-js/jasmine`, and so on.

@@ -14,5 +14,5 @@ * Consult their respective readmes to learn how to register them with your test runner of choice.

* ## Learn more
* - {@apilink Ability}
* - {@apilink AbilityType}
* - {@apilink Initialisable}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Initialisable`](https://serenity-js.org/api/core/interface/Initialisable/)
*

@@ -19,0 +19,0 @@ * @group Abilities

/**
* An interface to be implemented by any {@apilink Ability} that needs to initialise
* An interface to be implemented by any [`Ability`](https://serenity-js.org/api/core/class/Ability/) that needs to initialise
* the resources it uses, e.g. establish a database connection.
*
* The {@apilink Initialisable.initialise} method is invoked whenever {@apilink Actor.attemptsTo} method is called,
* but **only when** {@apilink Initialisable.isInitialised} returns false. This is to avoid initialising abilities more than once.
* The [`Initialisable.initialise`](https://serenity-js.org/api/core/interface/Initialisable/#initialise) method is invoked whenever [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo) method is called,
* but **only when** [`Initialisable.isInitialised`](https://serenity-js.org/api/core/interface/Initialisable/#isInitialised) returns false. This is to avoid initialising abilities more than once.
*
* ## Learn more
* - {@apilink Ability}
* - {@apilink AbilityType}
* - {@apilink Discardable}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`AbilityType`](https://serenity-js.org/api/core/#AbilityType)
* - [`Discardable`](https://serenity-js.org/api/core/interface/Discardable/)
*

@@ -18,6 +18,6 @@ * @group Abilities

/**
* Initialises the ability. Invoked whenever {@apilink Actor.attemptsTo} method is called,
* but **only when** {@apilink Initialisable.isInitialised} returns false.
* Initialises the ability. Invoked whenever [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo) method is called,
* but **only when** [`Initialisable.isInitialised`](https://serenity-js.org/api/core/interface/Initialisable/#isInitialised) returns false.
*
* Make sure to implement {@apilink Initialisable.isInitialised} so that it returns `true`
* Make sure to implement [`Initialisable.isInitialised`](https://serenity-js.org/api/core/interface/Initialisable/#isInitialised) so that it returns `true`
* when the ability has been successfully initialised.

@@ -29,4 +29,4 @@ */

* Should return `true` when all the resources that the given ability needs
* have been initialised. Should return `false` if the {@apilink Actor} should
* initialise them again when {@apilink Actor.attemptsTo} is called.
* have been initialised. Should return `false` if the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should
* initialise them again when [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo) is called.
*

@@ -33,0 +33,0 @@ * @returns {boolean}

@@ -25,7 +25,7 @@ import { match } from 'tiny-types';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to perform a given {@apilink Activity}.
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform a given [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* {@apilink PerformActivities} is used internally by {@apilink Actor.perform}, and it is unlikely you'll ever need to use it directly in your code.
* [`PerformActivities`](https://serenity-js.org/api/core/class/PerformActivities/) is used internally by [`Actor.attemptsTo`](https://serenity-js.org/api/core/class/Actor/#attemptsTo), and it is unlikely you'll ever need to use it directly in your code.
* That is, unless you're building a custom Serenity/JS extension and want to override the default behaviour of the framework,
* in which case you should check out the [Contributor's Guide](/contributing).
* in which case you should check out the [Contributor's Guide](https://serenity-js.org/community/contributing).
*

@@ -32,0 +32,0 @@ * @group Abilities

@@ -5,9 +5,9 @@ import type { Ability } from './Ability';

/**
* Describes an {@apilink Actor} who can use their {@apilink Ability|abilities} to perform an {@apilink Activity}
* or answer a {@apilink Question}.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can use their [abilities](https://serenity-js.org/api/core/class/Ability/) to perform an [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* or answer a [`Question`](https://serenity-js.org/api/core/class/Question/).
*
* ## Learn more
*
* - {@apilink Ability}
* - {@apilink Actor}
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -19,8 +19,8 @@ * @group Actors

/**
* Provides access to the {@apilink Actor|actor's} {@apilink Ability} to do something
* Provides access to the [actor's](https://serenity-js.org/api/core/class/Actor/) [`Ability`](https://serenity-js.org/api/core/class/Ability/) to do something
*
* @param doSomething
* The type of ability to look up, e.g. {@apilink BrowseTheWeb} or {@apilink CallAnApi}
* The type of ability to look up, e.g. [`BrowseTheWeb`](https://serenity-js.org/api/web/class/BrowseTheWeb/) or [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
*/
abilityTo<T extends Ability>(doSomething: AbilityType<T>): T;
}
import type { Activity } from '../Activity';
/**
* Describes an {@apilink Actor} who can perform a sequence of {@apilink Activity|Activities},
* such as {@apilink Task|tasks} or {@apilink Interaction|interactions}.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can perform a sequence of [activities](https://serenity-js.org/api/core/class/Activity/),
* such as [tasks](https://serenity-js.org/api/core/class/Task/) or [interactions](https://serenity-js.org/api/core/class/Interaction/).
*
* ## Learn more
* - {@apilink Activity}
* - {@apilink Interaction}
* - {@apilink Task}
* - {@apilink Actor}
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`Task`](https://serenity-js.org/api/core/class/Task/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -18,5 +18,5 @@ * @group Actors

/**
* Makes the {@apilink Actor} attempt to perform a sequence of {@apilink Activity|Activities}.
* Makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/) attempt to perform a sequence of [activities](https://serenity-js.org/api/core/class/Activity/).
*/
attemptsTo: (...activities: Activity[]) => Promise<void>;
}

@@ -12,8 +12,8 @@ import path from 'path';

/**
* **Activities** represents {@apilink Task|tasks} and {@apilink Interaction|interactions} to be performed by an {@apilink Actor|actor}.
* **Activities** represents [tasks](https://serenity-js.org/api/core/class/Task/) and [interactions](https://serenity-js.org/api/core/class/Interaction/) to be performed by an [actor](https://serenity-js.org/api/core/class/Actor/).
*
* Learn more about:
* - [Performing activities at multiple levels](/handbook/design/screenplay-pattern#performing-activities-at-multiple-levels)
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - [Performing activities at multiple levels](https://serenity-js.org/handbook/design/screenplay-pattern#performing-activities-at-multiple-levels)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [Command design pattern on Wikipedia](https://en.wikipedia.org/wiki/Command_pattern)

@@ -37,3 +37,3 @@ *

/**
* Returns the location where this {@apilink Activity} was instantiated.
* Returns the location where this [`Activity`](https://serenity-js.org/api/core/class/Activity/) was instantiated.
*/

@@ -45,3 +45,3 @@ instantiationLocation(): FileSystemLocation {

/**
* Instructs the provided {@apilink Actor} to perform this {@apilink Activity}.
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform this [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*

@@ -51,6 +51,6 @@ * @param actor

* #### Learn more
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - {@apilink UsesAbilities}
* - {@apilink AnswersQuestions}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [`UsesAbilities`](https://serenity-js.org/api/core/interface/UsesAbilities/)
* - [`AnswersQuestions`](https://serenity-js.org/api/core/interface/AnswersQuestions/)
*/

@@ -57,0 +57,0 @@ abstract performAs(actor: PerformsActivities | UsesAbilities | AnswersQuestions): Promise<any>;

@@ -28,22 +28,22 @@ import { ConfigurationError, TestCompromisedError } from '../errors';

* **Actors** represent **people** and **external systems** interacting with the system under test.
* Their role is to perform {@apilink Activity|activities} that demonstrate how to accomplish a given goal.
* Their role is to perform [activities](https://serenity-js.org/api/core/class/Activity/) that demonstrate how to accomplish a given goal.
*
* Actors are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, {@apilink Task|Tasks}, and {@apilink Question|Questions}.
* Actors are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [abilities](https://serenity-js.org/api/core/class/Ability/), [interactions](https://serenity-js.org/api/core/class/Interaction/), [tasks](https://serenity-js.org/api/core/class/Task/), and [questions](https://serenity-js.org/api/core/class/Question/).
* Actors are also the first thing you see in a typical Serenity/JS test scenario.
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Cast}
* - {@apilink Stage}
* - {@apilink Ability|Abilities}
* - {@apilink Activity|Activities}
* - {@apilink Interaction|Interactions}
* - {@apilink Task|Tasks}
* - {@apilink Question|Questions}
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`Stage`](https://serenity-js.org/api/core/class/Stage/)
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`Task`](https://serenity-js.org/api/core/class/Task/)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
*
* ## Representing people and systems as actors
*
* To use a Serenity/JS {@apilink Actor}, all you need is to say their name:
* To use a Serenity/JS [`Actor`](https://serenity-js.org/api/core/class/Actor/), all you need is to say their name:
*

@@ -57,4 +57,4 @@ * ```typescript

*
* Serenity/JS actors perform within the scope of a test scenario, so the first time you invoke {@apilink actorCalled},
* Serenity/JS instantiates a new actor from the default {@apilink Cast} of actors (or any custom cast you might have {@apilink configured|configured}).
* Serenity/JS actors perform within the scope of a test scenario, so the first time you invoke [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/),
* Serenity/JS instantiates a new actor from the default [cast](https://serenity-js.org/api/core/class/Cast/) of actors (or any custom cast you might have [configured](https://serenity-js.org/api/core/function/configure/)).
* Any subsequent invocations of this function within the scope of the same test scenario retrieve the already instantiated actor, identified by their name.

@@ -109,8 +109,8 @@ *

/**
* Retrieves actor's {@apilink Ability} of `abilityType`, or one that extends `abilityType`.
* Retrieves actor's [`Ability`](https://serenity-js.org/api/core/class/Ability/) of `abilityType`, or one that extends `abilityType`.
*
* Please note that this method performs an {@apilink instanceof} check against abilities
* given to this actor via {@apilink Actor.whoCan}.
* Please note that this method performs an [`instanceof`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof) check against abilities
* given to this actor via [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan).
*
* Please also note that {@apilink Actor.whoCan} performs the same check when abilities are assigned to the actor
* Please also note that [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) performs the same check when abilities are assigned to the actor
* to ensure the actor has at most one instance of a given ability type.

@@ -135,4 +135,4 @@ *

/**
* Instructs the actor to attempt to perform a number of {@apilink Activity|activities},
* so either {@apilink Task|Tasks} or {@apilink Interaction|Interactions}),
* Instructs the actor to attempt to perform a number of [activities](https://serenity-js.org/api/core/class/Activity/),
* so either [tasks](https://serenity-js.org/api/core/class/Task/) or [interactions](https://serenity-js.org/api/core/class/Interaction/)),
* one by one.

@@ -151,3 +151,3 @@ *

/**
* Gives this Actor a list of {@apilink Ability|abilities} they can use
* Gives this Actor a list of [abilities](https://serenity-js.org/api/core/class/Ability/) they can use
* to interact with the system under test or the test environment.

@@ -161,3 +161,3 @@ *

*
* @throws {@apilink ConfigurationError}
* @throws [`ConfigurationError`](https://serenity-js.org/api/core/class/ConfigurationError/)
* Throws a ConfigurationError if the actor already has an ability of this type.

@@ -173,3 +173,3 @@ */

* @param answerable -
* An {@apilink Answerable} to answer (resolve the value of).
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) to answer (resolve the value of).
*

@@ -204,4 +204,4 @@ * @returns

/**
* Instructs the actor to invoke {@apilink Discardable.discard} method on any
* {@apilink Discardable} {@apilink Ability} it's been configured with.
* Instructs the actor to invoke [`Discardable.discard`](https://serenity-js.org/api/core/interface/Discardable/#discard) method on any
* [discardable](https://serenity-js.org/api/core/interface/Discardable/) [ability](https://serenity-js.org/api/core/class/Ability/) it's been configured with.
*/

@@ -220,3 +220,3 @@ dismiss(): Promise<void> {

*
* **PRO TIP:** To get the name of the actor, use {@apilink Actor.name}
* **PRO TIP:** To get the name of the actor, use [`Actor.name`](https://serenity-js.org/api/core/class/Actor/#name)
*/

@@ -280,4 +280,4 @@ toString(): string {

/**
* Instantiates a {@apilink Name} based on the string value of the parameter,
* or returns the argument if it's already an instance of {@apilink Name}.
* Instantiates a `Name` based on the string value of the parameter,
* or returns the argument if it's already an instance of `Name`.
*

@@ -284,0 +284,0 @@ * @param maybeName

@@ -5,3 +5,3 @@ import type { Question } from './Question';

* A union type that provides a convenient way to represent any value
* that can be resolved by {@apilink Actor.answer}.
* that can be resolved by [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -8,0 +8,0 @@ * @group Questions

import type { Question } from './Question';
/**
* Describes the type of answer a given {@apilink Answerable} would
* resolve to when given to {@apilink Actor.answer}.
* Describes the type of answer a given [`Answerable`](https://serenity-js.org/api/core/#Answerable) would
* resolve to when given to [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -7,0 +7,0 @@ * ```ts

import type { Artifact, Name } from '../../model';
/**
* Describes an {@apilink Actor} who can collect {@apilink Artifact|Artifacts}, such as {@apilink Photo|Photos} or {@apilink JSONData},
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can collect artifacts, such as photos or `JSON` data.,
* while the scenario is being executed
*
* ## Learn more
* - {@apilink Artifact}
* - {@apilink Actor}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -16,3 +15,3 @@ * @group Actors

/**
* Makes the {@apilink Actor} collect an {@apilink Artifact} so that it can be included in the test report.
* Makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/) collect an artifact so that it can be included in the test report.
*

@@ -74,3 +73,3 @@ * #### Implementing a custom interaction to attach artifacts

* @param artifact
* The artifact to be collected, such as {@apilink JSONData}
* The artifact to be collected, such as `JSON` data.
*

@@ -77,0 +76,0 @@ * @param name

@@ -14,3 +14,3 @@ import { ErrorSerialiser } from '../../errors';

/**
* Instructs the {@apilink Actor|actor} to evaluate and {@apilink Log|log} the provided {@apilink Answerable|answerable} values.
* Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate and [log](https://serenity-js.org/api/core/class/Log/) the provided [answerable](https://serenity-js.org/api/core/#Answerable) values.
*

@@ -23,4 +23,4 @@ * Since this interaction **accepts a callback function** that receives the evaluated results,

*
* {@apilink Debug.values} accepts a callback function that receives an array of {@apilink DebuggingResult} objects,
* as well as the result of evaluating each provided {@apilink Answerable|answerable} with {@apilink Actor.answer}.
* [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values) accepts a callback function that receives an array of [`DebuggingResult`](https://serenity-js.org/api/core/interface/DebuggingResult/) objects,
* as well as the result of evaluating each provided [answerable](https://serenity-js.org/api/core/#Answerable) with [`Actor.answer`](https://serenity-js.org/api/core/class/Actor/#answer).
*

@@ -48,4 +48,5 @@ * ```typescript

*
* Since this functionality is specific to [Playwright](/api/playwright), you can use it by passing {@apilink PlaywrightPage.current|`PlaywrightPage.current().nativePage()`}
* to Serenity/JS {@apilink Debug.values}. Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects.
* Since this functionality is specific to [Playwright](https://serenity-js.org/api/playwright),
* you can use it by passing [`PlaywrightPage.current().nativePage()`](https://serenity-js.org/api/playwright/class/PlaywrightPage/#current)
* to Serenity/JS [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values). Also make sure to name the evaluated value `page`, as this is the variable name that the Playwright VSCode extension expects.
*

@@ -80,3 +81,3 @@ * ```typescript

/**
* Instructs the {@apilink Actor|actor} to evaluate the provided `values`,
* Instructs the [actor](https://serenity-js.org/api/core/class/Actor/) to evaluate the provided `values`,
* log the results, and then pass them to your `debuggerFunction`.

@@ -83,0 +84,0 @@ *

/**
* An interface describing debugging data received by the callback function passed to {@apilink Debug.values}.
* An interface describing debugging data received by the callback function passed to [`Debug.values`](https://serenity-js.org/api/core/class/Debug/#values).
*

@@ -4,0 +4,0 @@ * @group Activities

@@ -11,6 +11,8 @@ import { d } from '../../io';

/**
* Instructs the {@apilink Actor} to {@apilink CollectsArtifacts|collect} arbitrary static values and answers to {@apilink Answerable|Answerables},
* so that they can be sent to the {@apilink StageCrewMember|StageCrewMembers}
* and printed to the terminal by the {@apilink ConsoleReporter}
* or attached to the HTML report by the {@apilink SerenityBDDReporter}.
* Instructs the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* to [collect](https://serenity-js.org/api/core/interface/CollectsArtifacts/) arbitrary static values
* and answers to [answerables](https://serenity-js.org/api/core/#Answerable),
* so that they can be sent to the [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/)
* and printed to the terminal by the [`ConsoleReporter`](https://serenity-js.org/api/console-reporter/class/ConsoleReporter/)
* or attached to the HTML report by the [`SerenityBDDReporter`](https://serenity-js.org/api/serenity-bdd/class/SerenityBDDReporter/).
*

@@ -33,3 +35,3 @@ * ## Logging static and `Answerable` values

/**
* Instantiates a new {@apilink Interaction|interaction} to {@apilink Log}
* Instantiates a new [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Log`](https://serenity-js.org/api/core/class/Log/)
*

@@ -36,0 +38,0 @@ * Note that this method accepts [variable number of arguments](https://www.typescriptlang.org/docs/handbook/functions.html#rest-parameters),

@@ -8,4 +8,4 @@ import type { UsesAbilities } from './abilities';

/**
* **Interactions** are low-level {@apilink Activity|activities} that encapsulate
* a handful of instructions for an {@apilink Actor|actor} on how to use their {@apilink Ability|abilities}
* **Interactions** are low-level [activities](https://serenity-js.org/api/core/class/Activity/) that encapsulate
* a handful of instructions for an [actor](https://serenity-js.org/api/core/class/Actor/) on how to use their [abilities](https://serenity-js.org/api/core/class/Ability/)
* to perform an individual interaction with the given interface of the system under test.

@@ -15,24 +15,24 @@ *

* Because of their low-level nature, interactions are named using the vocabulary of the [solution domain](https://blog.mattwynne.net/2013/01/17/the-problem-with-solutions/),
* and represent an individual interaction with the given interface, e.g. {@apilink Click}, {@apilink Enter}, or {@apilink Send}.
* and represent an individual interaction with the given interface, e.g. [`Click`](https://serenity-js.org/api/web/class/Click/), [`Enter`](https://serenity-js.org/api/web/class/Enter/), or [`Send`](https://serenity-js.org/api/rest/class/Send/).
*
* Interactions follow the [Single Responsibility Principle](https://en.wikipedia.org/wiki/Single_responsibility_principle) which means that they do _one thing and one thing only_.
* If you're considering implementing an "interaction" that performs more than one logical activity, e.g. checks if the button is visible and then clicks on it if is,
* consider using separate interactions for separate responsibilities and then composing them using a {@apilink Task|task}.
* consider using separate interactions for separate responsibilities and then composing them using a [task](https://serenity-js.org/api/core/class/Task/).
* :::
*
* Interactions are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Question|Questions}, and {@apilink Task|Tasks}.
* Interactions are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/), [questions](https://serenity-js.org/api/core/class/Question/), and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor|Actor}
* - {@apilink Ability|Abilities}
* - {@apilink Activity|Activities}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [Abilities](https://serenity-js.org/api/core/class/Ability/)
* - [Activities](https://serenity-js.org/api/core/class/Activity/)
*
* ## Writing a custom interaction
*
* [Serenity/JS modules](/handbook/about/architecture) ship with dozens of interactions to help you compose your test scenarios.
* [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture) ship with dozens of interactions to help you compose your test scenarios.
* However, if you need to interact with a non-standard interface, or want to create a flavour of a given interaction that behaves slightly differently than the built-in version,
* you can easily create your own implementations using the {@apilink Interaction.where} factory method.
* you can easily create your own implementations using the [`Interaction.where`](https://serenity-js.org/api/core/class/Interaction/#where) factory method.
*

@@ -89,9 +89,9 @@ * ```ts

/**
* Instructs the provided {@apilink Actor} to perform this {@apilink Interaction}.
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*
* #### Learn more
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - {@apilink UsesAbilities}
* - {@apilink AnswersQuestions}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [`UsesAbilities`](https://serenity-js.org/api/core/interface/UsesAbilities/)
* - [`AnswersQuestions`](https://serenity-js.org/api/core/interface/AnswersQuestions/)
*

@@ -98,0 +98,0 @@ * @param actor

@@ -8,5 +8,5 @@ import { TinyType } from 'tiny-types';

/**
* Stores notes recorded by an {@apilink Actor}.
* Stores notes recorded by an [`Actor`](https://serenity-js.org/api/core/class/Actor/).
*
* See {@apilink TakeNotes} and [notes](/api/core/function/notes) for more usage examples.
* See [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) and [notes](https://serenity-js.org/api/core/function/notes) for more usage examples.
*

@@ -51,5 +51,5 @@ * ## Sharing a notepad between actors

*
* - {@apilink TakeNotes}
* - [notes](/api/core/function/notes)
* - {@apilink Cast}
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*

@@ -107,9 +107,9 @@ * @group Notes

/**
* Creates a {@apilink QuestionAdapter} that simplifies access to the notes
* stored in this notepad. Allows the {@apilink Actor} to record, read, and remove notes.
* Creates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that simplifies access to the notes
* stored in this notepad. Allows the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to record, read, and remove notes.
*
* #### Learn more
* - [notes](/api/core/function/notes)
* - {@apilink TakeNotes}
* - {@apilink Notepad}
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/)
* - [`Notepad`](https://serenity-js.org/api/core/class/Notepad/)
*/

@@ -121,3 +121,3 @@ static notes<N extends Record<any, any>>(): NotepadAdapter<N> {

/**
* Instantiates a {@apilink Notepad} with an initial state.
* Instantiates a [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) with an initial state.
*

@@ -153,4 +153,4 @@ * @param recordedNotes

*
* @throws {@apilink LogicError}
* Throws a {@apilink LogicError} if the note with a given `subject`
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* Throws a [`LogicError`](https://serenity-js.org/api/core/class/LogicError/) if the note with a given `subject`
* has never been recorded.

@@ -157,0 +157,0 @@ */

@@ -15,6 +15,6 @@ import type { JSONObject } from 'tiny-types';

/**
* Serenity/JS Screenplay Pattern-style adapter for the {@apilink Notepad},
* that makes it easier for the {@apilink Actor|actors} to access its APIs.
* Serenity/JS Screenplay Pattern-style adapter for the [`Notepad`](https://serenity-js.org/api/core/class/Notepad/),
* that makes it easier for the [actors](https://serenity-js.org/api/core/class/Actor/) to access its APIs.
*
* See {@apilink TakeNotes}, {@apilink Notepad} and {@apilink notes} for more examples.
* See [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/), [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) and [`notes`](https://serenity-js.org/api/core/function/notes/) for more examples.
*

@@ -29,3 +29,3 @@ * @group Notes

* #### Learn more
* - {@apilink Notepad.has}
* - [`Notepad.has`](https://serenity-js.org/api/core/class/Notepad/#has)}
*

@@ -48,3 +48,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.get}
* - [`Notepad.get`](https://serenity-js.org/api/core/class/Notepad/#get)}
*

@@ -57,4 +57,4 @@ * @param subject

*
* @throws {LogicError}
* Throws a {@apilink LogicError} if the note with a given `subject`
* @throws
* Throws a [`LogicError`](https://serenity-js.org/api/core/class/LogicError/) if the note with a given `subject`
* has never been recorded.

@@ -73,5 +73,5 @@ */

* **Pro tip:** calls to `set` can be chained and result in an accumulation
* of values to be recorded in the {@apilink Notepad}.
* Those values are resolved and recorded when the {@apilink Interaction}
* returned by this method is performed by an {@apilink Actor}.
* of values to be recorded in the [`Notepad`](https://serenity-js.org/api/core/class/Notepad/).
* Those values are resolved and recorded when the [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* returned by this method is performed by an [`Actor`](https://serenity-js.org/api/core/class/Actor/).
*

@@ -107,3 +107,3 @@ * If a note identified by a given `subject` is set multiple times,

* #### Learn more
* - {@apilink Notepad.set}
* - [`Notepad.set`](https://serenity-js.org/api/core/class/Notepad/#set)
*

@@ -178,3 +178,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.delete}
* - [`Notepad.delete`](https://serenity-js.org/api/core/class/Notepad/#delete)
*

@@ -215,3 +215,3 @@ * @param subject

* #### Learn more
* - {@apilink Notepad.clear}
* - [`Notepad.clear`](https://serenity-js.org/api/core/class/Notepad/#clear)
*/

@@ -245,3 +245,3 @@ clear(): Interaction {

* #### Learn more
* - {@apilink Notepad.size}
* - [`Notepad.size`](https://serenity-js.org/api/core/class/Notepad/#size)
*/

@@ -255,3 +255,3 @@ size(): QuestionAdapter<number> {

/**
* Produces a {@apilink QuestionAdapter} that resolves to a `JSONObject`
* Produces a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves to a `JSONObject`
* representing the resolved notes stored in the notepad.

@@ -261,3 +261,3 @@ *

* but are commonly used in data structures representing actor's notes.
* For example a {@apilink Map} will be serialised as a regular JSON object, a {@apilink Set} will be serialised as {@apilink Array}.
* For example a [`Map`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map) will be serialised as a regular JSON object, a [`Set`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set) will be serialised as [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array).
*

@@ -264,0 +264,0 @@ * Additionally, notepad assumes that the data structure you use it with does not contain cyclic references.

@@ -5,6 +5,6 @@ import { Notepad } from './Notepad';

/**
* Alias for {@apilink Notepad.notes}.
* Alias for [`Notepad.notes`](https://serenity-js.org/api/core/class/Notepad/#notes).
*
* **Pro tip:** `notes<T>().get(subject)` returns a {@apilink NotepadAdapter} to make accessing the APIs
* of the underlying type easier. Check {@apilink NotepadAdapter} for more examples.
* **Pro tip:** `notes<T>().get(subject)` returns a [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/) to make accessing the APIs
* of the underlying type easier. Check [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/) for more examples.
*

@@ -113,5 +113,5 @@ * ## Working with untyped notes

*
* - {@apilink NotepadAdapter}
* - {@apilink Notepad.notes}
* - {@apilink QuestionAdapter}
* - [`NotepadAdapter`](https://serenity-js.org/api/core/class/NotepadAdapter/)
* - [`Notepad.notes`](https://serenity-js.org/api/core/class/Notepad/#notes)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -118,0 +118,0 @@ * @group Notes

@@ -5,6 +5,6 @@ import { Ability } from '../abilities';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to remember information
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to remember information
* to be recalled during a test scenario.
*
* Under the hood, {@apilink TakeNotes} uses a {@apilink Notepad}, which state
* Under the hood, [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) uses a [`Notepad`](https://serenity-js.org/api/core/class/Notepad/), which state
* can be populated both during initialisation or while the test scenario is executed.

@@ -16,7 +16,7 @@ * Populating the notepad when it's initialised can be useful to associate authentication credentials

*
* **Pro tip:** {@apilink TakeNotes}, {@apilink Notepad} and {@apilink notes} can be typed
* **Pro tip:** [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/), [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) and [`notes`](https://serenity-js.org/api/core/function/notes/) can be typed
* using [TypeScript generics](https://www.typescriptlang.org/docs/handbook/2/generics.html)
* to help you avoid typos when specifying note names.
*
* See [notes](/api/core/function/notes) and {@apilink Notepad} for more usage examples.
* See [notes](https://serenity-js.org/api/core/function/notes) and [`Notepad`](https://serenity-js.org/api/core/class/Notepad/) for more usage examples.
*

@@ -229,4 +229,4 @@ * ## Remembering and retrieving a value

*
* - [notes](/api/core/function/notes)
* - {@apilink Notepad}
* - [notes](https://serenity-js.org/api/core/function/notes)
* - [`Notepad`](https://serenity-js.org/api/core/class/Notepad/)
*

@@ -238,3 +238,3 @@ * @group Notes

/**
* Initialises an {@apilink Ability} to {@apilink TakeNotes} with {@apilink Notepad.empty}.
* Initialises an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) with [`Notepad.empty`](https://serenity-js.org/api/core/class/Notepad/#empty).
*/

@@ -246,4 +246,4 @@ static usingAnEmptyNotepad<N extends Record<any, any>>(): TakeNotes<N> {

/**
* Initialises an {@apilink Ability} to {@apilink TakeNotes} using
* a {@apilink Notepad.with} some initial state.
* Initialises an [`Ability`](https://serenity-js.org/api/core/class/Ability/) to [`TakeNotes`](https://serenity-js.org/api/core/class/TakeNotes/) using
* a [`Notepad.with`](https://serenity-js.org/api/core/class/Notepad/#with) some initial state.
*

@@ -250,0 +250,0 @@ * @param notepad

@@ -22,3 +22,3 @@ import type { Answerable } from './Answerable';

/**
* Returns an {@apilink Answerable} that resolves to `true` when the optional value
* Returns an [`Answerable`](https://serenity-js.org/api/core/#Answerable) that resolves to `true` when the optional value
* is present, `false` otherwise.

@@ -25,0 +25,0 @@ */

@@ -21,14 +21,16 @@ import { isRecord, significantFieldsOf } from 'tiny-types/lib/objects';

/**
* **Questions** describe how {@apilink Actor|actors} should query the system under test or the test environment to retrieve some information.
* **Questions** describe how [actors](https://serenity-js.org/api/core/class/Actor/) should query the system under test or the test environment to retrieve some information.
*
* Questions are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, and {@apilink Task|Tasks}.
* Questions are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/),
* [interactions](https://serenity-js.org/api/core/class/Interaction/),
* and [tasks](https://serenity-js.org/api/core/class/Task/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - {@apilink Actor}
* - {@apilink Ability|Abilities}
* - {@apilink Interaction}
* - {@apilink QuestionAdapter}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Ability`](https://serenity-js.org/api/core/class/Ability/)
* - [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -53,6 +55,6 @@ * ## Implementing a basic custom Question

*
* Just like the {@apilink Interaction|interactions}, a {@apilink Question}
* also can use {@apilink Actor|actor's} {@apilink Ability|abilities}.
* Just like the [interactions](https://serenity-js.org/api/core/class/Interaction/), a [`Question`](https://serenity-js.org/api/core/class/Question/)
* also can use [actor's](https://serenity-js.org/api/core/class/Actor/) [abilities](https://serenity-js.org/api/core/class/Ability/).
*
* Here, we use the ability to {@apilink CallAnApi} to retrieve a property of
* Here, we use the ability to [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/) to retrieve a property of
* an HTTP response.

@@ -71,11 +73,11 @@ *

* #### Learn more
* - {@apilink CallAnApi}
* - {@apilink LastResponse}
* - [`CallAnApi`](https://serenity-js.org/api/rest/class/CallAnApi/)
* - [`LastResponse`](https://serenity-js.org/api/rest/class/LastResponse/)
*
* ## Mapping answers to other questions
*
* Apart from retrieving information, {@apilink Question|questions} can be used to transform information retrieved by other questions.
* Apart from retrieving information, [questions](https://serenity-js.org/api/core/class/Question/) can be used to transform information retrieved by other questions.
*
* Here, we use the factory method {@apilink Question.about} to produce a question that makes the received {@apilink Actor|actor}
* answer {@apilink LastResponse.status} and then compare it against some expected value.
* Here, we use the factory method [`Question.about`](https://serenity-js.org/api/core/class/Question/#about) to produce a question that makes the received [actor](https://serenity-js.org/api/core/class/Actor/)
* answer [`LastResponse.status`](https://serenity-js.org/api/rest/class/LastResponse/#status) and then compare it against some expected value.
*

@@ -103,3 +105,3 @@ * ```ts

* Note that the above example is for demonstration purposes only, Serenity/JS provides an easier way to
* verify the response status of the {@apilink LastResponse}:
* verify the response status of the [`LastResponse`](https://serenity-js.org/api/rest/class/LastResponse/):
*

@@ -164,5 +166,6 @@ * ```ts

/**
* Generates a {@apilink QuestionAdapter} that recursively resolves
* any {@apilink Answerable} fields of the provided object,
* including {@apilink Answerable} fields of {@apilink WithAnswerableProperties|nested objects}.
* Generates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that recursively resolves
* any [`Answerable`](https://serenity-js.org/api/core/#Answerable) fields of the provided object,
* including [`Answerable`](https://serenity-js.org/api/core/#Answerable) fields
* of [nested objects](https://serenity-js.org/api/core/#WithAnswerableProperties).
*

@@ -220,5 +223,5 @@ * Optionally, the method accepts `overrides` to be shallow-merged with the fields of the original `source`,

* #### Learn more
* - {@apilink WithAnswerableProperties}
* - {@apilink RecursivelyAnswered}
* - {@apilink Answerable}
* - [`WithAnswerableProperties`](https://serenity-js.org/api/core/#WithAnswerableProperties)
* - [`RecursivelyAnswered`](https://serenity-js.org/api/core/#RecursivelyAnswered)
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
*

@@ -250,4 +253,4 @@ * @param source

/**
* Generates a {@apilink QuestionAdapter} that resolves
* any {@apilink Answerable} elements of the provided array.
* Generates a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves
* any [`Answerable`](https://serenity-js.org/api/core/#Answerable) elements of the provided array.
*/

@@ -275,3 +278,3 @@ static fromArray<Source_Type>(source: Array<Answerable<Source_Type>>, options?: DescriptionFormattingOptions): QuestionAdapter<Source_Type[]> {

/**
* Checks if the value is a {@apilink Question}.
* Checks if the value is a [`Question`](https://serenity-js.org/api/core/class/Question/).
*

@@ -287,3 +290,3 @@ * @param maybeQuestion

/**
* Checks if the value is a {@apilink MetaQuestion}.
* Checks if the value is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/).
*

@@ -300,3 +303,3 @@ * @param maybeMetaQuestion

/**
* Creates a {@apilink MetaQuestion} that can be composed with any {@apilink Answerable}
* Creates a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be composed with any [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* to produce a single-line description of its value.

@@ -326,7 +329,7 @@ *

/**
* Creates a {@apilink MetaQuestion} that can be composed with any {@apilink Answerable}
* to return its value when the answerable is a {@apilink Question},
* Creates a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be composed with any [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* to return its value when the answerable is a [`Question`](https://serenity-js.org/api/core/class/Question/),
* or the answerable itself otherwise.
*
* The description of the resulting question is produced by calling {@apilink Question.description} on the
* The description of the resulting question is produced by calling [`Question.describedBy`](https://serenity-js.org/api/core/class/Question/#describedBy) on the
* provided answerable.

@@ -488,3 +491,3 @@ *

/**
* Instructs the provided {@apilink Actor} to use their {@apilink Ability|abilities}
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to use their [abilities](https://serenity-js.org/api/core/class/Ability/)
* to answer this question.

@@ -495,9 +498,9 @@ */

/**
* Changes the description of this object, as returned by {@apilink Describable.describedBy}
* and {@apilink Describable.toString}.
* Changes the description of this object, as returned by [`Describable.describedBy`](https://serenity-js.org/api/core/class/Describable/#describedBy)
* and [`Describable.toString`](https://serenity-js.org/api/core/class/Describable/#toString).
*
* @param description
* Replaces the current description according to the following rules:
* - If `description` is an {@apilink Answerable}, it replaces the current description
* - If `description` is a {@apilink MetaQuestion}, the current description is passed as `context` to `description.of(context)`, and the result replaces the current description
* - If `description` is an [`Answerable`](https://serenity-js.org/api/core/#Answerable), it replaces the current description
* - If `description` is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/), the current description is passed as `context` to `description.of(context)`, and the result replaces the current description
*/

@@ -541,5 +544,5 @@ describedAs(description: Answerable<string> | MetaQuestion<Awaited<T>, Question<Promise<string>>>): this {

/**
* Describes an object recursively wrapped in {@apilink QuestionAdapter} proxies, so that:
* - both methods and fields of the wrapped object can be used as {@apilink Question|questions} or {@apilink Interactions|interactions}
* - method parameters of the wrapped object will accept {@apilink Answerable|Answerable<T>}
* Describes an object recursively wrapped in [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) proxies, so that:
* - both methods and fields of the wrapped object can be used as [questions](https://serenity-js.org/api/core/class/Question/) or [interactions](https://serenity-js.org/api/core/class/Interaction/)
* - method parameters of the wrapped object will accept [`Answerable<T>`](https://serenity-js.org/api/core/#Answerable)
*

@@ -565,6 +568,6 @@ * @group Questions

/**
* A union type representing a proxy object returned by {@apilink Question.about}.
* A union type representing a proxy object returned by [`Question.about`](https://serenity-js.org/api/core/class/Question/#about).
*
* {@apilink QuestionAdapter} proxies the methods and fields of the wrapped object recursively,
* allowing them to be used as either a {@apilink Question} or an {@apilink Interaction}.
* [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) proxies the methods and fields of the wrapped object recursively,
* allowing them to be used as either a [`Question`](https://serenity-js.org/api/core/class/Question/) or an [`Interaction`](https://serenity-js.org/api/core/class/Interaction/).
*

@@ -580,4 +583,4 @@ * @group Questions

/**
* An extension of {@apilink QuestionAdapter}, that in addition to proxying methods and fields
* of the wrapped object can also act as a {@apilink MetaQuestion}.
* An extension of [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter), that in addition to proxying methods and fields
* of the wrapped object can also act as a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/).
*

@@ -606,3 +609,3 @@ * @group Questions

/**
* Returns a Question that resolves to `true` if resolving the {@apilink QuestionStatement}
* Returns a Question that resolves to `true` if resolving the `QuestionStatement`
* returns a value other than `null` or `undefined`, and doesn't throw errors.

@@ -609,0 +612,0 @@ */

import type { Answerable } from '../Answerable';
/**
* Describes an {@apilink Actor} who can answer a {@apilink Question} about the system under test.
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) who can answer a [`Question`](https://serenity-js.org/api/core/class/Question/) about the system under test.
*
* ## Learn more
*
* - {@apilink Question}
* - {@apilink Actor}
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
*

@@ -16,3 +16,3 @@ * @group Actors

/**
* Makes the {@apilink Actor} evaluate an {@apilink Answerable}
* Makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/) evaluate an [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* and return the value it holds.

@@ -19,0 +19,0 @@ */

@@ -6,10 +6,10 @@ import type { Answerable } from '../Answerable';

/**
* A chainable meta-question is a {@apilink MetaQuestion} that can be answered
* in the context of another {@apilink Answerable},
* A chainable meta-question is a [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/) that can be answered
* in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable),
* and form a chain of transformations.
*
* {@apilink MetaQuestion|Meta questions} are typically used when filtering a {@apilink List}.
* [Meta-questions](https://serenity-js.org/api/core/interface/MetaQuestion/) are typically used when filtering a [`List`](https://serenity-js.org/api/core/class/List/).
*
* ## Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*

@@ -24,9 +24,9 @@ * @group Questions

/**
* Answers the given `ChainableMetaQuestion` in the context of another {@apilink Answerable}
* Answers the given `ChainableMetaQuestion` in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* and returns another `ChainableMetaQuestion` ready for further chaining.
*
* #### Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*/
of(context: Answerable<Supported_Context_Type>): Returned_Question_Type & ChainableMetaQuestion<Supported_Context_Type, Returned_Question_Type>;
}

@@ -12,3 +12,3 @@ import { d } from '../../io';

* A [flow control statement](https://en.wikipedia.org/wiki/Control_flow)
* that enables an {@apilink Actor} to decide between two alternate series of {@apilink Activity|activities}.
* that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to decide between two alternate series of [activities](https://serenity-js.org/api/core/class/Activity/).
*

@@ -70,3 +70,3 @@ * Think of it as a Screenplay Pattern equivalent of the traditional `if` statement.

* @param alternativeActivities
* A sequence of {@apilink Activity|activities} to perform when the {@apilink Expectation} is not met.
* A sequence of [activities](https://serenity-js.org/api/core/class/Activity/) to perform when the [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) is not met.
*/

@@ -73,0 +73,0 @@ otherwise(...alternativeActivities: Activity[]): Task {

/**
* Configuration options for {@apilink Question.formattedValue} and
* the [`the`](/api/core/function/the/) function.
* Configuration options for [`Question.formattedValue`](https://serenity-js.org/api/core/class/Question/#formattedValue) and
* the [`the`](https://serenity-js.org/api/core/function/the/) function.
*

@@ -5,0 +5,0 @@ * @group Questions

@@ -20,4 +20,7 @@ import type { JSONValue } from 'tiny-types';

/**
* Defines an expectation to be used with {@apilink @apilink Wait.until}, {@apilink Check.whether}, {@apilink Ensure.that}
* and as part of the Page Element Query Language with {@apilink PageElements.where} and {@apilink List.where}.
* Defines an expectation to be used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until),
* [`Check.whether`](https://serenity-js.org/api/core/class/Check/#whether),
* [`Ensure.that`](https://serenity-js.org/api/assertions/class/Ensure/#that)
* and as part of the Page Element Query Language with [`PageElements.where`](https://serenity-js.org/api/web/class/PageElements/#where)
* and [`List.where`](https://serenity-js.org/api/core/class/List/#where).
*

@@ -29,3 +32,3 @@ * @group Expectations

/**
* A factory method to that makes defining custom {@apilink Expectation|expectations} easier
* A factory method to that makes defining custom [expectations](https://serenity-js.org/api/core/class/Expectation/) easier
*

@@ -101,12 +104,12 @@ * #### Defining a custom expectation

* #### Learn more
* - {@apilink Ensure}
* - {@apilink Check}
* - {@apilink Wait}
* - [`Ensure`](https://serenity-js.org/api/assertions/class/Ensure/)
* - [`Check`](https://serenity-js.org/api/core/class/Check/)
* - [`Wait`](https://serenity-js.org/api/core/class/Wait/)
*
* @param functionName
* Name of the expectation function to be used when producing an {@apilink AssertionError}
* Name of the expectation function to be used when producing an [`AssertionError`](https://serenity-js.org/api/core/class/AssertionError/)
*
* @param relationship
* Human-readable description of the relationship between the `expected` and the `actual` values.
* Used when reporting {@apilink Activity|activities} performed by an {@apilink Actor|actor}
* Used when reporting [activities](https://serenity-js.org/api/core/class/Activity/) performed by an [actor](https://serenity-js.org/api/core/class/Actor/)
*

@@ -155,3 +158,3 @@ * @param predicate

/**
* Used to define a simple {@apilink Expectation}
* Used to define a simple [`Expectation`](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -208,5 +211,5 @@ * #### Simple parameterised expectation

/**
* Used to compose {@apilink Expectation|expectations}.
* Used to compose [expectations](https://serenity-js.org/api/core/class/Expectation/).
*
* #### Composing {@apilink Expectation|expectations}
* #### Composing [expectations](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -263,5 +266,5 @@ * ```ts

/**
* Returns a {@apilink QuestionAdapter} that resolves to {@apilink ExpectationOutcome}
* indicating that the {@apilink ExpectationMet|expectation was met}
* or that the {@apilink ExpectationNotMet|expectation was not met}
* Returns a [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) that resolves to [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/)
* indicating that the [expectation was met](https://serenity-js.org/api/core/class/ExpectationMet/)
* or that the [expectation was not met](https://serenity-js.org/api/core/class/ExpectationNotMet/)
*

@@ -268,0 +271,0 @@ * @param actual

@@ -9,3 +9,3 @@ import type { JSONObject, JSONValue} from 'tiny-types';

/**
* Used with {@apilink ExpectationOutcome} to describe an {@apilink Expectation} and the arguments it's been executed with.
* Used with [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/) to describe an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) and the arguments it's been executed with.
*

@@ -12,0 +12,0 @@ * @group Expectations

import { ExpectationOutcome } from './ExpectationOutcome';
/**
* Indicates that an {@apilink Expectation} was met.
* Indicates that an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) was met.
*

@@ -6,0 +6,0 @@ * @group Expectations

import { ExpectationOutcome } from './ExpectationOutcome';
/**
* Indicates that an {@apilink Expectation} was not met.
* Indicates that an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) was not met.
*

@@ -6,0 +6,0 @@ * @group Expectations

@@ -6,4 +6,4 @@ import { TinyType } from 'tiny-types';

/**
* An outcome of an {@apilink Expectation},
* which could be either {@apilink ExpectationMet|met} or {@apilink ExpectationNotMet|not met}.
* An outcome of an [`Expectation`](https://serenity-js.org/api/core/class/Expectation/),
* which could be either [met](https://serenity-js.org/api/core/class/ExpectationMet/) or [not met](https://serenity-js.org/api/core/class/ExpectationNotMet/).
*

@@ -10,0 +10,0 @@ * @group Expectations

@@ -14,4 +14,4 @@ import { ListItemNotFoundError, LogicError } from '../../errors';

/**
* Serenity/JS Screenplay Pattern-style wrapper around {@apilink Array}
* and array-like structures - see {@apilink PageElements}.
* Serenity/JS Screenplay Pattern-style wrapper around [`Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)
* and array-like structures - see [`PageElement`](https://serenity-js.org/api/web/class/PageElements/).
*

@@ -157,6 +157,6 @@ * @group Questions

* Serenity/JS Screenplay Pattern-style wrapper around
* a {@apilink ChainableMetaQuestion} representing a collection
* that can be resolved in `Supported_Context_Type` of another {@apilink Question}.
* a [`ChainableMetaQuestion`](https://serenity-js.org/api/core/interface/ChainableMetaQuestion/) representing a collection
* that can be resolved in `Supported_Context_Type` of another [`Question`](https://serenity-js.org/api/core/class/Question/).
*
* For example, {@apilink PageElements.located} returns `MetaList<PageElement>`,
* For example, [`PageElements.located`](https://serenity-js.org/api/web/class/PageElements/#located) returns `MetaList<PageElement>`,
* which allows for the collection of page elements to be resolved in the context

@@ -163,0 +163,0 @@ * of dynamically-provided root element.

@@ -32,4 +32,6 @@ import { type Answerable } from '../Answerable';

*
* @param parameter - An {@link Answerable} representing the masked value.
* @returns A {@link QuestionAdapter} representing the masked value.
* @param parameter
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) representing the masked value.
* @returns
* A [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter) representing the masked value.
*/

@@ -36,0 +38,0 @@ static valueOf(parameter: Answerable<string>): QuestionAdapter<string> {

@@ -5,13 +5,13 @@ import type { Answerable } from '../Answerable';

/**
* A meta-question is a {@apilink Question} that can be answered
* in the context of another {@apilink Answerable},
* A meta-question is a [`Question`](https://serenity-js.org/api/core/class/Question/) that can be answered
* in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable),
* typically to transform its value.
*
* For example, the question {@apilink Text.of} can be answered in the context
* of a {@apilink PageElement} to return its text content.
* For example, the question [`Text.of`](https://serenity-js.org/api/web/class/Text/#of) can be answered in the context
* of a [`PageElement`](https://serenity-js.org/api/web/class/PageElement/) to return its text content.
*
* {@apilink MetaQuestion|Meta questions} are typically used when filtering a {@apilink List}.
* [Meta-questions](https://serenity-js.org/api/core/interface/MetaQuestion/) are typically used when filtering a [`List`](https://serenity-js.org/api/core/class/List/).
*
* ## Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*

@@ -23,6 +23,6 @@ * @group Questions

/**
* Answers the given `MetaQuestion` in the context of another {@apilink Answerable}.
* Answers the given `MetaQuestion` in the context of another [`Answerable`](https://serenity-js.org/api/core/#Answerable).
*
* #### Learn more
* - {@apilink List}
* - [`List`](https://serenity-js.org/api/core/class/List/)
*/

@@ -32,3 +32,3 @@ of(context: Answerable<Supported_Context_Type>): Returned_Question_Type;

/**
* Human-readable description of this {@apilink MetaQuestion},
* Human-readable description of this [`MetaQuestion`](https://serenity-js.org/api/core/interface/MetaQuestion/),
* typically involving the description of the subject.

@@ -35,0 +35,0 @@ *

@@ -12,8 +12,9 @@ import { asyncMap, ValueInspector } from '../../io';

/**
* Creates a single-line description of an {@apilink Activity} by transforming
* Creates a single-line description of an [`Activity`](https://serenity-js.org/api/core/class/Activity/) by transforming
* a [template literal](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#Tagged_templates),
* parameterised with [primitive data types](https://developer.mozilla.org/en-US/docs/Glossary/Primitive),
* [complex data structures](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#objects),
* or any other {@apilink Answerable|Answerables}, into a {@link QuestionAdapter|`QuestionAdapter<string>`}
* that can be used with {@apilink Task.where} and {@apilink Interaction.where} methods.
* or any other [answerables](https://serenity-js.org/api/core/#Answerable),
* into a [`QuestionAdapter<string>`](https://serenity-js.org/api/core/#QuestionAdapter)
* that can be used with [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) and [`Interaction.where`](https://serenity-js.org/api/core/class/Interaction/#where) methods.
*

@@ -32,3 +33,4 @@ * ```ts

*
* Use {@apilink DescriptionFormattingOptions} to trim the descriptions of template parameters.
* Use [`DescriptionFormattingOptions`](http://serenity-js.org/api/core/interface/DescriptionFormattingOptions/)
* to trim the descriptions of template parameters.
* By default, the output is displayed in full.

@@ -50,5 +52,5 @@ *

*
* When `the` is parameterised with {@apilink Question|Questions},
* it retrieves their description by calling {@apilink Question.describedBy}
* in the context of the {@apilink Actor} performing the {@apilink Activity}.
* When `the` is parameterised with [questions](https://serenity-js.org/api/core/class/Question/),
* it retrieves their description by calling [`Question.describedBy`](https://serenity-js.org/api/core/class/Question/#describedBy)
* in the context of the [`Actor`](https://serenity-js.org/api/core/class/Actor/) performing the [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*

@@ -72,3 +74,3 @@ * ```ts

*
* If you'd like the question to be described using its formatted value instead of its description, use {@apilink Question.formattedValue}.
* If you'd like the question to be described using its formatted value instead of its description, use [`Question.formattedValue`](https://serenity-js.org/api/core/class/Question/#formattedValue).
*

@@ -96,3 +98,3 @@ * ```ts

* a custom [`toString()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) method,
* or {@link Answerable|Answerables} resolving to such objects, the `toString()` method is called to produce the resulting description.
* or [answerables](https://serenity-js.org/api/core/#Answerable) resolving to such objects, the `toString()` method is called to produce the resulting description.
*

@@ -126,3 +128,3 @@ * ```ts

* When `the` is parameterised with complex objects that don't have a custom `toString()` method,
* or {@link Answerable}s resolving to such objects,
* or [`Answerable`](https://serenity-js.org/api/core/#Answerable)s resolving to such objects,
* the resulting description will contain a JSON-like string representation of the object.

@@ -150,3 +152,3 @@ *

*
* When `the` is parameterised with {@apilink Masked} values,
* When `the` is parameterised with [masked values](https://serenity-js.org/api/core/class/Masked/),
* the resulting description will contain a masked representation of the values.

@@ -168,7 +170,7 @@ *

*
* - {@apilink Answerable}
* - {@apilink Question}
* - {@apilink Question.describedAs}
* - {@apilink QuestionAdapter}
* - {@apilink Masked}
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Question.describedAs`](https://serenity-js.org/api/core/class/Question/#describedAs)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
* - [`Masked`](https://serenity-js.org/api/core/class/Masked/)
*

@@ -227,3 +229,3 @@ * @group Questions

*
* The mechanism presented below relies on {@apilink QuestionAdapter}.
* The mechanism presented below relies on [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter).
*

@@ -243,6 +245,6 @@ * ```ts

*
* - {@apilink Answerable}
* - {@apilink Question}
* - {@apilink Question.describedAs}
* - {@apilink QuestionAdapter}
* - [`Answerable`](https://serenity-js.org/api/core/#Answerable)
* - [`Question`](https://serenity-js.org/api/core/class/Question/)
* - [`Question.describedAs`](https://serenity-js.org/api/core/class/Question/#describedAs)
* - [`QuestionAdapter`](https://serenity-js.org/api/core/#QuestionAdapter)
*

@@ -249,0 +251,0 @@ * @group Questions

@@ -6,4 +6,4 @@ import type { JSONValue} from 'tiny-types';

/**
* A placeholder value signifying that a {@apilink Question}
* has not been answered by an {@apilink Actor} when producing an {@apilink ExpectationOutcome}.
* A placeholder value signifying that a [`Question`](https://serenity-js.org/api/core/class/Question/)
* has not been answered by an [`Actor`](https://serenity-js.org/api/core/class/Actor/) when producing an [`ExpectationOutcome`](https://serenity-js.org/api/core/class/ExpectationOutcome/).
* This happens when Serenity/JS decides that answering a given question

@@ -10,0 +10,0 @@ * won't affect the outcome.

import type { Question } from './Question';
/**
* Describes a recursively resolved plain JavaScript {@apilink WithAnswerableProperties}.
* Describes a recursively resolved plain JavaScript object with [answerable properties](https://serenity-js.org/api/core/#WithAnswerableProperties).
*
* Typically, used in conjunction with {@apilink Question.fromObject}.
* Typically, used in conjunction with [`Question.fromObject`](https://serenity-js.org/api/core/class/Question/#fromObject).
*

@@ -8,0 +8,0 @@ * ## Using `RecursivelyAnswered`

@@ -7,4 +7,4 @@ import { ImplementationPendingError } from '../errors';

/**
* **Tasks** model **{@apilink Activity|sequences of activities}**
* and help you capture meaningful steps of an {@apilink Actor|actor} workflow
* **Tasks** model **[sequences of activities](https://serenity-js.org/api/core/class/Activity/)**
* and help you capture meaningful steps of an [actor](https://serenity-js.org/api/core/class/Actor/) workflow
* in your domain.

@@ -17,16 +17,16 @@ *

*
* The lowest-level tasks in your abstraction hierarchy should be composed of {@apilink Interaction|interactions}.
* For example, a low-level task to `ProvideUsername` could be composed of an interaction to {@apilink Enter} the value
* into a form field and {@apilink Press} the {@apilink Key.Enter}.
* The lowest-level tasks in your abstraction hierarchy should be composed of [interactions](https://serenity-js.org/api/core/class/Interaction/).
* For example, a low-level task to `ProvideUsername` could be composed of an interaction to [enter](https://serenity-js.org/api/web/class/Enter/) the value
* into a form field and [press](https://serenity-js.org/api/web/class/Press/) the [`Key.Enter`](https://serenity-js.org/api/web/class/Key/#Enter).
*
* Tasks are the core building block of the [Screenplay Pattern](/handbook/design/screenplay-pattern),
* along with {@apilink Actor|Actors}, {@apilink Ability|Abilities}, {@apilink Interaction|Interactions}, and {@apilink Question|Questions}.
* Tasks are the core building block of the [Screenplay Pattern](https://serenity-js.org/handbook/design/screenplay-pattern),
* along with [actors](https://serenity-js.org/api/core/class/Actor/), [abilities](https://serenity-js.org/api/core/class/Ability/), [interactions](https://serenity-js.org/api/core/class/Interaction/), and [questions](https://serenity-js.org/api/core/class/Question/).
*
* ![Screenplay Pattern](/images/design/serenity-js-screenplay-pattern.png)
* ![Screenplay Pattern](https://serenity-js.org/images/design/serenity-js-screenplay-pattern.png)
*
* Learn more about:
* - [User-Centred Design: How a 50 year old technique became the key to scalable test automation](https://janmolak.com/user-centred-design-how-a-50-year-old-technique-became-the-key-to-scalable-test-automation-66a658a36555)
* - {@apilink Actor|Actors}
* - {@apilink Activity|Activities}
* - {@apilink Interaction|Interactions}
* - [Actors](https://serenity-js.org/api/core/class/Actor/)
* - [Activities](https://serenity-js.org/api/core/class/Activity/)
* - [Interactions](https://serenity-js.org/api/core/class/Interaction/)
*

@@ -49,3 +49,3 @@ * ## Defining a task

*
* Note that calling {@apilink Task.where} method without providing the sequence of {@apilink Activity|activities}
* Note that calling [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) method without providing the sequence of [activities](https://serenity-js.org/api/core/class/Activity/)
* produces a Task that's marked as "pending" in the test report.

@@ -78,3 +78,3 @@ *

*
* The easiest way to implement such task, and any custom Serenity/JS task for this matter, is to use the {@apilink Task.where} method to compose the lower-level activities:
* The easiest way to implement such task, and any custom Serenity/JS task for this matter, is to use the [`Task.where`](https://serenity-js.org/api/core/class/Task/#where) method to compose the lower-level activities:
*

@@ -101,5 +101,5 @@ * ```typescript

*
* Conveniently, [Serenity/JS modules](/handbook/about/architecture) provide low-level activities that
* Conveniently, [Serenity/JS modules](https://serenity-js.org/handbook/getting-started/architecture) provide low-level activities that
* allow actors to interact with the various interfaces of the system under test.
* For example, [Serenity/JS Web module](/api/web) ships with activities such as {@apilink Click} or {@apilink Enter},
* For example, [Serenity/JS Web module](https://serenity-js.org/api/web) ships with activities such as [`Click`](https://serenity-js.org/api/web/class/Click/) or [`Enter`](https://serenity-js.org/api/web/class/Enter/),
* which we can incorporate into our task definitions just like any other activities:

@@ -198,3 +198,3 @@ *

/**
* Instructs the provided {@apilink Actor} to perform this {@apilink Task}.
* Instructs the provided [`Actor`](https://serenity-js.org/api/core/class/Actor/) to perform this [`Task`](https://serenity-js.org/api/core/class/Task/).
*

@@ -204,5 +204,5 @@ * @param {PerformsActivities} actor

* #### Learn more
* - {@apilink Actor}
* - {@apilink PerformsActivities}
* - {@apilink Activity}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`PerformsActivities`](https://serenity-js.org/api/core/interface/PerformsActivities/)
* - [`Activity`](https://serenity-js.org/api/core/class/Activity/)
*/

@@ -209,0 +209,0 @@ abstract performAs(actor: PerformsActivities): Promise<void>;

@@ -7,6 +7,6 @@ import type { Discardable } from '../../abilities';

/**
* An {@apilink Ability} that enables an {@apilink Actor} to schedule a callback function
* An [`Ability`](https://serenity-js.org/api/core/class/Ability/) that enables an [`Actor`](https://serenity-js.org/api/core/class/Actor/) to schedule a callback function
* to be executed with a delay, or until some condition is met.
*
* Used internally by the {@apilink Interaction|interaction} to {@apilink Wait}.
* Used internally by the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`Wait`](https://serenity-js.org/api/core/class/Wait/).
*

@@ -13,0 +13,0 @@ * @experimental

@@ -15,9 +15,9 @@ import { ensure, isGreaterThanOrEqualTo, isInRange } from 'tiny-types';

/**
* `Wait` is a synchronisation statement that instructs the {@apilink Actor|actor}
* to wait before proceeding with their next {@apilink Activity|activity},
* either for a set {@apilink Duration|duration}, or until a given {@apilink Expectation|expectation} is met.
* `Wait` is a synchronisation statement that instructs the [actor](https://serenity-js.org/api/core/class/Actor/)
* to wait before proceeding with their next [activity](https://serenity-js.org/api/core/class/Activity/),
* either for a set [duration](https://serenity-js.org/api/core/class/Duration/), or until a given [expectation](https://serenity-js.org/api/core/class/Expectation/) is met.
*
* You can configure the timeout of the interaction to {@apilink Wait.until}:
* - globally, using {@apilink SerenityConfig.interactionTimeout}
* - locally, on a per-interaction basis using {@apilink Wait.upTo}
* You can configure the timeout of the interaction to [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until):
* - globally, using [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
* - locally, on a per-interaction basis using [`Wait.upTo`](https://serenity-js.org/api/core/class/Wait/#upTo)
*

@@ -102,3 +102,4 @@ * :::tip Portable waiting

*
* `Wait.until` makes the {@apilink Actor} keep asking the {@apilink Question},
* `Wait.until` makes the [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* keep asking the [`Question`](https://serenity-js.org/api/core/class/Question/),
* in this case `Text.of(App.status)`, until the answer meets

@@ -130,5 +131,5 @@ * the expectation, or a timeout expires (default: 5s).

* ## Learn more
* - {@apilink SerenityConfig.interactionTimeout}
* - {@apilink Duration}
* - {@apilink Expectation}
* - [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
* - [`Expectation`](https://serenity-js.org/api/core/class/Expectation/)
*

@@ -140,3 +141,3 @@ * @group Time

/**
* Minimum timeout that can be used with {@apilink Wait.until},
* Minimum timeout that can be used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until),
* defaults to 250 milliseconds,

@@ -147,6 +148,6 @@ */

/**
* The amount of time {@apilink Wait.until} should wait between condition checks,
* The amount of time [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until) should wait between condition checks,
* defaults to 500ms.
*
* Use {@apilink WaitUntil.pollingEvery} to override it for a given interaction.
* Use [`WaitUntil.pollingEvery`](https://serenity-js.org/api/core/class/WaitUntil/#pollingEvery) to override it for a given interaction.
*

@@ -158,3 +159,3 @@ * @type {Duration}

/**
* Minimum polling interval of 50ms between condition checks, used with {@apilink Wait.until}.
* Minimum polling interval of 50ms between condition checks, used with [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until).
*/

@@ -164,7 +165,7 @@ static readonly minimumPollingInterval = Duration.ofMilliseconds(50);

/**
* Instantiates a version of this {@apilink Interaction}
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* configured to wait for a set duration.
*
* @param duration
* A set duration the {@apilink Actor} should wait for before proceeding.
* A set duration the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should wait for before proceeding.
*/

@@ -176,3 +177,3 @@ static for(duration: Answerable<Duration>): Interaction {

/**
* Instantiates a version of this {@apilink Interaction}
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/)
* configured to wait until the answer to the question `actual` meets the `expectation`,

@@ -182,3 +183,3 @@ * or the `timeout` expires.

* @param timeout
* Custom timeout to override {@apilink SerenityConfig.interactionTimeout}
* Custom timeout to override [`SerenityConfig.interactionTimeout`](https://serenity-js.org/api/core/class/SerenityConfig/#interactionTimeout)
*/

@@ -193,4 +194,4 @@ static upTo(timeout: Duration): { until: <Actual>(actual: Answerable<Actual>, expectation: Expectation<Actual>) => WaitUntil<Actual> } {

/**
* Instantiates a version of this {@apilink Interaction} configured to
* poll every {@apilink Wait.defaultPollingInterval} for the result of the provided
* Instantiates a version of this [`Interaction`](https://serenity-js.org/api/core/class/Interaction/) configured to
* poll every [`Wait.defaultPollingInterval`](https://serenity-js.org/api/core/class/Wait/#defaultPollingInterval) for the result of the provided
* question (`actual`) until it meets the `expectation`,

@@ -200,7 +201,7 @@ * or the timeout expires.

* @param actual
* An {@apilink Answerable} that the {@apilink Actor} will keep answering
* until the answer meets the {@apilink Expectation} provided, or the timeout expires.
* An [`Answerable`](https://serenity-js.org/api/core/#Answerable) that the [`Actor`](https://serenity-js.org/api/core/class/Actor/) will keep answering
* until the answer meets the [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) provided, or the timeout expires.
*
* @param expectation
* An {@apilink Expectation} to be met before proceeding
* An [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) to be met before proceeding
*/

@@ -228,10 +229,11 @@ static until<Actual>(actual: Answerable<Actual>, expectation: Expectation<Actual>): WaitUntil<Actual> {

/**
* Synchronisation statement that instructs the {@apilink Actor} to wait before proceeding until a given {@apilink Expectation} is met.
* Synchronisation statement that instructs the [`Actor`](https://serenity-js.org/api/core/class/Actor/) to wait before proceeding until a given [`Expectation`](https://serenity-js.org/api/core/class/Expectation/) is met.
*
* :::tip
* To instantiate {@apilink Interaction|interaction} to {@apilink WaitUntil}, use the factory method {@apilink Wait.until}.
* To instantiate the [interaction](https://serenity-js.org/api/core/class/Interaction/) to [`WaitUntil`](https://serenity-js.org/api/core/class/WaitUntil/),
* use the factory method [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until).
* :::
*
* ## Learn more
* * {@apilink Wait.until}
* * [`Wait.until`](https://serenity-js.org/api/core/class/Wait/#until)
*

@@ -258,3 +260,3 @@ * @group Time

/**
* Configure how frequently the {@apilink Actor} should check if the answer meets the expectation.
* Configure how frequently the [`Actor`](https://serenity-js.org/api/core/class/Actor/) should check if the answer meets the expectation.
*

@@ -261,0 +263,0 @@ * Note that the polling interval defines the delay between subsequent attempts

@@ -7,3 +7,3 @@ import { ensure, isDefined } from 'tiny-types';

/**
* A {@apilink Clock} tells the time. This abstraction allows Serenity/JS to have a single place
* A [`Clock`](https://serenity-js.org/api/core/class/Clock/) tells the time. This abstraction allows Serenity/JS to have a single place
* in the framework responsible for telling the time, and one that can be easily mocked for internal testing.

@@ -16,4 +16,4 @@ *

* ## Learn more
* - {@apilink Timestamp}
* - {@apilink Duration}
* - [`Timestamp`](https://serenity-js.org/api/core/class/Timestamp/)
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
*

@@ -31,3 +31,3 @@ * @group Time

* Sets the clock ahead to force early resolution of promises
* returned by {@apilink Clock.waitFor};
* returned by [`Clock.waitFor`](https://serenity-js.org/api/core/class/Clock/#waitFor).
*

@@ -34,0 +34,0 @@ * Useful for test purposes to avoid unnecessary delays.

@@ -5,3 +5,3 @@ import type { JSONObject} from 'tiny-types';

/**
* Represents a duration in milliseconds between two {@apilink Timestamp|timestamps}.
* Represents a duration in milliseconds between two [timestamps](https://serenity-js.org/api/core/class/Timestamp/).
*

@@ -8,0 +8,0 @@ * @group Time

@@ -9,6 +9,6 @@ import { ensure, isDefined, isInstanceOf, Predicate, TinyType } from 'tiny-types';

*
* `Timestamp` makes it easier for you to work with information related to time, like {@apilink DomainEvent|domain events}.
* `Timestamp` makes it easier for you to work with information related to time, like [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/).
*
* ## Learn more
* - {@apilink Duration}
* - [`Duration`](https://serenity-js.org/api/core/class/Duration/)
* - [Date](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)

@@ -15,0 +15,0 @@ *

import type { Timestamp } from './models';
/**
* Describes an {@apilink Actor} or a supporting class capable of telling
* Describes an [`Actor`](https://serenity-js.org/api/core/class/Actor/) or a supporting class capable of telling
* the current wall clock time.
*
* ## Learn more
* - {@apilink Actor}
* - {@apilink Serenity}
* - {@apilink Stage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Serenity`](https://serenity-js.org/api/core/class/Serenity/)
* - [`Stage`](https://serenity-js.org/api/core/class/Stage/)
*

@@ -12,0 +12,0 @@ * @group Time

@@ -5,4 +5,4 @@ import type { Answerable } from './Answerable';

/**
* Describes a plain JavaScript object with {@apilink Answerable} properties.
* Typically, used in conjunction with {@apilink RecursivelyAnswered} and {@apilink Question.fromObject}.
* Describes a plain JavaScript object with [`Answerable`](https://serenity-js.org/api/core/#Answerable) properties.
* Typically, used in conjunction with [`RecursivelyAnswered`](https://serenity-js.org/api/core/#RecursivelyAnswered) and [`Question.fromObject`](https://serenity-js.org/api/core/class/Question/#fromObject).
*

@@ -9,0 +9,0 @@ * ```ts

@@ -124,10 +124,10 @@ import { ensure, isDefined, isInstanceOf, property } from 'tiny-types';

/**
* Re-configures Serenity/JS with a new {@apilink Cast} of {@apilink Actor|actors}
* you want to use in any subsequent calls to {@apilink actorCalled}.
* Re-configures Serenity/JS with a new [cast](https://serenity-js.org/api/core/class/Cast/) of [actors](https://serenity-js.org/api/core/class/Actor/)
* you want to use in any subsequent calls to [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/).
*
* For your convenience, use {@apilink engage} function instead,
* which provides an alternative to calling {@apilink Actor.whoCan} directly in your tests
* For your convenience, use [`engage`](https://serenity-js.org/api/core/function/engage/) function instead,
* which provides an alternative to calling [`Actor.whoCan`](https://serenity-js.org/api/core/class/Actor/#whoCan) directly in your tests
* and is typically invoked in a "before all" or "before each" hook of your test runner of choice.
*
* If your implementation of the {@apilink Cast} interface is stateless,
* If your implementation of the [cast](https://serenity-js.org/api/core/class/Cast/) interface is stateless,
* you can invoke this function just once before your entire test suite is executed, see

@@ -138,3 +138,3 @@ * - [`beforeAll`](https://jasmine.github.io/api/3.6/global.html#beforeAll) in Jasmine,

*
* However, if your {@apilink Cast} holds state that you want to reset before each scenario,
* However, if your [cast](https://serenity-js.org/api/core/class/Cast/) holds state that you want to reset before each scenario,
* it's better to invoke `engage` before each test using:

@@ -186,5 +186,5 @@ * - [`beforeEach`](https://jasmine.github.io/api/3.6/global.html#beforeEach) in Jasmine

* ## Learn more
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink engage}
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*

@@ -200,6 +200,6 @@ * @param actors

/**
* Instantiates or retrieves an {@apilink Actor}
* Instantiates or retrieves an [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* called `name` if one has already been instantiated.
*
* For your convenience, use {@apilink actorCalled} function instead.
* For your convenience, use [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) function instead.
*

@@ -250,6 +250,6 @@ * ## Usage with Mocha

*
* - {@apilink engage}
* - {@apilink Actor}
* - {@apilink Cast}
* - {@apilink actorCalled}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
*

@@ -265,7 +265,7 @@ * @param name

* Retrieves an actor who was last instantiated or retrieved
* using {@apilink Serenity.theActorCalled}.
* using [`Serenity.theActorCalled`](https://serenity-js.org/api/core/class/Serenity/#theActorCalled).
*
* This function is particularly useful when automating Cucumber scenarios.
*
* For your convenience, use {@apilink actorInTheSpotlight} function instead.
* For your convenience, use [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/) function instead.
*

@@ -291,7 +291,7 @@ * ## Usage with Cucumber

*
* - {@apilink engage}
* - {@apilink actorCalled}
* - {@apilink actorInTheSpotlight}
* - {@apilink Actor}
* - {@apilink Cast}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/)
* - [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/)
* - [`Actor`](https://serenity-js.org/api/core/class/Actor/)
* - [`Cast`](https://serenity-js.org/api/core/class/Cast/)
*/

@@ -298,0 +298,0 @@ theActorInTheSpotlight(): Actor {

import type { Actor } from '../screenplay';
/**
* Serenity/JS uses the concept of a _**cast of actors**_ to centralise the process of configuring the {@apilink Actor|actors} and assigning their {@apilink Ability|abilities}.
* Serenity/JS uses the concept of a _**cast of actors**_ to centralise the process of configuring the [actors](https://serenity-js.org/api/core/class/Actor/) and assigning their [abilities](https://serenity-js.org/api/core/class/Ability/).
*
* When you invoke {@apilink actorCalled} for the first time in a test scenario,
* Serenity/JS {@apilink Actor|instantiates a new actor}
* and passes it through the {@apilink Cast.prepare} method.
* When you invoke [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) for the first time in a test scenario,
* Serenity/JS [instantiates a new actor](https://serenity-js.org/api/core/class/Actor/)
* and passes it through the [`Cast.prepare`](https://serenity-js.org/api/core/class/Cast/#prepare) method.
* Specifying a **custom cast** gives you an opportunity to configure the actor with the abilities

@@ -21,3 +21,3 @@ * they need before it's returned to the caller,

* When working with relatively **simple scenarios** where all the actors should always receive the same set of abilities,
* you can {@apilink configure} Serenity/JS to use a generic {@apilink Cast.where}:
* you can [`engage`](https://serenity-js.org/api/core/function/engage/) Serenity/JS to use a generic [`Cast.where`](https://serenity-js.org/api/core/class/Cast/#where):
*

@@ -36,24 +36,24 @@ * ```typescript

*
* If you're using Serenity/JS with one of the [supported test runners](/handbook/test-runners/),
* If you're using Serenity/JS with one of the [supported test runners](https://serenity-js.org/handbook/test-runners/),
* you might prefer to use your test runner's native configuration mechanism
* instead of invoking {@apilink configure} explicitly.
* instead of invoking [`engage`](https://serenity-js.org/api/core/function/engage/) explicitly.
*
* :::tip configure vs engage
* Calling {@apilink configure} resets the entire Serenity/JS configuration
* Calling [`configure`](https://serenity-js.org/api/core/function/configure/) resets the entire Serenity/JS configuration
* and should be done exactly once in your entire test suite.
* If you want to retain the configuration but reset the cast, use {@apilink engage} instead.
* If you want to retain the configuration but reset the cast, use [`engage`](https://serenity-js.org/api/core/function/engage/) instead.
* :::
*
* Learn more about configuring Serenity/JS with:
* - [Cucumber.js](/handbook/test-runners/cucumber)
* - [Jasmine](/handbook/test-runners/jasmine)
* - [Mocha](/handbook/test-runners/mocha)
* - [Playwright Test](/handbook/test-runners/playwright-test)
* - [Protractor](/handbook/test-runners/protractor)
* - [WebdriverIO](/handbook/test-runners/webdriverio)
* - [Cucumber.js](https://serenity-js.org/handbook/test-runners/cucumber)
* - [Jasmine](https://serenity-js.org/handbook/test-runners/jasmine)
* - [Mocha](https://serenity-js.org/handbook/test-runners/mocha)
* - [Playwright Test](https://serenity-js.org/handbook/test-runners/playwright-test)
* - [Protractor](https://serenity-js.org/handbook/test-runners/protractor)
* - [WebdriverIO](https://serenity-js.org/handbook/test-runners/webdriverio)
*
* ## Engaging a cast of actors for the specific scenario
*
* If you want to retain Serenity/JS configuration, but set a different {@apilink Cast}
* for the given test scenario you should use {@apilink engage} instead of {@apilink configure}.
* If you want to retain Serenity/JS configuration, but set a different [cast](https://serenity-js.org/api/core/class/Cast/)
* for the given test scenario you should use [`engage`](https://serenity-js.org/api/core/function/engage/) instead of [`configure`](https://serenity-js.org/api/core/function/configure/).
*

@@ -82,6 +82,6 @@ * This approach is useful for example when your entire test suite is dedicated to interacting with the system

* In **complex scenarios** that involve multiple **actors with different abilities**,
* you should create a custom implementation of the {@apilink Cast}.
* you should create a custom implementation of the [cast](https://serenity-js.org/api/core/class/Cast/).
*
* Examples of such scenarios include those where actors use separate browser instances, interact with different REST APIs,
* or start with different data in their {@apilink Notepad|notepads}.
* or start with different data in their [notepads](https://serenity-js.org/api/core/class/Notepad/).
*

@@ -170,3 +170,3 @@ * ### Defining a custom cast of actors interacting with a Web UI

/**
* Configures an {@apilink Actor} instantiated when {@apilink Stage.actor} is invoked.
* Configures an [`Actor`](https://serenity-js.org/api/core/class/Actor/) instantiated when [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor) is invoked.
*

@@ -176,5 +176,5 @@ * @param actor

* #### Learn more
* - {@apilink engage}
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*/
abstract prepare(actor: Actor): Actor;
}

@@ -23,3 +23,3 @@ import type { WriteFileOptions } from 'fs';

/**
* Stores any {@apilink Artifact|artifacts} emitted via {@apilink ArtifactGenerated} events on the {@apilink FileSystem}.
* Stores any artifacts emitted via [`ArtifactGenerated`](https://serenity-js.org/api/core-events/class/ArtifactGenerated/) events on the file system.
*

@@ -134,3 +134,3 @@ * ## Registering Artifact Archiver programmatically

* @param {Stage} [stage]
* The stage this {@apilink StageCrewMember} should be assigned to
* The stage this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) should be assigned to
*/

@@ -149,5 +149,5 @@ constructor(

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink StageManager}.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/).
*
* @see {@apilink StageCrewMember}
* @see [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*

@@ -154,0 +154,0 @@ * @listens {ArtifactGenerated}

@@ -10,3 +10,3 @@ import type { Writable } from 'stream';

/**
* Serialises all the {@apilink DomainEvent} objects it receives and streams
* Serialises all the [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects it receives and streams
* them as [ndjson](http://ndjson.org/) to the output stream or file.

@@ -105,3 +105,3 @@ *

/**
* Instantiates a `StreamReporter` outputting a stream of {@apilink DomainEvent|domain events}
* Instantiates a `StreamReporter` outputting a stream of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* to an `outputFile` at the given location.

@@ -125,3 +125,3 @@ *

* @param {Stage} [stage]
* The stage this {@apilink StageCrewMember} should be assigned to
* The stage this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) should be assigned to
*/

@@ -135,9 +135,9 @@ constructor(

/**
* Creates a new instance of this {@apilink StageCrewMember} and assigns it to a given {@apilink Stage}.
* Creates a new instance of this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) and assigns it to a given [`Stage`](https://serenity-js.org/api/core/class/Stage/).
*
* @param stage
* An instance of a {@apilink Stage} this {@apilink StageCrewMember} will be assigned to
* An instance of a [`Stage`](https://serenity-js.org/api/core/class/Stage/) this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) will be assigned to
*
* @returns {StageCrewMember}
* A new instance of this {@apilink StageCrewMember}
* A new instance of this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*/

@@ -149,3 +149,3 @@ assignedTo(stage: Stage): StageCrewMember {

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink StageManager}.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/).
*

@@ -152,0 +152,0 @@ * @listens {DomainEvent}

@@ -5,3 +5,3 @@ import type { Actor } from '../screenplay';

/**
* Produces no-op actors with no special {@apilink Ability}
* Produces no-op actors with no special [`Ability`](https://serenity-js.org/api/core/class/Ability/)
*/

@@ -8,0 +8,0 @@ export class Extras implements Cast {

import type { DomainEvent } from '../events';
/**
* A {@apilink StageCrewMember} that can listen and react to {@apilink DomainEvent|DomainEvents}
* A [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) that can listen and react to [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
*
* ## Learn more
*
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink configure}
* - {@apilink SerenityConfig.crew}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
*

@@ -18,4 +18,4 @@ * @group Stage

/**
* Handles {@apilink DomainEvent} objects emitted by the {@apilink Stage}
* that this {@apilink StageCrewMember} is assigned to.
* Handles [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects emitted by the [`Stage`](https://serenity-js.org/api/core/class/Stage/)
* that this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) is assigned to.
*

@@ -22,0 +22,0 @@ * @param event

@@ -25,13 +25,13 @@ import { ensure, isDefined } from 'tiny-types';

/**
* Stage is the place where {@apilink Actor|actors} perform.
* Stage is the place where [actors](https://serenity-js.org/api/core/class/Actor/) perform.
*
* In more technical terms, the Stage is the main event bus propagating {@apilink DomainEvent|DomainEvents}
* to {@apilink Actor|Actors} it instantiates and {@apilink StageCrewMember|StageCrewMembers} that have been registered with it.
* In more technical terms, the Stage is the main event bus propagating [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* to [actors](https://serenity-js.org/api/core/class/Actor/) it instantiates and [stage crew members](https://serenity-js.org/api/core/interface/StageCrewMember/) that have been registered with it.
*
* It is unlikely that you'll ever need to interact with the `Stage` directly in your tests. Instead, you'll use functions like
* {@apilink actorCalled} and {@apilink actorInTheSpotlight}.
* [`actorCalled`](https://serenity-js.org/api/core/function/actorCalled/) and [`actorInTheSpotlight`](https://serenity-js.org/api/core/function/actorInTheSpotlight/).
*
* ## Learn more
* - {@apilink configure}
* - {@apilink engage}
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`engage`](https://serenity-js.org/api/core/function/engage/)
*

@@ -59,3 +59,3 @@ * @group Stage

/**
* The most recent actor referenced via the {@apilink actor} method
* The most recent actor referenced via the [`Actor`](https://serenity-js.org/api/core/class/Actor/) method
*/

@@ -90,3 +90,3 @@ private actorInTheSpotlight: Actor = undefined;

/**
* An alias for {@apilink Stage.actor}
* An alias for [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor)
*

@@ -100,3 +100,3 @@ * @param name

/**
* Instantiates a new {@apilink Actor} or fetches an existing one
* Instantiates a new [`Actor`](https://serenity-js.org/api/core/class/Actor/) or fetches an existing one
* identified by their name if they've already been instantiated.

@@ -138,7 +138,7 @@ *

/**
* Returns the last {@apilink Actor} instantiated via {@apilink Stage.actor}.
* Returns the last [`Actor`](https://serenity-js.org/api/core/class/Actor/) instantiated via [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor).
* Useful when you don't can't or choose not to reference the actor by their name.
*
* @throws {LogicError}
* If no {@apilink Actor} has been activated yet
* @throws [`LogicError`](https://serenity-js.org/api/core/class/LogicError/)
* If no [`Actor`](https://serenity-js.org/api/core/class/Actor/) has been activated yet
*/

@@ -154,3 +154,3 @@ theActorInTheSpotlight(): Actor {

/**
* Returns `true` if there is an {@apilink Actor} in the spotlight, `false` otherwise.
* Returns `true` if there is an [`Actor`](https://serenity-js.org/api/core/class/Actor/) in the spotlight, `false` otherwise.
*/

@@ -162,4 +162,4 @@ theShowHasStarted(): boolean {

/**
* Configures the Stage to prepare {@apilink Actor|Actors}
* instantiated via {@apilink Stage.actor} using the provided {@apilink Cast}.
* Configures the Stage to prepare [actors](https://serenity-js.org/api/core/class/Actor/)
* instantiated via [`Stage.actor`](https://serenity-js.org/api/core/class/Stage/#actor) using the provided [cast](https://serenity-js.org/api/core/class/Cast/).
*

@@ -175,4 +175,4 @@ * @param actors

/**
* Assigns listeners to be notified of {@apilink DomainEvent|DomainEvents}
* emitted via {@apilink Stage.announce}.s
* Assigns listeners to be notified of [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/)
* emitted via [`Stage.announce`](https://serenity-js.org/api/core/class/Stage/#announce).s
*

@@ -217,3 +217,3 @@ * @param listeners

* Returns current time. This method should be used whenever
* {@apilink DomainEvent} objects are instantiated by you programmatically.
* [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/) objects are instantiated by you programmatically.
*/

@@ -225,11 +225,10 @@ currentTime(): Timestamp {

/**
* Generates and remembers a {@apilink CorrelationId}
* Generates and remembers a `CorrelationId`
* for the current scene.
*
* This method should be used in custom test runner adapters
* when instantiating a {@apilink SceneStarts} event.
* when instantiating a [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) event.
*
* #### Learn more
* - {@apilink Stage.currentSceneId}
* - {@apilink CorrelationId}
* - [`Stage.currentSceneId`](https://serenity-js.org/api/core/class/Stage/#currentSceneId)
*/

@@ -244,6 +243,6 @@ assignNewSceneId(): CorrelationId {

/**
* Returns the {@apilink CorrelationId} for the current scene.
* Returns the `CorrelationId` for the current scene.
*
* #### Learn more
* - {@apilink Stage.assignNewSceneId}
* - [`Stage.assignNewSceneId`](https://serenity-js.org/api/core/class/Stage/#assignNewSceneId)
*/

@@ -255,10 +254,10 @@ currentSceneId(): CorrelationId {

/**
* Generates and remembers a {@apilink CorrelationId}
* for the current {@apilink Activity}.
* Generates and remembers a `CorrelationId`
* for the current [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* This method should be used in custom test runner adapters
* when instantiating the {@apilink ActivityStarts} event.
* when instantiating the [ActivityStarts](https://serenity-js.org/api/core-events/class/ActivityStarts/) event.
*
* #### Learn more
* - {@apilink Stage.currentActivityId}
* - [`Stage.currentActivityId`](https://serenity-js.org/api/core/class/Stage/#currentActivityId)
*/

@@ -275,6 +274,6 @@ assignNewActivityId(activityDetails: ActivityDetails): CorrelationId {

/**
* Returns the {@apilink CorrelationId} for the current {@apilink Activity}.
* Returns the `CorrelationId` for the current [`Activity`](https://serenity-js.org/api/core/class/Activity/).
*
* #### Learn more
* - {@apilink Stage.assignNewSceneId}
* - [`Stage.assignNewSceneId`](https://serenity-js.org/api/core/class/Stage/#assignNewSceneId)
*/

@@ -281,0 +280,0 @@ currentActivityId(): CorrelationId {

@@ -5,8 +5,8 @@ import type { ListensToDomainEvents } from './ListensToDomainEvents';

/**
* You can think of the {@apilink StageCrewMember} as an in-memory microservice that reacts to {@apilink DomainEvent|domain events},
* published by the {@apilink StageManager}, and originally emitted by {@apilink Actor|actors} performing activities and Serenity/JS
* test runner adapters notifying the framework about test scenario-specific events like {@apilink SceneStarts} or {@apilink SceneFinishes}.
* You can think of the [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) as an in-memory microservice that reacts to [Serenity/JS domain events](https://serenity-js.org/api/core-events/class/DomainEvent/),
* published by the [`StageManager`](https://serenity-js.org/api/core/class/StageManager/), and originally emitted by [actors](https://serenity-js.org/api/core/class/Actor/) performing activities and Serenity/JS
* test runner adapters notifying the framework about test scenario-specific events like [SceneStarts](https://serenity-js.org/api/core-events/class/SceneStarts/) or [SceneFinishes](https://serenity-js.org/api/core-events/class/SceneFinishes/).
*
* Every {@apilink StageCrewMember} receives a reference to the {@apilink Stage},
* and therefore {@apilink StageManager} as well, which enables them to emit {@apilink DomainEvent}s back.
* Every [stage crew member](https://serenity-js.org/api/core/interface/StageCrewMember/) receives a reference to the [stage](https://serenity-js.org/api/core/class/Stage/),
* and therefore the [stage manager](https://serenity-js.org/api/core/class/StageManager/), which enables them to emit [domain events](https://serenity-js.org/api/core-events/class/DomainEvent/) back.
*

@@ -66,7 +66,7 @@ * This interface is useful when you're interested in implementing custom Serenity/JS reporters or supporting services.

* ## Learn more
* - {@apilink SerenityConfig.crew}
* - {@apilink configure}
* - {@apilink StageCrewMemberBuilder}
* - {@apilink ListensToDomainEvents}
* - {@apilink DomainEvent}
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
* - [`configure`](https://serenity-js.org/api/core/function/configure/)
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
* - [`ListensToDomainEvents`](https://serenity-js.org/api/core/interface/ListensToDomainEvents/)
* - [`DomainEvent`](https://serenity-js.org/api/core-events/class/DomainEvent/)
*

@@ -78,5 +78,5 @@ * @group Stage

/**
* Assigns a {@apilink Stage} to this {@apilink StageCrewMember}
* Assigns a [`Stage`](https://serenity-js.org/api/core/class/Stage/) to this [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
*/
assignedTo(stage: Stage): StageCrewMember;
}

@@ -5,11 +5,11 @@ import type { ListensToDomainEvents } from './ListensToDomainEvents';

/**
* Use a {@apilink StageCrewMemberBuilder} to configure complex {@apilink StageCrewMember} objects.
* Use a [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/) to configure complex [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/) objects.
*
* Useful when you're interested in implementing custom reporters with multiple configuration options.
* See {@apilink ConsoleReporter} for an example.
* See [`ConsoleReporter`](https://serenity-js.org/api/console-reporter/class/ConsoleReporter/) for an example.
*
* ## Learn more
* - {@apilink StageCrewMember}
* - {@apilink StageCrewMemberBuilderDependencies}
* - {@apilink SerenityConfig.crew}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/)
* - [`StageCrewMemberBuilderDependencies`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilderDependencies/)
* - [`SerenityConfig.crew`](https://serenity-js.org/api/core/class/SerenityConfig/#crew)
*

@@ -21,6 +21,6 @@ * @group Stage

/**
* Instantiates a {@apilink StageCrewMember}, giving it access to shared dependencies
* such as {@apilink Stage} or {@apilink OutputStream}
* Instantiates a [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMember/), giving it access to shared dependencies
* such as [`Stage`](https://serenity-js.org/api/core/class/Stage/) or [`OutputStream`](https://serenity-js.org/api/core-adapter/interface/OutputStream/)
*/
build(dependencies: StageCrewMemberBuilderDependencies): T;
}

@@ -6,6 +6,6 @@ import type { OutputStream } from '../adapter';

/**
* Dependencies injected by {@apilink Serenity.configure} into {@apilink StageCrewMemberBuilder.build}
* Dependencies injected by [`Serenity.configure`](https://serenity-js.org/api/core/class/Serenity/#configure) into [`StageCrewMemberBuilder.build`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/#build)
*
* ## Learn more
* - {@apilink StageCrewMemberBuilder}
* - [`StageCrewMember`](https://serenity-js.org/api/core/interface/StageCrewMemberBuilder/)
*

@@ -12,0 +12,0 @@ * @group Stage

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc