via pnpm, yarn or npm:
pnpm add @m9ch/make-class-singleton
# or
yarn add @m9ch/make-class-singleton
# or
npm i -S @m9ch/make-class-singletonimport { Singleton as makeSingleton } from '@m9ch/make-class-singleton'
class Foo {}
const Singleton = makeSingleton(Foo)
const foo = new Singleton()
const bar = new Singleton()
console.log(foo === bar) // trueNote
If using TypeScript, you might need to enable compilerOptions.experimentalDecorators in tsconfig.json or something like that.
Here is an example:
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"modeResolution": "node",
"experimentalDecorators": true
}
}import { Singleton } from '@m9ch/make-class-singleton'
@Singleton
class Foo {}
const foo = new Foo()
const bar = new Foo()
console.log(foo === bar) // truecontainer: Where singleton instance should create and stored, default is aWeakMapobject in this module.
Note
It might be unsafe if using default instance container in multi-thread environment, such as nodejs in swarm mode, or WebWorker.
By passing a thread shared WeakMap object may save (not verified).
MIT © Mitscherlich