{"id":14966902,"url":"https://github.com/reactiveui/pharmacist","last_synced_at":"2025-05-16T08:06:16.108Z","repository":{"id":34882766,"uuid":"183836606","full_name":"reactiveui/Pharmacist","owner":"reactiveui","description":"Builds observables from events.","archived":false,"fork":false,"pushed_at":"2024-09-03T21:18:06.000Z","size":2525,"stargazers_count":240,"open_issues_count":15,"forks_count":15,"subscribers_count":9,"default_branch":"main","last_synced_at":"2025-05-16T08:06:14.256Z","etag":null,"topics":["dotnet","dotnetcore","msbuild","observable","reactive-extensions","reactive-programming","reactivex","rx"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/reactiveui.png","metadata":{"funding":{"github":["reactivemarbles"]},"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-04-28T01:02:20.000Z","updated_at":"2025-01-23T14:21:19.000Z","dependencies_parsed_at":"2023-02-17T05:16:15.794Z","dependency_job_id":"e2907df6-4364-4cb9-928c-ee78979445f2","html_url":"https://github.com/reactiveui/Pharmacist","commit_stats":{"total_commits":300,"total_committers":8,"mean_commits":37.5,"dds":0.5633333333333334,"last_synced_commit":"a75d44e945163c0d9a3c9e38f4c2b116e2394de3"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FPharmacist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FPharmacist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FPharmacist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/reactiveui%2FPharmacist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/reactiveui","download_url":"https://codeload.github.com/reactiveui/Pharmacist/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254493378,"owners_count":22080126,"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":["dotnet","dotnetcore","msbuild","observable","reactive-extensions","reactive-programming","reactivex","rx"],"created_at":"2024-09-24T13:37:07.468Z","updated_at":"2025-05-16T08:06:16.062Z","avatar_url":"https://github.com/reactiveui.png","language":"C#","readme":"![Build](https://github.com/reactiveui/Pharmacist/workflows/Build/badge.svg) [![Code Coverage](https://codecov.io/gh/reactiveui/pharmacist/branch/master/graph/badge.svg)](https://codecov.io/gh/reactiveui/pharmacist)\n\u003cbr /\u003e\n\u003cbr /\u003e\n\u003ca href=\"https://github.com/reactiveui/pharmacist\"\u003e\n        \u003cimg width=\"170\" height=\"170\" src=\"https://github.com/reactiveui/styleguide/blob/master/logo_pharmacist/logo.svg\"/\u003e\n\u003c/a\u003e\n\n# Pharmacist\n\nBuilds observables from events.\n\n## Source Generator\n\nA source generator version is being worked on over here: https://github.com/reactivemarbles/ObservableEventsSourceGenerator\n\n## NuGet Packages\n\nInstall the following packages to start using Pharmacist.\n\n| Name                          | Platform          | NuGet                            |\n| ----------------------------- | ----------------- | -------------------------------- |\n| [Pharmacist.Core][Core]       | Core - Libary     | [![CoreBadge]][Core]             |\n| [Pharmacist][GlobalTool]      | Global Tool       | [![GlobalToolBadge]][GlobalTool] |\n| [Pharmacist.MSBuild][MsBuild] | MSBuild Task      | [![MsBuildBadge]][MsBuild]       |\n| [Pharmacist.Common][Common]   | Common            | [![CommonBadge]][Common]         |\n\n[Core]: https://www.nuget.org/packages/Pharmacist.Core/\n[CoreBadge]: https://img.shields.io/nuget/v/Pharmacist.Core.svg\n\n[GlobalTool]: https://www.nuget.org/packages/Pharmacist/\n[GlobalToolBadge]: https://img.shields.io/nuget/v/Pharmacist.svg\n\n[MsBuild]: https://www.nuget.org/packages/Pharmacist.MSBuild/\n[MsBuildBadge]: https://img.shields.io/nuget/v/Pharmacist.MSBuild.svg\n\n[Common]: https://www.nuget.org/packages/Pharmacist.Common/\n[CommonBadge]: https://img.shields.io/nuget/v/Pharmacist.Common.svg\n\n## What does it do?\n\nPharmacist will convert events within an assembly and create observable wrappers for them. \n\nIt has been called pharmacist since it will generate Reactive Extensions (Rx) Observables for events, so it's a play on word about \"Rx\" which is short for prescriptions.\n\nIt can generate the observables for the following:\n* System Platforms, such as Xamarin (iOS/Android/TVOS), UWP\n* NuGet packages\n* Assemblies.\n\nThere is a MSBuild Task version and a global tool version.\n\n## How do I use?\n\n### MsBuild\n\nPharmacist can automatically create Observable wrappers for projects for their explicitly included NuGet packages.\n\nIn your .csproj file you can add:\n\n```xml\n\u003cItemGroup\u003e\n    \u003cPackageReference Include=\"Pharmacist.MsBuild\" Version=\"1.*\" PrivateAssets=\"all\" /\u003e\n    \u003cPackageReference Include=\"Pharmacist.Common\" Version=\"1.*\" /\u003e\n\u003c/ItemGroup\u003e\n```\n\n`Pharmacist.MsBuild` contains the MsBuild target file and appropriate tasks. `Pharmacist.Common` includes common source code that is required to invoke the generated observables.\n\nThis will generate wrappers only for other included `PackageReference`'s contained within the project file.\n\nFor example if you had a inclusion for `Xamarin.Forms` in the same project that includes Pharmacist it will generate Observable wrappers for the included codes. It will not include any child `PackageReference` from other projects included via a `ProjectReference`. You can override that functionality by including `\u003cPharmacistGlobalPackages\u003etrue\u003c/PharmacistGlobalPackages\u003e` in a `PropertyGroup` inside your project.\n\nAlso it will only generate the specified `ProjectReference` and none of it's dependent packages. For example for a ProjectReference inclusion of `ReactiveUI`, it will not generate dependencies such as `System.Reactive`. If you want to generate observable wrappers for the dependent NuGet packages you must explicitly include them. \n\n### Command Line\n\nPharmacist comes with a command line version which is useful for generating for a specified platform.\n\nThe following values are supported for platforms: `Android`, `iOS`, `Mac`, `WPF`, `UWP`, `Winforms`, `TVOS`\n\nInstall the global tool:\n\n```Batchfile\ndotnet tool install -g Pharmacist\n```\n\nTo generate files:\n\n```Batchfile\npharmacist generate-platform -p \u003cPlatform\u003e -o c:/directory/for/output --output-prefix=\"Events\"\n```\n\nThis would generate a file named `Events_\u003cPlatform\u003e.cs`, where Platform would be the platform specified.\n\nIn the near future this will be changing to TargetFramework with /wpf and /winforms options.\n\n## Contribute\n\nPharmacist is developed under an OSI-approved open source license, making it freely usable and distributable, even for commercial use. Because of our Open Collective model for funding and transparency, we are able to funnel support and funds through to our contributors and community. We ❤ the people who are involved in this project, and we’d love to have you on board, especially if you are just getting started or have never contributed to open-source before.\n\nSo here's to you, lovely person who wants to join us — this is how you can support us:\n\n* [Responding to questions on StackOverflow](https://stackoverflow.com/questions/tagged/reactiveui)\n* [Passing on knowledge and teaching the next generation of developers](http://ericsink.com/entries/dont_use_rxui.html)\n* [Asking your employer to reciprocate and contribute to open-source](https://github.com/github/balanced-employee-ip-agreement)\n* Submitting documentation updates where you see fit or lacking.\n* Making contributions to the code base.\n","funding_links":["https://github.com/sponsors/reactivemarbles"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactiveui%2Fpharmacist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freactiveui%2Fpharmacist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freactiveui%2Fpharmacist/lists"}