• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024 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, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11  * either express or implied. See the License for the specific language governing permissions and limitations under the
12  * License.
13  */
14 
15 #include <cassert>
16 #include <cstdint>
17 #include "libabckit/include/c/abckit.h"
18 #include "libabckit/include/c/extensions/js/metadata_js.h"
19 
20 #include "libabckit/src/macros.h"
21 #include "libabckit/src/metadata_inspect_impl.h"
22 #include "libabckit/src/adapter_dynamic/metadata_modify_dynamic.h"
23 #include "libabckit/src/adapter_static/metadata_modify_static.h"
24 #include "scoped_timer.h"
25 
26 namespace libabckit {
27 
28 // ========================================
29 // File
30 // ========================================
31 
FileAddExternalModule(AbckitFile * file,const struct AbckitJsExternalModuleCreateParams * params)32 extern "C" AbckitJsModule *FileAddExternalModule(AbckitFile *file,
33                                                  const struct AbckitJsExternalModuleCreateParams *params)
34 {
35     LIBABCKIT_CLEAR_LAST_ERROR;
36     LIBABCKIT_IMPLEMENTED;
37     LIBABCKIT_TIME_EXEC;
38 
39     LIBABCKIT_BAD_ARGUMENT(file, nullptr);
40     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
41 
42     if (file->frontend != Mode::DYNAMIC) {
43         statuses::SetLastError(ABCKIT_STATUS_WRONG_MODE);
44         return nullptr;
45     }
46 
47     return FileAddExternalJsModule(file, params);
48 }
49 
50 // ========================================
51 // Module
52 // ========================================
53 
ModuleAddImportFromJsToJs(AbckitJsModule * importing,AbckitJsModule * imported,const struct AbckitJsImportFromDynamicModuleCreateParams * params)54 extern "C" AbckitJsImportDescriptor *ModuleAddImportFromJsToJs(
55     AbckitJsModule *importing /* assert(importing.target === AbckitTarget_ArkTS_v2) */,
56     AbckitJsModule *imported /* assert(importing.target === AbckitTarget_ArkTS_v2) */,
57     const struct AbckitJsImportFromDynamicModuleCreateParams *params)
58 {
59     LIBABCKIT_CLEAR_LAST_ERROR;
60     LIBABCKIT_IMPLEMENTED;
61     LIBABCKIT_TIME_EXEC;
62 
63     LIBABCKIT_BAD_ARGUMENT(importing, nullptr);
64     LIBABCKIT_BAD_ARGUMENT(imported, nullptr);
65     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
66 
67     LIBABCKIT_INTERNAL_ERROR(importing->core, nullptr);
68     LIBABCKIT_INTERNAL_ERROR(imported->core, nullptr);
69 
70     return ModuleAddImportFromDynamicModuleDynamic(importing->core, imported->core, params);
71 }
72 
ModuleRemoveImportJs(AbckitJsModule * m,AbckitJsImportDescriptor * i)73 extern "C" void ModuleRemoveImportJs(AbckitJsModule *m, AbckitJsImportDescriptor *i)
74 {
75     LIBABCKIT_CLEAR_LAST_ERROR;
76     LIBABCKIT_IMPLEMENTED;
77     LIBABCKIT_TIME_EXEC;
78 
79     LIBABCKIT_BAD_ARGUMENT_VOID(m)
80     LIBABCKIT_BAD_ARGUMENT_VOID(i)
81 
82     LIBABCKIT_INTERNAL_ERROR_VOID(m->core)
83 
84     return ModuleRemoveImportDynamic(m->core, i);
85 }
86 
ModuleAddExportFromJsToJs(AbckitJsModule * exporting,AbckitJsModule * exported,const AbckitJsDynamicModuleExportCreateParams * params)87 extern "C" AbckitJsExportDescriptor *ModuleAddExportFromJsToJs(AbckitJsModule *exporting, AbckitJsModule *exported,
88                                                                const AbckitJsDynamicModuleExportCreateParams *params)
89 {
90     LIBABCKIT_CLEAR_LAST_ERROR;
91     LIBABCKIT_IMPLEMENTED;
92     LIBABCKIT_TIME_EXEC;
93 
94     LIBABCKIT_BAD_ARGUMENT(exporting, nullptr);
95     LIBABCKIT_BAD_ARGUMENT(exported, nullptr);
96     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
97 
98     LIBABCKIT_INTERNAL_ERROR(exporting->core, nullptr);
99     LIBABCKIT_INTERNAL_ERROR(exported->core, nullptr);
100 
101     return DynamicModuleAddExportDynamic(exporting->core, exported->core, params);
102 }
103 
ModuleRemoveExportJs(AbckitJsModule * m,AbckitJsExportDescriptor * e)104 extern "C" void ModuleRemoveExportJs(AbckitJsModule *m, AbckitJsExportDescriptor *e)
105 {
106     LIBABCKIT_CLEAR_LAST_ERROR;
107     LIBABCKIT_IMPLEMENTED;
108     LIBABCKIT_TIME_EXEC;
109 
110     LIBABCKIT_BAD_ARGUMENT_VOID(m)
111     LIBABCKIT_BAD_ARGUMENT_VOID(e)
112 
113     LIBABCKIT_INTERNAL_ERROR_VOID(m->core);
114 
115     return ModuleRemoveExportDynamic(m->core, e);
116 }
117 
118 // ========================================
119 // Class
120 // ========================================
121 
122 // ========================================
123 // AnnotationInterface
124 // ========================================
125 
126 // ========================================
127 // Function
128 // ========================================
129 
130 // ========================================
131 // Annotation
132 // ========================================
133 
134 // ========================================
135 // Type
136 // ========================================
137 
138 // ========================================
139 // Value
140 // ========================================
141 
142 // ========================================
143 // String
144 // ========================================
145 
146 // ========================================
147 // LiteralArray
148 // ========================================
149 
150 AbckitJsModifyApi g_jsModifyApiImpl = {
151 
152     // ========================================
153     // File
154     // ========================================
155 
156     FileAddExternalModule,
157 
158     // ========================================
159     // Module
160     // ========================================
161 
162     ModuleAddImportFromJsToJs, ModuleRemoveImportJs, ModuleAddExportFromJsToJs, ModuleRemoveExportJs,
163 
164     // ========================================
165     // Class
166     // ========================================
167 
168     // ========================================
169     // AnnotationInterface
170     // ========================================
171 
172     // ========================================
173     // Function
174     // ========================================
175 
176     // ========================================
177     // Annotation
178     // ========================================
179 
180     // ========================================
181     // Type
182     // ========================================
183 
184     // ========================================
185     // Value
186     // ========================================
187 
188     // ========================================
189     // String
190     // ========================================
191 
192     // ========================================
193     // LiteralArray
194     // ========================================
195 
196     // ========================================
197     // LiteralArray
198     // ========================================
199 };
200 
201 }  // namespace libabckit
202 
203 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
204 #include "./mock/abckit_mock.h"
205 #endif
206 
AbckitGetJsModifyApiImpl(AbckitApiVersion version)207 extern "C" AbckitJsModifyApi const *AbckitGetJsModifyApiImpl(AbckitApiVersion version)
208 {
209 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
210     return AbckitGetMockJsModifyApiImpl(ABCKIT_VERSION_RELEASE_1_0_0);
211 #endif
212     switch (version) {
213         case ABCKIT_VERSION_RELEASE_1_0_0:
214             return &libabckit::g_jsModifyApiImpl;
215         default:
216             libabckit::statuses::SetLastError(ABCKIT_STATUS_UNKNOWN_API_VERSION);
217             return nullptr;
218     }
219 }
220