diff --git a/.changeset/neat-candles-accept.md b/.changeset/neat-candles-accept.md new file mode 100644 index 00000000..3b30479d --- /dev/null +++ b/.changeset/neat-candles-accept.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/core": patch +--- + +Updated `injectBase` default values to be true diff --git a/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.spec.ts b/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.spec.ts index 6470553c..139dd5f2 100644 --- a/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.spec.ts +++ b/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.spec.ts @@ -17,8 +17,33 @@ describe(getExtendedConstructorArguments.name, () => { type: class {}, }; - baseTypeClassMetadataFixture = ClassMetadataFixtures.any; - typeMetadataFixture = ClassMetadataFixtures.any; + baseTypeClassMetadataFixture = { + ...ClassMetadataFixtures.any, + constructorArguments: [ + { + kind: ClassElementMetadataKind.unmanaged, + }, + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-2', + }, + ], + }; + typeMetadataFixture = { + ...ClassMetadataFixtures.any, + constructorArguments: [ + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-1', + }, + ], + }; }); describe('when called', () => { @@ -33,7 +58,22 @@ describe(getExtendedConstructorArguments.name, () => { }); it('should return expected metadata', () => { - expect(result).toBe(typeMetadataFixture.constructorArguments); + expect(result).toStrictEqual([ + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-1', + }, + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-2', + }, + ]); }); }); }); @@ -109,4 +149,61 @@ describe(getExtendedConstructorArguments.name, () => { }); }); }); + + describe('having options with extendConstructorArguments false', () => { + let optionsFixture: InjectFromOptions; + let baseTypeClassMetadataFixture: ClassMetadata; + let typeMetadataFixture: ClassMetadata; + + beforeAll(() => { + optionsFixture = { + extendConstructorArguments: false, + type: class {}, + }; + + baseTypeClassMetadataFixture = { + ...ClassMetadataFixtures.any, + constructorArguments: [ + { + kind: ClassElementMetadataKind.unmanaged, + }, + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-2', + }, + ], + }; + typeMetadataFixture = { + ...ClassMetadataFixtures.any, + constructorArguments: [ + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-1', + }, + ], + }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = getExtendedConstructorArguments( + optionsFixture, + baseTypeClassMetadataFixture, + typeMetadataFixture, + ); + }); + + it('should return expected metadata', () => { + expect(result).toBe(typeMetadataFixture.constructorArguments); + }); + }); + }); }); diff --git a/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.ts b/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.ts index dad279e9..192bed0f 100644 --- a/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.ts +++ b/packages/container/libraries/core/src/metadata/calculations/getExtendedConstructorArguments.ts @@ -8,7 +8,7 @@ export function getExtendedConstructorArguments( typeMetadata: ClassMetadata, ): ClassElementMetadata[] { const extendConstructorArguments: boolean = - options.extendConstructorArguments ?? false; + options.extendConstructorArguments ?? true; let extendedConstructorArguments: ClassElementMetadata[]; diff --git a/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.spec.ts b/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.spec.ts index 59b7bfc4..b08ff842 100644 --- a/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.spec.ts +++ b/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.spec.ts @@ -17,8 +17,46 @@ describe(getExtendedProperties.name, () => { type: class {}, }; - baseTypeClassMetadataFixture = ClassMetadataFixtures.any; - typeMetadataFixture = ClassMetadataFixtures.any; + baseTypeClassMetadataFixture = { + ...ClassMetadataFixtures.any, + properties: new Map([ + [ + 'property-1', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'base-service-identifier-1', + }, + ], + [ + 'property-2', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'base-service-identifier-2', + }, + ], + ]), + }; + typeMetadataFixture = { + ...ClassMetadataFixtures.any, + properties: new Map([ + [ + 'property-1', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-1', + }, + ], + ]), + }; }); describe('when called', () => { @@ -33,12 +71,35 @@ describe(getExtendedProperties.name, () => { }); it('should return expected metadata', () => { - expect(result).toBe(typeMetadataFixture.properties); + expect(result).toStrictEqual( + new Map([ + [ + 'property-1', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-1', + }, + ], + [ + 'property-2', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'base-service-identifier-2', + }, + ], + ]), + ); }); }); }); - describe('having options with extendProperties', () => { + describe('having options with extendProperties true', () => { let optionsFixture: InjectFromOptions; let baseTypeClassMetadataFixture: ClassMetadata; let typeMetadataFixture: ClassMetadata; @@ -130,4 +191,74 @@ describe(getExtendedProperties.name, () => { }); }); }); + + describe('having options with extendProperties false', () => { + let optionsFixture: InjectFromOptions; + let baseTypeClassMetadataFixture: ClassMetadata; + let typeMetadataFixture: ClassMetadata; + + beforeAll(() => { + optionsFixture = { + extendProperties: false, + type: class {}, + }; + + baseTypeClassMetadataFixture = { + ...ClassMetadataFixtures.any, + properties: new Map([ + [ + 'property-1', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'base-service-identifier-1', + }, + ], + [ + 'property-2', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'base-service-identifier-2', + }, + ], + ]), + }; + typeMetadataFixture = { + ...ClassMetadataFixtures.any, + properties: new Map([ + [ + 'property-1', + { + kind: ClassElementMetadataKind.singleInjection, + name: undefined, + optional: false, + tags: new Map(), + value: 'service-identifier-1', + }, + ], + ]), + }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = getExtendedProperties( + optionsFixture, + baseTypeClassMetadataFixture, + typeMetadataFixture, + ); + }); + + it('should return expected metadata', () => { + expect(result).toBe(typeMetadataFixture.properties); + }); + }); + }); }); diff --git a/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.ts b/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.ts index 186ca82a..5d4012a8 100644 --- a/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.ts +++ b/packages/container/libraries/core/src/metadata/calculations/getExtendedProperties.ts @@ -8,7 +8,7 @@ export function getExtendedProperties( baseTypeClassMetadata: ClassMetadata, typeMetadata: ClassMetadata, ): Map { - const extendProperties: boolean = options.extendProperties ?? false; + const extendProperties: boolean = options.extendProperties ?? true; let extendedProperties: Map;