Giter Club home page Giter Club logo

Comments (3)

iamstolis avatar iamstolis commented on June 16, 2024

It would be nice to provide a simple test-case that reproduces this problem. I tried the following code:

FileSystem fs = new FileSystem() {
    @Override
    public Path parsePath(URI uri) {
        throw new UnsupportedOperationException("Not supported: parsePath(URI)");
    }

    @Override
    public Path parsePath(String path) {
        return Path.of(path);
    }

    @Override
    public void checkAccess(Path path, Set<? extends AccessMode> modes, LinkOption... linkOptions) throws IOException {
    }

    @Override
    public void createDirectory(Path dir, FileAttribute<?>... attrs) throws IOException {
        throw new UnsupportedOperationException("Not supported: createDirectory");
    }

    @Override
    public void delete(Path path) throws IOException {
        throw new UnsupportedOperationException("Not supported: delete");
    }

    @Override
    public SeekableByteChannel newByteChannel(Path path, Set<? extends OpenOption> options, FileAttribute<?>... attrs) throws IOException {
        throw new IOException("Script not found: " + path);
    }

    @Override
    public DirectoryStream<Path> newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) throws IOException {
        throw new UnsupportedOperationException("Not supported: newDirectoryStream");
    }

    @Override
    public Path toAbsolutePath(Path path) {
        return path;
    }

    @Override
    public Path toRealPath(Path path, LinkOption... linkOptions) throws IOException {
        return path;
    }

    @Override
    public Map<String, Object> readAttributes(Path path, String attributes, LinkOption... options) throws IOException {
        throw new UnsupportedOperationException("Not supported: readAttributes");
    }
};
IOAccess ioAccess = IOAccess.newBuilder().fileSystem(fs).build();
try (Context context = Context.newBuilder("js").allowIO(ioAccess).build()) {
    String scriptCode = "import 'NonExistingRepoId';";
    context.eval(Source.newBuilder("js", scriptCode, "myModule.mjs").build());
}

and I am getting

Exception in thread "main" Error: Script not found: NonExistingRepoId
	at org.graalvm.polyglot.Context.eval(Context.java:402)

In other words, an exception is thrown as expected/requested.

I have noticed that you edited your report and that the initial version of the source code contained import('NonExistingRepoId'); instead of import 'NonExistingRepoId';. This is a significant difference. No exception is expected in the former case. import(...) is a dynamic import that returns a promise. When something goes wrong then the promise is rejected. You should add catch handler to be notified about the rejection:

import('NonExistingRepoId').catch(e => console.log(e));

Alternatively, you can set js.unhandled-rejections context option to a different value than none (i.e. to throw or warn) to be notified about rejections that are missing catch handler.

from graaljs.

bvollmerOT avatar bvollmerOT commented on June 16, 2024

@iamstolis
Your observation is correct. I first thought it is only happening with dynamic imports. Later I realized that I didn't really test it with a 'side effect' import or named import. I did another test with a static import and was still able to see the issue, that's why I edited the issue afterwards.

If you say you couldn't reproduce it, I will check it once more.

from graaljs.

bvollmerOT avatar bvollmerOT commented on June 16, 2024

Conclusion: Static imports are behaving as expected and for dynamic imports, the last paragraph of @iamstolis comment about unhandled rejections was what I was searching for.

from graaljs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.