diff --git a/Userland/Libraries/LibJS/Forward.h b/Userland/Libraries/LibJS/Forward.h index a7d61fad31..13802349cd 100644 --- a/Userland/Libraries/LibJS/Forward.h +++ b/Userland/Libraries/LibJS/Forward.h @@ -170,6 +170,7 @@ class Script; class Shape; class Statement; class StringOrSymbol; +class SourceTextModule; class Symbol; class Token; class Utf16String; @@ -180,6 +181,7 @@ class WrappedFunction; enum class DeclarationKind; struct AlreadyResolved; struct JobCallback; +struct ModuleRequest; struct PromiseCapability; // Not included in JS_ENUMERATE_NATIVE_OBJECTS due to missing distinct prototype diff --git a/Userland/Libraries/LibJS/Runtime/VM.h b/Userland/Libraries/LibJS/Runtime/VM.h index efc02f16d0..2ecc876e97 100644 --- a/Userland/Libraries/LibJS/Runtime/VM.h +++ b/Userland/Libraries/LibJS/Runtime/VM.h @@ -241,6 +241,13 @@ public: ScriptOrModule get_active_script_or_module() const; + Function>(ScriptOrModule, ModuleRequest const&)> host_resolve_imported_module; + Function host_import_module_dynamically; + Function host_finish_dynamic_import; + + Function(SourceTextModule const&)> host_get_import_meta_properties; + Function host_finalize_import_meta; + private: explicit VM(OwnPtr); diff --git a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp index 0f17296c8b..6f39fa59fd 100644 --- a/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp +++ b/Userland/Libraries/LibWeb/Bindings/MainThreadVM.cpp @@ -4,6 +4,7 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include #include #include @@ -15,6 +16,10 @@ JS::VM& main_thread_vm() if (!vm) { vm = JS::VM::create(make()); static_cast(vm->custom_data())->event_loop.set_vm(*vm); + + vm->host_resolve_imported_module = [&](JS::ScriptOrModule, JS::ModuleRequest const&) -> JS::ThrowCompletionOr> { + return vm->throw_completion(vm->current_realm()->global_object(), JS::ErrorType::NotImplemented, "Modules in the browser"); + }; } return *vm; }