Nukem's Possible Manifestation

    @offirmo/tiny-singleton
    TypeScript icon, indicating that this package has built-in type declarations

    0.0.4 • Public • Published

    Tiny singleton
    Offirmo’s quality seal

    npm badge dependencies badge bundle size badge license badge maintenance status badge

    This is a trivial, isomorphic, straightforward, TypeScript-compatible singleton implementation:

    • NO dependencies
    • lazily created on 1st use, as expected

    Usage

    Be sure to review your options before using the singleton pattern. While there are legitimate usages, it can also be a code smell close to a global variable.

    // "@offirmo/tiny-singleton": "^0",
    import tiny_singleton from '@offirmo/tiny-singleton'
    
    // example: a DB client is a correct case where the singleton pattern can be useful
    function create_db_client(ip: string, logger: Console = console): DBClient {
    	return ...
    }
    
    // example 1: best semantic
    const get_db_client = tiny_singleton(() => create_db_client('127.0.0.1'))
    get_db_client().read(1234).then(...)
    
    // example 2: with params (not recommended as the params will only affect the 1st call, but sometimes convenient)
    const get_db_client = tiny_singleton(create_db_client)
    // alternative (not better, just an alternative example)
    const get_db_client = tiny_singleton((options?: CreationOptions) => create_db_client(options.ip || '127.0.0.1'))
    get_db_client('127.0.0.1')
    get_db_client('1.2.3.4') // XXX This will return the same as above!! No new instance creation.
    get_db_client().write('hello').then(...)

    Install

    npm i @offirmo/tiny-singleton

    DownloadsWeekly Downloads

    5

    Version

    0.0.4

    License

    Unlicense

    Unpacked Size

    14.8 kB

    Total Files

    17

    Last publish

    Collaborators

    • offirmo