package jj.script.module; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import java.io.IOException; import java.nio.file.Path; import javax.inject.Inject; import javax.inject.Provider; import org.mozilla.javascript.Script; import jj.http.server.LoadedResource; import jj.http.server.ServableResourceConfiguration; import jj.resource.AbstractFileResource; import jj.script.RhinoContext; @ServableResourceConfiguration(routeContributor = ScriptResourceRouteContributor.class) public class ScriptResource extends AbstractFileResource<Void> implements LoadedResource { private final String source; private final Script script; @Inject ScriptResource( final Dependencies dependencies, final Path path, final Provider<RhinoContext> contextProvider ) throws IOException { super(dependencies, path); source = byteBuffer.toString(settings.charset()); try (RhinoContext context = contextProvider.get()) { script = context.compileString(source, name()); } } public Script script() { return script; } public String source() { return source; } @Override public ByteBuf bytes() { return Unpooled.wrappedBuffer(byteBuffer); } @Override public String contentType() { return settings.contentType(); } @Override public boolean compressible() { return settings.compressible(); } }