@evolu/vitest 2.0.0 → 2.0.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/README.md CHANGED
@@ -2,7 +2,12 @@
2
2
 
3
3
  Vitest assertions for Evolu.
4
4
 
5
+ Evolu uses `node:test` with the platform-agnostic assertions from
6
+ `@evolu/common` for Node-only unit and integration tests. This package remains
7
+ available for projects that use Vitest and want Result assertions with Vitest
8
+ semantics.
9
+
5
10
  ## Documentation
6
11
 
7
- For detailed information and usage examples, please visit
8
- [evolu.dev](https://www.evolu.dev).
12
+ See Evolu's [testing convention](https://www.evolu.dev/docs/testing) for runner
13
+ and assertion guidance.
@@ -1,5 +1,4 @@
1
- declare const allBrowserNames: readonly ["chromium", "firefox", "webkit"];
2
- type BrowserName = (typeof allBrowserNames)[number];
1
+ type BrowserName = "chromium" | "firefox" | "webkit";
3
2
  interface BrowserInstance {
4
3
  readonly browser: BrowserName;
5
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"BrowserConfig.d.ts","sourceRoot":"","sources":["../../src/BrowserConfig.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,eAAe,YAAI,UAAU,EAAE,SAAS,EAAE,QAAQ,CAAU,CAAC;AAEnE,KAAK,WAAW,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAaD,eAAO,MAAM,sBAAsB,wBAGhC;IACD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,KAAG,KAAK,CAAC,eAAe,CAIU,CAAC"}
1
+ {"version":3,"file":"BrowserConfig.d.ts","sourceRoot":"","sources":["../../src/BrowserConfig.ts"],"names":[],"mappings":"AAAA,KAAK,WAAW,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,CAAC;AAErD,UAAU,eAAe;IACvB,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC;CAC/B;AAkBD,eAAO,MAAM,sBAAsB,wBAGhC;IACD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB,KAAG,KAAK,CAAC,eAAe,CAIU,CAAC"}
@@ -1,11 +1,15 @@
1
- const allBrowserNames = ["chromium", "firefox", "webkit"];
2
1
  // V8 coverage only works with Chromium.
3
2
  const chromiumBrowserNames = ["chromium"];
3
+ const compatibilityBrowserNames = [
4
+ "firefox",
5
+ "webkit",
6
+ ];
4
7
  const browserNamesByMode = {
8
+ chromium: ["chromium"],
5
9
  firefox: ["firefox"],
6
10
  webkit: ["webkit"],
7
11
  "firefox-webkit": ["firefox", "webkit"],
8
12
  };
9
13
  export const createBrowserInstances = ({ coverage, mode, }) => (coverage
10
14
  ? chromiumBrowserNames
11
- : (browserNamesByMode[mode] ?? allBrowserNames)).map((browser) => ({ browser }));
15
+ : (browserNamesByMode[mode] ?? compatibilityBrowserNames)).map((browser) => ({ browser }));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@evolu/vitest",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "Vitest assertions for Evolu",
5
5
  "keywords": [
6
6
  "evolu",
@@ -26,24 +26,25 @@
26
26
  },
27
27
  "files": [
28
28
  "dist/src/**",
29
+ "!dist/**/*.test.*",
29
30
  "src/**",
30
31
  "README.md"
31
32
  ],
32
33
  "devDependencies": {
33
- "@evolu/common": "8.6.0",
34
- "@evolu/typescript-config": "0.1.0",
34
+ "@evolu/common": "8.10.0",
35
+ "@evolu/typescript-config": "0.1.1",
35
36
  "@typescript/native": "npm:typescript@^7.0.2",
36
37
  "vitest": "^4.1.11"
37
38
  },
38
39
  "peerDependencies": {
39
- "@evolu/common": "^8.0.0",
40
+ "@evolu/common": "^8.10.0",
40
41
  "vitest": "^4.1.2"
41
42
  },
42
43
  "publishConfig": {
43
44
  "access": "public"
44
45
  },
45
46
  "engines": {
46
- "node": ">=24.0.0"
47
+ "node": ">=24.20.0"
47
48
  },
48
49
  "sideEffects": false,
49
50
  "scripts": {
@@ -0,0 +1,34 @@
1
+ import { assertEqual } from "@evolu/common";
2
+ import { describe, it } from "node:test";
3
+ import { createBrowserInstances } from "./BrowserConfig.ts";
4
+
5
+ describe("createBrowserInstances", () => {
6
+ it("uses Chromium for coverage", () => {
7
+ assertEqual(createBrowserInstances({ coverage: true, mode: "" }), [
8
+ { browser: "chromium" },
9
+ ]);
10
+ });
11
+
12
+ it("defaults to Firefox and WebKit without coverage", () => {
13
+ assertEqual(createBrowserInstances({ coverage: false, mode: "" }), [
14
+ { browser: "firefox" },
15
+ { browser: "webkit" },
16
+ ]);
17
+ });
18
+
19
+ it("selects browsers by mode", () => {
20
+ assertEqual(createBrowserInstances({ coverage: false, mode: "chromium" }), [
21
+ { browser: "chromium" },
22
+ ]);
23
+ assertEqual(createBrowserInstances({ coverage: false, mode: "firefox" }), [
24
+ { browser: "firefox" },
25
+ ]);
26
+ assertEqual(createBrowserInstances({ coverage: false, mode: "webkit" }), [
27
+ { browser: "webkit" },
28
+ ]);
29
+ assertEqual(
30
+ createBrowserInstances({ coverage: false, mode: "firefox-webkit" }),
31
+ [{ browser: "firefox" }, { browser: "webkit" }],
32
+ );
33
+ });
34
+ });
@@ -1,6 +1,4 @@
1
- const allBrowserNames = ["chromium", "firefox", "webkit"] as const;
2
-
3
- type BrowserName = (typeof allBrowserNames)[number];
1
+ type BrowserName = "chromium" | "firefox" | "webkit";
4
2
 
5
3
  interface BrowserInstance {
6
4
  readonly browser: BrowserName;
@@ -8,10 +6,15 @@ interface BrowserInstance {
8
6
 
9
7
  // V8 coverage only works with Chromium.
10
8
  const chromiumBrowserNames: ReadonlyArray<BrowserName> = ["chromium"];
9
+ const compatibilityBrowserNames: ReadonlyArray<BrowserName> = [
10
+ "firefox",
11
+ "webkit",
12
+ ];
11
13
 
12
14
  const browserNamesByMode: Readonly<
13
15
  Record<string, ReadonlyArray<BrowserName> | undefined>
14
16
  > = {
17
+ chromium: ["chromium"],
15
18
  firefox: ["firefox"],
16
19
  webkit: ["webkit"],
17
20
  "firefox-webkit": ["firefox", "webkit"],
@@ -26,5 +29,5 @@ export const createBrowserInstances = ({
26
29
  }): Array<BrowserInstance> =>
27
30
  (coverage
28
31
  ? chromiumBrowserNames
29
- : (browserNamesByMode[mode] ?? allBrowserNames)
32
+ : (browserNamesByMode[mode] ?? compatibilityBrowserNames)
30
33
  ).map((browser) => ({ browser }));
@@ -0,0 +1,74 @@
1
+ import {
2
+ assertThrowsInstanceOf,
3
+ assertType,
4
+ err,
5
+ type Err,
6
+ ok,
7
+ type Ok,
8
+ type Result,
9
+ } from "@evolu/common";
10
+ import { describe, it } from "node:test";
11
+ import { expectErr, expectOk } from "./index.ts";
12
+
13
+ const createOkResult = (): Result<number, string> => ok(42);
14
+ const createErrResult = (): Result<number, string> => err("error");
15
+
16
+ describe("expectOk", () => {
17
+ it("accepts an Ok and narrows the Result", () => {
18
+ const result = createOkResult();
19
+
20
+ expectOk(result, 42);
21
+
22
+ assertType<typeof result, Ok<number>>();
23
+ });
24
+
25
+ it("rejects an Err", () => {
26
+ assertThrowsInstanceOf(() => expectOk(createErrResult(), 42), Error);
27
+ });
28
+
29
+ it("rejects an unexpected value", () => {
30
+ assertThrowsInstanceOf(() => expectOk(createOkResult(), 41), Error);
31
+ });
32
+
33
+ it("narrows a heterogeneous Result union", () => {
34
+ const createResult = ():
35
+ Result<number, "NumberError"> | Result<string, "StringError"> => ok(42);
36
+ const result = createResult();
37
+
38
+ expectOk(result, 42);
39
+
40
+ assertType<typeof result, Ok<number> | Ok<string>>();
41
+ });
42
+ });
43
+
44
+ describe("expectErr", () => {
45
+ it("accepts an Err and narrows the Result", () => {
46
+ const result = createErrResult();
47
+
48
+ expectErr(result, "error");
49
+
50
+ assertType<typeof result, Err<string>>();
51
+ });
52
+
53
+ it("rejects an Ok", () => {
54
+ assertThrowsInstanceOf(() => expectErr(createOkResult(), "error"), Error);
55
+ });
56
+
57
+ it("rejects an unexpected error", () => {
58
+ assertThrowsInstanceOf(
59
+ () => expectErr(createErrResult(), "another error"),
60
+ Error,
61
+ );
62
+ });
63
+
64
+ it("narrows a heterogeneous Result union", () => {
65
+ const createResult = ():
66
+ Result<number, "NumberError"> | Result<string, "StringError"> =>
67
+ err("NumberError");
68
+ const result = createResult();
69
+
70
+ expectErr(result, "NumberError");
71
+
72
+ assertType<typeof result, Err<"NumberError"> | Err<"StringError">>();
73
+ });
74
+ });