aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp33
-rw-r--r--src/bun.js/javascript.zig2
-rw-r--r--src/bun.js/modules/BufferModule.h27
3 files changed, 41 insertions, 21 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index 54f79af54..52c25d545 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -37,6 +37,7 @@
#include "JavaScriptCore/JSLock.h"
#include "JavaScriptCore/JSMap.h"
#include "JavaScriptCore/JSModuleLoader.h"
+#include "JavaScriptCore/JSModuleNamespaceObject.h"
#include "JavaScriptCore/JSModuleRecord.h"
#include "JavaScriptCore/JSNativeStdFunction.h"
#include "JavaScriptCore/JSObject.h"
@@ -149,6 +150,8 @@ using JSBuffer = WebCore::JSBuffer;
#include "DOMJITHelpers.h"
#include <JavaScriptCore/DFGAbstractHeap.h>
+#include "../modules/BufferModule.h"
+
// #include <iostream>
static bool has_loaded_jsc = false;
@@ -1761,6 +1764,12 @@ void GlobalObject::finishCreation(VM& vm)
Base::finishCreation(vm);
ASSERT(inherits(info()));
+ // Change prototype from null to object for synthetic modules.
+ m_moduleNamespaceObjectStructure.initLater(
+ [] (const Initializer<Structure>& init) {
+ init.set(JSModuleNamespaceObject::createStructure(init.vm, init.owner, init.owner->objectPrototype()));
+ });
+
m_NapiClassStructure.initLater(
[](LazyClassStructure::Initializer& init) {
init.setStructure(Zig::NapiClass::createStructure(init.vm, init.global, init.global->functionPrototype()));
@@ -2461,20 +2470,9 @@ static JSC_DEFINE_HOST_FUNCTION(functionFulfillModuleSync,
}
if (res.result.value.tag == SyntheticModuleType::Buffer) {
- auto generateSource = [](JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) {
- JSC::VM& vm = lexicalGlobalObject->vm();
- GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(lexicalGlobalObject);
-
- exportNames.append(JSC::Identifier::fromString(vm, "Buffer"_s));
- exportValues.append(WebCore::JSBuffer::getConstructor(vm, globalObject));
-
- exportNames.append(JSC::Identifier::fromString(vm, "Blob"_s));
- exportValues.append(globalObject->getDirect(vm, JSC::Identifier::fromString(vm, "Blob"_s)));
- };
-
auto source = JSC::SourceCode(
JSC::SyntheticSourceProvider::create(
- WTFMove(generateSource),
+ generateBufferSourceCode,
JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath("node:buffer"_s)), WTFMove(moduleKey)));
globalObject->moduleLoader()->provideFetch(globalObject, key, WTFMove(source));
@@ -2538,16 +2536,9 @@ JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalOb
globalObject->vm().drainMicrotasks();
return promise;
- } else if (res.result.value.tag == 1024) {
- auto generateSource = [](JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) {
- JSC::VM& vm = lexicalGlobalObject->vm();
- GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(lexicalGlobalObject);
- exportNames.append(JSC::Identifier::fromString(globalObject->vm(), "Buffer"_s));
- exportValues.append(WebCore::JSBuffer::getConstructor(vm, globalObject));
- };
-
+ } else if (res.result.value.tag == SyntheticModuleType::Buffer) {
auto source = JSC::SourceCode(
- JSC::SyntheticSourceProvider::create(WTFMove(generateSource),
+ JSC::SyntheticSourceProvider::create(generateBufferSourceCode,
JSC::SourceOrigin(), WTFMove(moduleKey)));
auto sourceCode = JSSourceCode::create(vm, WTFMove(source));
diff --git a/src/bun.js/javascript.zig b/src/bun.js/javascript.zig
index 71394bfbf..d480bbac4 100644
--- a/src/bun.js/javascript.zig
+++ b/src/bun.js/javascript.zig
@@ -2759,6 +2759,7 @@ pub const HardcodedModule = enum {
pub const Map = bun.ComptimeStringMap(
HardcodedModule,
.{
+ .{ "buffer", HardcodedModule.@"node:buffer" },
.{ "bun:ffi", HardcodedModule.@"bun:ffi" },
.{ "bun:jsc", HardcodedModule.@"bun:jsc" },
.{ "bun:main", HardcodedModule.@"bun:main" },
@@ -2791,6 +2792,7 @@ pub const HardcodedModule = enum {
pub const LinkerMap = bun.ComptimeStringMap(
string,
.{
+ .{ "buffer", "node:buffer" },
.{ "bun", "bun" },
.{ "bun:ffi", "bun:ffi" },
.{ "bun:jsc", "bun:jsc" },
diff --git a/src/bun.js/modules/BufferModule.h b/src/bun.js/modules/BufferModule.h
new file mode 100644
index 000000000..12d4c54c8
--- /dev/null
+++ b/src/bun.js/modules/BufferModule.h
@@ -0,0 +1,27 @@
+#include "../bindings/ZigGlobalObject.h"
+#include "JavaScriptCore/JSGlobalObject.h"
+
+namespace Zig {
+
+inline void generateBufferSourceCode(JSC::JSGlobalObject* lexicalGlobalObject, JSC::Identifier moduleKey, Vector<JSC::Identifier, 4>& exportNames, JSC::MarkedArgumentBuffer& exportValues) {
+ JSC::VM& vm = lexicalGlobalObject->vm();
+ GlobalObject* globalObject = reinterpret_cast<GlobalObject*>(lexicalGlobalObject);
+
+ exportNames.append(JSC::Identifier::fromString(vm, "Buffer"_s));
+ exportValues.append(WebCore::JSBuffer::getConstructor(vm, globalObject));
+
+ // substitute after JSBlob is implemented.
+ exportNames.append(JSC::Identifier::fromString(vm, "Blob"_s));
+ exportValues.append(JSC::jsUndefined());
+
+ exportNames.append(JSC::Identifier::fromString(vm, "INSPECT_MAX_BYTES"_s));
+ exportValues.append(JSC::jsNumber(50));
+
+ exportNames.append(JSC::Identifier::fromString(vm, "kMaxLength"_s));
+ exportValues.append(JSC::jsNumber(4294967296LL));
+
+ exportNames.append(JSC::Identifier::fromString(vm, "kMaxLength"_s));
+ exportValues.append(JSC::jsNumber(536870888));
+}
+
+}