Skip to content

Commit 572f5e4

Browse files
author
craig
committed
1.0.8 / 2021-08-02
================== * Added Boot class, root and test functions - @craigparra
1 parent eca7e14 commit 572f5e4

File tree

5 files changed

+181
-123
lines changed

5 files changed

+181
-123
lines changed

Boot.js

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
const { ValueResolvingConfig, EphemeralConfig, ConfigFactory } = require('@alt-javascript/config');
2+
const {
3+
CachingLoggerFactory, LoggerCategoryCache, LoggerFactory, ConfigurableLogger,
4+
} = require('@alt-javascript/logger');
5+
6+
module.exports = class Boot {
7+
static getGlobalRef() {
8+
let $globalref = null;
9+
if (Boot.detectBrowser()) {
10+
$globalref = window;
11+
} else {
12+
$globalref = global;
13+
}
14+
return $globalref;
15+
}
16+
17+
static getGlobalRoot(key) {
18+
const $globalref = Boot.getGlobalRef();
19+
let $key = ($globalref && $globalref.boot);
20+
$key = $key && $key.contexts;
21+
$key = $key && $key.root;
22+
$key = $key && $key[`${key}`];
23+
return $key;
24+
}
25+
26+
static detectBrowser() {
27+
const browser = !(typeof window === 'undefined');
28+
return browser;
29+
}
30+
31+
static detectConfig(context) {
32+
const configArg = context && context.config;
33+
let $config = null;
34+
if (!(typeof config === 'undefined')) {
35+
// eslint-disable-next-line no-undef
36+
$config = config;
37+
}
38+
const browser = Boot.detectBrowser();
39+
if (browser && window?.config) {
40+
$config = window.config;
41+
}
42+
43+
$config = configArg || $config;
44+
45+
if ($config) {
46+
if (!($config instanceof ValueResolvingConfig) && ($config.constructor?.name !== 'ValueResolvingConfig')) {
47+
if (browser) {
48+
$config = ConfigFactory.getConfig(new EphemeralConfig($config));
49+
} else {
50+
$config = ConfigFactory.getConfig($config);
51+
}
52+
}
53+
} else {
54+
throw new Error('Unable to detect config, is \'config\' declared or provided?');
55+
}
56+
return $config;
57+
}
58+
59+
static boot(context) {
60+
const loggerFactoryArg = context && context.loggerFactory;
61+
const loggerCategoryCacheArg = context && context.loggerFactory;
62+
const fetchArg = context && context.fetch;
63+
64+
const browser = !(typeof window === 'undefined');
65+
66+
let $config = Boot.detectConfig(context);
67+
68+
let $loggerCategoryCache = null;
69+
if (!(typeof loggerCategoryCacheArg === 'undefined')) {
70+
$loggerCategoryCache = loggerCategoryCacheArg;
71+
}
72+
if (browser && window?.loggerCategoryCache) {
73+
$config = window.loggerCategoryCache;
74+
}
75+
76+
$loggerCategoryCache = $loggerCategoryCache
77+
|| loggerCategoryCacheArg
78+
|| new LoggerCategoryCache();
79+
80+
let $loggerFactory = null;
81+
if (!(typeof loggerFactory === 'undefined')) {
82+
// eslint-disable-next-line no-undef
83+
$loggerFactory = loggerFactory;
84+
}
85+
$loggerFactory = $loggerFactory
86+
|| loggerFactoryArg
87+
|| new LoggerFactory($config, $loggerCategoryCache, ConfigurableLogger.DEFAULT_CONFIG_PATH);
88+
89+
let $fetch = null;
90+
if (!(typeof fetch === 'undefined')) {
91+
$fetch = fetch;
92+
}
93+
$fetch = $fetch || fetchArg;
94+
95+
const $globalref = Boot.getGlobalRef();
96+
97+
$globalref.boot = { contexts: { root: { config: $config } } };
98+
$globalref.boot.contexts.root.loggerCategoryCache = $loggerCategoryCache;
99+
$globalref.boot.contexts.root.loggerFactory = $loggerFactory;
100+
$globalref.boot.contexts.root.fetch = $fetch;
101+
}
102+
103+
static test(context) {
104+
const $config = Boot.detectConfig(context);
105+
const loggerCategoryCache = new LoggerCategoryCache();
106+
const cachingLoggerFactory = new CachingLoggerFactory($config, loggerCategoryCache);
107+
if ($config.get('logging.test.fixtures.quiet', true)) {
108+
Boot.boot({ config: $config, loggerFactory: cachingLoggerFactory, loggerCategoryCache });
109+
} else {
110+
Boot.boot({ config: $config });
111+
}
112+
}
113+
114+
static root(name, defaultValue) {
115+
const value = Boot.getGlobalRoot(name);
116+
return value || defaultValue;
117+
}
118+
};

