@alt-javascript/boot

    1.0.16 • Public • Published

    An Extensible Config & Logging Application Bootstrap Function

    NPM
    Language Badge Package Badge
    release notes

    Introduction

    An opinionated application config and logging bootstrap that streamlines the use of the

    The Application class implements a familiar application context and dependency injection (cdi) implementation, supporting simple singleton and prototype component factory definitions, with a choice of manual or auto wiring (injection) of property references and config placeholders.

    The Application class extends the standalone boot function, which binds a global root context with configured LoggerFactory to negate the need for requiring and injecting the application config in every module, and optionally the node-fetch implementation for config pulled from a service url.

    The config, loggerFactory, LoggerCategoryCache are registered as injectable singleton components, and the logger is an injectable prototype. See the @alt-javascript/cdi package for more detail on how the dependency injection works.

    Usage

    The following example bootstraps an Application with an EmphemeraConfig (but could easily be a regular config or alt-javascript/config instance), with a basic config context component definition.

        const ephemeralConfig = new EphemeralConfig(
        {
            context: {
                SimpleClass: {
                    require: './test/service/SimpleClass',
                },
            },
        },
    );
    
    const applicationContext = Application.run({ config: ephemeralConfig });
    
    const simpleClass = applicationContext.get('simpleClass');
    assert.exists(simpleClass, 'simpleClass exists');

    To use the module boot function standalone, substitute the named {config} module export, in place of the popular config default, and boot it – note, we use a named export for config, because the module exports other useful classes as well.

    const {config} = require('@alt-javascript/config');
    const {LoggerFactory} = require('@alt-javascript/logger');
    const {boot} = require('@alt-javascript/boot');
    
    boot({config});
    
    config.get('key');
    config.get('nested.key');
    config.get('unknown','use this instead'); // this does not throw an error
    
    const logger = LoggerFactory.getLogger('@myorg/mypackage/MyModule');
    logger.info('Hello World!')

    To boot and use winston as the logging transport, boot a WinstonLoggerFactory instead.

    MyApp.js

    const {config} = require('@alt-javascript/config');
    const winston = require('winston');
    const {LoggerFactory, WinstonLoggerFactory} = require('@alt-javascript/logger');
    const {boot} = require('@alt-javascript/boot');
    const winstonLoggerFactory = new WinstonLoggerFactory(config,winston,{/*my winston options*/})
    boot({config:config, loggerFactory:winstonLoggerFactory});

    Then in your application modules, you only need.

    MyModule.js

    const {LoggerFactory} = require('@alt-javascript/logger');
    
    // LoggerFactory.getLogger will now bind to the global root context loggerFactory, 
    // configured with booted winstonLoggerFactory from MyApp.js.
    
    const logger = LoggerFactory.getLogger('@myorg/mypackage/MyModule');
    logger.info('Hello from MyModule!')

    MyOtherModule.js

    const {LoggerFactory} = require('@alt-javascript/logger');
    
    // Shared logging config, different file.
    
    const logger = LoggerFactory.getLogger('@myorg/mypackage/MyOtherModule');
    logger.info('Hello from MyOtherModule!')

    License

    May be freely distributed under the MIT license.

    Copyright (c) 2021 Craig Parravicini

    Install

    npm i @alt-javascript/boot

    DownloadsWeekly Downloads

    16

    Version

    1.0.16

    License

    MIT

    Unpacked Size

    13.4 kB

    Total Files

    7

    Last publish

    Collaborators

    • craigparra