Releases: swiftwasm/JavaScriptKit
0.13.0
This release improves handling of JavaScript exceptions and compatibility with Xcode.
Thanks to @kateinoigakukun, @pedrovgs, and @valeriyvan for contributions!
Closed issues:
Merged pull requests:
- Improve error messages when JS code throws exceptions (#173) via @pedrovgs
- Update npm dependencies (#175) via @MaxDesiatov
- Bump minimist from 1.2.5 to 1.2.6 in /Example (#172) via @dependabot
- Use availability guarded APIs under
@availablefor Xcode development (#171) via @kateinoigakukun - Fix warning in snippet (#166) via @valeriyvan
- Bump follow-redirects from 1.14.5 to 1.14.8 in /Example (#165) via @dependabot
0.12.0
This release introduces a major refactor of the JavaScript runtime by [@j-f1] and several performance enhancements.
Merged pull requests:
- Add
Hashableconformance toJSObject(#162) via @yonihemi - Add test for detached
ArrayBuffer(#154) via @yonihemi - Fix detached
ArrayBuffererrors (#153) via @yonihemi - Split runtime into multiple files (#150) via @j-f1
- Add a way for Swift code to access raw contents of a Typed Array (#151) via @yonihemi
- Prevent
installGlobalExecutor()from running more than once (#152) via @yonihemi - Return from runtime functions instead of taking a pointer where possible (#147) via @j-f1
- Use
TypedArray.setto copy a bunch of bytes (#146) via @kateinoigakukun
0.11.1
This is a bugfix release that removes a requirement for macOS Monterey in Package.swift for this package. README.md was updated to explicitly specify that if you're building an app or a library that depends on JavaScriptKit for macOS (i.e. cross-platform code that supports both WebAssembly and macOS), you need either
- macOS Monterey that has the new Swift concurrency runtime available, or
- any version of macOS that supports Swift concurrency back-deployment with Xcode 13.2 or later, or
- add
.unsafeFlags(["-Xfrontend", "-disable-availability-checking"])inPackage.swiftmanifest.
Merged pull requests:
- Remove macOS Monterey requirement from
Package.swift(#144) via @MaxDesiatov
0.11.0
This release adds support for async/await and SwiftWasm 5.5. Use the new value async property on a JSPromise instance to await for its result. You'll have to add a dependency on the new JavaScriptEventLoop target in your Package.swift, import JavaScriptEventLoop, and call JavaScriptEventLoop.installGlobalExecutor() in your code before you start using await and Task
APIs.
Additionally, manual memory management API of JSClosure has been removed to improve usability. This significantly bumps minimum browser version requirements for users of apps depending on JavaScriptKit. Previous manual memory management mode is still available though with a special compiler flags, see README.md for more details.
This new release of JavaScriptKit may work with SwiftWasm 5.4 and 5.3, but is no longer tested with those versions due to compatibility issues introduced on macOS by latest versions of Xcode.
Many thanks to @j-f1, @kateinoigakukun, and @PatrickPijnappel for their contributions to this release!
Closed issues:
- Enchancement: Add a link to the docs (#136)
- Use
FinalizationRegistryto auto-deinitJSClosure(#131) make testcrashes due toJSClosurememory issues (#129)- Avoid manual memory management with
JSClosure(#106)
Merged pull requests:
- Fix recursion in
JSTypedArrayinitializer (#142) via @PatrickPijnappel - Experimental global executor cooperating with JS event loop (#141) via @kateinoigakukun
- Update NPM dependencies of
Exampleproject (#140) via @MaxDesiatov - Refactor
JSClosureto leverageFinalizationRegistry(#128) via @j-f1 - Test with the latest 5.5 snapshot (#138) via @MaxDesiatov
- Test with multiple toolchain versions (#135) via @kateinoigakukun
- Gardening tests (#133) via @kateinoigakukun
0.10.1
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
JSBridgedClassforWebSocket.send(#120)
Merged pull requests:
- Update JS dependencies in package-lock.json (#126) via @MaxDesiatov
- Fix typo in method documentation (#125) via @revolter
- Update exported func name to match exported name (#123) via @kateinoigakukun
- Fix incorrect link in
JSDatedocumentation (#122) via @revolter
0.10.0
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.JSClosureis no longer a subclass ofJSFunction. These classes are not related enough to keep them in the same class hierarchy. As a result, you can no longer callJSClosureobjects directly from Swift. Call wrapped closures directly instead.- Introduced
JSOneshotClosurefor closures that are going to be called only once. You don't need to manage references to these closures manually, as opposed toJSClosure. 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 ofJSValuetype. This also significantly simplifies type checking and allows callers to fully control type casting if needed.
Closed issues:
- DOMKit? (#21)
Merged pull requests:
- Simplify
JSPromiseAPI (#115) via @kateinoigakukun - Create
FUNDING.yml(#117) via @MaxDesiatov - Major API change on
JSClosure(#113) via @kateinoigakukun - Update
package.jsonto lockfileVersion 2 (#114) via @kateinoigakukun - Bump
inifrom 1.3.5 to 1.3.8 in/Example(#111) via @dependabot[bot] - Update doc comment in
JSTypedArray.swift(#110) via @MaxDesiatov
0.9.0
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:
- Update toolchain version swift-wasm-5.3.0-RELEASE (#108) via @kateinoigakukun
- Update ci trigger condition (#104) via @kateinoigakukun
- Fix branch and triple in
compatibility.yml(#105) via @MaxDesiatov - Check source code compatibility (#103) via @kateinoigakukun
- JS Exception Support (#102) via @kateinoigakukun
- Mention
cartonDocker image and refine wording inREADME.md(#101) via @MaxDesiatov
0.8.0
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
JSValueConstructibleandJSValueConvertible(#87) - Build fails with the unsafe flags error (#6)
Merged pull requests:
- Update example code in
README.md(#100) via @MaxDesiatov - Update toolchain version, script, and
README.md(#96) via @MaxDesiatov - [Proposal] Add unsafe convenience methods for JSValue (#98) via @kateinoigakukun
- Remove all unsafe linker flags from Package.swift (#91) via @kateinoigakukun
- Sync package.json and package-lock.json (#90) via @kateinoigakukun
- Rename JSValueConvertible/Constructible/Codable (#88) via @j-f1
- Bump @actions/core from 1.2.2 to 1.2.6 in /ci/perf-tester (#89) via @dependabot[bot]
- Make
JSErrorconform toJSBridgedClass(#86) via @MaxDesiatov
0.7.2
0.7.1
This is a bugfix release that resolves an issue with the JavaScript runtime being unavailable when installed via NPM.
Closed issues:
Merged pull requests:
- Fix runtime files location in
package.json(#81) via @MaxDesiatov - Run 4 perf tests instead of 2 (#80) via @j-f1
- Specify correct SwiftWasm snapshot in
README.md(#78) via @MaxDesiatov