Files
Matthieu Riegler 263b819a75 refactor(devtools): prevent spamming the message bus
This commit adds some state on the bus to prevent sending unecessary messages to the main window.
2026-03-09 10:45:58 -07:00

65 lines
1.6 KiB
TypeScript

/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.dev/license
*/
import {AngularDetection} from '../../../protocol';
import {
appIsAngular,
appIsAngularInDevMode,
appIsAngularIvy,
appIsSupportedAngularVersion,
} from '../../../shared-utils';
import {getContentScriptUri, getDetectAngularScriptUri} from './comm-utils';
import {SamePageMessageBus} from './same-page-message-bus';
const detectAngularMessageBus = new SamePageMessageBus(
'[DetectAngular=>CS]',
getDetectAngularScriptUri(),
getContentScriptUri(),
);
let detectAngularTimeout: ReturnType<typeof setTimeout>;
function detectAngular(win: Window): void {
const isAngular = appIsAngular();
const isSupportedAngularVersion = appIsSupportedAngularVersion();
const isDebugMode = appIsAngularInDevMode();
const isIvy = appIsAngularIvy();
const detection: AngularDetection = {
isIvy,
isAngular,
isDebugMode,
isSupportedAngularVersion,
isAngularDevTools: true,
};
// For the background script to toggle the icon.
win.postMessage(detection, '*');
// For the content script to inject the backend.
detectAngularMessageBus.emit('detectAngular', [
{
isIvy,
isAngular,
isDebugMode,
isSupportedAngularVersion,
isAngularDevTools: true,
},
]);
detectAngularTimeout = setTimeout(() => {
detectAngular(win);
}, 1000);
}
detectAngularMessageBus.on('backendInstalled', (detection) => {
clearTimeout(detectAngularTimeout);
});
detectAngular(window);