1/*
2 * Copyright (c) 2022 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#ifndef JS_CONCURRENT_MODULE_COMMON_HELPER_NAPI_HELPER_H
17#define JS_CONCURRENT_MODULE_COMMON_HELPER_NAPI_HELPER_H
18
19#include <uv.h>
20#include "napi/native_api.h"
21#include "napi/native_node_api.h"
22
23namespace Commonlibrary::Concurrent::Common::Helper {
24class NapiHelper {
25public:
26    static bool IsString(napi_env env, napi_value value);
27    static bool IsTypeForNapiValue(napi_env env, napi_value param, napi_valuetype expectType);
28    static bool IsNotUndefined(napi_env env, napi_value value);
29    static bool IsArray(napi_env env, napi_value value);
30    static bool IsFunction(napi_env env, napi_value object);
31    static bool IsArrayBuffer(napi_env env, napi_value value);
32    static bool IsNumber(napi_env env, napi_value value);
33    static bool IsCallable(napi_env env, napi_value value);
34    static bool IsCallable(napi_env env, napi_ref value);
35    static bool IsAsyncFunction(napi_env env, napi_value value);
36    static bool IsConcurrentFunction(napi_env env, napi_value value);
37    static bool IsGeneratorFunction(napi_env env, napi_value value);
38    static bool IsStrictEqual(napi_env env, napi_value lhs, napi_value rhs);
39    static bool IsSendable(napi_env env, napi_value value);
40    static size_t GetCallbackInfoArgc(napi_env env, napi_callback_info cbInfo);
41    static napi_value GetNamePropertyInParentPort(napi_env env, napi_ref parentPort, const char* name);
42    static void SetNamePropertyInGlobal(napi_env env, const char* name, napi_value value);
43    static napi_value GetUndefinedValue(napi_env env);
44    static bool IsObject(napi_env env, napi_value value);
45    static char* GetChars(napi_env env, napi_value value);
46    static std::string GetString(napi_env env, napi_value value);
47    static napi_value CreateBooleanValue(napi_env env, bool value);
48    static napi_value GetGlobalObject(napi_env env);
49    static napi_ref CreateReference(napi_env env, napi_value value, uint32_t refcount);
50    static napi_value CreateUint32(napi_env env, uint32_t value);
51    static uv_loop_t* GetLibUV(napi_env env);
52    static napi_value GetReferenceValue(napi_env env, napi_ref ref);
53    static void DeleteReference(napi_env env, napi_ref ref);
54    static napi_value GetNameProperty(napi_env env, napi_value obj, const char* name);
55    static bool HasNameProperty(napi_env env, napi_value obj, const char* name);
56    static bool GetBooleanValue(napi_env env, napi_value value);
57    static bool StrictEqual(napi_env env, napi_value value, napi_value cmpValue);
58    static std::string GetConstructorName(napi_env env, napi_value object);
59    static napi_value CreateObject(napi_env env);
60    static napi_value CreatePromise(napi_env env, napi_deferred* deferred);
61    static napi_value CreateEmptyString(napi_env env);
62    static uint32_t GetArrayLength(napi_env env, napi_value array);
63    static uint32_t GetUint32Value(napi_env env, napi_value value);
64    static int32_t GetInt32Value(napi_env env, napi_value value);
65    static bool IsExceptionPending(napi_env env);
66    static std::string GetPrintString(napi_env env, napi_value value);
67    static napi_value CreateUint64(napi_env env, uint64_t value);
68    static uint64_t GetUint64Value(napi_env env, napi_value value, bool lossless = false);
69    static napi_value GetElement(napi_env env, napi_value value, uint32_t index);
70    static napi_value CreateArrayWithLength(napi_env env, size_t length);
71};
72} // namespace Commonlibrary::Concurrent::Common::Helper
73#endif // JS_CONCURRENT_MODULE_COMMON_HELPER_NAPI_HELPER_H
74