/** * @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; 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);