{"id":27261698,"url":"https://github.com/glebmachine/until-destroy","last_synced_at":"2025-04-11T05:37:56.313Z","repository":{"id":40451766,"uuid":"328156843","full_name":"glebmachine/until-destroy","owner":"glebmachine","description":"Наброс на управление отписками путем подкапотной магии","archived":false,"fork":false,"pushed_at":"2022-05-07T17:56:22.000Z","size":205,"stargazers_count":3,"open_issues_count":1,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2023-03-22T12:35:35.900Z","etag":null,"topics":["angular","rxjs","unsubscrib"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/glebmachine.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-01-09T13:04:44.000Z","updated_at":"2022-05-07T18:38:01.000Z","dependencies_parsed_at":"2022-08-09T20:51:18.426Z","dependency_job_id":null,"html_url":"https://github.com/glebmachine/until-destroy","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glebmachine%2Funtil-destroy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glebmachine%2Funtil-destroy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glebmachine%2Funtil-destroy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/glebmachine%2Funtil-destroy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/glebmachine","download_url":"https://codeload.github.com/glebmachine/until-destroy/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248350198,"owners_count":21089222,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["angular","rxjs","unsubscrib"],"created_at":"2025-04-11T05:37:55.632Z","updated_at":"2025-04-11T05:37:56.305Z","avatar_url":"https://github.com/glebmachine.png","language":"TypeScript","readme":"⚠ Важно, этот наброс еще не обкатан, с осторожностью используйте его в продакшене (а лучше вообще не используйте)!\nНе показывайте детям, впечатлительным людям, больным эпилепсией, кормящим матерям и беременным женщинам.\n\n# Еще один наброс на автоотписки 😅\n`untilDestroyed(this)`- просто бери и пользуйся, никакого бойлерплейта и ограничений 🐱‍🏍.\n\nНа самом деле нет, ввиду подкапотной специфики angular'a, с сервисами он требует `UntilDestroy` декоратора, но, опустим эту частность)\n\n## Зачем ты это сделал?\nДа, есть минимум пяток хороших реализацией, и еще каждый наворачивает свои собственные. Но, каждая из реализаций говорит: возьми декоратор и\\или имплементируй интерфейс, и это вот все еще не безопасно в плане типизации: ты должен держать в голове то, что нужно декоратор поставить, стрим обьявить, дать ему правильный тип (самостоятельно). Если же речь о декораторе на свойстве класса, то тип ты опять же ставишь самостоятельно. Другими словами - много что нужно держать в голове и не ошибаться.\n\nНадоело, хочется по-человечески: нужен оператор, использую оператор, все остальное - долнжо как-то само магически отруливаться где-то под капотом. Другими словами - хочу DX, не хочу думать. \n\n## Какие потенциальные проблемы могут возникнуть у тех кто решиться?\nПроблемы могут возникнуть при мажорных обновлениях, если команда angular'а решит перелопатить реализацию рендерера (опять, но в этом случае думаю сломается большинство либ, как всегда). Либо, если уберут __ngContext__ у компонента\\директивы (у сервиса к примеру они его не подмешивают в экземпляр, и эта та самая причина почему я не могу дотянуться до кишочек и зарегать ngOnDestroy в рантайме для сервиса, как я смог это сделать для компонента)\n\n## Какому дизайну ты следовал?\nНет никакого большого дизайна. Есть потребность, _чтобы_работало_, вот оно и работает. \n\n## Как ты тестировал?\nАвтотестами ничего не покрыто. В репе лежит прилага, которая позволяет руками потестить как ведут себя сервисы компоненты и директивы и под капотом есть пару переменных, что содержат статусы. Все тестируется ручками\n\nЕсли кому-то очень захочется - будут рад если покроете тестами. Тест кейсы описать помогу\n\n## P.S\nЛиба специально не выложена в npm, а реп тут лежит скорее для того, чтобы продолжать в нем ее разрабатывать.\nКогда я пойму что есть потребность и она готова - сделаю пакет\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglebmachine%2Funtil-destroy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglebmachine%2Funtil-destroy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglebmachine%2Funtil-destroy/lists"}