1.1.2 • Published 3 years ago

@ood/singleton v1.1.2

Weekly downloads
128
License
MIT
Repository
github
Last release
3 years ago

Singleton

Singleton decorator. No constructor monkeypatching. Zero dependencies. Built with TypeScript.

Installation

  1. Run

    npm i @ood/singleton

    or

    yarn add @ood/singleton
  2. (Optional) Enable decorators

    1. If you use TypeScript set in you tsconfig.json

      {
        "compilerOptions": {
          "experimentalDecorators": true
        }
      }
    2. If you use JavaScript configure your babel to support decorators and class properties

Quick start

import { singleton } from "@ood/singleton" 

@singleton
class Test {}

new Test() === new Test() // returns `true`

Usage without decorators

import { singleton } from "@ood/singleton"

class Test {}
const TestSingleton = singleton(Test)

new TestSingleton() === new TestSingleton() // returns `true`

Inheritance

Any child of your singleton will not be a singleton.

import { singleton } from "@ood/singleton"

@singleton
class Parent {}

class Child extends Parent {}

new Child() === new Child() // returns `false`

// If you want to make `Child` a singleton as well, apply `singleton` decorator directly to it
@singleton
class ChildSingleton extends Parent {}

new ChildSingleton() === new ChildSingleton() // returns `true`

In depth

singleton decorator wraps your class with a Proxy and a construct trap to override class' creation logic.

Your singleton instance is always available as a static property of a class by key SINGLETON_KEY.

import { singleton, SINGLETON_KEY } from "@ood/singleton"

@singleton
class Test {}

const instance = new Test()
Test[SINGLETON_KEY] === instance // returns `true`