Skip to content

Commit cc16022

Browse files
authored
Merge pull request #3124 from cloudflare/hoodmane/add-builtin-object
Add addBuiltinModule from an instance of a template type
2 parents a8c1bf9 + de1774b commit cc16022

File tree

2 files changed

+21
-76
lines changed

2 files changed

+21
-76
lines changed

src/workerd/jsg/modules.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -541,11 +541,16 @@ class ModuleRegistryImpl final: public ModuleRegistry {
541541

542542
template <typename T>
543543
void addBuiltinModule(kj::StringPtr specifier, Type type = Type::BUILTIN) {
544+
addBuiltinModule(specifier, alloc<T>(), type);
545+
}
546+
547+
template <typename T>
548+
void addBuiltinModule(kj::StringPtr specifier, Ref<T> object, Type type = Type::BUILTIN) {
544549
addBuiltinModule(specifier,
545-
[specifier = kj::str(specifier)](
546-
Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) -> kj::Maybe<ModuleInfo> {
550+
[specifier = kj::str(specifier), object = kj::mv(object)](
551+
Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) mutable -> kj::Maybe<ModuleInfo> {
547552
auto& wrapper = TypeWrapper::from(js.v8Isolate);
548-
auto wrap = wrapper.wrap(js.v8Context(), kj::none, alloc<T>());
553+
auto wrap = wrapper.wrap(js.v8Context(), kj::none, kj::mv(object));
549554
return kj::Maybe(ModuleInfo(js, specifier, kj::none, ObjectModuleInfo(js, wrap)));
550555
},
551556
type);

src/workerd/server/workerd-api.c++

+13-73
Original file line numberDiff line numberDiff line change
@@ -555,87 +555,27 @@ void WorkerdApi::compileModules(jsg::Lock& lockParam,
555555
auto path = kj::Path::parse(mainModule->getName());
556556
modules->add(path, kj::mv(KJ_REQUIRE_NONNULL(info)));
557557
}
558+
558559
// Inject metadata that the entrypoint module will read.
559-
{
560-
using ModuleInfo = jsg::ModuleRegistry::ModuleInfo;
561-
using ObjectModuleInfo = jsg::ModuleRegistry::ObjectModuleInfo;
562-
using ResolveMethod = jsg::ModuleRegistry::ResolveMethod;
563-
auto specifier = "pyodide-internal:runtime-generated/metadata";
564-
auto metadataReader = makePyodideMetadataReader(conf, impl->pythonConfig);
565-
modules->addBuiltinModule(specifier,
566-
[specifier = kj::str(specifier), metadataReader = kj::mv(metadataReader)](
567-
jsg::Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) mutable {
568-
auto& wrapper = JsgWorkerdIsolate_TypeWrapper::from(js.v8Isolate);
569-
auto wrap = wrapper.wrap(js.v8Context(), kj::none, kj::mv(metadataReader));
570-
return kj::Maybe(ModuleInfo(js, specifier, kj::none, ObjectModuleInfo(js, wrap)));
571-
},
572-
jsg::ModuleRegistry::Type::INTERNAL);
573-
}
560+
modules->addBuiltinModule("pyodide-internal:runtime-generated/metadata",
561+
makePyodideMetadataReader(conf, impl->pythonConfig), jsg::ModuleRegistry::Type::INTERNAL);
562+
574563
// Inject artifact bundler.
575-
{
576-
using ModuleInfo = jsg::ModuleRegistry::ModuleInfo;
577-
using ObjectModuleInfo = jsg::ModuleRegistry::ObjectModuleInfo;
578-
using ResolveMethod = jsg::ModuleRegistry::ResolveMethod;
579-
auto specifier = "pyodide-internal:artifacts";
580-
modules->addBuiltinModule(specifier,
581-
[specifier = kj::str(specifier)](
582-
jsg::Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) mutable {
583-
auto& wrapper = JsgWorkerdIsolate_TypeWrapper::from(js.v8Isolate);
584-
auto wrap =
585-
wrapper.wrap(js.v8Context(), kj::none, ArtifactBundler::makeDisabledBundler());
586-
return kj::Maybe(ModuleInfo(js, specifier, kj::none, ObjectModuleInfo(js, wrap)));
587-
},
588-
jsg::ModuleRegistry::Type::INTERNAL);
589-
}
564+
modules->addBuiltinModule("pyodide-internal:artifacts",
565+
ArtifactBundler::makeDisabledBundler(), jsg::ModuleRegistry::Type::INTERNAL);
590566

591567
// Inject jaeger internal tracer in a disabled state (we don't have a use for it in workerd)
592-
{
593-
using ModuleInfo = jsg::ModuleRegistry::ModuleInfo;
594-
using ObjectModuleInfo = jsg::ModuleRegistry::ObjectModuleInfo;
595-
using ResolveMethod = jsg::ModuleRegistry::ResolveMethod;
596-
auto specifier = "pyodide-internal:internalJaeger";
597-
modules->addBuiltinModule(specifier,
598-
[specifier = kj::str(specifier)](
599-
jsg::Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) mutable {
600-
auto& wrapper = JsgWorkerdIsolate_TypeWrapper::from(js.v8Isolate);
601-
auto wrap = wrapper.wrap(js.v8Context(), kj::none, DisabledInternalJaeger::create());
602-
return kj::Maybe(ModuleInfo(js, specifier, kj::none, ObjectModuleInfo(js, wrap)));
603-
},
604-
jsg::ModuleRegistry::Type::INTERNAL);
605-
}
568+
modules->addBuiltinModule("pyodide-internal:internalJaeger", DisabledInternalJaeger::create(),
569+
jsg::ModuleRegistry::Type::INTERNAL);
606570

607571
// Inject disk cache module
608-
{
609-
using ModuleInfo = jsg::ModuleRegistry::ModuleInfo;
610-
using ObjectModuleInfo = jsg::ModuleRegistry::ObjectModuleInfo;
611-
using ResolveMethod = jsg::ModuleRegistry::ResolveMethod;
612-
auto specifier = "pyodide-internal:disk_cache";
613-
auto diskCache = jsg::alloc<DiskCache>(impl->pythonConfig.packageDiskCacheRoot);
614-
modules->addBuiltinModule(specifier,
615-
[specifier = kj::str(specifier), diskCache = kj::mv(diskCache)](
616-
jsg::Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) mutable {
617-
auto& wrapper = JsgWorkerdIsolate_TypeWrapper::from(js.v8Isolate);
618-
auto wrap = wrapper.wrap(js.v8Context(), kj::none, kj::mv(diskCache));
619-
return kj::Maybe(ModuleInfo(js, specifier, kj::none, ObjectModuleInfo(js, wrap)));
620-
},
621-
jsg::ModuleRegistry::Type::INTERNAL);
622-
}
572+
modules->addBuiltinModule("pyodide-internal:disk_cache",
573+
jsg::alloc<DiskCache>(impl->pythonConfig.packageDiskCacheRoot),
574+
jsg::ModuleRegistry::Type::INTERNAL);
623575

624576
// Inject a (disabled) SimplePythonLimiter
625-
{
626-
using ModuleInfo = jsg::ModuleRegistry::ModuleInfo;
627-
using ObjectModuleInfo = jsg::ModuleRegistry::ObjectModuleInfo;
628-
using ResolveMethod = jsg::ModuleRegistry::ResolveMethod;
629-
auto specifier = "pyodide-internal:limiter";
630-
modules->addBuiltinModule(specifier,
631-
[specifier = kj::str(specifier)](
632-
jsg::Lock& js, ResolveMethod, kj::Maybe<const kj::Path&>&) mutable {
633-
auto& wrapper = JsgWorkerdIsolate_TypeWrapper::from(js.v8Isolate);
634-
auto wrap = wrapper.wrap(js.v8Context(), kj::none, SimplePythonLimiter::makeDisabled());
635-
return kj::Maybe(ModuleInfo(js, specifier, kj::none, ObjectModuleInfo(js, wrap)));
636-
},
637-
jsg::ModuleRegistry::Type::INTERNAL);
638-
}
577+
modules->addBuiltinModule("pyodide-internal:limiter", SimplePythonLimiter::makeDisabled(),
578+
jsg::ModuleRegistry::Type::INTERNAL);
639579
}
640580

641581
for (auto module: confModules) {

0 commit comments

Comments
 (0)