ModuleLoader.cs 1.0 KB

12345678910111213141516171819202122232425262728293031323334
  1. using Esprima;
  2. namespace Jint.Runtime.Modules;
  3. /// <summary>
  4. /// Base template for module loaders.
  5. /// </summary>
  6. public abstract class ModuleLoader : IModuleLoader
  7. {
  8. public abstract ResolvedSpecifier Resolve(string? referencingModuleLocation, ModuleRequest moduleRequest);
  9. public Module LoadModule(Engine engine, ResolvedSpecifier resolved)
  10. {
  11. string code;
  12. try
  13. {
  14. code = LoadModuleContents(engine, resolved);
  15. }
  16. catch (Exception)
  17. {
  18. ExceptionHelper.ThrowJavaScriptException(engine, $"Could not load module {resolved.ModuleRequest.Specifier}", (Location) default);
  19. return default!;
  20. }
  21. var isJson = resolved.ModuleRequest.IsJsonModule();
  22. Module moduleRecord = isJson
  23. ? ModuleFactory.BuildJsonModule(engine, resolved, code)
  24. : ModuleFactory.BuildSourceTextModule(engine, resolved, code);
  25. return moduleRecord;
  26. }
  27. protected abstract string LoadModuleContents(Engine engine, ResolvedSpecifier resolved);
  28. }