Commit 8d0e3366 authored by nanahira's avatar nanahira

use ProvidingContextContainer

parent 1af0e2c8
......@@ -31,21 +31,27 @@ function createContextProvider(
};
}
export const contextsToProvide: Provider<Context>[] = [];
const contextTokensSet = new Set<string>();
export class ProvidingContextContainer {
contextsToProvide: Provider<Context>[] = [];
private contextTokensSet = new Set<string>();
registerContext(scopeType?: ContextScopeTypes, values: string[] = []) {
if (!scopeType) {
return KOISHI_CONTEXT;
}
const token = constructProvideToken(scopeType, values);
if (!this.contextTokensSet.has(token)) {
this.contextTokensSet.add(token);
this.contextsToProvide.push(createContextProvider(scopeType, values));
}
return token;
}
}
export const defaultContextContainer = new ProvidingContextContainer();
export function getContextProvideToken(
scopeType?: ContextScopeTypes,
values: string[] = [],
container = defaultContextContainer,
) {
if (!scopeType) {
return KOISHI_CONTEXT;
}
const token = constructProvideToken(scopeType, values);
if (!contextTokensSet.has(token)) {
contextTokensSet.add(token);
contextsToProvide.push(createContextProvider(scopeType, values));
}
return token;
return container.registerContext(scopeType, values);
}
......@@ -23,7 +23,7 @@ import { KoishiLoggerService } from './providers/koishi-logger.service';
import { KoishiMetascanService } from './providers/koishi-metascan.service';
import { DiscoveryModule, INQUIRER } from '@nestjs/core';
import { Context } from 'koishi';
import { contextsToProvide } from './koishi-context.factory';
import { defaultContextContainer } from './koishi-context.factory';
import { KoishiInjectionService } from './providers/koishi-injection.service';
import { KoishiContextService } from './providers/koishi-context.service';
......@@ -79,9 +79,9 @@ export class KoishiModule implements NestModule {
module: KoishiModule,
providers: [
{ provide: KOISHI_MODULE_OPTIONS, useValue: options },
...contextsToProvide,
...defaultContextContainer.contextsToProvide,
],
exports: contextsToProvide,
exports: defaultContextContainer.contextsToProvide,
global: options.isGlobal != null ? options.isGlobal : true,
};
}
......@@ -92,10 +92,10 @@ export class KoishiModule implements NestModule {
imports: options.imports,
providers: [
...this.createAsyncProviders(options),
...contextsToProvide,
...defaultContextContainer.contextsToProvide,
...(options.extraProviders || []),
],
exports: contextsToProvide,
exports: defaultContextContainer.contextsToProvide,
global: options.isGlobal != null ? options.isGlobal : true,
};
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment