@serenity-js/core 3.14.1 → 3.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,32 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [3.15.0](https://github.com/serenity-js/serenity-js/compare/v3.14.2...v3.15.0) (2024-01-12)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **deps:** update dependency moment to v2.30.1 ([42ec5c3](https://github.com/serenity-js/serenity-js/commit/42ec5c3b0052a0f939eec761a06ad83c632c7eb8))
12
+
13
+
14
+ ### Features
15
+
16
+ * **core:** enabled ClassLoader to instantiate StageCrewMembers using their factory functions ([f98bd42](https://github.com/serenity-js/serenity-js/commit/f98bd4206e768d5840d6e7952c61f7a2da1b144e)), closes [#1147](https://github.com/serenity-js/serenity-js/issues/1147)
17
+ * **core:** timestamps can be represented as ISO8601-compatible strings ([b19e064](https://github.com/serenity-js/serenity-js/commit/b19e064abdbf5073bc701dd238098aa31ba7fc5a))
18
+ * **serenity-bdd:** support for Serenity BDD 4 ([c15c366](https://github.com/serenity-js/serenity-js/commit/c15c3660f957c21c367f8f27218a05d3fbca78de)), closes [#1147](https://github.com/serenity-js/serenity-js/issues/1147)
19
+
20
+
21
+
22
+
23
+
24
+ ## [3.14.2](https://github.com/serenity-js/serenity-js/compare/v3.14.1...v3.14.2) (2023-12-12)
25
+
26
+ **Note:** Version bump only for package @serenity-js/core
27
+
28
+
29
+
30
+
31
+
6
32
  ## [3.14.1](https://github.com/serenity-js/serenity-js/compare/v3.14.0...v3.14.1) (2023-12-10)
7
33
 
8
34
 
package/README.md CHANGED
@@ -12,7 +12,7 @@ of complex software systems faster, more collaborative and easier to scale.
12
12
  - [Serenity/JS web testing tutorial](https://serenity-js.org/handbook/web-testing/your-first-web-scenario)
13
13
  - [Serenity/JS Handbook](https://serenity-js.org/handbook) and [Getting Started guides](https://serenity-js.org/handbook/getting-started/)
14
14
  - [API documentation](https://serenity-js.org/api/core)
15
- - [Serenity/JS Project Templates on GitHub](https://serenity-js.org/handbook/getting-started#serenityjs-project-templates)
15
+ - [Serenity/JS Project Templates on GitHub](https://serenity-js.org/handbook/getting-started/project-templates/)
16
16
 
17
17
  👋 Join the Serenity/JS Community!
18
18
  - Meet other Serenity/JS developers and maintainers on the [Serenity/JS Community chat channel](https://matrix.to/#/#serenity-js:gitter.im),
package/lib/Serenity.d.ts CHANGED
@@ -15,11 +15,13 @@ export declare class Serenity implements EmitsDomainEvents {
15
15
  private static defaultInteractionTimeout;
16
16
  private static defaultActors;
17
17
  private stage;
18
+ private readonly fileSystem;
18
19
  private outputStream;
19
20
  private readonly classLoader;
20
21
  private readonly workingDirectory;
21
22
  /**
22
23
  * @param clock
24
+ * @param cwd
23
25
  */
24
26
  constructor(clock?: Clock, cwd?: string);
25
27
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Serenity.d.ts","sourceRoot":"","sources":["../src/Serenity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAA6D,IAAI,EAAE,MAAM,MAAM,CAAC;AACvF,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,KAAK,EAAY,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAKzC;;GAEG;AACH,qBAAa,QAAS,YAAW,iBAAiB;IAe1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAd1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoC;IACpE,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAA4B;IACpE,OAAO,CAAC,MAAM,CAAC,aAAa,CAA+B;IAE3D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,YAAY,CAAiC;IAErD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAExC;;OAEG;gBAEkB,KAAK,GAAE,KAAmB,EAC3C,GAAG,GAAE,MAAsB;IAkB/B;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAoDvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkEG;IACH,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAInC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,sBAAsB,IAAI,KAAK;IAI/B,QAAQ,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI;IAI7C,WAAW,IAAI,SAAS;IAIxB,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,aAAa;IAI/B,mBAAmB,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa;IAIpE,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE;IAItG;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,GAAG,IAAI,IAAI;CAGd"}
1
+ {"version":3,"file":"Serenity.d.ts","sourceRoot":"","sources":["../src/Serenity.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC/D,OAAO,EAAyE,IAAI,EAAE,MAAM,MAAM,CAAC;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,KAAK,EAAY,MAAM,cAAc,CAAC;AAE/C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAKzC;;GAEG;AACH,qBAAa,QAAS,YAAW,iBAAiB;IAiB1C,OAAO,CAAC,QAAQ,CAAC,KAAK;IAhB1B,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAoC;IACpE,OAAO,CAAC,MAAM,CAAC,yBAAyB,CAA4B;IACpE,OAAO,CAAC,MAAM,CAAC,aAAa,CAA+B;IAE3D,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,OAAO,CAAC,YAAY,CAAiC;IAErD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAc;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;IAExC;;;OAGG;gBAEkB,KAAK,GAAE,KAAmB,EAC3C,GAAG,GAAE,MAAsB;IAoB/B;;;;;;;OAOG;IACH,SAAS,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAwDvC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkEG;IACH,MAAM,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI;IAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAInC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,sBAAsB,IAAI,KAAK;IAI/B,QAAQ,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,IAAI;IAI7C,WAAW,IAAI,SAAS;IAIxB,gBAAgB,IAAI,aAAa;IAIjC,cAAc,IAAI,aAAa;IAI/B,mBAAmB,CAAC,eAAe,EAAE,eAAe,GAAG,aAAa;IAIpE,WAAW,CAAC,EAAE,SAAS,YAAY,EAAE,SAAS,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,YAAY,GAAG,EAAE;IAItG;;OAEG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,GAAG,IAAI,IAAI;CAGd"}
package/lib/Serenity.js CHANGED
@@ -17,17 +17,20 @@ class Serenity {
17
17
  static defaultInteractionTimeout = screenplay_1.Duration.ofSeconds(5);
18
18
  static defaultActors = new Extras_1.Extras();
19
19
  stage;
20
+ fileSystem;
20
21
  outputStream = process.stdout;
21
22
  classLoader;
22
23
  workingDirectory;
23
24
  /**
24
25
  * @param clock
26
+ * @param cwd
25
27
  */
26
28
  constructor(clock = new screenplay_1.Clock(), cwd = process.cwd()) {
27
29
  this.clock = clock;
28
30
  this.stage = new Stage_1.Stage(Serenity.defaultActors, new StageManager_1.StageManager(Serenity.defaultCueTimeout, clock), new errors_1.ErrorFactory(), clock, Serenity.defaultInteractionTimeout);
29
31
  this.classLoader = new io_1.ClassLoader(new io_1.ModuleLoader(cwd), new io_1.ClassDescriptionParser());
30
32
  this.workingDirectory = new io_1.Path(cwd);
33
+ this.fileSystem = new io_1.FileSystem(this.workingDirectory);
31
34
  }
32
35
  /**
33
36
  * Configures Serenity/JS. Every call to this function
@@ -59,7 +62,11 @@ class Serenity {
59
62
  ? this.classLoader.instantiate(stageCrewMemberDescription)
60
63
  : stageCrewMemberDescription;
61
64
  if (looksLikeBuilder(stageCrewMember)) {
62
- return stageCrewMember.build({ stage: this.stage, outputStream: this.outputStream });
65
+ return stageCrewMember.build({
66
+ stage: this.stage,
67
+ fileSystem: this.fileSystem,
68
+ outputStream: this.outputStream,
69
+ });
63
70
  }
64
71
  if (looksLikeStageCrewMember(stageCrewMember)) {
65
72
  return stageCrewMember.assignedTo(this.stage);
@@ -1 +1 @@
1
- {"version":3,"file":"Serenity.js","sourceRoot":"","sources":["../src/Serenity.ts"],"names":[],"mappings":";;;AAAA,2CAAuE;AAKvE,qCAA+E;AAE/E,6BAAuF;AAGvF,6CAA+C;AAG/C,2CAAwC;AACxC,yCAAsC;AACtC,uDAAoD;AAEpD;;GAEG;AACH,MAAa,QAAQ;IAeI;IAdb,MAAM,CAAC,iBAAiB,GAAc,qBAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,yBAAyB,GAAM,qBAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAC5D,MAAM,CAAC,aAAa,GAAkB,IAAI,eAAM,EAAE,CAAC;IAEnD,KAAK,CAAQ;IACb,YAAY,GAAkB,OAAO,CAAC,MAAM,CAAC;IAEpC,WAAW,CAAc;IACzB,gBAAgB,CAAO;IAExC;;OAEG;IACH,YACqB,QAAe,IAAI,kBAAK,EAAE,EAC3C,MAAc,OAAO,CAAC,GAAG,EAAE;QADV,UAAK,GAAL,KAAK,CAAqB;QAG3C,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAClB,QAAQ,CAAC,aAAa,EACtB,IAAI,2BAAY,CAAC,QAAQ,CAAC,iBAAiB,EAAE,KAAK,CAAC,EACnD,IAAI,qBAAY,EAAE,EAClB,KAAK,EACL,QAAQ,CAAC,yBAAyB,CACrC,CAAC;QAEF,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAW,CAC9B,IAAI,iBAAY,CAAC,GAAG,CAAC,EACrB,IAAI,2BAAsB,EAAE,CAC/B,CAAC;QAEF,IAAI,CAAC,gBAAgB,GAAG,IAAI,SAAI,CAAC,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;;OAOG;IACH,SAAS,CAAC,MAAsB;QAC5B,MAAM,gBAAgB,GAAY,IAAA,QAAG,EAAyB,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;QACrF,MAAM,wBAAwB,GAAI,IAAA,QAAG,EAAkB,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAEzG,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU;YAChC,CAAC,CAAC,IAAA,mBAAM,EAAC,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,IAAA,yBAAY,EAAC,qBAAQ,CAAC,CAAC;YACjE,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAEjC,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB;YAChD,CAAC,CAAC,IAAA,mBAAM,EAAC,oBAAoB,EAAE,MAAM,CAAC,kBAAkB,EAAE,IAAA,yBAAY,EAAC,qBAAQ,CAAC,CAAC;YACjF,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QAEzC,IAAI,MAAM,CAAC,YAAY,EAAE;YACrB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;SAC3C;QAED,IAAI,CAAC,KAAK,GAAG,IAAI,aAAK,CAClB,QAAQ,CAAC,aAAa,EACtB,IAAI,2BAAY,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,EACxC,IAAI,qBAAY,CAAC,MAAM,CAAC,aAAa,IAAI,IAAI,0BAAiB,EAAE,CAAC,EACjE,IAAI,CAAC,KAAK,EACV,kBAAkB,CACrB,CAAC;QAEF,IAAI,MAAM,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;SAC9B;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;YAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CACb,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,0BAA0B,EAAE,CAAC,EAAE,EAAE;gBAEjD,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,0BAA0B,CAAC;oBAC9E,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAA2C,0BAA0B,CAAC;oBACpG,CAAC,CAAC,0BAA0B,CAAC;gBAEjC,IAAI,gBAAgB,CAAC,eAAe,CAAC,EAAE;oBACnC,OAAO,eAAe,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;iBACxF;gBAED,IAAI,wBAAwB,CAAC,eAAe,CAAC,EAAE;oBAC3C,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACjD;gBAED,MAAM,IAAI,2BAAkB,CACxB,IAAA,MAAC,EAAA,0GAA2G,0BAA2B,qBAAsB,CAAE,EAAE,CACpK,CAAC;YACN,CAAC,CAAC,CACL,CAAC;SACL;IACL,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAkEG;IACH,MAAM,CAAC,MAAY;QACf,IAAI,CAAC,KAAK,CAAC,MAAM,CACb,IAAA,mBAAM,EAAC,QAAQ,EAAE,MAAM,EAAE,IAAA,qBAAQ,EAAC,SAAS,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC,CAC7D,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAyDG;IACH,cAAc,CAAC,IAAY;QACvB,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAgCG;IACH,sBAAsB;QAClB,OAAO,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC;IAC/C,CAAC;IAED,QAAQ,CAAC,GAAG,MAA0B;QAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,WAAW;QACP,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,gBAAgB;QACZ,OAAO,IAAI,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC;IACzC,CAAC;IAED,cAAc;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAED,mBAAmB,CAAC,eAAgC;QAChD,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IAC3D,CAAC;IAED,WAAW,CAA0B,SAAqC,EAAE,OAAqB;QAC7F,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,cAAc;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;IACvC,CAAC;IAED,GAAG;QACC,OAAO,IAAI,CAAC,gBAAgB,CAAC;IACjC,CAAC;;AA3SL,4BA4SC"}
1
+ {"version":3,"file":"Serenity.js","sourceRoot":"","sources":["../src/Serenity.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,7 @@ export declare class FileSystem {
11
11
  private readonly os;
12
12
  private readonly directoryMode;
13
13
  constructor(root: Path, fs?: typeof nodeFS, os?: typeof nodeOS, directoryMode?: number);
14
+ resolve(relativeOrAbsolutePath: Path): Path;
14
15
  store(relativeOrAbsolutePathToFile: Path, data: string | NodeJS.ArrayBufferView, encoding?: WriteFileOptions): Promise<Path>;
15
16
  createReadStream(relativeOrAbsolutePathToFile: Path): nodeFS.ReadStream;
16
17
  createWriteStreamTo(relativeOrAbsolutePathToFile: Path): nodeFS.WriteStream;
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../src/io/FileSystem.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,KAAK,MAAM,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAE3C,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AAG7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,UAAU;IAGf,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHb,IAAI,EAAE,IAAI,EACV,EAAE,GAAE,OAAO,MAAmB,EAC9B,EAAE,GAAE,OAAO,MAAe,EAC1B,aAAa,SAAkD;IAI7E,KAAK,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5H,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,GAAG,MAAM,CAAC,UAAU;IAIvE,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,GAAG,MAAM,CAAC,WAAW;IAI3E,IAAI,CAAC,4BAA4B,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAM/D,MAAM,CAAC,4BAA4B,EAAE,IAAI,GAAG,OAAO;IAInD,MAAM,CAAC,uCAAuC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpE,uBAAuB,CAAC,iCAAiC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/E,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,YAAY,CAAC,MAAM,SAAK,EAAE,MAAM,SAAS,GAAG,IAAI;IAIvD,OAAO,CAAC,KAAK;CAYhB"}
1
+ {"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../src/io/FileSystem.ts"],"names":[],"mappings":";;;AACA,OAAO,KAAK,KAAK,MAAM,MAAM,IAAI,CAAC;AAClC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAC;AAE3C,OAAO,KAAK,MAAM,MAAM,IAAI,CAAC;AAG7B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,UAAU;IAGf,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAHb,IAAI,EAAE,IAAI,EACV,EAAE,GAAE,OAAO,MAAmB,EAC9B,EAAE,GAAE,OAAO,MAAe,EAC1B,aAAa,SAAkD;IAI7E,OAAO,CAAC,sBAAsB,EAAE,IAAI,GAAG,IAAI;IAI3C,KAAK,CAAC,4BAA4B,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAM5H,gBAAgB,CAAC,4BAA4B,EAAE,IAAI,GAAG,MAAM,CAAC,UAAU;IAIvE,mBAAmB,CAAC,4BAA4B,EAAE,IAAI,GAAG,MAAM,CAAC,WAAW;IAI3E,IAAI,CAAC,4BAA4B,EAAE,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;IAM/D,MAAM,CAAC,4BAA4B,EAAE,IAAI,GAAG,OAAO;IAInD,MAAM,CAAC,uCAAuC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BpE,uBAAuB,CAAC,iCAAiC,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IA6B/E,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAMtD,YAAY,CAAC,MAAM,SAAK,EAAE,MAAM,SAAS,GAAG,IAAI;IAIvD,OAAO,CAAC,KAAK;CAYhB"}
@@ -40,27 +40,30 @@ class FileSystem {
40
40
  this.os = os;
41
41
  this.directoryMode = directoryMode;
42
42
  }
43
+ resolve(relativeOrAbsolutePath) {
44
+ return this.root.resolve(relativeOrAbsolutePath);
45
+ }
43
46
  store(relativeOrAbsolutePathToFile, data, encoding) {
44
47
  return Promise.resolve()
45
48
  .then(() => this.ensureDirectoryExistsAt(relativeOrAbsolutePathToFile.directory()))
46
- .then(() => this.write(this.root.resolve(relativeOrAbsolutePathToFile), data, encoding));
49
+ .then(() => this.write(this.resolve(relativeOrAbsolutePathToFile), data, encoding));
47
50
  }
48
51
  createReadStream(relativeOrAbsolutePathToFile) {
49
- return this.fs.createReadStream(this.root.resolve(relativeOrAbsolutePathToFile).value);
52
+ return this.fs.createReadStream(this.resolve(relativeOrAbsolutePathToFile).value);
50
53
  }
51
54
  createWriteStreamTo(relativeOrAbsolutePathToFile) {
52
- return this.fs.createWriteStream(this.root.resolve(relativeOrAbsolutePathToFile).value);
55
+ return this.fs.createWriteStream(this.resolve(relativeOrAbsolutePathToFile).value);
53
56
  }
54
57
  stat(relativeOrAbsolutePathToFile) {
55
58
  const stat = (0, util_1.promisify)(this.fs.stat);
56
- return stat(this.root.resolve(relativeOrAbsolutePathToFile).value);
59
+ return stat(this.resolve(relativeOrAbsolutePathToFile).value);
57
60
  }
58
61
  exists(relativeOrAbsolutePathToFile) {
59
- return this.fs.existsSync(this.root.resolve(relativeOrAbsolutePathToFile).value);
62
+ return this.fs.existsSync(this.resolve(relativeOrAbsolutePathToFile).value);
60
63
  }
61
64
  remove(relativeOrAbsolutePathToFileOrDirectory) {
62
65
  const stat = (0, util_1.promisify)(this.fs.stat), unlink = (0, util_1.promisify)(this.fs.unlink), readdir = (0, util_1.promisify)(this.fs.readdir), rmdir = (0, util_1.promisify)(this.fs.rmdir);
63
- const absolutePath = this.root.resolve(relativeOrAbsolutePathToFileOrDirectory);
66
+ const absolutePath = this.resolve(relativeOrAbsolutePathToFileOrDirectory);
64
67
  return stat(absolutePath.value)
65
68
  .then(result => result.isFile()
66
69
  ? unlink(absolutePath.value)
@@ -75,7 +78,7 @@ class FileSystem {
75
78
  });
76
79
  }
77
80
  ensureDirectoryExistsAt(relativeOrAbsolutePathToDirectory) {
78
- const absolutePath = this.root.resolve(relativeOrAbsolutePathToDirectory);
81
+ const absolutePath = this.resolve(relativeOrAbsolutePathToDirectory);
79
82
  return absolutePath.split().reduce((promisedParent, child) => {
80
83
  return promisedParent.then(parent => new Promise((resolve, reject) => {
81
84
  const current = parent.resolve(new Path_1.Path(child));
@@ -1 +1 @@
1
- {"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../src/io/FileSystem.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileSystem.js","sourceRoot":"","sources":["../../src/io/FileSystem.ts"],"names":[],"mappings":"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"}
@@ -7,5 +7,6 @@ export declare class ClassLoader {
7
7
  constructor(loader: ModuleLoader, parser: ClassDescriptionParser);
8
8
  looksLoadable(description: unknown): description is ClassDescription;
9
9
  instantiate<T>(description: ClassDescription): T;
10
+ private ensureDefined;
10
11
  }
11
12
  //# sourceMappingURL=ClassLoader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClassLoader.d.ts","sourceRoot":"","sources":["../../../src/io/loader/ClassLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,qBAAa,WAAW;IAEhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,sBAAsB;IAInD,aAAa,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,IAAI,gBAAgB;IAIpE,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC;CAwBnD"}
1
+ {"version":3,"file":"ClassLoader.d.ts","sourceRoot":"","sources":["../../../src/io/loader/ClassLoader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAGrD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,qBAAa,WAAW;IAEhB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,MAAM,EAAE,YAAY,EACpB,MAAM,EAAE,sBAAsB;IAInD,aAAa,CAAC,WAAW,EAAE,OAAO,GAAG,WAAW,IAAI,gBAAgB;IAIpE,WAAW,CAAC,CAAC,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC;IAgDhD,OAAO,CAAC,aAAa;CAOxB"}
@@ -20,16 +20,38 @@ class ClassLoader {
20
20
  if (typeof requiredType !== 'function') {
21
21
  throw new errors_1.ConfigurationError((0, format_1.d) `Module ${descriptor.moduleId} doesn't seem to export ${descriptor.className}. Exported members include: ${Object.keys(requiredModule).join(', ')}`);
22
22
  }
23
- if (descriptor.parameter) {
24
- if (typeof requiredType.fromJSON !== 'function') {
25
- throw new errors_1.ConfigurationError((0, format_1.d) `Class ${descriptor.className} exported by ${descriptor.moduleId} needs a static fromJSON() method that accepts ${descriptor.parameter}`);
23
+ const needsParameter = Boolean(descriptor.parameter);
24
+ if (needsParameter && typeof requiredType.fromJSON === 'function') {
25
+ return this.ensureDefined(requiredType.fromJSON(descriptor.parameter), `${requiredType}.fromJSON(${descriptor.parameter})`);
26
+ }
27
+ if (needsParameter && requiredType.length > 1) {
28
+ throw new errors_1.ConfigurationError((0, format_1.d) `${descriptor.className} exported by ${descriptor.moduleId} must be a class with a static fromJSON(config) method or a function that accepts a single config parameter: ${descriptor.parameter}`);
29
+ }
30
+ if (!needsParameter && requiredType.length > 0) {
31
+ throw new errors_1.ConfigurationError((0, format_1.d) `${descriptor.className} exported by ${descriptor.moduleId} must be a parameterless function since no config parameter is specified`);
32
+ }
33
+ try {
34
+ return this.ensureDefined(requiredType(descriptor.parameter), `${requiredType}(${descriptor.parameter})`);
35
+ }
36
+ catch (error) {
37
+ if (error instanceof TypeError && error.message.includes('constructor')) {
38
+ return new requiredType(descriptor.parameter);
26
39
  }
27
- return requiredType.fromJSON(descriptor.parameter);
40
+ const errorMessage = [
41
+ (0, format_1.d) `${descriptor.className} exported by ${descriptor.moduleId} must be either:`,
42
+ descriptor.parameter && (0, format_1.d) `- a class with a static fromJSON(config) method`,
43
+ descriptor.parameter ? '- a no-arg constructor function' : '- a constructor function accepting config',
44
+ descriptor.parameter ? '- a no-arg function' : '- a function accepting config',
45
+ descriptor.parameter && (0, format_1.d) `where config is: ${descriptor.parameter}`,
46
+ ].filter(Boolean).join('\n');
47
+ throw new errors_1.ConfigurationError(errorMessage);
28
48
  }
29
- if (requiredType.length > 0) {
30
- throw new errors_1.ConfigurationError((0, format_1.d) `Class ${descriptor.className} exported by ${descriptor.moduleId} doesn't seem to offer a no-arg constructor`);
49
+ }
50
+ ensureDefined(value, operation) {
51
+ if (value === undefined || value === null) {
52
+ throw new errors_1.ConfigurationError(`Calling ${operation} produced ${value}, which might indicate a configuration or programming error`);
31
53
  }
32
- return new requiredType();
54
+ return value;
33
55
  }
34
56
  }
35
57
  exports.ClassLoader = ClassLoader;
@@ -1 +1 @@
1
- {"version":3,"file":"ClassLoader.js","sourceRoot":"","sources":["../../../src/io/loader/ClassLoader.ts"],"names":[],"mappings":";;;AACA,yCAAkD;AAClD,sCAA8B;AAI9B,MAAa,WAAW;IAEC;IACA;IAFrB,YACqB,MAAoB,EACpB,MAA8B;QAD9B,WAAM,GAAN,MAAM,CAAc;QACpB,WAAM,GAAN,MAAM,CAAwB;IAEnD,CAAC;IAED,aAAa,CAAC,WAAoB;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;IAC9D,CAAC;IAED,WAAW,CAAI,WAA6B;QACxC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAElD,MAAM,cAAc,GAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACnE,MAAM,YAAY,GAAQ,cAAc,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAE/D,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE;YACpC,MAAM,IAAI,2BAAkB,CAAC,IAAA,UAAC,EAAC,UAAW,UAAU,CAAC,QAAS,2BAA4B,UAAU,CAAC,SAAU,+BAAgC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,IAAI,CAAE,EAAE,CAAC,CAAA;SAC5L;QAED,IAAI,UAAU,CAAC,SAAS,EAAE;YACtB,IAAI,OAAO,YAAY,CAAC,QAAQ,KAAK,UAAU,EAAE;gBAC7C,MAAM,IAAI,2BAAkB,CAAC,IAAA,UAAC,EAAC,SAAU,UAAU,CAAC,SAAU,gBAAiB,UAAU,CAAC,QAAS,kDAAmD,UAAU,CAAC,SAAU,EAAE,CAAC,CAAC;aAClL;YAED,OAAO,YAAY,CAAC,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACtD;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;YACzB,MAAM,IAAI,2BAAkB,CAAC,IAAA,UAAC,EAAA,SAAU,UAAU,CAAC,SAAU,gBAAiB,UAAU,CAAC,QAAS,6CAA6C,CAAC,CAAC;SACpJ;QAED,OAAO,IAAI,YAAY,EAAE,CAAC;IAC9B,CAAC;CACJ;AAnCD,kCAmCC"}
1
+ {"version":3,"file":"ClassLoader.js","sourceRoot":"","sources":["../../../src/io/loader/ClassLoader.ts"],"names":[],"mappings":"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"}
@@ -184,13 +184,13 @@ import type { UsesAbilities } from './UsesAbilities';
184
184
  *
185
185
  * await actorCalled('Trevor')
186
186
  * .whoCan(
187
- * BrowseTheWebWithPlaywright.using(browser, { baseURL }),
188
- * CallAnApi.at(`${ baseURL }/api`),
189
- * TakeNotes.using(Notepad.with<MyNotes>({
190
- * firstName: 'Trevor',
191
- * lastName: 'Traveller',
192
- * emailAddress: 'Trevor.Traveller@example.org',
193
- * }))
187
+ * BrowseTheWebWithPlaywright.using(browser, { baseURL }),
188
+ * CallAnApi.at(`${ baseURL }/api`),
189
+ * TakeNotes.using(Notepad.with<MyNotes>({
190
+ * firstName: 'Trevor',
191
+ * lastName: 'Traveller',
192
+ * emailAddress: 'Trevor.Traveller@example.org',
193
+ * }))
194
194
  * )
195
195
  * ```
196
196
  *
@@ -185,13 +185,13 @@ exports.Ability = void 0;
185
185
  *
186
186
  * await actorCalled('Trevor')
187
187
  * .whoCan(
188
- * BrowseTheWebWithPlaywright.using(browser, { baseURL }),
189
- * CallAnApi.at(`${ baseURL }/api`),
190
- * TakeNotes.using(Notepad.with<MyNotes>({
191
- * firstName: 'Trevor',
192
- * lastName: 'Traveller',
193
- * emailAddress: 'Trevor.Traveller@example.org',
194
- * }))
188
+ * BrowseTheWebWithPlaywright.using(browser, { baseURL }),
189
+ * CallAnApi.at(`${ baseURL }/api`),
190
+ * TakeNotes.using(Notepad.with<MyNotes>({
191
+ * firstName: 'Trevor',
192
+ * lastName: 'Traveller',
193
+ * emailAddress: 'Trevor.Traveller@example.org',
194
+ * }))
195
195
  * )
196
196
  * ```
197
197
  *
@@ -30,6 +30,7 @@ export declare class Timestamp extends TinyType {
30
30
  toMilliseconds(): number;
31
31
  toSeconds(): number;
32
32
  toJSON(): string;
33
+ toISOString(): string;
33
34
  toString(): string;
34
35
  [inspect.custom](): string;
35
36
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../../src/screenplay/time/models/Timestamp.ts"],"names":[],"mappings":";AACA,OAAO,EAA8C,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,SAAQ,QAAQ;aAiBP,KAAK,EAAE,IAAI;IAhBvC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAInD,MAAM,CAAC,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAIxD,MAAM,CAAC,GAAG,IAAI,SAAS;gBAIK,KAAK,GAAE,IAAiB;IAKpD,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,QAAQ;IAKlC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS;IAKnC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS;IAKnC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAKrC,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAK5C,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAKpC,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAK3C,cAAc,IAAI,MAAM;IAIxB,SAAS,IAAI,MAAM;IAInB,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;IAIlB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAG7B"}
1
+ {"version":3,"file":"Timestamp.d.ts","sourceRoot":"","sources":["../../../../src/screenplay/time/models/Timestamp.ts"],"names":[],"mappings":";AACA,OAAO,EAA8C,QAAQ,EAAE,MAAM,YAAY,CAAC;AAClF,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC;;;;;;;;;;GAUG;AACH,qBAAa,SAAU,SAAQ,QAAQ;aAiBP,KAAK,EAAE,IAAI;IAhBvC,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAIrC,MAAM,CAAC,sBAAsB,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAInD,MAAM,CAAC,2BAA2B,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS;IAIxD,MAAM,CAAC,GAAG,IAAI,SAAS;gBAIK,KAAK,GAAE,IAAiB;IAKpD,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,QAAQ;IAKlC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS;IAKnC,IAAI,CAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS;IAKnC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAKrC,eAAe,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAK5C,OAAO,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAKpC,cAAc,CAAC,OAAO,EAAE,SAAS,GAAG,OAAO;IAK3C,cAAc,IAAI,MAAM;IAIxB,SAAS,IAAI,MAAM;IAInB,MAAM,IAAI,MAAM;IAIhB,WAAW,IAAI,MAAM;IAIrB,QAAQ,IAAI,MAAM;IAIlB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM;CAG7B"}
@@ -75,9 +75,12 @@ class Timestamp extends tiny_types_1.TinyType {
75
75
  toJSON() {
76
76
  return this.value.toJSON();
77
77
  }
78
- toString() {
78
+ toISOString() {
79
79
  return this.value.toISOString();
80
80
  }
81
+ toString() {
82
+ return this.toISOString();
83
+ }
81
84
  [util_1.inspect.custom]() {
82
85
  return `Timestamp(${this.value.toISOString()})`;
83
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Timestamp.js","sourceRoot":"","sources":["../../../../src/screenplay/time/models/Timestamp.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,2CAAkF;AAClF,+BAA+B;AAE/B,yCAAsC;AAEtC;;;;;;;;;;GAUG;AACH,MAAa,SAAU,SAAQ,qBAAQ;IAiBP;IAhB5B,MAAM,CAAC,QAAQ,CAAC,CAAS;QACrB,OAAO,IAAI,SAAS,CAAC,IAAI,IAAI,CAAC,IAAA,mBAAM,EAAC,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,uBAAuB,EAAE,CAAC,CAAC,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,CAAC,sBAAsB,CAAC,CAAS;QACnC,OAAO,SAAS,CAAC,2BAA2B,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,CAAC,2BAA2B,CAAC,CAAS;QACxC,OAAO,IAAI,SAAS,CAAC,IAAA,gBAAM,EAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,CAAC,GAAG;QACN,OAAO,IAAI,SAAS,EAAE,CAAC;IAC3B,CAAC;IAED,YAA4B,QAAc,IAAI,IAAI,EAAE;QAChD,KAAK,EAAE,CAAC;QADgB,UAAK,GAAL,KAAK,CAAmB;QAEhD,IAAA,mBAAM,EAAC,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,IAAA,sBAAS,GAAE,EAAE,IAAA,yBAAY,EAAC,IAAI,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,OAAkB;QACnB,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,mBAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,CAAC,QAAkB;QACnB,IAAA,mBAAM,EAAC,UAAU,EAAE,QAAQ,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,SAAS,CAAC,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,IAAI,CAAC,QAAkB;QACnB,IAAA,mBAAM,EAAC,UAAU,EAAE,QAAQ,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,SAAS,CAAC,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAChG,CAAC;IAED,QAAQ,CAAC,OAAkB;QACvB,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,eAAe,CAAC,OAAkB;QAC9B,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO,CAAC,OAAkB;QACtB,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;IAED,cAAc,CAAC,OAAkB;QAC7B,IAAA,mBAAM,EAAC,WAAW,EAAE,OAAO,EAAE,IAAA,sBAAS,GAAE,CAAC,CAAC;QAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IAC3D,CAAC;IAED,cAAc;QACV,OAAO,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;IAED,SAAS;QACL,OAAO,IAAA,gBAAM,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;IAC/B,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,CAAC,cAAO,CAAC,MAAM,CAAC;QACZ,OAAO,aAAc,IAAI,CAAC,KAAK,CAAC,WAAW,EAAG,GAAG,CAAC;IACtD,CAAC;CACJ;AA5ED,8BA4EC;AAED,SAAS,uBAAuB;IAC5B,OAAO,sBAAS,CAAC,EAAE,CAAC,+BAA+B,EAAE,CAAC,KAAa,EAAE,EAAE,CACnE,IAAA,gBAAM,EAAC,KAAK,EAAE,gBAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"Timestamp.js","sourceRoot":"","sources":["../../../../src/screenplay/time/models/Timestamp.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import type { OutputStream } from '../adapter';
2
+ import type { FileSystem } from '../io';
2
3
  import type { Stage } from './Stage';
3
4
  /**
4
5
  * Dependencies injected by {@apilink Serenity.configure} into {@apilink StageCrewMemberBuilder.build}
@@ -10,6 +11,7 @@ import type { Stage } from './Stage';
10
11
  */
11
12
  export interface StageCrewMemberBuilderDependencies {
12
13
  stage: Stage;
14
+ fileSystem: FileSystem;
13
15
  outputStream: OutputStream;
14
16
  }
15
17
  //# sourceMappingURL=StageCrewMemberBuilderDependencies.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"StageCrewMemberBuilderDependencies.d.ts","sourceRoot":"","sources":["../../src/stage/StageCrewMemberBuilderDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,WAAW,kCAAkC;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,YAAY,EAAE,YAAY,CAAC;CAC9B"}
1
+ {"version":3,"file":"StageCrewMemberBuilderDependencies.d.ts","sourceRoot":"","sources":["../../src/stage/StageCrewMemberBuilderDependencies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC;;;;;;;GAOG;AACH,MAAM,WAAW,kCAAkC;IAC/C,KAAK,EAAE,KAAK,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,YAAY,CAAC;CAC9B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/core",
3
- "version": "3.14.1",
3
+ "version": "3.15.0",
4
4
  "description": "Serenity/JS Screenplay, reporting engine and core interfaces.",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -40,7 +40,7 @@
40
40
  "fast-glob": "3.3.2",
41
41
  "filenamify": "4.3.0",
42
42
  "graceful-fs": "4.2.11",
43
- "moment": "2.29.4",
43
+ "moment": "2.30.1",
44
44
  "semver": "7.5.4",
45
45
  "tiny-types": "1.21.0",
46
46
  "upath": "2.0.1",
@@ -54,7 +54,7 @@
54
54
  "@types/semver": "7.5.6",
55
55
  "@types/validate-npm-package-name": "4.0.2",
56
56
  "assertion-error-formatter": "3.0.0",
57
- "c8": "8.0.1",
57
+ "c8": "9.0.0",
58
58
  "memfs": "4.6.0",
59
59
  "mocha": "10.2.0",
60
60
  "mocha-multi": "1.1.7",
@@ -72,5 +72,5 @@
72
72
  "engines": {
73
73
  "node": "^16.13 || ^18.12 || ^20"
74
74
  },
75
- "gitHead": "27c466fdd19ebeb766b8517c847f1163e8ed8d6f"
75
+ "gitHead": "f3580d6b6380e9f175544929b9504a85c1d204ad"
76
76
  }
package/src/Serenity.ts CHANGED
@@ -5,7 +5,7 @@ import type { SerenityConfig } from './config';
5
5
  import type { ErrorOptions, RuntimeError } from './errors';
6
6
  import { ConfigurationError, ErrorFactory, NoOpDiffFormatter } from './errors';
7
7
  import type { DomainEvent, EmitsDomainEvents } from './events';
8
- import { ClassDescriptionParser, ClassLoader, d, has, ModuleLoader, Path } from './io';
8
+ import { ClassDescriptionParser, ClassLoader, d, FileSystem, has, ModuleLoader, Path } from './io';
9
9
  import type { ActivityDetails, CorrelationId } from './model';
10
10
  import type { Actor, Timestamp } from './screenplay';
11
11
  import { Clock, Duration } from './screenplay';
@@ -24,6 +24,7 @@ export class Serenity implements EmitsDomainEvents {
24
24
  private static defaultActors = new Extras();
25
25
 
26
26
  private stage: Stage;
27
+ private readonly fileSystem: FileSystem;
27
28
  private outputStream: OutputStream = process.stdout;
28
29
 
29
30
  private readonly classLoader: ClassLoader;
@@ -31,6 +32,7 @@ export class Serenity implements EmitsDomainEvents {
31
32
 
32
33
  /**
33
34
  * @param clock
35
+ * @param cwd
34
36
  */
35
37
  constructor(
36
38
  private readonly clock: Clock = new Clock(),
@@ -50,6 +52,8 @@ export class Serenity implements EmitsDomainEvents {
50
52
  );
51
53
 
52
54
  this.workingDirectory = new Path(cwd);
55
+
56
+ this.fileSystem = new FileSystem(this.workingDirectory);
53
57
  }
54
58
 
55
59
  /**
@@ -97,7 +101,11 @@ export class Serenity implements EmitsDomainEvents {
97
101
  : stageCrewMemberDescription;
98
102
 
99
103
  if (looksLikeBuilder(stageCrewMember)) {
100
- return stageCrewMember.build({ stage: this.stage, outputStream: this.outputStream });
104
+ return stageCrewMember.build({
105
+ stage: this.stage,
106
+ fileSystem: this.fileSystem,
107
+ outputStream: this.outputStream,
108
+ });
101
109
  }
102
110
 
103
111
  if (looksLikeStageCrewMember(stageCrewMember)) {
@@ -17,28 +17,32 @@ export class FileSystem {
17
17
  ) {
18
18
  }
19
19
 
20
+ public resolve(relativeOrAbsolutePath: Path): Path {
21
+ return this.root.resolve(relativeOrAbsolutePath);
22
+ }
23
+
20
24
  public store(relativeOrAbsolutePathToFile: Path, data: string | NodeJS.ArrayBufferView, encoding?: WriteFileOptions): Promise<Path> {
21
25
  return Promise.resolve()
22
26
  .then(() => this.ensureDirectoryExistsAt(relativeOrAbsolutePathToFile.directory()))
23
- .then(() => this.write(this.root.resolve(relativeOrAbsolutePathToFile), data, encoding));
27
+ .then(() => this.write(this.resolve(relativeOrAbsolutePathToFile), data, encoding));
24
28
  }
25
29
 
26
30
  public createReadStream(relativeOrAbsolutePathToFile: Path): nodeFS.ReadStream {
27
- return this.fs.createReadStream(this.root.resolve(relativeOrAbsolutePathToFile).value);
31
+ return this.fs.createReadStream(this.resolve(relativeOrAbsolutePathToFile).value);
28
32
  }
29
33
 
30
34
  public createWriteStreamTo(relativeOrAbsolutePathToFile: Path): nodeFS.WriteStream {
31
- return this.fs.createWriteStream(this.root.resolve(relativeOrAbsolutePathToFile).value);
35
+ return this.fs.createWriteStream(this.resolve(relativeOrAbsolutePathToFile).value);
32
36
  }
33
37
 
34
38
  public stat(relativeOrAbsolutePathToFile: Path): Promise<nodeFS.Stats> {
35
39
  const stat = promisify(this.fs.stat);
36
40
 
37
- return stat(this.root.resolve(relativeOrAbsolutePathToFile).value);
41
+ return stat(this.resolve(relativeOrAbsolutePathToFile).value);
38
42
  }
39
43
 
40
44
  public exists(relativeOrAbsolutePathToFile: Path): boolean {
41
- return this.fs.existsSync(this.root.resolve(relativeOrAbsolutePathToFile).value);
45
+ return this.fs.existsSync(this.resolve(relativeOrAbsolutePathToFile).value);
42
46
  }
43
47
 
44
48
  public remove(relativeOrAbsolutePathToFileOrDirectory: Path): Promise<void> {
@@ -48,7 +52,7 @@ export class FileSystem {
48
52
  readdir = promisify(this.fs.readdir),
49
53
  rmdir = promisify(this.fs.rmdir);
50
54
 
51
- const absolutePath = this.root.resolve(relativeOrAbsolutePathToFileOrDirectory);
55
+ const absolutePath = this.resolve(relativeOrAbsolutePathToFileOrDirectory);
52
56
 
53
57
  return stat(absolutePath.value)
54
58
  .then(result =>
@@ -72,7 +76,7 @@ export class FileSystem {
72
76
 
73
77
  public ensureDirectoryExistsAt(relativeOrAbsolutePathToDirectory: Path): Promise<Path> {
74
78
 
75
- const absolutePath = this.root.resolve(relativeOrAbsolutePathToDirectory);
79
+ const absolutePath = this.resolve(relativeOrAbsolutePathToDirectory);
76
80
 
77
81
  return absolutePath.split().reduce((promisedParent, child) => {
78
82
  return promisedParent.then(parent => new Promise((resolve, reject) => {
@@ -25,18 +25,49 @@ export class ClassLoader {
25
25
  throw new ConfigurationError(d `Module ${ descriptor.moduleId } doesn't seem to export ${ descriptor.className }. Exported members include: ${ Object.keys(requiredModule).join(', ') }`)
26
26
  }
27
27
 
28
- if (descriptor.parameter) {
29
- if (typeof requiredType.fromJSON !== 'function') {
30
- throw new ConfigurationError(d `Class ${ descriptor.className } exported by ${ descriptor.moduleId } needs a static fromJSON() method that accepts ${ descriptor.parameter }`);
28
+ const needsParameter = Boolean(descriptor.parameter);
29
+
30
+ if (needsParameter && typeof requiredType.fromJSON === 'function') {
31
+ return this.ensureDefined(requiredType.fromJSON(descriptor.parameter), `${ requiredType }.fromJSON(${ descriptor.parameter })`);
32
+ }
33
+
34
+ if (needsParameter && requiredType.length > 1) {
35
+ throw new ConfigurationError(d`${ descriptor.className } exported by ${ descriptor.moduleId } must be a class with a static fromJSON(config) method or a function that accepts a single config parameter: ${ descriptor.parameter }`);
36
+ }
37
+
38
+ if (! needsParameter && requiredType.length > 0) {
39
+ throw new ConfigurationError(d`${ descriptor.className } exported by ${ descriptor.moduleId } must be a parameterless function since no config parameter is specified`);
40
+ }
41
+
42
+ try {
43
+ return this.ensureDefined(
44
+ requiredType(descriptor.parameter),
45
+ `${ requiredType }(${ descriptor.parameter })`
46
+ );
47
+ }
48
+ catch (error) {
49
+
50
+ if (error instanceof TypeError && error.message.includes('constructor')) {
51
+ return new requiredType(descriptor.parameter);
31
52
  }
32
53
 
33
- return requiredType.fromJSON(descriptor.parameter);
54
+ const errorMessage = [
55
+ d`${ descriptor.className } exported by ${ descriptor.moduleId } must be either:`,
56
+ descriptor.parameter && d`- a class with a static fromJSON(config) method`,
57
+ descriptor.parameter ? '- a no-arg constructor function' : '- a constructor function accepting config',
58
+ descriptor.parameter ? '- a no-arg function' : '- a function accepting config',
59
+ descriptor.parameter && d`where config is: ${ descriptor.parameter }`,
60
+ ].filter(Boolean).join('\n');
61
+
62
+ throw new ConfigurationError(errorMessage);
34
63
  }
64
+ }
35
65
 
36
- if (requiredType.length > 0) {
37
- throw new ConfigurationError(d`Class ${ descriptor.className } exported by ${ descriptor.moduleId } doesn't seem to offer a no-arg constructor`);
66
+ private ensureDefined<T>(value: T | undefined, operation: string): T {
67
+ if (value === undefined || value === null) {
68
+ throw new ConfigurationError(`Calling ${ operation } produced ${ value }, which might indicate a configuration or programming error`);
38
69
  }
39
70
 
40
- return new requiredType();
71
+ return value;
41
72
  }
42
73
  }
@@ -185,13 +185,13 @@ import type { UsesAbilities } from './UsesAbilities';
185
185
  *
186
186
  * await actorCalled('Trevor')
187
187
  * .whoCan(
188
- * BrowseTheWebWithPlaywright.using(browser, { baseURL }),
189
- * CallAnApi.at(`${ baseURL }/api`),
190
- * TakeNotes.using(Notepad.with<MyNotes>({
191
- * firstName: 'Trevor',
192
- * lastName: 'Traveller',
193
- * emailAddress: 'Trevor.Traveller@example.org',
194
- * }))
188
+ * BrowseTheWebWithPlaywright.using(browser, { baseURL }),
189
+ * CallAnApi.at(`${ baseURL }/api`),
190
+ * TakeNotes.using(Notepad.with<MyNotes>({
191
+ * firstName: 'Trevor',
192
+ * lastName: 'Traveller',
193
+ * emailAddress: 'Trevor.Traveller@example.org',
194
+ * }))
195
195
  * )
196
196
  * ```
197
197
  *
@@ -84,10 +84,14 @@ export class Timestamp extends TinyType {
84
84
  return this.value.toJSON();
85
85
  }
86
86
 
87
- toString(): string {
87
+ toISOString(): string {
88
88
  return this.value.toISOString();
89
89
  }
90
90
 
91
+ toString(): string {
92
+ return this.toISOString();
93
+ }
94
+
91
95
  [inspect.custom](): string {
92
96
  return `Timestamp(${ this.value.toISOString() })`;
93
97
  }
@@ -1,4 +1,5 @@
1
1
  import type { OutputStream } from '../adapter';
2
+ import type { FileSystem } from '../io';
2
3
  import type { Stage } from './Stage';
3
4
 
4
5
  /**
@@ -11,5 +12,6 @@ import type { Stage } from './Stage';
11
12
  */
12
13
  export interface StageCrewMemberBuilderDependencies {
13
14
  stage: Stage;
15
+ fileSystem: FileSystem;
14
16
  outputStream: OutputStream;
15
17
  }