diff --git a/interfaces/kits/js/include/config_policy_napi.h b/interfaces/kits/js/include/config_policy_napi.h index cf7d81b4c9b815c07f421702c6d00cf66e755ba1..458f1ff3893c51fc93b33bfddbbcd2fe09a4b3e6 100644 --- a/interfaces/kits/js/include/config_policy_napi.h +++ b/interfaces/kits/js/include/config_policy_napi.h @@ -70,7 +70,7 @@ private: static napi_value NativeGetCfgDirListSync(napi_env env, std::shared_ptr context); static void NativeCallbackComplete(napi_env env, napi_status status, void *data); static napi_value ParseRelPath(napi_env env, std::string ¶m, napi_value args); - static napi_value ParseFollowMode(napi_env env, int32_t ¶m, napi_value args); + static napi_value ParseFollowMode(napi_env env, int32_t ¶m, napi_value args, bool hasExtra); static napi_value ParseExtra(napi_env env, std::string ¶m, napi_value args); static napi_value CreateArraysValue(napi_env env, std::shared_ptr context); static void CreateArraysValueFunc(ConfigAsyncContext &context); diff --git a/interfaces/kits/js/src/config_policy_napi.cpp b/interfaces/kits/js/src/config_policy_napi.cpp index 686515512aaca519a90a0f164b4fcafa92493edc..1e1c9aa3cb9d2db82ecedcebd20256db1bebafed 100644 --- a/interfaces/kits/js/src/config_policy_napi.cpp +++ b/interfaces/kits/js/src/config_policy_napi.cpp @@ -108,21 +108,19 @@ napi_value ConfigPolicyNapi::GetOneCfgFileOrAllCfgFilesSync(napi_env env, napi_c auto asyncContext = std::make_shared(); asyncContext->followMode_ = FOLLOWX_MODE_DEFAULT; + bool hasExtra = false; if (ParseRelPath(env, asyncContext->relPath_, argv[ARR_INDEX_ZERO]) == nullptr) { return nullptr; } if (argc == ARGS_SIZE_TWO) { - if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE]) == nullptr) { + if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE], hasExtra) == nullptr) { return nullptr; } - if (asyncContext->followMode_ == FOLLOWX_MODE_USER_DEFINED) { - return ThrowNapiError(env, PARAM_ERROR, - "Parameter error. The followMode is USER_DEFINED, extra must be set."); - } } if (argc >= ARGS_SIZE_THREE) { - if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE]) == nullptr || + hasExtra = true; + if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE], hasExtra) == nullptr || ParseExtra(env, asyncContext->extra_, argv[ARR_INDEX_TWO]) == nullptr) { return nullptr; } @@ -144,6 +142,7 @@ napi_value ConfigPolicyNapi::GetOneCfgFileOrAllCfgFiles(napi_env env, napi_callb auto asyncContext = std::make_unique(); asyncContext->followMode_ = FOLLOWX_MODE_DEFAULT; + bool hasExtra = false; if (ParseRelPath(env, asyncContext->relPath_, argv[ARR_INDEX_ZERO]) == nullptr) { return nullptr; } @@ -151,35 +150,29 @@ napi_value ConfigPolicyNapi::GetOneCfgFileOrAllCfgFiles(napi_env env, napi_callb if (MatchValueType(env, argv[ARR_INDEX_ONE], napi_function)) { napi_create_reference(env, argv[ARR_INDEX_ONE], NAPI_RETURN_ONE, &asyncContext->callbackRef_); } else { - if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE]) == nullptr) { + if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE], hasExtra) == nullptr) { return nullptr; } - if (asyncContext->followMode_ == FOLLOWX_MODE_USER_DEFINED) { - return ThrowNapiError(env, PARAM_ERROR, - "Parameter error. The followMode is USER_DEFINED, extra must be set."); - } } } if (argc == ARGS_SIZE_THREE) { - if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE]) == nullptr) { - return nullptr; - } if (MatchValueType(env, argv[ARR_INDEX_TWO], napi_function)) { - if (asyncContext->followMode_ == FOLLOWX_MODE_USER_DEFINED) { - return ThrowNapiError(env, PARAM_ERROR, - "Parameter error. The followMode is USER_DEFINED, extra must be set."); - } napi_create_reference(env, argv[ARR_INDEX_TWO], NAPI_RETURN_ONE, &asyncContext->callbackRef_); } else { if (ParseExtra(env, asyncContext->extra_, argv[ARR_INDEX_TWO]) == nullptr) { return nullptr; } + hasExtra = true; + } + if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE], hasExtra) == nullptr) { + return nullptr; } } if (argc == ARGS_SIZE_FOUR) { - if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE]) == nullptr || + hasExtra = true; + if (ParseFollowMode(env, asyncContext->followMode_, argv[ARR_INDEX_ONE], hasExtra) == nullptr || ParseExtra(env, asyncContext->extra_, argv[ARR_INDEX_TWO]) == nullptr) { return nullptr; } @@ -473,7 +466,7 @@ napi_value ConfigPolicyNapi::ParseExtra(napi_env env, std::string ¶m, napi_v return result; } -napi_value ConfigPolicyNapi::ParseFollowMode(napi_env env, int32_t ¶m, napi_value args) +napi_value ConfigPolicyNapi::ParseFollowMode(napi_env env, int32_t ¶m, napi_value args, bool hasExtra) { bool matchFlag = MatchValueType(env, args, napi_number); if (!matchFlag) { @@ -494,8 +487,12 @@ napi_value ConfigPolicyNapi::ParseFollowMode(napi_env env, int32_t ¶m, napi_ case FOLLOWX_MODE_SIM_1: [[fallthrough]]; case FOLLOWX_MODE_SIM_2: - [[fallthrough]]; + break; case FOLLOWX_MODE_USER_DEFINED: + if (!hasExtra) { + return ThrowNapiError(env, PARAM_ERROR, + "Parameter error. The followMode is USER_DEFINED, extra must be set."); + } break; default: return ThrowNapiError(env, PARAM_ERROR,