diff --git a/Package.resolved b/Package.resolved index d2812d7c..bd43c161 100644 --- a/Package.resolved +++ b/Package.resolved @@ -3,11 +3,11 @@ "pins": [ { "package": "JavaScriptKit", - "repositoryURL": "https://github.com/j-f1/forked-JavaScriptKit.git", + "repositoryURL": "https://github.com/swiftwasm/JavaScriptKit.git", "state": { - "branch": "4429d88", - "revision": "4429d8893f197df5651a0e628e0b78701f19fcf3", - "version": null + "branch": null, + "revision": "b7a02434c6e973c08c3fd5069105ef44dd82b891", + "version": "0.9.0" } } ] diff --git a/Package.swift b/Package.swift index 3c670680..dd8874db 100644 --- a/Package.swift +++ b/Package.swift @@ -6,14 +6,24 @@ import PackageDescription let package = Package( name: "DOMKit", products: [ + .executable( + name: "DOMKitDemo", + targets: ["DOMKitDemo"]), .library( name: "DOMKit", targets: ["DOMKit"]), ], dependencies: [ - .package(name: "JavaScriptKit", url: "https://github.com/j-f1/forked-JavaScriptKit.git", .revision("4429d88")), + .package( + name: "JavaScriptKit", + url: "https://github.com/swiftwasm/JavaScriptKit.git", + .upToNextMinor(from: "0.9.0")), ], targets: [ + .target( + name: "DOMKitDemo", + dependencies: ["DOMKit"] + ), .target( name: "DOMKit", dependencies: ["JavaScriptKit"]), diff --git a/Sources/DOMKit/ECMAScript/ArrayBuffer.swift b/Sources/DOMKit/ECMAScript/ArrayBuffer.swift index a47b7ece..f225825e 100644 --- a/Sources/DOMKit/ECMAScript/ArrayBuffer.swift +++ b/Sources/DOMKit/ECMAScript/ArrayBuffer.swift @@ -29,7 +29,7 @@ public class ArrayBuffer: JSBridgedClass { self.init(unsafelyWrapping: Self.constructor.new( length)) } - public static func isView(_ object: JSValueCodable) -> Bool { - return JSObject.global.ArrayBuffer.object!.isView!(object).fromJSValue()! + public static func isView(_ object: JSValueCompatible) -> Bool { + JSObject.global.ArrayBuffer.object!.isView!(object).fromJSValue()! } } diff --git a/Sources/DOMKit/ECMAScript/Support.swift b/Sources/DOMKit/ECMAScript/Support.swift index 13909623..3b36737e 100644 --- a/Sources/DOMKit/ECMAScript/Support.swift +++ b/Sources/DOMKit/ECMAScript/Support.swift @@ -4,18 +4,24 @@ import JavaScriptKit -public class Promise: JSBridgedClass { - - public static var constructor: JSFunction { JSObject.global.Promise.function! } - - public let jsObject: JSObject +public extension Window { + public var document: Document { Document(unsafelyWrapping: jsObject.document.object!) } +} - public required init(unsafelyWrapping jsObject: JSObject) { +public extension Document { + var body: HTMLElement { + .init(unsafelyWrapping: jsObject.body.object!) + } +} - self.jsObject = jsObject +public extension HTMLElement { + convenience init?(from element: Element) { + self.init(from: .object(element.jsObject)) } } +public let globalThis = Window(from: JSObject.global.jsValue())! + public class ReadableStream: JSBridgedClass { public static var constructor: JSFunction { JSObject.global.ReadableStream.function! } @@ -32,7 +38,7 @@ public class ReadableStream: JSBridgedClass { } } -@propertyWrapper public struct ClosureHandler { +@propertyWrapper public struct ClosureHandler { let jsObject: JSObject let name: String @@ -52,7 +58,7 @@ public class ReadableStream: JSBridgedClass { } } -@propertyWrapper public struct OptionalClosureHandler { +@propertyWrapper public struct OptionalClosureHandler { let jsObject: JSObject let name: String @@ -79,7 +85,7 @@ public class ReadableStream: JSBridgedClass { } } -@propertyWrapper public struct ReadWriteAttribute { +@propertyWrapper public struct ReadWriteAttribute { let jsObject: JSObject let name: String @@ -99,7 +105,7 @@ public class ReadableStream: JSBridgedClass { } } -@propertyWrapper public struct ReadonlyAttribute { +@propertyWrapper public struct ReadonlyAttribute { let jsObject: JSObject let name: String @@ -116,7 +122,7 @@ public class ReadableStream: JSBridgedClass { } } -public class ValueIterableIterator: IteratorProtocol where SequenceType.Element: JSValueConstructible { +public class ValueIterableIterator: IteratorProtocol where SequenceType.Element: ConstructibleFromJSValue { private var index: Int = 0 private let sequence: SequenceType @@ -142,7 +148,7 @@ public protocol KeyValueSequence: Sequence where Element == (String, Value) { associatedtype Value } -public class PairIterableIterator: IteratorProtocol where SequenceType.Value: JSValueConstructible { +public class PairIterableIterator: IteratorProtocol where SequenceType.Value: ConstructibleFromJSValue { private let iterator: JSObject private let sequence: SequenceType diff --git a/Sources/DOMKit/WebIDL/Blob.swift b/Sources/DOMKit/WebIDL/Blob.swift index 5641042e..e568adb1 100644 --- a/Sources/DOMKit/WebIDL/Blob.swift +++ b/Sources/DOMKit/WebIDL/Blob.swift @@ -50,11 +50,11 @@ public class Blob: JSBridgedClass { return jsObject.stream!().fromJSValue()! } - public func text() -> Promise { + public func text() -> JSPromise { return jsObject.text!().fromJSValue()! } - public func arrayBuffer() -> Promise { + public func arrayBuffer() -> JSPromise { return jsObject.arrayBuffer!().fromJSValue()! } } diff --git a/Sources/DOMKitDemo/main.swift b/Sources/DOMKitDemo/main.swift new file mode 100644 index 00000000..30bee067 --- /dev/null +++ b/Sources/DOMKitDemo/main.swift @@ -0,0 +1,10 @@ +import JavaScriptKit +import DOMKit + +let document = global.document + +let header = HTMLElement(from: document.createElement(localName: "h1"))! +header.innerText = "Hello World!" +_ = document.body.appendChild(node: header) + +console.log(data: "Hello, world!") diff --git a/Tests/DOMKitTests/DOMKitTests.swift b/Tests/DOMKitTests/DOMKitTests.swift index aa3b12a6..e84bfa64 100644 --- a/Tests/DOMKitTests/DOMKitTests.swift +++ b/Tests/DOMKitTests/DOMKitTests.swift @@ -4,7 +4,7 @@ import JavaScriptKit final class DOMKitTests: XCTestCase { func testExample() { - let document = DOMKit.Document(from: JSObject.global.document)! + let document = globalThis.document let button = document.createElement(localName: "button") button.textContent = "Hello, world" button.addEventListener(type: "click", callback: { event in