تنفيذ نمط المراقب (Observer) مع دعم الأولويات والتصفية

TypeScript Hard classes

مهمة «تنفيذ نمط المراقب (Observer) مع دعم الأولويات والتصفية»

```html
أنشئ فئة `EventBus` التي تنفذ نمط المراقب (Observer). يجب أن تسمح بالاشتراك في الأحداث مع تحديد أولوية (عدد صحيح، كلما كان أصغر، كلما تم استدعاؤه مبكرًا) ومرشح اختياري (دالة تأخذ البيانات وتعيد 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'. يتم تجاهل أخطاء المعالجات، ولكن يتم عرض رسائلها في وحدة التحكم (لا يتم فحصها في الاختبارات).

أمثلة

مثال 1

الإدخال
2 Circle 0.0 0.0 5.0 Rectangle 3.0 2.0 7.0 0.0
الإخراج

مثال 2

الإدخال
2 Point 1.0 2.0 Circle 3.0 4.0 1.0
الإخراج
main.ts