#pragma once #include "root.h" #include "headers-handwritten.h" #include "BakeGlobalObject.h" #include "JavaScriptCore/SourceOrigin.h" namespace Bake { class SourceProvider; extern "C" void Bun__addBakeSourceProviderSourceMap(void* bun_vm, SourceProvider* opaque_source_provider, BunString* specifier); class SourceProvider final : public JSC::StringSourceProvider { public: static Ref create( JSC::JSGlobalObject* globalObject, const String& source, const JSC::SourceOrigin& sourceOrigin, String&& sourceURL, const TextPosition& startPosition, JSC::SourceProviderSourceType sourceType) { auto provider = adoptRef(*new SourceProvider(source, sourceOrigin, WTFMove(sourceURL), startPosition, sourceType)); auto* zigGlobalObject = jsCast(globalObject); auto specifier = Bun::toString(provider->sourceURL()); Bun__addBakeSourceProviderSourceMap(zigGlobalObject->bunVM(), provider.ptr(), &specifier); return provider; } private: SourceProvider( const String& source, const JSC::SourceOrigin& sourceOrigin, String&& sourceURL, const TextPosition& startPosition, JSC::SourceProviderSourceType sourceType) : StringSourceProvider( source, sourceOrigin, JSC::SourceTaintedOrigin::Untainted, WTFMove(sourceURL), startPosition, sourceType) { } }; } // namespace Bake