Upgrade `avatarMiddleware` to `polymiddleware` by compulim · Pull Request #5779 · microsoft/BotFramework-WebChat
packages/test/page-object/src/globals/testHelpers/createRunHookActivityMiddleware.js
Test harness: track/guard repeated hook execution during re-renders.
packages/test/page-object/src/globals/testHelpers/createDirectLineWithTranscript.js
Test helper: add optional activity patching hook for transcripts.
packages/test/page-object/src/globals/testHelpers/activityGrouping/ActivityGroupingSurface.js
Test helper: switch activity mutation from middleware to transcript patching.
packages/react-hooks/src/useMemoIterable.ts
New hook to memoize iterables via structural equality.
packages/react-hooks/src/useDebugDeps.ts
New debug deps hook moved into shared react-hooks package.
packages/react-hooks/src/index.ts
Export new hooks from react-hooks package.
packages/react-hooks/package.json
Add local/dev dependency wiring for base utils.
packages/core/src/utils/singleToArray.ts
Remove core-local
singleToArray (moved to base utils).
packages/core/src/types/OneOrMany.ts
Remove core-local OneOrMany (moved to base utils).
packages/core/src/index.ts
Re-export deprecated singleToArray/OneOrMany from base utils; tidy imports.
packages/core-debug-api/src/RestrictedDebugAPI.ts
ESLint disable cleanup for empty breakpoint function.
packages/component/src/index.ts
Point createCoreActivityMiddleware export to updated activity polymiddleware module.
packages/component/src/boot/internal.ts
Export internal avatar-styleOptions symbol type for portability.
packages/component/src/Utils/singleToArray.ts
Remove component-local singleToArray (moved to base utils).
packages/component/src/Transcript/hooks/useRenderActivityProps.ts
Use avatar polymiddleware render callback instead of legacy avatar renderer hook.
packages/component/src/Middleware/Avatar/createDefaultAvatarPolymiddleware.tsx
New default avatar polymiddleware factory driven by style options.
packages/component/src/Middleware/Avatar/DefaultAvatar.tsx
Convert default avatar from legacy middleware factory to memoized component export.
packages/component/src/Middleware/Activity/defaultActivityPolymiddleware.tsx
Bridge default legacy activity middleware into a polymiddleware (and keep compat export).
packages/component/src/Composer.tsx
Memoize middleware arrays; wire default activity/avatar via polymiddleware (lower priority than legacy).
packages/component/src/BasicTranscript.tsx
Memoize internal transcript component to reduce wasted renders.
packages/component/src/Activity/Avatar.tsx
Update imports to new DefaultAvatar component export.
packages/bundle/src/useComposerProps.ts
Allow optional attachment middleware arrays; avoid spreading undefined.
packages/bundle/src/boot/actual/middleware.ts
Export avatar polymiddleware APIs from bundle middleware entry.
packages/bundle/src/AddFullBundle.tsx
Use useMemoIterable to avoid rerenders when attachment middleware values are equivalent.
packages/bundle/package.json
Add dependency on internal react-hooks package.
packages/base/src/utils/singleToArray.ts
New shared deprecated singleToArray in base utils.
packages/base/src/utils/iterateEquals.ts
New iterable structural-equality helper.
packages/base/src/utils/iterateEquals.spec.ts
Unit tests for iterateEquals.
packages/base/src/utils/index.ts
Export new base utils (iterateEquals, OneOrMany, singleToArray).
packages/base/src/utils/OneOrMany.ts
New shared deprecated OneOrMany type in base utils.
packages/api/src/types/AvatarMiddleware.ts
Extend legacy avatar middleware request typing to preserve original polymiddleware request.
packages/api/src/providers/GroupActivities/GroupActivitiesComposer.tsx
Allow groupActivitiesMiddleware to be optional.
packages/api/src/middleware/useBuildRenderAvatarCallback.ts
API-layer patch to add styleOptions into internal avatar request (bridging constraint).
packages/api/src/middleware/AvatarPolymiddlewareProxy.tsx
API-layer proxy wrapper that injects style options into raw proxy.
packages/api/src/legacy/createAvatarPolymiddlewareFromLegacy.tsx
New legacy avatar middleware bridge into avatar polymiddleware.
packages/api/src/legacy/createActivityPolymiddlewareFromLegacy.tsx
Add debug metadata to activity polymiddleware bridged from legacy middleware.
packages/api/src/legacy/LegacyActivityBridge.tsx
Add displayName for legacy activity bridge component.
packages/api/src/hooks/useCreateAvatarRenderer.ts
Deprecate legacy avatar renderer hook; implement via avatar polymiddleware callback.
packages/api/src/hooks/internal/useDebugDeps.js
Remove old API-local debug deps hook (moved to react-hooks package).
packages/api/src/hooks/internal/WebChatAPIContext.ts
Remove legacy avatarRenderer from API context typing.
packages/api/src/hooks/Composer.tsx
Prioritize legacy middleware before polymiddleware; bridge legacy avatar middleware into polymiddleware.
packages/api/src/boot/middleware.ts
Export avatar polymiddleware APIs and legacy bridge factory from API boot middleware entry.
packages/api/src/boot/internal.ts
Export internal avatar styleOptions symbol from api-middleware.
packages/api-middleware/src/private/templatePolymiddleware.tsx
Attach debug metadata (name/enhancer) to templated polymiddleware factories.
packages/api-middleware/src/legacy/avatarMiddleware.ts
Introduce legacy avatar middleware typings/symbol for bridging.
packages/api-middleware/src/legacy.ts
Export legacy avatar middleware types from api-middleware.
packages/api-middleware/src/index.ts
Export avatar polymiddleware APIs and legacy avatar symbol from api-middleware.
packages/api-middleware/src/avatarPolymiddleware.tsx
Add avatar polymiddleware implementation (provider/proxy/extract/build-render).
packages/api-middleware/src/PolymiddlewareComposer.tsx
Add avatar polymiddleware provider to composer; switch memoization to useMemoIterable.
packages/api-middleware/package.json
Adjust watch inputs for notify-build script.
package-lock.json
Lockfile updates for new internal package dependency wiring.
docs/MIDDLEWARE.md
Document avatar polymiddleware support and update priority rules.
tests/html2/transcript/legacyActivityMiddleware.reactionButtons.html
Refactor legacy activity middleware test for clearer wrapping logic.
tests/html2/timestamp/attachmentSendTimeout.html
Guard against repeated execution via updated RunHook helper.
tests/html2/scrollToEndButton/scrollToEndButton.persistWhileCallingUseScrollTo.html
Modernize test harness usage; wait-for assertion stabilization.
tests/html2/middleware/avatar/useBuildRenderAvatarCallback.html.snap-1.png
New snapshot for avatar build-render-callback test.
tests/html2/middleware/avatar/useBuildRenderAvatarCallback.html
New test verifying useBuildRenderAvatarCallback behavior with legacy + polymiddleware.
tests/html2/middleware/avatar/renderProxy.html.snap-1.png
New snapshot for avatar proxy rendering test.
tests/html2/middleware/avatar/renderProxy.html
New test verifying <AvatarPolymiddlewareProxy> behavior with legacy + polymiddleware.
tests/html2/middleware/avatar/polymiddleware/delete.html
New test: polymiddleware deletes avatar for specific activities.
tests/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html.snap-2.png
Snapshot for default avatar behavior after styleOptions change.
tests/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html.snap-1.png
Snapshot for default avatar behavior baseline.
tests/html2/middleware/avatar/polymiddleware/defaultAvatar.styleOptions.html
New test: default avatar responds to styleOptions changes.
tests/html2/middleware/avatar/polymiddleware/decorate.html
New test: polymiddleware decorates avatar output.
tests/html2/middleware/avatar/polymiddleware/changing.html
New test: toggling polymiddleware on/off at runtime.
tests/html2/middleware/avatar/polymiddleware/addOrReplace.html
New test: polymiddleware adds/replaces avatar output for certain roles.
tests/html2/middleware/avatar/legacyAvatarMiddleware/styleOptions.html
New test: legacy avatar middleware receives styleOptions and reacts to changes.
tests/html2/middleware/avatar/legacyAvatarMiddleware/delete.html
New test: legacy avatar middleware deletes avatar for certain roles.
tests/html2/middleware/avatar/legacyAvatarMiddleware/decorate.html
New test: legacy avatar middleware decorates avatar output.
tests/html2/middleware/avatar/legacyAvatarMiddleware/changing.html
New test: toggling legacy avatar middleware on/off at runtime.
tests/html2/middleware/avatar/legacyAvatarMiddleware/addOrReplace.html
New test: legacy avatar middleware adds/replaces avatar output.
tests/html2/middleware/avatar/backwardCompatibility.html
New test: legacy avatar middleware priority over polymiddleware for compatibility.
tests/html2/activityGrouping/activityGrouping.legacyActivityMiddleware.skip.html
Mark failing legacy activity middleware test with explanatory skip rationale.
CHANGELOG.md
Changelog entries for avatarMiddleware deprecation + polymiddleware support + rerender fix.
AGENTS.md
Update contributor guidance (immutability, validation, tooling/testing conventions).
.github/workflows/pull-request-validation.yml
Update CI runner matrix (macOS label change).
.github/agents/polymiddleware-promoter.agent.md
Add agent guidance for upgrading middleware to polymiddleware.
.eslintrc.yml
Broaden unused-args ignore pattern for underscore-prefixed args.