Skip to content

Releases: swiftwasm/JavaScriptKit

0.10.1

29 Apr 16:42
b19e7c8
Compare
Choose a tag to compare

This is a minor patch release that includes updates to our dependencies and minor documentation tweaks.

Closed issues:

  • Do you accept contributions for wrappers over JavaScript objects? (#124)
  • Can't read from a file using JSPromise (#121)
  • TypeError when trying to implement a JSBridgedClass for WebSocket.send (#120)

Merged pull requests:

0.10.0

21 Jan 17:19
ebd9ca0
Compare
Choose a tag to compare

This release contains multiple breaking changes in preparation for enabling async/await, when this feature is available in a stable SwiftWasm release. Namely:

  • JSClosure.init(_ body: @escaping ([JSValue]) -> ()) overload is deprecated to simplify type checking. Its presence requires explicit type signatures at the place of use. It will be removed in a future version of JavaScriptKit.
  • JSClosure is no longer a subclass of JSFunction. These classes are not related enough to keep them in the same class hierarchy. As a result, you can no longer call JSClosure objects directly from Swift. Call wrapped closures directly instead.
  • Introduced JSOneshotClosure for closures that are going to be called only once. You don't need to manage references to these closures manually, as opposed to JSClosure. However, they can only be called a single time from the JS side. Subsequent invocation attempts will raise a fatal error on the Swift side.
  • Removed generic parameters on JSPromise, now both success and failure values are always assumed to be of JSValue type. This also significantly simplifies type checking and allows callers to fully control type casting if needed.

Closed issues:

  • DOMKit? (#21)

Merged pull requests:

0.9.0

27 Nov 12:22
b7a0243
Compare
Choose a tag to compare

This release introduces support for catching JSError instances in Swift from throwing JavaScript functions. This is possible thanks to the new JSThrowingFunction and JSThrowingObject classes. The former can only be called with try, while the latter will expose all of its member functions as throwing. Use the new throws property on JSFunction to convert it to JSThrowingFunction, and the new throwing property on JSObject to convert it to JSThrowingObject.

Closed issues:

  • Support JS errors (#37)

Merged pull requests:

0.8.0

21 Oct 12:46
8ba4135
Compare
Choose a tag to compare

This release introduces a few enhancements and deprecations. Namely, JSValueConstructible and JSValueConvertible were renamed to ConstructibleFromJSValue and ConvertibleToJSValue respectively. The old names are deprecated, and you should move away from using the old names in your code. Additionally, JavaScriptKit now requires the most recent 5.3 and development toolchains, but thanks to this it no longer uses unsafe flags, which prevented building other libraries depending on JavaScriptKit on other platforms.

The main user-visible enhancement is that now force casts are no longer required in client code. That is, we now allow this

let document = JSObject.global.document
let foundDivs = document.getElementsByTagName("div")

in addition to the previously available explicit style with force unwrapping:

let document = JSObject.global.document.object!
let foundDivs = document.getElementsByTagName!("div").object!

Note that the code in the first example is still dynamically typed. The Swift compiler won't warn you if you misspell names of properties or cast them to a wrong type. This feature is purely additive, and is added for convenience. You can still use force unwraps in your code interfacing with JavaScriptKit. If you're interested in a statically-typed DOM API, we recommend having a look at the DOMKit library, which is currently in development.

Lastly, JSError now conforms to the JSBridgedClass protocol, which makes it easier to integrate with idiomatic Swift code.

Closed issues:

  • Errors building example: undefined symbols (#95)
  • Documentation website is broken (#93)
  • Rename JSValueConstructible and JSValueConvertible (#87)
  • Build fails with the unsafe flags error (#6)

Merged pull requests:

0.7.2

28 Sep 15:03
6e84a70
Compare
Choose a tag to compare

This is a bugfix release that resolves an issue with the JavaScript runtime being unavailable when installed via NPM.

0.7.1

27 Sep 15:31
29fb15f
Compare
Choose a tag to compare

This is a bugfix release that resolves an issue with the JavaScript runtime being unavailable when installed via NPM.

Closed issues:

  • 0.7.0 unavailable on NPM (#79)
  • Automatic performance testing (#67)

Merged pull requests:

0.7.0

27 Sep 09:49
42ae818
Compare
Choose a tag to compare

This release adds multiple new types bridged from JavaScript, namely JSError, JSDate, JSTimer (which corresponds to setTimeout/setInterval calls and manages closure lifetime for you), JSString and JSPromise. We now also have documentation published automatically for the main branch.

Closed issues:

  • TypedArray improvement? (#52)

Merged pull requests:

0.6.0

25 Sep 09:56
Compare
Choose a tag to compare

This release adds JSTypedArray generic type, renames JSObjectRef to JSObject, and makes JSClosure memory management more explicit.

Closed issues:

  • Support for JS Arrays “holes”, including the test suite (#39)
  • BigInt Support (#29)
  • Separate namespaces for methods and properties? (#27)

Merged pull requests:

0.1.0

09 Mar 04:07
Compare
Choose a tag to compare
0.1.0 Pre-release
Pre-release
Update package.json