• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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, &paramType);
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 }