यहाँ रूसी से हिंदी में अनुवादित प्रोग्रामिंग कार्य का टेक्स्ट है: प्राथमिकताओं और फ़िल्टरिंग के साथ ऑब्ज़र्वर (Observer) पैटर्न का कार्यान्वयन
कार्य «यहाँ रूसी से हिंदी में अनुवादित प्रोग्रामिंग कार्य का टेक्स्ट है: प्राथमिकताओं और फ़िल्टरिंग के साथ ऑब्ज़र्वर (Observer) पैटर्न का कार्यान्वयन»
कक्षा `EventBus` बनाएं, जो प्रेक्षक पैटर्न (Observer pattern) को लागू करता है। इसे प्राथमिकता (पूर्णांक, जितना छोटा होगा, उतनी जल्दी कॉल होगा) और वैकल्पिक फ़िल्टर (एक फ़ंक्शन जो डेटा प्राप्त करता है और true लौटाता है यदि हैंडलर को कॉल किया जाना चाहिए) के साथ ईवेंट की सदस्यता लेने की अनुमति देनी चाहिए। ईवेंट प्रकाशित करते समय, हैंडलर प्राथमिकता के क्रम में कॉल किए जाते हैं, केवल तभी जब फ़िल्टर (यदि निर्दिष्ट हो) true लौटाता है। हैंडलर को आईडी द्वारा अनसब्सक्राइब किया जा सकता है। विधियों को लागू करें: `subscribe(event: string, handler: Function, priority: number = 0, filter?: (data: any) => boolean): string` (सदस्यता आईडी लौटाता है), `unsubscribe(id: string): void`, `publish(event: string, data: any): void`। यदि हैंडलर को कॉल करते समय कोई अपवाद होता है, तो उसे पकड़ा जाना चाहिए और कंसोल में प्रदर्शित किया जाना चाहिए, लेकिन अन्य हैंडलर के निष्पादन को बाधित नहीं करना चाहिए। इनपुट डेटा: कमांड का अनुक्रम (subscribe, unsubscribe, publish)। आउटपुट: कमांड निष्पादन का परिणाम (publish के लिए — कंसोल के माध्यम से)।
```
इनपुट प्रारूप
निर्देशों का क्रम, प्रत्येक एक अलग पंक्ति पर। निर्देश: subscribe <event> <priority> [filter], unsubscribe <id>, publish <event> <data>। subscribe के लिए: event — स्ट्रिंग, priority — पूर्णांक, filter — वैकल्पिक स्ट्रिंग जिसमें फ़िल्टर कोड हो (जैसे, 'data>5')। publish के लिए: event — स्ट्रिंग, data — JSON मान (संख्या, स्ट्रिंग, ऑब्जेक्ट)।
आउटपुट प्रारूप
प्रत्येक publish कमांड के लिए, हैंडलर के कार्य का परिणाम उनके कॉल किए जाने के क्रम में प्रदर्शित होता है: प्रत्येक नई पंक्ति में 'Handler <id> called with <data>' प्रारूप की एक पंक्ति। यदि कोई हैंडलर नहीं है — 'No handlers'। हैंडलर की त्रुटियों को अनदेखा किया जाता है, लेकिन उनके संदेश कंसोल में प्रदर्शित होते हैं (परीक्षणों में जाँच नहीं की जाती)।