0.0.1 • Published 2 years ago

superagent-json22 v0.0.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

SuperAgent JSON22 Plugin

SuperAgent plugin providing support to JSON22 data format in your applications.

Features

  • Ready to use SuperAgent plugin
  • Parse JSON22 body content
  • Serialize data to JSON22
  • Can be used with SuperTest
  • Both CJS/ESM modules support

Installation

npm install superagent-json22

Add plugin to a request

import superagent from 'superagent';
import { json22Plugin } from 'superagent-json22';

async function sendData() {
    try {
        return await superagent
            .post('https://example.com/api/data')
            .use(json22Plugin())
            .send(data);
    } catch (e) {
        console.error(e);
    }
}

Old-fashioned javascript imports

const superagent = require('superagent');
const { json22Plugin } = require('superagent-json22');

Options

Both stringify and parse methods of JSON22 accepts options. You may be interested to define such options at global level as well as with isolated client instance.

Json22RequestInterceptor accepts the next options structure

interface Json22SuperagentPluginOptions {
    json22ParseOptions?: Json22ParseOptions;
    json22StringifyOptions?: Json22StringifyOptions;
}

See also Json22ParseOptions and Json22StringifyOptions at JSON22 API description

Define options on each request

import superagent from 'superagent';
import { json22Plugin } from 'superagent-json22';
import { TypedModel } from './models/typed-model.js';

async function sendData() {
    try {
        return await superagent
            .post('https://example.com/api/data')
            .use(json22Plugin({
                json22ParseOptions: { context: { TypedModel } },
            }))
            .send(data);
    } catch (e) {
        console.error(e);
    }
}

Define an agent instance plugin options

import superagent from 'superagent';
import { json22Plugin } from 'superagent-json22';
import { TypedModel } from './models/typed-model.js';

const agent = superagent.agent().use(json22Plugin({
    json22ParseOptions: { context: { TypedModel } },
}));

async function sendData() {
    try {
        return await agent.post('https://example.com/api/data').send(data);
    } catch (e) {
        console.error(e);
    }
}

Using with SuperTest

SuperTest uses SuperAgent under the hood. SuperAgent isn't well isolated by SuperTest, so you can easily use any SuperAgent plugin including superagent-json22. Here is the example.

import supertest from 'supertest';
import { appFactory } from '../lib/app/appFatory.js';
import { TypedModel } from '../lib/models/typed-model.js';

suite('Response tests', () => {

    test('supertest with plugin', (done) => {
        const app = appFactory();
        supertest(app)
            .post('/')
            .use(json22Plugin({ json22ParseOptions: { context: { TypedModel } }}))
            .send(data)
            .expect(200)
            .then(resp => done())
            .catch(done);
    });

});