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

angel-server

v0.0.33

Published

The request / document based Node.js server

Readme

Angel.js (under developement!)

The request / document based Node.js server

Install

npm install angel-server --save

Example

// On the server side:

const Angel = require('angel-server').instance(8083);
//  8083 can be any unique port number for this node instance

Angel.createServer(80, function (request, document) {
    document.html('<a id="hello">Hello word!</a>');
    document.render();
    document.on('ready', () => {
        document.find('#hello').on('click', function () {
            console.log('hello word clicked!');
            this.text('It has been clicked');
        });
    });
});

Available methods:

document.body

document.body(); // returns undefined
document.body('Hello word...');
document.body(); // returns 'Hello word...'

document.head

const head = '<link rel="shortcut icon" href="/favicon.ico" /><title>My Awesome App</title>';

document.head(); // returns '<title></title>'
document.head(head);
document.head(); // returns '<link rel="shortcut icon" href="/favicon.ico" /><title>My Awesome App</title>'

document.title

document.title(); // returns 'My Awesome App'
document.title('You got one message!');
document.title(); // returns 'You got one message!'
document.head(); // returns '<link rel="shortcut icon" href="/favicon.ico" /><title>You got one message!</title>'

document.url

document.url(); // returns '/'
document.url('/redirect'); // redirect client to /redirect url
document.url(); // returns '/redirect'

document.html

document.html('<html><head><title>Hello!</title></head><body>Hello word...</body></html>'); // overrides all
document.html(); // returns '<html><head><title>Hello!</title></head><body>Hello word...</body></html>'
document.title('See me!');
document.html(); // returns '<html><head><title>See me!</title></head><body>Hello word...</body></html>'

document.on('ready', fn)

document.on('ready', function(){
    console.log('Client side has been rendered!');
});

document.execute

function ga_push(value) {
    document.execute(`ga.push('${value}')`); // execute script after document ready.
}

document.execute('new Date()').then(function(clientTime){
    console.log(clientTime);
});

DOM elements

document.find(selector)

This will return a dom element

element.on

Attach an event handler function for one or more events to the selected elements.

element.html

Get the HTML contents of the first element in the set of matched elements or set the HTML contents of every matched element.

element.text

Get the combined text contents of each element in the set of matched elements, including their descendants, or set the text contents of the matched elements.

element.val

Get the current value of the first element in the set of matched elements or set the value of every matched element.

element.attr

Get the value of an attribute for the first element in the set of matched elements or set one or more attributes for every matched element.

element.data

Store arbitrary data associated with the matched elements or return the value at the named data store for the first element in the set of matched elements.

element.hasClass

Determine whether any of the matched elements are assigned the given class.

element.addClass

Adds the specified class(es) to each element in the set of matched elements.

element.removeClass

Remove a single class, multiple classes, or all classes from each element in the set of matched elements.

element.toggleClass

Add or remove one or more classes from each element in the set of matched elements, depending on either the class’s presence or the value of the state argument.

element.parent

Get the parent of each element in the current set of matched elements, optionally filtered by a selector.

element.parents

Get the ancestors of each element in the current set of matched elements, optionally filtered by a selector.

element.each

Iterate over elements, executing a function for each matched element.

element.file

element.formData