diff options
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/bindings/CommonJSModuleRecord.cpp | 21 | ||||
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 16 |
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); |