aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js')
-rw-r--r--src/bun.js/bindings/CommonJSModuleRecord.cpp21
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp16
2 files changed, 33 insertions, 4 deletions
diff --git a/src/bun.js/bindings/CommonJSModuleRecord.cpp b/src/bun.js/bindings/CommonJSModuleRecord.cpp
index e3bf3a0db..a32d722d9 100644
--- a/src/bun.js/bindings/CommonJSModuleRecord.cpp
+++ b/src/bun.js/bindings/CommonJSModuleRecord.cpp
@@ -218,7 +218,7 @@ static Structure* internalCreateCommonJSModuleStructure(
structure = structure->addPropertyTransition(
vm,
structure,
- JSC::Identifier::fromString(vm, "fileName"_s),
+ JSC::Identifier::fromString(vm, "filename"_s),
0,
offset);
@@ -310,10 +310,15 @@ JSC::SourceCode createCommonJSModule(
? JSC::constructEmptyObject(globalObject, globalObject->objectPrototype(), source.commonJSExportsLen)
: JSC::constructEmptyObject(globalObject, globalObject->objectPrototype());
- if (!globalObject->requireMap()->has(globalObject, requireMapKey)) {
- globalObject->requireMap()->set(globalObject, requireMapKey, exportsObject);
+ auto index = sourceURL.reverseFind('/', sourceURL.length());
+ JSString* dirname = jsEmptyString(vm);
+ JSString* filename = requireMapKey;
+ if (index != WTF::notFound) {
+ dirname = JSC::jsSubstring(globalObject, requireMapKey, 0, index);
}
+ globalObject->requireMap()->set(globalObject, requireMapKey, exportsObject);
+
JSC::SourceCode inputSource(
JSC::StringSourceProvider::create(sourceCodeString,
JSC::SourceOrigin(WTF::URL::fileURLWithFileSystemPath(sourceURL)),
@@ -344,6 +349,16 @@ JSC::SourceCode createCommonJSModule(
scopeExtensionObject->putDirectOffset(
vm,
2,
+ dirname);
+
+ scopeExtensionObject->putDirectOffset(
+ vm,
+ 3,
+ filename);
+
+ scopeExtensionObject->putDirectOffset(
+ vm,
+ 4,
requireFunction);
auto* executable = JSC::DirectEvalExecutable::create(
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index 2a6be49b2..0a453a9c8 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -2619,7 +2619,7 @@ void GlobalObject::finishCreation(VM& vm)
JSC::Structure* structure = globalObject->structureCache().emptyObjectStructureForPrototype(
globalObject,
globalObject->objectPrototype(),
- 3);
+ 5);
JSC::PropertyOffset offset;
auto& vm = globalObject->vm();
@@ -2640,6 +2640,20 @@ void GlobalObject::finishCreation(VM& vm)
structure = structure->addPropertyTransition(
vm,
structure,
+ JSC::Identifier::fromString(vm, "__dirname"_s),
+ 0,
+ offset);
+
+ structure = structure->addPropertyTransition(
+ vm,
+ structure,
+ JSC::Identifier::fromString(vm, "__filename"_s),
+ 0,
+ offset);
+
+ structure = structure->addPropertyTransition(
+ vm,
+ structure,
JSC::Identifier::fromString(vm, "require"_s),
JSC::PropertyAttribute::Function | JSC::PropertyAttribute::Builtin | 0,
offset);