diff --git a/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift b/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift index 82b1e6502..0a9d88aa2 100644 --- a/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift +++ b/Sources/JavaScriptKit/FundamentalObjects/JSObject.swift @@ -35,9 +35,9 @@ public class JSObject: Equatable { /// - Parameter name: The name of this object's member to access. /// - Returns: The `name` member method binding this object as `this` context. @_disfavoredOverload - public subscript(_ name: String) -> ((ConvertibleToJSValue...) -> JSValue)? { + public subscript(_ name: String) -> DiscardableResultClosure? { guard let function = self[name].function else { return nil } - return { (arguments: ConvertibleToJSValue...) in + return DiscardableResultClosure { arguments in function(this: self, arguments: arguments) } } @@ -53,9 +53,9 @@ public class JSObject: Equatable { /// - Parameter name: The name of this object's member to access. /// - Returns: The `name` member method binding this object as `this` context. @_disfavoredOverload - public subscript(_ name: JSString) -> ((ConvertibleToJSValue...) -> JSValue)? { + public subscript(_ name: JSString) -> DiscardableResultClosure? { guard let function = self[name].function else { return nil } - return { (arguments: ConvertibleToJSValue...) in + return DiscardableResultClosure { arguments in function(this: self, arguments: arguments) } } @@ -63,7 +63,7 @@ public class JSObject: Equatable { /// A convenience method of `subscript(_ name: String) -> ((ConvertibleToJSValue...) -> JSValue)?` /// to access the member through Dynamic Member Lookup. @_disfavoredOverload - public subscript(dynamicMember name: String) -> ((ConvertibleToJSValue...) -> JSValue)? { + public subscript(dynamicMember name: String) -> DiscardableResultClosure? { self[name] } #endif @@ -232,6 +232,19 @@ public class JSThrowingObject { #endif +#if !hasFeature(Embedded) +/// A swift closure wrapper that can be called as function. +/// This prevents the warnings for unused results through `@discardableResult` which means you no longer need `_ =` everywhere. +public struct DiscardableResultClosure { + var closure: ([ConvertibleToJSValue]) -> JSValue + + @discardableResult + public func callAsFunction(_ args: ConvertibleToJSValue...) -> JSValue { + return self.closure(args) + } +} +#endif + #if hasFeature(Embedded) // NOTE: once embedded supports variadic generics, we can remove these overloads public extension JSObject { diff --git a/Sources/JavaScriptKit/JSValue.swift b/Sources/JavaScriptKit/JSValue.swift index fe1400e24..7095f9d64 100644 --- a/Sources/JavaScriptKit/JSValue.swift +++ b/Sources/JavaScriptKit/JSValue.swift @@ -104,7 +104,8 @@ public extension JSValue { #if !hasFeature(Embedded) /// An unsafe convenience method of `JSObject.subscript(_ name: String) -> ((ConvertibleToJSValue...) -> JSValue)?` /// - Precondition: `self` must be a JavaScript Object and specified member should be a callable object. - subscript(dynamicMember name: String) -> ((ConvertibleToJSValue...) -> JSValue) { + @_disfavoredOverload + subscript(dynamicMember name: String) -> DiscardableResultClosure { object![dynamicMember: name]! } #endif pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy