Skip to content

Commit

Permalink
feat(core): update getClassMetadataConstructorArguments with better e…
Browse files Browse the repository at this point in the history
…rror descriptions
  • Loading branch information
notaphplover committed Nov 8, 2024
1 parent bb39031 commit 0e347ab
Show file tree
Hide file tree
Showing 5 changed files with 65 additions and 2 deletions.
5 changes: 5 additions & 0 deletions .changeset/fresh-bulldogs-tan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@inversifyjs/core": patch
---

Updated get metadata flow to provide better error messages when missing metadata.
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ jest.mock('@inversifyjs/reflect-metadata-utils');
import { Newable } from '@inversifyjs/common';
import { getReflectMetadata } from '@inversifyjs/reflect-metadata-utils';

jest.mock('./assertConstructorMetadataArrayFilled');
jest.mock('./getClassElementMetadataFromNewable');
jest.mock('./getConstructorArgumentMetadataFromLegacyMetadata');

Expand All @@ -13,6 +14,7 @@ import { ClassElementMetadata } from '../models/ClassElementMetadata';
import { ClassElementMetadataKind } from '../models/ClassElementMetadataKind';
import { LegacyMetadata } from '../models/LegacyMetadata';
import { LegacyMetadataMap } from '../models/LegacyMetadataMap';
import { assertConstructorMetadataArrayFilled } from './assertConstructorMetadataArrayFilled';
import { getClassElementMetadataFromNewable } from './getClassElementMetadataFromNewable';
import { getClassMetadataConstructorArguments } from './getClassMetadataConstructorArguments';
import { getConstructorArgumentMetadataFromLegacyMetadata } from './getConstructorArgumentMetadataFromLegacyMetadata';
Expand Down Expand Up @@ -73,6 +75,14 @@ describe(getClassMetadataConstructorArguments.name, () => {
);
});

it('should call assertConstructorMetadataArrayFilled()', () => {
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledTimes(1);
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledWith(
typeFixture,
[classElementMetadataFixture],
);
});

it('should return ClassElementMetadata[]', () => {
expect(result).toStrictEqual([classElementMetadataFixture]);
});
Expand Down Expand Up @@ -147,6 +157,14 @@ describe(getClassMetadataConstructorArguments.name, () => {
).toHaveBeenCalledWith(typeFixture, 0, legacyMetadataListFixture);
});

it('should call assertConstructorMetadataArrayFilled()', () => {
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledTimes(1);
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledWith(
typeFixture,
[classElementMetadataFixture],
);
});

it('should return ClassElementMetadata[]', () => {
expect(result).toStrictEqual([classElementMetadataFixture]);
});
Expand Down Expand Up @@ -229,6 +247,14 @@ describe(getClassMetadataConstructorArguments.name, () => {
expect(getClassElementMetadataFromNewable).not.toHaveBeenCalled();
});

it('should call assertConstructorMetadataArrayFilled()', () => {
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledTimes(1);
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledWith(
typeFixture,
[classElementMetadataFixture],
);
});

