From 2d74b3f45b43fcd5e127e68e524b61fa32309475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Sat, 11 Jan 2025 13:19:21 +0100 Subject: [PATCH] fix(core): update BindinActivation with missing context --- .changeset/nice-kiwis-exist.md | 5 +++++ .../src/binding/models/BindingActivation.ts | 6 ++++- .../actions/resolveBindingActivations.spec.ts | 10 +++++++++ .../actions/resolveBindingActivations.ts | 4 ++-- .../resolveBindingServiceActivations.spec.ts | 22 +++++++++++++++---- .../resolveBindingServiceActivations.ts | 12 ++++++++-- .../src/warrior/actions/upgradeWeapon.ts | 7 +++++- 7 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 .changeset/nice-kiwis-exist.md diff --git a/.changeset/nice-kiwis-exist.md b/.changeset/nice-kiwis-exist.md new file mode 100644 index 00000000..176d08ba --- /dev/null +++ b/.changeset/nice-kiwis-exist.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/core": patch +--- + +Updated BindingActivation with missing `ResolutionContext` param diff --git a/packages/container/libraries/core/src/binding/models/BindingActivation.ts b/packages/container/libraries/core/src/binding/models/BindingActivation.ts index e5af3b75..002627e7 100644 --- a/packages/container/libraries/core/src/binding/models/BindingActivation.ts +++ b/packages/container/libraries/core/src/binding/models/BindingActivation.ts @@ -1,3 +1,7 @@ +import { ResolutionContext } from '../../resolution/models/ResolutionContext'; import { Resolved } from '../../resolution/models/Resolved'; -export type BindingActivation = (injectable: T) => Resolved; +export type BindingActivation = ( + context: ResolutionContext, + injectable: T, +) => Resolved; diff --git a/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.spec.ts b/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.spec.ts index 11972e35..694e013e 100644 --- a/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.spec.ts +++ b/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.spec.ts @@ -4,6 +4,7 @@ jest.mock('./resolveBindingServiceActivations'); import { ConstantValueBindingFixtures } from '../../binding/fixtures/ConstantValueBindingFixtures'; import { ConstantValueBinding } from '../../binding/models/ConstantValueBinding'; +import { ResolutionContext } from '../models/ResolutionContext'; import { ResolutionParams } from '../models/ResolutionParams'; import { resolveBindingActivations } from './resolveBindingActivations'; import { resolveBindingServiceActivations } from './resolveBindingServiceActivations'; @@ -73,6 +74,7 @@ describe(resolveBindingActivations.name, () => { beforeAll(() => { onActivationMock = jest.fn(); paramsMock = { + context: Symbol() as unknown as jest.Mocked, getActivations: jest.fn(), getBindings: jest.fn(), } as Partial< @@ -113,6 +115,14 @@ describe(resolveBindingActivations.name, () => { jest.clearAllMocks(); }); + it('should call binding.onActivation()', () => { + expect(onActivationMock).toHaveBeenCalledTimes(1); + expect(onActivationMock).toHaveBeenCalledWith( + paramsMock.context, + resolvedValue, + ); + }); + it('should call resolveBindingServiceActivations()', () => { expect(resolveBindingServiceActivations).toHaveBeenCalledTimes(1); expect(resolveBindingServiceActivations).toHaveBeenCalledWith( diff --git a/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.ts b/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.ts index 27dd1c3e..1dc7d823 100644 --- a/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.ts +++ b/packages/container/libraries/core/src/resolution/actions/resolveBindingActivations.ts @@ -21,10 +21,10 @@ export function resolveBindingActivations( if (isPromise(activationResult)) { activationResult = activationResult.then( (resolved: SyncResolved): Resolved => - onActivation(resolved), + onActivation(params.context, resolved), ); } else { - activationResult = onActivation(activationResult); + activationResult = onActivation(params.context, activationResult); } } diff --git a/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.spec.ts b/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.spec.ts index 66343781..5b751c26 100644 --- a/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.spec.ts +++ b/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.spec.ts @@ -3,6 +3,7 @@ import { afterAll, beforeAll, describe, expect, it, jest } from '@jest/globals'; import { ServiceIdentifier } from '@inversifyjs/common'; import { BindingActivation } from '../../binding/models/BindingActivation'; +import { ResolutionContext } from '../models/ResolutionContext'; import { ResolutionParams } from '../models/ResolutionParams'; import { resolveBindingServiceActivations } from './resolveBindingServiceActivations'; @@ -14,6 +15,7 @@ describe(resolveBindingServiceActivations.name, () => { beforeAll(() => { paramsMock = { + context: Symbol() as unknown as jest.Mocked, getActivations: jest.fn(), } as Partial< jest.Mocked @@ -82,7 +84,10 @@ describe(resolveBindingServiceActivations.name, () => { it('should call activation', () => { expect(activationMock).toHaveBeenCalledTimes(1); - expect(activationMock).toHaveBeenCalledWith(valueFixture); + expect(activationMock).toHaveBeenCalledWith( + paramsMock.context, + valueFixture, + ); }); it('should return value', () => { @@ -125,7 +130,10 @@ describe(resolveBindingServiceActivations.name, () => { it('should call activation', () => { expect(activationMock).toHaveBeenCalledTimes(1); - expect(activationMock).toHaveBeenCalledWith(valueFixture); + expect(activationMock).toHaveBeenCalledWith( + paramsMock.context, + valueFixture, + ); }); it('should return value', () => { @@ -209,7 +217,10 @@ describe(resolveBindingServiceActivations.name, () => { it('should call activation', () => { expect(activationMock).toHaveBeenCalledTimes(1); - expect(activationMock).toHaveBeenCalledWith(valueFixture); + expect(activationMock).toHaveBeenCalledWith( + paramsMock.context, + valueFixture, + ); }); it('should return value', () => { @@ -252,7 +263,10 @@ describe(resolveBindingServiceActivations.name, () => { it('should call activation', () => { expect(activationMock).toHaveBeenCalledTimes(1); - expect(activationMock).toHaveBeenCalledWith(valueFixture); + expect(activationMock).toHaveBeenCalledWith( + paramsMock.context, + valueFixture, + ); }); it('should return value', () => { diff --git a/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.ts b/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.ts index 296a402a..c2f9358d 100644 --- a/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.ts +++ b/packages/container/libraries/core/src/resolution/actions/resolveBindingServiceActivations.ts @@ -18,18 +18,21 @@ export function resolveBindingServiceActivations( if (isPromise(value)) { return resolveBindingActivationsFromIteratorAsync( + params, value, activations[Symbol.iterator](), ); } return resolveBindingActivationsFromIterator( + params, value, activations[Symbol.iterator](), ); } function resolveBindingActivationsFromIterator( + params: ResolutionParams, value: SyncResolved, activationsIterator: Iterator>, ): Resolved { @@ -40,10 +43,11 @@ function resolveBindingActivationsFromIterator( while (activationIteratorResult.done !== true) { const nextActivatedValue: Resolved = - activationIteratorResult.value(activatedValue); + activationIteratorResult.value(params.context, activatedValue); if (isPromise(nextActivatedValue)) { return resolveBindingActivationsFromIteratorAsync( + params, nextActivatedValue, activationsIterator, ); @@ -58,6 +62,7 @@ function resolveBindingActivationsFromIterator( } async function resolveBindingActivationsFromIteratorAsync( + params: ResolutionParams, value: Promise, activationsIterator: Iterator>, ): Promise> { @@ -67,7 +72,10 @@ async function resolveBindingActivationsFromIteratorAsync( activationsIterator.next(); while (activationIteratorResult.done !== true) { - activatedValue = await activationIteratorResult.value(activatedValue); + activatedValue = await activationIteratorResult.value( + params.context, + activatedValue, + ); activationIteratorResult = activationsIterator.next(); } diff --git a/packages/container/tools/e2e-tests/src/warrior/actions/upgradeWeapon.ts b/packages/container/tools/e2e-tests/src/warrior/actions/upgradeWeapon.ts index baa4159d..bff25e6c 100644 --- a/packages/container/tools/e2e-tests/src/warrior/actions/upgradeWeapon.ts +++ b/packages/container/tools/e2e-tests/src/warrior/actions/upgradeWeapon.ts @@ -1,6 +1,11 @@ +import { ResolutionContext } from '@inversifyjs/core'; + import { Weapon } from '../models/Weapon'; -export function upgradeWeapon(weapon: Weapon): Weapon { +export function upgradeWeapon( + _context: ResolutionContext, + weapon: Weapon, +): Weapon { weapon.damage += 2; return weapon;