1
1
import _CJavaScriptKit
2
2
3
3
public protocol JSValueConvertible {
4
- func jsValue( ) -> JSValue
4
+ subscript ( jsValue _ : ( ) ) -> JSValue { get }
5
5
}
6
6
7
7
extension JSValue : JSValueConvertible {
8
- public func jsValue( ) -> JSValue { self }
8
+ public init ( from convertible: JSValueConvertible ) {
9
+ self = convertible [ jsValue: ( ) ]
10
+ }
11
+ public subscript( jsValue _: ( ) ) -> JSValue { self }
9
12
}
10
13
11
14
extension Bool : JSValueConvertible {
12
- public func jsValue( ) -> JSValue { . boolean( self ) }
15
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . boolean( self ) }
13
16
}
14
17
15
18
extension Int : JSValueConvertible {
16
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
19
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
17
20
}
18
21
19
22
extension Int8 : JSValueConvertible {
20
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
23
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
21
24
}
22
25
23
26
extension Int16 : JSValueConvertible {
24
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
27
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
25
28
}
26
29
27
30
extension Int32 : JSValueConvertible {
28
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
31
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
29
32
}
30
33
31
34
extension UInt : JSValueConvertible {
32
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
35
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
33
36
}
34
37
35
38
extension UInt8 : JSValueConvertible {
36
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
39
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
37
40
}
38
41
39
42
extension UInt16 : JSValueConvertible {
40
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
43
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
41
44
}
42
45
43
46
extension Float : JSValueConvertible {
44
- public func jsValue( ) -> JSValue { . number( Double ( self ) ) }
47
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( Double ( self ) ) }
45
48
}
46
49
47
50
extension Double : JSValueConvertible {
48
- public func jsValue( ) -> JSValue { . number( self ) }
51
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . number( self ) }
49
52
}
50
53
51
54
extension String : JSValueConvertible {
52
- public func jsValue( ) -> JSValue { . string( self ) }
55
+ public subscript ( jsValue _ : ( ) ) -> JSValue { . string( self ) }
53
56
}
54
57
55
58
extension JSObjectRef : JSValueConvertible {
@@ -60,16 +63,16 @@ extension JSObjectRef: JSValueConvertible {
60
63
private let Object = JSObjectRef . global. Object. function!
61
64
62
65
extension Dictionary where Value: JSValueConvertible , Key == String {
63
- public func jsValue( ) -> JSValue {
64
- Swift . Dictionary < Key , JSValueConvertible > . jsValue ( self ) ( )
66
+ public subscript ( jsValue _ : ( ) ) -> JSValue {
67
+ JSValue ( from : self as Dictionary < Key , JSValueConvertible > )
65
68
}
66
69
}
67
70
68
71
extension Dictionary : JSValueConvertible where Value == JSValueConvertible , Key == String {
69
- public func jsValue( ) -> JSValue {
72
+ public subscript ( jsValue _ : ( ) ) -> JSValue {
70
73
let object = Object . new ( )
71
74
for (key, value) in self {
72
- object [ key] = value . jsValue ( )
75
+ object [ key] = JSValue ( from : value )
73
76
}
74
77
return . object( object)
75
78
}
@@ -78,23 +81,23 @@ extension Dictionary: JSValueConvertible where Value == JSValueConvertible, Key
78
81
private let Array = JSObjectRef . global. Array. function!
79
82
80
83
extension Array where Element: JSValueConvertible {
81
- public func jsValue( ) -> JSValue {
82
- Swift . Array < JSValueConvertible > . jsValue ( self ) ( )
84
+ public subscript ( jsValue _ : ( ) ) -> JSValue {
85
+ JSValue ( from : self as Swift . Array < JSValueConvertible > )
83
86
}
84
87
}
85
88
86
89
extension Array : JSValueConvertible where Element == JSValueConvertible {
87
- public func jsValue( ) -> JSValue {
90
+ public subscript ( jsValue _ : ( ) ) -> JSValue {
88
91
let array = Array . new ( count)
89
92
for (index, element) in enumerated ( ) {
90
- array [ index] = element . jsValue ( )
93
+ array [ index] = JSValue ( from : element )
91
94
}
92
95
return . object( array)
93
96
}
94
97
}
95
98
96
99
extension RawJSValue : JSValueConvertible {
97
- public func jsValue( ) -> JSValue {
100
+ public subscript ( jsValue _ : ( ) ) -> JSValue {
98
101
switch kind {
99
102
case . invalid:
100
103
fatalError ( )
@@ -176,7 +179,7 @@ extension Array where Element == JSValueConvertible {
176
179
_ results: inout [ RawJSValue ] , _ body: ( [ RawJSValue ] ) -> T
177
180
) -> T {
178
181
if index == values. count { return body ( results) }
179
- return values [ index] . jsValue ( ) . withRawJSValue { ( rawValue) -> T in
182
+ return JSValue ( from : values [ index] ) . withRawJSValue { ( rawValue) -> T in
180
183
results. append ( rawValue)
181
184
return _withRawJSValues ( values, index + 1 , & results, body)
182
185
}
0 commit comments