1.0.0 • Published 7 years ago
@keenondrums/singleton v1.0.0
singleton
Singleton. No constructor monkeypatching. Zero dependencies. Built with TypeScript.
Installation
- Runnpm i @keenondrums/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 '@keenondrums/singleton'
@singleton
class Test {}
new Test() === new Test() // returns `true`Usage without decorators
import { singleton } from '@keenondrums/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 '@keenondrums/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 '@keenondrums/singleton'
@singleton
class Test {}
const instance = new Test()
Test[SINGLETON_KEY] === instance // returns `true`1.0.0
7 years ago