Skip to content

Latest commit

 

History

History
465 lines (337 loc) · 31.6 KB

CHANGELOG.md

File metadata and controls

465 lines (337 loc) · 31.6 KB

Important

For future releases, please refer to the GitHub releases page


0.20.0 (11 July 2024)

This release adds an initial multi-threading support.

What's Changed

  • Start migrating imported functions to the new definition style by @kateinoigakukun in #252
  • Allocate JavaScriptEventLoop per thread in multi-threaded environment by @kateinoigakukun in #255
  • Add WebWorkerTaskExecutor by @kateinoigakukun in #256

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.19.3...0.20.0

0.19.3 (6 Jun 2024)

What's Changed

  • Fix JSClosure leak by @kateinoigakukun in #240
  • Update README file to include new carton 1.0 implementation. by @kuhl in #243
  • Update Carton context on README. by @kuhl in #245
  • Support latest nightly snapshot by @kateinoigakukun in #246
  • Use Swift SDK for development snapshot testing in CI by @kateinoigakukun in #248
  • Add sharedMemory option to allow threads with shared memory by @kateinoigakukun in #247
  • Check 5.10 toolchain in CI by @kateinoigakukun in #249

New Contributors

  • @kuhl made their first contribution in #243

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.19.2...0.19.3

0.19.2 (11 Apr 2024)

What's Changed

  • [CI] macos-14 by @ikesyo in #233
  • [CI] Drop macos-11 since that is deprecated and will be removed in Q2 2024 by @ikesyo in #234
  • Update swift-tools-version to reflect the supported Swift versions by @ikesyo in #235
  • [CI] Update actions and configure Dependabot by @ikesyo in #236
  • Fix Optional implementation for ConstructibleFromJSValue by @omochi in #238
  • Inherit JSFunction from JSClosure by @kateinoigakukun in #239
  • Fix object decode by @omochi in #241

New Contributors

  • @ikesyo made their first contribution in #233
  • @omochi made their first contribution in #238

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.19.1...0.19.2

0.19.1 (6 Feb 2024)

What's Changed

  • Fix availability marker for Swift 5.9 compiler targeting host machine by @kateinoigakukun in #232

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.19.0...0.19.1

0.19.0 (16 Jan 2024)

What's Changed

  • Update 5.7 patch version by @kateinoigakukun in #226
  • Add 5.8 toolchain matrix by @kateinoigakukun in #227
  • Fix warnings Aug 5, 2023 by @STREGA in #228
  • Swift 5.9 Changes by @STREGA in #229

New Contributors

  • @STREGA made their first contribution in #228

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.18.0...0.19.0

0.18.0 (13 Mar 2023)

What's Changed

  • Use swiftwasm/setup-swiftwasm instead of swiftenv on CI by @kateinoigakukun in #215
  • Support Clock-based sleep APIs by @kateinoigakukun in #216
  • Prefer UInt(bitPattern:) for object id to guarantee uniqueness by @kateinoigakukun in #219
  • Fix wrong markdown in documentation by @gibachan in #221
  • Add withUnsafeBytesAsync function to JSTypedArray by @fjtrujy in #222
  • Trivial fixes to JSTypedArray by @kateinoigakukun in #223

New Contributors

  • @gibachan made their first contribution in #221
  • @fjtrujy made their first contribution in #222

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.17.0...0.18.0

0.17.0 (4 Oct 2022)

This release introduces testing support module, minor API enhancements for JavaScriptEventLoop.

Linking the new JavaScriptEventLoopTestSupport module automatically activates JS event loop based global executor. This automatic activation is just for XCTest integration since XCTest with SwiftPM doesn't allow to call JavaScriptEventLoop.installGlobalExecutor() at first.

