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

jspicl

v2.6.0

Published

A javascript to pico-8 lua converter

Downloads

59

Readme

jspicl

jspicl is a Javascript to PICO-8 Lua transpiler. It creates an AST out of the JavaScript code and then transpiles it down to the LUA subset of which PICO-8 supports.

npm version library size npm downloads

CLI

Consider using jspicl-cli instead to simplify your project setup. It includes several additional features such as watch mode (reloading your game when code changes), using PNGs as your game's spritesheet etc.

Installation

npm install jspicl --save

Usage

import jspicl from "jspicl";

const javascriptCode = `...`;
const { output, polyfills } = jspicl(javascriptCode);
console.log(
  Object.values(polyfills).join("\n"),
  output
);

By default, jspicl formats the LUA output for you but if performance ever becomes an issue you can turn this off through the options argument.

const { output, polyfills } = jspicl(javascriptCode, { prettify: false });

Options

Return value

| Property | Type | Description | |----------------|--------|---------------------------------| | output | string | The transpiled javascript code | | polyfills | object | Table of required polyfills with their corresponding lua code. |

Customized transpilation

jspicl does not support all expressions or statements out of the box but it is extensible enough to allow for these to be added. It also allows existing ones to be replaced if the implementation is considered unsatisfactory. This is done by supplying a customMappers option. The only requirement imposed on the AST node is that it contains a string property called type since this is used to identify the appropriate declaration, expression or statement.

const customMappers = {
  // Replace the default while-statement implementation
  WhileStatement: ({ body, test }, { transpile }) =>
    `while ${transpile(test)} do
      -- We have full control of the output!
      ${transpile(body)}
    end`,

  // Add support for missing features
  ForOfStatement: ({ left, right, body }) => {
    // https://esprima.readthedocs.io/en/latest/syntax-tree-format.html#for-of-statement
  },

  // Custom statements, declarations and expressions are also valid
  // as long as they are included in the AST
  SuperDuperComment: () =>
    `-- You're doing great!`

  // ...
};

const { output } = jspicl(javascriptCode, { customMappers });

Known limitations

||| |-|-| | ES2015+ | Not all ES2015+ features are supported. Run your code through a transpiler first such as bublé or babel. | | prototype chains | Not supported| | Array methods | Not all prototype methods have been polyfilled yet. | | Math.max | Only supports two arguments. | | AST | Not all declarations, expressions and statements have been implemented. More will be added as needed. |

Versioning

This project uses semantic versioning

Related projects

jspicl CLI - Command line interface for jspicl

games - Games created with jspicl