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

@player1os/javascript-support

v1.3.14

Published

A set of common utilities and scripts to be used in the development of projects written in Javascript

Readme

Javascript Support

License NodeJS version GitHub tag Build Status Greenkeeper badge

A set of common utilities and scripts to be used in the development of projects written in Javascript.

Assets

This project provides the following development assets:

Eslint configuration

.eslintrc.json - a common linter configuration file for eslint.

Output formatting

lib/common/format.js - a module that exports functions for outputting standardized messages:

  • success(taskName: string) - notifies of the success of a task with the given name.
  • failure(taskName: string) - notifies of the failure of a task with the given name.
  • notify(taskName: string, message: string) - outputs a custom message for the a task with the given name.

Async spawn child process

lib/common/spawn_child_process.js - a promise wrapper of the standard Node.js library for spawning a process.

The implementation is designed similarly to childProcess.spawnSync in that it does not allow any interaction with the spawned process until it has exited. The difference is that since this is an asynchronous implementation, the process does not block.

The implementation forces the process to be spawned in a separate shell (which is slower, but simplifies cross-platform usage).

The module exports functions, with the following identical parameters:

  • taskName: string - the name of the task that triggered the function, this is only used if the process fails and result verification is not suppressed.
  • command: string - the command to be executed.
  • processArguments: string[] - the arguments for the command to be executed.
  • isResultVerificationSuppressed: boolean? - an optional flag that determines whether the result of the command is to be validated internally. If set to false, the functions check whether the spawned process returned with a non-zero status code. If the validation fails, an error is outputted and the current process is halted with a non-zero status code. The default value of this parameter is false.

The functions both return an object containing the status code and kill signal as well as any buffered stdout or stderr streams.

The exported functions differ as follows:

  • inherited() - the spawned process's IO streams are forwarded to the current process.
  • piped() - the spawned process's IO streams are buffered and transformed to utf-8 strings, contained in the return object.

The following is a usage example of the piped variant:

const { spawnChildProcess } = require('@player1os/javascript-support')

;async () => {
	const result = await spawnChildProcess.piped('SCRIPT', 'echo', ['"Hello World!"'])

	console.log(result.stdout) // outputs: Hello World!
}()

Preversion task script

lib/task/preversion.js - a script that is executed before the project's version is to be updated:

  1. Ensures the newest version of the master branch is checked out, by running:

    git checkout master
    git pull
  2. Ensures all the dependencies are installed, by running:

    npm i
  3. Executes the test script, if it is defined, by running:

    npm test

Postversion task script

lib/task/postversion.js - a script that is executed after the project's version has been updated:

  1. Pushes any new commits and tags to the origin remote repository, by running:

    git push
    git push --tags
  2. Determines whether the current project is an npm package, by checking the contents of the .npmignore and package-json files.

  3. If the current project is an npm package it is published to npm, by running:

    npm publish

    Alternatively, if the project is publicly accessible and is being published for the first time, by running:

    npm publish --access=public
  4. If the current project isn't an npm package but a publish script is defined in the package.json file, then this script is executed, by running:

    npm run publish

Update base create task script

lib/task/update_base/create.js - a script that creates a rebased tree of the git repository of a project derived from a template project, when the template is modified:

  1. We assume all tags are located on the path between the master branch and the repository's root. Thus we'll need to reapply these tags to newly created commits, after the rebase is finished. For each tag, store a mapping from the tag's commit message to the tag's name.

  2. Fetch the base remote repository's branches, by running:

    git fetch base
  3. Make sure we're in the project's master branch, by running:

    git checkout master
  4. Rebase the project's master branch to the base remote repository's master branch, by running:

    git rebase base/master

    The rebase may require some manual intervention. In this case the script will spawn a new nested shell instance. We are instructed to close this instance once the rebase is complete.

  5. For each commit on the path from the newly rebased master commit to the repository's root, we check if its message can be found in the mapping previously stored at the first step. If a match is found, the tag is moved to the new commit, by running:

    git tag -af TAG_NAME NEW_COMMIT_HASH
  6. Ensures any new dependencies are installed, by running:

    npm i
  7. Execute garbage collection upon the repository, by running:

    git gc
  8. Propagate the changes to the origin remote repository, by running:

    git push -f
    git push --tags -f

Update base load task script

lib/task/update_base/load.js - a script that loads the rebased tree of the git repository from the origin remote repository:

  1. Fetch the origin remote repository's branches, by running:

    git fetch
  2. Fetch the base remote repository's branches, by running:

    git fetch base
  3. Make sure we are in the project's master branch, by running:

    git checkout master
  4. Make a hard reset of the master branch to where the origin remote repository's master branch is located, by running:

    git reset --hard origin/master
  5. Overwrite the local repository's tags with those found in the origin remote repository, by running:

    git fetch --tags -p
  6. Ensures any new dependencies are installed, by running:

    npm i
  7. Execute garbage collection upon the repository, by running:

    git gc

Tests

This project contains an npm test script that is triggered in the aforementioned. The script itself does the following:

  1. Execute the eslint linter, by running:

    eslint .
  2. If the current project is found to contain tests, execute the jest test runner, by running:

    jest