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

nockingbird

v0.2.0

Published

Declarative HTTP mocking (for use with Nock)

Downloads

12

Readme

Nockingbird

Nockingbird is an interface for Nock. With Nockingbird, mocks are specified in straightforward text files, rather than in JavaScript code.

Example from the Nock documentation:

var scope = nock('http://myapp.iriscouch.com')
                .get('/users/1')
                .reply(404)
                .post('/users', {
                  username: 'pgte',
                  email: '[email protected]'
                })
                .reply(201, {
                  ok: true,
                  id: '123ABC',
                  rev: '946B7D1C'
                })
                .get('/users/123ABC')
                .reply(200, {
                  _id: '123ABC',
                  _rev: '946B7D1C',
                  username: 'pgte',
                  email: '[email protected]'
                });

The equivalent Nockingbird file is as follows:

-- chaining-example.nb

>> GET /users/1
<< 404

>> POST /users
>>   username=pgte
>>   email=pedro.teixeira%40gmail.com
<< 201
<< content-type: application/json
<< ={"ok":true,"id":"123ABC","rev":"946B7D1C"}

>> GET /users/123ABC
<< 200
<< content-type: application/json
<< ={"_id":"123ABC","_rev":"946B7D1C","username":"pgte","email":"[email protected]"}

nockingbird.load can be used to apply the declarations in a Nockingbird file to a Nock scope object:

var nock = require('nock');
var nockingbird = require('nockingbird');

var scope = nock('http://myapp.iriscouch.com');
nockingbird.load(scope, __dirname + '/mocks/chaining-example.nb');

File format

Nockingbird files consist of zero or more "chunks". A file's text is broken into chunks according to the delimiter \n\n. Each line within a chunk must begin with >>, <<, or --. >> is for requests; << is for responses. Lines beginning with -- are ignored. For example:

-- Retrieve John's account details from the /users endpoint.
>> GET /users/1
<< 200
<< content-type: application/json
<< ={"id":"1","username":"jsmith","email":"[email protected]"}

The extension for the Nockingbird file format is .nb.

Chunks

Each chunk must conform to the following grammar:

chunk               = request lines , response lines ;

Request lines

Each chunk must contain one or more request lines (lines beginning with >>), in accordance with the following grammar:

request lines       = main request line , { request body } ;
main request line   = request prefix , method name , pathname , "\n" ;
method name         = "GET" | "POST" | "PUT" | "HEAD" | "PATCH" | "MERGE" | "DELETE" ;
pathname            = { any character } ;
request body        = inline body ;
inline body         = inline body line , { inline body line } ;
inline body line    = request prefix , "=" , { any character } , "\n" ;
request prefix      = ">>" , { " " } ;
any character       = ? any character except "\n" ? ;

Response lines

Each chunk must contain two or more response lines (lines beginning with <<), in accordance with the following grammar:

response lines      = status code line , { header line } , response body ;
status code line    = response prefix , status code , "\n" ;
status code         = digit , { digit } ;
digit               = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;
header line         = response prefix , header name , ":" , { " " } , header value , "\n" ;
header name         = { any character } ;
header value        = { any character } ;
response body       = inline body | filename line ;
inline body         = inline body line , { inline body line } ;
inline body line    = response prefix , "=" , { any character } , "\n" ;
filename line       = response prefix , { any character } , "\n" ;
response prefix     = "<<" , { " " } ;
any character       = ? any character except "\n" ? ;