mirror of
https://github.com/oven-sh/bun
synced 2026-02-17 14:22:01 +00:00
module pr 2 (#18266)
This commit is contained in:
@@ -334,7 +334,7 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionResolveFileName,
|
||||
if (
|
||||
// fast path: it's a real CommonJS module object.
|
||||
auto* cjs = jsDynamicCast<Bun::JSCommonJSModule*>(fromValue)) {
|
||||
fromValue = cjs->id();
|
||||
fromValue = cjs->filename();
|
||||
} else if
|
||||
// slow path: userland code did something weird. lets let them do that
|
||||
// weird thing.
|
||||
@@ -349,7 +349,11 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionResolveFileName,
|
||||
}
|
||||
|
||||
auto scope = DECLARE_THROW_SCOPE(globalObject->vm());
|
||||
auto result = Bun__resolveSync(globalObject, JSC::JSValue::encode(moduleName), JSValue::encode(fromValue), false);
|
||||
auto result = Bun__resolveSync(
|
||||
globalObject,
|
||||
JSC::JSValue::encode(moduleName), JSValue::encode(fromValue),
|
||||
false,
|
||||
true);
|
||||
RETURN_IF_EXCEPTION(scope, {});
|
||||
|
||||
if (!JSC::JSValue::decode(result).isString()) {
|
||||
@@ -393,7 +397,7 @@ JSC_DEFINE_CUSTOM_SETTER(setNodeModuleResolveFilename,
|
||||
}
|
||||
}
|
||||
}
|
||||
globalObject->hasOverridenModuleResolveFilenameFunction = !isOriginal;
|
||||
globalObject->hasOverriddenModuleResolveFilenameFunction = !isOriginal;
|
||||
globalObject->m_moduleResolveFilenameFunction.set(
|
||||
lexicalGlobalObject->vm(), globalObject, value.asCell());
|
||||
}
|
||||
@@ -628,6 +632,74 @@ static JSValue getGlobalPathsObject(VM& vm, JSObject* moduleObject)
|
||||
static_cast<ArrayAllocationProfile*>(nullptr), 0);
|
||||
}
|
||||
|
||||
JSC_DEFINE_HOST_FUNCTION(jsFunctionSetCJSWrapperItem, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame))
|
||||
{
|
||||
auto scope = DECLARE_THROW_SCOPE(globalObject->vm());
|
||||
JSValue a = callFrame->argument(0);
|
||||
JSValue b = callFrame->argument(1);
|
||||
Zig::GlobalObject* global = defaultGlobalObject(globalObject);
|
||||
String aString = a.toWTFString(globalObject);
|
||||
RETURN_IF_EXCEPTION(scope, {});
|
||||
String bString = b.toWTFString(globalObject);
|
||||
RETURN_IF_EXCEPTION(scope, {});
|
||||
global->m_moduleWrapperStart = aString;
|
||||
global->m_moduleWrapperEnd = bString;
|
||||
global->hasOverriddenModuleWrapper = true;
|
||||
return JSC::JSValue::encode(JSC::jsUndefined());
|
||||
}
|
||||
|
||||
JSC_DEFINE_CUSTOM_GETTER(nodeModuleWrapper,
|
||||
(JSGlobalObject * global,
|
||||
EncodedJSValue thisValue,
|
||||
PropertyName propertyName))
|
||||
{
|
||||
// This does not cache anything because it is assumed nobody reads it more than once.
|
||||
VM& vm = global->vm();
|
||||
JSC::JSFunction* cb = JSC::JSFunction::create(vm, global, WebCore::moduleGetWrapperArrayProxyCodeGenerator(vm), global);
|
||||
JSC::CallData callData = JSC::getCallData(cb);
|
||||
|
||||
JSC::MarkedArgumentBuffer args;
|
||||
args.append(JSFunction::create(
|
||||
vm, global, 1, "onMutate"_s,
|
||||
jsFunctionSetCJSWrapperItem, JSC::ImplementationVisibility::Public,
|
||||
JSC::NoIntrinsic));
|
||||
|
||||
NakedPtr<JSC::Exception> returnedException = nullptr;
|
||||
auto result = JSC::profiledCall(global, JSC::ProfilingReason::API, cb, callData, JSC::jsUndefined(), args, returnedException);
|
||||
ASSERT(!returnedException);
|
||||
ASSERT(result.isCell());
|
||||
return JSC::JSValue::encode(result);
|
||||
}
|
||||
|
||||
JSC_DEFINE_CUSTOM_SETTER(setNodeModuleWrapper,
|
||||
(JSGlobalObject * lexicalGlobalObject,
|
||||
EncodedJSValue thisValue, EncodedJSValue encodedValue,
|
||||
PropertyName propertyName))
|
||||
{
|
||||
auto v = JSValue::decode(encodedValue);
|
||||
if (!v.isObject()) return false;
|
||||
auto o = v.getObject();
|
||||
if (!o) return false;
|
||||
|
||||
auto* globalObject = defaultGlobalObject(lexicalGlobalObject);
|
||||
|
||||
auto scope = DECLARE_THROW_SCOPE(lexicalGlobalObject->vm());
|
||||
auto a = o->getIndex(globalObject, 0);
|
||||
RETURN_IF_EXCEPTION(scope, false);
|
||||
auto b = o->getIndex(globalObject, 1);
|
||||
RETURN_IF_EXCEPTION(scope, false);
|
||||
auto astring = a.toWTFString(globalObject);
|
||||
RETURN_IF_EXCEPTION(scope, false);
|
||||
auto bstring = b.toWTFString(globalObject);
|
||||
RETURN_IF_EXCEPTION(scope, false);
|
||||
|
||||
globalObject->m_moduleWrapperStart = astring;
|
||||
globalObject->m_moduleWrapperEnd = bstring;
|
||||
globalObject->hasOverriddenModuleWrapper = true;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
JSC_DEFINE_HOST_FUNCTION(jsFunctionInitPaths, (JSGlobalObject * globalObject, JSC::CallFrame* callFrame))
|
||||
{
|
||||
return JSC::JSValue::encode(JSC::jsUndefined());
|
||||
@@ -723,6 +795,7 @@ runMain jsFunctionRunMain Function 0
|
||||
SourceMap getSourceMapFunction PropertyCallback
|
||||
syncBuiltinESMExports jsFunctionSyncBuiltinESMExports Function 0
|
||||
wrap jsFunctionWrap Function 1
|
||||
wrapper nodeModuleWrapper CustomAccessor
|
||||
Module getModuleObject PropertyCallback
|
||||
@end
|
||||
*/
|
||||
@@ -809,7 +882,7 @@ JSC_DEFINE_HOST_FUNCTION(jsFunctionIsModuleResolveFilenameSlowPathEnabled,
|
||||
{
|
||||
return JSValue::encode(
|
||||
jsBoolean(defaultGlobalObject(globalObject)
|
||||
->hasOverridenModuleResolveFilenameFunction));
|
||||
->hasOverriddenModuleResolveFilenameFunction));
|
||||
}
|
||||
|
||||
} // namespace Bun
|
||||
@@ -835,6 +908,9 @@ void generateNativeModule_NodeModule(JSC::JSGlobalObject* lexicalGlobalObject,
|
||||
exportNames.reserveCapacity(Bun::countof(Bun::nodeModuleObjectTableValues) + 1);
|
||||
exportValues.ensureCapacity(Bun::countof(Bun::nodeModuleObjectTableValues) + 1);
|
||||
|
||||
exportNames.append(vm.propertyNames->defaultKeyword);
|
||||
exportValues.append(constructor);
|
||||
|
||||
for (unsigned i = 0; i < Bun::countof(Bun::nodeModuleObjectTableValues);
|
||||
++i) {
|
||||
const auto& entry = Bun::nodeModuleObjectTableValues[i];
|
||||
@@ -852,9 +928,6 @@ void generateNativeModule_NodeModule(JSC::JSGlobalObject* lexicalGlobalObject,
|
||||
exportNames.append(property);
|
||||
exportValues.append(value);
|
||||
}
|
||||
|
||||
exportNames.append(vm.propertyNames->defaultKeyword);
|
||||
exportValues.append(constructor);
|
||||
}
|
||||
|
||||
} // namespace Zig
|
||||
|
||||
Reference in New Issue
Block a user