From 3cd8c2657da702c71292243aef140c334c39a721 Mon Sep 17 00:00:00 2001 From: Jed Fox <git@jedfox.com> Date: Sat, 9 Apr 2022 12:12:20 -0400 Subject: [PATCH 1/2] globalThis.Object is a function, not an object --- Sources/JavaScriptKit/JSValueDecoder.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/JavaScriptKit/JSValueDecoder.swift b/Sources/JavaScriptKit/JSValueDecoder.swift index c70dd8e27..b1d59af63 100644 --- a/Sources/JavaScriptKit/JSValueDecoder.swift +++ b/Sources/JavaScriptKit/JSValueDecoder.swift @@ -34,7 +34,7 @@ private struct _Decoder: Decoder { } private enum Object { - static let ref = JSObject.global.Object.object! + static let ref = JSObject.global.Object.function! static func keys(_ object: JSObject) -> [String] { let keys = ref.keys!(object).array! return keys.map { $0.string! } From b314db8eff8c870bc44676b39d7dce1efeff9642 Mon Sep 17 00:00:00 2001 From: Jed Fox <git@jedfox.com> Date: Sat, 9 Apr 2022 12:23:06 -0400 Subject: [PATCH 2/2] Add a basic test for JSValueDecoder --- .../Sources/PrimaryTests/main.swift | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift b/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift index ff42d3358..c10dc746d 100644 --- a/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift +++ b/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift @@ -804,5 +804,27 @@ try test("Hashable Conformance") { try expectEqual(firstHash, secondHash) } +struct AnimalStruct: Decodable { + let name: String + let age: Int + let isCat: Bool +} + +try test("JSValueDecoder") { + let Animal = JSObject.global.Animal.function! + let tama = try Animal.throws.new("Tama", 3, true) + let decoder = JSValueDecoder() + let decodedTama = try decoder.decode(AnimalStruct.self, from: tama.jsValue) + + try expectEqual(decodedTama.name, tama.name.string) + try expectEqual(decodedTama.name, "Tama") + + try expectEqual(decodedTama.age, tama.age.number.map(Int.init)) + try expectEqual(decodedTama.age, 3) + + try expectEqual(decodedTama.isCat, tama.isCat.boolean) + try expectEqual(decodedTama.isCat, true) +} + Expectation.wait(expectations)