What's Changed

  • Bump @actions/core from 1.2.6 to 1.9.1 in /ci/perf-tester by @dependabot in #209
  • Remove baseline tests (e.g. “Call JavaScript function directly”) from comparison by @j-f1 in #211
  • Add 5.7 toolchain matrix by @kateinoigakukun in #210
  • Add JavaScriptEventLoopTestSupport module to install executor by @kateinoigakukun in #213
  • Expose JavaScriptEventLoop.queueMicrotask and .setTimeout by @kateinoigakukun in #214

Full Changelog: https://github.com/swiftwasm/JavaScriptKit/compare/0.16.0...0.17.0

0.16.0 (22 Aug 2022)

This release contains significant performance improvements, API enhancements for JSPromise / JSBigInt / JSClosure, and documentation improvements.

Merged pull requests:

0.15.0 (17 May 2022)

This is a major release that adds new features and fixes issues. Specifically:

  • BigInt and BigInt-based JSTypedArray types are now supported. Now, when passing Int64 values from Swift, they will be mapped to BigInt values on the JavaScript side.
  • The constructor property on JSBridgedClass is now an Optional, which allows bridging JavaScript classes that aren't available in every browser or environment.
  • JavaScriptKit runtime files are now supplied as SwiftPM resources. This allows us to resolve a long-standing issue in carton that could lead to a version mismatch between JavaScriptKit dependency in Package.swift or Package.resolved and carton’s bundled JavaScriptKit runtime version.
  • The JSSymbol type has been added, enabling support for JavaScript Symbol values, including accessing Symbol-keyed properties on objects.

Source breaking changes

UInt64.jsValue and Int64.jsValue, which are a part of JavaScriptKit module, have been moved into JavaScriptBigIntSupport module since their implementation changed to require JS-BigInt-integration to avoid implicit casts from 64-bit integer to JS number type.

If you want to keep the behavior so far, please cast the 64-bit integer values to Double.

Merged pull requests:

0.14.0 (8 April 2022)

This is a breaking release that enables full support for SwiftWasm 5.6 and lays groundwork for future updates to DOMKit.

  • The ConvertibleToJSValue conformance on Array and Dictionary has been swapped from the == ConvertibleToJSValue case to the : ConvertibleToJSValue case.
    • This means that e.g. [String] is now ConvertibleToJSValue, but [ConvertibleToJSValue] no longer conforms;
    • the jsValue() method still works in both cases;
    • to adapt existing code, use one of these approaches:
      • use generics where possible (for single-type arrays)
      • call .map { $0.jsValue() } (or mapValues) to get an array/dictionary of JSValue which you can then use as ConvertibleToJSValue
      • add .jsValue to the end of all of the values in the array/dictionary literal.

Merged pull requests:

0.13.0 (31 March 2022)

This release improves handling of JavaScript exceptions and compatibility with Xcode.

Thanks to @kateinoigakukun, @pedrovgs, and @valeriyvan for contributions!

Closed issues:

  • UserAgent support? (#169)
  • Compile error on macOS 12.2.1 (#167)

Merged pull requests:

0.12.0 (08 February 2022)

This release introduces a major refactor of the JavaScript runtime by @j-f1 and several performance enhancements.

Merged pull requests:

  • Add Hashable conformance to JSObject (#162) via @yonihemi
  • Add test for detached ArrayBuffer (#154) via @yonihemi
  • Fix detached ArrayBuffer errors (#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.set to copy a bunch of bytes (#146) via @kateinoigakukun

0.11.1 (22 November 2021)

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"]) in Package.swift manifest.

Merged pull requests:

0.11.0 (22 November 2021)

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 FinalizationRegistry to auto-deinit JSClosure (#131)
  • make test crashes due to JSClosure memory issues (#129)
  • Avoid manual memory management with JSClosure (#106)

Merged pull requests:

0.10.1 (29 April 2021)

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 January 2021)

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.
  • 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 November 2020)

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 October 2020)

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 September 2020)

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

0.7.1 (27 September 2020)

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 (25 September 2020)

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 (11 September 2020)

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: