1#ifndef OE_EXT_JAVASCRIPT_H
2#define OE_EXT_JAVASCRIPT_H
4#include <OxygenEngine/lib/json.hpp>
5#include <OxygenEngine/io/logger.h>
97 ctx = duk_create_heap_default();
102 duk_destroy_heap(ctx);
114 duk_push_object(ctx);
116 for (
auto&& it : methods)
118 duk_push_c_function(ctx, it.callback, it.callback_args_count);
119 duk_put_prop_string(ctx, -2, it.name.c_str());
122 duk_put_prop_string(ctx, -2,
"prototype");
124 duk_put_global_string(ctx, class_info.
name.c_str());
133 duk_put_global_string(ctx, function_info.
name.c_str());
145 static void pushJson(duk_context* ctx,
const nlohmann::json& data,
bool is_object =
true)
147 auto obj_idx = is_object
148 ? duk_push_object(ctx)
149 : duk_push_array(ctx)
152 for (
auto& it : data.items())
154 duk_push_string(ctx, it.key().c_str());
156 const auto& value = it.value();
158 if (value.is_object())
162 else if (value.is_array())
166 else if (value.is_string())
168 duk_push_string(ctx, value.get<std::string>().c_str());
170 else if (value.is_boolean())
172 duk_push_boolean(ctx, value.get<
bool>());
174 else if (value.is_number_integer())
176 duk_push_int(ctx, value.get<int32_t>());
178 else if (value.is_number_float())
180 duk_push_number(ctx, value.get<
float>());
187 duk_put_prop(ctx, obj_idx);
196 static nlohmann::json
getJson(duk_context *ctx,
int index)
198 return nlohmann::json::parse(duk_json_encode(ctx, index));
208 if (duk_peval_string(ctx, data) != 0)
LoggerStream critical(const LogVerbosity verbosity=default_log_verbosity)
Prepare and return a logger stream to receive criticals logs.
Definition logger.h:205
Embedded JavaScript runtime using Duktape.
Definition javascript.h:19
io::Logger & log
Global logger instance.
JavaScript callable entity (can be either a class or a function)
Definition javascript.h:24
duk_c_function callback
Callback of the entity (For classes, this means the constructor)
Definition javascript.h:26
std::string name
Name of the entity.
Definition javascript.h:25
duk_idx_t callback_args_count
Number of arguments of the callback.
Definition javascript.h:27
JavaScript runtime.
Definition javascript.h:94
static void pushJson(duk_context *ctx, const nlohmann::json &data, bool is_object=true)
push a nlhomann::json object as a json to the runtime
Definition javascript.h:145
void addFunction(CallableEntity function_info)
add a C function available in in JavaScript code
Definition javascript.h:130
void eval(const char *data)
Evaluate a script in the current runtime.
Definition javascript.h:206
static nlohmann::json getJson(duk_context *ctx, int index)
pull a nlhomann::json object from a parameter
Definition javascript.h:196
void addClass(CallableEntity class_info, const std::vector< CallableEntity > &methods)
Add a class type available in JavaScript code.
Definition javascript.h:110