aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/CommonJSModuleRecord.h
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-11 19:14:34 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-11 19:14:34 -0700
commitcbb88672f217a90db1aa1eb29cd92d5d9035b22b (patch)
tree43a00501f3cde495967e116f0b660777051551f8 /src/bun.js/bindings/CommonJSModuleRecord.h
parent1f900cff453700b19bca2acadfe26da4468c1282 (diff)
parent34b0e7a2bbd8bf8097341cdb0075d0908283e834 (diff)
downloadbun-jarred/esm-conditions.tar.gz
bun-jarred/esm-conditions.tar.zst
bun-jarred/esm-conditions.zip
Merge branch 'main' into jarred/esm-conditionsjarred/esm-conditions
Diffstat (limited to 'src/bun.js/bindings/CommonJSModuleRecord.h')
-rw-r--r--src/bun.js/bindings/CommonJSModuleRecord.h80
1 files changed, 79 insertions, 1 deletions
diff --git a/src/bun.js/bindings/CommonJSModuleRecord.h b/src/bun.js/bindings/CommonJSModuleRecord.h
index 86daf875d..15792f9da 100644
--- a/src/bun.js/bindings/CommonJSModuleRecord.h
+++ b/src/bun.js/bindings/CommonJSModuleRecord.h
@@ -6,14 +6,92 @@ class GlobalObject;
}
namespace JSC {
class SourceCode;
+class JSSourceCode;
+class ProgramExecutable;
+class AbstractModuleRecord;
}
namespace Bun {
+JSC_DECLARE_HOST_FUNCTION(jsFunctionCreateCommonJSModule);
+JSC_DECLARE_HOST_FUNCTION(jsFunctionLoadModule);
+
+class JSCommonJSModule final : public JSC::JSDestructibleObject {
+public:
+ using Base = JSC::JSDestructibleObject;
+ static constexpr unsigned StructureFlags = Base::StructureFlags | JSC::OverridesPut;
+
+ mutable JSC::WriteBarrier<JSC::JSString> m_id;
+ mutable JSC::WriteBarrier<JSC::JSString> m_filename;
+ mutable JSC::WriteBarrier<JSC::JSString> m_dirname;
+ mutable JSC::WriteBarrier<Unknown> m_paths;
+ mutable JSC::WriteBarrier<JSC::JSSourceCode> sourceCode;
+ bool ignoreESModuleAnnotation { false };
+
+ static void destroy(JSC::JSCell*);
+ ~JSCommonJSModule();
+
+ void finishCreation(JSC::VM& vm,
+ JSC::JSString* id, JSC::JSString* filename,
+ JSC::JSString* dirname, JSC::JSSourceCode* sourceCode);
+
+ static JSC::Structure* createStructure(JSC::JSGlobalObject* globalObject);
+
+ bool evaluate(Zig::GlobalObject* globalObject, const WTF::String& sourceURL, ResolvedSource resolvedSource);
+ bool evaluate(Zig::GlobalObject* globalObject, const WTF::String& key, const SyntheticSourceProvider::SyntheticSourceGenerator& generator);
+
+ static JSCommonJSModule* create(JSC::VM& vm, JSC::Structure* structure,
+ JSC::JSString* id,
+ JSC::JSString* filename,
+ JSC::JSString* dirname, JSC::JSSourceCode* sourceCode);
+
+ static JSCommonJSModule* create(
+ Zig::GlobalObject* globalObject,
+ const WTF::String& key,
+ JSValue exportsObject,
+ bool hasEvaluated = false);
+
+ static JSCommonJSModule* create(
+ Zig::GlobalObject* globalObject,
+ const WTF::String& key,
+ ResolvedSource resolvedSource);
+
+ void toSyntheticSource(JSC::JSGlobalObject* globalObject,
+ JSC::Identifier moduleKey,
+ Vector<JSC::Identifier, 4>& exportNames,
+ JSC::MarkedArgumentBuffer& exportValues);
+
+ JSValue exportsObject();
+ JSValue id();
+
+ DECLARE_VISIT_CHILDREN;
+
+ static bool put(JSC::JSCell* cell, JSC::JSGlobalObject* globalObject,
+ JSC::PropertyName propertyName, JSC::JSValue value,
+ JSC::PutPropertySlot& slot);
+
+ DECLARE_INFO;
+ template<typename, SubspaceAccess mode>
+ static JSC::GCClient::IsoSubspace* subspaceFor(JSC::VM& vm);
+
+ bool hasEvaluated = false;
+
+ JSCommonJSModule(JSC::VM& vm, JSC::Structure* structure)
+ : Base(vm, structure)
+ {
+ }
+};
+
+JSCommonJSModule* createCommonJSModuleWithoutRunning(
+ Zig::GlobalObject* globalObject,
+ Ref<Zig::SourceProvider> sourceProvider,
+ const WTF::String& sourceURL,
+ ResolvedSource source);
+
JSC::Structure* createCommonJSModuleStructure(
Zig::GlobalObject* globalObject);
-JSC::SourceCode createCommonJSModule(
+std::optional<JSC::SourceCode> createCommonJSModule(
Zig::GlobalObject* globalObject,
ResolvedSource source);