Skip to content

Commit 78ca09c

Browse files
authored
Gracefully handle unavailable APIs (#41)
Updating the API to make it compatible with swiftwasm/JavaScriptKit#190. * Gracefully handle unavailable APIs * Update `Package.resolved` * Use JSKit 0.15.0
1 parent 5b41da2 commit 78ca09c

9 files changed

+749
-740
lines changed

Package.resolved

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
"repositoryURL": "https://github.com/swiftwasm/JavaScriptKit.git",
77
"state": {
88
"branch": null,
9-
"revision": "95d0c4cd78b48ffc7e19c618d57c3244917be09a",
10-
"version": null
9+
"revision": "2d7bc960eed438dce7355710ece43fa004bbb3ac",
10+
"version": "0.15.0"
1111
}
1212
}
1313
]

Package.swift

+7-2
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ let package = Package(
2020
dependencies: [
2121
.package(
2222
url: "https://github.com/swiftwasm/JavaScriptKit.git",
23-
.revision("95d0c4cd78b48ffc7e19c618d57c3244917be09a")
23+
from: "0.15.0"
2424
),
2525
],
2626
targets: [
@@ -30,7 +30,12 @@ let package = Package(
3030
),
3131
.target(
3232
name: "WebAPIKit",
33-
dependencies: ["ECMAScript", "JavaScriptKit", .product(name: "JavaScriptEventLoop", package: "JavaScriptKit")]
33+
dependencies: [
34+
"ECMAScript",
35+
"JavaScriptKit",
36+
.product(name: "JavaScriptEventLoop", package: "JavaScriptKit"),
37+
.product(name: "JavaScriptBigIntSupport", package: "JavaScriptKit"),
38+
]
3439
),
3540
// This support library should be moved to JavaScriptKit
3641
.target(name: "ECMAScript", dependencies: [

Sources/ECMAScript/ArrayBuffer.swift

+11-9
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public typealias Float32Array = JSTypedArray<Float32>
1515
public typealias Float64Array = JSTypedArray<Float64>
1616

1717
public class ArrayBuffer: JSBridgedClass {
18-
public class var constructor: JSFunction { JSObject.global.ArrayBuffer.function! }
18+
public class var constructor: JSFunction? { JSObject.global.ArrayBuffer.function }
1919

2020
public let jsObject: JSObject
2121

@@ -24,32 +24,34 @@ public class ArrayBuffer: JSBridgedClass {
2424
}
2525

2626
public convenience init(length: Int) {
27-
self.init(unsafelyWrapping: Self.constructor.new(length))
27+
self.init(unsafelyWrapping: Self.constructor!.new(length))
2828
}
2929

30+
@inlinable
3031
public static func isView(_ object: JSValueCompatible) -> Bool {
3132
JSObject.global.ArrayBuffer.object!.isView!(object).fromJSValue()!
3233
}
3334
}
3435

3536
public extension JSTypedArray {
3637
convenience init(_ arrayBuffer: ArrayBuffer) {
37-
self.init(unsafelyWrapping: Self.constructor.new(arrayBuffer))
38+
self.init(unsafelyWrapping: Self.constructor!.new(arrayBuffer))
3839
}
3940

41+
@inlinable
4042
var buffer: ArrayBuffer {
4143
ArrayBuffer(unsafelyWrapping: jsObject.buffer.object!)
4244
}
4345
}
4446

4547
#if canImport(Foundation)
46-
import Foundation
48+
import Foundation
4749

48-
public extension Data {
49-
init(_ arrayBuffer: ArrayBuffer) {
50-
self = JSTypedArray<UInt8>(arrayBuffer).withUnsafeBytes {
51-
Data(buffer: $0)
50+
public extension Data {
51+
init(_ arrayBuffer: ArrayBuffer) {
52+
self = JSTypedArray<UInt8>(arrayBuffer).withUnsafeBytes {
53+
Data(buffer: $0)
54+
}
5255
}
5356
}
54-
}
5557
#endif

Sources/ECMAScript/DataView.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import JavaScriptKit
66

77
public class DataView: JSBridgedClass {
8-
public class var constructor: JSFunction { JSObject.global.DataView.function! }
8+
public class var constructor: JSFunction? { JSObject.global.DataView.function }
99

1010
public let jsObject: JSObject
1111

@@ -17,15 +17,15 @@ public class DataView: JSBridgedClass {
1717
}
1818

1919
public convenience init(buffer: ArrayBuffer) {
20-
self.init(unsafelyWrapping: DataView.constructor.new(buffer.jsValue))
20+
self.init(unsafelyWrapping: DataView.constructor!.new(buffer.jsValue))
2121
}
2222

2323
public convenience init(buffer: ArrayBuffer, byteOffset: UInt32) {
24-
self.init(unsafelyWrapping: DataView.constructor.new(buffer.jsValue, byteOffset.jsValue))
24+
self.init(unsafelyWrapping: DataView.constructor!.new(buffer.jsValue, byteOffset.jsValue))
2525
}
2626

2727
public convenience init(buffer: ArrayBuffer, byteOffset: UInt32, byteLength: UInt32) {
28-
self.init(unsafelyWrapping: DataView.constructor.new(buffer.jsValue, byteOffset.jsValue, byteLength.jsValue))
28+
self.init(unsafelyWrapping: DataView.constructor!.new(buffer.jsValue, byteOffset.jsValue, byteLength.jsValue))
2929
}
3030

3131
@ReadonlyAttribute

0 commit comments

Comments
 (0)