Skip to content
This repository has been archived by the owner on Oct 9, 2023. It is now read-only.

airbnb/hypernova-node

Repository files navigation

❗ Deprecation Notice
We want to express our sincere gratitude for your support and contributions to the Hypernova open source project. As we are no longer using this technology internally, we have come to the decision to archive the Hypernova repositories. While we won't be providing further updates or support, the existing code and resources will remain accessible for your reference. We encourage anyone interested to fork the repository and continue the project's legacy independently. Thank you for being a part of this journey and for your patience and understanding.

hypernova-client

A node client for sending requests to Hypernova.

class Renderer

Renderer.prototype.addPlugin

(plugin: HypernovaPlugin)

Adds a plugin to the renderer.

Renderer.prototype.render

(data: Jobs): Promise

Sends a request to Hypernova for the provided payload and returns a promise which will fulfill with the HTML string you can pass down to the client.

Example usage

const express = require('express');
const Renderer = require('hypernova-client');
const devModePlugin = require('../plugins/devModePlugin');

const app = express();

const renderer = new Renderer({
  url: 'http://localhost:3030/batch',
  plugins: [
    devModePlugin,
  ],
});

app.get('/', (req, res) => {
  const jobs = {
    MyComponent: { name: req.query.name || 'Stranger' },
    Component2: { text: 'Hello World' },
  };

  renderer.render(jobs).then(html => res.send(html));
});

app.listen(8080, () => console.log('Now listening'));

Plugin Lifecycle API

function getViewData(viewName: string, data: any): any {}

Allows you to alter the data that a "view" will receive.

type Job = { name: string, data: any };
type Jobs = { [string]: Job };
function prepareRequest(currentJobs: Jobs, originalJobs: Jobs): Jobs {}

A reducer type function that is called when preparing the request that will be sent to Hypernova. This function receives the current running jobs Object and the original jobs Object.

function shouldSendRequest(jobs: Jobs): boolean {}

An every type function. If one returns false then the request is canceled.

function willSendRequest(jobs: Jobs): void {}

An event type function that is called prior to a request being sent.

type Job = { name: string, data: any };
type Response = {
  [string]: {
    error: ?Error,
    html: string,
    job: Job,
  },
};
function afterResponse(currentResponse: any, originalResponse: Response): any {}

A reducer type function which receives the current response and the original response from the Hypernova service.

type Job = { name: string, data: any };
type Jobs = { [string]: Job };
function onSuccess(jobs: Jobs): void {}

An event type function that is called whenever a request was successful.

type Job = { name: string, data: any };
type Jobs = { [string]: Job };
function onError(err: Error, jobs: Jobs): void {}

An event type function that is called whenever any error is encountered.