@ood/singleton
v1.1.2
Published
Singleton decorator. No constructor monkeypatching. Zero dependencies. Built with TypeScript.
Downloads
392
Maintainers
Readme
Singleton
Singleton decorator. No constructor monkeypatching. Zero dependencies. Built with TypeScript.
Installation
Run
npm i @ood/singleton
or
yarn add @ood/singleton
(Optional) Enable decorators
If you use TypeScript set in you tsconfig.json
{ "compilerOptions": { "experimentalDecorators": true } }
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`