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

jsat

v0.0.6

Published

An annotation-based javascript transformer

Downloads

5

Readme

node-jsat Build Status Coverage Status

JavaScript Annotation Transforms, or, js-@

Installation

npm install --save-dev jsat

Purpose

Empower your JSDoc annotations by transforming your JavaScript to actually enforce them.

Say you maintain a package on npm with a well documented API. You have an API method that you'd like to deprecate, so you annotate it in your JSDoc block.

/**
 * Add two numbers
 * @deprecated addTwoNumbers() will be removed in v2.0.0; please use add()
 */
exports.addTwoNumbers(firstNumber, secondNumber) {
    return firstNumber + secondNumber;
};

Awesome. Your documentation clear. But what if you wanted to actually make sure your users were aware of the upcoming breaking change? You could add a message in the function.

/**
 * Add two numbers
 * @deprecated addTwoNumbers() will be removed in v2.0.0; please use add()
 */
exports.addTwoNumbers(firstNumber, secondNumber) {
    console.warn('addTwoNumbers() will be removed in v2.0.0; please use add()');
    return firstNumber + secondNumber;
};

Better, but awfully repetitive. jsat solves this problem by reading your source code's JSDoc comment blocks and automatically adding helpful logic that assists in enforcing supported annotations.

Usage

var jsat = require('jsat');
var fs = require('fs');
var source = fs.readFileSync('path/to/sourcefile.js', 'utf8');
var output = jsat.transform(source);
fs.writeFileSync('path/to/outputfile.js', output);

Calling jsat.transform on the string containing your source code will do the following:

  1. Parse source code into an abstract syntax tree (AST) using recast
  2. Traverse the AST, looking for nodes containing supported annotations in their comment blocks
  3. Transform annotated nodes using the included transformer template defined by each annotation type
  4. Print the AST back to a string and return it

API

For documentation on jsat's API, please read the API Reference.

Examples

You can find example source and output files for these annotations in the examples directory.

Custom Annotations

In future releases, I hope to provide a robust API allowing developers to create their own custom annotation types and extract oft-repeated code snippets or control structures into jsat transformer templates.

Build Plugins

I will also be working on plugins to allow injecting jsat into existing build tools, such as grunt and gulp.