1 /*
2 * Copyright (C) 2021 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16 #include "napi_utils.h"
17 #include <iostream>
18
IsMatchType(napi_value value,napi_valuetype type,napi_env env)19 int32_t IsMatchType(napi_value value, napi_valuetype type, napi_env env)
20 {
21 napi_valuetype paramType;
22 napi_typeof(env, value, ¶mType);
23 if (paramType != type) {
24 return EVENT_INVALID_PARAMETER;
25 }
26 return EVENT_OK;
27 }
28
GetNapiInt32_t(int32_t number,napi_env env)29 napi_value GetNapiInt32_t(int32_t number, napi_env env)
30 {
31 napi_value value;
32 napi_create_int32(env, number, &value);
33 return value;
34 }
35
GetCppInt32_t(napi_value value,napi_env env)36 int32_t GetCppInt32_t(napi_value value, napi_env env)
37 {
38 int32_t number;
39 napi_get_value_int32(env, value, &number);
40 return number;
41 }
42
GetCppBool(napi_value value,napi_env env)43 bool GetCppBool(napi_value value, napi_env env)
44 {
45 bool number = false;
46 napi_get_value_bool(env, value, &number);
47 return number;
48 }
49
EmitAsyncCallbackWork(napi_env env,AsyncCallbackInfo * asyncCallbackInfo)50 void EmitAsyncCallbackWork(napi_env env, AsyncCallbackInfo *asyncCallbackInfo)
51 {
52 if (asyncCallbackInfo == nullptr) {
53 return;
54 }
55 napi_value resourceName;
56 napi_create_string_latin1(env, "AsyncCallback", NAPI_AUTO_LENGTH, &resourceName);
57 napi_create_async_work(
58 env, nullptr, resourceName, [](napi_env env, void* data) {},
59 [](napi_env env, napi_status status, void* data) {
60 AsyncCallbackInfo *asyncCallbackInfo = (AsyncCallbackInfo *)data;
61 napi_value callback;
62 napi_get_reference_value(env, asyncCallbackInfo->callback[0], &callback);
63 napi_call_function(env, nullptr, callback, 1, &asyncCallbackInfo->callbackData, nullptr);
64 napi_delete_reference(env, asyncCallbackInfo->callback[0]);
65 napi_delete_async_work(env, asyncCallbackInfo->asyncWork);
66 delete asyncCallbackInfo;
67 },
68 (void*)asyncCallbackInfo, &asyncCallbackInfo->asyncWork);
69 napi_queue_async_work(env, asyncCallbackInfo->asyncWork);
70 }
71
EmitPromiseWork(napi_env env,AsyncCallbackInfo * asyncCallbackInfo)72 void EmitPromiseWork(napi_env env, AsyncCallbackInfo *asyncCallbackInfo)
73 {
74 if (asyncCallbackInfo == nullptr) {
75 return;
76 }
77 napi_value resourceName;
78 napi_create_string_latin1(env, "Promise", NAPI_AUTO_LENGTH, &resourceName);
79 napi_create_async_work(
80 env, nullptr, resourceName, [](napi_env env, void* data) {},
81 [](napi_env env, napi_status status, void* data) {
82 AsyncCallbackInfo *asyncCallbackInfo = (AsyncCallbackInfo *)data;
83 napi_resolve_deferred(asyncCallbackInfo->env, asyncCallbackInfo->deferred, asyncCallbackInfo->callbackData);
84 napi_delete_async_work(env, asyncCallbackInfo->asyncWork);
85 delete asyncCallbackInfo;
86 },
87 (void*)asyncCallbackInfo, &asyncCallbackInfo->asyncWork);
88 napi_queue_async_work(env, asyncCallbackInfo->asyncWork);
89 }