@@ -3,7 +3,12 @@ import _CJavaScriptKit
3
3
/// Objects that can be converted to a JavaScript value, preferably in a lossless manner.
4
4
public protocol ConvertibleToJSValue {
5
5
/// Create a JSValue that represents this object
6
- func jsValue( ) -> JSValue
6
+ var jsValue : JSValue { get }
7
+ }
8
+
9
+ extension ConvertibleToJSValue {
10
+ @available ( * , deprecated, message: " Use the .jsValue property instead " )
11
+ public func jsValue( ) -> JSValue { jsValue }
7
12
}
8
13
9
14
public typealias JSValueCompatible = ConvertibleToJSValue & ConstructibleFromJSValue
@@ -13,67 +18,67 @@ extension JSValue: JSValueCompatible {
13
18
return value
14
19
}
15
20
16
- public func jsValue( ) -> JSValue { self }
21
+ public var jsValue : JSValue { self }
17
22
}
18
23
19
24
extension Bool : ConvertibleToJSValue {
20
- public func jsValue( ) -> JSValue { . boolean( self ) }
25
+ public var jsValue : JSValue { . boolean( self ) }
21
26
}
22
27
23
28
extension Int : ConvertibleToJSValue {
24
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
29
+ public var jsValue : JSValue { . number( Double ( self ) ) }
25
30
}
26
31
27
32
extension UInt : ConvertibleToJSValue {
28
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
33
+ public var jsValue : JSValue { . number( Double ( self ) ) }
29
34
}
30
35
31
36
extension Float : ConvertibleToJSValue {
32
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
37
+ public var jsValue : JSValue { . number( Double ( self ) ) }
33
38
}
34
39
35
40
extension Double : ConvertibleToJSValue {
36
- public func jsValue( ) -> JSValue { . number( self ) }
41
+ public var jsValue : JSValue { . number( self ) }
37
42
}
38
43
39
44
extension String : ConvertibleToJSValue {
40
- public func jsValue( ) -> JSValue { . string( JSString ( self ) ) }
45
+ public var jsValue : JSValue { . string( JSString ( self ) ) }
41
46
}
42
47
43
48
extension UInt8 : ConvertibleToJSValue {
44
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
49
+ public var jsValue : JSValue { . number( Double ( self ) ) }
45
50
}
46
51
47
52
extension UInt16 : ConvertibleToJSValue {
48
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
53
+ public var jsValue : JSValue { . number( Double ( self ) ) }
49
54
}
50
55
51
56
extension UInt32 : ConvertibleToJSValue {
52
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
57
+ public var jsValue : JSValue { . number( Double ( self ) ) }
53
58
}
54
59
55
60
extension UInt64 : ConvertibleToJSValue {
56
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
61
+ public var jsValue : JSValue { . number( Double ( self ) ) }
57
62
}
58
63
59
64
extension Int8 : ConvertibleToJSValue {
60
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
65
+ public var jsValue : JSValue { . number( Double ( self ) ) }
61
66
}
62
67
63
68
extension Int16 : ConvertibleToJSValue {
64
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
69
+ public var jsValue : JSValue { . number( Double ( self ) ) }
65
70
}
66
71
67
72
extension Int32 : ConvertibleToJSValue {
68
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
73
+ public var jsValue : JSValue { . number( Double ( self ) ) }
69
74
}
70
75
71
76
extension Int64 : ConvertibleToJSValue {
72
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
77
+ public var jsValue : JSValue { . number( Double ( self ) ) }
73
78
}
74
79
75
80
extension JSString : ConvertibleToJSValue {
76
- public func jsValue( ) -> JSValue { . string( self ) }
81
+ public var jsValue : JSValue { . string( self ) }
77
82
}
78
83
79
84
extension JSObject : JSValueCompatible {
@@ -84,17 +89,21 @@ extension JSObject: JSValueCompatible {
84
89
private let objectConstructor = JSObject . global. Object. function!
85
90
private let arrayConstructor = JSObject . global. Array. function!
86
91
87
- extension Dictionary where Value: ConvertibleToJSValue , Key == String {
88
- public func jsValue( ) -> JSValue {
89
- Swift . Dictionary < Key , ConvertibleToJSValue > . jsValue ( self ) ( )
92
+ extension Dictionary where Value == ConvertibleToJSValue , Key == String {
93
+ public var jsValue : JSValue {
94
+ let object = objectConstructor. new ( )
95
+ for (key, value) in self {
96
+ object [ key] = value. jsValue
97
+ }
98
+ return . object( object)
90
99
}
91
100
}
92
101
93
- extension Dictionary : ConvertibleToJSValue where Value == ConvertibleToJSValue , Key == String {
94
- public func jsValue( ) -> JSValue {
102
+ extension Dictionary : ConvertibleToJSValue where Value: ConvertibleToJSValue , Key == String {
103
+ public var jsValue : JSValue {
95
104
let object = objectConstructor. new ( )
96
105
for (key, value) in self {
97
- object [ key] = value. jsValue ( )
106
+ object [ key] = value. jsValue
98
107
}
99
108
return . object( object)
100
109
}
@@ -104,7 +113,7 @@ extension Dictionary: ConstructibleFromJSValue where Value: ConstructibleFromJSV
104
113
public static func construct( from value: JSValue ) -> Self ? {
105
114
guard
106
115
let objectRef = value. object,
107
- let keys: [ String ] = objectConstructor. keys!( objectRef. jsValue ( ) ) . fromJSValue ( )
116
+ let keys: [ String ] = objectConstructor. keys!( objectRef. jsValue) . fromJSValue ( )
108
117
else { return nil }
109
118
110
119
var entries = [ ( String, Value) ] ( )
@@ -131,25 +140,29 @@ extension Optional: ConstructibleFromJSValue where Wrapped: ConstructibleFromJSV
131
140
}
132
141
133
142
extension Optional : ConvertibleToJSValue where Wrapped: ConvertibleToJSValue {
134
- public func jsValue( ) -> JSValue {
143
+ public var jsValue : JSValue {
135
144
switch self {
136
145
case . none: return . null
137
- case let . some( wrapped) : return wrapped. jsValue ( )
146
+ case let . some( wrapped) : return wrapped. jsValue
138
147
}
139
148
}
140
149
}
141
150
142
- extension Array where Element: ConvertibleToJSValue {
143
- public func jsValue( ) -> JSValue {
144
- Array < ConvertibleToJSValue > . jsValue ( self ) ( )
151
+ extension Array : ConvertibleToJSValue where Element: ConvertibleToJSValue {
152
+ public var jsValue : JSValue {
153
+ let array = arrayConstructor. new ( count)
154
+ for (index, element) in enumerated ( ) {
155
+ array [ index] = element. jsValue
156
+ }
157
+ return . object( array)
145
158
}
146
159
}
147
160
148
- extension Array : ConvertibleToJSValue where Element == ConvertibleToJSValue {
149
- public func jsValue( ) -> JSValue {
161
+ extension Array where Element == ConvertibleToJSValue {
162
+ public var jsValue : JSValue {
150
163
let array = arrayConstructor. new ( count)
151
164
for (index, element) in enumerated ( ) {
152
- array [ index] = element. jsValue ( )
165
+ array [ index] = element. jsValue
153
166
}
154
167
return . object( array)
155
168
}
@@ -176,7 +189,7 @@ extension Array: ConstructibleFromJSValue where Element: ConstructibleFromJSValu
176
189
}
177
190
178
191
extension RawJSValue : ConvertibleToJSValue {
179
- public func jsValue( ) -> JSValue {
192
+ public var jsValue : JSValue {
180
193
switch kind {
181
194
case . invalid:
182
195
fatalError ( )
@@ -243,7 +256,7 @@ extension Array where Element == ConvertibleToJSValue {
243
256
_ results: inout [ RawJSValue ] , _ body: ( [ RawJSValue ] ) -> T
244
257
) -> T {
245
258
if index == values. count { return body ( results) }
246
- return values [ index] . jsValue ( ) . withRawJSValue { ( rawValue) -> T in
259
+ return values [ index] . jsValue. withRawJSValue { ( rawValue) -> T in
247
260
results. append ( rawValue)
248
261
return _withRawJSValues ( values, index + 1 , & results, body)
249
262
}
0 commit comments