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