npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

trireme-support

v1.0.0

Published

Internal functions that are only available on the Trireme runtime

Downloads

7

Readme

trireme-support

This is a module for use with the "trireme" runtime for Node.js. Trireme is a project that allows Node.js applications to be embedded inside a Java Virtual Machine with no native code.

For more on Trireme, see it on NPM and GitHub.

Although this module can be loaded in any Node.js app, it only makes sense for apps that run inside the Java Virtual Machine using Trireme. If your app does not use Trireme, then there's nothing to see here.

Features of this module

This module lets Node.js applications take advantage of features specific to Trireme. Currently there is only one feature supported -- loading Node.js modules built in Java.

Checking if Trireme is in use

In order to make it possible to make this module inside any Node app, the module itself does not actually use any Trireme-specific features unless it is actually running there.

To check if the module is running on Trireme, call "isTrireme()":

var trireme = require('trireme-support');
if (trireme.isTrireme()) {
  console.log('We are running on Trireme.');
}

JAR file loading

Trireme implements various interfaces that allow a Node.js module to be built in Java. The following samples in GitHub show the easiest way to build such a module:

https://github.com/apigee/trireme/tree/master/samples

The actual loading is handled by a function called "loadJars". For a parameter, it takes an array of file names. Each file name must be a name of an actual JAR file that is readable by the Trireme script, as any other Node.js file would be readable.

For instance, if the script is run in a directory called "lib", which has a sibling directory called "jars", and the script needed to load two JAR files, it would be invoked like this:

var path = require('path');
var trireme = require('trireme-support');
trireme.loadJars([path.join(__dirname, '../lib/jarA.jar'),
                  path.join(__dirname, '../lib/jarB.jar')]);

When "loadJars" is called, it will do the following:

  1. Check to see if all the JAR files are readable, and throw an exception otherwise.
  2. Create a classloader that contains all the specified JARs.
  3. Using the classloader from the previous step, look for classes that implement the "NodeModule" and "NodeScriptModule" interfaces, and make those modules available to the current script.

(Step 3 is implemented using the "java.util.ServiceLoader" package, so classes that implement NodeModule must also be listed in a file in META-INF/services. The sample JAR files in the Trireme samples repo show how to do this.)

Once step 3 is complete, any Java modules found in the JAR may be loaded using "require."