aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2023-08-03 12:23:39 +0100
committerLouis Pilfold <louis@lpil.uk>2023-08-03 12:23:39 +0100
commitceda2e3813cb5e8be7304b518e589c538b810d9e (patch)
tree41c510f8df25e714ab1e607410d127bc108eed26
parent30569cb26334d0e253c66dfa7cb92c18ba0f3d8d (diff)
downloadjavascript-ceda2e3813cb5e8be7304b518e589c538b810d9e.tar.gz
javascript-ceda2e3813cb5e8be7304b518e589c538b810d9e.zip
Update for Gleam v0.30
-rw-r--r--.github/workflows/test.yml2
-rw-r--r--CHANGELOG.md4
-rw-r--r--src/gleam/javascript.gleam24
-rw-r--r--src/gleam/javascript/array.gleam34
-rw-r--r--src/gleam/javascript/promise.gleam100
-rw-r--r--test/gleam/javascript/promise_test.gleam80
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
+ })
}