1 /* 2 * Copyright (c) 2022-2023 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 CONFIG_POLICY_NAPI_H 17 #define CONFIG_POLICY_NAPI_H 18 19 #include <string> 20 21 #include "napi/native_common.h" 22 #include "napi/native_node_api.h" 23 #include "napi/native_api.h" 24 25 namespace OHOS { 26 namespace Customization { 27 namespace ConfigPolicy { 28 struct ConfigAsyncContext { 29 napi_async_work work_; 30 napi_deferred deferred_; 31 napi_ref callbackRef_; 32 typedef napi_value (*CreateNapiValue)(napi_env env, ConfigAsyncContext &context); 33 CreateNapiValue createValueFunc_; 34 35 std::string relPath_; 36 int32_t followMode_; 37 std::string extra_; 38 std::string pathValue_; 39 std::vector<std::string> paths_; 40 }; 41 42 class ConfigPolicyNapi { 43 public: 44 ConfigPolicyNapi(); 45 ~ConfigPolicyNapi() = default; 46 static napi_value Init(napi_env env, napi_value exports); 47 48 private: 49 typedef napi_value (*NapiFunction)(napi_env env, std::shared_ptr<ConfigAsyncContext> context); 50 51 static napi_value NAPIGetOneCfgFile(napi_env env, napi_callback_info info); 52 static napi_value NAPIGetCfgFiles(napi_env env, napi_callback_info info); 53 static napi_value NAPIGetOneCfgFileSync(napi_env env, napi_callback_info info); 54 static napi_value NAPIGetCfgFilesSync(napi_env env, napi_callback_info info); 55 static napi_value NAPIGetCfgDirList(napi_env env, napi_callback_info info); 56 static napi_value NAPIGetCfgDirListSync(napi_env env, napi_callback_info info); 57 static napi_value CreateUndefined(napi_env env); 58 static std::string GetStringFromNAPI(napi_env env, napi_value value); 59 static napi_value HandleAsyncWork(napi_env env, ConfigAsyncContext *context, std::string workName, 60 napi_async_execute_callback execute, napi_async_complete_callback complete); 61 static napi_value GetOneCfgFileOrAllCfgFilesSync(napi_env env, napi_callback_info info, NapiFunction func); 62 static napi_value GetOneCfgFileOrAllCfgFiles(napi_env env, napi_callback_info info, 63 const std::string &workName, napi_async_execute_callback execute); 64 static bool MatchValueType(napi_env env, napi_value value, napi_valuetype targetType); 65 static void NativeGetOneCfgFile(napi_env env, void *data); 66 static void NativeGetCfgFiles(napi_env env, void *data); 67 static void NativeGetCfgDirList(napi_env env, void *data); 68 static napi_value NativeGetOneCfgFileSync(napi_env env, std::shared_ptr<ConfigAsyncContext> context); 69 static napi_value NativeGetCfgFilesSync(napi_env env, std::shared_ptr<ConfigAsyncContext> context); 70 static napi_value NativeGetCfgDirListSync(napi_env env, std::shared_ptr<ConfigAsyncContext> context); 71 static void NativeCallbackComplete(napi_env env, napi_status status, void *data); 72 static napi_value ParseRelPath(napi_env env, std::string ¶m, napi_value args); 73 static napi_value ParseFollowMode(napi_env env, int32_t ¶m, napi_value args, bool hasExtra); 74 static napi_value ParseExtra(napi_env env, std::string ¶m, napi_value args); 75 static napi_value CreateArraysValue(napi_env env, std::shared_ptr<ConfigAsyncContext> context); 76 static void CreateArraysValueFunc(ConfigAsyncContext &context); 77 static void CreateFollowXModeObject(napi_env env, napi_value value); 78 static napi_value ThrowNapiError(napi_env env, int32_t errCode, const std::string &errMessage); 79 }; 80 } // namespace ConfigPolicy 81 } // namespace Customization 82 } // namespace OHOS 83 #endif 84