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 🙏

© 2026 – Pkg Stats / Ryan Hefner

extendx

v0.3.12

Published

Extend is the tool to bring your the syntax you want to the language of your choice.

Readme

Extend

Extend is the tool to bring your the syntax you want to the language of your choice.

Installation

To get started you need to install Extend using

npm install -g extendx

Please note we are going to use the name extendx for the cli for now.

Syntax highlighting is under development and is partially supported on vscode, to start using it launch the command palette using CTRL+P and enter the command

ext install fabiospampinato.vscode-highlight

this will install the extension here, note this is going to write to .vscode/settings.json of your wokrspace, so you might want to backup this file.

Usage

To create your first project use the command

extendx --start

which is going to create a basic project for you to start with.

The first thing that you are going to need is the _extend.js file inside your root directory, this is where your rules live and is just a normal javascript with a few exports, one of which is rules, more about that in a second.

The compiler will then look for code inside your src folder, only files with extensions .xt or .xt.js will be processed. in this stage of development, the compiler will require a character or more to indicate blocks of code that will require compiling.

in this example we used the mustache syntax, but it's up to you to choose any syntax you like, you might want to use multiline string / comment syntax of your programming language to avoid your code being highlighted as an error by your IDE.

eg:  var salaries = {{ [employee.salary for employee in employees] }}

Once done, the compiler will write the processed version of your code to dist folder.

Working with rules

Each rule is a js Object consisting of two parts: template and output. template is what the compiler is going to looking for, it describes what your rule looks like. let's take python slicing for example:

{array} #[{start}:{end}#]

Here we have declared three variables array, start and end, using the syntax {variableName}, as you can see we have escaped the squared brackets, otherwise, the compiler would treat variable differently, specifically as an array, but let's not worry about that now.

To start using these variables, you will need the second part of the rule, the output.

function ({ array, start, end }) {
  return `${array}.slice(${start}, ${end})`
}

The output is a normal javascript function that receives an object containing all variables that the compiler found, it can be a good idea to use destructuring here.

The return of this function is what the compiler is going write to your code. if for any reason you think that something went wrong and you don't want to process this code, eg: variable is undefined, or it's conflicting with a different rule, you need to return false.

One last thing you need to know is the escape character is the # sign, which you have already seen.

Feel free to try it live on http://extend.netlify.com/ (might be out of date).

Deprecated

Arrays

An array is a special type of variable that matches repetitive syntax.

here is an example for a rule that extracts html attributes using one.

rule.template = '<{elementName} {attributesArray}["{attrName}"="{value}"] />'

_extend.js file

_extend.js is a file that lives in your projects root directory and has 3 exports: rules, settings for the compiler, as well as types.

Settings

The default settings are as follows, note that codeOpening and codeClosing are for your source code files and are used to highlight code that needs to be processed, you can use whatever you want, or you can use the string / comment syntax of your programming language as mentioned above, note that you want to use two different strings for opening and closing.

variableOpening, variableClosing, arrayOpening, and arrayClosing all apply to your templates, inside your _extend.js file.

module.exports.settings = {
  srcFolder: 'src',
  distFolder: 'dist',
  codeOpening: '`{{',
  codeClosing: '}}`',
  variableOpening: '{',
  variableClosing: '}',
  arrayOpening: '[',
  arrayClosing: ']',
  escapeCharacter: '#',
  vscodeHighlighting: true
}

Types

Types is a object that serves as a way for you to control what each of your variables should like. each type will have a name which is going to be used inside your _extend.js file, the value can either be a Regex or a js function which receives the variable, and returns true if the variable fits the requirements.

[experimental]: You can return a string from the type function which is going to replace the existing variable. you also receive both the variables block, containing all found variables in this rule, as well as current variable name as the second and third argument, feel free to play around with those.

var startsWithA = variable => variable[0].toLowerCase() === 'a'
var startsWithB = variable => variable[0].toLowerCase() === 'b'
module.exports.types = {
  int: /^\d+$/,
  float: /^\d+\.\d+$/,
  // matches any thing (useless)
  any: v => true,
  // matches nothing (useless)
  none: v => false,
  // turns all variables into AAAAA (also useless)
  AAAAA: v => 'AAAAA',
  // 'and' + 'or' functions are both included in the starting project
  startsWithAorB: or(startsWithA, startsWithB)
}

to use the type you declare your variables as: {startsWithAorB MyVariable}, which will only accept variables that match this filter.

What's new

0.3

Syntax highlighting on VSCode is here! (kind of)

0.2

Added variable types using regex or js functions.

0.1.0

Added array support.

Added rules settings.