@serenity-js/core 3.13.1 → 3.13.2

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,17 @@
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.13.2](https://github.com/serenity-js/serenity-js/compare/v3.13.1...v3.13.2) (2023-11-14)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **cucumber:** resolve paths to "imports" as absolute file URLs ([fc9aefc](https://github.com/serenity-js/serenity-js/commit/fc9aefcdc2ec8e1dfe3ce38b03a1ff7fd7d3c6c6)), closes [#2060](https://github.com/serenity-js/serenity-js/issues/2060)
12
+
13
+
14
+
15
+
16
+
6
17
  ## [3.13.1](https://github.com/serenity-js/serenity-js/compare/v3.13.0...v3.13.1) (2023-11-07)
7
18
 
8
19
 
package/lib/io/Path.d.ts CHANGED
@@ -1,9 +1,10 @@
1
+ /// <reference types="node" />
1
2
  import { TinyType } from 'tiny-types';
2
3
  export declare class Path extends TinyType {
3
4
  private static readonly Separator;
4
5
  readonly value: string;
5
6
  static fromJSON(v: string): Path;
6
- static fromURI(uri: string): Path;
7
+ static fromFileURL(fileUrl: URL): Path;
7
8
  static from(...segments: string[]): Path;
8
9
  static fromSanitisedString(value: string): Path;
9
10
  constructor(value: string);
@@ -15,5 +16,6 @@ export declare class Path extends TinyType {
15
16
  basename(): string;
16
17
  isAbsolute(): boolean;
17
18
  root(): Path;
19
+ toFileURL(): URL;
18
20
  }
19
21
  //# sourceMappingURL=Path.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../../src/io/Path.ts"],"names":[],"mappings":"AACA,OAAO,EAA8C,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGlF,qBAAa,IAAK,SAAQ,QAAQ;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAO;IACxC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAqDjC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAIxC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;gBAenC,KAAK,EAAE,MAAM;IAOzB,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAIzB,KAAK,IAAI,MAAM,EAAE;IAMjB,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI5B,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI7B,SAAS,IAAI,IAAI;IAIjB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,OAAO;IAIrB,IAAI,IAAI,IAAI;CAGf"}
1
+ {"version":3,"file":"Path.d.ts","sourceRoot":"","sources":["../../src/io/Path.ts"],"names":[],"mappings":";AACA,OAAO,EAA8C,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGlF,qBAAa,IAAK,SAAQ,QAAQ;IAC9B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAO;IACxC,SAAgB,KAAK,EAAE,MAAM,CAAC;IAE9B,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,GAAG,IAAI;IAiDtC,MAAM,CAAC,IAAI,CAAC,GAAG,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI;IAOxC,MAAM,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;gBAenC,KAAK,EAAE,MAAM;IAOzB,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAIzB,KAAK,IAAI,MAAM,EAAE;IAMjB,OAAO,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI5B,QAAQ,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI;IAI7B,SAAS,IAAI,IAAI;IAIjB,QAAQ,IAAI,MAAM;IAIlB,UAAU,IAAI,OAAO;IAIrB,IAAI,IAAI,IAAI;IAIZ,SAAS,IAAI,GAAG;CAKnB"}
package/lib/io/Path.js CHANGED
@@ -34,14 +34,13 @@ class Path extends tiny_types_1.TinyType {
34
34
  static fromJSON(v) {
35
35
  return new Path(v);
36
36
  }
37
- static fromURI(uri) {
37
+ static fromFileURL(fileUrl) {
38
38
  // inspired by https://github.com/TooTallNate/file-uri-to-path
39
- if (typeof uri !== 'string' ||
40
- uri.length <= 7 ||
41
- uri.slice(0, 7) !== 'file://') {
42
- throw new TypeError(`A Path can be created only from URIs that start with 'file://'. Received: ${uri}`);
39
+ if (fileUrl.protocol !== 'file:') {
40
+ throw new TypeError(`A Path can be created only from URLs that start with 'file://'. Received: ${fileUrl}`);
43
41
  }
44
- const rest = decodeURI(uri.slice(7));
42
+ const url = fileUrl.toString();
43
+ const rest = decodeURI(url.slice(7));
45
44
  const firstSlash = rest.indexOf('/');
46
45
  let host = rest.slice(0, Math.max(0, firstSlash));
47
46
  // 2. Scheme Definition
@@ -64,8 +63,7 @@ class Path extends tiny_types_1.TinyType {
64
63
  path = path.replace(/^(.+)\|/, '$1:');
65
64
  // for Windows, we need to invert the path separators from what a URI uses
66
65
  if (upath_1.sep === '\\') {
67
- throw new Error('that used?');
68
- // path = path.replace(/\//g, '\\');
66
+ path = path.replaceAll('/', '\\');
69
67
  }
70
68
  if (!(/^.+:/.test(path))) {
71
69
  // unix path, because there's no Windows drive at the beginning
@@ -74,6 +72,9 @@ class Path extends tiny_types_1.TinyType {
74
72
  return new Path(host + path);
75
73
  }
76
74
  static from(...segments) {
75
+ if (segments.length === 1 && segments[0].startsWith('file://')) {
76
+ return Path.fromFileURL(new URL(segments[0]));
77
+ }
77
78
  return new Path(upath_1.default.joinSafe(...segments));
78
79
  }
79
80
  static fromSanitisedString(value) {
@@ -113,6 +114,9 @@ class Path extends tiny_types_1.TinyType {
113
114
  root() {
114
115
  return new Path(upath_1.default.parse(this.value).root);
115
116
  }
117
+ toFileURL() {
118
+ return new URL(encodeURI(`file://${this.value}`).replaceAll(/[#?]/g, encodeURIComponent));
119
+ }
116
120
  }
117
121
  exports.Path = Path;
118
122
  Path.Separator = '/';
@@ -1 +1 @@
1
- {"version":3,"file":"Path.js","sourceRoot":"","sources":["../../src/io/Path.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Path.js","sourceRoot":"","sources":["../../src/io/Path.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serenity-js/core",
3
- "version": "3.13.1",
3
+ "version": "3.13.2",
4
4
  "description": "Serenity/JS Screenplay, reporting engine and core interfaces.",
5
5
  "author": {
6
6
  "name": "Jan Molak",
@@ -71,5 +71,5 @@
71
71
  "engines": {
72
72
  "node": "^16.13 || ^18.12 || ^20"
73
73
  },
74
- "gitHead": "8f7c1b07dd23b1e1e6c8de49a4ec512a35b8a7f7"
74
+ "gitHead": "ed08db56c2c947c2c2ac4d9d4e95f9f68e90d2a4"
75
75
  }
package/src/io/Path.ts CHANGED
@@ -10,19 +10,16 @@ export class Path extends TinyType {
10
10
  return new Path(v);
11
11
  }
12
12
 
13
- static fromURI(uri: string): Path {
13
+ static fromFileURL(fileUrl: URL): Path {
14
14
  // inspired by https://github.com/TooTallNate/file-uri-to-path
15
- if (
16
- typeof uri !== 'string' ||
17
- uri.length <= 7 ||
18
- uri.slice(0, 7) !== 'file://'
19
- ) {
15
+ if (fileUrl.protocol !== 'file:') {
20
16
  throw new TypeError(
21
- `A Path can be created only from URIs that start with 'file://'. Received: ${ uri }`
17
+ `A Path can be created only from URLs that start with 'file://'. Received: ${ fileUrl }`
22
18
  );
23
19
  }
24
20
 
25
- const rest = decodeURI(uri.slice(7));
21
+ const url = fileUrl.toString();
22
+ const rest = decodeURI(url.slice(7));
26
23
  const firstSlash = rest.indexOf('/');
27
24
 
28
25
  let host = rest.slice(0, Math.max(0, firstSlash));
@@ -51,8 +48,7 @@ export class Path extends TinyType {
51
48
 
52
49
  // for Windows, we need to invert the path separators from what a URI uses
53
50
  if (sep === '\\') {
54
- throw new Error('that used?')
55
- // path = path.replace(/\//g, '\\');
51
+ path = path.replaceAll('/', '\\');
56
52
  }
57
53
 
58
54
  if (! (/^.+:/.test(path))) {
@@ -64,6 +60,9 @@ export class Path extends TinyType {
64
60
  }
65
61
 
66
62
  static from(...segments: string[]): Path {
63
+ if (segments.length === 1 && segments[0].startsWith('file://')) {
64
+ return Path.fromFileURL(new URL(segments[0]));
65
+ }
67
66
  return new Path(path.joinSafe(...segments));
68
67
  }
69
68
 
@@ -122,4 +121,10 @@ export class Path extends TinyType {
122
121
  root(): Path {
123
122
  return new Path(path.parse(this.value).root);
124
123
  }
125
- }
124
+
125
+ toFileURL(): URL {
126
+ return new URL(
127
+ encodeURI(`file://${this.value}`).replaceAll(/[#?]/g, encodeURIComponent)
128
+ );
129
+ }
130
+ }