From ad4bbc09fa09f717e26471f3cb4e7f24f317143c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bal=C3=A1zs=20Re=C3=A9?= Date: Sun, 18 Jan 2026 19:35:45 +0100 Subject: [PATCH] Update to Rescript 12.0.0 and fix deprecation warnings Replace deprecated Js.* APIs with modern equivalents: - Js.Re.t -> RegExp.t - Js.Date.t -> Date.t - Js.undefined/Js.Undefined.* -> undefined type and helpers - Js.null/Js.Null.* -> Null.t and Null.make - Js.String.length -> String.length - Js.Float._NaN -> Float.Constants.nan - Js.Promise/Js.Promise2 -> global Promise module - Promise.make signature: labeled args -> positional args --- __tests__/expect_vitest.res | 22 ++++--- __tests__/globals_only_vitest.res | 9 ++- __tests__/globals_vitest.res | 29 ++++----- __tests__/mockjs_vitest.res | 57 ++++++++-------- __tests__/runner_only_vitest.res | 10 ++- __tests__/runner_vitest.res | 22 +++---- __tests__/vitest_vitest.res | 5 +- package.json | 5 +- src/Vitest.res | 105 ++++++++++++++++-------------- src/Vitest.resi | 12 ++-- yarn.lock | 60 +++++++++-------- 11 files changed, 178 insertions(+), 158 deletions(-) diff --git a/__tests__/expect_vitest.res b/__tests__/expect_vitest.res index 1bfcead..68cd001 100644 --- a/__tests__/expect_vitest.res +++ b/__tests__/expect_vitest.res @@ -1,5 +1,11 @@ open Vitest +// Helpers for creating undefined/null values in tests +// (replaces deprecated Js.Undefined.return and Js.Undefined.empty) +external makeUndefined: 'a => undefined<'a> = "%identity" +external emptyUndefined: undefined<'a> = "%undefined" +external nullValue: Null.t<'a> = "%null" + type test_record = {value: string} let () = { @@ -84,21 +90,21 @@ let () = { describe("ExpectJs", () => { open ExpectJs - test("toBeDefined", () => expect(Js.Undefined.return(3))->toBeDefined) - test("toBeFalsy", () => expect(Js.Float._NaN)->toBeFalsy) - test("toBeNull", () => expect(Js.null)->toBeNull) + test("toBeDefined", () => expect(makeUndefined(3))->toBeDefined) + test("toBeFalsy", () => expect(Float.Constants.nan)->toBeFalsy) + test("toBeNull", () => expect(nullValue)->toBeNull) test("toBeTruthy", () => expect([])->toBeTruthy) - test("toBeUndefined", () => expect(Js.Undefined.empty)->toBeUndefined) + test("toBeUndefined", () => expect(emptyUndefined)->toBeUndefined) test("toContainProperties", () => expect({"foo": 0, "bar": true})->toContainProperties(["foo", "bar"]) ) test("toMatchObject", () => expect({"a": 1, "b": 2, "c": 3})->toMatchObject({"a": 1, "b": 2})) - test("not toBeDefined", () => expect(Js.undefined)->not_->toBeDefined) + test("not toBeDefined", () => expect(emptyUndefined)->not_->toBeDefined) test("not toBeFalsy", () => expect([])->not_->toBeFalsy) - test("not toBeNull", () => expect(Js.Null.return(4))->not_->toBeNull) - test("not toBeTruthy", () => expect(Js.Float._NaN)->not_->toBeTruthy) - test("not toBeUndefined", () => expect(Js.Undefined.return(4))->not_->toBeUndefined) + test("not toBeNull", () => expect(Null.make(4))->not_->toBeNull) + test("not toBeTruthy", () => expect(Float.Constants.nan)->not_->toBeTruthy) + test("not toBeUndefined", () => expect(makeUndefined(4))->not_->toBeUndefined) test("not toContainProperties", () => expect({"foo": 0, "bar": true})->not_->toContainProperties(["foo", "zoo"]) ) diff --git a/__tests__/globals_only_vitest.res b/__tests__/globals_only_vitest.res index 9ec84d1..f53d727 100644 --- a/__tests__/globals_only_vitest.res +++ b/__tests__/globals_only_vitest.res @@ -1,5 +1,4 @@ open Vitest -module Promise = Js.Promise let () = { Only.test("Only.test", () => pass) @@ -8,7 +7,7 @@ let () = { Only.testPromise("testPromise - timeout ok", ~timeout=1, () => Promise.resolve(pass)) Only.testAll("testAll", list{"foo", "bar", "baz"}, input => - if Js.String.length(input) === 3 { + if String.length(input) === 3 { pass } else { fail("") @@ -18,7 +17,7 @@ let () = { input, output, )) => - if Js.String.length(input) === output { + if String.length(input) === output { pass } else { fail("") @@ -26,7 +25,7 @@ let () = { ) Only.testAllPromise("testAllPromise", list{"foo", "bar", "baz"}, input => Promise.resolve( - if Js.String.length(input) === 3 { + if String.length(input) === 3 { pass } else { fail("") @@ -38,7 +37,7 @@ let () = { list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, ((input, output)) => Promise.resolve( - if Js.String.length(input) === output { + if String.length(input) === output { pass } else { fail("") diff --git a/__tests__/globals_vitest.res b/__tests__/globals_vitest.res index 0fff1d4..9b354b9 100644 --- a/__tests__/globals_vitest.res +++ b/__tests__/globals_vitest.res @@ -1,5 +1,4 @@ open Vitest -module Promise = Js.Promise let () = { test("pass", () => pass) @@ -19,18 +18,18 @@ let () = { testPromise("testPromise - timeout ok", ~timeout=1, () => Promise.resolve(pass)) Skip.testPromise("testPromise - timeout fail", ~timeout=1, () => - Promise.make((~resolve as _, ~reject as _) => ()) + Promise.make((_, _) => ()) ) testAll("testAll", list{"foo", "bar", "baz"}, input => - if Js.String.length(input) === 3 { + if String.length(input) === 3 { pass } else { fail("") } ) testAll("testAll - tuples", list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, ((input, output)) => - if Js.String.length(input) === output { + if String.length(input) === output { pass } else { fail("") @@ -39,7 +38,7 @@ let () = { testAllPromise("testAllPromise", list{"foo", "bar", "baz"}, input => Promise.resolve( - if Js.String.length(input) === 3 { + if String.length(input) === 3 { pass } else { fail("") @@ -51,7 +50,7 @@ let () = { output, )) => Promise.resolve( - if Js.String.length(input) === output { + if String.length(input) === output { pass } else { fail("") @@ -147,7 +146,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - beforeAllPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + beforeAllPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => pass) /* runner will crash if there's no tests */ }) }) @@ -236,7 +235,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - beforeEachPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + beforeEachPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => pass) /* runner will crash if there's no tests */ }) }) @@ -381,7 +380,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - afterAllPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + afterAllPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => pass) /* runner will crash if there's no tests */ }) }) @@ -470,7 +469,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - afterEachPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + afterEachPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => pass) /* runner will crash if there's no tests */ }) }) @@ -485,11 +484,11 @@ let () = { Skip.testPromise("Skip.testPromise", () => Promise.resolve(pass)) Skip.testPromise("testPromise - timeout", ~timeout=1, () => - Promise.make((~resolve as _, ~reject as _) => ()) + Promise.make((_, _) => ()) ) Skip.testAll("testAll", list{"foo", "bar", "baz"}, input => - if Js.String.length(input) === 3 { + if String.length(input) === 3 { pass } else { fail("") @@ -499,7 +498,7 @@ let () = { input, output, )) => - if Js.String.length(input) === output { + if String.length(input) === output { pass } else { fail("") @@ -507,7 +506,7 @@ let () = { ) Skip.testAllPromise("testAllPromise", list{"foo", "bar", "baz"}, input => Promise.resolve( - if Js.String.length(input) === 3 { + if String.length(input) === 3 { pass } else { fail("") @@ -519,7 +518,7 @@ let () = { list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, ((input, output)) => Promise.resolve( - if Js.String.length(input) === output { + if String.length(input) === output { pass } else { fail("") diff --git a/__tests__/mockjs_vitest.res b/__tests__/mockjs_vitest.res index 1b4b9e9..024fddd 100644 --- a/__tests__/mockjs_vitest.res +++ b/__tests__/mockjs_vitest.res @@ -1,6 +1,11 @@ open Vitest open ExpectJs +// Helpers for creating undefined values in tests +// (replaces deprecated makeUndefined and emptyUndefined) +external makeUndefined: 'a => undefined<'a> = "%identity" +external emptyUndefined: undefined<'a> = "%undefined" + /* TODO: move to BS std lib */ @send external bind: ('a => 'b, 'c, 'a, 'a) => 'b = "bind" @send external bindThis: ('a => 'b, 'c) => 'a => 'b = "bind" @@ -89,14 +94,14 @@ let _ = { test("mockReset - resets implementations", _ => { let mockFn = Mock.inferred_fn() - mockFn->MockJs.mockReturnValue(Js.Undefined.return(128))->ignore + mockFn->MockJs.mockReturnValue(makeUndefined(128))->ignore let fn = MockJs.fn(mockFn) let before = call(fn, ()) mockFn->MockJs.mockReset let after = call(fn, ()) - expect((before, after))->toEqual((Js.Undefined.return(128), Js.Undefined.empty)) + expect((before, after))->toEqual((makeUndefined(128), emptyUndefined)) }) test("mockImplementation - sets implementation to use for subsequent invocations", _ => { @@ -104,12 +109,12 @@ let _ = { let fn = MockJs.fn(mockFn) let before = call(fn, 10) - mockFn->MockJs.mockImplementation(a => Js.Undefined.return(Int.toString(a)))->ignore + mockFn->MockJs.mockImplementation(a => makeUndefined(Int.toString(a)))->ignore expect((before, call(fn, 18), call(fn, 24)))->toEqual(( - Js.Undefined.empty, - Js.Undefined.return("18"), - Js.Undefined.return("24"), + emptyUndefined, + makeUndefined("18"), + makeUndefined("24"), )) }) @@ -118,16 +123,16 @@ let _ = { let fn = MockJs.fn(mockFn) let before = call(fn, 10) - mockFn->MockJs.mockImplementationOnce(a => Js.Undefined.return(Int.toString(a)))->ignore + mockFn->MockJs.mockImplementationOnce(a => makeUndefined(Int.toString(a)))->ignore mockFn - ->MockJs.mockImplementationOnce(a => Js.Undefined.return(Int.toString(a * 2))) + ->MockJs.mockImplementationOnce(a => makeUndefined(Int.toString(a * 2))) ->ignore expect((before, call(fn, 18), call(fn, 24), call(fn, 12)))->toEqual(( - Js.Undefined.empty, - Js.Undefined.return("18"), - Js.Undefined.return("48"), - Js.Undefined.empty, + emptyUndefined, + makeUndefined("18"), + makeUndefined("48"), + emptyUndefined, )) }) @@ -140,9 +145,9 @@ let _ = { mockFn->MockJs.mockReturnThis->ignore expect((before, call(fn, ()), call(fn, ())))->toEqual(( - Js.Undefined.empty, - Js.Undefined.return(this), - Js.Undefined.return(this), + emptyUndefined, + makeUndefined(this), + makeUndefined(this), )) }) @@ -151,12 +156,12 @@ let _ = { let fn = MockJs.fn(mockFn) let before = call(fn, 10) - mockFn->MockJs.mockReturnValue(Js.Undefined.return(146))->ignore + mockFn->MockJs.mockReturnValue(makeUndefined(146))->ignore expect((before, call(fn, 18), call(fn, 24)))->toEqual(( - Js.Undefined.empty, - Js.Undefined.return(146), - Js.Undefined.return(146), + emptyUndefined, + makeUndefined(146), + makeUndefined(146), )) }) @@ -165,14 +170,14 @@ let _ = { let fn = MockJs.fn(mockFn) let before = call(fn, 10) - mockFn->MockJs.mockReturnValueOnce(Js.Undefined.return(29))->ignore - mockFn->MockJs.mockReturnValueOnce(Js.Undefined.return(41))->ignore + mockFn->MockJs.mockReturnValueOnce(makeUndefined(29))->ignore + mockFn->MockJs.mockReturnValueOnce(makeUndefined(41))->ignore expect((before, call(fn, 18), call(fn, 24), call(fn, 12)))->toEqual(( - Js.Undefined.empty, - Js.Undefined.return(29), - Js.Undefined.return(41), - Js.Undefined.empty, + emptyUndefined, + makeUndefined(29), + makeUndefined(41), + emptyUndefined, )) }) @@ -295,7 +300,7 @@ let _ = { expect (before, fn (), fn ()) -> toEqual - (Js.Undefined.empty, Js.Undefined.return this, Js.Undefined.return this) + (emptyUndefined, makeUndefined this, makeUndefined this) ); */ diff --git a/__tests__/runner_only_vitest.res b/__tests__/runner_only_vitest.res index 459bc6b..7499004 100644 --- a/__tests__/runner_only_vitest.res +++ b/__tests__/runner_only_vitest.res @@ -1,5 +1,3 @@ -module Promise = Js.Promise2 - include Vitest.Runner({ type t<_> = bool let affirm = ok => assert(ok) @@ -11,19 +9,19 @@ let () = { Only.testPromise("Only.testPromise", () => Promise.resolve(true)) Only.testPromise("testPromise - timeout ok", ~timeout=1, () => Promise.resolve(true)) - Only.testAll("testAll", list{"foo", "bar", "baz"}, input => Js.String.length(input) === 3) + Only.testAll("testAll", list{"foo", "bar", "baz"}, input => String.length(input) === 3) Only.testAll("testAll - tuples", list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, (( input, output, - )) => Js.String.length(input) === output) + )) => String.length(input) === output) Only.testAllPromise("testAllPromise", list{"foo", "bar", "baz"}, input => - Promise.resolve(Js.String.length(input) === 3) + Promise.resolve(String.length(input) === 3) ) Only.testAllPromise( "testAllPromise - tuples", list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, - ((input, output)) => Promise.resolve(Js.String.length(input) === output), + ((input, output)) => Promise.resolve(String.length(input) === output), ) Only.describe("Only.describe", () => test("some aspect", () => 1 + 2 === 3)) diff --git a/__tests__/runner_vitest.res b/__tests__/runner_vitest.res index b7f34c8..f38860e 100644 --- a/__tests__/runner_vitest.res +++ b/__tests__/runner_vitest.res @@ -1,5 +1,3 @@ -module Promise = Js.Promise2 - include Vitest.Runner({ type t<_> = bool let affirm = ok => assert(ok) @@ -19,21 +17,21 @@ let () = { testPromise("testPromise - timeout ok", ~timeout=1, () => Promise.resolve(true)) Skip.testPromise("testPromise - timeout fail", ~timeout=1, () => - Promise.make((~resolve as _, ~reject as _) => ()) + Promise.make((_, _) => ()) ) - testAll("testAll", list{"foo", "bar", "baz"}, input => Js.String.length(input) === 3) + testAll("testAll", list{"foo", "bar", "baz"}, input => String.length(input) === 3) testAll("testAll - tuples", list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, ((input, output)) => - Js.String.length(input) === output + String.length(input) === output ) testAllPromise("testAllPromise", list{"foo", "bar", "baz"}, input => - Promise.resolve(Js.String.length(input) === 3) + Promise.resolve(String.length(input) === 3) ) testAllPromise("testAllPromise - tuples", list{("foo", 3), ("barbaz", 6), ("bananas!", 8)}, (( input, output, - )) => Promise.resolve(Js.String.length(input) === output)) + )) => Promise.resolve(String.length(input) === output)) describe("describe", () => test("some aspect", () => true)) @@ -77,7 +75,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - beforeAllPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + beforeAllPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => true) /* runner will crash if there's no tests */ }) @@ -123,7 +121,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - beforeEachPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + beforeEachPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => true) /* runner will crash if there's no tests */ }) @@ -187,7 +185,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - afterAllPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + afterAllPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => true) }) }) @@ -232,7 +230,7 @@ let () = { }) Skip.describe("timeout should fail suite", () => { - afterEachPromise(~timeout=1, () => Promise.make((~resolve as _, ~reject as _) => ())) + afterEachPromise(~timeout=1, () => Promise.make((_, _) => ())) test("", () => true) }) }) @@ -247,7 +245,7 @@ let () = { Skip.testPromise("Skip.testPromise", () => Promise.resolve(false)) Skip.testPromise("testPromise - timeout", ~timeout=1, () => - Promise.make((~resolve, ~reject as _) => resolve(false)) + Promise.make((resolve, _) => resolve(false)) ) Skip.testAll("testAll", list{"foo", "bar", "baz"}, _ => false) diff --git a/__tests__/vitest_vitest.res b/__tests__/vitest_vitest.res index 924d1b6..a09eb42 100644 --- a/__tests__/vitest_vitest.res +++ b/__tests__/vitest_vitest.res @@ -1,7 +1,6 @@ open Vitest open Expect // open! Expect.Operators -module Promise = Js.Promise @val external setTimeout: (unit => unit, int) => unit = "setTimeout" @val external setImmediate: (unit => unit) => unit = "setImmediate" @@ -26,7 +25,7 @@ let () = describe("Fake Timers", () => { Vi.runAllTicks() await Promise.make( - (~resolve, ~reject as _) => + (resolve, _) => nextTick(() => resolve(expect((before, flag.contents))->toEqual((false, true)))), ) }) @@ -96,7 +95,7 @@ let () = describe("Fake Timers", () => { Vi.useFakeTimers(~implementation=#legacy, ()) Vi.useRealTimers() - await Promise.make((~resolve, ~reject as _) => nextTick(() => resolve(pass))) + await Promise.make((resolve, _) => nextTick(() => resolve(pass))) }) }) diff --git a/package.json b/package.json index 1ac1694..e9f5b1d 100644 --- a/package.json +++ b/package.json @@ -31,17 +31,16 @@ "homepage": "https://github.com/greenfinity/rescript-vitest#readme", "files": [ "src", - "lib/bs", "rescript.json", "__tests__/.gitkeep" ], "peerDependencies": { - "rescript": "^12.0.0-beta.4" + "rescript": "^12.0.0" }, "devDependencies": { "auto-changelog": "^2.5.0", "nodemon": "^3.1.7", - "rescript": "^12.0.0-beta.4" + "rescript": "^12.0.0" }, "dependencies": { "@vitest/coverage-v8": "^2.1.8", diff --git a/src/Vitest.res b/src/Vitest.res index ae80502..26e8744 100644 --- a/src/Vitest.res +++ b/src/Vitest.res @@ -1,5 +1,14 @@ @send external then: (promise<'a>, @uncurry ('a => promise<'b>)) => promise<'b> = "then" -module Promise = Js.Promise + +// Helper to get an undefined value (replaces deprecated Js.undefined) +external undefinedValue: undefined<'a> = "%undefined" + +// Helper to convert option to undefined (replaces deprecated Js.Undefined.fromOption) +let undefinedFromOption = x => + switch x { + | None => undefinedValue + | Some(x) => Obj.magic(x) + } type modifier<'a> = [ | #Just('a) @@ -28,18 +37,18 @@ type rec assertion = | LessThan(modifier<('a, 'a)>): assertion | LessThanOrEqual(modifier<('a, 'a)>): assertion | StringContains(modifier<(string, string)>): assertion - | StringMatch(modifier<(string, Js.Re.t)>): assertion + | StringMatch(modifier<(string, RegExp.t)>): assertion | Throws(modifier _>): assertion | MatchInlineSnapshot(_, string): assertion | MatchSnapshot(_): assertion | MatchSnapshotName(_, string): assertion | ThrowsMatchSnapshot(unit => _): assertion /* JS */ - | Defined(modifier>): assertion + | Defined(modifier>): assertion | Falsy(modifier<'a>): assertion - | Null(modifier>): assertion + | Null(modifier>): assertion | Truthy(modifier<'a>): assertion - | Undefined(modifier>): assertion + | Undefined(modifier>): assertion | ObjectContains(modifier<({..}, array)>): assertion | ObjectMatch(modifier<({..}, {..})>): assertion @@ -136,150 +145,150 @@ module LLExpect: { module Runner = (A: Asserter) => { let affirm = A.affirm @module("vitest") - external _test: (string, @uncurry unit => Js.undefined) => unit = "test" + external _test: (string, @uncurry unit => undefined) => unit = "test" @module("vitest") @module("vitest") - external // external _testAsync: (string, (unit => unit) => Js.undefined, Js.Undefined.t) => unit = + external // external _testAsync: (string, (unit => unit) => undefined, undefined) => unit = // "test" - _testPromise: (string, @uncurry unit => promise<'a>, Js.Undefined.t) => unit = "test" + _testPromise: (string, @uncurry unit => promise<'a>, undefined) => unit = "test" let test = (name, callback) => _test(name, () => { affirm(callback()) - Js.undefined + undefinedValue }) let testPromise = (name, ~timeout=?, callback) => _testPromise( name, () => then(callback(), a => a->A.affirm->Promise.resolve), - Js.Undefined.fromOption(timeout), + undefinedFromOption(timeout), ) let testAll = (name, inputs, callback) => List.forEach(inputs, input => { - let name = `${name} - ${input->Js.String.make}` + let name = `${name} - ${input->String.make}` _test(name, () => { affirm(callback(input)) - Js.undefined + undefinedValue }) }) let testAllPromise = (name: string, inputs, ~timeout=?, callback) => List.forEach(inputs, input => { - let name = `${name} - ${input->Js.String.make}` + let name = `${name} - ${input->String.make}` _testPromise( name, () => then(callback(input), a => a->A.affirm->Promise.resolve), - Js.Undefined.fromOption(timeout), + undefinedFromOption(timeout), ) }) @module("vitest") - external describe: (string, @uncurry unit => Js.undefined) => unit = "describe" + external describe: (string, @uncurry unit => undefined) => unit = "describe" let describe = (label, f) => describe(label, () => { f() - Js.undefined + undefinedValue }) @module("vitest") external describePromise: ( string, ~timeout: int=?, - @uncurry unit => promise>, + @uncurry unit => promise>, ) => unit = "describe" let describePromise = (label, ~timeout=?, f) => describePromise(label, ~timeout?, async () => { await f() - Js.undefined + undefinedValue }) @module("vitest") external beforeAll: (unit => unit) => unit = "beforeAll" @module("vitest") - external beforeAllPromise: (@uncurry unit => promise<'a>, Js.Undefined.t) => unit = + external beforeAllPromise: (@uncurry unit => promise<'a>, undefined) => unit = "beforeAll" let beforeAllPromise = (~timeout=?, callback) => - beforeAllPromise(() => Promise.resolve(callback()), Js.Undefined.fromOption(timeout)) + beforeAllPromise(() => Promise.resolve(callback()), undefinedFromOption(timeout)) @module("vitest") external beforeEach: (unit => unit) => unit = "beforeEach" @module("vitest") - external beforeEachPromise: (@uncurry unit => promise<'a>, Js.Undefined.t) => unit = + external beforeEachPromise: (@uncurry unit => promise<'a>, undefined) => unit = "beforeEach" let beforeEachPromise = (~timeout=?, callback) => - beforeEachPromise(() => Promise.resolve(callback()), Js.Undefined.fromOption(timeout)) + beforeEachPromise(() => Promise.resolve(callback()), undefinedFromOption(timeout)) @module("vitest") external afterAll: (unit => unit) => unit = "afterAll" @module("vitest") - external afterAllPromise: (@uncurry unit => promise<'a>, Js.Undefined.t) => unit = "afterAll" + external afterAllPromise: (@uncurry unit => promise<'a>, undefined) => unit = "afterAll" let afterAllPromise = (~timeout=?, callback) => - afterAllPromise(() => Promise.resolve(callback()), Js.Undefined.fromOption(timeout)) + afterAllPromise(() => Promise.resolve(callback()), undefinedFromOption(timeout)) @module("vitest") external afterEach: (unit => unit) => unit = "afterEach" @module("vitest") - external afterEachPromise: (@uncurry unit => promise<'a>, Js.Undefined.t) => unit = + external afterEachPromise: (@uncurry unit => promise<'a>, undefined) => unit = "afterEach" let afterEachPromise = (~timeout=?, callback) => - afterEachPromise(() => Promise.resolve(callback()), Js.Undefined.fromOption(timeout)) + afterEachPromise(() => Promise.resolve(callback()), undefinedFromOption(timeout)) module Only = { @module("vitest") @scope("it") - external _test: (string, @uncurry unit => Js.undefined) => unit = "only" + external _test: (string, @uncurry unit => undefined) => unit = "only" @module("vitest") @scope("it") - external _testPromise: (string, @uncurry unit => promise<'a>, Js.Undefined.t) => unit = + external _testPromise: (string, @uncurry unit => promise<'a>, undefined) => unit = "only" let test = (name, callback) => _test(name, () => { affirm(callback()) - Js.undefined + undefinedValue }) let testPromise = (name, ~timeout=?, callback) => _testPromise( name, () => then(callback(), a => a->affirm->Promise.resolve), - Js.Undefined.fromOption(timeout), + undefinedFromOption(timeout), ) let testAll = (name, inputs, callback) => List.forEach(inputs, input => { - let name = `${name} - ${input->Js.String.make}` + let name = `${name} - ${input->String.make}` _test(name, () => { affirm(callback(input)) - Js.undefined + undefinedValue }) }) let testAllPromise = (name, inputs, ~timeout=?, callback) => List.forEach(inputs, input => { - let name = `${name} - ${input->Js.String.make}` + let name = `${name} - ${input->String.make}` _testPromise( name, () => then(callback(input), a => a->A.affirm->Promise.resolve), - Js.Undefined.fromOption(timeout), + undefinedFromOption(timeout), ) }) @module("vitest") @scope("describe") - external describe: (string, @uncurry unit => Js.undefined) => unit = "only" + external describe: (string, @uncurry unit => undefined) => unit = "only" let describe = (label, f) => describe(label, () => { f() - Js.undefined + undefinedValue }) @module("vitest") @scope("describe") external describePromise: ( string, ~timeout: int=?, - @uncurry unit => promise>, + @uncurry unit => promise>, ) => unit = "only" let describePromise = (label, ~timeout=?, f) => describePromise(label, ~timeout?, async () => { await f() - Js.undefined + undefinedValue }) } @@ -291,32 +300,32 @@ module Runner = (A: Asserter) => { let testPromise = (name, ~timeout as _=?, callback) => testPromise(name, callback) let testAll = (name, inputs, callback) => List.forEach(inputs, input => { - let name = `${name} - ${input->Js.String.make}` + let name = `${name} - ${input->String.make}` test(name, () => callback(input)) }) let testAllPromise = (name, inputs, ~timeout as _=?, callback) => List.forEach(inputs, input => { - let name = `${name} - ${input->Js.String.make}` + let name = `${name} - ${input->String.make}` testPromise(name, () => callback(input)) }) @module("vitest") @scope("describe") - external describe: (string, @uncurry unit => Js.undefined) => unit = "skip" + external describe: (string, @uncurry unit => undefined) => unit = "skip" let describe = (label, f) => describe(label, () => { f() - Js.undefined + undefinedValue }) @module("vitest") @scope("describe") external describePromise: ( string, ~timeout: int=?, - @uncurry unit => promise>, + @uncurry unit => promise>, ) => unit = "skip" let describePromise = (label, ~timeout=?, f) => describePromise(label, ~timeout?, async () => { await f() - Js.undefined + undefinedValue }) } @@ -365,7 +374,7 @@ module Expect = { let toContainString = (b, p) => StringContains(mapMod(a => (a, p), b)) let toEqual = (b, p) => Equal(mapMod(a => (a, p), b)) let toHaveLength = (l, p) => ArrayLength(mapMod(a => (a, p), l)) - let toMatch = (p, s) => StringMatch(mapMod(a => (a, Js.Re.fromString(s)), p)) + let toMatch = (p, s) => StringMatch(mapMod(a => (a, RegExp.fromString(s)), p)) let toMatchInlineSnapshot = (#Just(a), inlineSnapshot) => MatchInlineSnapshot(a, inlineSnapshot) let toMatchRe = (re, p) => StringMatch(mapMod(a => (a, p), re)) let toMatchSnapshot = (#Just(a)) => MatchSnapshot(a) @@ -478,9 +487,9 @@ module Vi = { @module("vitest") @scope("vi") external useRealTimers: unit => unit = "useRealTimers" @module("vitest") @scope("vi") external setSystemTimeWithInt: int => unit = "setSystemTime" - @module("vitest") @scope("vi") external setSystemTimeWithDate: Js.Date.t => unit = "setSystemTime" + @module("vitest") @scope("vi") external setSystemTimeWithDate: Date.t => unit = "setSystemTime" - type systemTime = [#int(int) | #date(Js.Date.t)] + type systemTime = [#int(int) | #date(Date.t)] let setSystemTime = systemTime => switch systemTime { | #date(date) => setSystemTimeWithDate(date) @@ -496,7 +505,7 @@ module Mock = { /* genMockFromModule */ @module("vitest") external resetModules: unit => unit = "resetModules" @module("vitest") @scope("vi") - external inferred_fn: unit => MockJs.fn<'a => Js.undefined<'b>, 'a, Js.undefined<'b>> = + external inferred_fn: unit => MockJs.fn<'a => undefined<'b>, 'a, undefined<'b>> = "fn" /* not sure how useful this really is */ @module("vitest") @scope("vi") external fn: ('a => 'b) => MockJs.fn<'a => 'b, 'a, 'b> = "fn" @module("vitest") @scope("vi") diff --git a/src/Vitest.resi b/src/Vitest.resi index a7c2662..6150843 100644 --- a/src/Vitest.resi +++ b/src/Vitest.resi @@ -121,7 +121,7 @@ module Expect: { let toHaveLength: ([< partial>], int) => assertion let toMatch: ([< partial], string) => assertion let toMatchInlineSnapshot: (plainPartial<_>, string) => assertion - let toMatchRe: ([< partial], Js.Re.t) => assertion + let toMatchRe: ([< partial], RegExp.t) => assertion let toMatchSnapshot: plainPartial<_> => assertion let toMatchSnapshotWithName: (plainPartial<_>, string) => assertion let toThrow: [< partial _>] => assertion @@ -148,11 +148,11 @@ module Expect: { module ExpectJs: { include module type of Expect - let toBeDefined: [< partial>] => assertion + let toBeDefined: [< partial>] => assertion let toBeFalsy: [< partial<_>] => assertion - let toBeNull: [< partial>] => assertion + let toBeNull: [< partial>] => assertion let toBeTruthy: [< partial<_>] => assertion - let toBeUndefined: [< partial>] => assertion + let toBeUndefined: [< partial>] => assertion let toContainProperties: ([< partial<{..}>], array) => assertion let toMatchObject: ([< partial<{..}>], {..}) => assertion } @@ -199,7 +199,7 @@ module Vi: { external useFakeTimersImplementation: fakeTimerImplementation => unit = "useFakeTimers" let useFakeTimers: (~implementation: fakeTimerImplementation=?, unit) => unit @module("vitest") @scope("vi") external useRealTimers: unit => unit = "useRealTimers" - type systemTime = [#int(int) | #date(Js.Date.t)] + type systemTime = [#int(int) | #date(Date.t)] let setSystemTime: systemTime => unit } @@ -210,7 +210,7 @@ module Mock: { @module("vitest") external enableAutomock: unit => unit = "enableAutomock" @module("vitest") external resetModules: unit => unit = "resetModules" @module("vitest") @scope("vi") - external inferred_fn: unit => MockJs.fn<'a => Js.undefined<'b>, 'a, Js.undefined<'b>> = "fn" + external inferred_fn: unit => MockJs.fn<'a => undefined<'b>, 'a, undefined<'b>> = "fn" @module("vitest") @scope("vi") external fn: ('a => 'b) => MockJs.fn<'a => 'b, 'a, 'b> = "fn" @module("vitest") @scope("vi") external fn2: (('a, 'b) => 'c) => MockJs.fn<('a, 'b) => 'c, ('a, 'b), 'c> = "fn" diff --git a/yarn.lock b/yarn.lock index 4630209..6368cf6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -226,10 +226,10 @@ __metadata: auto-changelog: "npm:^2.5.0" jsdom: "npm:^25.0.1" nodemon: "npm:^3.1.7" - rescript: "npm:^12.0.0-beta.4" + rescript: "npm:^12.0.0" vitest: "npm:^2.1.8" peerDependencies: - rescript: ^12.0.0-beta.4 + rescript: ^12.0.0 languageName: unknown linkType: soft @@ -334,37 +334,44 @@ __metadata: languageName: node linkType: hard -"@rescript/darwin-arm64@npm:12.0.0-beta.4": - version: 12.0.0-beta.4 - resolution: "@rescript/darwin-arm64@npm:12.0.0-beta.4" +"@rescript/darwin-arm64@npm:12.1.0": + version: 12.1.0 + resolution: "@rescript/darwin-arm64@npm:12.1.0" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@rescript/darwin-x64@npm:12.0.0-beta.4": - version: 12.0.0-beta.4 - resolution: "@rescript/darwin-x64@npm:12.0.0-beta.4" +"@rescript/darwin-x64@npm:12.1.0": + version: 12.1.0 + resolution: "@rescript/darwin-x64@npm:12.1.0" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@rescript/linux-arm64@npm:12.0.0-beta.4": - version: 12.0.0-beta.4 - resolution: "@rescript/linux-arm64@npm:12.0.0-beta.4" +"@rescript/linux-arm64@npm:12.1.0": + version: 12.1.0 + resolution: "@rescript/linux-arm64@npm:12.1.0" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@rescript/linux-x64@npm:12.0.0-beta.4": - version: 12.0.0-beta.4 - resolution: "@rescript/linux-x64@npm:12.0.0-beta.4" +"@rescript/linux-x64@npm:12.1.0": + version: 12.1.0 + resolution: "@rescript/linux-x64@npm:12.1.0" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@rescript/win32-x64@npm:12.0.0-beta.4": - version: 12.0.0-beta.4 - resolution: "@rescript/win32-x64@npm:12.0.0-beta.4" +"@rescript/runtime@npm:12.1.0": + version: 12.1.0 + resolution: "@rescript/runtime@npm:12.1.0" + checksum: 10/96e28abddbcb401964fa51dd6fa3164fe4fbf4b27ad54d019fb6c51648016454dcbdcd4cc136383b2b6ed94687617c9a567dd1e293cf1699d250e38f205ec574 + languageName: node + linkType: hard + +"@rescript/win32-x64@npm:12.1.0": + version: 12.1.0 + resolution: "@rescript/win32-x64@npm:12.1.0" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -1873,15 +1880,16 @@ __metadata: languageName: node linkType: hard -"rescript@npm:^12.0.0-beta.4": - version: 12.0.0-beta.4 - resolution: "rescript@npm:12.0.0-beta.4" +"rescript@npm:^12.0.0": + version: 12.1.0 + resolution: "rescript@npm:12.1.0" dependencies: - "@rescript/darwin-arm64": "npm:12.0.0-beta.4" - "@rescript/darwin-x64": "npm:12.0.0-beta.4" - "@rescript/linux-arm64": "npm:12.0.0-beta.4" - "@rescript/linux-x64": "npm:12.0.0-beta.4" - "@rescript/win32-x64": "npm:12.0.0-beta.4" + "@rescript/darwin-arm64": "npm:12.1.0" + "@rescript/darwin-x64": "npm:12.1.0" + "@rescript/linux-arm64": "npm:12.1.0" + "@rescript/linux-x64": "npm:12.1.0" + "@rescript/runtime": "npm:12.1.0" + "@rescript/win32-x64": "npm:12.1.0" dependenciesMeta: "@rescript/darwin-arm64": optional: true @@ -1899,7 +1907,7 @@ __metadata: rescript: cli/rescript.js rescript-legacy: cli/rescript-legacy.js rescript-tools: cli/rescript-tools.js - checksum: 10/2dbb8cbd28e774e5039d4bc2bb91b523c1fdf4ab5fedafcb8fa1ee3367044fba422ea67707265c01dc6782b86d2a14c63c34a5c5c2eb43bffb5f9f73505955a1 + checksum: 10/47682d226880ef66385c2d1b07734701f7604391183485e2e214f3ca2d9f9fb282bdf6e0e8b53c54900b78e8953dfd941ef20965edb691a1295fd66f4bffbf1f languageName: node linkType: hard