diff --git a/src/injectors/components/InjectComponent.test.tsx b/src/injectors/components/InjectComponent.test.tsx
index 6d02538c..4bc7c80d 100644
--- a/src/injectors/components/InjectComponent.test.tsx
+++ b/src/injectors/components/InjectComponent.test.tsx
@@ -1,5 +1,6 @@
import { render } from '@testing-library/react';
import React from 'react';
+import type { Constructable, ObjectGraph } from 'src';
import MainGraph, { Dependencies } from '../../../test/fixtures/MainGraph';
import { injectComponent } from './InjectComponent';
@@ -33,4 +34,15 @@ describe('injectComponent', () => {
const { container } = render();
expect(container.textContent).toBe('error: own prop not provided - Fear kills progress');
});
+
+ // it throws an error if the Graph is undefined
+ it('Throws an error if the Graph is undefined', () => {
+ const Graph = undefined as unknown as Constructable;
+ expect(() => injectComponent(component, Graph)).toThrowError(
+ `injectComponent was called with an undefined Graph.`
+ + `This is probably not an issue with Obsidian.`
+ + `It's typically caused by circular dependencies.`
+ + ` Check the implementation of component.`,
+ );
+ });
});
diff --git a/src/injectors/components/InjectComponent.ts b/src/injectors/components/InjectComponent.ts
index a8d357b8..22b258b5 100644
--- a/src/injectors/components/InjectComponent.ts
+++ b/src/injectors/components/InjectComponent.ts
@@ -2,20 +2,34 @@ import { ObjectGraph } from '../../graph/ObjectGraph';
import { Constructable } from '../../types';
import ComponentInjector from './ComponentInjector';
-interface Descriminator {
- obsidianDescriminator: never;
+interface Discriminator {
+ obsidianDiscriminator: never;
}
const componentInjector = new ComponentInjector();
-export const injectComponent = (
+export const injectComponent = (
Target: React.FunctionComponent<
- (OwnProps extends infer P ? OwnProps extends Descriminator ? P : OwnProps : never) &
- (InjectedProps extends Descriminator ? any : InjectedProps)
+ (OwnProps extends infer P ? OwnProps extends Discriminator ? P : OwnProps : never) &
+ (InjectedProps extends Discriminator ? any : InjectedProps)
>,
Graph: Constructable,
-) => componentInjector.inject(Target, Graph) as React.FunctionComponent<
- InjectedProps extends Descriminator ?
- OwnProps extends Descriminator ? Partial : OwnProps :
+) => {
+ assertGraph(Graph, Target);
+
+ return componentInjector.inject(Target, Graph) as React.FunctionComponent<
+ InjectedProps extends Discriminator ?
+ OwnProps extends Discriminator ? Partial : OwnProps :
OwnProps extends InjectedProps ? Partial : OwnProps & Partial
>;
+};
+function assertGraph(Graph: Constructable>, Target: any) {
+ if (!Graph) {
+ throw new Error(
+ `injectComponent was called with an undefined Graph.`
+ + `This is probably not an issue with Obsidian.`
+ + `It's typically caused by circular dependencies.`
+ + ` Check the implementation of ${Target.name}.`,
+ );
+ }
+}