Skip to content

Commit

Permalink
Improve registry interface
Browse files Browse the repository at this point in the history
  • Loading branch information
Exelord committed Nov 20, 2022
1 parent 4368c5e commit 0b90687
Showing 1 changed file with 15 additions and 21 deletions.
36 changes: 15 additions & 21 deletions src/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,25 +12,19 @@ export interface RegistryConfig {

export class Registry {
#owner: Owner | null;
#config: RegistryConfig;
#cache: Map<ServiceInitializer<any>, any>;

readonly config: RegistryConfig;

constructor(config: RegistryConfig = {}) {
this.config = config;
this.#config = config;
this.#owner = getOwner();
this.#cache = new Map<ServiceInitializer<any>, any>();
}

has<T extends Service>(initializer: ServiceInitializer<T>): boolean {
const parentRegistry = this.getParentRegistry();

if (
parentRegistry &&
(parentRegistry.config.expose === true ||
(Array.isArray(parentRegistry.config.expose) &&
parentRegistry.config.expose?.includes(initializer)))
) {
if (parentRegistry?.isExposing(initializer)) {
return parentRegistry.has(initializer);
}

Expand All @@ -40,12 +34,7 @@ export class Registry {
get<T extends Service>(initializer: ServiceInitializer<T>): T | undefined {
const parentRegistry = this.getParentRegistry();

if (
parentRegistry &&
(parentRegistry.config.expose === true ||
(Array.isArray(parentRegistry.config.expose) &&
parentRegistry.config.expose?.includes(initializer)))
) {
if (parentRegistry?.isExposing(initializer)) {
return parentRegistry.get(initializer);
}

Expand All @@ -59,12 +48,7 @@ export class Registry {
register<T extends Service>(initializer: ServiceInitializer<T>): T {
const parentRegistry = this.getParentRegistry();

if (
parentRegistry &&
(parentRegistry.config.expose === true ||
(Array.isArray(parentRegistry.config.expose) &&
parentRegistry.config.expose?.includes(initializer)))
) {
if (parentRegistry?.isExposing(initializer)) {
return parentRegistry.register(initializer);
}

Expand All @@ -77,6 +61,16 @@ export class Registry {
return registration;
}

protected isExposing<T extends Service>(
initializer: ServiceInitializer<T>
): boolean {
return (
this.#config.expose === true ||
(Array.isArray(this.#config.expose) &&
this.#config.expose?.includes(initializer))
);
}

private getParentRegistry(): Registry | undefined {
return this.#owner
? runWithOwner(this.#owner, () => {
Expand Down

0 comments on commit 0b90687

Please sign in to comment.