Swiftpack.co - swiftwasm/OpenCombineJS as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by swiftwasm.
swiftwasm/OpenCombineJS 0.2.0
OpenCombine helpers for JavaScriptKit/WebAssembly APIs
⭐️ 30
🕓 51 weeks ago
.package(url: "https://github.com/swiftwasm/OpenCombineJS.git", from: "0.2.0")

OpenCombineJS

OpenCombine helpers for JavaScriptKit/WebAssembly APIs. Currently it provides:

Example

Here's an example of a timer that fetches a UUID from a remote server every second, parses it with JSValueDecoder, and then displays the result as text:

import JavaScriptKit
import OpenCombine
import OpenCombineJS

private let jsFetch = JSObject.global.fetch.function!
func fetch(_ url: String) -> JSPromise {
  JSPromise(jsFetch(url).object!)!
}

let document = JSObject.global.document
var p = document.createElement("p")
_ = document.body.appendChild(p)

var subscription: AnyCancellable?

let timer = JSTimer(millisecondsDelay: 1000, isRepeating: true) {
  subscription = fetch("https://httpbin.org/uuid")
    .publisher
    .flatMap {
      JSPromise($0.json().object!)!.publisher
    }
    .mapError { $0 as Error }
    .map { Result<String, Error>.success($0.uuid.string!) }
    .catch { Just(.failure($0)) }
    .sink {
      let time = JSDate().toLocaleTimeString()
      switch $0 {
      case let .success(uuid):
        p.innerText = .string("At \(time) received uuid \(uuid)")
      case let .failure(error):
        p.innerText = .string("At \(time) received error \(error)")
      }
    }
}

Code of Conduct

This project adheres to the Contributor Covenant Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to [email protected].

GitHub

link
Stars: 30
Last commit: 46 weeks ago
jonrohan Something's broken? Yell at me @ptrpavlik. Praise and feedback (and money) is also welcome.

Release Notes

0.2.0
51 weeks ago

This release updates dependencies on OpenCombine and JavaScriptKit to their 0.13.0 versions.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics