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, 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 #ifndef ECMASCRIPT_MODULE_MODULE_RESOLVER_H 16 #define ECMASCRIPT_MODULE_MODULE_RESOLVER_H 17 18 #include "ecmascript/js_tagged_value.h" 19 #include "ecmascript/module/js_module_source_text.h" 20 #include "ecmascript/module/js_shared_module.h" 21 22 namespace panda::ecmascript { 23 class ModuleResolver { 24 public: 25 // 15.2.1.17 Runtime Semantics HostResolveImportedModule ( referencingModule, specifier ) 26 static JSHandle<JSTaggedValue> HostResolveImportedModule(JSThread *thread, 27 const JSHandle<SourceTextModule> &module, 28 const JSHandle<JSTaggedValue> &moduleRequest, 29 const ExecuteTypes& executeType = ExecuteTypes::STATIC); 30 31 static JSHandle<JSTaggedValue> PUBLIC_API HostResolveImportedModule(JSThread *thread, 32 const CString &fileName, 33 const CString &recordName = JSPandaFile::ENTRY_MAIN_FUNCTION, 34 const JSPandaFile *jsPandaFile = nullptr, 35 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 36 37 static JSHandle<JSTaggedValue> PUBLIC_API HostResolveImportedModule(JSThread *thread, 38 const CString &fileName, 39 const CString &recordName, 40 const void *buffer, 41 size_t size, 42 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 43 44 static JSHandle<JSTaggedValue> PUBLIC_API HostResolveImportedModuleForHotReload(JSThread *thread, 45 const CString &referencingModule, 46 const CString &recordName, 47 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 48 49 static JSHandle<JSTaggedValue> ResolveNativeModule(JSThread *thread, 50 const CString &moduleRequest, 51 const CString &baseFileName, 52 ModuleTypes moduleType); 53 54 static void ReplaceModuleThroughFeature(JSThread *thread, CString &requestName); 55 56 private: 57 static JSHandle<JSTaggedValue> HostResolveImportedModuleBundlePack(JSThread *thread, 58 const JSHandle<SourceTextModule> &module, 59 const JSHandle<JSTaggedValue> &moduleRequest, 60 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 61 62 static JSHandle<JSTaggedValue> HostResolveImportedModuleWithMerge(JSThread *thread, 63 const JSHandle<SourceTextModule> &module, 64 const JSHandle<JSTaggedValue> &moduleRequest, 65 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 66 67 static JSHandle<JSTaggedValue> HostResolveImportedModuleBundlePackBuffer(JSThread *thread, 68 const CString &referencingModule, 69 const JSPandaFile *jsPandaFile, 70 const ExecuteTypes &executeType = 71 ExecuteTypes::STATIC); 72 73 static JSHandle<JSTaggedValue> HostResolveImportedModuleBundlePack(JSThread *thread, 74 const CString &referencingModule, 75 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 76 77 static JSHandle<JSTaggedValue> HostResolveImportedModuleWithMerge(JSThread *thread, 78 const CString &referencingModule, 79 const CString &recordName, 80 const JSPandaFile *jsPandaFile = nullptr, 81 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 82 83 static JSHandle<JSTaggedValue> ResolveSharedImportedModuleWithMerge(JSThread *thread, 84 const CString &fileName, 85 const CString &recordName, 86 const JSPandaFile *jsPandaFile, 87 JSRecordInfo *recordInfo); 88 static JSHandle<JSTaggedValue> ResolveModuleBundlePack(JSThread *thread, 89 const JSPandaFile *jsPandaFile, 90 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 91 static JSHandle<JSTaggedValue> ResolveModuleWithMerge(JSThread *thread, 92 const JSPandaFile *jsPandaFile, 93 const CString &recordName, 94 JSRecordInfo *recordInfo, 95 const ExecuteTypes &executeType = ExecuteTypes::STATIC); 96 }; 97 } // namespace panda::ecmascript 98 #endif // ECMASCRIPT_MODULE_MODULE_RESOLVER_H