{"id":18634938,"url":"https://github.com/typeheim/fluent-ng","last_synced_at":"2025-11-04T11:30:40.389Z","repository":{"id":122298039,"uuid":"268252832","full_name":"typeheim/fluent-ng","owner":"typeheim","description":null,"archived":false,"fork":false,"pushed_at":"2023-02-04T12:33:27.000Z","size":2196,"stargazers_count":0,"open_issues_count":7,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-27T08:29:15.147Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/typeheim.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-31T10:00:57.000Z","updated_at":"2022-06-02T10:13:51.000Z","dependencies_parsed_at":null,"dependency_job_id":"bb4c1155-ddbd-40b4-b664-d8992bd55fcb","html_url":"https://github.com/typeheim/fluent-ng","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeheim%2Ffluent-ng","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeheim%2Ffluent-ng/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeheim%2Ffluent-ng/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/typeheim%2Ffluent-ng/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/typeheim","download_url":"https://codeload.github.com/typeheim/fluent-ng/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239433910,"owners_count":19637806,"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":[],"created_at":"2024-11-07T05:22:40.515Z","updated_at":"2025-11-04T11:30:40.355Z","avatar_url":"https://github.com/typeheim.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FluentNG\n\nCollection of Angular extensions\n\u003cp\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@typeheim/fluent-ng\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@typeheim/fluent-ng.svg\" alt=\"NPM Version\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://travis-ci.org/github/typeheim/fluent-ng\" target=\"_blank\"\u003e\u003cimg src=\"https://travis-ci.org/typeheim/fluent-ng.svg?branch=master\" alt=\"Build Status\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://www.npmjs.com/package/@typeheim/fluent-ng\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/npm/l/@typeheim/fluent-ng.svg\" alt=\"Package License\" /\u003e\u003c/a\u003e\n    \u003ca href=\"https://discord.gg/dmMznp9\" target=\"_blank\"\u003e\u003cimg src=\"https://img.shields.io/badge/discord-online-brightgreen.svg\" alt=\"Discord\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n# Getting Started\n\nInstall package\n```shell\nyarn add @typeheim/fluent-ng\n//or\nnpm -i @typeheim/fluent-ng\n```\n\n## SubscribePipe\n\nSubscribePipe is an alternative to Angular core AsyncPipe. SubscribePipe is tuned to work only with observables and support setting default values instead of `null`.\nUnlike AsyncPipe, SubscribePipe call `markDirty`, introduced with Ivy, instead of `markForCheck` giving better performance, resource utilization and smooth UI updates.\n```typescript\n@Component({\n  template: `\n    {{observableSource | subscribe}}\n    {{observableSource | subscribe: 'default text' }}\n  `\n})\nclass StreamSampleComponent {\n  observableSource = new Subject()\n}\n```\n\n## StreamPipe\n\nStreamPipe is an alternative to Angular core AsyncPipe. StreamPipe is tuned to work only with observables and support setting default values instead of `null`.\nUnlike AsyncPipe, StreamPipe call `detectChanges` of `ChangeDetectorRef` instead of `markForCheck` that marks the component tree dirty up to the root component, and then re-renders the full path until the component that caused the change, and all its child components related to the change. In the end, StreamPipe, triggers change detection and rendering only in the very component where the change got introduced, and the child components effected by the change giving better performance and smooth UI chnages. \n```typescript\n@Component({\n  template: `\n    {{observableSource | stream}}\n    {{observableSource | stream: {default: 'default text'} }}\n  `\n})\nclass StreamSampleComponent {\n  observableSource = new Subject()\n}\n```\n\n## AwaitPipe\n\nAwaitPipe works the same way as StreamPipe but instead of observables it expects promise.\n\n```typescript\n@Component({\n  template: `\n    {{promiseSource | await}}\n    {{promiseSource | await: {default: 'default text'} }}\n  `\n})\nclass PromiseSampleComponent {\n  promiseSource = new Promise((resolve) =\u003e resolve('it works!'))\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypeheim%2Ffluent-ng","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftypeheim%2Ffluent-ng","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftypeheim%2Ffluent-ng/lists"}