@curium.rocks/maestro
Advanced tools
Comparing version 0.6.0 to 0.7.0
@@ -37,160 +37,160 @@ import { IChronicler, IDataEmitter, IMaestro, IService, LoggerFacade, LogLevel, IDisposableAsync, IDisposable, IClassifier, IChroniclerDescription, IEmitterDescription } from '@curium.rocks/data-emitter-base'; | ||
/** | ||
* get the id of the meastro | ||
* @return {string} | ||
*/ | ||
* get the id of the meastro | ||
* @return {string} | ||
*/ | ||
get id(): string; | ||
/** | ||
* get the name of the mastro | ||
*/ | ||
* get the name of the mastro | ||
*/ | ||
get name(): string; | ||
/** | ||
* get the description of the maestro | ||
*/ | ||
* get the description of the maestro | ||
*/ | ||
get description(): string; | ||
/** | ||
* @return {Iterable<IDataEmitter>} | ||
*/ | ||
* @return {Iterable<IDataEmitter>} | ||
*/ | ||
get emitters(): Iterable<IDataEmitter>; | ||
/** | ||
* @return {Iterable<IChronicler>} | ||
*/ | ||
* @return {Iterable<IChronicler>} | ||
*/ | ||
get chroniclers(): Iterable<IChronicler>; | ||
/** | ||
* | ||
* @param {IMaestroOptions} options | ||
*/ | ||
* | ||
* @param {IMaestroOptions} options | ||
*/ | ||
constructor(options: IMaestroOptions); | ||
/** | ||
* | ||
* @param {LogLevel} level | ||
* @param {string} msg | ||
*/ | ||
* | ||
* @param {LogLevel} level | ||
* @param {string} msg | ||
*/ | ||
log(level: LogLevel, msg: string): void; | ||
/** | ||
* | ||
* @param {boolean} start | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {boolean} start | ||
* @return {Promise<void>} | ||
*/ | ||
private serviceCallEntities; | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
start(): Promise<void>; | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
stop(): Promise<void>; | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
disposeAsync(): Promise<void>; | ||
/** | ||
* | ||
* @param {IDisposable[]} toDispose | ||
* @return {IDisposable} | ||
*/ | ||
* | ||
* @param {IDisposable[]} toDispose | ||
* @return {IDisposable} | ||
*/ | ||
private wrapDisposables; | ||
/** | ||
* | ||
* @param {IDataEmitter} emitter | ||
* @param {IChronicler} chronicler | ||
* @return {IDisposable} | ||
*/ | ||
* | ||
* @param {IDataEmitter} emitter | ||
* @param {IChronicler} chronicler | ||
* @return {IDisposable} | ||
*/ | ||
private attachEmitterToChronicler; | ||
/** | ||
* | ||
* @param {IDataEmitter|Iterable<IDataEmitter>} emitters | ||
* @param {IChronicler|Iterable<IChronicler>} chroniclers | ||
* @return {IDisposable} | ||
*/ | ||
* | ||
* @param {IDataEmitter|Iterable<IDataEmitter>} emitters | ||
* @param {IChronicler|Iterable<IChronicler>} chroniclers | ||
* @return {IDisposable} | ||
*/ | ||
connect(emitters: IDataEmitter | Iterable<IDataEmitter>, chroniclers: IChronicler | Iterable<IChronicler>): IDisposable; | ||
/** | ||
* | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
private cleanUpIfDisposable; | ||
/** | ||
* Call stop on an object if available | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
* Call stop on an object if available | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
private stopIfStoppable; | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
private cleanUpResources; | ||
/** | ||
* Make the maestro match the configuration | ||
* @param {IMaestroConfig} maestroConfig | ||
*/ | ||
* Make the maestro match the configuration | ||
* @param {IMaestroConfig} maestroConfig | ||
*/ | ||
private applyConfiguration; | ||
/** | ||
* | ||
* @param {IConnections[]} connections | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IConnections[]} connections | ||
* @return {Promise<void>} | ||
*/ | ||
private createConnections; | ||
/** | ||
* | ||
*/ | ||
* | ||
*/ | ||
load(): Promise<void>; | ||
/** | ||
* | ||
* @param {Array<string>} factories | ||
*/ | ||
* | ||
* @param {Array<string>} factories | ||
*/ | ||
private registerFactories; | ||
/** | ||
* | ||
* @param {Array<IMeastroConfig>} emitters | ||
*/ | ||
* | ||
* @param {Array<IMeastroConfig>} emitters | ||
*/ | ||
private createEmitters; | ||
/** | ||
* | ||
* @param {Array<IMaestroConfig>} chroniclers | ||
*/ | ||
* | ||
* @param {Array<IMaestroConfig>} chroniclers | ||
*/ | ||
private createChroniclers; | ||
/** | ||
* | ||
* @param {IDataEmitter|IChronicler} obj | ||
* @return {Promise<IEmitterConfig|IChroniclerConfig>} | ||
*/ | ||
* | ||
* @param {IDataEmitter|IChronicler} obj | ||
* @return {Promise<IEmitterConfig|IChroniclerConfig>} | ||
*/ | ||
private createConfig; | ||
/** | ||
* @return {Promise<IMaestroConfig>} | ||
*/ | ||
* @return {Promise<IMaestroConfig>} | ||
*/ | ||
private buildConfigObj; | ||
/** | ||
* | ||
*/ | ||
* | ||
*/ | ||
save(): Promise<void>; | ||
/** | ||
* | ||
* @param {IDataEmitter|IEmitterDescription} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IDataEmitter|IEmitterDescription} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
addEmitter(emitter: IDataEmitter | IEmitterDescription): Promise<void>; | ||
/** | ||
* | ||
* @param {IClassifier|string} obj | ||
* @return {string} | ||
*/ | ||
* | ||
* @param {IClassifier|string} obj | ||
* @return {string} | ||
*/ | ||
private getKey; | ||
/** | ||
* | ||
* @param {IDataEmitter|string} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IDataEmitter|string} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
removeEmitter(emitter: IDataEmitter | string): Promise<void>; | ||
/** | ||
* | ||
* @param {IChronicler|IChroniclerDescription} chronicler | ||
*/ | ||
* | ||
* @param {IChronicler|IChroniclerDescription} chronicler | ||
*/ | ||
addChronicler(chronicler: IChronicler | IChroniclerDescription): Promise<void>; | ||
/** | ||
* | ||
* @param {IChronicler|string} chronicler | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IChronicler|string} chronicler | ||
* @return {Promise<void>} | ||
*/ | ||
removeChronicler(chronicler: IChronicler | string): Promise<void>; | ||
} |
@@ -31,5 +31,5 @@ "use strict"; | ||
/** | ||
* | ||
* @param {IMaestroOptions} options | ||
*/ | ||
* | ||
* @param {IMaestroOptions} options | ||
*/ | ||
constructor(options) { | ||
@@ -41,3 +41,3 @@ this._emitters = new Map(); | ||
this._logger = options.logger; | ||
this.log(data_emitter_base_1.LogLevel.DEBUG, "creating maestro"); | ||
this.log(data_emitter_base_1.LogLevel.DEBUG, 'creating maestro'); | ||
this._disposeOnRemove = options.disposeOnRemove || true; | ||
@@ -61,6 +61,6 @@ if (typeof options.config === 'string' && options.saveHandler == null) { | ||
catch (erro) { | ||
this.log(data_emitter_base_1.LogLevel.ERROR, "An error occurred while loading configuration: " + erro); | ||
this.log(data_emitter_base_1.LogLevel.ERROR, 'An error occurred while loading configuration: ' + erro); | ||
const id = crypto_1.default.randomUUID(); | ||
this._config = { | ||
id: id, | ||
id, | ||
name: id + '-default-name', | ||
@@ -92,5 +92,5 @@ description: id + '-default-desc', | ||
/** | ||
* get the id of the meastro | ||
* @return {string} | ||
*/ | ||
* get the id of the meastro | ||
* @return {string} | ||
*/ | ||
get id() { | ||
@@ -100,4 +100,4 @@ return this._config.id; | ||
/** | ||
* get the name of the mastro | ||
*/ | ||
* get the name of the mastro | ||
*/ | ||
get name() { | ||
@@ -107,4 +107,4 @@ return this._config.name; | ||
/** | ||
* get the description of the maestro | ||
*/ | ||
* get the description of the maestro | ||
*/ | ||
get description() { | ||
@@ -114,4 +114,4 @@ return this._config.description; | ||
/** | ||
* @return {Iterable<IDataEmitter>} | ||
*/ | ||
* @return {Iterable<IDataEmitter>} | ||
*/ | ||
get emitters() { | ||
@@ -121,4 +121,4 @@ return this._emitters.values(); | ||
/** | ||
* @return {Iterable<IChronicler>} | ||
*/ | ||
* @return {Iterable<IChronicler>} | ||
*/ | ||
get chroniclers() { | ||
@@ -128,6 +128,6 @@ return this._chroniclers.values(); | ||
/** | ||
* | ||
* @param {LogLevel} level | ||
* @param {string} msg | ||
*/ | ||
* | ||
* @param {LogLevel} level | ||
* @param {string} msg | ||
*/ | ||
log(level, msg) { | ||
@@ -158,6 +158,6 @@ switch (level) { | ||
/** | ||
* | ||
* @param {boolean} start | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {boolean} start | ||
* @return {Promise<void>} | ||
*/ | ||
async serviceCallEntities(start) { | ||
@@ -180,4 +180,4 @@ if (!this._configApplied) { | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
start() { | ||
@@ -187,4 +187,4 @@ return this.serviceCallEntities(true); | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
stop() { | ||
@@ -194,4 +194,4 @@ return this.serviceCallEntities(false); | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
async disposeAsync() { | ||
@@ -201,6 +201,6 @@ await this.cleanUpResources(); | ||
/** | ||
* | ||
* @param {IDisposable[]} toDispose | ||
* @return {IDisposable} | ||
*/ | ||
* | ||
* @param {IDisposable[]} toDispose | ||
* @return {IDisposable} | ||
*/ | ||
wrapDisposables(toDispose) { | ||
@@ -216,12 +216,12 @@ const returnDisposable = { | ||
/** | ||
* | ||
* @param {IDataEmitter} emitter | ||
* @param {IChronicler} chronicler | ||
* @return {IDisposable} | ||
*/ | ||
* | ||
* @param {IDataEmitter} emitter | ||
* @param {IChronicler} chronicler | ||
* @return {IDisposable} | ||
*/ | ||
attachEmitterToChronicler(emitter, chronicler) { | ||
if (emitter == null) | ||
throw new Error("Null emitter cannot be attached"); | ||
throw new Error('Null emitter cannot be attached'); | ||
if (chronicler == null) | ||
throw new Error("Null chronicler cannot be attached"); | ||
throw new Error('Null chronicler cannot be attached'); | ||
const dataConnection = emitter.onData(chronicler.saveRecord.bind(chronicler)); | ||
@@ -237,7 +237,7 @@ const statusConnection = emitter.onStatus(chronicler.saveRecord.bind(chronicler)); | ||
/** | ||
* | ||
* @param {IDataEmitter|Iterable<IDataEmitter>} emitters | ||
* @param {IChronicler|Iterable<IChronicler>} chroniclers | ||
* @return {IDisposable} | ||
*/ | ||
* | ||
* @param {IDataEmitter|Iterable<IDataEmitter>} emitters | ||
* @param {IChronicler|Iterable<IChronicler>} chroniclers | ||
* @return {IDisposable} | ||
*/ | ||
connect(emitters, chroniclers) { | ||
@@ -287,13 +287,13 @@ const multipleEmitters = isIterable(emitters); | ||
/** | ||
* | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
cleanUpIfDisposable(obj) { | ||
if ((0, data_emitter_base_1.isDisposableAsync)(obj)) { | ||
this.log(data_emitter_base_1.LogLevel.DEBUG, "disposing async"); | ||
this.log(data_emitter_base_1.LogLevel.DEBUG, 'disposing async'); | ||
return obj.disposeAsync(); | ||
} | ||
else if ((0, data_emitter_base_1.isDisposable)(obj)) { | ||
this.log(data_emitter_base_1.LogLevel.DEBUG, "disposing object"); | ||
this.log(data_emitter_base_1.LogLevel.DEBUG, 'disposing object'); | ||
return Promise.resolve(obj.dispose()); | ||
@@ -306,6 +306,6 @@ } | ||
/** | ||
* Call stop on an object if available | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
* Call stop on an object if available | ||
* @param {unknown} obj | ||
* @return {Promise<void>} | ||
*/ | ||
stopIfStoppable(obj) { | ||
@@ -323,4 +323,4 @@ if ((0, data_emitter_base_1.hasMethod)(obj, 'stop')) { | ||
/** | ||
* @return {Promise<void>} | ||
*/ | ||
* @return {Promise<void>} | ||
*/ | ||
async cleanUpResources() { | ||
@@ -345,5 +345,5 @@ this.log(data_emitter_base_1.LogLevel.DEBUG, `Cleaning up resources, current counts, emitters = ${this._emitters.size}, chroniclers = ${this._chroniclers.size}, connections = ${this._disposables.size}`); | ||
/** | ||
* Make the maestro match the configuration | ||
* @param {IMaestroConfig} maestroConfig | ||
*/ | ||
* Make the maestro match the configuration | ||
* @param {IMaestroConfig} maestroConfig | ||
*/ | ||
async applyConfiguration(maestroConfig) { | ||
@@ -361,8 +361,8 @@ // load factories | ||
/** | ||
* | ||
* @param {IConnections[]} connections | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IConnections[]} connections | ||
* @return {Promise<void>} | ||
*/ | ||
async createConnections(connections) { | ||
if (!connections || connections.length == 0) { | ||
if (!connections || connections.length === 0) { | ||
return Promise.resolve(); | ||
@@ -381,4 +381,4 @@ } | ||
/** | ||
* | ||
*/ | ||
* | ||
*/ | ||
async load() { | ||
@@ -398,3 +398,3 @@ await this.cleanUpResources(); | ||
else { | ||
return Promise.reject(new Error("Config file path or load handler not provided!")); | ||
return Promise.reject(new Error('Config file path or load handler not provided!')); | ||
} | ||
@@ -405,12 +405,12 @@ await this.applyConfiguration(maestroConfig); | ||
/** | ||
* | ||
* @param {Array<string>} factories | ||
*/ | ||
* | ||
* @param {Array<string>} factories | ||
*/ | ||
registerFactories(factories) { | ||
let factoryLoadCount = 0; | ||
this.log(data_emitter_base_1.LogLevel.INFO, "Loading factories"); | ||
this.log(data_emitter_base_1.LogLevel.INFO, 'Loading factories'); | ||
factories.emitter.forEach((iFactoryConfig) => { | ||
this.log(data_emitter_base_1.LogLevel.INFO, `Attempting to register emitter factory from module ${iFactoryConfig.packageName} of path ${iFactoryConfig.factoryPath} as type ${iFactoryConfig.factoryType}`); | ||
// eslint-disable-next-line @typescript-eslint/no-var-requires | ||
const factory = (new (require(iFactoryConfig.packageName)[iFactoryConfig.factoryPath])); | ||
const factory = (new (require(iFactoryConfig.packageName)[iFactoryConfig.factoryPath])()); | ||
data_emitter_base_1.ProviderSingleton.getInstance().registerEmitterFactory(iFactoryConfig.factoryType, factory); | ||
@@ -423,3 +423,3 @@ this.log(data_emitter_base_1.LogLevel.INFO, `Registered emitter factory from module ${iFactoryConfig.packageName} of path ${iFactoryConfig.factoryPath} as type ${iFactoryConfig.factoryType}`); | ||
// eslint-disable-next-line @typescript-eslint/no-var-requires | ||
const factory = (new (require(iFactoryConfig.packageName)[iFactoryConfig.factoryPath])); | ||
const factory = (new (require(iFactoryConfig.packageName)[iFactoryConfig.factoryPath])()); | ||
data_emitter_base_1.ProviderSingleton.getInstance().registerChroniclerFactory(iFactoryConfig.factoryType, factory); | ||
@@ -432,11 +432,11 @@ this.log(data_emitter_base_1.LogLevel.INFO, `Registered chronicler factory from module ${iFactoryConfig.packageName} of path ${iFactoryConfig.factoryPath} as type ${iFactoryConfig.factoryType}`); | ||
/** | ||
* | ||
* @param {Array<IMeastroConfig>} emitters | ||
*/ | ||
* | ||
* @param {Array<IMeastroConfig>} emitters | ||
*/ | ||
async createEmitters(emitters) { | ||
this.log(data_emitter_base_1.LogLevel.INFO, "Loading emitters"); | ||
this.log(data_emitter_base_1.LogLevel.INFO, 'Loading emitters'); | ||
let emitterCount = 0; | ||
const emitterArray = await Promise.all(emitters.map(ec => { | ||
emitterCount++; | ||
if (typeof ec.config === "string") { | ||
if (typeof ec.config === 'string') { | ||
return data_emitter_base_1.ProviderSingleton.getInstance().recreateEmitter(ec.config, ec.formatSettings || this._config.formatSettings); | ||
@@ -452,12 +452,12 @@ } | ||
/** | ||
* | ||
* @param {Array<IMaestroConfig>} chroniclers | ||
*/ | ||
* | ||
* @param {Array<IMaestroConfig>} chroniclers | ||
*/ | ||
async createChroniclers(chroniclers) { | ||
this.log(data_emitter_base_1.LogLevel.INFO, "Loading chroniclers"); | ||
this.log(data_emitter_base_1.LogLevel.INFO, 'Loading chroniclers'); | ||
let chroniclerCount = 0; | ||
const chroniclerArray = await Promise.all(chroniclers.map(cc => { | ||
chroniclerCount++; | ||
if (typeof cc.config === "string") { | ||
return Promise.reject(new Error("Encryption not supported yet!")); | ||
if (typeof cc.config === 'string') { | ||
return Promise.reject(new Error('Encryption not supported yet!')); | ||
} | ||
@@ -470,6 +470,6 @@ return data_emitter_base_1.ProviderSingleton.getInstance().buildChronicler(cc.config); | ||
/** | ||
* | ||
* @param {IDataEmitter|IChronicler} obj | ||
* @return {Promise<IEmitterConfig|IChroniclerConfig>} | ||
*/ | ||
* | ||
* @param {IDataEmitter|IChronicler} obj | ||
* @return {Promise<IEmitterConfig|IChroniclerConfig>} | ||
*/ | ||
async createConfig(obj) { | ||
@@ -482,4 +482,4 @@ return { | ||
/** | ||
* @return {Promise<IMaestroConfig>} | ||
*/ | ||
* @return {Promise<IMaestroConfig>} | ||
*/ | ||
async buildConfigObj() { | ||
@@ -500,4 +500,4 @@ const emitterConfigurations = (await Promise.all(Array.from(this._emitters.values()).map(this.createConfig.bind(this)))); | ||
/** | ||
* | ||
*/ | ||
* | ||
*/ | ||
async save() { | ||
@@ -518,10 +518,10 @@ if (this._configFilePath) { | ||
else { | ||
return Promise.reject(new Error("No config file path or save handler provided")); | ||
return Promise.reject(new Error('No config file path or save handler provided')); | ||
} | ||
} | ||
/** | ||
* | ||
* @param {IDataEmitter|IEmitterDescription} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IDataEmitter|IEmitterDescription} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
async addEmitter(emitter) { | ||
@@ -546,14 +546,14 @@ const key = emitter.id.toLowerCase(); | ||
/** | ||
* | ||
* @param {IClassifier|string} obj | ||
* @return {string} | ||
*/ | ||
* | ||
* @param {IClassifier|string} obj | ||
* @return {string} | ||
*/ | ||
getKey(obj) { | ||
return typeof obj == 'string' ? obj.toLowerCase() : obj.id.toLowerCase(); | ||
return typeof obj === 'string' ? obj.toLowerCase() : obj.id.toLowerCase(); | ||
} | ||
/** | ||
* | ||
* @param {IDataEmitter|string} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IDataEmitter|string} emitter | ||
* @return {Promise<void>} | ||
*/ | ||
removeEmitter(emitter) { | ||
@@ -570,5 +570,5 @@ const key = this.getKey(emitter); | ||
/** | ||
* | ||
* @param {IChronicler|IChroniclerDescription} chronicler | ||
*/ | ||
* | ||
* @param {IChronicler|IChroniclerDescription} chronicler | ||
*/ | ||
async addChronicler(chronicler) { | ||
@@ -587,6 +587,6 @@ const key = chronicler.id.toLowerCase(); | ||
/** | ||
* | ||
* @param {IChronicler|string} chronicler | ||
* @return {Promise<void>} | ||
*/ | ||
* | ||
* @param {IChronicler|string} chronicler | ||
* @return {Promise<void>} | ||
*/ | ||
async removeChronicler(chronicler) { | ||
@@ -593,0 +593,0 @@ const key = this.getKey(chronicler); |
@@ -1,3 +0,3 @@ | ||
import { IChroniclerDescription, IClassifier, IFormatSettings } from "@curium.rocks/data-emitter-base/build/src/dataEmitter"; | ||
import { IEmitterDescription } from "@curium.rocks/data-emitter-base"; | ||
import { IChroniclerDescription, IClassifier, IFormatSettings } from '@curium.rocks/data-emitter-base/build/src/dataEmitter'; | ||
import { IEmitterDescription } from '@curium.rocks/data-emitter-base'; | ||
export interface IConnection { | ||
@@ -4,0 +4,0 @@ emitters: string[]; |
{ | ||
"name": "@curium.rocks/maestro", | ||
"version": "0.6.0", | ||
"version": "0.7.0", | ||
"description": "Connects emitters to chroniclers and transceivers along with managing state of emitters", | ||
@@ -10,2 +10,3 @@ "main": "build/src/index.js", | ||
"lint": "eslint src --ext .ts", | ||
"lint:fix": "eslint --ext .ts src --fix", | ||
"clean": "rm -fr build", | ||
@@ -37,2 +38,3 @@ "prepare": "npm run build", | ||
"@typescript-eslint/eslint-plugin": "5.33.1", | ||
"@typescript-eslint/parser": "^5.15.0", | ||
"chai": "4.3.6", | ||
@@ -42,4 +44,8 @@ "eslint": "8.22.0", | ||
"eslint-config-prettier": "8.5.0", | ||
"eslint-config-standard": "^17.0.0", | ||
"eslint-plugin-chai-friendly": "^0.7.2", | ||
"eslint-plugin-import": "2.26.0", | ||
"eslint-plugin-node": "^11.1.0", | ||
"eslint-plugin-prettier": "4.2.1", | ||
"eslint-plugin-promise": "^6.0.0", | ||
"mocha": "9.2.2", | ||
@@ -46,0 +52,0 @@ "nyc": "15.1.0", |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
57148
26