using Jint.Native;
namespace Jint.Runtime.Modules;
///
/// This is a custom ModuleRecord implementation for dynamically built modules using
///
internal sealed class BuilderModule : SourceTextModule
{
private List> _exportBuilderDeclarations = new();
internal BuilderModule(Engine engine, Realm realm, in Prepared source, string? location, bool async)
: base(engine, realm, source, location, async)
{
}
internal void BindExportedValue(string name, JsValue value)
{
if (_environment is not null)
{
Throw.InvalidOperationException("Cannot bind exported values after the environment has been initialized");
}
_exportBuilderDeclarations ??= new();
_exportBuilderDeclarations.Add(new KeyValuePair(name, value));
}
protected override void InitializeEnvironment()
{
base.InitializeEnvironment();
if (_exportBuilderDeclarations != null)
{
for (var i = 0; i < _exportBuilderDeclarations.Count; i++)
{
var d = _exportBuilderDeclarations[i];
_environment.CreateImmutableBindingAndInitialize(d.Key, true, d.Value, DisposeHint.Normal);
_localExportEntries.Add(new ExportEntry(d.Key, null, null, d.Key));
}
_exportBuilderDeclarations.Clear();
}
}
}