diff options
author | kaiwu <kaiwu2004@gmail.com> | 2025-05-16 23:18:29 +0800 |
---|---|---|
committer | kaiwu <kaiwu2004@gmail.com> | 2025-05-16 23:21:20 +0800 |
commit | b9d7eefcabfb98ae8417ae33154864becd6ffdc3 (patch) | |
tree | f0880b52dfc288685e0279cd72d02123500dd4a6 | |
parent | 689cd29ea0576e17916814074ccb5822438aaa31 (diff) | |
download | glv8-b9d7eefcabfb98ae8417ae33154864becd6ffdc3.tar.gz glv8-b9d7eefcabfb98ae8417ae33154864becd6ffdc3.zip |
-rw-r--r-- | gleam.toml | 6 | ||||
-rw-r--r-- | manifest.toml | 6 | ||||
-rw-r--r-- | src/glv8/database.gleam | 7 | ||||
-rw-r--r-- | src/glv8/util.gleam | 6 | ||||
-rw-r--r-- | src/glv8_ffi.mjs | 4 | ||||
-rw-r--r-- | test/glv8/plv8_test.gleam | 3 |
6 files changed, 21 insertions, 11 deletions
@@ -1,5 +1,5 @@ name = "glv8" -version = "1.0.1" +version = "1.0.2" description = "Write functional type-safe postgresql procedures with gleam, through plv8's JavaScript binding" target = "javascript" @@ -9,7 +9,7 @@ target = "javascript" licences = ["Apache-2.0"] repository = { type = "github", user = "kaiwu", repo = "glv8" } links = [{ title = "plv8", href = "https://plv8.github.io" }, { title = "plv8ify", href = "https://github.com/divyenduz/plv8ify"}] -gleam = ">= 0.32.0" +gleam = ">= 1.9.0" # # For a full reference of all the available options, you can have a look at # https://gleam.run/writing-gleam/gleam-toml/. @@ -17,7 +17,7 @@ gleam = ">= 0.32.0" [dependencies] gleam_stdlib = ">= 0.39.0 and < 1.0.0" gleam_javascript = ">= 0.11.0 and < 2.0.0" -gleam_json = ">= 2.0.0 and < 3.0.0" +gleam_json = ">= 3.0.0 and < 4.0.0" envoy = ">= 1.0.1 and < 2.0.0" [dev-dependencies] diff --git a/manifest.toml b/manifest.toml index 2060cb7..31f40cf 100644 --- a/manifest.toml +++ b/manifest.toml @@ -4,14 +4,14 @@ packages = [ { name = "envoy", version = "1.0.2", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "envoy", source = "hex", outer_checksum = "95FD059345AA982E89A0B6E2A3BF1CF43E17A7048DCD85B5B65D3B9E4E39D359" }, { name = "gleam_javascript", version = "1.0.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_javascript", source = "hex", outer_checksum = "EF6C77A506F026C6FB37941889477CD5E4234FCD4337FF0E9384E297CB8F97EB" }, - { name = "gleam_json", version = "2.3.0", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "C55C5C2B318533A8072D221C5E06E5A75711C129E420DD1CE463342106012E5D" }, - { name = "gleam_stdlib", version = "0.59.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "F8FEE9B35797301994B81AF75508CF87C328FE1585558B0FFD188DC2B32EAA95" }, + { name = "gleam_json", version = "3.0.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleam_json", source = "hex", outer_checksum = "5BA154440B22D9800955B1AB854282FA37B97F30F409D76B0824D0A60C934188" }, + { name = "gleam_stdlib", version = "0.60.0", build_tools = ["gleam"], requirements = [], otp_app = "gleam_stdlib", source = "hex", outer_checksum = "621D600BB134BC239CB2537630899817B1A42E60A1D46C5E9F3FAE39F88C800B" }, { name = "gleeunit", version = "1.3.1", build_tools = ["gleam"], requirements = ["gleam_stdlib"], otp_app = "gleeunit", source = "hex", outer_checksum = "A7DD6C07B7DA49A6E28796058AA89E651D233B357D5607006D70619CD89DAAAB" }, ] [requirements] envoy = { version = ">= 1.0.1 and < 2.0.0" } gleam_javascript = { version = ">= 0.11.0 and < 2.0.0" } -gleam_json = { version = ">= 2.0.0 and < 3.0.0" } +gleam_json = { version = ">= 3.0.0 and < 4.0.0" } gleam_stdlib = { version = ">= 0.39.0 and < 1.0.0" } gleeunit = { version = ">= 1.0.0 and < 2.0.0" } diff --git a/src/glv8/database.gleam b/src/glv8/database.gleam index a31ef88..3f0a6a8 100644 --- a/src/glv8/database.gleam +++ b/src/glv8/database.gleam @@ -3,6 +3,7 @@ import gleam/dynamic/decode.{type Decoder} import gleam/javascript/array.{type Array} import gleam/result import glv8.{type DBError, type DecodeErrors} +import glv8/util.{from} pub type Row { Row @@ -39,7 +40,7 @@ pub fn shift_as( shift(rs) |> result.try(fn(t) { t.0 - |> dynamic.from + |> from |> f |> result.map_error(glv8.DBErrorDecode) }) @@ -66,7 +67,7 @@ pub fn decode( ) -> Result(Array(a), DBError) { rs |> array.to_list - |> dynamic.from + |> from |> decode.run(decode.list(f)) |> result.map(array.from_list) |> result.map_error(glv8.DBErrorDecode) @@ -137,7 +138,7 @@ pub fn decode0( decoder f: fn(Dynamic) -> Result(a, DecodeErrors), ) -> Result(a, DBError) { r - |> dynamic.from + |> from |> f |> result.map_error(glv8.DBErrorDecode) } diff --git a/src/glv8/util.gleam b/src/glv8/util.gleam index d869358..a3029b4 100644 --- a/src/glv8/util.gleam +++ b/src/glv8/util.gleam @@ -8,6 +8,12 @@ import glv8.{ /// /// /// +@external(javascript, "../glv8_ffi.mjs", "identity") +pub fn from(a: anything) -> Dynamic + +/// +/// +/// @external(javascript, "../glv8_ffi.mjs", "object") pub fn object() -> JsObject diff --git a/src/glv8_ffi.mjs b/src/glv8_ffi.mjs index 5ed6fac..d84e739 100644 --- a/src/glv8_ffi.mjs +++ b/src/glv8_ffi.mjs @@ -2,6 +2,10 @@ import { Ok, Error } from "./gleam.mjs" import { DBErrorJson } from "./glv8.mjs" import { NilRow } from "./glv8/database.mjs" +export function identity(x) { + return x; +} + export function object() { return {}; } diff --git a/test/glv8/plv8_test.gleam b/test/glv8/plv8_test.gleam index 096819c..769fa08 100644 --- a/test/glv8/plv8_test.gleam +++ b/test/glv8/plv8_test.gleam @@ -1,5 +1,4 @@ import app/plv8 -import gleam/dynamic import gleam/dynamic/decode import gleeunit/should import glv8/util @@ -11,7 +10,7 @@ pub fn rec_test() { decode.success(plv8.Rec(i: i, t: t)) } plv8.scalar_to_record(42, "hi") - |> dynamic.from + |> util.from |> decode.run(decoder) |> should.equal(Ok(plv8.Rec(42, "hi"))) } |