quickjs_runtime 0.17.1

Wrapper API and utils for the QuickJS JavaScript engine with support for Promise, Modules, Async/await
Documentation
# 0.17.1

* upgrade to quickjs-ng 0.12.0

# 0.17.0

* upgrade to quickjs-ng 0.11.0

# 0.16.1

* added explicit + Send to futures returned by loop_realm functions and such

# 0.16.0

* update to bellard 2025-09-13
* removed atom.to_str as it was badly implemented
* removed string.to_str as it was badly implemented

# 0.15.7

* updated error handling / toString (include cause and such)

# 0.15.6

* minor textual update to unhandled promise rejection logging

# 0.15.5

* unhandled promise rejection stacktrace fixed (typescript transpiled)

# 0.15.4

* update swc so it compiles with latest serde again (https://github.com/HiRoFa/quickjs_es_runtime/issues/89)

# 0.15.3

* disable auto realm cleaning for now, will crash if timeouts running after realm cleaned

# 0.15.2

* put a max on number of realms auto created by calling runtimefacade::eval() with a realm id

# 0.15.1

* support string rope in bellard version

# 0.15.0

* quickjs-ng 0.10.0
* quickjs 2025-04-26
* some minor but api breaking changes

# 0.14.9

* TypeScript::TRANSPILER no longer uses external_helpers by default

# 0.14.8

* bumped some deps (especially swc)
* fixed stack traces for transpiled scripts (line numbers now seem to match)

# 0.14.6

* quickjs-ng 0.9.0

# 0.14.5

* quickjs-ng 0.8.0

# 0.14.4

* don't panic on utf8 error in to_str

# 0.14.3

* update quickjs-ng to 0.6.0
* bellard as default

# 0.14.2 (yanked, accidentaly set quickjs-ng as default)

* update quickjs-ng to 0.6.0

# 0.14.1

* update quickjs-ng to 0.5.0

# 0.14.0

* simplified tokio dep
* removed tokio_full feature

# 0.13.4

* added rust backtrace to errors generated in rust

# 0.13.3

* added some debug info to async promise await code

# 0.13.2

* add realm id to log on unhandled promises
* add stack to unhandled prom tracker

# 0.13.1

* update quickjs-ng to 4.0.1
* fixed bigint support for quickjs-ng

# 0.13.0

* support quickjs-ng (v 0.3.0) as feature, it compiles, some test cases fail (bigint) but should be a nice first step

# 0.12.1

* bugfix: console.log("a:%s", undefined); would fail

# 0.12.0

* uses hirofa-quickjs-sys 0.2.0 and ['bellard'] feature and thus the 2024-01-13 version of the original quickjs by
  Fabrice Bellard
* added get_proxy_instance_id for getting instance id without looking up the proxy
* console functions output source filename

# 0.11.5

* more robust stacktrace parser, again

# 0.11.4

* fix %o pattern in console.log

# 0.11.3

* more robust stacktrace parser

# 0.11.2

* pin swc versions
* stacktrace fixer/parser no longer fails on empty lines

# 0.11.1

* if stack parsing fails, log as error but just return original stack

# 0.11.0

* Script has code/transpiledcode/map for correct error reporting of transpiled code
* built-in typescript support via feature in Cargo.toml

# 0.10.2

* removed error when dropping rt/ctx (finalizers of proxy classes causing an allreadyborrowed panic )
* Proxy instances now have a .constructor which is the constructor function..

# 0.10.1

* replaced Mutex with DebugMutex and thus with parking_lot

# 0.10.0

* removed Js*Adapter/Facade traits
* renamed JSValueRef to QuickjsValueAdapter
* removed legacy EsValueFacade
* removed Weak<QuickjsRuntimeFacadeInner> ref arg from JsValueFacade inners
* renamed all js_ functions to more readable names (eg js_null_create()) -> create_null())
* added (static_)catch_all_getter_setter to Proxy for getting/setting all prop names
* altered the way things are parsed in reflection, like propnames.. should lead to less string allocation

# 0.9.0

* when dropping a Realm dangling Promises will log an error instead of panicking

# 0.8

## 0.8.7

* removed win-api and once_cell from tokio features
* serde support in utils

## 0.8.6

* turned obj is proxy code around to prevent errors filling the log

## 0.8.5

* better toString for errors

## 0.8.4

* removed some logging

## 0.8.3

