Lines Matching refs:env
52 static string JsStrToCppStr(napi_env env, napi_value jsStr)
58 NAPI_CALL_BASE(env, napi_typeof(env, jsStr, &type), "");
64 NAPI_CALL_BASE(env, napi_get_value_string_utf8(env, jsStr, buf, NAPI_MAX_BUF_LEN, &bufSize), "");
69 static napi_value ScheduleEstablishConnection(napi_env env, napi_callback_info info)
74 NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, &value, nullptr));
75 NAPI_ASSERT(env, argc > 0, "Need session token argument!");
76 auto token = JsStrToCppStr(env, argv[0]);
77 g_establishConnectionFuture = async(launch::async, [env, token]() {
80 auto callbackHandler = std::bind(&UiEventObserverNapi::HandleEventCallback, &instance, env, _1, _2);
103 static napi_value CreateJsException(napi_env env, uint32_t code, string_view msg)
108 napi_create_uint32(env, code, &codeValue);
109 napi_create_string_utf8(env, msg.data(), NAPI_AUTO_LENGTH, &msgValue);
110 napi_create_error(env, nullptr, msgValue, &errorValue);
111 napi_set_named_property(env, errorValue, "code", codeValue);
116 static napi_status MountJsConstructorToGlobal(napi_env env, string_view typeName, napi_value function)
118 NAPI_ASSERT_BASE(env, function != nullptr, "Null constructor function", napi_invalid_arg);
121 NAPI_CALL_BASE(env, napi_get_global(env, &global), NAPI_ERR);
122 NAPI_CALL_BASE(env, napi_set_named_property(env, global, name.c_str(), function), NAPI_ERR);
127 static napi_status GetJsConstructorFromGlobal(napi_env env, string_view typeName, napi_value *pFunction)
129 NAPI_ASSERT_BASE(env, pFunction != nullptr, "Null constructor receiver", napi_invalid_arg);
132 NAPI_CALL_BASE(env, napi_get_global(env, &global), NAPI_ERR);
133 NAPI_CALL_BASE(env, napi_get_named_property(env, global, name.c_str(), pFunction), NAPI_ERR);
138 static napi_status ValueStringConvert(napi_env env, napi_value in, napi_value *out, bool stringify)
146 NAPI_CALL_BASE(env, napi_get_global(env, &global), NAPI_ERR);
147 NAPI_CALL_BASE(env, napi_get_named_property(env, global, "JSON", &jsonProp), NAPI_ERR);
149 NAPI_CALL_BASE(env, napi_get_named_property(env, jsonProp, "stringify", &jsonFunc), NAPI_ERR);
151 NAPI_CALL_BASE(env, napi_get_named_property(env, jsonProp, "parse", &jsonFunc), NAPI_ERR);
154 NAPI_CALL_BASE(env, napi_call_function(env, jsonProp, jsonFunc, 1, argv, out), NAPI_ERR);
159 static napi_status UnmarshalObject(napi_env env, const json &in, napi_value *pOut, napi_value jsThis)
161 NAPI_ASSERT_BASE(env, pOut != nullptr, "Illegal arguments", napi_invalid_arg);
164 NAPI_CALL_BASE(env, napi_get_null(env, pOut), NAPI_ERR);
168 NAPI_CALL_BASE(env, napi_create_string_utf8(env, in.dump().c_str(), NAPI_AUTO_LENGTH, pOut), NAPI_ERR);
169 NAPI_CALL_BASE(env, ValueStringConvert(env, *pOut, pOut, false), NAPI_ERR);
183 NAPI_CALL_BASE(env, napi_create_string_utf8(env, cppString.c_str(), NAPI_AUTO_LENGTH, pOut), NAPI_ERR);
191 NAPI_CALL_BASE(env, GetJsConstructorFromGlobal(env, frontendTypeName, &constructor), NAPI_ERR);
192 NAPI_CALL_BASE(env, napi_new_instance(env, constructor, 1, &refValue, pOut), NAPI_ERR);
193 NAPI_CALL_BASE(env, napi_set_named_property(env, *pOut, PROP_BACKEND_OBJ_REF, refValue), NAPI_ERR);
196 NAPI_ASSERT_BASE(env, jsThis != nullptr, "null jsThis", NAPI_ERR);
197 NAPI_CALL_BASE(env, napi_set_named_property(env, *pOut, "boundObject", jsThis), NAPI_ERR);
204 static napi_value UnmarshalReply(napi_env env, const TransactionContext &ctx, const ApiReplyInfo &reply)
217 return CreateJsException(env, code, message);
223 NAPI_CALL(env, napi_get_null(env, &result));
225 NAPI_CALL(env, napi_create_array_with_length(env, reply.resultValue_.size(), &result));
228 NAPI_CALL(env, UnmarshalObject(env, reply.resultValue_.at(idx), &item, ctx.jsThis_));
229 NAPI_CALL(env, napi_set_element(env, result, idx, item));
232 NAPI_CALL(env, UnmarshalObject(env, reply.resultValue_, &result, ctx.jsThis_));
238 napi_value TransactSync(napi_env env, TransactionContext &ctx)
244 auto resultValue = UnmarshalReply(env, ctx, reply);
246 NAPI_CALL(env, napi_is_error(env, resultValue, &isError));
248 NAPI_CALL(env, napi_throw(env, resultValue));
249 NAPI_CALL(env, napi_get_undefined(env, &resultValue)); // return undefined it's error
276 static napi_value TransactAsync(napi_env env, TransactionContext &ctx)
281 NAPI_CALL(env, napi_create_string_latin1(env, __FUNCTION__, NAPI_AUTO_LENGTH, &resName));
285 NAPI_CALL(env, napi_create_promise(env, &(aCtx->deferred_), &promise));
286 NAPI_CALL(env, napi_create_reference(env, ctx.jsThis_, refCount, &(aCtx->jsThisRef_)));
288 env, nullptr, resName,
289 [](napi_env env, void *data) {
295 [](napi_env env, napi_status status, void *data) {
298 napi_open_handle_scope(env, &scope);
302 napi_get_reference_value(env, aCtx->jsThisRef_, &(aCtx->ctx_.jsThis_));
303 auto resultValue = UnmarshalReply(env, aCtx->ctx_, aCtx->reply_);
304 napi_delete_reference(env, aCtx->jsThisRef_);
306 napi_is_error(env, resultValue, &isError);
308 napi_reject_deferred(env, aCtx->deferred_, resultValue);
310 napi_resolve_deferred(env, aCtx->deferred_, resultValue);
312 napi_delete_async_work(env, aCtx->asyncWork_);
313 napi_close_handle_scope(env, scope);
317 napi_queue_async_work(env, aCtx->asyncWork_);
321 static napi_status GetBackendObjRefProp(napi_env env, napi_value value, napi_value* pOut)
324 NAPI_CALL_BASE(env, napi_typeof(env, value, &type), NAPI_ERR);
330 NAPI_CALL_BASE(env, napi_has_named_property(env, value, PROP_BACKEND_OBJ_REF, &hasRef), NAPI_ERR);
334 NAPI_CALL_BASE(env, napi_get_named_property(env, value, PROP_BACKEND_OBJ_REF, pOut), NAPI_ERR);
344 static void PreprocessTransaction(napi_env env, TransactionContext &ctx, napi_value &error)
359 error = CreateJsException(env, ERR_INVALID_INPUT, "Missing file path argument");
366 error = CreateJsException(env, ERR_INVALID_INPUT, "Invalid file path:" + path);
373 UiEventObserverNapi::Get().PreprocessCallOnce(env, ctx.callInfo_, ctx.jsThis_, ctx.jsArgs_, err);
375 error = CreateJsException(env, err.code_, err.message_);
381 static napi_value GenericCallback(napi_env env, napi_callback_info info)
388 NAPI_CALL(env, napi_get_cb_info(env, info, &count, argv, &(ctx.jsThis_), &pData));
389 NAPI_ASSERT(env, pData != nullptr, "Null methodDef");
395 NAPI_CALL(env, napi_create_array_with_length(env, count, ¶mArray));
401 NAPI_CALL(env, GetBackendObjRefProp(env, argv[idx], &item));
405 NAPI_CALL(env, napi_set_element(env, paramArray, idx, item));
408 NAPI_CALL(env, ValueStringConvert(env, paramArray, &jsTempObj, true));
409 ctx.callInfo_.paramList_ = nlohmann::json::parse(JsStrToCppStr(env, jsTempObj));
412 NAPI_CALL(env, GetBackendObjRefProp(env, ctx.jsThis_, &jsTempObj));
413 ctx.callInfo_.callerObjRef_ = JsStrToCppStr(env, jsTempObj);
418 PreprocessTransaction(env, ctx, error);
420 NAPI_CALL(env, napi_throw(env, error));
421 NAPI_CALL(env, napi_get_undefined(env, &error));
426 return TransactSync(env, ctx);
428 return TransactAsync(env, ctx);
433 static napi_status ExportClass(napi_env env, napi_value exports, const FrontEndClassDef &classDef)
435 NAPI_ASSERT_BASE(env, exports != nullptr, "Illegal export params", NAPI_ERR);
450 constexpr auto initializer = [](napi_env env, napi_callback_info info) {
454 NAPI_CALL_BASE(env, napi_get_cb_info(env, info, &argc, argv, &jsThis, nullptr), jsThis);
455 auto ref = make_unique<string>(argc <= 0 ? "" : JsStrToCppStr(env, argv[0]));
456 auto finalizer = [](napi_env env, void *data, void *hint) {
465 NAPI_CALL_BASE(env, napi_wrap(env, jsThis, ref.release(), finalizer, nullptr, nullptr), jsThis);
470 NAPI_CALL_BASE(env, napi_define_class(env, name, NAPI_AUTO_LENGTH, initializer, nullptr,
472 NAPI_CALL_BASE(env, napi_set_named_property(env, exports, name, ctor), NAPI_ERR);
473 NAPI_CALL_BASE(env, MountJsConstructorToGlobal(env, name, ctor), NAPI_ERR);
479 NAPI_CALL_BASE(env, napi_new_instance(env, ctor, 0, nullptr, &seed), NAPI_ERR);
481 NAPI_CALL_BASE(env, napi_create_string_utf8(env, seedRef, NAPI_AUTO_LENGTH, &prop), NAPI_ERR);
482 NAPI_CALL_BASE(env, napi_set_named_property(env, seed, PROP_BACKEND_OBJ_REF, prop), NAPI_ERR);
483 NAPI_CALL_BASE(env, napi_set_named_property(env, exports, seedName, seed), NAPI_ERR);
489 static napi_status ExportEnumerator(napi_env env, napi_value exports, const FrontendEnumeratorDef &enumDef)
491 NAPI_ASSERT_BASE(env, exports != nullptr, "Illegal export params", NAPI_ERR);
493 NAPI_CALL_BASE(env, napi_create_object(env, &enumerator), NAPI_ERR);
497 NAPI_CALL_BASE(env, napi_create_string_utf8(env, def.valueJson_.data(), NAPI_AUTO_LENGTH, &prop), NAPI_ERR);
498 NAPI_CALL_BASE(env, ValueStringConvert(env, prop, &prop, false), NAPI_ERR);
499 NAPI_CALL_BASE(env, napi_set_named_property(env, enumerator, def.name_.data(), prop), NAPI_ERR);
501 NAPI_CALL_BASE(env, napi_set_named_property(env, exports, enumDef.name_.data(), enumerator), NAPI_ERR);
506 static napi_value GetUnCalledJsApis(napi_env env, napi_callback_info info)
509 NAPI_CALL(env, napi_create_array_with_length(env, g_unCalledJsFuncNames.size(), &nameArray));
513 NAPI_CALL(env, napi_create_string_utf8(env, name.c_str(), NAPI_AUTO_LENGTH, &nameItem));
514 NAPI_CALL(env, napi_set_element(env, nameArray, idx, nameItem));
520 napi_value Export(napi_env env, napi_value exports)
528 NAPI_CALL(env, napi_define_properties(env, exports, sizeof(props) / sizeof(props[0]), props));
529 NAPI_CALL(env, ExportClass(env, exports, BY_DEF));
530 NAPI_CALL(env, ExportClass(env, exports, UI_DRIVER_DEF));
531 NAPI_CALL(env, ExportClass(env, exports, UI_COMPONENT_DEF));
532 NAPI_CALL(env, ExportClass(env, exports, ON_DEF));
533 NAPI_CALL(env, ExportClass(env, exports, DRIVER_DEF));
534 NAPI_CALL(env, ExportClass(env, exports, COMPONENT_DEF));
535 NAPI_CALL(env, ExportClass(env, exports, UI_WINDOW_DEF));
536 NAPI_CALL(env, ExportClass(env, exports, POINTER_MATRIX_DEF));
537 NAPI_CALL(env, ExportClass(env, exports, UI_EVENT_OBSERVER_DEF));
538 NAPI_CALL(env, ExportEnumerator(env, exports, MATCH_PATTERN_DEF));
539 NAPI_CALL(env, ExportEnumerator(env, exports, RESIZE_DIRECTION_DEF));
540 NAPI_CALL(env, ExportEnumerator(env, exports, WINDOW_MODE_DEF));
541 NAPI_CALL(env, ExportEnumerator(env, exports, DISPLAY_ROTATION_DEF));
542 NAPI_CALL(env, ExportEnumerator(env, exports, MOUSE_BUTTON_DEF));
543 NAPI_CALL(env, ExportEnumerator(env, exports, UI_DIRECTION_DEF));