it('should return ClassElementMetadata[]', () => {
expect(result).toStrictEqual([classElementMetadataFixture]);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { getReflectMetadata } from '@inversifyjs/reflect-metadata-utils';
import { DESIGN_PARAM_TYPES, TAGGED } from '../../reflectMetadata/data/keys';
import { ClassElementMetadata } from '../models/ClassElementMetadata';
import { LegacyMetadataMap } from '../models/LegacyMetadataMap';
import { assertConstructorMetadataArrayFilled } from './assertConstructorMetadataArrayFilled';
import { getClassElementMetadataFromNewable } from './getClassElementMetadataFromNewable';
import { getConstructorArgumentMetadataFromLegacyMetadata } from './getConstructorArgumentMetadataFromLegacyMetadata';

Expand All @@ -18,7 +19,7 @@ export function getClassMetadataConstructorArguments(
const constructorParametersLegacyMetadata: LegacyMetadataMap | undefined =
getReflectMetadata(type, TAGGED);

const constructorArgumentsMetadata: ClassElementMetadata[] = [];
const constructorArgumentsMetadata: (ClassElementMetadata | undefined)[] = [];

if (constructorParametersLegacyMetadata !== undefined) {
for (const [stringifiedIndex, metadataList] of Object.entries(
Expand Down Expand Up @@ -48,5 +49,7 @@ export function getClassMetadataConstructorArguments(
}
}

assertConstructorMetadataArrayFilled(type, constructorArgumentsMetadata);

return constructorArgumentsMetadata;
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import { afterAll, beforeAll, describe, expect, it, jest } from '@jest/globals';

import { Newable } from '@inversifyjs/common';

jest.mock('./assertConstructorMetadataArrayFilled');
jest.mock('./getClassElementMetadataFromNewable');
jest.mock('./getConstructorArgumentMetadataFromLegacyMetadata');

Expand All @@ -10,6 +11,7 @@ import { ClassElementMetadataKind } from '../models/ClassElementMetadataKind';
import { LegacyMetadata } from '../models/LegacyMetadata';
import { LegacyMetadataMap } from '../models/LegacyMetadataMap';
import { LegacyMetadataReader } from '../models/LegacyMetadataReader';
import { assertConstructorMetadataArrayFilled } from './assertConstructorMetadataArrayFilled';
import { getClassElementMetadataFromNewable } from './getClassElementMetadataFromNewable';
import { getClassMetadataConstructorArgumentsFromMetadataReader } from './getClassMetadataConstructorArgumentsFromMetadataReader';
import { getConstructorArgumentMetadataFromLegacyMetadata } from './getConstructorArgumentMetadataFromLegacyMetadata';
Expand Down Expand Up @@ -75,6 +77,14 @@ describe(getClassMetadataConstructorArgumentsFromMetadataReader.name, () => {
);
});

it('should call assertConstructorMetadataArrayFilled()', () => {
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledTimes(1);
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledWith(
typeFixture,
[classElementMetadataFixture],
);
});

it('should return ClassElementMetadata[]', () => {
expect(result).toStrictEqual([classElementMetadataFixture]);
});
Expand Down Expand Up @@ -153,6 +163,14 @@ describe(getClassMetadataConstructorArgumentsFromMetadataReader.name, () => {
).toHaveBeenCalledWith(typeFixture, 0, legacyMetadataListFixture);
});

it('should call assertConstructorMetadataArrayFilled()', () => {
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledTimes(1);
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledWith(
typeFixture,
[classElementMetadataFixture],
);
});

it('should return ClassElementMetadata[]', () => {
expect(result).toStrictEqual([classElementMetadataFixture]);
});
Expand Down Expand Up @@ -239,6 +257,14 @@ describe(getClassMetadataConstructorArgumentsFromMetadataReader.name, () => {
expect(getClassElementMetadataFromNewable).not.toHaveBeenCalled();
});

it('should call assertConstructorMetadataArrayFilled()', () => {
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledTimes(1);
expect(assertConstructorMetadataArrayFilled).toHaveBeenCalledWith(
typeFixture,
[classElementMetadataFixture],
);
});

it('should return ClassElementMetadata[]', () => {
expect(result).toStrictEqual([classElementMetadataFixture]);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Newable } from '@inversifyjs/common';
import { ClassElementMetadata } from '../models/ClassElementMetadata';
import { LegacyConstructorMetadata } from '../models/LegacyConstructorMetadata';
import { LegacyMetadataReader } from '../models/LegacyMetadataReader';
import { assertConstructorMetadataArrayFilled } from './assertConstructorMetadataArrayFilled';
import { getClassElementMetadataFromNewable } from './getClassElementMetadataFromNewable';
import { getConstructorArgumentMetadataFromLegacyMetadata } from './getConstructorArgumentMetadataFromLegacyMetadata';

Expand All @@ -13,7 +14,7 @@ export function getClassMetadataConstructorArgumentsFromMetadataReader(
const legacyConstructorMetadata: LegacyConstructorMetadata =
metadataReader.getConstructorMetadata(type);

const constructorArgumentsMetadata: ClassElementMetadata[] = [];
const constructorArgumentsMetadata: (ClassElementMetadata | undefined)[] = [];

for (const [stringifiedIndex, metadataList] of Object.entries(
legacyConstructorMetadata.userGeneratedMetadata,
Expand Down Expand Up @@ -44,5 +45,7 @@ export function getClassMetadataConstructorArgumentsFromMetadataReader(
}
}

assertConstructorMetadataArrayFilled(type, constructorArgumentsMetadata);

return constructorArgumentsMetadata;
}

0 comments on commit 0e347ab

Please sign in to comment.