diff --git a/dune b/dune index 2fb1b0e..2aac24f 100644 --- a/dune +++ b/dune @@ -1 +1 @@ -(ignored_subdirs (doc esy.lock lib node_modules)) +(dirs src test) diff --git a/dune-project b/dune-project index de4fc20..8a175b0 100644 --- a/dune-project +++ b/dune-project @@ -1 +1,2 @@ -(lang dune 1.0) +(lang dune 3.8) +(using melange 0.1) diff --git a/promise.opam b/promise.opam index 195cd4c..945d9e9 100644 --- a/promise.opam +++ b/promise.opam @@ -17,6 +17,7 @@ depends: [ "ocaml" "reason" {build & >= "3.3.2"} "result" + "melange" ] build: [ diff --git a/src/js/dune b/src/js/dune new file mode 100644 index 0000000..731b074 --- /dev/null +++ b/src/js/dune @@ -0,0 +1,10 @@ +(library + (name promise_js) + (public_name promise.melange) + (modes melange) + (wrapped false) + (libraries melange.belt) + (preprocess + (pps melange.ppx)) + (flags + (:standard -w +A-102-20))) diff --git a/src/js/promise.re b/src/js/promise.re index a63de20..31bc4ef 100644 --- a/src/js/promise.re +++ b/src/js/promise.re @@ -19,7 +19,7 @@ let onUnhandledException = ref(exn => { -[%%bs.raw {| +[%%mel.raw {| function PromiseBox(p) { this.nested = p; }; @@ -90,7 +90,6 @@ module Js_ = { external relax: promise('a) => rejectable('a, _) = "%identity"; - [@bs.val] external jsNew: (('a => unit) => ('e => unit) => unit) => rejectable('a, 'e) = "make"; @@ -105,10 +104,8 @@ module Js_ = { (p, resolve^, reject^); }; - [@bs.val] external resolved: 'a => rejectable('a, _) = "resolved"; - [@bs.val] external flatMap: (rejectable('a, 'e), 'a => rejectable('b, 'e)) => rejectable('b, 'e) = "then"; @@ -125,20 +122,16 @@ module Js_ = { v }); - [@bs.scope "Promise"] - [@bs.val] + [@mel.scope "Promise"] external rejected: 'e => rejectable(_, 'e) = "reject"; - [@bs.val] external catch: (rejectable('a, 'e), 'e => rejectable('a, 'e2)) => rejectable('a, 'e2) = "catch_"; - [@bs.val] external unbox: 'a => 'a = "unbox"; - [@bs.scope "Promise"] - [@bs.val] + [@mel.scope "Promise"] external jsAll: 'a => 'b = "all"; let allArray = promises => @@ -162,8 +155,7 @@ module Js_ = { let all6 = (p1, p2, p3, p4, p5, p6) => jsAll((p1, p2, p3, p4, p5, p6)); - [@bs.scope "Promise"] - [@bs.val] + [@mel.scope "Promise"] external jsRace: array(rejectable('a, 'e)) => rejectable('a, 'e) = "race"; let race = promises => diff --git a/test/bundle/dune b/test/bundle/dune new file mode 100644 index 0000000..b6379f1 --- /dev/null +++ b/test/bundle/dune @@ -0,0 +1,4 @@ +(library + (name bundle) + (modes melange) + (libraries melange.belt promise.melange)) diff --git a/test/dune b/test/dune deleted file mode 100644 index 79c4217..0000000 --- a/test/dune +++ /dev/null @@ -1,3 +0,0 @@ -(executable - (name test_main) - (libraries isoresult promise test_ffi)) diff --git a/test/ffi/js/dune b/test/ffi/js/dune new file mode 100644 index 0000000..63d61b5 --- /dev/null +++ b/test/ffi/js/dune @@ -0,0 +1,11 @@ +(library + (name test_ffi_js) + (modes melange) + (libraries framework_js) + (wrapped false) + (preprocess + (pps melange.ppx))) + +(copy_files + (mode fallback) + (files ../native/*.re)) diff --git a/test/js/test_ffi.re b/test/ffi/js/test_ffi.re similarity index 98% rename from test/js/test_ffi.re rename to test/ffi/js/test_ffi.re index 18346c0..5035fb0 100644 --- a/test/js/test_ffi.re +++ b/test/ffi/js/test_ffi.re @@ -4,7 +4,7 @@ -[%%bs.raw {| +[%%mel.raw {| function isPromise (p) { return (p instanceof Promise); } @@ -14,13 +14,8 @@ function isPromiseLike(v) { }; |}]; -[@bs.val] external isPromise: Promise.Js.t(_, _) => bool = "isPromise"; - -[@bs.val] external jsPromiseIsPromise: Js.Promise.t(_) => bool = "isPromise"; - -[@bs.val] external jsPromiseIsPromiseLike: Js.Promise.t(_) => bool = "isPromiseLike"; @@ -70,7 +65,7 @@ let interopTests = Framework.suite("interop", [ }), test("js promise is reason-promise", () => { - let js_promise: Promise.t(int) = [%bs.raw {|Promise.resolve(1)|}]; + let js_promise: Promise.t(int) = [%mel.raw {|Promise.resolve(1)|}]; js_promise ->Promise.flatMap(n => Promise.resolved(n + 1)) ->Promise.flatMap(n => Promise.resolved(n == 2)); @@ -78,7 +73,7 @@ let interopTests = Framework.suite("interop", [ test("reason-promise as js argument", () => { module Then = { - [@bs.send.pipe: Promise.t('a)] + [@mel.send.pipe: Promise.t('a)] external js_then: ('a => Promise.t('b)) => Promise.t('b) = "then"; }; @@ -243,7 +238,7 @@ let soundnessTests = Framework.suite("soundness", [ [@ocaml.warning "-33"] test("resolved: Almost-Promise-like", () => { - let open Js_OO; + /* let open Js_OO; */ Promise.resolved(makeAlmostPromiseLike(42)) ->Promise.flatMap(x => Promise.resolved(x##_then == 42)); }), diff --git a/test/ffi/native/dune b/test/ffi/native/dune new file mode 100644 index 0000000..04c668e --- /dev/null +++ b/test/ffi/native/dune @@ -0,0 +1,3 @@ +(library + (name test_ffi) + (libraries framework)) diff --git a/test/native/test_ffi.re b/test/ffi/native/test_ffi.re similarity index 100% rename from test/native/test_ffi.re rename to test/ffi/native/test_ffi.re diff --git a/test/framework/dune b/test/framework/dune deleted file mode 100644 index 5149281..0000000 --- a/test/framework/dune +++ /dev/null @@ -1,3 +0,0 @@ -(library - (name framework) - (libraries promise run)) diff --git a/test/framework/js/dune b/test/framework/js/dune new file mode 100644 index 0000000..5af6c4e --- /dev/null +++ b/test/framework/js/dune @@ -0,0 +1,9 @@ +(library + (name framework_js) + (modes melange) + (wrapped false) + (libraries promise_js)) + +(copy_files + (mode fallback) + (files ../native/*.re)) diff --git a/test/framework/native/dune b/test/framework/native/dune index 0b65a56..1ffa308 100644 --- a/test/framework/native/dune +++ b/test/framework/native/dune @@ -1,3 +1,3 @@ (library - (name run) + (name framework) (libraries promise)) diff --git a/test/framework/framework.re b/test/framework/native/framework.re similarity index 100% rename from test/framework/framework.re rename to test/framework/native/framework.re diff --git a/test/framework/framework.rei b/test/framework/native/framework.rei similarity index 100% rename from test/framework/framework.rei rename to test/framework/native/framework.rei diff --git a/test/isoresult/js/dune b/test/isoresult/js/dune new file mode 100644 index 0000000..9c1feec --- /dev/null +++ b/test/isoresult/js/dune @@ -0,0 +1,5 @@ +(library + (name isoresult_js) + (modes melange) + (wrapped false) + (libraries melange.belt)) diff --git a/test/js/benchmark.re b/test/js/benchmark.re index bfcfd86..c3022c7 100644 --- a/test/js/benchmark.re +++ b/test/js/benchmark.re @@ -8,7 +8,6 @@ let test = Framework.test; -[@bs.val] external hrtime: unit => (int, int) = "process.hrtime"; let hrtime = () => { diff --git a/test/js/dune b/test/js/dune new file mode 100644 index 0000000..f89a822 --- /dev/null +++ b/test/js/dune @@ -0,0 +1,9 @@ +(copy_files + (mode fallback) + (files ../native/*.re)) + +(melange.emit + (target test) + (libraries framework_js promise_js isoresult_js test_ffi_js) + (preprocess + (pps melange.ppx))) diff --git a/test/native/dune b/test/native/dune index 04c668e..79c4217 100644 --- a/test/native/dune +++ b/test/native/dune @@ -1,3 +1,3 @@ -(library - (name test_ffi) - (libraries framework)) +(executable + (name test_main) + (libraries isoresult promise test_ffi)) diff --git a/test/test_main.re b/test/native/test_main.re similarity index 100% rename from test/test_main.re rename to test/native/test_main.re diff --git a/test/test_promise.re b/test/native/test_promise.re similarity index 100% rename from test/test_promise.re rename to test/native/test_promise.re