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