• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2025 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 "business_error.h"
17 
18 #include <unordered_map>
19 
20 #include "bundle_errors.h"
21 #include "business_error_map.h"
22 
23 namespace OHOS {
24 namespace AppExecFwk {
25 
ThrowError(napi_env env,int32_t err,const std::string & msg)26 void BusinessError::ThrowError(napi_env env, int32_t err, const std::string &msg)
27 {
28     napi_value error = CreateError(env, err, msg);
29     napi_throw(env, error);
30 }
31 
ThrowParameterTypeError(napi_env env,int32_t err,const std::string & parameter,const std::string & type)32 void BusinessError::ThrowParameterTypeError(napi_env env, int32_t err,
33     const std::string &parameter, const std::string &type)
34 {
35     napi_value error = CreateCommonError(env, err, parameter, type);
36     napi_throw(env, error);
37 }
38 
ThrowTooFewParametersError(napi_env env,int32_t err)39 void BusinessError::ThrowTooFewParametersError(napi_env env, int32_t err)
40 {
41     ThrowError(env, err, BusinessErrorNS::ERR_MSG_PARAM_NUMBER_ERROR);
42 }
43 
CreateError(napi_env env,int32_t err,const std::string & msg)44 napi_value BusinessError::CreateError(napi_env env, int32_t err, const std::string& msg)
45 {
46     napi_value businessError = nullptr;
47     napi_value errorCode = nullptr;
48     NAPI_CALL(env, napi_create_int32(env, err, &errorCode));
49     napi_value errorMessage = nullptr;
50     NAPI_CALL(env, napi_create_string_utf8(env, msg.c_str(), NAPI_AUTO_LENGTH, &errorMessage));
51     napi_create_error(env, nullptr, errorMessage, &businessError);
52     napi_set_named_property(env, businessError, "code", errorCode);
53     return businessError;
54 }
55 
CreateCommonError(napi_env env,int32_t err,const std::string & functionName,const std::string & permissionName)56 napi_value BusinessError::CreateCommonError(
57     napi_env env, int32_t err, const std::string &functionName, const std::string &permissionName)
58 {
59     std::string errMessage = BusinessErrorNS::ERR_MSG_BUSINESS_ERROR;
60     auto iter = errMessage.find("$");
61     if (iter != std::string::npos) {
62         errMessage = errMessage.replace(iter, 1, std::to_string(err));
63     }
64     std::unordered_map<int32_t, const char*> errMap;
65     BusinessErrorMap::GetErrMap(errMap);
66     if (errMap.find(err) != errMap.end()) {
67         errMessage += errMap[err];
68     }
69     iter = errMessage.find("$");
70     if (iter != std::string::npos) {
71         errMessage = errMessage.replace(iter, 1, functionName);
72         iter = errMessage.find("$");
73         if (iter != std::string::npos) {
74             errMessage = errMessage.replace(iter, 1, permissionName);
75         }
76     }
77     return CreateError(env, err, errMessage);
78 }
79 
CreateInstallError(napi_env env,int32_t err,int32_t innerCode,const std::string & functionName,const std::string & permissionName)80 napi_value BusinessError::CreateInstallError(
81     napi_env env, int32_t err, int32_t innerCode,
82     const std::string &functionName, const std::string &permissionName)
83 {
84     std::string errMessage = BusinessErrorNS::ERR_MSG_BUSINESS_ERROR;
85     auto iter = errMessage.find("$");
86     if (iter != std::string::npos) {
87         errMessage = errMessage.replace(iter, 1, std::to_string(err));
88     }
89     std::unordered_map<int32_t, const char*> errMap;
90     BusinessErrorMap::GetErrMap(errMap);
91     if (errMap.find(err) != errMap.end()) {
92         errMessage += errMap[err];
93     }
94     errMessage += "[" + std::to_string(innerCode) + "]";
95     iter = errMessage.find("$");
96     if (iter != std::string::npos) {
97         errMessage = errMessage.replace(iter, 1, functionName);
98         iter = errMessage.find("$");
99         if (iter != std::string::npos) {
100             errMessage = errMessage.replace(iter, 1, permissionName);
101         }
102     }
103     return CreateError(env, err, errMessage);
104 }
105 
ThrowEnumError(napi_env env,const std::string & parameter,const std::string & type)106 void BusinessError::ThrowEnumError(napi_env env,
107     const std::string &parameter, const std::string &type)
108 {
109     napi_value error = CreateEnumError(env, parameter, type);
110     napi_throw(env, error);
111 }
112 
CreateEnumError(napi_env env,const std::string & parameter,const std::string & enumClass)113 napi_value BusinessError::CreateEnumError(napi_env env,
114     const std::string &parameter, const std::string &enumClass)
115 {
116     std::string errMessage = BusinessErrorNS::ERR_MSG_BUSINESS_ERROR;
117     auto iter = errMessage.find("$");
118     if (iter != std::string::npos) {
119         errMessage = errMessage.replace(iter, 1, std::to_string(ERROR_PARAM_CHECK_ERROR));
120     }
121     errMessage += BusinessErrorNS::ERR_MSG_ENUM_ERROR;
122     iter = errMessage.find("$");
123     if (iter != std::string::npos) {
124         errMessage = errMessage.replace(iter, 1, parameter);
125         iter = errMessage.find("$");
126         if (iter != std::string::npos) {
127             errMessage = errMessage.replace(iter, 1, enumClass);
128         }
129     }
130     return CreateError(env, ERROR_PARAM_CHECK_ERROR, errMessage);
131 }
132 } // AppExecFwk
133 } // OHOS
134