Skip to content

Commit 8a10b6e

Browse files
committed
Added static dependencyfactories
1 parent 18554ad commit 8a10b6e

File tree

8 files changed

+44
-37
lines changed

8 files changed

+44
-37
lines changed

packages/api/src/metrics/OpenTelemetryTracer.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,21 @@
11
import opentelemetry, { SpanStatusCode } from "@opentelemetry/api";
22
import { Tracer } from "@proto-kit/sequencer";
3+
import { inject, injectable } from "tsyringe";
4+
import { noop } from "@proto-kit/common";
35

6+
import type { OpenTelemetryServer } from "./OpenTelemetryServer";
7+
8+
@injectable()
49
export class OpenTelemetryTracer implements Tracer {
10+
public constructor(
11+
// We need to import this here, so that the OpenTelemetryServer will be resolved
12+
// before this module, and therefore will be already started when this module is
13+
// eventually consumed and used
14+
@inject("OpenTelemetryServer") openTelemetryServer: OpenTelemetryServer
15+
) {
16+
noop();
17+
}
18+
519
private tracer: ReturnType<typeof opentelemetry.trace.getTracer> | undefined =
620
undefined;
721

packages/common/src/config/ModuleContainer.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,10 @@ export class ModuleContainer<
263263
this.onAfterModuleResolution(moduleName);
264264

265265
this.registerAliases(moduleName, useClass);
266+
267+
if (this.isDependencyFactory(useClass)) {
268+
this.useDependencyFactory(useClass);
269+
}
266270
}
267271
});
268272
}
@@ -285,16 +289,6 @@ export class ModuleContainer<
285289
});
286290
}
287291

288-
protected registerClasses(modules: Record<string, TypedClass<unknown>>) {
289-
Object.entries(modules).forEach(([moduleName, useClass]) => {
290-
this.container.register(
291-
moduleName,
292-
{ useClass },
293-
{ lifecycle: Lifecycle.ContainerScoped }
294-
);
295-
});
296-
}
297-
298292
/**
299293
* Provide additional configuration after the ModuleContainer was created.
300294
*
@@ -403,14 +397,18 @@ export class ModuleContainer<
403397
protected useDependencyFactory(factory: DependencyFactory) {
404398
const dependencies = factory.dependencies();
405399

400+
// eslint-disable-next-line sonarjs/cognitive-complexity
406401
Object.entries(dependencies).forEach(([rawKey, declaration]) => {
407402
const key = rawKey.charAt(0).toUpperCase() + rawKey.slice(1);
408403

409404
if (
410405
!this.container.isRegistered(key) ||
411406
declaration.forceOverwrite === true
412407
) {
413-
if (this.container.isRegistered(key) && declaration.forceOverwrite) {
408+
if (
409+
this.container.isRegistered(key) &&
410+
(declaration?.forceOverwrite ?? false)
411+
) {
414412
log.warn(
415413
`You are trying to overwrite dependency ${key}, which is already registered. This is currently not supported. Try to define your dependency earlier.`
416414
);
@@ -434,6 +432,11 @@ export class ModuleContainer<
434432
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions
435433
declaration.useClass as TypedClass<unknown>
436434
);
435+
436+
// Register static dependencies
437+
if (this.isDependencyFactory(declaration.useClass)) {
438+
this.useDependencyFactory(declaration.useClass);
439+
}
437440
} else if (isTokenProvider(declaration)) {
438441
this.container.register(key, declaration, {
439442
lifecycle: Lifecycle.Singleton,

packages/module/src/factories/MethodIdFactory.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import { DependencyFactory, DependencyRecord } from "@proto-kit/common";
1+
import { DependencyRecord } from "@proto-kit/common";
22

33
import { MethodIdResolver } from "../runtime/MethodIdResolver";
44

5-
export class MethodIdFactory implements DependencyFactory {
6-
public dependencies() {
5+
export class MethodIdFactory {
6+
public static dependencies() {
77
return {
88
methodIdResolver: {
99
useClass: MethodIdResolver,

packages/module/src/runtime/Runtime.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export class Runtime<Modules extends RuntimeModulesRecord>
303303
public create(childContainerProvider: ChildContainerProvider) {
304304
super.create(childContainerProvider);
305305

306-
this.useDependencyFactory(this.container.resolve(MethodIdFactory));
306+
this.useDependencyFactory(MethodIdFactory);
307307
}
308308

309309
public get areProofsEnabled(): AreProofsEnabled | undefined {

packages/sdk/src/appChain/AppChain.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,9 @@ export class AppChain<
313313
) {
314314
this.create(() => dependencyContainer);
315315

316-
this.useDependencyFactory(this.container.resolve(AreProofsEnabledFactory));
317-
this.useDependencyFactory(this.container.resolve(SharedDependencyFactory));
318-
this.useDependencyFactory(this.container.resolve(ConsoleLoggingFactory));
316+
this.useDependencyFactory(AreProofsEnabledFactory);
317+
this.useDependencyFactory(SharedDependencyFactory);
318+
this.useDependencyFactory(ConsoleLoggingFactory);
319319

320320
this.container
321321
.resolve<AreProofsEnabled>("AreProofsEnabled")

packages/sdk/src/appChain/AreProofsEnabledFactory.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import { injectable } from "tsyringe";
2-
import {
3-
AreProofsEnabled,
4-
DependencyFactory,
5-
DependencyRecord,
6-
} from "@proto-kit/common";
2+
import { AreProofsEnabled, DependencyRecord } from "@proto-kit/common";
73

84
@injectable()
95
export class InMemoryAreProofsEnabled implements AreProofsEnabled {
@@ -18,8 +14,8 @@ export class InMemoryAreProofsEnabled implements AreProofsEnabled {
1814
}
1915
}
2016

21-
export class AreProofsEnabledFactory implements DependencyFactory {
22-
public dependencies() {
17+
export class AreProofsEnabledFactory {
18+
public static dependencies() {
2319
return {
2420
areProofsEnabled: {
2521
useClass: InMemoryAreProofsEnabled,

packages/sdk/src/appChain/SharedDependencyFactory.ts

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,4 @@
1-
import {
2-
DependencyDeclaration,
3-
DependencyFactory,
4-
DependencyRecord,
5-
} from "@proto-kit/common";
1+
import { DependencyDeclaration, DependencyRecord } from "@proto-kit/common";
62
import { StateServiceProvider } from "@proto-kit/protocol";
73
import { MethodIdResolver } from "@proto-kit/module";
84

@@ -11,8 +7,8 @@ export interface SharedDependencyRecord extends DependencyRecord {
117
methodIdResolver: DependencyDeclaration<MethodIdResolver>;
128
}
139

14-
export class SharedDependencyFactory implements DependencyFactory {
15-
public dependencies(): SharedDependencyRecord {
10+
export class SharedDependencyFactory {
11+
public static dependencies(): SharedDependencyRecord {
1612
return {
1713
stateServiceProvider: {
1814
useClass: StateServiceProvider,

packages/sequencer/src/logging/ConsoleLoggingFactory.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
1-
import { injectable } from "tsyringe";
2-
import { DependencyFactory, DependencyRecord } from "@proto-kit/common";
1+
import { DependencyRecord } from "@proto-kit/common";
32

43
import { ConsoleTracer } from "./ConsoleTracer";
54

6-
@injectable()
7-
export class ConsoleLoggingFactory implements DependencyFactory {
8-
public dependencies() {
5+
export class ConsoleLoggingFactory {
6+
public static dependencies() {
97
return {
108
Tracer: {
119
useClass: ConsoleTracer,

0 commit comments

Comments
 (0)