Skip to content
/ stages Public

A small utility to parse the `Accept` request header into an array of "stages".

License

Notifications You must be signed in to change notification settings

flesch/stages

Repository files navigation

stages

This is a small utility to parse the Accept header into an array of "stages", allowing a client to opt-in to functionality, like GitHub uses in the GraphQL API.

Install

$ npm install --save stages

Usage

stages(acceptHeaderString, regexPattern)

stages accepts two arguments: the Accept header string, and a pattern to match against.

const stages = require('stages');

const accept = '*/*,application/vnd.github.antiope-preview+json,application/vnd.github.echo-preview+json';
const pattern = /application\/vnd\..*\.(.*)\+json/;

console.log(stages(accept, pattern)); // ==> ['antiope-preview', 'echo-preview']

Use stages in an Express app:

  const express = require('express');
+ const stages = require('stages');
  const app = express();
+ app.use((req, res, next) => {
+   req.stages = stages(req.headers.accept, /application\/vnd\..*\.(.*)\+json/);
+   next();
+ });
  app.get('/', (req, res, next) => {
-   return res.send('Hello');
+   if (req.stages.includes('echo-preview')) {
+     return res.send(`The <code>echo-preview</code> stage is enabled!`);
+   }
+   res.send(req.stages.length ? `The stages enabled are: ${req.stages.join(', ')}` : `No stages are enabled!`);
  });
  app.listen(3000);
+ // curl --header "Accept: application/vnd.github.echo-preview+json" http://localhost:3000/