Socket
Book a DemoInstallSign in
Socket

double-dispatch

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

double-dispatch

Double dispatch javascript builder

0.1.0
latest
Source
npmnpm
Version published
Weekly downloads
6
500%
Maintainers
1
Weekly downloads
 
Created
Source

double-dispatch

A double dispatch builder for Javascript. Simply use the default exported method, like this:

Examples are of multiple dispatch, you can however easily create double dispatch as well.

Example of basic use (from unit tests)


const Ext = doubleDispatch(Basic)
    .push([
        [String],
        value => `this is string: ${value}`,
    ]).push([
        [Number],
        value => `this is number: ${value.toString()}`,
    ]).resolve();
expect(new Ext().dispatch(0)).toBe('this is number: 0');
expect(new Ext().dispatch('Hello')).toBe('this is string: Hello');

Example of bound 'this' context


const Ext = doubleDispatch(Basic)
    .push([
        [String],
        function(a) {
            return `Count: ${this.count()}, string: ${a}`;
        },
    ])
    .push([
        [Number],
        function(a) {
            return `Count: ${this.count()}, number: ${a}`;
        },
    ]).resolve();
expect(new Ext().dispatch('1')).toBe('Count: 10, string: 1');
expect(new Ext().dispatch(1)).toBe('Count: 10, number: 1');

Example of binding concrete classes


class Basic {
    count = () => 10;
}

class Basic1 extends Basic {
    count1 = () => 11;
}

class Basic2 extends Basic {
    count2 = () => 12;
}

describe("Can apply double-dispatch to class structures", () => {
    test("Apply double dispatch to class structure", () => {
        const Ext = doubleDispatch(Basic)
            .push([
                [Basic1],
                value => value.count1() + value.count(),
            ]).push([
                [Basic2],
                value => value.count2() + value.count(),
            ]).push([
                [Basic],
                value => value.count(),
            ]).resolve();
        let basic: Basic = new Basic1();
        expect(new Ext().dispatch(basic)).toBe(21);
        basic = new Basic2();
        expect(new Ext().dispatch(basic)).toBe(22);
        basic = new Basic();
        expect(new Ext().dispatch(basic)).toBe(10);
    });
});

Example of specialized syntax for matching arrays of items (so far, only one-typed arrays are supported)


const Ext = doubleDispatch(Basic)
    .push([
        [[String]],
        value => value.length / 2,
    ]).push([
        [[Number]],
        value => value.length,
    ]).push([
        [Array],
        () => 'is an array',
    ]).resolve();
expect(new Ext().dispatch([0, 1, 2])).toBe(3);
expect(new Ext().dispatch(['Hello', 'James'])).toBe(1);
expect(new Ext().dispatch([])).toBe('is an array');

For more examples, you can checkout the unit tests in my repo :) .

If you have any ideas about improving this package, please fill an issue or create a pull request.

Keywords

double

FAQs

Package last updated on 18 Sep 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

About

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.

  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc

U.S. Patent No. 12,346,443 & 12,314,394. Other pending.