@serenity-js/core 3.14.2 → 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,24 @@
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
+
6
24
  ## [3.14.2](https://github.com/serenity-js/serenity-js/compare/v3.14.1...v3.14.2) (2023-12-12)
7
25
 
8
26
  **Note:** Version bump only for package @serenity-js/core
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":"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"}
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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"}
@@ -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":"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"}
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.2",
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": "b2b052ea1120bf33c2848956f2f0ea5f0ffdfc24"
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
  }
@@ -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
  }