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

lamool

v0.0.11

Published

Universal AWS Lambda runtime

Downloads

493

Readme

lamool - Universal AWS Lambda runtime

codecov

Features

  • Universal: you can execute lambda function on
    • nodejs (child_process)
    • browser (Web worker)
    • fallback to main thread
  • Offload workloads to AWS Lambda
  • AWS Lambda SDK API compatible

Benefits

  • Reduce time of CPU heavy processing
  • Off the main thread
  • Reduce cost of AWS
  • Reduce network traffic
  • Easy to build multi core applications
  • Easy to adopt introduce to existing applications using AWS Lambda
  • Realize edge/fog computing

Getting Started

Following code works in both Node.js and browser.

const { Lamool, funcToZip } = require('lamool');
const AWS = require('aws-sdk');
const Lambda = require('aws-sdk/clients/lambda');

AWS.config.region = 'us-east-1';
const lambda = new Lamool();
// const lambda = new Lambda({ apiVersion: '2015-03-31' });
/** ↑ Lamool has AWS Lambda compatible API
 * So you can replace AWS Lambda instance to Lamool (and vice versa) without any code changing */

// const lambda = new Lamool(new Lambda({ apiVersion: '2015-03-31' }));
/** ↑ You can pass AWS Lambda instance to Lamool constructor
 * to offload functions to AWS Lambda according to user defined strategy */

(async () => {
  // This is a function according to AWS Lambda signature
  const lambdaFunction = (event, context, cb) => {
    cb(null, `key1: ${event.key1}`);
  };

  const FunctionName = 'MyFunction';
  const createFunctionParams = {
    Code: { ZipFile: await funcToZip(lambdaFunction) }, // Upload lambda function as zip
    FunctionName, // The name of the Lambda function
    Handler: 'index.handler', // The name of the method within your code that Lambda calls to execute your function
    // If you upload function via funcToZip, Handler must be 'index.handler'
    Role: 'arn:aws:iam::000000000000:role/SomeRole', // The Amazon Resource Name (ARN) of the function's execution role.
    Runtime: 'nodejs8.10' // The runtime version for the function
  };

  const invokeParams = {
    FunctionName, // The name of the Lambda function.
    Payload: JSON.stringify({ key1: 'v1' }) // JSON that you want to provide to your Lambda function as input
  };

  // Creates a new Lambda function
  lambda.createFunction(createFunctionParams, (err, data) => {
    if (err) {
      console.error(err);
      return;
    }
    console.log('function creating is succeed:', data);

    // Invokes a Lambda function
    lambda.invoke(invokeParams, (err, data) => {
      if (err) {
        console.error(err);
        return;
      }
      if (!data.Payload) {
        console.error('payload is empty');
      }

      // data.Payload is the JSON representation of the object returned by the Lambda function
      const payload = JSON.parse(data.Payload);

      // Indicates whether an error occurred while executing the Lambda function.
      // If an error occurred this field will have one of two values; Handled or Unhandled
      if (data.FunctionError) {
        console.error(`${data.FunctionError} error type:${payload.errorType} message:${payload.error}`);
      }
      console.log('result:', payload);

      // Lamool has terminate() that is not compatible with AWS Lambda
      // for terminate child processes or web workers
      if (lambda.terminate) {
        lambda.terminate();
      }
    });
  });
})();

You can try the above code by executing the following command.

$ git clone https://github.com/mpppk/lamool
$ cd lamool/examples/node
$ npm install
$ node getting_tarted.js

installation

$ npm install lamool