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 🙏

© 2025 – Pkg Stats / Ryan Hefner

jstyper

v0.5.0

Published

Turns your JavaScript to TypeScript / Flow (adds types, converts requires to imports, etc); *ALPHA QUALITY*

Downloads

42

Readme

jstyper Build Status npm version

Turns your JavaScript to TypeScript / Flow (adds types, converts requires to imports, etc); ALPHA QUALITY

JsTyper adds {TypeScript, Flow, Closure} types to JavaScript programs using iterative type propagation and the TypeScript Language Services.

Run it

  • Interactive online demo
  • npm i -g jstyper then jstyper input.js
    • Noteworthy flags:
      • -o <outputDir> (or --outputDir=<outputDir>): where files should be generated
      • --declarations: only generate interface files (*.d.ts)

Features

  • Assumes your JS code is correct, and propagates inferred types globally (across different files):
    • From call sites: if you call f(1), it will assume function f can take a number argument. If you call f() somewhere else, it will assume that argument is optional.
    • From function bodies: in function f(x) { return x * 2 } it's obvious x must be a number. Similar constraints appear when you test arguments for nullity or for equality with other values, etc.
    • From call shapes: from x.y() * x.n; it infers x: {y(): void, readonly n: number}
  • Rewrites require calls to ES2016 (ES6) imports.
  • Rewrites module.exports to ES2016 (ES6) exports.
  • Supports writing declarations (*.d.ts) files only with the --declarations flag.
  • Writes a summary of imported / required module interfaces in dependencies.d.ts (e.g. if you var foo = require('foo'); foo.bar() it will infer declare module "foo" { export function bar(): void })
  • Rewrites var to let

Example

example.js:

function f(x) {
  return x * 2;
}

function g(x, o) {
  if (o.addValue) {
    return f(x) + o.value;
  }
  return o.name == 'default' ? x : 'y';
}

function gg(x, y) {
  var v = g(x, y);
  return v;
}

example.ts:

function f(x: number): number {
  return x * 2;
}

function g(x: number, o: {addValue: boolean, value: any, name: string}) {
  if (o.addValue) {
    return f(x) + o.value;
  }
  return o.name == 'default' ? x : 'y';
}

function gg(x: number, y: {addValue: boolean, value: any, name: string}) {
  let v = g(x, y);
  return v;
}

TODO

  • Bundle & support DOM & ES2015+ libs
  • Support var foo = require('./bar').foo pattern
  • Support var Foo = function() {}; Foo.prototype.bar = ... (create companion interface Foo { bar... })
  • Parse and output flow comment / flow types (+ compare with Flow)
  • Lint mode
  • Split large tests into smaller specs
  • Better propagate contextual types in expressions (e.g. in (a && b && c, a ? b : c)
  • Use type constraints instead of types to allow local inference passes
  • Support merging of symbols added after structural members {x: number} | Foo
  • Handle index operators
  • Infer x: Promise<T> from (await x): T
  • WebDriver test for demo
  • Support literal types
  • Use const when appropriate in var rewrite.
  • Proper cli args parsing + --help
  • Better new F() class creation inference

Hack it

  • Clone this repo
  • Run npm i
  • Debug the demo npm start (will auto-reload and auto-run tests after any changes made to the TypeScript sources)
  • More options: take a look at package.json's script entries