boot.js

Lines changed: 0 additions & 68 deletions
This file was deleted.

index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,5 @@
1-
module.exports.boot = require ('./boot');
1+
const Boot = require('./Boot');
2+
3+
module.exports.Boot = Boot.Boot;
4+
module.exports.boot = Boot.boot;
5+
module.exports.root = Boot.root;

test/boot.spec.js

Lines changed: 51 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,110 @@
1-
const {assert} = require('chai');
1+
const { assert } = require('chai');
22
const config = require('config');
33
const altConfig = require('@alt-javascript/config').config;
4-
const {EphemeralConfig,ConfigFactory,ValueResolvingConfig} = require('@alt-javascript/config');
5-
const {boot} = require('..');
6-
const {CachingLoggerFactory,LoggerFactory,LoggerCategoryCache} = require('@alt-javascript/logger');
7-
const logger = LoggerFactory.getLogger('@alt-javascript/boot/test/boot_spec',config);
4+
const { EphemeralConfig, ConfigFactory, ValueResolvingConfig } = require('@alt-javascript/config');
5+
const { CachingLoggerFactory, LoggerFactory, LoggerCategoryCache } = require('@alt-javascript/logger');
6+
const { boot } = require('..');
7+
8+
const logger = LoggerFactory.getLogger('@alt-javascript/boot/test/boot_spec', config);
89

910
before(async () => {
10-
logger.verbose(`before spec setup started`);
11+
logger.verbose('before spec setup started');
1112
// ..
12-
logger.verbose(`before spec setup completed`);
13+
logger.verbose('before spec setup completed');
1314
});
1415

1516
beforeEach(async () => {
16-
logger.verbose(`before each setup started`);
17+
logger.verbose('before each setup started');
1718
// ..
18-
logger.verbose(`before each setup completed`);
19+
logger.verbose('before each setup completed');
1920
});
2021

2122
after(async () => {
22-
logger.verbose(`after teardown started`);
23+
logger.verbose('after teardown started');
2324
// ...
24-
logger.verbose(`after teardown completed`);
25+
logger.verbose('after teardown completed');
2526
});
2627

2728
beforeEach(async () => {
28-
logger.verbose(`before each setup started`);
29+
logger.verbose('before each setup started');
2930
// ..
30-
logger.verbose(`before each setup completed`);
31+
logger.verbose('before each setup completed');
3132
});
3233

