aboutsummaryrefslogtreecommitdiff
path: root/src/javascript/jsc/bindings/ZigGlobalObject.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-07-28 10:56:36 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-07-28 10:56:36 -0700
commit68fa7ec2d0bc3549b398929ad9794783be451b7c (patch)
treefeb1331ea93b6f69905f250269f72452304b0c6c /src/javascript/jsc/bindings/ZigGlobalObject.cpp
parentd18ff76912f6c4522132adfb7c0af1db7c5b6726 (diff)
downloadbun-68fa7ec2d0bc3549b398929ad9794783be451b7c.tar.gz
bun-68fa7ec2d0bc3549b398929ad9794783be451b7c.tar.zst
bun-68fa7ec2d0bc3549b398929ad9794783be451b7c.zip
WIP
Former-commit-id: 60cc85dc0652b34e9c7ec409f32ba635cc4b2e51
Diffstat (limited to 'src/javascript/jsc/bindings/ZigGlobalObject.cpp')
-rw-r--r--src/javascript/jsc/bindings/ZigGlobalObject.cpp119
1 files changed, 80 insertions, 39 deletions
diff --git a/src/javascript/jsc/bindings/ZigGlobalObject.cpp b/src/javascript/jsc/bindings/ZigGlobalObject.cpp
index ec998b192..af975e79e 100644
--- a/src/javascript/jsc/bindings/ZigGlobalObject.cpp
+++ b/src/javascript/jsc/bindings/ZigGlobalObject.cpp
@@ -123,59 +123,100 @@ JSC::Identifier GlobalObject::moduleLoaderResolve(
) {
auto res = Zig__GlobalObject__resolve(
globalObject,
- loader,
- JSValue::encode(key),
- JSValue::encode(referrer),
- nullptr
+ toZigString(key, globalObject),
+ toZigString(referrer, globalObject)
);
- return toIdentifier(res, globalObject);
+ if (res.success) {
+ return toIdentifier(res.result.value, globalObject);
+ } else {
+ auto scope = DECLARE_THROW_SCOPE(globalObject->vm());
+ throwException(scope, res.result.err.message, globalObject);
+ return globalObject->vm().propertyNames->emptyIdentifier;
+ }
+
}
-JSC::JSInternalPromise* GlobalObject::moduleLoaderImportModule(JSGlobalObject* globalObject, JSModuleLoader* loader, JSString* specifierValue, JSValue referrer, const SourceOrigin& sourceOrigin) {
- return Zig__GlobalObject__import(
- globalObject,
- loader,
- specifierValue,
- JSC::JSValue::encode(referrer),
- &sourceOrigin
- );
+JSC::JSInternalPromise* GlobalObject::moduleLoaderImportModule(JSGlobalObject* globalObject, JSModuleLoader*, JSString* moduleNameValue, JSValue parameters, const SourceOrigin& sourceOrigin)
+{
+ JSC::VM& vm = globalObject->vm();
+ auto scope = DECLARE_THROW_SCOPE(vm);
+
+ auto* promise = JSC::JSInternalPromise::create(vm, globalObject->internalPromiseStructure());
+ RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope));
+
+ auto sourceURL = sourceOrigin.url();
+ auto resolved = Zig__GlobalObject__resolve(globalObject, toZigString(moduleNameValue, globalObject), sourceURL.isEmpty() ? ZigStringCwd : toZigString(sourceURL.fileSystemPath()));
+ if (!resolved.success) {
+ throwException(scope, resolved.result.err.message, globalObject);
+ return promise->rejectWithCaughtException(globalObject, scope);
+ }
+
+ auto result = JSC::importModule(globalObject, toIdentifier(resolved.result.value, globalObject), parameters, JSC::jsUndefined());
+ RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope));
+
+ return result;
}
+
JSC::JSInternalPromise* GlobalObject::moduleLoaderFetch(JSGlobalObject* globalObject, JSModuleLoader* loader, JSValue key, JSValue value1, JSValue value2) {
- return Zig__GlobalObject__fetch(
- globalObject,
- loader,
- JSValue::encode(key),
- JSValue::encode(value1),
- JSValue::encode(value2)
- );
-}
+ JSC::VM& vm = globalObject->vm();
+ JSC::JSInternalPromise* promise = JSC::JSInternalPromise::create(vm, globalObject->internalPromiseStructure());
-JSC::JSObject* GlobalObject::moduleLoaderCreateImportMetaProperties(JSGlobalObject* globalObject, JSModuleLoader* loader, JSValue key, JSModuleRecord* record, JSValue val) {
- auto res = Zig__GlobalObject__createImportMetaProperties(
+ auto scope = DECLARE_THROW_SCOPE(vm);
+
+ auto rejectWithError = [&](JSC::JSValue error) {
+ promise->reject(globalObject, error);
+ return promise;
+ };
+
+ auto moduleKey = key.toWTFString(globalObject);
+ RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope));
+ auto moduleKeyZig = toZigString(moduleKey);
+
+ auto res = Zig__GlobalObject__fetch(
globalObject,
- loader,
- JSValue::encode(key),
- record,
- JSValue::encode(val)
+ moduleKeyZig,
+ ZigStringEmpty
);
- return JSValue::decode(res).getObject();
-}
+ if (!res.success) {
+ throwException(scope, res.result.err.message, globalObject);
+ RETURN_IF_EXCEPTION(scope, promise->rejectWithCaughtException(globalObject, scope));
+ }
-JSC::JSValue GlobalObject::moduleLoaderEvaluate(JSGlobalObject* globalObject, JSModuleLoader* moduleLoader, JSValue key, JSValue moduleRecordValue, JSValue scriptFetcher, JSValue sentValue, JSValue resumeMode) {
- auto res = Zig__GlobalObject__eval(
- globalObject,
- moduleLoader,
- JSValue::encode(key),
- JSValue::encode(moduleRecordValue),
- JSValue::encode(scriptFetcher),
- JSValue::encode(sentValue),
- JSValue::encode(resumeMode)
+ auto code = Zig::toString(res.result.value);
+ auto sourceCode = JSC::JSSourceCode::create(
+ vm,
+ JSC::makeSource(
+ code,
+ JSC::SourceOrigin { WTF::URL::fileURLWithFileSystemPath(moduleKey) },
+ WTFMove(moduleKey),
+ TextPosition(),
+ JSC::SourceProviderSourceType::Module
+ )
);
- return JSValue::decode(res);
+ scope.release();
+ promise->resolve(globalObject, sourceCode);
+ return promise;
+}
+
+JSC::JSObject* GlobalObject::moduleLoaderCreateImportMetaProperties(JSGlobalObject* globalObject, JSModuleLoader* loader, JSValue key, JSModuleRecord* record, JSValue val) {
+ return nullptr;
+ // auto res = Zig__GlobalObject__createImportMetaProperties(
+ // globalObject,
+ // loader,
+ // JSValue::encode(key),
+ // record,
+ // JSValue::encode(val)
+ // );
+
+ // return JSValue::decode(res).getObject();
}
+JSC::JSValue GlobalObject::moduleLoaderEvaluate(JSGlobalObject* globalObject, JSModuleLoader* moduleLoader, JSValue key, JSValue moduleRecordValue, JSValue scriptFetcher, JSValue sentValue, JSValue resumeMode) {
+ // VM& vm = globalObject->vm();
+ return moduleLoader->evaluateNonVirtual(globalObject, key, moduleRecordValue, scriptFetcher, sentValue, resumeMode);
+}
} \ No newline at end of file