/* * Copyright (c) 2023 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "js_util.h" #include "string_ex.h" namespace OHOS { namespace MiscServices { constexpr int64_t JS_NUMBER_MAX_VALUE = (1LL << 53) - 1; napi_valuetype JsUtil::GetType(napi_env env, napi_value in) { napi_valuetype valueType = napi_undefined; napi_typeof(env, in, &valueType); return valueType; } bool JsUtil::GetValue(napi_env env, napi_value in, std::string &out) { size_t size = 0; auto status = napi_get_value_string_utf8(env, in, nullptr, 0, &size); if (status != napi_ok) { return false; } out.resize(size + 1, 0); status = napi_get_value_string_utf8(env, in, const_cast<char *>(out.data()), size + 1, &size); out.resize(size); return status == napi_ok; } bool JsUtil::GetValue(napi_env env, napi_value in, std::u16string &out) { std::string tempOut; bool ret = GetValue(env, in, tempOut); if (ret) { out = Str8ToStr16(tempOut); } return ret; } bool JsUtil::GetValue(napi_env env, napi_value in, int32_t &out) { return napi_get_value_int32(env, in, &out) == napi_ok; } bool JsUtil::GetValue(napi_env env, napi_value in, uint32_t &out) { return napi_get_value_uint32(env, in, &out) == napi_ok; } bool JsUtil::GetValue(napi_env env, napi_value in, int64_t &out) { return napi_get_value_int64(env, in, &out) == napi_ok; } bool JsUtil::GetValue(napi_env env, napi_value in, bool &out) { return napi_get_value_bool(env, in, &out) == napi_ok; } bool JsUtil::GetValue(napi_env env, napi_value in, double &out) { return napi_get_value_double(env, in, &out) == napi_ok; } napi_value JsUtil::GetValue(napi_env env, const std::string &in) { napi_value out = nullptr; napi_create_string_utf8(env, in.c_str(), in.length(), &out); return out; } napi_value JsUtil::GetValue(napi_env env, int32_t in) { napi_value out = nullptr; napi_create_int32(env, in, &out); return out; } napi_value JsUtil::GetValue(napi_env env, uint32_t in) { napi_value out = nullptr; napi_create_uint32(env, in, &out); return out; } napi_value JsUtil::GetValue(napi_env env, int64_t in) { if (in > JS_NUMBER_MAX_VALUE) { // cannot exceed the range of js return nullptr; } napi_value out = nullptr; napi_create_int64(env, in, &out); return out; } napi_value JsUtil::GetValue(napi_env env, bool in) { napi_value out = nullptr; napi_get_boolean(env, in, &out); return out; } } // namespace MiscServices } // namespace OHOS