* reference utils 0.5.4 (by reffing 0.5) (fixes #69)

## 0.8.2

* reference utils 0.5.3 (fixes #68)

## 0.8.1

* fixed memory usage report (#66)

## 0.8.0

* impld realm init hook
* proxy info functions (see if obj is an instance of a proxy class)

# 0.7

## 0.7.2

* fix for #62 (nested callback creation/drop fails)

## 0.7.1

* fn to calc memory usage
* implemented static event handlers for proxies

## 0.7.0

* implemented js_proxy_new_instance_with_id from utils which allows you to create an instance of a proxy with a
  predefined id
* implemented set_prop / has_prop functions in proxies
* implemented CompiledModuleLoader
* implemented jsValueAdapter.js_to_str()
* changed some deps to minor version x.x instead of x.x.x
* made console/setinterval/settimeout/setimmediate optional(but default) features
* more complete stacktrace with errors
* callback functions add name to stacktrace on error
* implemented typedarrays (Uint8 only for now)

# 0.6

## 0.6.0

* updated quickjs to 2021-03-27
* reverted back to EsRuntime having an Arc<EsRuntimeInner> (helps me with my abstraction project)
* renamed EsRuntime to QuickJsRuntimeFacade, and others to follow same conventions
* removed fetch api (moved to greencopperruntime)
* removed all panics when async promise resolution fails because of the realm being invalid
* implemented a lot of js_utils abstractions, please note that js_utils::JsValueFacade will someday deprecate
  quickjs_runtime::EsValueFacade

# 0.5

## 0.5.1

* removed redundant prinltn (thanks SreeniIO!)
* added testcase for abstractions, and fixed some typedefs

## 0.5.0

* replaced EsScript with js_utils::Script
* replaced ScriptPreProcessor with js_utils::ScriptPreProcessor
* replaced EsError with js_utils::JsError
* implemented utils::js_utils (generic adapters and facades,
  see [the green copper plan]https://github.com/HiRoFa/GreenCopperRuntime/blob/main/README.md#roadmap--the-plan for
  what's this all about)
* changes to function definitions
* fixed interrupt handler

# 0.4

## 0.4.2

* moved reflection code to reflection/mod.rs (should not affect api)
* toPrimitive for Proxy classes (do stuff like console.log('got: ' + MyProxyInstanceOrClass))
* removed droppablevalue, replaced with JSPropertyEnumRef
* added is_enumerable(index) fn to JSPropertyEnumRef
* added get_name(index) fn to JSPropertyEnumRef
* added interrupt_handler

## 0.4.1

* altered tokio dep, full is now optional (prevents valgrind errors)
* altered utils dep to 0.1
* added debug log for when eval/evalmodule fails
* scriptpreproc returns Result instead of just script
* q_js_rt.load_module_script_opt now returns Script instead of String

## 0.4.0

* use EventLoop from hirofa_utils, cleaner code, much less Mutexes
* Renamed a lot of public methods
    * e.g. rt.add_to_es_event_queue_sync -> rt.exe_rt_task_in_event_loop()
    * e.g. rt.add_to_es_event_queue -> rt.add_rt_task_to_event_loop()
* Removed EsRuntime.inner Arc, was a duplicate solution to the same problem
* mit lic
* script preprocessors

# 0.3.0

* EsValueFacade now links to live object when object is passed out of runtime
* added EsValueFacade.stringify()
* added EsFunction struct to create functions as EsValueFacade
* is/get_error for EsValueFacade used for when promise or async function is rejected with Error obj

# 0.2

## 0.2.3

* added a runtime_init_hook(hook) method to the EsRuntimeBuilder so we can add vars to the runtime when the builder is
  built
* added EsPromise::new_async which can be used to instantiate a Promise with an async resolver
    * Big thanks to [SreeniIO]https://github.com/SreeniIO for helping out!
* refactored the module loaders in qjsrt so we can differentiate between script and native... I need that for CommonJS
  and probably later for transpiling and such
* added quickjs_utils::get_script_or_module_name to get the current scripts filename or module name
* Proxy supports multiple finalizers
* Proxy as EventTarget first working code. needs to mature, but the goal for now is minimal support for dispatching
  events from rust to JavaScript

## 0.2.2

* added _void variants for adding jobs to the event queue, this prevents Futures being dropped before being resolved
  resulting in errors in the logs
* setTimeout / setInterval now correctly run pending jobs (fixes resolving promises with timeout and such)
* removed logging from console.rs so we can set custom loglevel to that package
* fixed deadlocks in esvalue promise resolution

## 0.2.1

* altered esruntimebuilder to accept Box<M>

## 0.2.0

* rebuilt the module loading system
* use Waker in Futures

# 0.1

## 0.1.1

* more precise timing for setTimeout and setInterval
* quickjs_utils::maps utils for
  handling [Map]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map instances from
  rust
* quickjs_utils::sets utils for
  handling [Set]https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set instances from
  rust
* Proxy.event_target and Proxy.static_event_target to allow a Proxy to be used
  as [EventTarget]https://developer.mozilla.org/en-US/docs/Web/API/EventTarget
* objects::construct_object util to create a new instance of a constructor
* iterators util to handle iterators
* EventQueue.async_task will be a starting point for being able to use async/await with javascript
* made async functions in EsRuntime (eval, eval_module, call_function, gc)
* made invoke_function in EsValueFacade async
* added
  async [get_promise_result]https://hirofa.github.io/quickjs_es_runtime/quickjs_runtime/esvalue/struct.EsValueFacade.html#method.get_promise_result
  to EsValueFacade so the result of a promise may be awaited async
* added quickjs_utils::modules::detect_module() method to detect if a script source is a module
* added ```es_args![]``` macro so you can use

  ```let args = es_args![1, 2, true, "sdf".to_string()]```

  instead of

  ```let args = vec![1.to_es_value_facade(), 2.to_es_value_facade(), true.to_es_value_facade(), "sdf".to_string().to_es_value_facade()]```
* added quickjs_utils::modules::new_module/add_module_export/set_module_export
* added NativeModuleLoader to QuickJSRuntime to enable implementors to load native modules on-demand
* altered reflection to enable creation of JSValueRef without making it available in global scope (.install(ctx, false))

## 0.1.0

Initial release