2
0

Test262ModuleLoader.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. #nullable enable
  2. using Jint.Runtime;
  3. using Jint.Runtime.Modules;
  4. using Zio;
  5. namespace Jint.Tests.Test262;
  6. internal sealed class Test262ModuleLoader : ModuleLoader
  7. {
  8. private readonly IFileSystem _fileSystem;
  9. private readonly string _basePath;
  10. public Test262ModuleLoader(IFileSystem fileSystem, string basePath)
  11. {
  12. _fileSystem = fileSystem;
  13. _basePath = "/test/" + basePath.TrimStart('\\').TrimStart('/');
  14. }
  15. public override ResolvedSpecifier Resolve(string? referencingModuleLocation, ModuleRequest moduleRequest)
  16. {
  17. return new ResolvedSpecifier(moduleRequest, moduleRequest.Specifier, null, SpecifierType.Bare);
  18. }
  19. protected override string LoadModuleContents(Engine engine, ResolvedSpecifier resolved)
  20. {
  21. lock (_fileSystem)
  22. {
  23. var fileName = Path.Combine(_basePath, resolved.Key).Replace('\\', '/');
  24. if (!_fileSystem.FileExists(fileName))
  25. {
  26. Throw.ModuleResolutionException("Module Not Found", resolved.ModuleRequest.Specifier, parent: null, fileName);
  27. }
  28. using var stream = new StreamReader(_fileSystem.OpenFile(fileName, FileMode.Open, FileAccess.Read));
  29. return stream.ReadToEnd();
  30. }
  31. }
  32. }