{"record":{"id":"b819b21f500aa967","repo":"bettercap/bettercap","slug":"in-this-configuration-angular-requires-zone-js","errorCode":null,"errorMessage":"In this configuration Angular requires Zone.js","messagePattern":"In this configuration Angular requires Zone\\.js","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"modules/ui/ui/vendor.js","lineNumber":57273,"sourceCode":"        this.onUnstable = new EventEmitter(false);\n        /**\n         * Notifies when there is no more microtasks enqueued in the current VM Turn.\n         * This is a hint for Angular to do change detection, which may enqueue more microtasks.\n         * For this reason this event can fire multiple times per VM Turn.\n         */\n        this.onMicrotaskEmpty = new EventEmitter(false);\n        /**\n         * Notifies when the last `onMicrotaskEmpty` has run and there are no more microtasks, which\n         * implies we are about to relinquish VM turn.\n         * This event gets called just once.\n         */\n        this.onStable = new EventEmitter(false);\n        /**\n         * Notifies that an error has been delivered.\n         */\n        this.onError = new EventEmitter(false);\n        if (typeof Zone == 'undefined') {\n            throw new Error(\"In this configuration Angular requires Zone.js\");\n        }\n        Zone.assertZonePatched();\n        var self = this;\n        self._nesting = 0;\n        self._outer = self._inner = Zone.current;\n        if (Zone['wtfZoneSpec']) {\n            self._inner = self._inner.fork(Zone['wtfZoneSpec']);\n        }\n        if (Zone['TaskTrackingZoneSpec']) {\n            self._inner = self._inner.fork(new Zone['TaskTrackingZoneSpec']);\n        }\n        if (enableLongStackTrace && Zone['longStackTraceZoneSpec']) {\n            self._inner = self._inner.fork(Zone['longStackTraceZoneSpec']);\n        }\n        forkInnerZoneWithAngularBehavior(self);\n    }\n    NgZone.isInAngularZone = function () { return Zone.current.get('isAngularZone') === true; };\n    NgZone.assertInAngularZone = function () {","sourceCodeStart":57255,"sourceCodeEnd":57291,"githubUrl":"https://github.com/bettercap/bettercap/blob/8eca2820f3c41d2004434ed5a291d87462caeeb7/modules/ui/ui/vendor.js#L57255-L57291","documentation":"NgZone construction asserts that Zone.js is present and has patched the browser APIs when Angular is configured to rely on zones (ngZone not set to 'noop'). Missing zone.js in this configuration breaks change detection triggering, so Angular throws immediately at bootstrap.","triggerScenarios":"Thrown at modules/ui/ui/vendor.js:57273 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Import zone.js (polyfills.ts) before bootstrapping Angular","If intentionally running zoneless, configure NgZone explicitly as 'noop' via provideZonelessChangeDetection / ngZone: 'noop'","Verify the build pipeline does not strip the zone.js polyfill"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"8eca2820f3c41d2004434ed5a291d87462caeeb7","analyzedAt":"2026-09-02T12:49:00.712Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-09T16:17:10.729Z"}