diff options
author | Louis Pilfold <louis@lpil.uk> | 2023-08-03 12:23:39 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2023-08-03 12:23:39 +0100 |
commit | ceda2e3813cb5e8be7304b518e589c538b810d9e (patch) | |
tree | 41c510f8df25e714ab1e607410d127bc108eed26 | |
parent | 30569cb26334d0e253c66dfa7cb92c18ba0f3d8d (diff) | |
download | javascript-ceda2e3813cb5e8be7304b518e589c538b810d9e.tar.gz javascript-ceda2e3813cb5e8be7304b518e589c538b810d9e.zip |
Update for Gleam v0.30
-rw-r--r-- | .github/workflows/test.yml | 2 | ||||
-rw-r--r-- | CHANGELOG.md | 4 | ||||
-rw-r--r-- | src/gleam/javascript.gleam | 24 | ||||
-rw-r--r-- | src/gleam/javascript/array.gleam | 34 | ||||
-rw-r--r-- | src/gleam/javascript/promise.gleam | 100 | ||||
-rw-r--r-- | test/gleam/javascript/promise_test.gleam | 80 |
6 files changed, 146 insertions, 98 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 257ef15..6b3940d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -14,7 +14,7 @@ jobs: - uses: erlef/setup-beam@v1 with: otp-version: false - gleam-version: "0.27.0" + gleam-version: "0.30.4" - uses: actions/setup-node@v2 with: node-version: '16' diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e365e1..d000fea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## v0.5.0 - 2023-01-19 + +- Updated for Gleam v0.30.0. + ## v0.4.0 - 2023-01-19 - `array.length` was renamed to `array.size` to match Gleam conventions of size diff --git a/src/gleam/javascript.gleam b/src/gleam/javascript.gleam index c7efddb..a0c12ba 100644 --- a/src/gleam/javascript.gleam +++ b/src/gleam/javascript.gleam @@ -10,24 +10,24 @@ pub type TypeOf { FunctionType } -pub external type Symbol +pub type Symbol -pub external fn type_of(value) -> TypeOf = - "../ffi.mjs" "type_of" +@external(javascript, "../ffi.mjs", "type_of") +pub fn type_of(a: value) -> TypeOf -pub external fn get_symbol(String) -> Symbol = - "../ffi.mjs" "get_symbol" +@external(javascript, "../ffi.mjs", "get_symbol") +pub fn get_symbol(a: String) -> Symbol -pub external type Reference(value) +pub type Reference(value) -pub external fn dereference(Reference(a)) -> a = - "../ffi.mjs" "dereference" +@external(javascript, "../ffi.mjs", "dereference") +pub fn dereference(a: Reference(a)) -> a -pub external fn set_reference(Reference(a), a) -> a = - "../ffi.mjs" "set_reference" +@external(javascript, "../ffi.mjs", "set_reference") +pub fn set_reference(a: Reference(a), b: a) -> a -pub external fn make_reference(a) -> Reference(a) = - "../ffi.mjs" "make_reference" +@external(javascript, "../ffi.mjs", "make_reference") +pub fn make_reference(a: a) -> Reference(a) // returns the old value pub fn update_reference(ref: Reference(a), f: fn(a) -> a) -> a { diff --git a/src/gleam/javascript/array.gleam b/src/gleam/javascript/array.gleam index 19b860d..e644236 100644 --- a/src/gleam/javascript/array.gleam +++ b/src/gleam/javascript/array.gleam @@ -2,28 +2,28 @@ /// /// Unlike most data structures in Gleam this one is mutable. /// -pub external type Array(element) +pub type Array(element) /// Convert a JavaScript array to a Gleam list. /// /// Runs in linear time. /// -pub external fn to_list(Array(element)) -> List(element) = - "../../gleam.mjs" "toList" +@external(javascript, "../../gleam.mjs", "toList") +pub fn to_list(a: Array(element)) -> List(element) /// Convert a Gleam list to a JavaScript array. /// /// Runs in linear time. /// -pub external fn from_list(List(element)) -> Array(element) = - "../../ffi.mjs" "toArray" +@external(javascript, "../../ffi.mjs", "toArray") +pub fn from_list(a: List(element)) -> Array(element) /// Get the number of elements in the array. /// /// Runs in constant time. /// -pub external fn size(Array(element)) -> Int = - "../../ffi.mjs" "length" +@external(javascript, "../../ffi.mjs", "length") +pub fn size(a: Array(element)) -> Int /// Returns a new array containing only the elements of the first array after /// the function has been applied to each one. @@ -37,8 +37,8 @@ pub external fn size(Array(element)) -> Int = /// from_list([4, 8, 12]) /// ``` /// -pub external fn map(Array(a), with: fn(a) -> b) -> Array(b) = - "../../ffi.mjs" "map" +@external(javascript, "../../ffi.mjs", "map") +pub fn map(a: Array(a), with with: fn(a) -> b) -> Array(b) /// Reduces a list of elements into a single value by calling a given function /// on each element, going from left to right. @@ -48,8 +48,8 @@ pub external fn map(Array(a), with: fn(a) -> b) -> Array(b) = /// /// Runs in linear time. /// -pub external fn fold(over: Array(e), from: a, with: fn(a, e) -> a) -> a = - "../../ffi.mjs" "reduce" +@external(javascript, "../../ffi.mjs", "reduce") +pub fn fold(over over: Array(e), from from: a, with with: fn(a, e) -> a) -> a /// Reduces a list of elements into a single value by calling a given function /// on each element, going from right to left. @@ -59,8 +59,12 @@ pub external fn fold(over: Array(e), from: a, with: fn(a, e) -> a) -> a = /// /// Runs in linear time. /// -pub external fn fold_right(over: Array(e), from: a, with: fn(a, e) -> a) -> a = - "../../ffi.mjs" "reduceRight" +@external(javascript, "../../ffi.mjs", "reduceRight") +pub fn fold_right( + over over: Array(e), + from from: a, + with with: fn(a, e) -> a, +) -> a /// Get the element at the given index. /// @@ -76,5 +80,5 @@ pub external fn fold_right(over: Array(e), from: a, with: fn(a, e) -> a) -> a = /// Error(Nil) /// ``` /// -pub external fn get(Array(e), Int) -> Result(e, Nil) = - "../../ffi.mjs" "index" +@external(javascript, "../../ffi.mjs", "index") +pub fn get(a: Array(e), b: Int) -> Result(e, Nil) diff --git a/src/gleam/javascript/promise.gleam b/src/gleam/javascript/promise.gleam index 94559ac..8d531eb 100644 --- a/src/gleam/javascript/promise.gleam +++ b/src/gleam/javascript/promise.gleam @@ -3,19 +3,19 @@ import gleam/javascript/array.{Array} // TODO: docs // TODO: labels -pub external type Promise(value) +pub type Promise(value) -pub external fn resolve(value) -> Promise(value) = - "../../ffi.mjs" "resolve" +@external(javascript, "../../ffi.mjs", "resolve") +pub fn resolve(a: value) -> Promise(value) -pub external fn rescue(Promise(value), fn(Dynamic) -> value) -> Promise(value) = - "../../ffi.mjs" "rescue" +@external(javascript, "../../ffi.mjs", "rescue") +pub fn rescue(a: Promise(value), b: fn(Dynamic) -> value) -> Promise(value) -pub external fn await(Promise(a), fn(a) -> Promise(b)) -> Promise(b) = - "../../ffi.mjs" "then" +@external(javascript, "../../ffi.mjs", "then") +pub fn await(a: Promise(a), b: fn(a) -> Promise(b)) -> Promise(b) -pub external fn map(Promise(a), fn(a) -> b) -> Promise(b) = - "../../ffi.mjs" "map_promise" +@external(javascript, "../../ffi.mjs", "map_promise") +pub fn map(a: Promise(a), b: fn(a) -> b) -> Promise(b) pub fn tap(promise: Promise(a), callback: fn(a) -> b) -> Promise(a) { promise @@ -51,45 +51,45 @@ pub fn try_await( }) } -pub external fn await2(Promise(a), Promise(b)) -> Promise(#(a, b)) = - "../../ffi.mjs" "all_promises" - -pub external fn await3( - Promise(a), - Promise(b), - Promise(c), -) -> Promise(#(a, b, c)) = - "../../ffi.mjs" "all_promises" - -pub external fn await4( - Promise(a), - Promise(b), - Promise(c), - Promise(d), -) -> Promise(#(a, b, c, d)) = - "../../ffi.mjs" "all_promises" - -pub external fn await5( - Promise(a), - Promise(b), - Promise(c), - Promise(d), - Promise(e), -) -> Promise(#(a, b, c, d, e)) = - "../../ffi.mjs" "all_promises" - -pub external fn await6( - Promise(a), - Promise(b), - Promise(c), - Promise(d), - Promise(e), - Promise(f), -) -> Promise(#(a, b, c, d, e, f)) = - "../../ffi.mjs" "all_promises" - -pub external fn await_array(Array(Promise(a))) -> Promise(Array(a)) = - "../../ffi.mjs" "all_promises" +@external(javascript, "../../ffi.mjs", "all_promises") +pub fn await2(a: Promise(a), b: Promise(b)) -> Promise(#(a, b)) + +@external(javascript, "../../ffi.mjs", "all_promises") +pub fn await3( + a: Promise(a), + b: Promise(b), + c: Promise(c), +) -> Promise(#(a, b, c)) + +@external(javascript, "../../ffi.mjs", "all_promises") +pub fn await4( + a: Promise(a), + b: Promise(b), + c: Promise(c), + d: Promise(d), +) -> Promise(#(a, b, c, d)) + +@external(javascript, "../../ffi.mjs", "all_promises") +pub fn await5( + a: Promise(a), + b: Promise(b), + c: Promise(c), + d: Promise(d), + e: Promise(e), +) -> Promise(#(a, b, c, d, e)) + +@external(javascript, "../../ffi.mjs", "all_promises") +pub fn await6( + a: Promise(a), + b: Promise(b), + c: Promise(c), + d: Promise(d), + e: Promise(e), + f: Promise(f), +) -> Promise(#(a, b, c, d, e, f)) + +@external(javascript, "../../ffi.mjs", "all_promises") +pub fn await_array(a: Array(Promise(a))) -> Promise(Array(a)) pub fn await_list(xs: List(Promise(a))) -> Promise(List(a)) { xs @@ -97,5 +97,5 @@ pub fn await_list(xs: List(Promise(a))) -> Promise(List(a)) { |> map(array.to_list) } -external fn do_await_list(List(Promise(a))) -> Promise(Array(a)) = - "../../ffi.mjs" "all_promises" +@external(javascript, "../../ffi.mjs", "all_promises") +fn do_await_list(a: List(Promise(a))) -> Promise(Array(a)) diff --git a/test/gleam/javascript/promise_test.gleam b/test/gleam/javascript/promise_test.gleam index 1645d10..159b064 100644 --- a/test/gleam/javascript/promise_test.gleam +++ b/test/gleam/javascript/promise_test.gleam @@ -16,84 +16,114 @@ pub fn map_does_not_collapse_nested_promise_test() -> Promise(Promise(Int)) { pub fn await_test() -> Promise(Int) { promise.resolve(1) |> promise.await(fn(a) { promise.resolve(a + 1) }) - |> promise.tap(fn(a) { let assert 2 = a }) + |> promise.tap(fn(a) { + let assert 2 = a + }) } pub fn await_does_not_collapse_nested_promise_test() -> Promise(Int) { promise.resolve(1) |> promise.await(promise.resolve) - |> promise.tap(fn(value) { let assert 1 = value }) + |> promise.tap(fn(value) { + let assert 1 = value + }) } pub fn map_test() -> Promise(Int) { promise.resolve(1) |> promise.map(fn(a) { a + 1 }) - |> promise.tap(fn(a) { let assert 2 = a }) + |> promise.tap(fn(a) { + let assert 2 = a + }) } pub fn tap_test() -> Promise(Int) { promise.resolve(1) |> promise.tap(fn(a) { a + 1 }) - |> promise.tap(fn(a) { let assert 1 = a }) + |> promise.tap(fn(a) { + let assert 1 = a + }) } pub fn map_try_ok_ok_test() -> Promise(Result(Int, Int)) { promise.resolve(Ok(1)) |> promise.map_try(fn(a) { Ok(a + 1) }) - |> promise.tap(fn(a) { let assert Ok(2) = a }) + |> promise.tap(fn(a) { + let assert Ok(2) = a + }) } pub fn map_try_ok_error_test() -> Promise(Result(Int, Int)) { promise.resolve(Ok(1)) |> promise.map_try(fn(a) { Error(a + 1) }) - |> promise.tap(fn(a) { let assert Error(2) = a }) + |> promise.tap(fn(a) { + let assert Error(2) = a + }) } pub fn map_try_error_test() -> Promise(Result(Int, Int)) { promise.resolve(Error(1)) |> promise.map_try(fn(a) { Ok(a + 1) }) - |> promise.tap(fn(a) { let assert Error(1) = a }) + |> promise.tap(fn(a) { + let assert Error(1) = a + }) } pub fn try_await_ok_ok_test() -> Promise(Result(Int, Int)) { promise.resolve(Ok(1)) |> promise.try_await(fn(a) { promise.resolve(Ok(a + 1)) }) - |> promise.tap(fn(a) { let assert Ok(2) = a }) + |> promise.tap(fn(a) { + let assert Ok(2) = a + }) } pub fn try_await_ok_error_test() -> Promise(Result(Int, Int)) { promise.resolve(Ok(1)) |> promise.try_await(fn(a) { promise.resolve(Error(a + 1)) }) - |> promise.tap(fn(a) { let assert Error(2) = a }) + |> promise.tap(fn(a) { + let assert Error(2) = a + }) } pub fn try_await_error_test() -> Promise(Result(Int, Int)) { promise.resolve(Error(1)) |> promise.try_await(fn(a) { promise.resolve(Ok(a + 1)) }) - |> promise.tap(fn(a) { let assert Error(1) = a }) + |> promise.tap(fn(a) { + let assert Error(1) = a + }) } pub fn rescue_healthy_test() { promise.resolve(1) |> promise.rescue(fn(_) { 100 }) - |> promise.tap(fn(a) { let assert 1 = a }) + |> promise.tap(fn(a) { + let assert 1 = a + }) } pub fn rescue_poisoned_test() { promise.resolve(1) - |> promise.map(fn(_) { let assert 1 = 2 }) + |> promise.map(fn(_) { + let assert 1 = 2 + }) |> promise.rescue(fn(_) { 100 }) - |> promise.tap(fn(a) { let assert 100 = a }) + |> promise.tap(fn(a) { + let assert 100 = a + }) } pub fn await2_test() { promise.await2(promise.resolve(1), promise.resolve(3)) - |> promise.tap(fn(x) { let assert #(1, 3) = x }) + |> promise.tap(fn(x) { + let assert #(1, 3) = x + }) } pub fn await3_test() { promise.await3(promise.resolve(1), promise.resolve(3), promise.resolve(4)) - |> promise.tap(fn(x) { let assert #(1, 3, 4) = x }) + |> promise.tap(fn(x) { + let assert #(1, 3, 4) = x + }) } pub fn await4_test() { @@ -103,7 +133,9 @@ pub fn await4_test() { promise.resolve(4), promise.resolve(6), ) - |> promise.tap(fn(x) { let assert #(1, 3, 4, 6) = x }) + |> promise.tap(fn(x) { + let assert #(1, 3, 4, 6) = x + }) } pub fn await5_test() { @@ -114,7 +146,9 @@ pub fn await5_test() { promise.resolve(6), promise.resolve(10), ) - |> promise.tap(fn(x) { let assert #(1, 3, 4, 6, 10) = x }) + |> promise.tap(fn(x) { + let assert #(1, 3, 4, 6, 10) = x + }) } pub fn await6_test() { @@ -126,7 +160,9 @@ pub fn await6_test() { promise.resolve(10), promise.resolve(13), ) - |> promise.tap(fn(x) { let assert #(1, 3, 4, 6, 10, 13) = x }) + |> promise.tap(fn(x) { + let assert #(1, 3, 4, 6, 10, 13) = x + }) } pub fn await_array_test() { @@ -138,7 +174,9 @@ pub fn await_array_test() { promise.resolve(10), promise.resolve(13), ])) - |> promise.tap(fn(x) { let assert [1, 3, 4, 6, 10, 13] = array.to_list(x) }) + |> promise.tap(fn(x) { + let assert [1, 3, 4, 6, 10, 13] = array.to_list(x) + }) } pub fn await_list_test() { @@ -150,5 +188,7 @@ pub fn await_list_test() { promise.resolve(10), promise.resolve(13), ]) - |> promise.tap(fn(x) { let assert [1, 3, 4, 6, 10, 13] = x }) + |> promise.tap(fn(x) { + let assert [1, 3, 4, 6, 10, 13] = x + }) } |