diff options
author | 2021-07-28 10:56:36 -0700 | |
---|---|---|
committer | 2021-07-28 10:56:36 -0700 | |
commit | 68fa7ec2d0bc3549b398929ad9794783be451b7c (patch) | |
tree | feb1331ea93b6f69905f250269f72452304b0c6c /src/javascript/jsc/bindings/ZigGlobalObject.cpp | |
parent | d18ff76912f6c4522132adfb7c0af1db7c5b6726 (diff) | |
download | bun-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.cpp | 119 |
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 |