@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

Package Sidebar

Install

npm i @alt-javascript/boot

Weekly Downloads

0

Version

1.0.16

License

MIT

Unpacked Size

13.4 kB

Total Files

7

Last publish

Collaborators

  • craigparra