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)