# Priority Queue Challenge ## Context In this challenge, you'll be implementing an in-memory priority queue in TypeScript. Your priority queue will need to support a few operations: * Adding an item with a given priority * Removing the item with the highest priority and returning it * Peeking at the item with the highest priority without removing it Your system will demonstrate some nuanced behaviors: * When attempting to pop or peek at an item and the queue is empty, **the operation must block** (via promise resolution) until an item is available. * The priority of items dictates the order of popping or peeking; lower numerical values represent higher priorities. * If two items have the same priority, the first to be pushed will be first to be popped A detailed specification of the queue's expected behavior is provided in the TypeScript interface you will implement (see Getting Started, below). ## Expectations This priority queue is envisioned as an in-memory construct for the scope of this exercise, without the complexity of persistence, error handling, or scalability considerations expected in a production environment. This is a focused exercise to evaluate your grasp of asynchronous programming patterns and data structure manipulation in TypeScript. Your focus should be on completing as much of the exericse as possible before refactoring for pleasing code aesthetics or performance. ## Getting Started Please visit the [TypeScript Playground][1], where you'll find an interface for the priority queue (PriorityQueue) along with a basic, unimplemented class (`InMemoryPriorityQueue`) conforming to this interface. Additionally, several tests are provided to guide you through implementing the queue's functionality. We recommend letting the tests drive your implementation, one step at a time. Good luck! [1]: https://www.typescriptlang.org/play/?ts=5.4.3#code/PQKhCgAIUgRBTAZgSwHbwM6QPYAd4BOAhgC7LapaLYGRGS4HlMkCekAjgK7w+QAWRVABMANmgDmkZCXgBbLNkSQ2+SAAMAKuoB0kAJKyFdAvCgxGzGcgBe8YZABGRDPZyo6kVFzmFkAYyJRSAA3IJ4AGkgAdxl+SFFsaMIvH0dCLDRhANJJAWQJfkJzBiYaGVYdc2BwNFkCRCJ-eEgABTKWVgBFHh4AHk0APkgAbyhIUAhIaZgAQWFhLCFpIxi4ugwMbH9kUjdLcrYVbBUizl74KunocehIAAFcImI5UqsjgFpIADkfP0DgmFRHxqLQZPI3odKpAADJJFJAniZEQ5WS3GDTfgFIq0A6dK4zB5PF4rCFfTRncGvJQqVhqLTqY50BZMkhnbi8S7omrTXBcDD8AAUeIqAC5UnJ0gQolTxZoAJTikLYZDCADc4HGk3RkAASvJsCFMHQRJBTCQuARKKcWljCpgSJDOqTXogCNhXmyWhyeASbtcYPdzZbrbMNO0PchXIzTFtRCE8rE2TaXThlKoWgy1smvfl7RgSDreR0KmmXciUz7LpAKZmI3Io-BGbFRMFUNhHbHsPGWlxUGRgl6i+dOZB-BQSEQ0EsPFSmbg8H6QDyGHhBYq2u6G64BoMNVqwDr9SQmPAjVhc3aigWnaW50n+NguJ2DQnUFIZEudUH4BarVgw3UetGxjTBuzfKQHxTOcaQzDRtGzeIhwDa4rwdW8jhpKkK1zKs9FrcMtxAtZWy8DszTAnthz7AdKwuMcJyna1ljnEgTnweAAGs6BIJcVw4zj13FYCdyGDUAF9NX8UQXCwfRUAAWQNAhWHad5uguXdpDkXBRHkeB+ywNSoR6TktLGXkuEccR-AYfkhRFNhxW8SVCCiJ5WESIhhDlDdlVVUZblOd1oi8eBQoAUQId0CEFAByPkBWkLB20dZAdL03x+3sOL5Q1aZJPGPlrICVdcCEzdI1E4YLOuNkQrCyLopoeKF1wZKyLSjL9Oy4RcvyyBCsskrbIEiqRPgcygvqpJGsgKKYta+AuI61LtN0nrZD6vLxkkwrgGAFQHQABgARkgYQDUoE89iwRKsXfE0XSiL0PDa3A8hkF6ije5bOMkcAXFYVBbMQPt-DICgjoLM710C6Zx2uzhIAAXjm+SlLkGhVJLNhTJ4dcBo4HR7sFU6oji6hsH6zUEYoG96DRohoinR1ibawnxmQZRBXoABCFG0cp7BqfleG6v4Br0Caxb1BQAgGc2QhIY8RpkD0hxecgAWhap3KomiHEWkZtGABIRiIcT1B2grac4En7LJinnAIGnxkRm9HFRugWZke2xpthikdspnfbZkm-s5umkYcUPWf9yOdvd+nHSaC0gm9gApABlAB5b4dALJh3251hBQAbUcKJ-CiYQAF1A49x14AAD3wCHvbi8uACIXe7iJe+efvB4Ibu67i-dpm5yBeYhrgM51yBW-bkgxdq6YZtC6X5ua2L1FcRGHFk5XyFVqcNfFWf0+CQW0eX+AIflA2jaXtuH5IFHzfviHxKiNP59EJ-C2c8ghW0DntTUB1oYkGOgAJkgAKJIF5BCOlwvRdIghzzSA8PQAAYvoXBudIByCEOgMEyggjBGwgIIgRpwBQNVAZMgAIMKsEBhgYGoNwYq2gXAuGtUm7IzRtvDGykcbqXxvAKO-tHbk0gHFIgNNpjs1kc7JRMiBRO3kf4N20cbwt29szeO7M1yNxTpAdgcc-YmPKmYpGNhDFh39qYyeQcGYgJvpAHO+dC4nkkKXCuLcoisCiDYBuA1BHf0dELHuRBh6OGHv4MeE87bTyvgA7WgtX4rzXtNSWs1t4LRanLZACtU5KwIDwtWF8Z7-wzrfbJ788qNIhkAqJv86AeKAXU0QYCBoQPoYdWQMMADMCDHzRGQS0dKTwO40kcuwKGuYMG0OYGWNq7DOGQDBiDHhwyYEjP4cnJGHBvYiMUmI4ynRJHSJUZo2BFNFGBzuUKEZajnkO00XIuKOik56MdAYqx4cOZ2JvJYn2xiSYuOOTeBxQLnG2NcYInpWc84FyLv4xAZdy5BIsaE8JMLm5vw7jE7uSSB5xIHgk8eri0kosXlE3J1xgoFPCjvWW8tFauEqafbZ597CXxRQ0xlaoWkfy-sSkgHSendI8X03a4B9pDJOgAFnGUggQs1cyMCqi0YMVo3Bug9GVC62BjRrS7D2SANF1Y2kGSOPgiNJzTk8BgLgMgiDWWmasNiJrBTIB0NWG1wQti+AoC0AEog7r2XlJskG2zuG8v2cdFVRz-lCPRhcrGKkrkVBuX8txjow55DRjY25ULEXjDLR8kFRMK2c3GHpVB6V7C52fN7RoUb4ADRPOwdeEK-YTR0MQZoFdi3viiNvCagpBQAH0oimAAFZNNRsMVwJBNAtqfCQQUS735RAAKzHWOvKeUBKCpjlIP4eIgp4BMrqi24QbbokqAIDwfpqSeZ8zIL4J9z570b3yVvNlRTYpBWmN3Tl5TuVVP5T5GeP7W3toaZ21wzTEFcFEA4NamC9WUSNA4OK46JBxVKLqpwSAaAtHunkFiRh+5BXAXbF5Wi4ot10a+vtQUjGDqIq4YdTQpHl2I5Otl0650LvgMux+q6EG-k3WG58u6pP7sgEek9Z7wGXpINemed7xaAaliB3egpu4HwoEfCpsH1b2FFYhhw26YiszyKCeRxHSM6u3C0X1lqjTdyY4VIG8adkQ15SQtAabOMGYHagk6p1pHiW07p29AGWXAZlsU5N51qn2AADqoC-vK224xe3RZ47FmGsCEtJZvfp-tm85qgcFOoZN8CcvCHy4V62H6SsqTK045NhytOBB07V1LDXCkmZaydMZ7XOsjHgEVwadtSv9vK7w1Nw2r1jeixN4zstk1qrmwVhbS2BnhdQOucYOhXozrFijGqQUPbdkuIkCQ8VEYSGIBaGSKsMDikoWWVgT5aD7KwLhhgx9tr9NjdMHQI3r0zv0w96Lz29I6De810gCR4AuEdOGoHIPoHg5cHymzHWTuLe67tHaQA