diff options
author | 2023-08-02 16:27:36 -0700 | |
---|---|---|
committer | 2023-08-02 16:27:36 -0700 | |
commit | c2a77cf7ec9de9eadf938046bdf78e58561c8a6d (patch) | |
tree | 0f90f1b323061455875333c9f40592b303585973 /src/bun.js/bindings/InternalModuleRegistry.h | |
parent | 7656b4b17e91f15b58eeab8f45b78c416ec6a045 (diff) | |
download | bun-c2a77cf7ec9de9eadf938046bdf78e58561c8a6d.tar.gz bun-c2a77cf7ec9de9eadf938046bdf78e58561c8a6d.tar.zst bun-c2a77cf7ec9de9eadf938046bdf78e58561c8a6d.zip |
Rewrite built-in modules to use CommonJS over ESM (#3814)
* stfdsafsd
sadffdsa
stuff
finish commonjs stuff
asdf
not done but work
not done but work
not done yet but this is how far i am
remove files
lol
update built files
uncomment everything in events lol
export default
stuff
* afdsafsd
* its not perfect but almost done
* okay
* cool
* remove temp file
* finish rebase
* revert settings.json
* a
* ch-ch-ch-ch-changes
* okay
* remove this check in release for now
* sxdcfghnjm,
* lkjhgf
* fmt
* filename can be null
* Update NodeModuleModule.h
* weee
* fmt
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/InternalModuleRegistry.h')
-rw-r--r-- | src/bun.js/bindings/InternalModuleRegistry.h | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/bun.js/bindings/InternalModuleRegistry.h b/src/bun.js/bindings/InternalModuleRegistry.h new file mode 100644 index 000000000..d14625e00 --- /dev/null +++ b/src/bun.js/bindings/InternalModuleRegistry.h @@ -0,0 +1,59 @@ +#pragma once +#include "root.h" +#include "JavaScriptCore/JSInternalFieldObjectImpl.h" +#include "JavaScriptCore/JSInternalFieldObjectImplInlines.h" +#include "BunClientData.h" +#include "../../../src/js/out/InternalModuleRegistry+numberOfModules.h" + +namespace Bun { +using namespace JSC; + +// Internal module registry is an array of lazily initialized "modules". Module IDs are generated +// pre-build by `make js` and inlined into JS code and the C++ enum (InternalModuleRegistry::Field) +// This allows modules depending on each other to skip the module resolver. +// +// Modules come from two sources: +// - some are written in JS (src/js, there is a readme file that explain those files more. +// - others are native code (src/bun.js/modules), see _NativeModule.h in there. +class InternalModuleRegistry : public JSInternalFieldObjectImpl<BUN_INTERNAL_MODULE_COUNT> { +protected: + JS_EXPORT_PRIVATE InternalModuleRegistry(VM&, Structure*); + DECLARE_DEFAULT_FINISH_CREATION; + DECLARE_VISIT_CHILDREN_WITH_MODIFIER(JS_EXPORT_PRIVATE); + +public: + using Base = JSInternalFieldObjectImpl<BUN_INTERNAL_MODULE_COUNT>; + + DECLARE_EXPORT_INFO; + + enum Field : uint8_t { +#include "../../../src/js/out/InternalModuleRegistry+enum.h" + }; + const WriteBarrier<Unknown>& internalField(Field field) const { return Base::internalField(static_cast<uint32_t>(field)); } + WriteBarrier<Unknown>& internalField(Field field) { return Base::internalField(static_cast<uint32_t>(field)); } + + template<typename, SubspaceAccess mode> + static GCClient::IsoSubspace* subspaceFor(JSC::VM& vm) + { + if constexpr (mode == JSC::SubspaceAccess::Concurrently) + return nullptr; + return WebCore::subspaceForImpl<InternalModuleRegistry, WebCore::UseCustomHeapCellType::No>( + vm, + [](auto& spaces) { return spaces.m_clientSubspaceForInternalModuleRegistry.get(); }, + [](auto& spaces, auto&& space) { spaces.m_clientSubspaceForInternalModuleRegistry = std::forward<decltype(space)>(space); }, + [](auto& spaces) { return spaces.m_subspaceForInternalModuleRegistry.get(); }, + [](auto& spaces, auto&& space) { spaces.m_subspaceForInternalModuleRegistry = std::forward<decltype(space)>(space); }); + } + + static InternalModuleRegistry* create(VM& vm, Structure* structure); + static Structure* createStructure(VM& vm, JSGlobalObject* globalObject); + + JSValue requireId(JSGlobalObject* globalObject, VM& vm, Field id); + + static JSC_DECLARE_HOST_FUNCTION(jsCreateInternalModuleById); + +protected: + JSValue createInternalModuleById(JSGlobalObject* globalObject, VM& vm, Field id); +}; + +} // namespace Bun |