From 7ac75a6c5269e703263954dfb0f0f1989f311ce0 Mon Sep 17 00:00:00 2001 From: Addison Beck Date: Fri, 12 Sep 2025 07:04:13 -0400 Subject: [PATCH] refactor(libs): consolidate messaging-internal into messaging library (#16386) This change eliminates the circular dependency between messaging and messaging-internal libraries by merging them into a single messaging library. Previously, messaging-internal imported from @bitwarden/messaging while messaging tried to import from @bitwarden/messaging-internal, creating an unresolvable circular dependency. This also violated Nx best practices by using cross-library file includes in tsconfig.lib.json. Changes made: - Moved all messaging-internal code (SubjectMessageSender, helpers, tests) into libs/messaging/src/ - Updated all imports to use relative paths instead of @bitwarden/messaging imports - Removed the entire messaging-internal library and its configuration files - Updated external references in apps/browser to import from @bitwarden/messaging - Fixed libs/messaging/tsconfig.lib.json to use standard src/**/*.ts pattern - Updated libs/common internal.ts to re-export from messaging instead of messaging-internal The messaging library now exports both public APIs and internal implementations, which is a cleaner architecture than maintaining two separate libraries with circular dependencies. Fixes rootDir configuration issues identified in the Nx library systematic fix project. --- .github/CODEOWNERS | 1 - .../sync/sync-service.listener.spec.ts | 2 +- jest.config.js | 1 - .../common/src/platform/messaging/internal.ts | 2 +- libs/messaging-internal/README.md | 5 --- libs/messaging-internal/eslint.config.mjs | 3 -- libs/messaging-internal/jest.config.js | 10 ------ libs/messaging-internal/package.json | 11 ------- libs/messaging-internal/project.json | 33 ------------------- libs/messaging-internal/src/index.ts | 5 --- .../src/messaging-internal.spec.ts | 8 ----- libs/messaging-internal/tsconfig.eslint.json | 6 ---- libs/messaging-internal/tsconfig.json | 13 -------- libs/messaging-internal/tsconfig.lib.json | 10 ------ libs/messaging-internal/tsconfig.spec.json | 10 ------ .../src/helpers.spec.ts | 4 +-- .../src/helpers.ts | 3 +- libs/messaging/src/index.ts | 4 +++ .../src/subject-message.sender.spec.ts | 3 +- .../src/subject-message.sender.ts | 4 +-- libs/messaging/tsconfig.lib.json | 8 +---- tsconfig.base.json | 1 - 22 files changed, 14 insertions(+), 133 deletions(-) delete mode 100644 libs/messaging-internal/README.md delete mode 100644 libs/messaging-internal/eslint.config.mjs delete mode 100644 libs/messaging-internal/jest.config.js delete mode 100644 libs/messaging-internal/package.json delete mode 100644 libs/messaging-internal/project.json delete mode 100644 libs/messaging-internal/src/index.ts delete mode 100644 libs/messaging-internal/src/messaging-internal.spec.ts delete mode 100644 libs/messaging-internal/tsconfig.eslint.json delete mode 100644 libs/messaging-internal/tsconfig.json delete mode 100644 libs/messaging-internal/tsconfig.lib.json delete mode 100644 libs/messaging-internal/tsconfig.spec.json rename libs/{messaging-internal => messaging}/src/helpers.spec.ts (92%) rename libs/{messaging-internal => messaging}/src/helpers.ts (81%) rename libs/{messaging-internal => messaging}/src/subject-message.sender.spec.ts (96%) rename libs/{messaging-internal => messaging}/src/subject-message.sender.ts (83%) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 30d84547b1..0adead2928 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -96,7 +96,6 @@ libs/storage-core @bitwarden/team-platform-dev libs/logging @bitwarden/team-platform-dev libs/storage-test-utils @bitwarden/team-platform-dev libs/messaging @bitwarden/team-platform-dev -libs/messaging-internal @bitwarden/team-platform-dev libs/serialization @bitwarden/team-platform-dev libs/guid @bitwarden/team-platform-dev libs/client-type @bitwarden/team-platform-dev diff --git a/apps/browser/src/platform/sync/sync-service.listener.spec.ts b/apps/browser/src/platform/sync/sync-service.listener.spec.ts index 383586c0cd..ed0af15415 100644 --- a/apps/browser/src/platform/sync/sync-service.listener.spec.ts +++ b/apps/browser/src/platform/sync/sync-service.listener.spec.ts @@ -4,7 +4,7 @@ import { Subject, firstValueFrom } from "rxjs"; import { LogService } from "@bitwarden/common/platform/abstractions/log.service"; import { MessageListener, MessageSender } from "@bitwarden/common/platform/messaging"; import { SyncService } from "@bitwarden/common/vault/abstractions/sync/sync.service.abstraction"; -import { tagAsExternal } from "@bitwarden/messaging-internal"; +import { tagAsExternal } from "@bitwarden/messaging"; import { FullSyncMessage } from "./foreground-sync.service"; import { FULL_SYNC_FINISHED, SyncServiceListener } from "./sync-service.listener"; diff --git a/jest.config.js b/jest.config.js index 9be54e9999..e5aeb53617 100644 --- a/jest.config.js +++ b/jest.config.js @@ -41,7 +41,6 @@ module.exports = { "/libs/key-management/jest.config.js", "/libs/key-management-ui/jest.config.js", "/libs/logging/jest.config.js", - "/libs/messaging-internal/jest.config.js", "/libs/messaging/jest.config.js", "/libs/node/jest.config.js", "/libs/platform/jest.config.js", diff --git a/libs/common/src/platform/messaging/internal.ts b/libs/common/src/platform/messaging/internal.ts index 9fe261f226..0d7abe256e 100644 --- a/libs/common/src/platform/messaging/internal.ts +++ b/libs/common/src/platform/messaging/internal.ts @@ -1 +1 @@ -export * from "@bitwarden/messaging-internal"; +export { SubjectMessageSender, tagAsExternal, getCommand } from "@bitwarden/messaging"; diff --git a/libs/messaging-internal/README.md b/libs/messaging-internal/README.md deleted file mode 100644 index a2f36138ad..0000000000 --- a/libs/messaging-internal/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# messaging-internal - -Owned by: platform - -Internal details to accompany @bitwarden/messaging this library should not be consumed in non-platform code. diff --git a/libs/messaging-internal/eslint.config.mjs b/libs/messaging-internal/eslint.config.mjs deleted file mode 100644 index 9c37d10e3f..0000000000 --- a/libs/messaging-internal/eslint.config.mjs +++ /dev/null @@ -1,3 +0,0 @@ -import baseConfig from "../../eslint.config.mjs"; - -export default [...baseConfig]; diff --git a/libs/messaging-internal/jest.config.js b/libs/messaging-internal/jest.config.js deleted file mode 100644 index 152244f660..0000000000 --- a/libs/messaging-internal/jest.config.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - displayName: "messaging-internal", - preset: "../../jest.preset.js", - testEnvironment: "node", - transform: { - "^.+\\.[tj]s$": ["ts-jest", { tsconfig: "/tsconfig.spec.json" }], - }, - moduleFileExtensions: ["ts", "js", "html"], - coverageDirectory: "../../coverage/libs/messaging-internal", -}; diff --git a/libs/messaging-internal/package.json b/libs/messaging-internal/package.json deleted file mode 100644 index 7a0a13d2d6..0000000000 --- a/libs/messaging-internal/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "@bitwarden/messaging-internal", - "version": "0.0.1", - "description": "Internal details to accompany @bitwarden/messaging this library should not be consumed in non-platform code.", - "private": true, - "type": "commonjs", - "main": "dist/index.js", - "types": "dist/index.d.ts", - "license": "GPL-3.0", - "author": "platform" -} diff --git a/libs/messaging-internal/project.json b/libs/messaging-internal/project.json deleted file mode 100644 index ad55cde5c2..0000000000 --- a/libs/messaging-internal/project.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "messaging-internal", - "$schema": "../../node_modules/nx/schemas/project-schema.json", - "sourceRoot": "libs/messaging-internal/src", - "projectType": "library", - "tags": [], - "targets": { - "build": { - "executor": "@nx/js:tsc", - "outputs": ["{options.outputPath}"], - "options": { - "outputPath": "dist/libs/messaging-internal", - "main": "libs/messaging-internal/src/index.ts", - "tsConfig": "libs/messaging-internal/tsconfig.lib.json", - "assets": ["libs/messaging-internal/*.md"] - } - }, - "lint": { - "executor": "@nx/eslint:lint", - "outputs": ["{options.outputFile}"], - "options": { - "lintFilePatterns": ["libs/messaging-internal/**/*.ts"] - } - }, - "test": { - "executor": "@nx/jest:jest", - "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], - "options": { - "jestConfig": "libs/messaging-internal/jest.config.js" - } - } - } -} diff --git a/libs/messaging-internal/src/index.ts b/libs/messaging-internal/src/index.ts deleted file mode 100644 index 08763d48bc..0000000000 --- a/libs/messaging-internal/src/index.ts +++ /dev/null @@ -1,5 +0,0 @@ -// Built in implementations -export { SubjectMessageSender } from "./subject-message.sender"; - -// Helpers meant to be used only by other implementations -export { tagAsExternal, getCommand } from "./helpers"; diff --git a/libs/messaging-internal/src/messaging-internal.spec.ts b/libs/messaging-internal/src/messaging-internal.spec.ts deleted file mode 100644 index b2b50a218b..0000000000 --- a/libs/messaging-internal/src/messaging-internal.spec.ts +++ /dev/null @@ -1,8 +0,0 @@ -import * as lib from "./index"; - -describe("messaging-internal", () => { - // This test will fail until something is exported from index.ts - it("should work", () => { - expect(lib).toBeDefined(); - }); -}); diff --git a/libs/messaging-internal/tsconfig.eslint.json b/libs/messaging-internal/tsconfig.eslint.json deleted file mode 100644 index 3daf120441..0000000000 --- a/libs/messaging-internal/tsconfig.eslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "files": [], - "include": ["src/**/*.ts", "src/**/*.js"], - "exclude": ["**/build", "**/dist"] -} diff --git a/libs/messaging-internal/tsconfig.json b/libs/messaging-internal/tsconfig.json deleted file mode 100644 index 62ebbd9464..0000000000 --- a/libs/messaging-internal/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "extends": "../../tsconfig.base.json", - "files": [], - "include": [], - "references": [ - { - "path": "./tsconfig.lib.json" - }, - { - "path": "./tsconfig.spec.json" - } - ] -} diff --git a/libs/messaging-internal/tsconfig.lib.json b/libs/messaging-internal/tsconfig.lib.json deleted file mode 100644 index 9cbf673600..0000000000 --- a/libs/messaging-internal/tsconfig.lib.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "declaration": true, - "types": ["node"] - }, - "include": ["src/**/*.ts"], - "exclude": ["jest.config.js", "src/**/*.spec.ts"] -} diff --git a/libs/messaging-internal/tsconfig.spec.json b/libs/messaging-internal/tsconfig.spec.json deleted file mode 100644 index 1275f148a1..0000000000 --- a/libs/messaging-internal/tsconfig.spec.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "outDir": "../../dist/out-tsc", - "module": "commonjs", - "moduleResolution": "node10", - "types": ["jest", "node"] - }, - "include": ["jest.config.ts", "src/**/*.test.ts", "src/**/*.spec.ts", "src/**/*.d.ts"] -} diff --git a/libs/messaging-internal/src/helpers.spec.ts b/libs/messaging/src/helpers.spec.ts similarity index 92% rename from libs/messaging-internal/src/helpers.spec.ts rename to libs/messaging/src/helpers.spec.ts index 5a97ff959c..35bc07b8ca 100644 --- a/libs/messaging-internal/src/helpers.spec.ts +++ b/libs/messaging/src/helpers.spec.ts @@ -1,8 +1,8 @@ import { Subject, firstValueFrom } from "rxjs"; -import { CommandDefinition, isExternalMessage, Message } from "@bitwarden/messaging"; - import { getCommand, tagAsExternal } from "./helpers"; +import { isExternalMessage } from "./is-external-message"; +import { CommandDefinition, Message } from "./types"; describe("helpers", () => { describe("getCommand", () => { diff --git a/libs/messaging-internal/src/helpers.ts b/libs/messaging/src/helpers.ts similarity index 81% rename from libs/messaging-internal/src/helpers.ts rename to libs/messaging/src/helpers.ts index 00231b455b..e505f55852 100644 --- a/libs/messaging-internal/src/helpers.ts +++ b/libs/messaging/src/helpers.ts @@ -1,6 +1,7 @@ import { map } from "rxjs"; -import { CommandDefinition, EXTERNAL_SOURCE_TAG } from "@bitwarden/messaging"; +import { EXTERNAL_SOURCE_TAG } from "./is-external-message"; +import { CommandDefinition } from "./types"; export const getCommand = ( commandDefinition: CommandDefinition> | string, diff --git a/libs/messaging/src/index.ts b/libs/messaging/src/index.ts index 9090ff581c..8bb8212e66 100644 --- a/libs/messaging/src/index.ts +++ b/libs/messaging/src/index.ts @@ -2,3 +2,7 @@ export { MessageListener } from "./message.listener"; export { MessageSender } from "./message.sender"; export { Message, CommandDefinition } from "./types"; export { isExternalMessage, EXTERNAL_SOURCE_TAG } from "./is-external-message"; + +// Internal implementations +export { SubjectMessageSender } from "./subject-message.sender"; +export { tagAsExternal, getCommand } from "./helpers"; diff --git a/libs/messaging-internal/src/subject-message.sender.spec.ts b/libs/messaging/src/subject-message.sender.spec.ts similarity index 96% rename from libs/messaging-internal/src/subject-message.sender.spec.ts rename to libs/messaging/src/subject-message.sender.spec.ts index e3e5305d1b..04c7eaa59c 100644 --- a/libs/messaging-internal/src/subject-message.sender.spec.ts +++ b/libs/messaging/src/subject-message.sender.spec.ts @@ -1,8 +1,7 @@ import { bufferCount, firstValueFrom, Subject } from "rxjs"; -import { CommandDefinition, Message } from "@bitwarden/messaging"; - import { SubjectMessageSender } from "./subject-message.sender"; +import { CommandDefinition, Message } from "./types"; describe("SubjectMessageSender", () => { const subject = new Subject>(); diff --git a/libs/messaging-internal/src/subject-message.sender.ts b/libs/messaging/src/subject-message.sender.ts similarity index 83% rename from libs/messaging-internal/src/subject-message.sender.ts rename to libs/messaging/src/subject-message.sender.ts index e8df5913b0..ebbd821dcb 100644 --- a/libs/messaging-internal/src/subject-message.sender.ts +++ b/libs/messaging/src/subject-message.sender.ts @@ -1,8 +1,8 @@ import { Subject } from "rxjs"; -import { CommandDefinition, Message, MessageSender } from "@bitwarden/messaging"; - import { getCommand } from "./helpers"; +import { MessageSender } from "./message.sender"; +import { CommandDefinition, Message } from "./types"; export class SubjectMessageSender implements MessageSender { constructor(private readonly messagesSubject: Subject>>) {} diff --git a/libs/messaging/tsconfig.lib.json b/libs/messaging/tsconfig.lib.json index 1f3b89d988..9cbf673600 100644 --- a/libs/messaging/tsconfig.lib.json +++ b/libs/messaging/tsconfig.lib.json @@ -5,12 +5,6 @@ "declaration": true, "types": ["node"] }, - "include": [ - "src/**/*.ts", - "../messaging-internal/src/subject-message.sender.spec.ts", - "../messaging-internal/src/subject-message.sender.ts", - "../messaging-internal/src/helpers.spec.ts", - "../messaging-internal/src/helpers.ts" - ], + "include": ["src/**/*.ts"], "exclude": ["jest.config.js", "src/**/*.spec.ts"] } diff --git a/tsconfig.base.json b/tsconfig.base.json index 3f903558f7..2d105d4263 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -45,7 +45,6 @@ "@bitwarden/key-management-ui": ["./libs/key-management-ui/src"], "@bitwarden/logging": ["libs/logging/src"], "@bitwarden/messaging": ["libs/messaging/src/index.ts"], - "@bitwarden/messaging-internal": ["libs/messaging-internal/src/index.ts"], "@bitwarden/node/*": ["./libs/node/src/*"], "@bitwarden/nx-plugin": ["libs/nx-plugin/src/index.ts"], "@bitwarden/platform": ["./libs/platform/src"],