aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ImportMetaObject.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-05-24 12:01:59 -0700
committerGravatar GitHub <noreply@github.com> 2023-05-24 12:01:59 -0700
commitb3d5f37598ea4ca37a863f05ade94637477f3700 (patch)
tree7469b97e44f2af3d6fa857a5bf96de267a657344 /src/bun.js/bindings/ImportMetaObject.cpp
parent31c967206ab0d3cb5c0e4bd636fa9668e778ec61 (diff)
downloadbun-b3d5f37598ea4ca37a863f05ade94637477f3700.tar.gz
bun-b3d5f37598ea4ca37a863f05ade94637477f3700.tar.zst
bun-b3d5f37598ea4ca37a863f05ade94637477f3700.zip
Implement `require.cache` (#3045)
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/bindings/ImportMetaObject.cpp')
-rw-r--r--src/bun.js/bindings/ImportMetaObject.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/bun.js/bindings/ImportMetaObject.cpp b/src/bun.js/bindings/ImportMetaObject.cpp
index 9c421d839..38cbeba47 100644
--- a/src/bun.js/bindings/ImportMetaObject.cpp
+++ b/src/bun.js/bindings/ImportMetaObject.cpp
@@ -229,6 +229,24 @@ JSC::Structure* Zig::ImportMetaObject::createResolveFunctionStructure(JSC::VM& v
return JSRequireResolveFunction::createStructure(vm, globalObject, prototype);
}
+JSC_DEFINE_CUSTOM_GETTER(jsRequireCacheGetter, (JSC::JSGlobalObject * globalObject, JSC::EncodedJSValue thisValue, JSC::PropertyName))
+{
+ Zig::GlobalObject* thisObject = jsCast<Zig::GlobalObject*>(globalObject);
+ return JSValue::encode(thisObject->lazyRequireCacheObject());
+}
+
+JSC_DEFINE_CUSTOM_SETTER(jsRequireCacheSetter,
+ (JSC::JSGlobalObject * globalObject, JSC::EncodedJSValue thisValue,
+ JSC::EncodedJSValue value, JSC::PropertyName propertyName))
+{
+ JSObject* thisObject = jsDynamicCast<JSObject*>(JSValue::decode(thisValue));
+ if (!thisObject)
+ return false;
+
+ thisObject->putDirect(globalObject->vm(), propertyName, JSValue::decode(value), 0);
+ return true;
+}
+
JSObject* Zig::ImportMetaObject::createRequireFunction(VM& vm, JSGlobalObject* lexicalGlobalObject, const WTF::String& pathString)
{
Zig::GlobalObject* globalObject = static_cast<Zig::GlobalObject*>(lexicalGlobalObject);
@@ -237,6 +255,7 @@ JSObject* Zig::ImportMetaObject::createRequireFunction(VM& vm, JSGlobalObject* l
auto clientData = WebCore::clientData(vm);
requireFunction->putDirect(vm, clientData->builtinNames().pathPublicName(), jsString(vm, pathString), PropertyAttribute::DontEnum | 0);
requireFunction->putDirect(vm, clientData->builtinNames().resolvePublicName(), resolveFunction, PropertyAttribute::Function | PropertyAttribute::DontDelete | 0);
+ requireFunction->putDirectCustomAccessor(vm, Identifier::fromString(vm, "cache"_s), JSC::CustomGetterSetter::create(vm, jsRequireCacheGetter, jsRequireCacheSetter), 0);
return requireFunction;
}
@@ -418,7 +437,7 @@ void ImportMetaObjectPrototype::finishCreation(VM& vm, JSGlobalObject* globalObj
builtinNames.mainPublicName(),
GetterSetter::create(vm, globalObject, JSFunction::create(vm, importMetaObjectMainCodeGenerator(vm), globalObject), nullptr),
JSC::PropertyAttribute::ReadOnly | JSC::PropertyAttribute::Accessor | JSC::PropertyAttribute::Builtin | 0);
-
+
this->putDirect(vm, Identifier::fromString(vm, "primordials"_s), jsUndefined(), JSC::PropertyAttribute::DontEnum | 0);
String requireString = "[[require]]"_s;