3334
describe('boot function', () => {
3435
it('boot - config is required', () => {
35-
assert.throws(()=>{boot()},'Unable to detect config, is \'config\' declared or provided?');
36+
assert.throws(() => { boot(); }, 'Unable to detect config, is \'config\' declared or provided?');
3637
});
3738
it('boot - config ', () => {
38-
const config = new EphemeralConfig({});
39-
boot({config:config});
40-
assert.instanceOf(global.boot.contexts.root.config,ValueResolvingConfig,'global.boot.contexts.root.config instanceof ValueResolvingConfig');
41-
assert.instanceOf(global.boot.contexts.root.loggerFactory,LoggerFactory,'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
42-
assert.instanceOf(global.boot.contexts.root.loggerCategoryCache,LoggerCategoryCache,'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
39+
const ephemeralConfig = new EphemeralConfig({});
40+
boot({ config: ephemeralConfig });
41+
assert.instanceOf(global.boot.contexts.root.config, ValueResolvingConfig, 'global.boot.contexts.root.config instanceof ValueResolvingConfig');
42+
assert.instanceOf(global.boot.contexts.root.loggerFactory, LoggerFactory, 'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
43+
assert.instanceOf(global.boot.contexts.root.loggerCategoryCache, LoggerCategoryCache, 'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
4344
global.boot = undefined;
4445
});
4546
it('boot - config with ValueResolvingConfig ', () => {
46-
const config = ConfigFactory.getConfig(new EphemeralConfig({})) ;
47-
boot({config:config});
48-
assert.instanceOf(global.boot.contexts.root.config,ValueResolvingConfig,'global.boot.contexts.root.config instanceof ValueResolvingConfig');
49-
assert.instanceOf(global.boot.contexts.root.loggerFactory,LoggerFactory,'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
50-
assert.instanceOf(global.boot.contexts.root.loggerCategoryCache,LoggerCategoryCache,'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
47+
const ephemeralConfig = ConfigFactory.getConfig(new EphemeralConfig({}));
48+
boot({ config: ephemeralConfig });
49+
assert.instanceOf(global.boot.contexts.root.config, ValueResolvingConfig, 'global.boot.contexts.root.config instanceof ValueResolvingConfig');
50+
assert.instanceOf(global.boot.contexts.root.loggerFactory, LoggerFactory, 'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
51+
assert.instanceOf(global.boot.contexts.root.loggerCategoryCache, LoggerCategoryCache, 'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
5152
global.boot = undefined;
5253
});
5354

5455
it('boot - config detects global config', () => {
55-
const config = new EphemeralConfig({});
56-
global.config = config
56+
const ephemeralConfig = new EphemeralConfig({});
57+
global.config = ephemeralConfig;
5758
boot();
58-
assert.instanceOf(global.boot.contexts.root.config,ValueResolvingConfig,'global.boot.contexts.root.config instanceof ValueResolvingConfig');
59-
assert.instanceOf(global.boot.contexts.root.loggerFactory,LoggerFactory,'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
60-
assert.instanceOf(global.boot.contexts.root.loggerCategoryCache,LoggerCategoryCache,'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
59+
assert.instanceOf(global.boot.contexts.root.config, ValueResolvingConfig, 'global.boot.contexts.root.ephemeralConfig instanceof ValueResolvingConfig');
60+
assert.instanceOf(global.boot.contexts.root.loggerFactory, LoggerFactory, 'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
61+
assert.instanceOf(global.boot.contexts.root.loggerCategoryCache, LoggerCategoryCache, 'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
6162
global.boot = undefined;
6263
global.config = undefined;
6364
});
6465

6566
it('boot - config detects global browser config', () => {
66-
const config = new EphemeralConfig({});
67-
global.window = {config : config};
67+
const ephemeralConfig = new EphemeralConfig({});
68+
global.window = { config: ephemeralConfig };
6869
boot();
69-
assert.instanceOf(global.window.boot.contexts.root.config,ValueResolvingConfig,'global.boot.contexts.root.config instanceof ValueResolvingConfig');
70-
assert.instanceOf(global.window.boot.contexts.root.loggerFactory,LoggerFactory,'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
71-
assert.instanceOf(global.window.boot.contexts.root.loggerCategoryCache,LoggerCategoryCache,'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
70+
assert.instanceOf(global.window.boot.contexts.root.config, ValueResolvingConfig, 'global.boot.contexts.root.config instanceof ValueResolvingConfig');
71+
assert.instanceOf(global.window.boot.contexts.root.loggerFactory, LoggerFactory, 'global.boot.contexts.root.loggerFactory instanceof LoggerFactory');
72+
assert.instanceOf(global.window.boot.contexts.root.loggerCategoryCache, LoggerCategoryCache, 'global.boot.contexts.root.loggerCategoryCache instanceof loggerCategoryCache');
7273
global.boot = undefined;
7374
global.window = undefined;
7475
});
7576

7677
it('boot - LoggerFactory detects boot root context', () => {
77-
const config = new EphemeralConfig({logging:{level:{'/': 'info'}}});
78-
const cachingLoggerFactory = new CachingLoggerFactory(config, new LoggerCategoryCache());
78+
const ephemeralConfig = new EphemeralConfig({ logging: { level: { '/': 'info' } } });
79+
const cachingLoggerFactory = new CachingLoggerFactory(ephemeralConfig,
80+
new LoggerCategoryCache());
7981

80-
boot({config:config,loggerFactory:cachingLoggerFactory});
81-
const logger = LoggerFactory.getLogger('@alt-javascript/boot/test/boot_spec')
82+
boot({ config: ephemeralConfig, loggerFactory: cachingLoggerFactory });
83+
const cachingLogger = LoggerFactory.getLogger('@alt-javascript/boot/test/boot_spec');
8284

83-
logger.info('message');
84-
assert.equal(logger.provider.console.cache.length, 1, 'logger.provider.console.cache.length === 1');
85-
assert.isTrue(logger.provider.console.cache[0].includes('"level":"info","message":"message"'),'logger.provider.console.cache[0].includes(\'"level":"info","message":"message"\')');
85+
cachingLogger.info('message');
86+
assert.equal(cachingLogger.provider.console.cache.length, 1, 'logger.provider.console.cache.length === 1');
87+
assert.isTrue(cachingLogger.provider.console.cache[0].includes('"level":"info","message":"message"'), 'logger.provider.console.cache[0].includes(\'"level":"info","message":"message"\')');
8688
global.boot = undefined;
8789
});
8890

8991
it('boot - uses config local-development', () => {
9092
const cachingLoggerFactory = new CachingLoggerFactory(config, new LoggerCategoryCache());
91-
boot({config:config,loggerFactory:cachingLoggerFactory});
92-
const logger = LoggerFactory.getLogger('@alt-javascript/boot/test/boot_spec/local-development')
93+
boot({ config, loggerFactory: cachingLoggerFactory });
94+
const cachingLogger = LoggerFactory.getLogger('@alt-javascript/boot/test/boot_spec/local-development');
9395

94-
logger.debug('message');
95-
assert.equal(logger.provider.console.cache.length, 1, 'logger.provider.console.cache.length === 1');
96-
assert.isTrue(logger.provider.console.cache[0].includes('"level":"debug","message":"message"'),'logger.provider.console.cache[0].includes(\'"level":"debug","message":"message"\')');
96+
cachingLogger.debug('message');
97+
assert.equal(cachingLogger.provider.console.cache.length, 1, 'logger.provider.console.cache.length === 1');
98+
assert.isTrue(cachingLogger.provider.console.cache[0].includes('"level":"debug","message":"message"'), 'logger.provider.console.cache[0].includes(\'"level":"debug","message":"message"\')');
9799
global.boot = undefined;
98100
});
99101

100102
it('boot - config works', () => {
101-
let configValue = config.get('spec');
102-
let altValue = altConfig.get('spec','default');
103+
const configValue = config.get('spec');
104+
const altValue = altConfig.get('spec', 'default');
103105

104106
logger.debug('message');
107+
// eslint-disable-next-line no-template-curly-in-string
105108
assert.equal(configValue, '${module}/test/boot_spec', 'configValue === \'${module}/test/boot_spec\'');
106109
assert.equal(altValue, '@alt-javascript/boot/test/boot_spec', 'configValue === \'@alt-javascript/boot/test/boot_spec\'');
107110
});

test/fixtures/index.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
1-
const {config} = require('@alt-javascript/config');
2-
const {LoggerFactory} = require('@alt-javascript/logger');
1+
const { config } = require('@alt-javascript/config');
2+
const { LoggerFactory } = require('@alt-javascript/logger');
3+
34
const logger = LoggerFactory.getLogger('@alt-javascript/logger/test/fixtures/index', config);
45

56
exports.mochaGlobalSetup = async function setup() {
6-
logger.verbose(`mocha global setup: started`);
7+
logger.verbose('mocha global setup: started');
78
// ...
8-
logger.verbose(`mocha global setup: completed`);
9+
logger.verbose('mocha global setup: completed');
910
};
1011

1112
exports.mochaGlobalTeardown = async function teardown() {
12-
logger.verbose(`mocha global teardown: started`);
13+
logger.verbose('mocha global teardown: started');
1314
// ...
14-
logger.verbose(`mocha global teardown: completed`);
15+
logger.verbose('mocha global teardown: completed');
1516
};

0 commit comments

Comments
 (0)