JavaScriptWorker.swift 926 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. //
  2. // JavaScriptWorker.swift
  3. // FreeAPS
  4. //
  5. // Created by Ivan Valkou on 29.01.2021.
  6. //
  7. import Foundation
  8. import JavaScriptCore
  9. final class JavaScriptWorker {
  10. private let processQueue = DispatchQueue(label: "DispatchQueue.JavaScriptWorker")
  11. private let virtualMachine: JSVirtualMachine
  12. private let context: JSContext
  13. init() {
  14. virtualMachine = processQueue.sync { JSVirtualMachine()! }
  15. context = JSContext(virtualMachine: virtualMachine)!
  16. context.exceptionHandler = { context, exception in
  17. print(exception!.toString()!)
  18. }
  19. }
  20. @discardableResult
  21. func evaluate(script: Script) -> JSValue! {
  22. context.evaluateScript(script.body)
  23. }
  24. @discardableResult
  25. func evaluate(string: String) -> JSValue! {
  26. context.evaluateScript(string)
  27. }
  28. subscript(key: String) -> JSValue! {
  29. context.objectForKeyedSubscript(key)
  30. }
  31. }