@alt-javascript/boot
v1.0.16
Published
An Extensible Config & Logging Application Bootstrap Function
Downloads
57
Maintainers
Readme
An Extensible Config & Logging Application Bootstrap Function
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