@@ -409,6 +409,16 @@ class ET_EXPERIMENTAL JsModule final {
409409 explicit JsModule (std::vector<uint8_t > buffer, std::unique_ptr<Module> module )
410410 : buffer_(std::move(buffer)), module_(std::move(module )) {}
411411
412+ static std::unique_ptr<JsModule> load_from_uint8_array (val data) {
413+ size_t length = data[" length" ].as <size_t >();
414+ std::vector<uint8_t > buffer (length);
415+ val memory_view = val (typed_memory_view (length, buffer.data ()));
416+ memory_view.call <void >(" set" , data);
417+ auto loader = std::make_unique<BufferDataLoader>(buffer.data (), length);
418+ return std::make_unique<JsModule>(
419+ std::move (buffer), std::make_unique<Module>(std::move (loader)));
420+ }
421+
412422 static std::unique_ptr<JsModule> load (val data) {
413423 if (data.isNull () || data.isUndefined ()) {
414424 THROW_JS_ERROR (TypeError, " Data cannot be null or undefined" );
@@ -417,13 +427,9 @@ class ET_EXPERIMENTAL JsModule final {
417427 return std::make_unique<JsModule>(
418428 std::make_unique<Module>(data.as <std::string>()));
419429 } else if (data.instanceof (val::global (" Uint8Array" ))) {
420- size_t length = data[" length" ].as <size_t >();
421- std::vector<uint8_t > buffer (length);
422- val memory_view = val (typed_memory_view (length, buffer.data ()));
423- memory_view.call <void >(" set" , data);
424- auto loader = std::make_unique<BufferDataLoader>(buffer.data (), length);
425- return std::make_unique<JsModule>(
426- std::move (buffer), std::make_unique<Module>(std::move (loader)));
430+ return load_from_uint8_array (data);
431+ } else if (data.instanceof (val::global (" ArrayBuffer" ))) {
432+ return load_from_uint8_array (val::global (" Uint8Array" ).new_ (data));
427433 } else {
428434 THROW_JS_ERROR (
429435 TypeError,
0 commit comments