diff --git a/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift b/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift index 292e6f3a5..f62133c71 100644 --- a/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift +++ b/IntegrationTests/TestSuites/Sources/PrimaryTests/main.swift @@ -394,3 +394,11 @@ try test("TypedArray_Mutation") { } try expectEqual(toString(array.jsValue().object!), jsStringify(Array(0..<100))) } + +try test("Error") { + let message = "test error" + let error = JSError(message: message) + try expectEqual(error.name, "Error") + try expectEqual(error.message, message) + try expectEqual(error.description, "Error: test error") +} diff --git a/Sources/JavaScriptKit/BasicObjects/JSError.swift b/Sources/JavaScriptKit/BasicObjects/JSError.swift new file mode 100644 index 000000000..1ed8c0ffd --- /dev/null +++ b/Sources/JavaScriptKit/BasicObjects/JSError.swift @@ -0,0 +1,20 @@ +public final class JSError { + private let ref: JSObject + private static let constructor = JSObject.global.Error.function! + + public init(message: String) { + ref = Self.constructor.new([message]) + } + + public var message: String { + ref.message.string! + } + + public var name: String { + ref.name.string! + } +} + +extension JSError: CustomStringConvertible { + public var description: String { ref.description } +} diff --git a/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift b/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift index 076367a5d..40bc4658b 100644 --- a/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift +++ b/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift @@ -48,3 +48,6 @@ public class JSObject: Equatable { } } +extension JSObject: CustomStringConvertible { + public var description: String { self.toString!().string! } +}