Showing preview only (4,469K chars total). Download the full file or copy to clipboard to get everything.
Repository: ReactiveX/rxjs
Branch: master
Commit: c15b37f81ba5
Files: 1068
Total size: 4.1 MB
Directory structure:
gitextract_fhrsca5d/
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ └── install-dependencies/
│ │ └── action.yml
│ ├── lock.yml
│ └── workflows/
│ ├── ci_main.yml
│ ├── ci_ts_latest.yml
│ ├── publish.yml
│ └── rebase.yml
├── .gitignore
├── .prettierrc.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── apps/
│ └── rxjs.dev/
│ ├── .browserslistrc
│ ├── .eslintrc.js
│ ├── .firebaserc
│ ├── .gitignore
│ ├── README.md
│ ├── angular.json
│ ├── content/
│ │ ├── 6-to-7-change-summary.md
│ │ ├── blackLivesMatter.md
│ │ ├── code-of-conduct.md
│ │ ├── deprecations/
│ │ │ ├── array-argument.md
│ │ │ ├── breaking-changes.md
│ │ │ ├── index.md
│ │ │ ├── multicasting.md
│ │ │ ├── resultSelector.md
│ │ │ ├── scheduler-argument.md
│ │ │ ├── subscribe-arguments.md
│ │ │ └── to-promise.md
│ │ ├── file-not-found.md
│ │ ├── guide/
│ │ │ ├── core-semantics.md
│ │ │ ├── glossary-and-semantics.md
│ │ │ ├── higher-order-observables.md
│ │ │ ├── importing.md
│ │ │ ├── installation.md
│ │ │ ├── observable.md
│ │ │ ├── observer.md
│ │ │ ├── operators.md
│ │ │ ├── overview.md
│ │ │ ├── scheduler.md
│ │ │ ├── subject.md
│ │ │ ├── subscription.md
│ │ │ └── testing/
│ │ │ └── marble-testing.md
│ │ ├── license.md
│ │ ├── maintainer-guidelines.md
│ │ ├── marketing/
│ │ │ ├── announcements.json
│ │ │ ├── api.html
│ │ │ ├── contributors.json
│ │ │ ├── index.html
│ │ │ ├── operator-decision-tree.html
│ │ │ └── team.html
│ │ ├── navigation.json
│ │ └── operator-decision-tree.yml
│ ├── database.rules.json
│ ├── firebase.json
│ ├── ngsw-config.json
│ ├── package.json
│ ├── scripts/
│ │ ├── _payload-limits.json
│ │ ├── deploy-to-firebase.sh
│ │ ├── deploy-to-firebase.test.sh
│ │ ├── payload.sh
│ │ ├── publish-docs.sh
│ │ └── test-pwa-score.js
│ ├── src/
│ │ ├── app/
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── custom-elements/
│ │ │ │ ├── announcement-bar/
│ │ │ │ │ ├── announcement-bar.component.spec.ts
│ │ │ │ │ ├── announcement-bar.component.ts
│ │ │ │ │ └── announcement-bar.module.ts
│ │ │ │ ├── api/
│ │ │ │ │ ├── api-list.component.spec.ts
│ │ │ │ │ ├── api-list.component.ts
│ │ │ │ │ ├── api-list.module.ts
│ │ │ │ │ ├── api.service.spec.ts
│ │ │ │ │ └── api.service.ts
│ │ │ │ ├── code/
│ │ │ │ │ ├── code-example.component.spec.ts
│ │ │ │ │ ├── code-example.component.ts
│ │ │ │ │ ├── code-example.module.ts
│ │ │ │ │ ├── code-tabs.component.spec.ts
│ │ │ │ │ ├── code-tabs.component.ts
│ │ │ │ │ ├── code-tabs.module.ts
│ │ │ │ │ ├── code.component.spec.ts
│ │ │ │ │ ├── code.component.ts
│ │ │ │ │ ├── code.module.ts
│ │ │ │ │ └── pretty-printer.service.ts
│ │ │ │ ├── contributor/
│ │ │ │ │ ├── contributor-list.component.spec.ts
│ │ │ │ │ ├── contributor-list.component.ts
│ │ │ │ │ ├── contributor-list.module.ts
│ │ │ │ │ ├── contributor.component.ts
│ │ │ │ │ ├── contributor.service.spec.ts
│ │ │ │ │ ├── contributor.service.ts
│ │ │ │ │ └── contributors.model.ts
│ │ │ │ ├── current-location/
│ │ │ │ │ ├── current-location.component.spec.ts
│ │ │ │ │ ├── current-location.component.ts
│ │ │ │ │ └── current-location.module.ts
│ │ │ │ ├── custom-elements.module.ts
│ │ │ │ ├── element-registry.ts
│ │ │ │ ├── elements-loader.spec.ts
│ │ │ │ ├── elements-loader.ts
│ │ │ │ ├── expandable-section/
│ │ │ │ │ ├── expandable-section.component.ts
│ │ │ │ │ └── expandable-section.module.ts
│ │ │ │ ├── lazy-custom-element.component.spec.ts
│ │ │ │ ├── lazy-custom-element.component.ts
│ │ │ │ ├── live-example/
│ │ │ │ │ ├── live-example.component.spec.ts
│ │ │ │ │ ├── live-example.component.ts
│ │ │ │ │ └── live-example.module.ts
│ │ │ │ ├── operator-decision-tree/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── fixtures.ts
│ │ │ │ │ ├── interfaces.ts
│ │ │ │ │ ├── operator-decision-tree-data.service.spec.ts
│ │ │ │ │ ├── operator-decision-tree-data.service.ts
│ │ │ │ │ ├── operator-decision-tree.component.scss
│ │ │ │ │ ├── operator-decision-tree.component.spec.ts
│ │ │ │ │ ├── operator-decision-tree.component.ts
│ │ │ │ │ ├── operator-decision-tree.module.spec.ts
│ │ │ │ │ ├── operator-decision-tree.module.ts
│ │ │ │ │ ├── operator-decision-tree.service.spec.ts
│ │ │ │ │ ├── operator-decision-tree.service.ts
│ │ │ │ │ ├── utils.spec.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── resource/
│ │ │ │ │ ├── resource-list.component.spec.ts
│ │ │ │ │ ├── resource-list.component.ts
│ │ │ │ │ ├── resource-list.module.ts
│ │ │ │ │ ├── resource.model.ts
│ │ │ │ │ ├── resource.service.spec.ts
│ │ │ │ │ └── resource.service.ts
│ │ │ │ ├── search/
│ │ │ │ │ ├── file-not-found-search.component.spec.ts
│ │ │ │ │ ├── file-not-found-search.component.ts
│ │ │ │ │ └── file-not-found-search.module.ts
│ │ │ │ └── toc/
│ │ │ │ ├── toc.component.ts
│ │ │ │ └── toc.module.ts
│ │ │ ├── documents/
│ │ │ │ ├── document-contents.ts
│ │ │ │ ├── document.service.spec.ts
│ │ │ │ └── document.service.ts
│ │ │ ├── layout/
│ │ │ │ ├── doc-viewer/
│ │ │ │ │ ├── doc-viewer.component.spec.ts
│ │ │ │ │ ├── doc-viewer.component.ts
│ │ │ │ │ └── dt.component.ts
│ │ │ │ ├── footer/
│ │ │ │ │ └── footer.component.ts
│ │ │ │ ├── mode-banner/
│ │ │ │ │ └── mode-banner.component.ts
│ │ │ │ ├── nav-item/
│ │ │ │ │ ├── nav-item.component.spec.ts
│ │ │ │ │ └── nav-item.component.ts
│ │ │ │ ├── nav-menu/
│ │ │ │ │ ├── nav-menu.component.spec.ts
│ │ │ │ │ └── nav-menu.component.ts
│ │ │ │ ├── notification/
│ │ │ │ │ └── notification.component.ts
│ │ │ │ └── top-menu/
│ │ │ │ ├── top-menu.component.spec.ts
│ │ │ │ └── top-menu.component.ts
│ │ │ ├── navigation/
│ │ │ │ ├── navigation.model.ts
│ │ │ │ ├── navigation.service.spec.ts
│ │ │ │ └── navigation.service.ts
│ │ │ ├── search/
│ │ │ │ ├── interfaces.ts
│ │ │ │ ├── search-box/
│ │ │ │ │ ├── search-box.component.spec.ts
│ │ │ │ │ └── search-box.component.ts
│ │ │ │ ├── search.service.ts
│ │ │ │ └── search.worker.ts
│ │ │ ├── shared/
│ │ │ │ ├── attribute-utils.spec.ts
│ │ │ │ ├── attribute-utils.ts
│ │ │ │ ├── copier.service.ts
│ │ │ │ ├── current-date.ts
│ │ │ │ ├── custom-icon-registry.spec.ts
│ │ │ │ ├── custom-icon-registry.ts
│ │ │ │ ├── deployment.service.spec.ts
│ │ │ │ ├── deployment.service.ts
│ │ │ │ ├── ga.service.spec.ts
│ │ │ │ ├── ga.service.ts
│ │ │ │ ├── location.service.spec.ts
│ │ │ │ ├── location.service.ts
│ │ │ │ ├── logger.service.spec.ts
│ │ │ │ ├── logger.service.ts
│ │ │ │ ├── reporting-error-handler.spec.ts
│ │ │ │ ├── reporting-error-handler.ts
│ │ │ │ ├── scroll-spy.service.spec.ts
│ │ │ │ ├── scroll-spy.service.ts
│ │ │ │ ├── scroll.service.spec.ts
│ │ │ │ ├── scroll.service.ts
│ │ │ │ ├── search-results/
│ │ │ │ │ ├── search-results.component.spec.ts
│ │ │ │ │ └── search-results.component.ts
│ │ │ │ ├── select/
│ │ │ │ │ ├── select.component.spec.ts
│ │ │ │ │ └── select.component.ts
│ │ │ │ ├── shared.module.ts
│ │ │ │ ├── stackblitz.service.ts
│ │ │ │ ├── toc.service.spec.ts
│ │ │ │ ├── toc.service.ts
│ │ │ │ ├── web-worker-message.ts
│ │ │ │ ├── web-worker.ts
│ │ │ │ └── window.ts
│ │ │ └── sw-updates/
│ │ │ ├── sw-updates.module.ts
│ │ │ ├── sw-updates.service.spec.ts
│ │ │ └── sw-updates.service.ts
│ │ ├── assets/
│ │ │ ├── .gitkeep
│ │ │ └── js/
│ │ │ ├── devtools-welcome.js
│ │ │ └── prettify.js
│ │ ├── environments/
│ │ │ ├── environment.archive.ts
│ │ │ ├── environment.next.ts
│ │ │ ├── environment.stable.ts
│ │ │ └── environment.ts
│ │ ├── extra-files/
│ │ │ ├── README.md
│ │ │ ├── archive/
│ │ │ │ └── robots.txt
│ │ │ ├── next/
│ │ │ │ └── robots.txt
│ │ │ └── stable/
│ │ │ └── robots.txt
│ │ ├── google385281288605d160.html
│ │ ├── index.html
│ │ ├── karma.conf.js
│ │ ├── main.ts
│ │ ├── noop-worker-basic.js
│ │ ├── polyfills.ts
│ │ ├── pwa-manifest.json
│ │ ├── styles/
│ │ │ ├── 0-base/
│ │ │ │ ├── _base-dir.scss
│ │ │ │ └── _typography.scss
│ │ │ ├── 1-layouts/
│ │ │ │ ├── _api-page.scss
│ │ │ │ ├── _content-layout.scss
│ │ │ │ ├── _doc-viewer.scss
│ │ │ │ ├── _footer.scss
│ │ │ │ ├── _layout-global.scss
│ │ │ │ ├── _layouts-dir.scss
│ │ │ │ ├── _marketing-layout.scss
│ │ │ │ ├── _not-found.scss
│ │ │ │ ├── _print-layout.scss
│ │ │ │ ├── _sidenav.scss
│ │ │ │ ├── _table-of-contents.scss
│ │ │ │ └── _top-menu.scss
│ │ │ ├── 2-modules/
│ │ │ │ ├── _alert.scss
│ │ │ │ ├── _api-list.scss
│ │ │ │ ├── _api-pages.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _callout.scss
│ │ │ │ ├── _card.scss
│ │ │ │ ├── _code.scss
│ │ │ │ ├── _contribute.scss
│ │ │ │ ├── _contributor.scss
│ │ │ │ ├── _deploy-theme.scss
│ │ │ │ ├── _details.scss
│ │ │ │ ├── _edit-page-cta.scss
│ │ │ │ ├── _features.scss
│ │ │ │ ├── _filetree.scss
│ │ │ │ ├── _heading-anchors.scss
│ │ │ │ ├── _hr.scss
│ │ │ │ ├── _images.scss
│ │ │ │ ├── _label.scss
│ │ │ │ ├── _modules-dir.scss
│ │ │ │ ├── _notification.scss
│ │ │ │ ├── _presskit.scss
│ │ │ │ ├── _progress-bar.scss
│ │ │ │ ├── _resources.scss
│ │ │ │ ├── _scrollbar.scss
│ │ │ │ ├── _search-results.scss
│ │ │ │ ├── _select-menu.scss
│ │ │ │ ├── _subsection.scss
│ │ │ │ ├── _table.scss
│ │ │ │ └── _toc.scss
│ │ │ ├── _constants.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _typography-theme.scss
│ │ │ ├── main.scss
│ │ │ └── rxjs-theme.scss
│ │ ├── styles.scss
│ │ ├── test.ts
│ │ ├── testing/
│ │ │ ├── doc-viewer-utils.ts
│ │ │ ├── location.service.ts
│ │ │ ├── logger.service.ts
│ │ │ └── search.service.ts
│ │ └── typings.d.ts
│ ├── tests/
│ │ └── e2e/
│ │ ├── protractor.conf.js
│ │ ├── tsconfig.e2e.json
│ │ └── visual-testing.e2e-spec.ts
│ ├── tools/
│ │ ├── README.md
│ │ ├── firebase-test-utils/
│ │ │ ├── FirebaseGlob.spec.ts
│ │ │ ├── FirebaseGlob.ts
│ │ │ ├── FirebaseRedirect.spec.ts
│ │ │ ├── FirebaseRedirect.ts
│ │ │ ├── FirebaseRedirector.spec.ts
│ │ │ └── FirebaseRedirector.ts
│ │ ├── marbles/
│ │ │ ├── diagrams/
│ │ │ │ ├── audit.txt
│ │ │ │ ├── bufferWhen.txt
│ │ │ │ ├── concatAll.txt
│ │ │ │ ├── debounce.txt
│ │ │ │ ├── delay.txt
│ │ │ │ ├── exhaustAll.txt
│ │ │ │ ├── throttle.txt
│ │ │ │ └── windowWhen.txt
│ │ │ ├── scripts/
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.marbles.json
│ │ ├── stackblitz/
│ │ │ └── rxjs.version.js
│ │ └── transforms/
│ │ ├── .eslintignore
│ │ ├── .eslintrc.js
│ │ ├── README.md
│ │ ├── angular-api-package/
│ │ │ ├── index.js
│ │ │ ├── mocks/
│ │ │ │ ├── aliasedExports.ts
│ │ │ │ ├── anotherOperator.ts
│ │ │ │ ├── importedSrc.ts
│ │ │ │ ├── operator.ts
│ │ │ │ └── testSrc.ts
│ │ │ ├── post-processors/
│ │ │ │ └── embedMarbleDiagrams.js
│ │ │ ├── processors/
│ │ │ │ ├── addMetadataAliases.js
│ │ │ │ ├── addMetadataAliases.spec.js
│ │ │ │ ├── checkOperator.js
│ │ │ │ ├── computeApiBreadCrumbs.js
│ │ │ │ ├── computeApiBreadCrumbs.spec.js
│ │ │ │ ├── computeSearchTitle.js
│ │ │ │ ├── computeSearchTitle.spec.js
│ │ │ │ ├── computeStability.js
│ │ │ │ ├── computeStability.spec.js
│ │ │ │ ├── convertPrivateClassesToInterfaces.js
│ │ │ │ ├── extractDecoratedClasses.js
│ │ │ │ ├── extractDecoratedClasses.spec.js
│ │ │ │ ├── filterContainedDocs.js
│ │ │ │ ├── filterPrivateDocs.js
│ │ │ │ ├── filterPrivateDocs.spec.js
│ │ │ │ ├── generateApiListDoc.js
│ │ │ │ ├── generateApiListDoc.spec.js
│ │ │ │ ├── generateDeprecationsListDoc.js
│ │ │ │ ├── markAliases.spec.ts
│ │ │ │ ├── markAliases.ts
│ │ │ │ ├── markBarredODocsAsPrivate.js
│ │ │ │ ├── markBarredODocsAsPrivate.spec.js
│ │ │ │ ├── matchUpDirectiveDecorators.js
│ │ │ │ ├── matchUpDirectiveDecorators.spec.js
│ │ │ │ ├── mergeDecoratorDocs.js
│ │ │ │ ├── mergeDecoratorDocs.spec.js
│ │ │ │ ├── migrateLegacyJSDocTags.js
│ │ │ │ ├── migrateLegacyJSDocTags.spec.js
│ │ │ │ ├── processClassLikeMembers.js
│ │ │ │ ├── processClassLikeMembers.spec.js
│ │ │ │ ├── simplifyMemberAnchors.js
│ │ │ │ ├── simplifyMemberAnchors.spec.js
│ │ │ │ ├── splitDescription.js
│ │ │ │ └── splitDescription.spec.js
│ │ │ └── tag-defs/
│ │ │ ├── deprecated.js
│ │ │ ├── internal.js
│ │ │ └── throws.js
│ │ ├── angular-base-package/
│ │ │ ├── ignore-words.json
│ │ │ ├── index.js
│ │ │ ├── post-processors/
│ │ │ │ ├── add-image-dimensions.js
│ │ │ │ ├── add-image-dimensions.spec.js
│ │ │ │ ├── auto-link-code.js
│ │ │ │ ├── auto-link-code.spec.js
│ │ │ │ ├── autolink-headings.js
│ │ │ │ ├── autolink-headings.spec.js
│ │ │ │ ├── h1-checker.js
│ │ │ │ └── h1-checker.spec.js
│ │ │ ├── processors/
│ │ │ │ ├── checkUnbalancedBackTicks.js
│ │ │ │ ├── checkUnbalancedBackTicks.spec.js
│ │ │ │ ├── convertToJson.js
│ │ │ │ ├── convertToJson.spec.js
│ │ │ │ ├── copyContentAssets.js
│ │ │ │ ├── copyContentAssets.spec.js
│ │ │ │ ├── createSitemap.js
│ │ │ │ ├── createSitemap.spec.js
│ │ │ │ ├── fixInternalDocumentLinks.js
│ │ │ │ ├── fixInternalDocumentLinks.spec.js
│ │ │ │ ├── generateKeywords.js
│ │ │ │ ├── generateKeywords.spec.js
│ │ │ │ ├── renderLinkInfo.js
│ │ │ │ └── renderLinkInfo.spec.js
│ │ │ ├── readers/
│ │ │ │ └── json.js
│ │ │ ├── rendering/
│ │ │ │ ├── filterByPropertyValue.js
│ │ │ │ ├── filterByPropertyValue.spec.js
│ │ │ │ ├── toId.js
│ │ │ │ ├── toId.spec.js
│ │ │ │ ├── trimBlankLines.js
│ │ │ │ ├── trimBlankLines.spec.js
│ │ │ │ ├── truncateCode.js
│ │ │ │ └── truncateCode.spec.js
│ │ │ └── services/
│ │ │ ├── copyFolder.js
│ │ │ ├── filterAmbiguousDirectiveAliases.js
│ │ │ ├── filterAmbiguousDirectiveAliases.spec.js
│ │ │ ├── filterFromInImports.spec.js
│ │ │ ├── filterFromInImports.ts
│ │ │ ├── filterPipes.js
│ │ │ ├── filterPipes.spec.js
│ │ │ └── getImageDimensions.js
│ │ ├── angular-content-package/
│ │ │ ├── index.js
│ │ │ └── inline-tag-defs/
│ │ │ └── anchor.js
│ │ ├── angular.io-package/
│ │ │ ├── index.js
│ │ │ └── processors/
│ │ │ ├── cleanGeneratedFiles.js
│ │ │ ├── createOverviewDump.js
│ │ │ └── processNavigationMap.js
│ │ ├── authors-package/
│ │ │ ├── api-package.js
│ │ │ ├── guide-package.js
│ │ │ ├── index.js
│ │ │ ├── index.spec.js
│ │ │ ├── marketing-package.js
│ │ │ ├── tutorial-package.js
│ │ │ └── watchr.js
│ │ ├── config.js
│ │ ├── content-package/
│ │ │ ├── index.js
│ │ │ ├── readers/
│ │ │ │ ├── content.js
│ │ │ │ └── content.spec.js
│ │ │ └── tag-defs/
│ │ │ ├── intro.js
│ │ │ └── title.js
│ │ ├── helpers/
│ │ │ ├── test-package.js
│ │ │ ├── utils.js
│ │ │ └── utils.spec.js
│ │ ├── links-package/
│ │ │ ├── index.js
│ │ │ ├── inline-tag-defs/
│ │ │ │ ├── link.js
│ │ │ │ └── link.spec.js
│ │ │ └── services/
│ │ │ ├── disambiguators/
│ │ │ │ ├── disambiguateByDeprecated.js
│ │ │ │ ├── disambiguateByDeprecated.spec.js
│ │ │ │ ├── disambiguateByModule.js
│ │ │ │ ├── disambiguateByModule.spec.js
│ │ │ │ ├── disambiguateByNonMember.js
│ │ │ │ ├── disambiguateByNonMember.spec.js
│ │ │ │ ├── disambiguateByNonOperator.js
│ │ │ │ └── disambiguateByNonOperator.spec.js
│ │ │ ├── getAliases.js
│ │ │ ├── getAliases.spec.js
│ │ │ ├── getDocFromAlias.js
│ │ │ ├── getDocFromAlias.spec.js
│ │ │ ├── getLinkInfo.js
│ │ │ └── getLinkInfo.spec.js
│ │ ├── remark-package/
│ │ │ ├── index.js
│ │ │ └── services/
│ │ │ ├── handlers/
│ │ │ │ └── code.js
│ │ │ ├── markedNunjucksFilter.js
│ │ │ ├── plugins/
│ │ │ │ └── mapHeadings.js
│ │ │ ├── renderMarkdown.js
│ │ │ └── renderMarkdown.spec.js
│ │ ├── rxjs-decision-tree-generator/
│ │ │ ├── README.md
│ │ │ ├── index.ts
│ │ │ └── src/
│ │ │ └── lib/
│ │ │ ├── addUniqueId.spec.ts
│ │ │ ├── addUniqueId.ts
│ │ │ ├── build.spec.ts
│ │ │ ├── build.ts
│ │ │ ├── decisionTreeReducer.spec.ts
│ │ │ ├── decisionTreeReducer.ts
│ │ │ ├── extractInitialSequence.spec.ts
│ │ │ ├── extractInitialSequence.ts
│ │ │ ├── fixtures.ts
│ │ │ ├── flattenApiList.spec.ts
│ │ │ ├── flattenApiList.ts
│ │ │ ├── generateUniqueId.spec.ts
│ │ │ ├── generateUniqueId.ts
│ │ │ ├── helpers.spec.ts
│ │ │ ├── helpers.ts
│ │ │ ├── index.ts
│ │ │ └── interfaces.ts
│ │ ├── templates/
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── base.template.html
│ │ │ │ ├── class.template.html
│ │ │ │ ├── const.template.html
│ │ │ │ ├── decorator.template.html
│ │ │ │ ├── deprecation.template.html
│ │ │ │ ├── directive.template.html
│ │ │ │ ├── enum.template.html
│ │ │ │ ├── export-base.template.html
│ │ │ │ ├── function.template.html
│ │ │ │ ├── includes/
│ │ │ │ │ ├── annotations.html
│ │ │ │ │ ├── class-overview.html
│ │ │ │ │ ├── decorator-overview.html
│ │ │ │ │ ├── deprecation.html
│ │ │ │ │ ├── description.html
│ │ │ │ │ ├── directive-overview.html
│ │ │ │ │ ├── export-as.html
│ │ │ │ │ ├── info-bar.html
│ │ │ │ │ ├── interface-overview.html
│ │ │ │ │ ├── metadata.html
│ │ │ │ │ ├── pipe-overview.html
│ │ │ │ │ ├── renamed-exports.html
│ │ │ │ │ ├── security-notes.html
│ │ │ │ │ ├── see-also.html
│ │ │ │ │ ├── selectors.html
│ │ │ │ │ └── usageNotes.html
│ │ │ │ ├── interface.template.html
│ │ │ │ ├── let.template.html
│ │ │ │ ├── lib/
│ │ │ │ │ ├── descendants.html
│ │ │ │ │ ├── directiveHelpers.html
│ │ │ │ │ ├── githubLinks.html
│ │ │ │ │ ├── memberHelpers.html
│ │ │ │ │ └── paramList.html
│ │ │ │ ├── module.template.html
│ │ │ │ ├── pipe.template.html
│ │ │ │ ├── type-alias.template.html
│ │ │ │ ├── value-module.template.html
│ │ │ │ └── var.template.html
│ │ │ ├── content.template.html
│ │ │ ├── data-module.template.js
│ │ │ ├── example-region.template.html
│ │ │ ├── json-doc.template.json
│ │ │ ├── overview-dump.template.html
│ │ │ └── sitemap.template.xml
│ │ └── test.js
│ ├── tsconfig.app.json
│ ├── tsconfig.docs.json
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── tsconfig.worker.json
├── nx.json
├── package.json
├── packages/
│ ├── observable/
│ │ ├── .eslintrc.json
│ │ ├── .tshy/
│ │ │ ├── browser.json
│ │ │ ├── build.json
│ │ │ ├── commonjs.json
│ │ │ ├── esm.json
│ │ │ └── webpack.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── observable.spec.ts
│ │ │ ├── observable.ts
│ │ │ └── types.ts
│ │ └── tsconfig.json
│ └── rxjs/
│ ├── .dependency-cruiser.json
│ ├── .dockerignore
│ ├── .eslintrc.json
│ ├── .gitattributes
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── integration/
│ │ └── import/
│ │ ├── fixtures/
│ │ │ ├── browser/
│ │ │ │ ├── browser-test.js
│ │ │ │ ├── index.html
│ │ │ │ ├── index.mjs
│ │ │ │ └── package.json
│ │ │ ├── commonjs/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── esm/
│ │ │ │ ├── index.mjs
│ │ │ │ └── package.json
│ │ │ ├── vite-bundle/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── index.html
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── main.ts
│ │ │ │ │ └── vite-env.d.ts
│ │ │ │ ├── test.mjs
│ │ │ │ └── tsconfig.json
│ │ │ └── webpack-bundle/
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── main.ts
│ │ │ ├── test.js
│ │ │ ├── tsconfig.json
│ │ │ └── webpack.config.js
│ │ └── runner.js
│ ├── package.json
│ ├── spec/
│ │ ├── Observable-spec.ts
│ │ ├── Scheduler-spec.ts
│ │ ├── Subject-spec.ts
│ │ ├── Subscriber-spec.ts
│ │ ├── Subscription-spec.ts
│ │ ├── ajax/
│ │ │ └── index-spec.ts
│ │ ├── config-spec.ts
│ │ ├── exports-spec.ts.disabled
│ │ ├── firstValueFrom-spec.ts
│ │ ├── helpers/
│ │ │ ├── interop-helper-spec.ts
│ │ │ ├── interop-helper.ts
│ │ │ ├── marble-testing.ts
│ │ │ ├── observableMatcher.ts
│ │ │ ├── setup.ts
│ │ │ ├── subscription.ts
│ │ │ └── test-helper.ts
│ │ ├── index-spec.ts
│ │ ├── lastValueFrom-spec.ts
│ │ ├── module-test-spec.mjs
│ │ ├── observables/
│ │ │ ├── bindCallback-spec.ts
│ │ │ ├── bindNodeCallback-spec.ts
│ │ │ ├── combineLatest-spec.ts
│ │ │ ├── concat-spec.ts
│ │ │ ├── connectable-spec.ts
│ │ │ ├── defer-spec.ts
│ │ │ ├── dom/
│ │ │ │ ├── ajax-spec.ts
│ │ │ │ ├── animationFrames-spec.ts
│ │ │ │ ├── fetch-spec.ts
│ │ │ │ └── webSocket-spec.ts
│ │ │ ├── empty-spec.ts
│ │ │ ├── forkJoin-spec.ts
│ │ │ ├── from-promise-spec.ts
│ │ │ ├── from-spec.ts
│ │ │ ├── fromEvent-spec.ts
│ │ │ ├── fromEventPattern-spec.ts
│ │ │ ├── generate-spec.ts
│ │ │ ├── if-spec.ts
│ │ │ ├── interval-spec.ts
│ │ │ ├── merge-spec.ts
│ │ │ ├── never-spec.ts
│ │ │ ├── of-spec.ts
│ │ │ ├── onErrorResumeNext-spec.ts
│ │ │ ├── partition-spec.ts
│ │ │ ├── race-spec.ts
│ │ │ ├── range-spec.ts
│ │ │ ├── throwError-spec.ts
│ │ │ ├── timer-spec.ts
│ │ │ ├── using-spec.ts
│ │ │ └── zip-spec.ts
│ │ ├── operators/
│ │ │ ├── audit-spec.ts
│ │ │ ├── auditTime-spec.ts
│ │ │ ├── buffer-spec.ts
│ │ │ ├── bufferCount-spec.ts
│ │ │ ├── bufferTime-spec.ts
│ │ │ ├── bufferToggle-spec.ts
│ │ │ ├── bufferWhen-spec.ts
│ │ │ ├── catchError-spec.ts
│ │ │ ├── combineLatestAll-spec.ts
│ │ │ ├── combineLatestWith-spec.ts
│ │ │ ├── concatAll-spec.ts
│ │ │ ├── concatMap-spec.ts
│ │ │ ├── concatMapTo-spec.ts
│ │ │ ├── concatWith-spec.ts
│ │ │ ├── connect-spec.ts
│ │ │ ├── count-spec.ts
│ │ │ ├── debounce-spec.ts
│ │ │ ├── debounceTime-spec.ts
│ │ │ ├── defaultIfEmpty-spec.ts
│ │ │ ├── delay-spec.ts
│ │ │ ├── delayWhen-spec.ts
│ │ │ ├── dematerialize-spec.ts
│ │ │ ├── distinct-spec.ts
│ │ │ ├── distinctUntilChanged-spec.ts
│ │ │ ├── distinctUntilKeyChanged-spec.ts
│ │ │ ├── elementAt-spec.ts
│ │ │ ├── endWith-spec.ts
│ │ │ ├── every-spec.ts
│ │ │ ├── exhaustAll-spec.ts
│ │ │ ├── exhaustMap-spec.ts
│ │ │ ├── expand-spec.ts
│ │ │ ├── filter-spec.ts
│ │ │ ├── finalize-spec.ts
│ │ │ ├── find-spec.ts
│ │ │ ├── findIndex-spec.ts
│ │ │ ├── first-spec.ts
│ │ │ ├── groupBy-spec.ts
│ │ │ ├── ignoreElements-spec.ts
│ │ │ ├── index-spec.ts
│ │ │ ├── isEmpty-spec.ts
│ │ │ ├── last-spec.ts
│ │ │ ├── map-spec.ts
│ │ │ ├── mapTo-spec.ts
│ │ │ ├── materialize-spec.ts
│ │ │ ├── max-spec.ts
│ │ │ ├── mergeAll-spec.ts
│ │ │ ├── mergeMap-spec.ts
│ │ │ ├── mergeMapTo-spec.ts
│ │ │ ├── mergeScan-spec.ts
│ │ │ ├── mergeWith-spec.ts
│ │ │ ├── min-spec.ts
│ │ │ ├── observeOn-spec.ts
│ │ │ ├── onErrorResumeNext-spec.ts
│ │ │ ├── pairwise-spec.ts
│ │ │ ├── raceWith-spec.ts
│ │ │ ├── reduce-spec.ts
│ │ │ ├── repeat-spec.ts
│ │ │ ├── repeatWhen-spec.ts
│ │ │ ├── retry-spec.ts
│ │ │ ├── retryWhen-spec.ts
│ │ │ ├── sample-spec.ts
│ │ │ ├── sampleTime-spec.ts
│ │ │ ├── scan-spec.ts
│ │ │ ├── sequenceEqual-spec.ts
│ │ │ ├── share-spec.ts
│ │ │ ├── shareReplay-spec.ts
│ │ │ ├── single-spec.ts
│ │ │ ├── skip-spec.ts
│ │ │ ├── skipLast-spec.ts
│ │ │ ├── skipUntil-spec.ts
│ │ │ ├── skipWhile-spec.ts
│ │ │ ├── startWith-spec.ts
│ │ │ ├── subscribeOn-spec.ts
│ │ │ ├── switchAll-spec.ts
│ │ │ ├── switchMap-spec.ts
│ │ │ ├── switchMapTo-spec.ts
│ │ │ ├── switchScan-spec.ts
│ │ │ ├── take-spec.ts
│ │ │ ├── takeLast-spec.ts
│ │ │ ├── takeUntil-spec.ts
│ │ │ ├── takeWhile-spec.ts
│ │ │ ├── tap-spec.ts
│ │ │ ├── throttle-spec.ts
│ │ │ ├── throttleTime-spec.ts
│ │ │ ├── throwIfEmpty-spec.ts
│ │ │ ├── timeInterval-spec.ts
│ │ │ ├── timeout-spec.ts
│ │ │ ├── timeoutWith-spec.ts
│ │ │ ├── timestamp-spec.ts
│ │ │ ├── toArray-spec.ts
│ │ │ ├── window-spec.ts
│ │ │ ├── windowCount-spec.ts
│ │ │ ├── windowTime-spec.ts
│ │ │ ├── windowToggle-spec.ts
│ │ │ ├── windowWhen-spec.ts
│ │ │ ├── withLatestFrom-spec.ts
│ │ │ ├── zipAll-spec.ts
│ │ │ └── zipWith-spec.ts
│ │ ├── scheduled/
│ │ │ └── scheduled-spec.ts
│ │ ├── schedulers/
│ │ │ ├── AnimationFrameScheduler-spec.ts
│ │ │ ├── AsapScheduler-spec.ts
│ │ │ ├── QueueScheduler-spec.ts
│ │ │ ├── TestScheduler-spec.ts
│ │ │ ├── VirtualTimeScheduler-spec.ts
│ │ │ ├── animationFrameProvider-spec.ts
│ │ │ ├── dateTimestampProvider-spec.ts
│ │ │ ├── intervalProvider-spec.ts
│ │ │ └── timeoutProvider-spec.ts
│ │ ├── subjects/
│ │ │ ├── AsyncSubject-spec.ts
│ │ │ ├── BehaviorSubject-spec.ts
│ │ │ └── ReplaySubject-spec.ts
│ │ ├── support/
│ │ │ ├── .mocharc.js
│ │ │ ├── mocha-browser-runner.html
│ │ │ ├── mocha.sauce.gruntfile.js
│ │ │ └── mocha.sauce.runner.js
│ │ ├── testing/
│ │ │ └── index-spec.ts
│ │ ├── tsconfig.json
│ │ ├── util/
│ │ │ ├── ArgumentOutOfRangeError-spec.ts
│ │ │ ├── EmptyError-spec.ts
│ │ │ ├── Immediate-spec.ts
│ │ │ ├── TimeoutError-spec.ts
│ │ │ ├── UnsubscriptionError-spec.ts
│ │ │ ├── isObservable-spec.ts
│ │ │ ├── isPromise-spec.ts
│ │ │ ├── pipe-spec.ts
│ │ │ └── rx-spec.ts
│ │ └── websocket/
│ │ └── index-spec.ts
│ ├── spec-dtslint/
│ │ ├── AsyncSubject-spec.ts
│ │ ├── BehaviorSubject-spec.ts
│ │ ├── Observable-spec.ts
│ │ ├── ReplaySubject-spec.ts
│ │ ├── Subject-spec.ts
│ │ ├── Subscriber-spec.ts
│ │ ├── errors-spec.ts
│ │ ├── firstValueFrom-spec.ts
│ │ ├── helpers.ts
│ │ ├── index.d.ts
│ │ ├── lastValueFrom-spec.ts
│ │ ├── observables/
│ │ │ ├── bindCallback-spec.ts
│ │ │ ├── combineLatest-spec.ts
│ │ │ ├── concat-spec.ts
│ │ │ ├── defer-spec.ts
│ │ │ ├── dom/
│ │ │ │ ├── ajax-spec.ts
│ │ │ │ ├── animationFrames-spec.ts
│ │ │ │ └── fetch-spec.ts
│ │ │ ├── empty-spec.ts
│ │ │ ├── forkJoin-spec.ts
│ │ │ ├── from-spec.ts
│ │ │ ├── fromEvent-spec.ts
│ │ │ ├── iif-spec.ts
│ │ │ ├── interval-spec.ts
│ │ │ ├── never-spec.ts
│ │ │ ├── of-spec.ts
│ │ │ ├── onErrorResumeNext-spec.ts
│ │ │ ├── partition-spec.ts
│ │ │ ├── race-spec.ts
│ │ │ ├── range-spec.ts
│ │ │ ├── throwError-spec.ts
│ │ │ ├── timer-spec.ts
│ │ │ ├── using-spec.ts
│ │ │ └── zip-spec.ts
│ │ ├── operators/
│ │ │ ├── audit-spec.ts
│ │ │ ├── auditTime-spec.ts
│ │ │ ├── buffer-spec.ts
│ │ │ ├── bufferCount-spec.ts
│ │ │ ├── bufferTime-spec.ts
│ │ │ ├── bufferToggle-spec.ts
│ │ │ ├── bufferWhen-spec.ts
│ │ │ ├── catchError-spec.ts
│ │ │ ├── combineLatestAll-spec.ts
│ │ │ ├── combineLatestWith-spec.ts
│ │ │ ├── concatAll-spec.ts
│ │ │ ├── concatMap-spec.ts
│ │ │ ├── concatMapTo-spec.ts
│ │ │ ├── concatWith-spec.ts
│ │ │ ├── connect-spec.ts
│ │ │ ├── count-spec.ts
│ │ │ ├── debounce-spec.ts
│ │ │ ├── debounceTime-spec.ts
│ │ │ ├── defaultIfEmpty-spec.ts
│ │ │ ├── delay-spec.ts
│ │ │ ├── delayWhen-spec.ts
│ │ │ ├── dematerialize-spec.ts
│ │ │ ├── distinct-spec.ts
│ │ │ ├── distinctUntilChanged-spec.ts
│ │ │ ├── distinctUntilKeyChanged-spec.ts
│ │ │ ├── elementAt-spec.ts
│ │ │ ├── endWith-spec.ts
│ │ │ ├── every-spec.ts
│ │ │ ├── exhaustAll-spec.ts
│ │ │ ├── exhaustMap-spec.ts
│ │ │ ├── expand-spec.ts
│ │ │ ├── filter-spec.ts
│ │ │ ├── finalize-spec.ts
│ │ │ ├── find-spec.ts
│ │ │ ├── findIndex-spec.ts
│ │ │ ├── first-spec.ts
│ │ │ ├── groupBy-spec.ts
│ │ │ ├── ignoreElements-spec.ts
│ │ │ ├── isEmpty-spec.ts
│ │ │ ├── last-spec.ts
│ │ │ ├── map-spec.ts
│ │ │ ├── mapTo-spec.ts
│ │ │ ├── materialize-spec.ts
│ │ │ ├── max-spec.ts
│ │ │ ├── mergeAll-spec.ts
│ │ │ ├── mergeMap-spec.ts
│ │ │ ├── mergeMapTo-spec.ts
│ │ │ ├── mergeScan-spec.ts
│ │ │ ├── mergeWith-spec.ts
│ │ │ ├── min-spec.ts
│ │ │ ├── observeOn-spec.ts
│ │ │ ├── onErrorResumeNextWith-spec.ts
│ │ │ ├── pairwise-spec.ts
│ │ │ ├── raceWith-spec.ts
│ │ │ ├── reduce-spec.ts
│ │ │ ├── repeat-spec.ts
│ │ │ ├── repeatWhen-spec.ts
│ │ │ ├── retry-spec.ts
│ │ │ ├── retryWhen-spec.ts
│ │ │ ├── sample-spec.ts
│ │ │ ├── sampleTime-spec.ts
│ │ │ ├── scan-spec.ts
│ │ │ ├── sequenceEqual-spec.ts
│ │ │ ├── share-spec.ts
│ │ │ ├── shareReplay-spec.ts
│ │ │ ├── single-spec.ts
│ │ │ ├── skip-spec.ts
│ │ │ ├── skipLast-spec.ts
│ │ │ ├── skipUntil-spec.ts
│ │ │ ├── skipWhile-spec.ts
│ │ │ ├── startWith-spec.ts
│ │ │ ├── subscribeOn-spec.ts
│ │ │ ├── switchAll-spec.ts
│ │ │ ├── switchMap-spec.ts
│ │ │ ├── switchMapTo-spec.ts
│ │ │ ├── switchScan-spec.ts
│ │ │ ├── take-spec.ts
│ │ │ ├── takeLast-spec.ts
│ │ │ ├── takeUntil-spec.ts
│ │ │ ├── takeWhile-spec.ts
│ │ │ ├── tap-spec.ts
│ │ │ ├── throttle-spec.ts
│ │ │ ├── throttleTime-spec.ts
│ │ │ ├── throwIfEmpty-spec.ts
│ │ │ ├── timeInterval-spec.ts
│ │ │ ├── timeout-spec.ts
│ │ │ ├── timeoutWith-spec.ts
│ │ │ ├── timestamp-spec.ts
│ │ │ ├── toArray-spec.ts
│ │ │ ├── window-spec.ts
│ │ │ ├── windowCount-spec.ts
│ │ │ ├── windowTime-spec.ts
│ │ │ ├── windowToggle-spec.ts
│ │ │ ├── windowWhen-spec.ts
│ │ │ ├── withLatestFrom-spec.ts
│ │ │ ├── zipAll-spec.ts
│ │ │ └── zipWith-spec.ts
│ │ ├── tsconfig.json
│ │ ├── types-spec.ts
│ │ └── util/
│ │ ├── pipe-spec.ts
│ │ └── rx-spec.ts
│ ├── src/
│ │ ├── Rx.global.js
│ │ ├── ajax/
│ │ │ └── index.ts
│ │ ├── fetch/
│ │ │ └── index.ts
│ │ ├── index.ts
│ │ ├── internal/
│ │ │ ├── AnyCatcher.ts
│ │ │ ├── AsyncSubject.ts
│ │ │ ├── BehaviorSubject.ts
│ │ │ ├── Notification.ts
│ │ │ ├── Operator.ts
│ │ │ ├── ReplaySubject.ts
│ │ │ ├── Scheduler.ts
│ │ │ ├── Subject.ts
│ │ │ ├── ajax/
│ │ │ │ ├── AjaxResponse.ts
│ │ │ │ ├── ajax.ts
│ │ │ │ ├── errors.ts
│ │ │ │ └── types.ts
│ │ │ ├── firstValueFrom.ts
│ │ │ ├── lastValueFrom.ts
│ │ │ ├── observable/
│ │ │ │ ├── bindCallback.ts
│ │ │ │ ├── bindCallbackInternals.ts
│ │ │ │ ├── bindNodeCallback.ts
│ │ │ │ ├── combineLatest.ts
│ │ │ │ ├── concat.ts
│ │ │ │ ├── connectable.ts
│ │ │ │ ├── defer.ts
│ │ │ │ ├── dom/
│ │ │ │ │ ├── WebSocketSubject.ts
│ │ │ │ │ ├── animationFrames.ts
│ │ │ │ │ ├── fetch.ts
│ │ │ │ │ └── webSocket.ts
│ │ │ │ ├── empty.ts
│ │ │ │ ├── forkJoin.ts
│ │ │ │ ├── fromEvent.ts
│ │ │ │ ├── fromEventPattern.ts
│ │ │ │ ├── fromSubscribable.ts
│ │ │ │ ├── generate.ts
│ │ │ │ ├── iif.ts
│ │ │ │ ├── interval.ts
│ │ │ │ ├── merge.ts
│ │ │ │ ├── never.ts
│ │ │ │ ├── of.ts
│ │ │ │ ├── onErrorResumeNext.ts
│ │ │ │ ├── partition.ts
│ │ │ │ ├── race.ts
│ │ │ │ ├── range.ts
│ │ │ │ ├── throwError.ts
│ │ │ │ ├── timer.ts
│ │ │ │ ├── using.ts
│ │ │ │ └── zip.ts
│ │ │ ├── operators/
│ │ │ │ ├── audit.ts
│ │ │ │ ├── auditTime.ts
│ │ │ │ ├── buffer.ts
│ │ │ │ ├── bufferCount.ts
│ │ │ │ ├── bufferTime.ts
│ │ │ │ ├── bufferToggle.ts
│ │ │ │ ├── bufferWhen.ts
│ │ │ │ ├── catchError.ts
│ │ │ │ ├── combineLatestAll.ts
│ │ │ │ ├── combineLatestWith.ts
│ │ │ │ ├── concatAll.ts
│ │ │ │ ├── concatMap.ts
│ │ │ │ ├── concatMapTo.ts
│ │ │ │ ├── concatWith.ts
│ │ │ │ ├── connect.ts
│ │ │ │ ├── count.ts
│ │ │ │ ├── debounce.ts
│ │ │ │ ├── debounceTime.ts
│ │ │ │ ├── defaultIfEmpty.ts
│ │ │ │ ├── delay.ts
│ │ │ │ ├── delayWhen.ts
│ │ │ │ ├── dematerialize.ts
│ │ │ │ ├── distinct.ts
│ │ │ │ ├── distinctUntilChanged.ts
│ │ │ │ ├── distinctUntilKeyChanged.ts
│ │ │ │ ├── elementAt.ts
│ │ │ │ ├── endWith.ts
│ │ │ │ ├── every.ts
│ │ │ │ ├── exhaustAll.ts
│ │ │ │ ├── exhaustMap.ts
│ │ │ │ ├── expand.ts
│ │ │ │ ├── filter.ts
│ │ │ │ ├── finalize.ts
│ │ │ │ ├── find.ts
│ │ │ │ ├── findIndex.ts
│ │ │ │ ├── first.ts
│ │ │ │ ├── groupBy.ts
│ │ │ │ ├── ignoreElements.ts
│ │ │ │ ├── isEmpty.ts
│ │ │ │ ├── joinAllInternals.ts
│ │ │ │ ├── last.ts
│ │ │ │ ├── map.ts
│ │ │ │ ├── mapTo.ts
│ │ │ │ ├── materialize.ts
│ │ │ │ ├── max.ts
│ │ │ │ ├── mergeAll.ts
│ │ │ │ ├── mergeInternals.ts
│ │ │ │ ├── mergeMap.ts
│ │ │ │ ├── mergeMapTo.ts
│ │ │ │ ├── mergeScan.ts
│ │ │ │ ├── mergeWith.ts
│ │ │ │ ├── min.ts
│ │ │ │ ├── observeOn.ts
│ │ │ │ ├── onErrorResumeNextWith.ts
│ │ │ │ ├── pairwise.ts
│ │ │ │ ├── partition.ts
│ │ │ │ ├── raceWith.ts
│ │ │ │ ├── reduce.ts
│ │ │ │ ├── repeat.ts
│ │ │ │ ├── repeatWhen.ts
│ │ │ │ ├── retry.ts
│ │ │ │ ├── retryWhen.ts
│ │ │ │ ├── sample.ts
│ │ │ │ ├── sampleTime.ts
│ │ │ │ ├── scan.ts
│ │ │ │ ├── scanInternals.ts
│ │ │ │ ├── sequenceEqual.ts
│ │ │ │ ├── share.ts
│ │ │ │ ├── shareReplay.ts
│ │ │ │ ├── single.ts
│ │ │ │ ├── skip.ts
│ │ │ │ ├── skipLast.ts
│ │ │ │ ├── skipUntil.ts
│ │ │ │ ├── skipWhile.ts
│ │ │ │ ├── startWith.ts
│ │ │ │ ├── subscribeOn.ts
│ │ │ │ ├── switchAll.ts
│ │ │ │ ├── switchMap.ts
│ │ │ │ ├── switchMapTo.ts
│ │ │ │ ├── switchScan.ts
│ │ │ │ ├── take.ts
│ │ │ │ ├── takeLast.ts
│ │ │ │ ├── takeUntil.ts
│ │ │ │ ├── takeWhile.ts
│ │ │ │ ├── tap.ts
│ │ │ │ ├── throttle.ts
│ │ │ │ ├── throttleTime.ts
│ │ │ │ ├── throwIfEmpty.ts
│ │ │ │ ├── timeInterval.ts
│ │ │ │ ├── timeout.ts
│ │ │ │ ├── timeoutWith.ts
│ │ │ │ ├── timestamp.ts
│ │ │ │ ├── toArray.ts
│ │ │ │ ├── window.ts
│ │ │ │ ├── windowCount.ts
│ │ │ │ ├── windowTime.ts
│ │ │ │ ├── windowToggle.ts
│ │ │ │ ├── windowWhen.ts
│ │ │ │ ├── withLatestFrom.ts
│ │ │ │ ├── zipAll.ts
│ │ │ │ └── zipWith.ts
│ │ │ ├── scheduled/
│ │ │ │ ├── scheduleArray.ts
│ │ │ │ ├── scheduleAsyncIterable.ts
│ │ │ │ ├── scheduleIterable.ts
│ │ │ │ ├── scheduleObservable.ts
│ │ │ │ ├── schedulePromise.ts
│ │ │ │ ├── scheduleReadableStreamLike.ts
│ │ │ │ └── scheduled.ts
│ │ │ ├── scheduler/
│ │ │ │ ├── Action.ts
│ │ │ │ ├── AnimationFrameAction.ts
│ │ │ │ ├── AnimationFrameScheduler.ts
│ │ │ │ ├── AsapAction.ts
│ │ │ │ ├── AsapScheduler.ts
│ │ │ │ ├── AsyncAction.ts
│ │ │ │ ├── AsyncScheduler.ts
│ │ │ │ ├── QueueAction.ts
│ │ │ │ ├── QueueScheduler.ts
│ │ │ │ ├── VirtualTimeScheduler.ts
│ │ │ │ ├── animationFrame.ts
│ │ │ │ ├── animationFrameProvider.ts
│ │ │ │ ├── asap.ts
│ │ │ │ ├── async.ts
│ │ │ │ ├── dateTimestampProvider.ts
│ │ │ │ ├── immediateProvider.ts
│ │ │ │ ├── intervalProvider.ts
│ │ │ │ ├── performanceTimestampProvider.ts
│ │ │ │ ├── queue.ts
│ │ │ │ ├── timeoutProvider.ts
│ │ │ │ └── timerHandle.ts
│ │ │ ├── symbol/
│ │ │ │ └── iterator.ts
│ │ │ ├── testing/
│ │ │ │ ├── ColdObservable.ts
│ │ │ │ ├── HotObservable.ts
│ │ │ │ ├── TestMessage.ts
│ │ │ │ ├── TestScheduler.ts
│ │ │ │ └── subscription-logging.ts
│ │ │ ├── types.ts
│ │ │ └── util/
│ │ │ ├── ArgumentOutOfRangeError.ts
│ │ │ ├── EmptyError.ts
│ │ │ ├── Immediate.ts
│ │ │ ├── NotFoundError.ts
│ │ │ ├── SequenceError.ts
│ │ │ ├── args.ts
│ │ │ ├── argsArgArrayOrObject.ts
│ │ │ ├── argsOrArgArray.ts
│ │ │ ├── arrRemove.ts
│ │ │ ├── createObject.ts
│ │ │ ├── executeSchedule.ts
│ │ │ ├── identity.ts
│ │ │ ├── isDate.ts
│ │ │ ├── isScheduler.ts
│ │ │ ├── mapOneOrManyArgs.ts
│ │ │ ├── noop.ts
│ │ │ ├── not.ts
│ │ │ ├── pipe.ts
│ │ │ ├── rx.ts
│ │ │ ├── throwUnobservableError.ts
│ │ │ └── workarounds.ts
│ │ ├── operators/
│ │ │ └── index.ts
│ │ ├── testing/
│ │ │ └── index.ts
│ │ ├── tsconfig.base.json
│ │ ├── tsconfig.cjs.json
│ │ ├── tsconfig.cjs.spec.json
│ │ ├── tsconfig.esm.json
│ │ ├── tsconfig.types.json
│ │ ├── tsconfig.types.spec.json
│ │ └── webSocket/
│ │ └── index.ts
│ ├── tools/
│ │ ├── add-license-to-file.js
│ │ ├── generate-alias.js
│ │ └── subject-benchmark.js
│ ├── tsconfig.json
│ ├── tsconfig.mocha.json
│ └── wallaby.js
├── resources/
│ └── CI-CD/
│ └── README.md
└── scripts/
├── copy-common-package-files.js
├── publish.js
└── release.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .editorconfig
================================================
root = true
[*]
end_of_line = lf
indent_size = 2
indent_style = space
trim_trailing_whitespace = true
================================================
FILE: .eslintignore
================================================
packages/rxjs/integration/import/fixtures
================================================
FILE: .eslintrc.json
================================================
{
"root": true,
"ignorePatterns": ["**/*"],
"plugins": ["@nx"],
"overrides": [
{
"files": ["*.ts", "*.tsx"],
"extends": ["plugin:@nx/typescript"],
"rules": {
"@typescript-eslint/no-explicit-any": "off",
"@typescript-eslint/no-unsafe-declaration-merging": "off",
"@typescript-eslint/consistent-type-imports": "warn",
"@typescript-eslint/consistent-type-exports": "warn",
"no-prototype-builtins": "off",
"@typescript-eslint/no-inferrable-types": "warn",
"@typescript-eslint/no-empty-function": "off",
"@typescript-eslint/no-empty-interface": "off"
}
},
{
"files": ["*.js", "*.jsx"],
"extends": ["plugin:@nx/javascript"],
"rules": {}
},
{
"files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
"rules": {
"@nx/enforce-module-boundaries": [
"error",
{
"enforceBuildableLibDependency": true,
"allow": [],
"depConstraints": [
{
"sourceTag": "*",
"onlyDependOnLibsWithTags": ["*"]
}
]
}
],
"@typescript-eslint/no-unused-vars": "off"
}
}
]
}
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: Bug Report
description: Bug report for RxJS core behavior.
body:
- type: textarea
id: description
attributes:
label: Describe the bug
description: |
A clear and concise description of the behavior.
validations:
required: true
- type: textarea
id: expected-behavior
attributes:
label: Expected behavior
description: A clear and concise description of what you expect to happen.
validations:
required: true
- type: textarea
id: code
attributes:
label: Reproduction code
description: Code to create a minimal reproduction.
render: typescript
- type: input
id: repro-link
attributes:
label: Reproduction URL
description: Use [Stackblitz](https://stackblitz.com/fork/rxjs) or a git repo to show a minimal reproduction of the issue. Please also paste the example code in the "Reproduction code" section above.
- type: input
id: version
attributes:
label: Version
validations:
required: true
- type: textarea
id: environment
attributes:
label: Environment
placeholder: Version of runtime environment, build configuration, etc, that can affect behavior of RxJS.
- type: textarea
id: addition
attributes:
label: Additional context
placeholder: Add any other context about the problem here.
================================================
FILE: .github/ISSUE_TEMPLATE/config.yml
================================================
blank_issues_enabled: false
contact_links:
- name: Questions, request, issues other than Rx core bugs
url: https://github.com/ReactiveX/rxjs/discussions
about: For general discussions, or request please use discussions.
================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
<!--
Thank you very much for your pull request!
If your PR is the addition of a new operator, please make sure all these boxes are ticked with an x:
- [ ] Add the operator to Rx
- [ ] It must have a `-spec.ts` tests file covering the canonical corner cases, with marble diagram tests
- [ ] The spec file should have a type definition test at the end of the spec to verify type definition for various use cases
- [ ] The operator must be documented in JSDoc style in the implementation file, including also the PNG marble diagram image
- [ ] The operator should be listed in `apps/rxjs.dev/content/guide/operators.md` in a category of operators
- [ ] The operator should also be documented. See [Documentation Guidelines](../CONTRIBUTING.md).
- [ ] You may need to update `MIGRATION.md` if the operator differs from the corresponding one in RxJS v4
-->
**Description:**
<!--
If this PR introduces a breaking change, it must contain a notice for it to be included in the CHANGELOG.
-->
**BREAKING CHANGE:** <!-- add description or remove entirely if not breaking -->
**Related issue (if exists):**
================================================
FILE: .github/actions/install-dependencies/action.yml
================================================
name: Install Dependencies
description: 'Prepares the repo by installing dependencies'
inputs:
node-version:
description: 'The node version to setup'
required: true
registry-url:
description: 'Define registry-url'
required: false
default: 'https://registry.npmjs.org'
# outputs: - no outputs
runs:
using: 'composite'
steps:
- name: Use Node.js ${{ inputs.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ inputs.node-version }}
registry-url: ${{ inputs.registry-url }}
- name: Get yarn cache directory path
id: yarn-cache-dir-path
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
shell: bash
- uses: actions/cache@v3
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Install dependencies
run: yarn install --frozen-lockfile
shell: bash
env:
YARN_CACHE_FOLDER: ${{ steps.yarn-cache-dir-path.outputs.dir }}
================================================
FILE: .github/lock.yml
================================================
# Configuration for lock-threads - https://github.com/dessant/lock-threads
# Number of days of inactivity before a closed issue or pull request is locked
daysUntilLock: 30
# Issues and pull requests with these labels will not be locked. Set to `[]` to disable
exemptLabels: []
# Label to add before locking, such as `outdated`. Set to `false` to disable
lockLabel: false
# Comment to post before locking. Set to `false` to disable
lockComment: false
# Limit to only `issues` or `pulls`
# only: issues
# Optionally, specify configuration settings just for `issues` or `pulls`
# issues:
# exemptLabels:
# - help-wanted
# lockLabel: outdated
# pulls:
# daysUntilLock: 30
================================================
FILE: .github/workflows/ci_main.yml
================================================
name: CI
on:
pull_request:
types: ['opened', 'reopened', 'synchronize']
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node: ['18', '20']
name: Node ${{ matrix.node }} build
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
with:
node-version: ${{ matrix.node }}
- name: Build, test and lint all projects (except website)
run: yarn nx run-many -t build lint test --exclude=rxjs.dev
- name: rxjs lint
run: yarn workspace rxjs lint
- name: rxjs build
run: yarn workspace rxjs build
- name: rxjs test
run: yarn workspace rxjs test
- name: rxjs dtslint
run: yarn workspace rxjs dtslint
- name: rxjs test:import
run: yarn workspace rxjs test:import
- name: rxjs test:esm
run: yarn workspace rxjs test:esm
- name: rxjs.dev build
run: yarn workspace rxjs.dev build --prod
- name: rxjs.dev test
run: yarn workspace rxjs.dev test --watch=false --browsers=ChromeHeadless
================================================
FILE: .github/workflows/ci_ts_latest.yml
================================================
name: CI (ts@latest)
on:
pull_request:
types: ['opened', 'reopened', 'synchronize']
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node: ['20']
name: ts@latest
steps:
- uses: actions/checkout@v4
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
with:
node-version: ${{ matrix.node }}
- name: build
run: |
yarn workspace rxjs add typescript@latest @types/node@latest --peer --no-save
yarn nx compile rxjs
================================================
FILE: .github/workflows/publish.yml
================================================
name: publish
on:
# Run manually using the GitHub UI
workflow_dispatch:
inputs:
version:
description: 'Version to publish'
required: false
default: ''
# ...or whenever a GitHub release gets created
release:
types: [published]
jobs:
publish:
name: Publish to npm
runs-on: ubuntu-latest
permissions:
id-token: write # needed for provenance data generation
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0 # include tags
- name: Install Dependencies
uses: ./.github/actions/install-dependencies
with:
node-version: 20
- name: Prepare packages for publishing
run: yarn prepare-packages
- name: Apply updated version to packages
run: |
# Use the version from the workflow input if it's set, otherwise use the tag name from the release
VERSION=${{ github.event.inputs.version || github.ref_name }}
yarn nx release version $VERSION
- name: Publish packages to npm
run: node ./scripts/publish.js
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true
================================================
FILE: .github/workflows/rebase.yml
================================================
on:
issue_comment:
types: [created]
permissions:
contents: read
name: Automatic Rebase
jobs:
rebase:
permissions:
contents: write # for cirrus-actions/rebase to push code to rebase
pull-requests: read # for cirrus-actions/rebase to get info about PR
name: Rebase
if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase')
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Automatic Rebase
uses: cirrus-actions/rebase@1.2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# https://github.community/t5/GitHub-Actions/Workflow-is-failing-if-no-job-can-be-ran-due-to-condition/m-p/38186#M3250
always_job:
name: Always run job
runs-on: ubuntu-latest
steps:
- name: Always run
run: echo "This job is used to prevent the workflow to fail when all other jobs are skipped."
================================================
FILE: .gitignore
================================================
# Editor-specific
.idea/
*.iml
*.sublime-project
*.sublime-workspace
.settings
.vscode
# Installed libs
node_modules/
typings/
# Generated
dist/
.tshy-build
# Import location artifacts
packages/rxjs/ajax/
packages/rxjs/fetch/
packages/rxjs/operators/
packages/rxjs/testing/
packages/rxjs/webSocket/
# Copied Package Files
packages/**/LICENSE.txt
packages/**/CODE_OF_CONDUCT.md
# Misc
npm-debug.log
.DS_STORE
*.tgz
.eslintcache
package-lock.json
integration/import/**/rx.json
integration/import/**/operators.json
.nx/cache
================================================
FILE: .prettierrc.json
================================================
{
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 140,
"overrides": [
{
"files": ["spec/**/*.ts", "spec-dtslint/**/*.ts"],
"options": {
"requirePragma": true
}
},
{
"files": ["spec/operators/**/*.ts", "spec/subjects/**/*.ts"],
"options": {
"requirePragma": false
}
}
]
}
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting Ben Lesh (ben@benlesh.com), Tracy Lee (tracy@thisdot.co) or OJ Kwon (kwon.ohjoong@gmail.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to RxJS
[Read and abide by the Code of Conduct](CODE_OF_CONDUCT.md)! Even if you don't read it,
it still applies to you. Ignorance is not an exemption.
Contents
- [Contributing to RxJS](#contributing-to-rxjs)
- [Submitting a Pull Request (PR)](#submitting-a-pull-request-pr)
- [After your pull request is merged](#after-your-pull-request-is-merged)
- [Coding Style Guidelines](#coding-style-guidelines)
- [Documentation](#documentation)
- [Unit Tests](#unit-tests)
- [CI Tests](#ci-tests)
- [Performance Tests](#performance-tests)
- [Macro](#macro)
- [Micro](#micro)
- [Commit Message Guidelines](#commit-message-guidelines)
- [Commit Message Format](#commit-message-format)
- [Revert](#revert)
- [Type](#type)
- [Scope](#scope)
- [Subject](#subject)
- [Body](#body)
- [Footer](#footer)
---
- Related documents
- [Creating Operators](apps/rxjs.dev/content/guide/operators.md#creating-custom-operators)
- [Writing Marble Tests](apps/rxjs.dev/content/guide/testing/marble-testing.md)
---
(This document is a work in progress and is subject to change)
## Submitting a Pull Request (PR)
Before you submit your Pull Request (PR) consider the following guidelines:
- Search [GitHub](https://github.com/ReactiveX/RxJS/pulls) for an open or closed PR
that relates to your submission. You don't want to duplicate effort.
- Make your changes in a new git branch:
```shell
git checkout -b my-fix-branch master
```
- Create your patch, following [code style guidelines](#coding-style-guidelines), and **including appropriate test cases**.
- Run the full test suite and ensure that all tests pass.
- Commit your changes using a descriptive commit message that follows our
[commit message guidelines](#commit-message-guidelines). Adherence to these conventions
is necessary because release notes are automatically generated from these messages.
```shell
git commit -a
```
Note: the optional commit `-a` command line option will automatically "add" and "rm" edited files.
- Push your branch to GitHub:
```shell
git push origin my-fix-branch
```
- In GitHub, send a pull request to `RxJS:master`.
- If we suggest changes then:
- Make the required updates.
- Re-run the test suites to ensure tests are still passing.
- Re-run performance tests to make sure your changes didn't hurt performance.
- Rebase your branch and force push to your GitHub repository (this will update your Pull Request):
```shell
git rebase master -i
git push -f
```
- When updating your feature branch with the requested changes, please do not overwrite the commit history, but rather contain the changes in new commits. This is for the sake of a clearer and easier review process.
That's it! Thank you for your contribution!
### After your pull request is merged
After your pull request is merged, you can safely delete your branch and pull the changes
from the main (upstream) repository:
- Delete the remote branch on GitHub either through the GitHub web UI or your local shell as follows:
```shell
git push origin --delete my-fix-branch
```
- Check out the master branch:
```shell
git checkout master -f
```
- Delete the local branch:
```shell
git branch -D my-fix-branch
```
- Update your master with the latest upstream version:
```shell
git pull --ff upstream master
```
## Coding Style Guidelines
- Please use proper types and generics throughout your code.
- 2 space indentation only
- favor readability over terseness
(TBD): For now, try to follow the style that exists elsewhere in the source, and use your best judgment.
## Documentation
- The documentation is auto-generated directly from the source code.
- In short: From the source code we generate JSON documents, describing each operator, function ... and render this JSON within an Angular application
- The folder `apps/rxjs.dev` contains everything you need for building and developing the docs
- The [Documentation README](apps/rxjs.dev/README.md) will support you
- After a PR is merged to master the docs will be published to https://rxjs.dev/
## Unit Tests
Unit tests are located under the [spec directory](/spec). Unit tests over synchronous operators and operations
can be written in a standard [chai](https://www.chaijs.com/) style. Unit tests written against any
asynchronous operator should be written in [Marble Test Style outlined in detail here](apps/rxjs.dev/content/guide/testing/marble-testing.md).
Each operator under test must be in its own file to cover the following cases:
- Never
- Empty
- Single/Multiple Values
- Error in the sequence
- Never ending sequences
- Early disposal in sequences
If the operator accepts a function as an argument from the user/developer (for example `filter(fn)` or `zip(a, fn)`),
then it must cover the following cases:
- Success with all values in the callback
- Success with the context, if any allowed in the operator signature
- If an error is thrown
### CI Tests
- Using [Travis](https://travis-ci.org/) on your forked version of RxJS will allow running CI tests on that fork before submitting a PR to master
- Simply create a `Travis` account and add your fork as a new project
- [Sauce Labs](https://saucelabs.com/) setup will allow performing automated browser tests on the fork. Since `saucelabs` doesn't perform browser tests on a PR, this will help verify test results before PR's are checked into master.
- In your `Travis` repo configuration, set the environment variables SAUCE_USERNAME and SAUCE_ACCESS_KEY to your `saucelabs` account ([reference](https://cloud.githubusercontent.com/assets/1210596/12679038/b9ba4eb6-c656-11e5-8c9b-b063c9a3f9dc.png))
- As master runs both of these tests per each check in, it'd be welcome to setup those test before creating your PR
## Performance Tests
One of the primary goals of this library is (and will continue to be) great performance. As such, we've employed a variety of performance
testing techniques.
- DON'T labor over minute variations in ops/sec or milliseconds, there will always be variance in perf test results.
- DON'T alter a performance test unless absolutely necessary. Performance tests may be compared to previous results from previous builds.
- DO run tests multiple times and make sure the margins of error are low
- DO run tests in your feature branches and compare them to master
- DO add performance tests for all new operators
- DO add performance tests that you feel are missing from other operators
- DO add additional performance tests for all worthy code paths. If you develop an operator with special handling for scalar observables,
please add tests for those scenarios
### Macro
[Macro performance tests](perf/macro) are best written for scenarios where many object instance allocations (or deallocations) are occurring. Operators
that create a lot of child subscriptions or operators that emit new objects like Observables and Subjects are definitely worth creating
macro performance tests for.
Other scenarios for macro performance testing may include common end-to-end scenarios from real-world apps. If you have a situation in your
app where you feel RxJS is performing poorly, please [submit an issue](https://github.com/ReactiveX/rxjs/issues/) and include a minimal code example showing
your performance issues. We would love to solve perf for your real-world problems and add those tests to our perf test battery.
Macro performance tests can be run by hosting the root directory with any web server (we use [http-server](https://www.npmjs.com/package/http-server)),
then running:
```sh
yarn build_all
protractor protractor.conf.js
```
### Micro
[Micro performance tests](perf/micro) really only serve to test operations per second. They're quick and easy to develop, and provide a reasonable look into the
relative performance of our operators versus prior versions. All operators should have corresponding micro performance tests.
Micro performance test can be run with:
```sh
yarn build_all
node perf/micro
```
If you wish to run a single micro performance test, you can do so by providing a single argument with the name of the perf test file(s):
```sh
node perf/micro zip
```
## Commit Message Guidelines
We have very precise rules over how our git commit messages can be formatted. This leads to **more
readable messages** that are easy to follow when looking through the **project history**. But also,
we use the git commit messages to **generate the RxJS change log**. Helper script `yarn commit`
provides command line based wizard to format commit message easily.
### Commit Message Format
Each commit message consists of a **header**, a **body** and a **footer**. The header has a special
format that includes a **type**, a **scope** and a **subject**:
```
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>
```
The **header** is mandatory and the **scope** of the header is optional.
Any line of the commit message cannot be longer than 100 characters! This allows the message to be easier
to read on GitHub as well as in various git tools.
### Revert
If the commit reverts a previous commit, it should begin with `revert:`, followed by the header of the reverted commit. In the body it should say: `This reverts commit <hash>.`, where the hash is the SHA of the commit being reverted.
### Type
Must be one of the following:
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing
semi-colons, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests
- **chore**: Changes to the build process or auxiliary tools and libraries such as documentation
generation
### Scope
The scope could be anything specifying the place of the commit change. For example
`Observable`, `Subject`, `switchMap`, etc.
### Subject
The subject contains succinct description of the change:
- use the imperative, present tense: "change" not "changed" nor "changes"
- don't capitalize first letter
- no dot (.) at the end
### Body
Just as in the **subject**, use the imperative, present tense: "change" not "changed" nor "changes".
The body should include the motivation for the change and contrast this with previous behavior.
### Footer
The footer should contain any information about **Breaking Changes** and is also the place to
reference GitHub issues that this commit **Closes**.
**Breaking Changes** should start with the word `BREAKING CHANGE:` with a space or two newlines. The rest of the commit message is then used for this.
================================================
FILE: LICENSE.txt
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright (c) 2015-2025
Ben Lesh <ben@benlesh.com>
Google, Inc.
Netflix, Inc.
Microsoft Corp.
and contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
# <img src="apps/rxjs.dev/src/assets/images/logos/Rx_Logo_S.png" alt="RxJS Logo" width="86" height="86"> RxJS: Reactive Extensions For JavaScript

[](http://badge.fury.io/js/rxjs)
[](https://gitter.im/Reactive-Extensions/RxJS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
# RxJS 8 Monorepo
Look for RxJS and related packages under the [/packages](/packages/) directory. Applications like the [rxjs.dev](https://rxjs.dev) documentation site are under the [/apps](/apps/) directory.
[Apache 2.0 License](LICENSE.txt)
- [Code of Conduct](CODE_OF_CONDUCT.md)
- [Contribution Guidelines](CONTRIBUTING.md)
- [Maintainer Guidelines](apps/rxjs.dev/content/maintainer-guidelines.md)
- [API Documentation](https://rxjs.dev/)
Reactive Extensions Library for JavaScript. This is a rewrite of [Reactive-Extensions/RxJS](https://github.com/Reactive-Extensions/RxJS) and is the latest production-ready version of RxJS. This rewrite is meant to have better performance, better modularity, better debuggable call stacks, while staying mostly backwards compatible, with some breaking changes that reduce the API surface.
## Versions In This Repository
- [master](https://github.com/ReactiveX/rxjs/commits/master) - This is all of the current work, which is against v8 of RxJS right now
- [7.x](https://github.com/ReactiveX/rxjs/tree/7.x) - This is the branch for version 7.X
- [6.x](https://github.com/ReactiveX/rxjs/tree/6.x) - This is the branch for version 6.X
Most PRs should be made to **master**.
## Important
By contributing or commenting on issues in this repository, whether you've read them or not, you're agreeing to the [Contributor Code of Conduct](CODE_OF_CONDUCT.md). Much like traffic laws, ignorance doesn't grant you immunity.
## Development
Because of [this issue](https://github.com/npm/rfcs/issues/287#issuecomment-1727960500) we're using `yarn`. (Basically the docs app uses `@types/jasmine`, and the package uses `@types/mocha` and they get hoisted to the top level by `npm install` with workspaces, and then TypeScript vomits everywhere when you try to build).
1. `cd` to the repository root
2. `yarn install` to install all dependencies
3. `yarn workspace rxjs test` will run the RxJS test suite
4. `yarn workspace rxjs.dev start` will start the rxjs.dev documentation site local development server
================================================
FILE: SECURITY.md
================================================
# Security Policy
## Supported Versions
Security updates are applied only to the latest release.
## Reporting a Vulnerability
If you have discovered a security vulnerability in this project, please report it privately. **Do not disclose it as a public issue.** This gives us time to work with you to fix the issue before public exposure, reducing the chance that the exploit will be used before a patch is released. Besides, make sure to align with us before any public disclosure to ensure no dangerous information goes public too soon.
Please disclose it at [security advisory](https://github.com/ReactiveX/rxjs/security/advisories/new).
Although we will be working to solve any security issue as fast as possible, it is also important to notice that, in accordance with Apache 2.0 terms, no RxJS contributor can be liable for damages, including the ones caused by a security issue.
================================================
FILE: apps/rxjs.dev/.browserslistrc
================================================
# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.
# For additional information regarding the format and rule options, please see:
# https://github.com/browserslist/browserslist#queries
# You can see what browsers were selected by your queries by running:
# npx browserslist
> 0.5%
last 2 versions
Firefox ESR
not dead
not IE 9-11 # For IE 9-11 support, remove 'not'.
not ios_saf 15.2-15.3
not safari 15.2-15.3
================================================
FILE: apps/rxjs.dev/.eslintrc.js
================================================
module.exports = {
root: true,
overrides: [
{
files: ['*.ts'],
parserOptions: {
project: ['./tsconfig.json', './tests/e2e/tsconfig.e2e.json'],
createDefaultProgram: true,
tsconfigRootDir: __dirname,
},
extends: [
'plugin:@angular-eslint/ng-cli-compat',
'plugin:@angular-eslint/ng-cli-compat--formatting-add-on',
'plugin:@angular-eslint/template/process-inline-templates',
],
rules: {
'@typescript-eslint/ban-types': 'error',
'@angular-eslint/component-selector': [
'error',
{
type: 'element',
prefix: 'aio',
style: 'kebab-case',
},
],
'@angular-eslint/directive-selector': [
'error',
{
type: 'attribute',
prefix: 'aio',
style: 'camelCase',
},
],
'dot-notation': 'error',
indent: 'off',
'max-len': ['error', 140],
'@typescript-eslint/member-delimiter-style': [
'error',
{
singleline: {
delimiter: 'comma',
requireLast: false,
},
},
],
'@typescript-eslint/member-ordering': 'off',
'@typescript-eslint/naming-convention': 'off',
'no-console': ['error', { allow: ['log', 'warn', 'error'] }],
'no-empty-function': 'off',
'@angular-eslint/no-host-metadata-property': 'off',
'no-restricted-syntax': [
'error',
{
selector: 'CallExpression[callee.name=/^(fdescribe|fit)$/]',
message: "Don't keep jasmine focus methods.",
},
],
'no-shadow': 'off',
'@typescript-eslint/no-shadow': ['error'],
'no-tabs': 'error',
'no-underscore-dangle': 'off',
'no-unused-expressions': 'off',
'@typescript-eslint/no-unused-expressions': ['error'],
'no-use-before-define': 'off',
'prefer-arrow/prefer-arrow-functions': 'off',
quotes: 'off',
'@typescript-eslint/quotes': ['error', 'single', { avoidEscape: true }],
semi: 'error',
'jsdoc/newline-after-description': 'off',
'@typescript-eslint/no-non-null-assertion': 'off',
},
},
{
files: ['*.html'],
extends: ['plugin:@angular-eslint/template/recommended'],
rules: {
'@angular-eslint/template/accessibility-alt-text': 'error',
'@angular-eslint/template/accessibility-elements-content': 'error',
'@angular-eslint/template/accessibility-label-has-associated-control': 'error',
'@angular-eslint/template/accessibility-table-scope': 'error',
'@angular-eslint/template/accessibility-valid-aria': 'error',
'@angular-eslint/template/click-events-have-key-events': 'error',
'@angular-eslint/template/eqeqeq': 'off',
'@angular-eslint/template/mouse-events-have-key-events': 'error',
'@angular-eslint/template/no-autofocus': 'error',
'@angular-eslint/template/no-distracting-elements': 'error',
'@angular-eslint/template/no-positive-tabindex': 'error',
},
},
],
};
================================================
FILE: apps/rxjs.dev/.firebaserc
================================================
{
"targets": {
"rxjs-dev": {
"hosting": {
"stable": [
"rxjs-dev"
]
}
}
}
}
================================================
FILE: apps/rxjs.dev/.gitignore
================================================
# See http://help.github.com/ignore-files/ for more about ignoring files.
# compiled output
/dist
/out-tsc
/src/generated
/tmp
# dependencies
/node_modules
# IDEs and editors
/.idea
.project
.classpath
.c9/
*.launch
.settings/
*.sublime-workspace
# IDE - VSCode
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
# misc
/.angular/cache
/.sass-cache
/connect.lock
/coverage
/libpeerconnection.log
debug.log
npm-debug.log
testem.log
/typings
yarn-error.log
# e2e
/e2e/*.js
/e2e/*.map
protractor-results*.txt
# System Files
.DS_Store
Thumbs.db
assets/images/svgs/*
!assets/images/svgs/.gitkeep
================================================
FILE: apps/rxjs.dev/README.md
================================================
# RxJS documentation project
Everything in this folder is part of the documentation project. This includes
- the web site for displaying the documentation
- the dgeni configuration for converting source files to rendered files that can be viewed in the web site.
## Developer tasks
We use `npm` to manage the dependencies and to run build tasks.
You should run all these tasks from the `apps/rxjs.dev` folder.
Here are the most important tasks you might need to use:
- `npm install` - install all the dependencies.
- `yarn setup` - install all the dependencies and run dgeni on the docs.
- `yarn build` - create a production build of the application (after installing dependencies, etc).
- `npm start` - run a development web server that watches the files; then builds the doc-viewer and reloads the page, as necessary.
- `yarn serve-and-sync` - run both the `docs-watch` and `start` in the same console.
- `yarn lint` - check that the doc-viewer code follows our style rules.
- `npm test` - watch all the source files, for the doc-viewer, and run all the unit tests when any change.
- `npm test -- --watch=false` - run all the unit tests once.
- `yarn e2e` - run all the e2e tests for the doc-viewer.
- `yarn docs` - generate all the docs from the source files.
- `yarn docs-watch` - watch the RxJS source and the docs files and run a short-circuited doc-gen for the docs that changed (don't work properly at the moment).
- `yarn docs-lint` - check that the doc gen code follows our style rules.
- `yarn docs-test` - run the unit tests for the doc generation code.
## Using ServiceWorker locally
Running `yarn start` (even when explicitly targeting production mode) does not set up the
ServiceWorker. If you want to test the ServiceWorker locally, you can use `yarn build` and then
serve the files in `dist/` with `yarn http-server -- dist -p 4200`.
## Running on Docker
The docs app (rxjs.dev) can run as a docker container.
In order to run the docs app on docker, use the following commands (**run from the rxjs folder**):
- `docker build -t rxjs-docs:6.4.1 .` - building the rxjs docs app image
- `docker run -p <host-port>:4200 rxjs-docs:6.4.1` - starting the container, listening on _<host-port>_ for your choice.
The container will run the documentation app with the script `start:docker` with the **stable configuration** and with 0.0.0.0 host support.
- Saving the image for later offline usage is available by building the container and then using `sudo docker save rxjs-docs:6.4.1 > <tar-name>.tar`
and loading it afterwards with `sudo docker load < <tar-name>.tar`.
> tested on ubuntu 18.04.2 with Docker 18.09.4
## Guide to authoring
There are two types of content in the documentation:
- **API docs**: descriptions of the modules, classes, interfaces, etc that make up RxJS.
API docs are generated directly from the source code.
The source code is contained in TypeScript files, located in the `/packages/rxjs/src` folder.
Each API item may have a preceding comment, which contains JSDoc style tags and content.
The content is written in markdown.
- **Other content**: guides, tutorials, and other marketing material.
All other content is written using markdown in text files, located in the `apps/rxjs.dev/content` folder.
More specifically, there are sub-folders that contain particular types of content: guides, tutorial and marketing.
### Generating the complete docs
The main task for generating the docs is `yarn docs`. This will process all the source files (API and other),
extracting the documentation and generating JSON files that can be consumed by the doc-viewer.
### Partial doc generation for editors
Full doc generation can take up to one minute. That's too slow for efficient document creation and editing.
You can make small changes in a smart editor that displays formatted markdown:
> In VS Code, _Cmd-K, V_ opens markdown preview in side pane; _Cmd-B_ toggles left sidebar
You also want to see those changes displayed properly in the doc viewer
with a quick, edit/view cycle time.
For this purpose, use the `yarn docs-watch` task, which watches for changes to source files and only
re-processes the files necessary to generate the docs that are related to the file that has changed.
Since this task takes shortcuts, it is much faster (often less than 1 second) but it won't produce full
fidelity content. For example, links to other docs and code examples may not render correctly. This is
most particularly noticed in links to other docs and in the embedded examples, which may not always render
correctly.
The general setup is as follows:
- Open a terminal, ensure the dependencies are installed; run an initial doc generation; then start the doc-viewer:
```bash
yarn setup
yarn start
```
- Open a second terminal and start watching the docs
```bash
yarn docs-watch
```
> Alternatively, try the consolidated `serve-and-sync` command that builds, watches and serves in the same terminal window
```bash
yarn serve-and-sync
```
- Open a browser at https://localhost:4200/ and navigate to the document on which you want to work.
You can automatically open the browser by using `npm start -- -o` in the first terminal.
- Make changes to the page's associated doc or example files. Every time a file is saved, the doc will
be regenerated, the app will rebuild and the page will reload.
- If you get a build error complaining about examples or any other odd behavior, be sure to consult
the [Authors Style Guide](https://angular.io/guide/docs-style-guide).
## Disclaimer
Starting the new documentation, we worked closely together with the Angular team and therefore adapted their way of generating docs. This leads to the effect, that there may be some references to angular (e.g. variable names, file names ...). Don't be confused by this, this shouldn't bother you. Thanks to the Angular Team for their support.
Anyway RxJS will always be an independent project, which aims to work closely with other technologies and frameworks!
================================================
FILE: apps/rxjs.dev/angular.json
================================================
{
"$schema": "../../node_modules/@angular/cli/lib/config/schema.json",
"version": 1,
"cli": {
"packageManager": "yarn",
"analytics": false
},
"newProjectRoot": "projects",
"projects": {
"site": {
"root": "",
"sourceRoot": "src",
"projectType": "application",
"prefix": "aio",
"architect": {
"build": {
"builder": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist",
"index": "src/index.html",
"main": "src/main.ts",
"tsConfig": "tsconfig.app.json",
"webWorkerTsConfig": "tsconfig.worker.json",
"namedChunks": true,
"polyfills": "src/polyfills.ts",
"assets": [
"src/img",
"src/assets",
"src/generated",
"src/app/search/search-worker.js",
"src/pwa-manifest.json",
"src/google385281288605d160.html",
{
"glob": "custom-elements.min.js",
"input": "node_modules/@webcomponents/custom-elements",
"output": "/assets/js"
},
{
"glob": "native-shim.js",
"input": "node_modules/@webcomponents/custom-elements/src",
"output": "/assets/js"
}
],
"styles": ["src/styles.scss"],
"scripts": [],
"vendorChunk": true,
"extractLicenses": false,
"buildOptimizer": false,
"sourceMap": true,
"optimization": {
"fonts": true,
"scripts": true,
"styles": {
"inlineCritical": false,
"minify": true
}
},
"outputHashing": "all"
},
"configurations": {
"fast": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
]
},
"next": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.next.ts"
}
],
"serviceWorker": true
},
"stable": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.stable.ts"
}
],
"serviceWorker": true
},
"archive": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.archive.ts"
}
],
"serviceWorker": true
},
"production": {
"budgets": [
{
"type": "anyComponentStyle",
"maximumWarning": "6kb"
}
],
"optimization": true,
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true,
"serviceWorker": true
}
},
"defaultConfiguration": ""
},
"serve": {
"builder": "@angular-devkit/build-angular:dev-server",
"options": {
"browserTarget": "site:build"
},
"configurations": {
"fast": {
"browserTarget": "site:build:fast"
},
"next": {
"browserTarget": "site:build:next"
},
"stable": {
"browserTarget": "site:build:stable"
},
"archive": {
"browserTarget": "site:build:archive"
},
"production": {
"browserTarget": "site:build:production"
}
}
},
"extract-i18n": {
"builder": "@angular-devkit/build-angular:extract-i18n",
"options": {
"browserTarget": "site:build"
}
},
"test": {
"builder": "@angular-devkit/build-angular:karma",
"options": {
"main": "src/test.ts",
"karmaConfig": "src/karma.conf.js",
"polyfills": "src/polyfills.ts",
"tsConfig": "tsconfig.spec.json",
"scripts": [],
"styles": ["src/styles.scss"],
"assets": [
"src/img",
"src/assets",
"src/generated",
"src/app/search/search-worker.js",
"src/pwa-manifest.json",
"src/google385281288605d160.html",
{
"glob": "custom-elements.min.js",
"input": "node_modules/@webcomponents/custom-elements",
"output": "/assets/js"
},
{
"glob": "native-shim.js",
"input": "node_modules/@webcomponents/custom-elements/src",
"output": "/assets/js"
}
]
}
},
"lint": {
"builder": "@angular-eslint/builder:lint",
"options": {
"lintFilePatterns": ["src/!(generated)/**/*.ts", "src/!(generated)/**/*.html", "tests/**/*.ts"]
}
},
"e2e": {
"builder": "@angular-devkit/build-angular:protractor",
"options": {
"protractorConfig": "tests/e2e/protractor.conf.js",
"devServerTarget": "site:serve"
}
}
}
}
},
"defaultProject": "site",
"schematics": {
"@schematics/angular:application": {
"strict": true
},
"@schematics/angular:component": {
"inlineStyle": true,
"style": "scss"
}
}
}
================================================
FILE: apps/rxjs.dev/content/6-to-7-change-summary.md
================================================
# RxJS 6.x to 7.x Detailed Change List
This document contains a detailed list of changes between RxJS 6.x and RxJS 7.x, presented in the order they can be found when diffing the TypeScript APIs in various module files.
## module `rxjs`
### Breaking changes
#### AsyncSubject
- `_subscribe` method is no longer `public` and is now `protected`.
- no longer has its own implementation of the `error` method inherited from `Subject`.
#### BehaviorSubject
- `_subscribe` method is no longer `public` and is now `protected`.
- `value` property is a getter `get value()` instead of `readonly value`, and can no longer be forcibly set.
#### bindCallback
- Generic signatures have changed. Do not explicitly pass generics.
#### combineLatest
- Generic signatures have changed. Do not explicitly pass generics.
#### concat
- Generic signatures have changed. Do not explicitly pass generics.
#### ConnectableObservable
- `_isComplete` is no longer a property.
- `_subscribe` method is no longer `public` and is now `protected`.
#### defer
- Generic argument no longer extends `void`.
- `defer` no longer allows factories to return void or undefined. All factories passed to `defer` must return a proper `ObservableInput`, such as `Observable`, `Promise`, et al. To get the same behavior as you may have relied on previously, `return EMPTY` or `return of()` from the factory.
#### forkJoin
- Generic signatures have changed. Do not explicitly pass generics.
#### fromEvent
- The `fromEvent` signatures have been changed and there are now separate signatures for each type of target - DOM, Node, jQuery, etc. That means that an attempt to pass options - like `{ once: true }` - to a target that does not support an options argument will result in a TypeScript error.
#### GroupedObservable
- No longer publicly exposes `_subscribe`
- `key` properly is `readonly`.
- No longer publicly exposes `constructor`.
#### iif
- Generic signatures have changed. Do not explicitly pass generics.
- `iif` will no longer allow result arguments that are `undefined`. This was a bad call pattern that was likely an error in most cases. If for some reason you are relying on this behavior, simply substitute `EMPTY` in place of the `undefined` argument. This ensures that the behavior was intentional and desired, rather than the result of an accidental `undefined` argument.
#### isObservable
- No longer has a generic and returns `Observable<unknown>`, you must cast the result.
#### merge
- Generic signatures have changed. Do not explicitly pass generics.
#### Notification
- The `error` property is now `readonly`.
- The `hasValue` property is now `readonly`.
- The `kind` property is now `readonly`.
- The `value` property is now `readonly` and may be `undefined`.
- `constructor` signature now only allows valid construction. For example `new Notification('C', 'some_value')` will be an error in TypeScript.
#### Observable
- `_isScalar` property removed.
- `_subscribe` method is no longer `public` and is now marked `@internal`.
- `_trySubscribe` method is no longer `public` and is now `@internal`.
- `pipe` method calls with `9` or more arguments will now return `Observable<unknown>` rather than `Observable<{}>`.
- `toPromise` method now correctly returns `Promise<T | undefined>` instead of `Promise<T>`. This is a correction without a runtime change, because if the observable does not emit a value before completion, the promise will resolve with `undefined`.
- `static if` and `static throw` properties are no longer defined. They were unused in version 6.
- `lift`, `source`, and `operator` properties are still **deprecated**, and should not be used. They are implementation details, and will very likely be renamed or missing in version 8.
#### of
- Generic signatures have changed. Do not explicitly pass generics.
#### onErrorResumeNext
- Generic signatures have changed. Do not explicitly pass generics.
#### pairs
- Generic signatures have changed. Do not explicitly pass generics.
- `pairs` will no longer function in IE without a polyfill for `Object.entries`. `pairs` itself is also deprecated in favor of users just using `from(Object.entries(obj))`.
#### partition
- Generic signatures have changed. Do not explicitly pass generics.
#### pipe
- Calls with `9` or more arguments will now return `(arg: A) => unknown` rather than `(arg: A) => {}`.
#### race
- Generic signatures have changed. Do not explicitly pass generics.
- `race` will no longer subscribe to subsequent observables if a provided source synchronously errors or completes. This means side effects that might have occurred during subscription in those rare cases will no longer occur.
#### ReplaySubject
- `_getNow` method has been removed.
- `_subscribe` method is no longer `public` and is now `protected`.
#### Subscribable
- `subscribe` will accept `Partial<Observer<T>>` now. All overloads with functions as arguments have been removed. This is because `Subscribable` is intended to map to the basic observable contract from the TC39 proposal and the return type of a call to `[Symbol.observable]()`.
#### SubscribableOrPromise
- See notes on `Subscribable` above.
#### Subscriber
- `destination` property must now be a `Subscriber` or full `Observer`.
- `syncErrorThrowable` property has been removed.
- `syncErrorThrown` property has been removed.
- `syncErrorValue` property has been removed.
- `_unsubscribeAndRecycle` method has been removed.
#### Subscription
- `_parentOrParents` property has been removed.
- `add` method returns `void` and no longer returns a `Subscription`. Returning `Subscription` was an old behavior from the early days of version 5. If you add a function to a subscription (i.e. `subscription.add(fn)`), you can remove that function directly by calling `remove` with the same function instance. (i.e. `subscription.remove(fn)`). Previously, you needed to get the returned `Subscription` object and pass _that_ to `remove`. In version 6 and lower, the `Subscription` returned by calling `add` with another `Subscription` was always the same subscription you passed in. (meaning `subscription.add(subs1).add(subs2)` was an antipattern and the same as `subscription.add(subs1); subs1.add(subs2);`.
#### VirtualAction
- The static `sortActions` method has been removed.
#### zip
- Generic signatures have changed. Do not explicitly pass generics.
- Zipping a single array will now have a different result. This is an extreme corner-case, because it is very unlikely that anyone would want to zip an array with nothing at all. The workaround would be to wrap the array in another array `zip([[1,2,3]])`. But again, that's pretty weird.
---
### New Features
#### animationFrames
- A new method for creating a stream of animation frames. Each event will carry with it a high-resolution timestamp, and an elapsed time since observation was started.
#### config
##### onUnhandledError
- A handler for dealing with errors that make it all the way down to the "end" of the observation chain when there is no error handler in the observer. Useful for doing things like logging unhandled errors in RxJS observable chains.
##### onStoppedNotification
- A handler for edge cases where a subscriber within RxJS is notified after it has already "stopped", that is, a point in time where it has received an error or complete, but hasn't yet finalized. This is mostly useful for logging purposes.
##### useDeprecatedNextContext
- In RxJS 6, a little-used feature allowed users to access the `subscriber` directly as `this` within a call to the `next` handler. The problem with this is it incurred heavy performance penalties. That behavior has been changed (because it wasn't really documented and it was barely ever used) to not change the `this` context of any user-provided subscription handlers. If you need to get that feature back, you can switch it on with this flag. Note this behavior will be removed completely in version 8.
#### connectable
- This is the new means for creating a `ConnectableObservable`, and really is a replacement for non-selector usage of `multicast` and `publish` variants. Simply pass your source observable to `connectable` with the `Subject` you'd like to connect through.
#### firstValueFrom
- A better, more tree-shakable replacement for `toPromise()` (which is now deprecated). This function allows the user to convert any `Observable` into a `Promise` that will resolve when the source observable emits its first value. If the source observable closes without emitting a value, the returned promise will reject with an `EmptyError`, or it will resolve with a configured `defaultValue`. For more information, see the [deprecation guide](/deprecations/to-promise).
#### lastValueFrom
- A better, more tree-shakable replacement for `toPromise()` (which is now deprecated). This function allows the user to convert any `Observable` in to a `Promise` that will resolve when the source observable emits the last value. If the source observable closes without emitting a value, the returned promise will reject with an `EmptyError`, or it will resolve with a configured `defaultValue`. For more information, see the [deprecation guide](/deprecations/to-promise).
#### ObservableInput
- This is just a type, but it's important. This type defines the allowed types that can be passed to almost every API within RxJS that accepts an Observable. It has always accepted `Observable`, `Promise`, `Iterable`, and `ArrayLike`. Now it will also accept `AsyncIterable` and `ReadableStream`.
##### AsyncIterable
- `AsyncIterables` such as those defined by `IxJS` or by async generators (`async function*`), may now be passed to any API that accepts an observable, and can be converted to an `Observable` directly using `from`.
##### ReadableStream
- `ReadableStream` such as those returned by `fetch`, et al, can be passed to any API that accepts an observable, and can be converted to `Observable` directly using `from`.
#### ReplaySubject
- A [bug was fixed](https://github.com/ReactiveX/rxjs/pull/5696) that prevented a completed or errored `ReplaySubject` from accumulating values in its buffer when resubscribed to another source. This breaks some uses - like [this StackOverflow answer](https://stackoverflow.com/a/54957061) - that depended upon the buggy behavior.
#### Subscription
- Now allows adding and removing of functions directly via `add` and `remove` methods.
#### throwError
- Now accepts an `errorFactory` of `() => any` to defer the creation of the error until the time it will be emitted. It is recommended to use this method, as Errors created in most popular JavaScript runtimes will retain all values in the current scope for debugging purposes.
## module `rxjs/operators`
### Breaking Changes
#### audit
- The observable returned by the `audit` operator's duration selector must emit a next notification to end the duration. Complete notifications no longer end the duration.
- `audit` now emits the last value from the source when the source completes. Previously, `audit` would mirror the completion without emitting the value.
#### auditTime
- `auditTime` now emits the last value from the source when the source completes, after the audit duration elapses. Previously, `auditTime` would mirror the completion without emitting the value and without waiting for the audit duration to elapse.
#### buffer
- `buffer` now subscribes to the source observable before it subscribes to the closing notifier. Previously, it subscribed to the closing notifier first.
- Final buffered values will now always be emitted. To get the same behavior as the previous release, you can use `endWith` and `skipLast(1)`, like so: `source$.pipe(buffer(notifier$.pipe(endWith(true))), skipLast(1))`
- `closingNotifier` completion no longer completes the result of `buffer`. If that is truly a desired behavior, then you should use `takeUntil`. Something like: `source$.pipe(buffer(notifier$), takeUntil(notifier$.pipe(ignoreElements(), endWith(true))))`, where `notifier$` is multicast, although there are many ways to compose this behavior.
#### bufferToggle
- The observable returned by the `bufferToggle` operator's closing selector must emit a next notification to close the buffer. Complete notifications no longer close the buffer.
#### bufferWhen
- The observable returned by the `bufferWhen` operator's closing selector must emit a next notification to close the buffer. Complete notifications no longer close the buffer.
#### combineLatest
- Generic signatures have changed. Do not explicitly pass generics.
#### concat
- Generic signatures have changed. Do not explicitly pass generics.
- Still deprecated, use the new `concatWith`.
#### concatAll
- Generic signatures have changed. Do not explicitly pass generics.
#### concatMapTo
- Generic signatures have changed. Do not explicitly pass generics.
#### count
- No longer passes `source` observable as a third argument to the predicate. That feature was rarely used, and of limited value. The workaround is to simply close over the source inside of the function if you need to access it in there.
#### debounce
- The observable returned by the `debounce` operator's duration selector must emit a next notification to end the duration. Complete notifications no longer end the duration.
#### debounceTime
- The `debounceTime` implementation is more efficient and no longer schedules an action for each received next notification. However, because the implementation now uses the scheduler's concept of time, any tests using Jasmine's `clock` will need to ensure that [`jasmine.clock().mockDate()`](https://jasmine.github.io/api/edge/Clock.html#mockDate) is called after `jasmine.clock().install()` - because Jasmine does not mock `Date.now()` by default.
#### defaultIfEmpty
- Generic signatures have changed. Do not explicitly pass generics.
- `defaultIfEmpty` requires a value be passed. Will no longer convert `undefined` to `null` for no good reason.
#### delayWhen
- `delayWhen` will no longer emit if the duration selector simply completes without a value. Notifiers must notify with a value, not a completion.
#### endWith
- Generic signatures have changed. Do not explicitly pass generics.
#### expand
- Generic signatures have changed. Do not explicitly pass generics.
#### finalize
- `finalize` will now unsubscribe from its source _before_ it calls its callback. That means that `finalize` callbacks will run in the order in which they occur in the pipeline: `source.pipe(finalize(() => console.log(1)), finalize(() => console.log(2)))` will log `1` and then `2`. Previously, callbacks were called in the reverse order.
#### map
- `thisArg` will now default to `undefined`. The previous default of `MapSubscriber` never made any sense. This will only affect code that calls map with a `function` and references `this` like so: `source.pipe(map(function () { console.log(this); }))`. There wasn't anything useful about doing this, so the breakage is expected to be very minimal. If anything we're no longer leaking an implementation detail.
#### merge
- Generic signatures have changed. Do not explicitly pass generics.
- Still deprecated, use the new `mergeWith`.
#### mergeAll
- Generic signatures have changed. Do not explicitly pass generics.
#### mergeScan
- `mergeScan` will no longer emit its inner state again upon completion.
#### pluck
- Generic signatures have changed. Do not explicitly pass generics.
#### race
- Generic signatures have changed. Do not explicitly pass generics.
#### reduce
- Generic signatures have changed. Do not explicitly pass generics.
#### sample
- The `sample` operator's notifier observable must emit a next notification to effect a sample. Complete notifications no longer effect a sample.
#### scan
- Generic signatures have changed. Do not explicitly pass generics.
#### single
- The `single` operator will now throw for scenarios where values coming in are either not present, or do not match the provided predicate. Error types have thrown have also been updated, please check documentation for changes.
#### skipLast
- `skipLast` will no longer error when passed a negative number, rather it will simply return the source, as though `0` was passed.
#### startWith
- Generic signatures have changed. Do not explicitly pass generics.
#### switchAll
- Generic signatures have changed. Do not explicitly pass generics.
#### switchMapTo
- Generic signatures have changed. Do not explicitly pass generics.
#### take
- `take` and will now throw runtime error for arguments that are negative or NaN, this includes non-TS calls like `take()`.
#### takeLast
- `takeLast` now has runtime assertions that throw `TypeError`s for invalid arguments. Calling `takeLast` without arguments or with an argument that is `NaN` will throw a `TypeError`.
#### throttle
- The observable returned by the `throttle` operator's duration selector must emit a next notification to end the duration. Complete notifications no longer end the duration.
#### throwError
- In an extreme corner case for usage, `throwError` is no longer able to emit a function as an error directly. If you need to push a function as an error, you will have to use the factory function to return the function like so: `throwError(() => functionToEmit)`, in other words `throwError(() => () => console.log('called later'))`.
#### window
- The `windowBoundaries` observable no longer completes the result. It was only ever meant to notify of the window boundary. To get the same behavior as the old behavior, you would need to add an `endWith` and a `skipLast(1)` like so: `source$.pipe(window(notifier$.pipe(endWith(true))), skipLast(1))`.
#### windowToggle
- The observable returned by the `windowToggle` operator's closing selector must emit a next notification to close the window. Complete notifications no longer close the window.
#### withLatestFrom
- Generic signatures have changed. Do not explicitly pass generics.
#### zip
- Generic signatures have changed. Do not explicitly pass generics.
- Still deprecated, use the new `zipWith`.
- `zip` operators will no longer iterate provided iterables "as needed", instead the iterables will be treated as push-streams just like they would be everywhere else in RxJS. This means that passing an endless iterable will result in the thread locking up, as it will endlessly try to read from that iterable. This puts us in line with all other Rx implementations. To work around this, it is probably best to use `map` or some combination of `map` and `zip`. For example, `zip(source$, iterator)` could be `source$.pipe(map(value => [value, iterator.next().value]))`.
### New Features
#### connect
- New operator to cover the use cases of `publish` variants that use a `selector`. Wherein the selector allows the user to define multicast behavior prior to connection to the source observable for the multicast.
#### share
- Added functionality to allow complete configuration of what type of `Subject` is used to multicast, and when that subject is reset.
#### timeout
- Added more configuration options to `timeout`, so it could be used to timeout just if the first item doesn't arrive quickly enough, or it could be used as a timeout between each item. Users may also pass a `Date` object to define an absolute time for a timeout for the first time to arrive. Adds additional information to the timeout error, and the ability to pass along metadata with the timeout for identification purposes.
#### zipWith, concatWith, mergeWith, raceWith
- Simply renamed versions of the operators `zip`, `concat`, `merge`, and `race`. So we can deprecate those old names and use the new names without collisions.
## module `rxjs/ajax`
### Breaking Changes
#### ajax
- `ajax` body serialization will now use default XHR behavior in all cases. If the body is a `Blob`, `ArrayBuffer`, any array buffer view (like a byte sequence, e.g. `Uint8Array`, etc), `FormData`, `URLSearchParams`, `string`, or `ReadableStream`, default handling is used. If the `body` is otherwise `typeof` `"object"`, then it will be converted to JSON via `JSON.stringify`, and the `Content-Type` header will be set to `application/json;charset=utf-8`. All other types will emit an error.
- The `Content-Type` header passed to `ajax` configuration no longer has any effect on the serialization behavior of the AJAX request.
- For TypeScript users, `AjaxRequest` is no longer the type that should be explicitly used to create an `ajax`. It is now `AjaxConfig`, although the two types are compatible, only `AjaxConfig` has `progressSubscriber` and `createXHR`.
- Ajax implementation drops support for IE10 and lower. This puts us in line with other implementations and helps clean up code in this area
#### AjaxRequest
- `AjaxRequest` is no longer used to type the configuration argument for calls to `ajax`. The new type is `AjaxConfig`. This was done to disambiguate two very similar types with different use cases. `AjaxRequest` is still there, but properties have changed, and it is used to show what final request information was sent as part of an event response.
### New Features
#### AjaxResponse
- Now includes `responseHeaders`.
- Now includes event `type` and `total` numbers for examining upload and download progress (see `includeUploadProgress` and `includeDownloadProgress`).
#### includeUploadProgress
- A flag to make a request that will include streaming upload progress events in the returned observable.
#### includeDownloadProgress
- A flag to make a request that will include streaming upload progress events in the returned observable.
#### queryParams
- Configuration for setting query parameters in the URL of the request to be made.
#### XSRF (CSRF) additions:
- `xsrfCookieName` and `xsrfHeaderName` were added for cross-site request forgery prevention capabilities.
## module `rxjs/fetch`
No changes.
## module `rxjs/testing`
### New Features
#### TestScheduler expectObservable().toEqual()
- A new means of comparing the equality of two observables. If all emissions are the same, and at the same time, then they are equal. This is primarily useful for refactoring operator chains and making sure that they are equivalent.
================================================
FILE: apps/rxjs.dev/content/blackLivesMatter.md
================================================
<style>
.blm-background {
background-color: black;
color: white;
display: flex;
min-height: calc(100vh + 64px);
margin: -20px -50px;
}
.text-container.blm-container {
text-align: center;
line-height: inherit;
max-width: inherit;
}
.blm-text {
font-size: 2rem;
line-height: inherit
}
.blm-list-item {
margin: 10px 0
}
</style>
<article class="blm-background">
<div layout="row" layout-xs="column" class="home-row homepage-container">
<div class="text-container blm-container">
<h1 class="no-anchor no-toc" style="font-size: 3rem; line-height: inherit">BLACK LIVES MATTER</h1>
<p class="blm-text">
We stand in solidarity with the Black Lives Matter movement. We believe that technologists must not be silent in the fight to end racial inequality. </p>
<p class="blm-text">
We ask you to stand with us and help educate your team members and those in your network on how to help dismantle a system that oppresses Black people. Find a list of starting resources here:
<ul style="list-style-type: none; line-height: inherit; padding-inline-start: 0">
<li class="blm-list-item"><a class="blm-text" href="https://www.youtube.com/watch?v=-aCn72iXO9s">Let's get to the root of racial injustice by Megan Ming Francis</a></li>
<li class="blm-list-item"><a class="blm-text" href="http://www.changecadet.com/blog/2020/5/30/what-leaders-can-do-for-black-employees">What Leaders can do for Black Employees by Dr. Akilah Cadet</a></li>
<li class="blm-list-item"><a class="blm-text" href="https://blacktechpipeline.substack.com/p/hey-employers-do-black-lives-matter">Hey Employers: Do Black Lives Matter? by Pariss Athena</a></li>
<li class="blm-list-item"><a class="blm-text" href="https://safiyaunoble.com/">Algorithms of Oppression by Safiya Umoja Noble</a></li>
<li class="blm-list-item"><a class="blm-text" href="https://www.rageinsidethemachine.com/">Rage Inside The Machine by Robert Smith</a></li>
<li class="blm-list-item"><a class="blm-text" href="https://www.sarawb.com/">Technically Wrong by Sara Wachter-Boettcher</a></li>
</ul>
</p>
<p class="blm-text">
In solidarity, we ask you to consider financially supporting efforts such as <a class="blm-text" href="https://secure.actblue.com/donate/ms_blm_homepage_2019">Black Lives Matter</a>,
<a class="blm-text" href="https://support.eji.org/give/153413/#!/donation/checkout">The Equal Justice Initiative</a> or local charity organizations.
</p>
</div>
</div>
</article>
================================================
FILE: apps/rxjs.dev/content/code-of-conduct.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, gender identity and expression, level of experience,
education, socio-economic status, nationality, personal appearance, race,
religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting Ben Lesh (ben@benlesh.com), Tracy Lee (tracy@thisdot.co) or OJ Kwon (kwon.ohjoong@gmail.com). All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
================================================
FILE: apps/rxjs.dev/content/deprecations/array-argument.md
================================================
# Array Arguments
To unify the API surface of `forkJoin` and `combineLatest` we deprecated some signatures.
Since that it is recommended to either pass an Object or an Array to these operators.
<div class="alert is-important">
<span>
This deprecation was introduced in RxJS 6.5.
</span>
</div>
## Operators affected by this Change
- [combineLatest](/api/index/function/combineLatest)
- [forkJoin](/api/index/function/forkJoin)
## How to Refactor
We deprecated the signatures, where just pass all Observables directly as parameters to these operators.
```ts
import {forkJoin, from} from 'rxjs';
const odd$ = from([1,3,5]);
const even$ = from([2,4,6]);
// deprecated
forkJoin(odd$, even$);
// suggested change
forkJoin([odd$, even$]);
// or
forkJoin({odd: odd$, even: even$})
```
================================================
FILE: apps/rxjs.dev/content/deprecations/breaking-changes.md
================================================
# Breaking Changes in Version 7
## General
- **TS:** RxJS requires TS 4.2
- **rxjs-compat:** `rxjs-compat` is not published for v7
- **toPromise:** toPromise return type now returns `T | undefined` in TypeScript, which is correct, but may break builds.
- **Subscription:** `add` no longer returns an unnecessary Subscription reference. This was done to prevent confusion caused by a legacy behavior. You can now add and remove functions and Subscriptions as teardowns to and from a `Subscription` using `add` and `remove` directly. Before this, `remove` only accepted subscriptions.
- **Observable:** `lift` no longer exposed. It was _NEVER_ documented that end users of the library should be creating operators using `lift`. Lift has a [variety of issues](https://github.com/ReactiveX/rxjs/issues/5431) and was always an internal implementation detail of rxjs that might have been used by a few power users in the early days when it had the most value. The value of `lift`, originally, was that subclassed `Observable`s would compose through all operators that implemented lift. The reality is that feature is not widely known, used, or supported, and it was never documented as it was very experimental when it was first added. Until the end of v7, `lift` will remain on Observable. Standard JavaScript users will notice no difference. However, TypeScript users might see complaints about `lift` not being a member of observable. To workaround this issue there are two things you can do: 1. Rewrite your operators as [outlined in the documentation](https://rxjs.dev/guide/operators), such that they return `new Observable`. or 2. cast your observable as `any` and access `lift` that way. Method 1 is recommended if you do not want things to break when we move to version 8.
- **Subscriber:** `new Subscriber` no longer takes 0-3 arguments. To create a `Subscriber` with 0-3 arguments, use `Subscriber.create`. However, please note that there is little to no reason that you should be creating `Subscriber` references directly, and `Subscriber.create` and `new Subscriber` are both deprecated.
- **onUnhandledError:** Errors that occur during setup of an observable subscription after the subscription has emitted an error or completed will now throw in their own call stack. Before it would call `console.warn`. This is potentially breaking in edge cases for node applications, which may be configured to terminate for unhandled exceptions. In the unlikely event this affects you, you can configure the behavior to `console.warn` in the new configuration setting like so: `import { config } from 'rxjs'; config.onUnhandledError = (err) => console.warn(err);`
- **RxJS Error types** Tests that are written with naive expectations against errors may fail now that errors have a proper `stack` property. In some testing frameworks, a deep equality check on two error instances will check the values in `stack`, which could be different.
- `unsubscribe` no longer available via the `this` context of observer functions. To reenable, set `config.useDeprecatedNextContext = true` on the rxjs `config` found at `import { config } from 'rxjs';`. Note that enabling this will result in a performance penalty for all consumer subscriptions.
- Leaked implementation detail `_unsubscribeAndRecycle` of `Subscriber` has been removed. Just use new `Subscription` objects
- The static `sortActions` method on `VirtualTimeScheduler` is no longer publicly exposed by our TS types.
- `Notification.createNext(undefined)` will no longer return the exact same reference every time.
- Type signatures tightened up around `Notification` and `dematerialize`, may uncover issues with invalid types passed to those operators.
- Experimental support for `for await` has been removed. Use https://github.com/benlesh/rxjs-for-await instead.
- `ReplaySubject` no longer schedules emissions when a scheduler is provided. If you need that behavior,
please compose in `observeOn` using `pipe`, for example: `new ReplaySubject(2, 3000).pipe(observeOn(asap))`
- **rxjs-compat:** `rxjs/Rx` is no longer a valid import site.
## Operators
### concat
- **concat:** Generic signature changed. Recommend not explicitly passing generics, just let inference do its job. If you must, cast with `as`.
- **of:** Generic signature changed, do not specify generics, allow them to be inferred or use `as`
### count
- **count:** No longer passes `source` observable as a third argument to the predicate. That feature was rarely used, and of limited value. The workaround is to simply close over the source inside of the function if you need to access it in there.
### defer
- `defer` no longer allows factories to return `void` or `undefined`. All factories passed to defer must return a proper `ObservableInput`, such as `Observable`, `Promise`, et al. To get the same behavior as you may have relied on previously, `return EMPTY` or `return of()` from the factory.
### map
- **map:** `thisArg` will now default to `undefined`. The previous default of `MapSubscriber` never made any sense. This will only affect code that calls map with a `function` and references `this` like so: `source.pipe(map(function () { console.log(this); }))`. There wasn't anything useful about doing this, so the breakage is expected to be very minimal. If anything we're no longer leaking an implementation detail.
### mergeScan
- **mergeScan:** `mergeScan` will no longer emit its inner state again upon completion.
### of
- **of:** Use with more than 9 arguments, where the last argument is a `SchedulerLike` may result in the wrong type which includes the `SchedulerLike`, even though the run time implementation does not support that. Developers should be using `scheduled` instead
### pairs
- **pairs:** `pairs` will no longer function in IE without a polyfill for `Object.entries`. `pairs` itself is also deprecated in favor of users just using `from(Object.entries(obj))`.
### race
- **race:** `race()` will no longer subscribe to subsequent observables if a provided source synchronously errors or completes. This means side effects that might have occurred during subscription in those rare cases will no longer occur.
### repeat
- An undocumented behavior where passing a negative count argument to `repeat` would result in an observable that repeats forever.
### retry
- Removed an undocumented behavior where passing a negative count argument to `retry` would result in an observable that repeats forever.
### single
- `single` operator will now throw for scenarios where values coming in are either not present, or do not match the provided predicate. Error types have thrown have also been updated, please check documentation for changes.
### skipLast
- **skipLast:** `skipLast` will no longer error when passed a negative number, rather it will simply return the source, as though `0` was passed.
### startWith
- **startWith:** `startWith` will return incorrect types when called with more than 7 arguments and a scheduler. Passing scheduler to startWith is deprecated
### take
- `take` and will now throw runtime error for arguments that are negative or NaN, this includes non-TS calls like `take()`.
### takeLast
- `takeLast` now has runtime assertions that throw `TypeError`s for invalid arguments. Calling takeLast without arguments or with an argument that is `NaN` will throw a `TypeError`
### throwError
- **throwError:** In an extreme corner case for usage, `throwError` is no longer able to emit a function as an error directly. If you need to push a function as an error, you will have to use the factory function to return the function like so: `throwError(() => functionToEmit)`, in other words `throwError(() => () => console.log('called later'))`.
### timestamp
- `timestamp` operator accepts a `TimestampProvider`, which is any object with a `now` method
that returns a number. This means pulling in less code for the use of the `timestamp` operator. This may cause
issues with `TestScheduler` run mode. (see [Issue here](https://github.com/ReactiveX/rxjs/issues/5553))
### zip
- **zip:** Zipping a single array will now have a different result. This is an extreme corner-case, because it is very unlikely that anyone would want to zip an array with nothing at all. The workaround would be to wrap the array in another array `zip([[1,2,3]])`. But again, that's pretty weird.
- **zip:** `zip` operators will no longer iterate provided iterables "as needed", instead the iterables will be treated as push-streams just like they would be everywhere else in RxJS. This means that passing an endless iterable will result in the thread locking up, as it will endlessly try to read from that iterable. This puts us in-line with all other Rx implementations. To work around this, it is probably best to use `map` or some combination of `map` and `zip`. For example, `zip(source$, iterator)` could be `source$.pipe(map(value => [value, iterator.next().value]))`.
## ajax
- `ajax` body serialization will now use default XHR behavior in all cases. If the body is a `Blob`, `ArrayBuffer`, any array buffer view (like a byte sequence, e.g. `Uint8Array`, etc), `FormData`, `URLSearchParams`, `string`, or `ReadableStream`, default handling is use. If the `body` is otherwise `typeof` `"object"`, then it will be converted to JSON via `JSON.stringify`, and the `Content-Type` header will be set to `application/json;charset=utf-8`. All other types will emit an error.
- The `Content-Type` header passed to `ajax` configuration no longer has any effect on the serialization behavior of the AJAX request.
- For TypeScript users, `AjaxRequest` is no longer the type that should be explicitly used to create an `ajax`. It is now `AjaxConfig`, although the two types are compatible, only `AjaxConfig` has `progressSubscriber` and `createXHR`.
- **ajax:** In an extreme corner-case... If an error occurs, the responseType is `"json"`, we're in IE, and the `responseType` is not valid JSON, the `ajax` observable will no longer emit a syntax error, rather it will emit a full `AjaxError` with more details.
- **ajax:** Ajax implementation drops support for IE10 and lower. This puts us in-line with other implementations and helps clean up code in this area
================================================
FILE: apps/rxjs.dev/content/deprecations/index.md
================================================
# Deprecations and Breaking Changes
While the core team always tries to limit changes, sometimes we have to deprecate APIs or do breaking changes for various reasons.
This section aims to describe some of the deprecations and breaking changes we did more in detail. Some of the changes are to extensive to describe
them appropriately in a changelog. Additionally, we can provide code examples in the documentation, to make required changes more comprehensible and therefore
lower migration efforts.
Do notice that this is not a complete list, please see the [changelog](https://github.com/ReactiveX/rxjs/blob/master/CHANGELOG.md) for the complete list.
================================================
FILE: apps/rxjs.dev/content/deprecations/multicasting.md
================================================
# Multicasting
In version 7, the multicasting APIs were simplified to just a few functions:
- [connectable](/api/index/function/connectable)
- [connect](/api/operators/connect)
- [share](/api/operators/share)
And [shareReplay](/api/operators/shareReplay) - which is a thin wrapper around the now highly-configurable [share](/api/operators/share) operator.
Other APIs that relate to multicasting are now deprecated.
<div class="alert is-important">
<span>
These deprecations were introduced in RxJS 7.0 and will become breaking in RxJS 8.
</span>
</div>
## APIs affected by this Change
- [ConnectableObservable](/api/index/class/ConnectableObservable)
- [multicast](/api/operators/multicast)
- [publish](/api/operators/publish)
- [publishBehavior](/api/operators/publishBehavior)
- [publishLast](/api/operators/publishLast)
- [publishReplay](/api/operators/publishReplay)
- [refCount](/api/operators/refCount)
## How to refactor
### ConnectableObservable
Instead of creating a [ConnectableObservable](/api/index/class/ConnectableObservable) instance, call the [connectable](/api/index/function/connectable) function to obtain a connectable observable.
<!-- prettier-ignore -->
```ts
import { ConnectableObservable, timer, Subject } from 'rxjs';
// deprecated
const tick$ = new ConnectableObservable(
timer(1_000),
() => new Subject());
tick$.connect();
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, Subject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject()
});
tick$.connect();
```
In situations in which the `refCount` method is used, the [share](/api/operators/share) operator can be used instead.
<!-- prettier-ignore -->
```ts
import { ConnectableObservable, timer, Subject } from 'rxjs';
// deprecated
const tick$ = new ConnectableObservable(
timer(1_000),
() => new Subject()
).refCount();
```
<!-- prettier-ignore -->
```ts
import { timer, share, Subject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
share({ connector: () => new Subject() })
);
```
### multicast
Where [multicast](/api/operators/multicast) is called with a subject factory, can be replaced with [connectable](/api/index/function/connectable).
<!-- prettier-ignore -->
```ts
import { timer, multicast, Subject, ConnectableObservable } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
multicast(() => new Subject())
) as ConnectableObservable<number>;
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, Subject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject()
});
```
Where [multicast](/api/operators/multicast) is called with a subject instance, it can be replaced with [connectable](/api/index/function/connectable) and a local subject instance.
<!-- prettier-ignore -->
```ts
import { timer, multicast, Subject, ConnectableObservable } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
multicast(new Subject())
) as ConnectableObservable<number>;
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, Subject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject(),
resetOnDisconnect: false
});
```
Where [multicast](/api/operators/multicast) is used in conjunction with [refCount](/api/operators/refCount), it can be replaced with [share](/api/index/function/connectable).
<!-- prettier-ignore -->
```ts
import { timer, multicast, Subject, refCount } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
multicast(() => new Subject()),
refCount()
);
```
<!-- prettier-ignore -->
```ts
import { timer, share, Subject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
share({ connector: () => new Subject() })
);
```
Where [multicast](/api/operators/multicast) is used with a selector, it can be replaced with [connect](/api/index/function/connect).
<!-- prettier-ignore -->
```ts
import { timer, multicast, Subject, combineLatest } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
multicast(
() => new Subject(),
(source) => combineLatest([source, source])
)
);
```
<!-- prettier-ignore -->
```ts
import { timer, connect, combineLatest, Subject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
connect((source) => combineLatest([source, source]), {
connector: () => new Subject()
})
);
```
### publish
If you're using [publish](/api/operators/publish) to create a [ConnectableObservable](/api/index/class/ConnectableObservable), you can use [connectable](/api/index/function/connectable) instead.
<!-- prettier-ignore -->
```ts
import { timer, publish, ConnectableObservable } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publish()
) as ConnectableObservable<number>;
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, Subject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new Subject<number>(),
resetOnDisconnect: false
});
```
And if [refCount](/api/operators/refCount) is being applied to the result of [publish](/api/operators/publish), you can use [share](/api/operators/share) to replace both.
<!-- prettier-ignore -->
```ts
import { timer, publish, refCount } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publish(),
refCount()
);
```
<!-- prettier-ignore -->
```ts
import { timer, share } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
resetOnError: false,
resetOnComplete: false,
resetOnRefCountZero: false
})
);
```
If [publish](/api/operators/publish) is being called with a selector, you can use the [connect](/api/operators/connect) operator instead.
<!-- prettier-ignore -->
```ts
import { timer, publish, combineLatest } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publish((source) => combineLatest([source, source]))
);
```
<!-- prettier-ignore -->
```ts
import { timer, connect, combineLatest } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
connect((source) => combineLatest([source, source]))
);
```
### publishBehavior
If you're using [publishBehavior](/api/operators/publishBehavior) to create a [ConnectableObservable](/api/index/class/ConnectableObservable), you can use [connectable](/api/index/function/connectable) and a [BehaviorSubject](api/index/class/BehaviorSubject) instead.
<!-- prettier-ignore -->
```ts
import { timer, publishBehavior, ConnectableObservable } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishBehavior(0)
) as ConnectableObservable<number>;
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, BehaviorSubject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new BehaviorSubject(0),
resetOnDisconnect: false
});
```
And if [refCount](/api/operators/refCount) is being applied to the result of [publishBehavior](/api/operators/publishBehavior), you can use the [share](/api/operators/share) operator - with a [BehaviorSubject](api/index/class/BehaviorSubject) connector - to replace both.
<!-- prettier-ignore -->
```ts
import { timer, publishBehavior, refCount } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishBehavior(0),
refCount()
);
```
<!-- prettier-ignore -->
```ts
import { timer, share, BehaviorSubject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
connector: () => new BehaviorSubject(0),
resetOnError: false,
resetOnComplete: false,
resetOnRefCountZero: false
})
);
```
### publishLast
If you're using [publishLast](/api/operators/publishLast) to create a [ConnectableObservable](/api/index/class/ConnectableObservable), you can use [connectable](/api/index/function/connectable) and an [AsyncSubject](api/index/class/AsyncSubject) instead.
<!-- prettier-ignore -->
```ts
import { timer, publishLast, ConnectableObservable } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishLast()
) as ConnectableObservable<number>;
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, AsyncSubject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new AsyncSubject<number>(),
resetOnDisconnect: false
});
```
And if [refCount](/api/operators/refCount) is being applied to the result of [publishLast](/api/operators/publishLast), you can use the [share](/api/operators/share) operator - with an [AsyncSubject](api/index/class/AsyncSubject) connector - to replace both.
<!-- prettier-ignore -->
```ts
import { timer, publishLast, refCount } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishLast(),
refCount()
);
```
<!-- prettier-ignore -->
```ts
import { timer, share, AsyncSubject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
connector: () => new AsyncSubject(),
resetOnError: false,
resetOnComplete: false,
resetOnRefCountZero: false
})
);
```
### publishReplay
If you're using [publishReplay](/api/operators/publishReplay) to create a [ConnectableObservable](/api/index/class/ConnectableObservable), you can use [connectable](/api/index/function/connectable) and a [ReplaySubject](api/index/class/ReplaySubject) instead.
<!-- prettier-ignore -->
```ts
import { timer, publishReplay, ConnectableObservable } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishReplay(1)
) as ConnectableObservable<number>;
```
<!-- prettier-ignore -->
```ts
import { connectable, timer, ReplaySubject } from 'rxjs';
// suggested refactor
const tick$ = connectable(timer(1_000), {
connector: () => new ReplaySubject<number>(1),
resetOnDisconnect: false
});
```
And if [refCount](/api/operators/refCount) is being applied to the result of [publishReplay](/api/operators/publishReplay), you can use the [share](/api/operators/share) operator - with a [ReplaySubject](api/index/class/ReplaySubject) connector - to replace both.
<!-- prettier-ignore -->
```ts
import { timer, publishReplay, refCount } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishReplay(1),
refCount()
);
```
<!-- prettier-ignore -->
```ts
import { timer, share, ReplaySubject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
share({
connector: () => new ReplaySubject(1),
resetOnError: false,
resetOnComplete: false,
resetOnRefCountZero: false
})
);
```
If [publishReplay](/api/operators/publishReplay) is being called with a selector, you can use the [connect](/api/operators/connect) operator - with a [ReplaySubject](api/index/class/ReplaySubject) connector - instead.
<!-- prettier-ignore -->
```ts
import { timer, publishReplay, combineLatest } from 'rxjs';
// deprecated
const tick$ = timer(1_000).pipe(
publishReplay(1, undefined, (source) => combineLatest([source, source]))
);
```
<!-- prettier-ignore -->
```ts
import { timer, connect, combineLatest, ReplaySubject } from 'rxjs';
// suggested refactor
const tick$ = timer(1_000).pipe(
connect((source) => combineLatest([source, source]), {
connector: () => new ReplaySubject(1)
})
);
```
### refCount
Instead of applying the [refCount](/api/operators/refCount) operator to the [ConnectableObservable](/api/index/class/ConnectableObservable) obtained from a [multicast](/api/operators/multicast)
or [publish](/api/operators/publish) operator, use the [share](/api/operators/share) operator to replace both.
The properties passed to [share](/api/operators/share) will depend upon the operators that are being replaced. The refactors for using [refCount](/api/operators/refCount) with [multicast](/api/operators/multicast), [publish](/api/operators/publish), [publishBehavior](/api/operators/publishBehavior), [publishLast](/api/operators/publishLast) and [publishReplay](/api/operators/publishReplay) are detailed above.
================================================
FILE: apps/rxjs.dev/content/deprecations/resultSelector.md
================================================
# ResultSelector Parameter
Some operator supported a resultSelector argument that acted as mapping function on the result of that operator.
The same behavior can be reproduced with the `map` operator, therefore this argument became deprecated.
<div class="alert is-important">
<span>
This deprecation was introduced in RxJS 6.0 and will become breaking with RxJS 8.
</span>
</div>
There were two reasons for actually deprecating those parameters:
1. It increases the bundle size of every operator
2. In some scenarios values had to be retained in memory causing a general memory pressure
## Operators affected by this Change
- [concatMap](/api/operators/concatMap)
- [concatMapTo](/api/operators/concatMapTo)
- [exhaustMap](/api/operators/exhaustMap)
- [mergeMap](/api/operators/mergeMap)
- [mergeMapTo](/api/operators/mergeMapTo)
- [switchMap](/api/operators/switchMap)
- [switchMapTo](/api/operators/switchMapTo)
## How to Refactor
Instead of using the `resultSelector` Argument, you can leverage the [`map`](/api/operators/map) operator on the inner Observable:
<!-- prettier-ignore -->
```ts
import { fromEvent, switchMap, interval, map } from 'rxjs';
// deprecated
fromEvent(document, 'click').pipe(
switchMap((x) => interval(1000), (_, x) => x + 1)
);
// suggested change
fromEvent(document, 'click').pipe(
switchMap((x) => interval(1000).pipe(map((x) => x + 1)))
);
```
================================================
FILE: apps/rxjs.dev/content/deprecations/scheduler-argument.md
================================================
# Scheduler Argument
To limit the API surface of some operators, but also prepare for a [major refactoring in V8](https://github.com/ReactiveX/rxjs/pull/4583), we
agreed on deprecating the `scheduler` argument from many operators. It solely deprecates those methods where this argument is rarely used. So `time` related
operators, like [`interval`](https://rxjs.dev/api/index/function/interval) are not affected by this deprecation.
To support this transition the [scheduled creation function](/api/index/function/scheduled) was added.
<div class="alert is-important">
<span>
This deprecation was introduced in RxJS 6.5 and will become breaking with RxJS 8.
</span>
</div>
## Operators affected by this Change
- [from](/api/index/function/from)
- [of](/api/index/function/of)
- [merge](/api/index/function/merge)
- [concat](/api/index/function/concat)
- [startWith](/api/operators/startWith)
- [endWith](/api/operators/endWith)
- [combineLatest](/api/index/function/combineLatest)
## How to Refactor
If you use any operator from the above list and you're passing the `scheduler` argument, you have three potential refactoring options.
### Refactoring of `of` and `from`
`scheduled` is kinda copying the behavior of `from`. Therefore if you used `from` with a `scheduler` argument, you can just replace them.
For the `of` creation function you need to replace this Observable with `scheduled` and instead of passing the `scheduler` argument to `of` pass it to `scheduled`.
Following code example demonstrate this process.
```ts
import { of, asyncScheduler, scheduled } from 'rxjs';
// Deprecated approach
of(1, 2, 3, asyncScheduler).subscribe((x) => console.log(x));
// suggested approach
scheduled([1, 2, 3], asyncScheduler).subscribe((x) => console.log(x));
```
### Refactoring of `merge`, `concat`, `combineLatest`, `startWith` and `endWith`
In case you used to pass a scheduler argument to one of these operators you probably had code like this:
```ts
import { concat, of, asyncScheduler } from 'rxjs';
concat(of('hello '), of('World'), asyncScheduler).subscribe((x) => console.log(x));
```
To work around this deprecation you can leverage the [`scheduled`](/api/index/function/scheduled) function.
```ts
import { scheduled, of, asyncScheduler, concatAll } from 'rxjs';
scheduled([of('hello '), of('World')], asyncScheduler)
.pipe(concatAll())
.subscribe((x) => console.log(x));
```
You can apply this pattern to refactor deprecated usage of `concat`, `startWith` and `endWith` but do notice that you will want to use [mergeAll](/api/operators/mergeAll) to refactor the deprecated usage of `merge`.
With `combineLatest`, you will want to use [combineLatestAll](/api/operators/combineLatestAll)
E.g. code that used to look like this:
```ts
import { combineLatest, of, asyncScheduler } from 'rxjs';
combineLatest(of('hello '), of('World'), asyncScheduler).subscribe(console.log);
```
would become:
```ts
import { scheduled, of, asyncScheduler, combineLatestAll } from 'rxjs';
scheduled([of('hello '), of('World')], asyncScheduler)
.pipe(combineLatestAll())
.subscribe((x) => console.log(x));
```
================================================
FILE: apps/rxjs.dev/content/deprecations/subscribe-arguments.md
================================================
# Subscribe Arguments
You might have seen that we deprecated some signatures of the `subscribe` method, which might have caused some confusion.
The `subscribe` method itself is not deprecated. This deprecation also affects the [`tap` operator](../../api/operators/tap), as tap supports the same signature as the `subscribe` method.
This is to get ready for a future where we may allow configuration of `subscribe` via the second argument, for things like `AbortSignal` or the like (imagine `source$.subscribe(fn, { signal })`, etc). This deprecation is also because 2-3 function arguments can contribute to harder-to-read code. For example someone could name functions poorly and confuse the next reader: `source$.subscribe(doSomething, doSomethingElse, lol)` With that signature, you have to know unapparent details about `subscribe`, where using a partial observer solves that neatly: `source$.subscribe({ next: doSomething, error: doSomethingElse, complete: lol })`.
<div class="alert is-important">
<span>
This deprecation was introduced in RxJS 6.4.
</span>
</div>
In short we deprecated all signatures where you specified an anonymous `error` or `complete` callback and passed an empty function to one of the callbacks before.
## What Signature is affected
**We have deprecated all signatures of `subscribe` that take more than 1 argument.**
We deprecated signatures for just passing the `complete` callback.
```ts
import { of } from 'rxjs';
// deprecated
of([1,2,3]).subscribe(null, null, console.info); // difficult to read
// suggested change
of([1,2,3]).subscribe({complete: console.info});
```
Similarly, we also deprecated signatures for solely passing the `error` callback.
```ts
import { throwError } from 'rxjs';
// deprecated
throwError('I am an error').subscribe(null, console.error);
// suggested change
throwError('I am an error').subscribe({error: console.error});
```
Do notice, in general it is recommended only to use the anonymous function if you only specify the `next` callback otherwise
we recommend to pass an `Observer`
```ts
import { of } from 'rxjs';
// recommended
of([1,2,3]).subscribe((v) => console.info(v));
// also recommended
of([1,2,3]).subscribe({
next: (v) => console.log(v),
error: (e) => console.error(e),
complete: () => console.info('complete')
})
```
================================================
FILE: apps/rxjs.dev/content/deprecations/to-promise.md
================================================
# Conversion to Promises
The similarity between Observables and Promises is that both [collections](/guide/observable) may produce values over
time, but the difference is that Observables may produce none or more than one value, while Promises produce only one
value when resolved successfully.
## Issues
For this reason, in RxJS 7, the return type of the Observable's [`toPromise()`](/api/index/class/Observable#toPromise)
method has been fixed to better reflect the fact that Observables can yield zero values. This may be a **breaking
change** to some projects as the return type was changed from `Promise<T>` to `Promise<T | undefined>`.
Also, `toPromise()` method name was never indicating what emitted value a Promise will resolve with because Observables
can produce multiple values over time. When converting to a Promise, you might want to choose which value to pick -
either the first value that has arrived or the last one. To fix all these issues, we decided to deprecate `toPromise()`,
and to introduce the two new helper functions for conversion to Promises.
## Use one of the two new functions
As a replacement to the deprecated `toPromise()` method, you should use one of the two built in static conversion
functions {@link firstValueFrom} or {@link lastValueFrom}.
### `lastValueFrom`
The `lastValueFrom` is almost exactly the same as `toPromise()` meaning that it will resolve with the last value that has
arrived when the Observable completes, but with the difference in behavior when Observable completes without emitting a
single value. When Observable completes without emitting, `toPromise()` will successfully resolve with `undefined` (thus
the return type change), while the `lastValueFrom` will reject with the {@link EmptyError}. Thus, the return type of the
`lastValueFrom` is `Promise<T>`, just like `toPromise()` had in RxJS 6.
#### Example
```ts
import { interval, take, lastValueFrom } from 'rxjs';
async function execute() {
const source$ = interval(2000).pipe(take(10));
const finalNumber = await lastValueFrom(source$);
console.log(`The final number is ${finalNumber}`);
}
execute();
// Expected output:
// "The final number is 9"
```
### `firstValueFrom`
However, you might want to take the first value as it arrives without waiting an Observable to complete, thus you can
use `firstValueFrom`. The `firstValueFrom` will resolve a Promise with the first value that was emitted from the
Observable and will immediately unsubscribe to retain resources. The `firstValueFrom` will also reject with an
{@link EmptyError} if the Observable completes with no values emitted.
#### Example
```ts
import { interval, firstValueFrom } from 'rxjs';
async function execute() {
const source$ = interval(2000);
const firstNumber = await firstValueFrom(source$);
console.log(`The first number is ${firstNumber}`);
}
execute();
// Expected output:
// "The first number is 0"
```
<span class="informal">Both functions will return a Promise that rejects if the source Observable errors. The Promise
will reject with the same error that the Observable has errored with.</span>
## Use default value
If you don't want Promises created by `lastValueFrom` or `firstValueFrom` to reject with {@link EmptyError} if there
were no emissions before completion, you can use the second parameter. The second parameter is expected to be an object
with `defaultValue` parameter. The value in the `defaultValue` will be used to resolve a Promise when source Observable
completes without emitted values.
```ts
import { firstValueFrom, EMPTY } from 'rxjs';
const result = await firstValueFrom(EMPTY, { defaultValue: 0 });
console.log(result);
// Expected output:
// 0
```
## Warning
Only use `lastValueFrom` function if you _know_ an Observable will eventually complete. The `firstValueFrom` function should
be used if you _know_ an Observable will emit at least one value _or_ will eventually complete. If the source Observable
does not complete or emit, you will end up with a Promise that is hung up, and potentially all of the state of an async
function hanging out in memory. To avoid this situation, look into adding something like {@link timeout}, {@link take},
{@link takeWhile}, or {@link takeUntil} amongst others.
================================================
FILE: apps/rxjs.dev/content/file-not-found.md
================================================
@description
<div class="nf-container l-flex-wrap flex-center">
<img src="assets/images/support/rxjs-404.png" width="300" height="300"/>
<div class="nf-response l-flex-wrap">
<h1 class="no-toc">Page Not Found</h1>
<p>We're sorry. The page you are looking for cannot be found.</p>
</div>
</div>
================================================
FILE: apps/rxjs.dev/content/guide/core-semantics.md
================================================
# RxJS Core Semantics
Starting in version 8, all RxJS operators that are provided in the core library MUST meet the following semantics. In the current version, version 7, all operators SHOULD meet the following semantics (as guidelines). If they do not, we need to track the issue on [GitHub](https://github.com/ReactiveX/rxjs/issues).
## Purpose
The purpose of these semantics is provide predictable behavior for the users of our library, and to ensure consistent behavior between our many different operators. It should be noted that at the time of this writing, we don't always adhere to these semantic guidelines. This document is to serve as a goalpost for upcoming changes and work as much as it is to help describe the library. This is also a "living document" and is subject to change.
## General Design Guidelines
**Functions such as operators, constructors, and creation functions, should use named parameters in cases where there is more than 1 argument, and arguments after the first are non-obvious.** The primary use case should be streamlined to work without configuration. For example, `fakeFlattenMap(n => of(n))` is fine, but `fakeFlattenMap(n => of(n), 1)` is less readable than `fakeFlattenMap(n => of(n), { maxConcurrent: 1 })`. Other things, like `of(1, 2, 3)` are obvious enough that named parameters don't make sense.
## Operators
- MUST be a function that returns an [operator function](https://rxjs.dev/api/index/interface/OperatorFunction). That is `(source: Observable<In>) => Observable<Out>`.
- The returned operator function MUST be [referentially transparent](https://en.wikipedia.org/wiki/Referential_transparency). That is to say, that if you capture the return value of the operator (e.g. `const double => map(x => x + x)`), you can use that value to operate on any many observables as you like without changing any underlying state in the operator reference. (e.g. `a$.pipe(double)` and `b$.pipe(double)`).
- The observable returned by the operator function MUST subscribe to the source.
- If the operation performed by the operator can tell it not change anything about the output of the source, it MUST return the reference to the source. For example `take(Infinity)` or `skip(0)`.
- Operators that accept a "notifier", that is another observable source that is used to trigger some behavior, must accept any type that can be converted to an `Observable` with `from`. For example `takeUntil`.
- Operators that accept "notifiers" (as described above), MUST ONLY recognized next values from the notifier as "notifications". Emitted completions may not be used a source of notification.
- "Notifiers" provided directly to the operator MUST be subscribed to _before_ the source is subscribed to. "Notifiers" created via factory function provided to the operator SHOULD be subscribed to at the earliest possible moment.
- The observable returned by the operator function is considered to be the "consumer" of the source. As such, the consumer MUST unsubscribe from the source as soon as it knows it no longer needs values before proceeding to do _any_ action.
- Events that happen after the completion of a source SHOULD happen after the source finalizes. This is to ensure that finalization always happens in a predictable time frame relative to the event.
- `Error` objects MUST NOT be retained longer than necessary. This is a possible source of memory pressure.
- `Promise` references MUST NOT be retained longer than necessary. This is a possible source of memory pressure.
- IF they perform a related operation to a creation function, they SHOULD share the creation function's name only with the suffix `With`. (e.g. `concat` and `concatWith`).
- SHOULD NOT have "result selectors". This is a secondary argument that provides the ability to "map" values after performing the primary operation of the operator.
## Creation Functions
- Names MUST NOT end in `With`. That is reserved for the operator counter parts of creation functions.
- MAY have "result selectors". This is a secondary argument that provides the ability to "map" values before they're emitted from the resulting observable.
- IF the creation function accepts a "result selector", it must not accept "n-arguments" ahead of that result selector. Instead, it should accept an array or possibly an object. (bad: `combineThings(sourceA$, sourceB$, (a, b) => a + b)`, good: `combineThings([sourceA$, sourceB$], (a, b) => a + b)`. In this case, it may be okay to provide the result selector as a second argument, rather than as a named parameter, as the use should be fairly obvious.
================================================
FILE: apps/rxjs.dev/content/guide/glossary-and-semantics.md
================================================
# RxJS: Glossary And Semantics
When discussing and documenting observables, it's important to have a common language and a known set of rules around what is going on. This document is an attempt to standardize these things so we can try to control the language in our docs, and hopefully other publications about RxJS, so we can discuss reactive programming with RxJS on consistent terms.
While not all of the documentation for RxJS reflects this terminology, it is a goal of the team to ensure it does, and to ensure the language and names around the library use this document as a source of truth and unified language.
## Major Entities
There are high level entities that are frequently discussed. It's important to define them separately from other lower-level concepts, because they relate to the nature of observable.
### Consumer
The code that is subscribing to the observable. This is whoever is being _notified_ of [nexted](#next) values, and [errors](#error) or [completions](#complete).
### Producer
Any system or thing that is the source of values that are being pushed out of the observable subscription to the consumer. This can be a wide variety of things, from a `WebSocket` to a simple iteration over an `Array`. The producer is most often created during the [subscribe](#subscribe) action, and therefor "owned" by a [subscription](#subscription) in a 1:1 way, but that is not always the case. A producer may be shared between many subscriptions, if it is created outside of the [subscribe](#subscribe) action, in which case it is one-to-many, resulting in a [multicast](#multicast).
### Subscription
A contract where a [consumer](#consumer) is [observing](#observation) values pushed by a [producer](#producer). The subscription (not to be confused with the `Subscription` class or type), is an ongoing process that amounts to the function of the observable from the Consumer's perspective. Subscription starts the moment a [subscribe](#subscribe) action is initiated, even before the [subscribe](#subscribe) action is finished.
### Observable
The primary type in RxJS. At its highest level, an observable represents a template for connecting an [Observer](#observer), as a [consumer](#consumer), to a [producer](#producer), via a [subscribe](#subscribe) action, resulting in a [subscription](#subscription).
### Observer
The manifestation of a [consumer](#consumer). A type that may have some (or all) handlers for each type of [notification](#notification): [next](#next), [error](#error), and [complete](#complete). Having all three types of handlers generally gets this to be called an "observer", where if it is missing any of the notification handlers, it may be called a ["partial observer"](#partial-observer).
## Major Actions
There are specific actions and events that occur between major entities in RxJS that need to be defined. These major actions are the highest level events that occur within various parts in RxJS.
### Subscribe
The act of a [consumer](#consumer) requesting from an Observable to set up a [subscription](#subscription) so that it may [observe](#observation) a [producer](#producer). A subscribe action can occur with an observable via many different mechanisms. The primary mechanism is the [`subscribe` method](/api/index/class/Observable#subscribe) on the [Observable class](/api/index/class/Observable). Other mechanisms include the [`forEach` method](/api/index/class/Observable#forEach), functions like [`lastValueFrom`](/api/index/function/lastValueFrom), and [`firstValueFrom`](/api/index/function/firstValueFrom), and the deprecated [`toPromise` method](/api/index/class/Observable#forEach).
### Finalization
The act of cleaning up resources used by a producer. This is guaranteed to happen on `error`, `complete`, or if unsubscription occurs. This is not to be confused with [unsubscription](#unsubscription), but it does always happen during unsubscription.
### Unsubscription
The act of a [consumer](#consumer) telling a [producer](#producer) is no longer interested in receiving values. Causes [Finalization](#finalization)
### Observation
A [consumer](#consumer) reacting to [next](#next), [error](#error), or [complete](#complete) [notifications](#notification). This can only happen _during_ [subscription](#subscription).
### Observation Chain
When an [observable](#observable) uses another [observable](#observable) as a [producer](#producer), an "observation chain" is set up. That is a chain of [observation](#observation) such that multiple [observers](#observer) are [notifying](#notification) each other in a unidirectional way toward the final [consumer](#consumer).
### Next
A value has been pushed to the [consumer](#consumer) to be [observed](#observation). Will only happen during [subscription](#subscription), and cannot happen after [error](#error), [complete](#error), or [unsubscription](#unsubscription). Logically, this also means it cannot happen after [finalization](#finalization).
### Error
The [producer](#producer) has encountered a problem and is notifying the [consumer](#consumer). This is a notification that the [producer](#producer) will no longer send values and will [finalize](#finalization). This cannot occur after [complete](#complete), any other [error](#error), or [unsubscription](#unsubscription). Logically, this also means it cannot happen after [finalization](#finalization).
### Complete
The [producer](#producer) is notifying the [consumer](#consumer) that it is done [nexting](#Next) values, without error, will send no more values, and it will [finalize](#finalization). [Completion](#complete) cannot occur after an [error](#error), or [unsubscribe](#unsubscription). [Complete](#complete) cannot be called twice. [Complete](#complete), if it occurs, will always happen before [finalization](#finalization).
### Notification
The act of a [producer](#producer) pushing [nexted](#next) values, [errors](#error) or [completions](#complete) to a [consumer](#consumer) to be [observed](#observation). Not to be confused with the [`Notification` type](/api/index/class/Notification), which is notification manifested as a JavaScript object.
## Major Concepts
Some of what we discuss is conceptual. These are mostly common traits of behaviors that can manifest in observables or in push-based reactive systems.
### Multicast
The act of one [producer](#producer) being [observed](#observation) by **many** [consumers](#consumer).
### Unicast
The act of one [producer](#producer) being [observed](#observation) by **only one** [consumer](#consumer). An observable is "unicast" when it only connects one [producer](#producer) to one [consumer](#consumer). Unicast doesn't necessarily mean ["cold"](#cold).
### Cold
An observable is "cold" when it creates a new [producer](#producer) during [subscribe](#subscribe) for every new [subscription](#subscription). As a result, "cold" observables are _always_ [unicast](#unicast), being one [producer](#producer) [observed](#observation) by one [consumer](#consumer). Cold observables can be made [hot](#hot) but not the other way around.
### Hot
An observable is "hot", when its [producer](#producer) was created outside of the context of the [subscribe](#subscribe) action. This means that the "hot" observable is almost always [multicast](#multicast). It is possible that a "hot" observable is still _technically_ unicast, if it is engineered to only allow one [subscription](#subscription) at a time, however, there is no straightforward mechanism for this in RxJS, and the scenario is an unlikely one. For the purposes of discussion, all "hot" observables can be assumed to be [multicast](#multicast). Hot observables cannot be made [cold](#cold).
### Push
[Observables](#observable) are a push-based type. That means rather than having the [consumer](#consumer) call a function or perform some other action to get a value, the [consumer](#consumer) receives values as soon as the [producer](#producer) has produced them, via a registered [next](#next) handler.
### Pull
Pull-based systems are the opposite of [push](#push)-based. In a pull-based type or system, the [consumer](#consumer) must request each value the [producer](#producer) has produced manually, perhaps long after the [producer](#producer) has actually done so. Examples of such systems are [Functions](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) and [Iterators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols)
## Minor Entities
### Operator
A factory function that creates an [operator function](#operator-function). Examples of this in rxjs are functions like [`map`](/api/operators/map) and [`mergeMap`](/api/operators/mergeMap), which are generally passed to [`pipe`](/api/index/class/Observable#pipe). The result of calling many operators, and passing their resulting [operator functions](#operator-function) into pipe on an observable [source](#source) will be another [observable](#observable), and will generally not result in [subscription](#subscription).
### Operator Function
A function that takes an [observable](#observable), and maps it to a new [observable](#observable). Nothing more, nothing less. Operator functions are created by [operators](#operator). If you were to call an rxjs operator like [map](/api/operators/map) and put the return value in a variable, the returned value would be an operator function.
### Operation
An action taken while handling a [notification](#notification), as set up by an [operator](#operator) and/or [operator function](#operator-function). In RxJS, a developer can chain several [operator functions](#operator-function) together by calling [operators](#operator) and passing the created [operator functions](#operator-function) to the [`pipe`](/api/index/class/Observable#pipe) method of [`Observable`](/api/index/class/Observable), which results in a new [observable](#observable). During [subscription](#subscription) to that observable, operations are performed in an order dictated by the [observation chain](#observation-chain).
### Stream
A "stream" or "streaming" in the case of observables, refers to the collection of [operations](#operation), as they are processed during a [subscription](#subscription). This is not to be confused with node [Streams](https://nodejs.org/api/stream.html), and the word "stream", on its own, should be used _sparingly_ in documentation and articles. Instead, prefer [observation chain](#observation-chain), [operations](#operation), or [subscription](#subscription). "Streaming" is less ambiguous, and is fine to use given this defined meaning.
### Source
An [observable](#observable) or [valid observable input](#observable-inputs) having been converted to an observable, that will supply values to another [observable](#observable), either as the result of an [operator](#operator) or other function that creates one observable as another. This [source](#source), will be the [producer](#producer) for the resulting [observable](#observable) and all of its [subscriptions](#subscriptions). Sources may generally be any type of observable.
### Observable Inputs
An "observable input" ([defined as a type here](/api/index/type-alias/ObservableInput)), is any type that can be easily converted to an [Observable](#observable). Observable Inputs may sometimes be referred to as "valid observable sources".
### Notifier
An [observable](#observable) that is being used to notify another [observable](#observable) that it needs to perform some action. The action should only occur on a [next notification](#next), and never on [error](#error) or [complete](#complete). Generally, notifiers are used with specific operators, such as [`takeUntil`](/api/operators/takeUntil), [`buffer`](/api/operators/buffer), or [`delayWhen`](/api/operators/delayWhen). A notifier may be passed directly, or it may be returned by a callback.
### Inner Source
One, of possibly many [sources](#source), which are [subscribed](#subscribe) to automatically within a single [subscription](#subscription) to another observable. Examples of an "inner source" include the [observable inputs](#observable-inputs) returned by the mapping function in a [mergeMap](/api/operators/mergeMap) [operator](#operator). (e.g. `source.pipe(mergeMap(value => createInnerSource(value)))`, where `createInnerSource` returns any valid [observable input](#observable-inputs)).
### Partial Observer
An [observer](#observer) that lacks all necessary [notification](#notification) handlers. Generally these are supplied by user-land [consumer](#consumer) code. A "full observer" or "observer" would simply be an observer that has all [notification](#notification) handlers.
## Other Concepts
### Unhandled Errors
An "unhandled error" is any [error](#error) that is not handled by a [consumer](#consumer)-provided function, which is generally provided during the [subscribe](#subscribe) action. If no error handler was provided, RxJS will assume the error is "unhandled" and rethrow the error on a new callstack to prevent ["producer interference"](#producer-interference).
### Producer Interference
[Producer](#producer) interference happens when an error is allowed to unwind the RxJS callstack during [notification](#notification). When this happens, the error could break things like for-loops in [upstream](#upstream-and-downstream) [sources](#source) that are [notifying](#notification) [consumers](#consumer) during a [multicast](#multicast). That would cause the other [consumers](#consumer) in that [multicast](#multicast) to suddenly stop receiving values without logical explanation. As of version 6, RxJS goes out of its way to prevent producer interference by ensuring that all unhandled errors are thrown on a separate callstack.
### Upstream And Downstream
The order in which [notifications](#notification) are processed by [operations](#operation) in a [stream](#stream) have a directionality to them. "Upstream" refers to an [operation](#operation) that was already processed before the current [operation](#operation), and "downstream" refers to an [operation](#operation) that _will_ be processed _after_ the current [operation](#operation). See also: [Streaming](#stream).
================================================
FILE: apps/rxjs.dev/content/guide/higher-order-observables.md
================================================
# Higher-order Observables
Observables most commonly emit ordinary values like strings and numbers, but surprisingly often, it is necessary to handle Observables *of* Observables, so-called higher-order Observables. For example, imagine you have an Observable emitting strings that are the URLs of files you want to fetch. The code might look like this:
```ts
const fileObservable = urlObservable.pipe(
map(url => http.get(url)),
);
```
`http.get()` returns an Observable for each URL. Now you have an Observable *of* Observables, a higher-order Observable.
But how do you work with a higher-order Observable? Typically, by _flattening_: by converting a higher-order Observable into an ordinary Observable. For example:
```ts
const fileObservable = urlObservable.pipe(
concatMap(url => http.get(url)),
);
```
The Observable returned in the `concatMap` function is usually referred to as a so-called "inner" Observable, while in this context the `urlObservable` is the so-called "outer" Observable.
The [`concatMap()`](/api/operators/concatMap) operator subscribes to each "inner" Observable, buffers all further emissions of the "outer" Observable, and copies all the emitted values until the inner Observable completes, and continues processing the values of the "outer Observable". All of the values are in that way concatenated. Other useful flattening operators are
* [`mergeMap()`](/api/operators/mergeMap) — subscribes to each inner Observable as it arrives, then emits each value as it arrives
* [`switchMap()`](/api/operators/switchMap) — subscribes to the first inner Observable when it arrives, and emits each value as it arrives, but when the next inner Observable arrives, unsubscribes to the previous one, and subscribes to the new one.
* [`exhaustMap()`](/api/operators/exhaustMap) — subscribes to the first inner Observable when it arrives, and emits each value as it arrives, discarding all newly arriving inner Observables until that first one completes, then waits for the next inner Observable.
================================================
FILE: apps/rxjs.dev/content/guide/importing.md
================================================
# Importing instructions
There are different ways you can {@link guide/installation install} RxJS. Using/importing RxJS depends on
the used RxJS version, but also depends on the used installation method.
[Pipeable operators](https://v6.rxjs.dev/guide/v6/pipeable-operators) were introduced in RxJS version
5.5. This enabled all operators to be exported from a single place. This new export site was introduced
with RxJS version 6 where all pipeable operators could have been imported from `'rxjs/operators'`. For
example, `import { map } from 'rxjs/operators'`.
## New in RxJS v7.2.0
<span class="informal">**With RxJS v7.2.0, most operators have been moved to `{@link api#index 'rxjs'}`
export site. This means that the preferred way to import operators is from `'rxjs'`, while
`'rxjs/operators'` export site has been deprecated.**</span>
For example, instead of using:
```ts
import { map } from 'rxjs/operators';
```
**the preferred way** is to use:
```ts
import { map } from 'rxjs';
```
Although the old way of importing operators is still active, it will be removed in one of the next major
versions.
Click {@link #how-to-migrate here to see} how to migrate.
## Export sites
RxJS v7 exports 6 different locations out of which you can import what you need. Those are:
- `{@link api#index 'rxjs'}` - for example: `import { of } from 'rxjs';`
- `{@link api#operators 'rxjs/operators'}` - for example: `import { map } from 'rxjs/operators';`
- `{@link api#ajax 'rxjs/ajax'}` - for example: `import { ajax } from 'rxjs/ajax';`
- `{@link api#fetch 'rxjs/fetch'}` - for example: `import { fromFetch } from 'rxjs/fetch';`
- `{@link api#webSocket 'rxjs/webSocket'}` - for example: `import { webSocket } from 'rxjs/webSocket';`
- `{@link api#testing 'rxjs/testing'}` - for example: `import { TestScheduler } from 'rxjs/testing';`
### How to migrate?
While nothing has been removed from `'rxjs/operators'`, it is strongly recommended doing the operator
imports from `'rxjs'`. Almost all operator function exports have been moved to `'rxjs'`, but only a
couple of old and deprecated operators have stayed in the `'rxjs/operators'`. Those operator functions
are now mostly deprecated and most of them have their either static operator substitution or are kept as
operators, but have a new name so that they are different to their static creation counter-part (usually
ending with `With`). Those are:
| `'rxjs/operators'` Operator | Replace With Static Creation Operator | Replace With New Operator Name |
| ------------------------------------------------------- | ------------------------------------- | ------------------------------ |
| [`combineLatest`](/api/operators/combineLatest) | {@link combineLatest} | {@link combineLatestWith} |
| [`concat`](/api/operators/concat) | {@link concat} | {@link concatWith} |
| [`merge`](/api/operators/merge) | {@link merge} | {@link mergeWith} |
| [`onErrorResumeNext`](/api/operators/onErrorResumeNext) | {@link onErrorResumeNext} | {@link onErrorResumeNextWith} |
| [`race`](/api/operators/race) | {@link race} | {@link raceWith} |
| [`zip`](/api/operators/zip) | {@link zip} | {@link zipWith} |
`partition`, the operator, is a special case, as it is deprecated and you should be using the `partition` creation function exported from `'rxjs'` instead.
For example, the old and deprecated way of using [`merge`](/api/operators/merge) from `'rxjs/operators'`
is:
```ts
import { merge } from 'rxjs/operators';
a$.pipe(merge(b$)).subscribe();
```
But this should be avoided and replaced with one of the next two examples.
For example, this could be replaced by using a static creation {@link merge} function:
```ts
import { merge } from 'rxjs';
merge(a$, b$).subscribe();
```
Or it could be written using a pipeable {@link mergeWith} operator:
```ts
import { mergeWith } from 'rxjs';
a$.pipe(mergeWith(b$)).subscribe();
```
Depending on the preferred style, you can choose which one to follow, they are completely equal.
Since a new way of importing operators is introduced with RxJS v7.2.0, instructions will be split to
prior and after this version.
### ES6 via npm
If you've installed RxJS using {@link guide/installation#es6-via-npm ES6 via npm} and installed version
is:
#### v7.2.0 or later
Import only what you need:
```ts
import { of, map } from 'rxjs';
of(1, 2, 3).pipe(map((x) => x + '!!!')); // etc
```
To import the entire set of functionality:
```ts
import * as rxjs from 'rxjs';
rxjs.of(1, 2, 3).pipe(rxjs.map((x) => x + '!!!')); // etc;
```
To use with a globally imported bundle:
```js
const { of, map } = rxjs;
of(1, 2, 3).pipe(map((x) => x + '!!!')); // etc
```
If you installed RxJS version:
#### v7.1.0 or older
Import only what you need:
```ts
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
of(1, 2, 3).pipe(map((x) => x + '!!!')); // etc
```
To import the entire set of functionality:
```ts
import * as rxjs from 'rxjs';
import * as operators from 'rxjs';
rxjs.of(1, 2, 3).pipe(operators.map((x) => x + '!!!')); // etc;
```
To use with a globally imported bundle:
```js
const { of } = rxjs;
const { map } = rxjs.operators;
of(1, 2, 3).pipe(map((x) => x + '!!!')); // etc
```
### CDN
If you installed a library {@link guide/installation#cdn using CDN}, the global namespace for rxjs is
`rxjs`.
#### v7.2.0 or later
```js
const { range, filter, map } = rxjs;
range(1, 200)
.pipe(
filter((x) => x % 2 === 1),
map((x) => x + x)
)
.subscribe((x) => console.log(x));
```
#### v7.1.0 or older
```js
const { range } = rxjs;
const { filter, map } = rxjs.operators;
range(1, 200)
.pipe(
filter((x) => x % 2 === 1),
map((x) => x + x)
)
.subscribe((x) => console.log(x));
```
================================================
FILE: apps/rxjs.dev/content/guide/installation.md
================================================
# Installation Instructions
Here are different ways you can install RxJS:
## ES2015 via npm
```shell
npm install rxjs
```
By default, RxJS 7.x will provide different variants of the code based on the consumer:
- When RxJS 7.x is used on Node.js regardless of whether it is consumed via `require` or `import`, CommonJS code targeting ES5 will be provided for execution.
- When RxJS 7.4+ is used via a bundler targeting a browser (or other non-Node.js platform) ES module code targeting ES5 will be provided by default with the option to use ES2015 code.
7.x versions prior to 7.4.0 will only provide ES5 code.
If the target browsers for a project support ES2015+ or the bundle process supports down-leveling to ES5 then the bundler can optionally be configured to allow the ES2015 RxJS code to be used instead.
You can enable support for using the ES2015 RxJS code by configuring a bundler to use the `es2015` custom export condition during module resolution.
Configuring a bundler to use the `es2015` custom export condition is specific to each bundler.
If you are interested in using this option, please consult the documentation of your bundler for additional information.
However, some general information can be found here:
- https://webpack.js.org/guides/package-exports/#conditions-custom
- https://github.com/rollup/plugins/blob/node-resolve-v11.0.0/packages/node-resolve/README.md#exportconditions
To import only what you need, please {@link guide/importing#es6-via-npm check out this} guide.
## CommonJS via npm
If you receive an error like error TS2304: Cannot find name 'Promise' or error TS2304: Cannot find name
'Iterable' when using RxJS you may need to install a supplemental set of typings.
1. For typings users:
```shell
typings install es6-shim --ambient
```
2. If you're not using typings the interfaces can be copied from /es6-shim/es6-shim.d.ts.
3. Add type definition file included in tsconfig.json or CLI argument.
## All Module Types (CJS/ES6/AMD/TypeScript) via npm
To install this library via npm version 3, use the following command:
```shell
npm install @reactivex/rxjs
```
If you are using npm version 2, you need to specify the library version explicitly:
```shell
npm install @reactivex/rxjs@7.3.0
```
================================================
FILE: apps/rxjs.dev/content/guide/observable.md
================================================
# Observable
Observables are lazy Push collections of multiple values. They fill the missing spot in the following table:
| | Single | Multiple |
| -------- | ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| **Pull** | [`Function`](https://developer.mozilla.org/en-US/docs/Glossary/Function) | [`Iterator`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols) |
| **Push** | [`Promise`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) | [`Observable`](/api/index/class/Observable) |
**Example.** The following is an Observable that pushes the values `1`, `2`, `3` immediately (synchronously) when subscribed, and the value `4` after one second has passed since the subscribe call, then completes:
```ts
import { Observable } from 'rxjs';
const observable = new Observable((subscriber) => {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
setTimeout(() => {
subscriber.next(4);
subscriber.complete();
}, 1000);
});
```
To invoke the Observable and see these values, we need to _subscribe_ to it:
```ts
import { Observable } from 'rxjs';
const observable = new Observable((subscriber) => {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
setTimeout(() => {
subscriber.next(4);
subscriber.complete();
}, 1000);
});
console.log('just before subscribe');
observable.subscribe({
next(x) {
console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
console.log('done');
},
});
console.log('just after subscribe');
```
Which executes as such on the console:
```none
just before subscribe
got value 1
got value 2
got value 3
just after subscribe
got value 4
done
```
## Pull versus Push
_Pull_ and _Push_ are two different protocols that describe how a data _Producer_ can communicate with a data _Consumer_.
**What is Pull?** In Pull systems, the Consumer determines when it receives data from the data Producer. The Producer itself is unaware of when the data will be delivered to the Consumer.
Every JavaScript Function is a Pull system. The function is a Producer of data, and the code that calls the function is consuming it by "pulling" out a _single_ return value from its call.
ES2015 introduced [generator functions and iterators](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function*) (`function*`), another type of Pull system. Code that calls `iterator.next()` is the Consumer, "pulling" out _multiple_ values from the iterator (the Producer).
| | Producer | Consumer |
| -------- | ------------------------------------------ | ------------------------------------------- |
| **Pull** | **Passive:** produces data when requested. | **Active:** decides when data is requested. |
| **Push** | **Active:** produces data at its own pace. | **Passive:** reacts to received data. |
**What is Push?** In Push systems, the Producer determines when to send data to the Consumer. The Consumer is unaware of when it will receive that data.
Promises are the most common type of Push system in JavaScript today. A Promise (the Producer) delivers a resolved value to registered callbacks (the Consumers), but unlike functions, it is the Promise which is in charge of determining precisely when that value is "pushed" to the callbacks.
RxJS introduces Observables, a new Push system for JavaScript. An Observable is a Producer of multiple values, "pushing" them to Observers (Consumers).
- A **Function** is a lazily evaluated computation that synchronously returns a single value on invocation.
- A **generator** is a lazily evaluated computation that synchronously returns zero to (potentially) infinite values on iteration.
- A **Promise** is a computation that may (or may not) eventually return a single value.
- An **Observable** is a lazily evaluated computation that can synchronously or asynchronously return zero to (potentially) infinite values from the time it's invoked onwards.
<span class="informal">For more info about what to use when converting Observables to Promises, please refer to [this guide](/deprecations/to-promise).</span>
## Observables as generalizations of functions
Contrary to popular claims, Observables are not like EventEmitters nor are they like Promises for multiple values. Observables _may act_ like EventEmitters in some cases, namely when they are multicasted using RxJS Subjects, but usually they don't act like EventEmitters.
<span class="informal">Observables are like functions with zero arguments, but generalize those to allow multiple values.</span>
Consider the following:
```ts
function foo() {
console.log('Hello');
return 42;
}
const x = foo.call(); // same as foo()
console.log(x);
const y = foo.call(); // same as foo()
console.log(y);
```
We expect to see as output:
```none
"Hello"
42
"Hello"
42
```
You can write the same behavior above, but with Observables:
```ts
import { Observable } from 'rxjs';
const foo = new Observable((subscriber) => {
console.log('Hello');
subscriber.next(42);
});
foo.subscribe((x) => {
console.log(x);
});
foo.subscribe((y) => {
console.log(y);
});
```
And the output is the same:
```none
"Hello"
42
"Hello"
42
```
This happens because both functions and Observables are lazy computations. If you don't call the function, the `console.log('Hello')` won't happen. Also with Observables, if you don't "call" it (with `subscribe`), the `console.log('Hello')` won't happen. Plus, "calling" or "subscribing" is an isolated operation: two function calls trigger two separate side effects, and two Observable subscribes trigger two separate side effects. As opposed to EventEmitters which share the side effects and have eager execution regardless of the existence of subscribers, Observables have no shared execution and are lazy.
<span class="informal">Subscribing to an Observable is analogous to calling a Function.</span>
Some people claim that Observables are asynchronous. That is not true. If you surround a function call with logs, like this:
```ts
console.log('before');
console.log(foo.call());
console.log('after');
```
You will see the output:
```none
"before"
"Hello"
42
"after"
```
And this is the same behavior with Observables:
```ts
console.log('before');
foo.subscribe((x) => {
console.log(x);
});
console.log('after');
```
And the output is:
```none
"before"
"Hello"
42
"after"
```
Which proves the subscription of `foo` was entirely synchronous, just like a function.
<span class="informal">Observables are able to deliver values either synchronously or asynchronously.</span>
What is the difference between an Observable and a function? **Observables can "return" multiple values over time**, something which functions cannot. You can't do this:
```ts
function foo() {
console.log('Hello');
return 42;
return 100; // dead code. will never happen
}
```
Functions can only return one value. Observables, however, can do this:
```ts
import { Observable } from 'rxjs';
const foo = new Observable((subscriber) => {
console.log('Hello');
subscriber.next(42);
subscriber.next(100); // "return" another value
subscriber.next(200); // "return" yet another
});
console.log('before');
foo.subscribe((x) => {
console.log(x);
});
console.log('after');
```
With synchronous output:
```none
"before"
"Hello"
42
100
200
"after"
```
But you can also "return" values asynchronously:
```ts
import { Observable } from 'rxjs';
const foo = new Observable((subscriber) => {
console.log('Hello');
subscriber.next(42);
subscriber.next(100);
subscriber.next(200);
setTimeout(() => {
subscriber.next(300); // happens asynchronously
}, 1000);
});
console.log('before');
foo.subscribe((x) => {
console.log(x);
});
console.log('after');
```
With output:
```none
"before"
"Hello"
42
100
200
"after"
300
```
Conclusion:
- `func.call()` means "_give me one value synchronously_"
- `observable.subscribe()` means "_give me any amount of values, either synchronously or asynchronously_"
## Anatomy of an Observable
Observables are **created** using `new Observable` or a creation operator, are **subscribed** to with an Observer, **execute** to deliver `next` / `error` / `complete` notifications to the Observer, and their execution may be **disposed**. These four aspects are all encoded in an Observable instance, but some of these aspects are related to other types, like Observer and Subscription.
Core Observable concerns:
- **Creating** Observables
- **Subscribing** to Observables
- **Executing** the Observable
- **Disposing** Observables
### Creating Observables
The `Observable` constructor takes one argument: the `subscribe` function.
The following example creates an Observable to emit the string `'hi'` every second to a subscriber.
```ts
import { Observable } from 'rxjs';
const observable = new Observable(function subscribe(subscriber) {
const id = setInterval(() => {
subscriber.next('hi');
}, 1000);
});
```
<span class="informal">Observables can be created with `new Observable`. Most commonly, observables are created using creation functions, like `of`, `from`, `interval`, etc.</span>
In the example above, the `subscribe` function is the most important piece to describe the Observable. Let's look at what subscribing means.
### Subscribing to Observables
The Observable `observable` in the example can be _subscribed_ to, like this:
```ts
observable.subscribe((x) => console.log(x));
```
It is not a coincidence that `observable.subscribe` and `subscribe` in `new Observable(function subscribe(subscriber) {...})` have the same name. In the library, they are different, but for practical purposes you can consider them conceptually equal.
This shows how `subscribe` calls are not shared among multiple Observers of the same Observable. When calling `observable.subscribe` with an Observer, the function `subscribe` in `new Observable(function subscribe(subscriber) {...})` is run for that given subscriber. Each call to `observable.subscribe` triggers its own independent setup for that given subscriber.
<span class="informal">Subscribing to an Observable is like calling a function, providing callbacks where the data will be delivered to.</span>
This is drastically different to event handler APIs like `addEventListener` / `removeEventListener`. With `observable.subscribe`, the given Observer is not registered as a listener in the Observable. The Observable does not even maintain a list of attached Observers.
A `subscribe` call is simply a way to start an "Observable execution" and deliver values or events to an Observer of that execution.
### Executing Observables
The code inside `new Observable(function subscribe(subscriber) {...})` represents an "Observable execution", a lazy computation that only happens for each Observer that subscribes. The execution produces multiple values over time, either synchronously or asynchronously.
There are three types of values an Observable Execution can deliver:
- "Next" notification: sends a value such as a Number, a String, an Object, etc.
- "Error" notification: sends a JavaScript Error or exception.
- "Complete" notification: does not send a value.
"Next" notifications are the most important and most common type: they represent actual data being delivered to a subscriber. "Error" and "Complete" notifications may happen only once during the Observable Execution, and there can only be either one of them.
These constraints are expressed best in the so-called _Observable Grammar_ or _Contract_, written as a regular expression:
```none
next*(error|complete)?
```
<span class="informal">In an Observable Execution, zero to infinite Next notifications may be delivered. If either an Error or Complete notification is delivered, then nothing else can be delivered afterwards.</span>
The following is an example of an Observable execution that delivers three Next notifications, then completes:
```ts
import { Observable } from 'rxjs';
const observable = new Observable(function subscribe(subscriber) {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
subscriber.complete();
});
```
Observables strictly adhere to the Observable Contract, so the following code would not deliver the Next notification `4`:
```ts
import { Observable } from 'rxjs';
const observable = new Observable(function subscribe(subscriber) {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
subscriber.complete();
subscriber.next(4); // Is not delivered because it would violate the contract
});
```
It is a good idea to wrap any code in `subscribe` with `try`/`catch` block that will deliver an Error notification if it catches an exception:
```ts
import { Observable } from 'rxjs';
const observable = new Observable(function subscribe(subscriber) {
try {
subscriber.next(1);
subscriber.next(2);
subscriber.next(3);
subscriber.complete();
} catch (err) {
subscriber.error(err); // delivers an error if it caught one
}
});
```
### Disposing Observable Executions
Because Observable Executions may be infinite, and it's common for an Observer to want to abort execution in finite time, we need an API for canceling an execution. Since each execution is exclusive to one Observer only, once the Observer is done receiving values, it has to have a way to stop the execution, in order to avoid wasting computation power or memory resources.
When `observable.subscribe` is called, the Observer gets attached to the newly created Observable execution. This call also returns an object, the `Subscription`:
```ts
const subscription = observable.subscribe((x) => console.log(x));
```
The Subscription represents the ongoing execution, and has a minimal API which allows you to cancel that execution. Read more about the [`Subscription` type here](./guide/subscription). With `subscription.unsubscribe()` you can cancel the ongoing execution:
```ts
import { from } from 'rxjs';
const observable = from([10, 20, 30]);
const subscription = observable.subscribe((x) => console.log(x));
// Later:
subscription.unsubscribe();
```
<span class="informal">When you subscribe, you get back a Subscription, which represents the ongoing execution. Just call `unsubscribe()` to cancel the execution.</span>
Each Observable must define how to dispose resources of that execution when we create the Observable using `create()`. You can do that by returning a custom `unsubscribe` function from within `function subscribe()`.
For instance, this is how we clear an interval execution set with `setInterval`:
```ts
import { Observable } from 'rxjs';
const observable = new Observable(function subscribe(subscriber) {
// Keep track of the interval resource
const intervalId = setInterval(() => {
subscriber.next('hi');
}, 1000);
// Provide a way of canceling and disposing the interval resource
return function unsubscribe() {
clearInterval(intervalId);
};
});
```
Just like `observable.subscribe` resembles `new Observable(function subscribe() {...})`, the `unsubscribe` we return from `subscribe` is conceptually equal to `subscription.unsubscribe`. In fact, if we remove the ReactiveX types surrounding these concepts, we're left with rather straightforward JavaScript.
```ts
function subscribe(subscriber) {
const intervalId = setInterval(() => {
subscriber.next('hi');
}, 1000);
return function unsubscribe() {
clearInterval(intervalId);
};
}
const unsubscribe = subscribe({ next: (x) => console.log(x) });
// Later:
unsubscribe(); // dispose the resources
```
The reason why we use Rx types like Observable, Observer, and Subscription is to get safety (such as the Observable Contract) and composability with Operators.
================================================
FILE: apps/rxjs.dev/content/guide/observer.md
================================================
# Observer
**What is an Observer?** An Observer is a consumer of values delivered by an Observable. Observers are simply a set of callbacks, one for each type of notification delivered by the Observable: `next`, `error`, and `complete`. The following is an example of a typical Observer object:
```ts
const observer = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
complete: () => console.log('Observer got a complete notification'),
};
```
To use the Observer, provide it to the `subscribe` of an Observable:
```ts
observable.subscribe(observer);
```
<span class="informal">Observers are just objects with three callbacks, one for each type of notification that an Observable may deliver.</span>
Observers in RxJS may also be *partial*. If you don't provide one of the callbacks, the execution of the Observable will still happen normally, except some types of notifications will be ignored, because they don't have a corresponding callback in the Observer.
The example below is an `Observer` without the `complete` callback:
```ts
const observer = {
next: x => console.log('Observer got a next value: ' + x),
error: err => console.error('Observer got an error: ' + err),
};
```
When subscribing to an `Observable`, you may also just provide the next callback as an argument, without being attached to an `Observer` object, for instance like this:
```ts
observable.subscribe(x => console.log('Observer got a next value: ' + x));
```
Internally in `observable.subscribe`, it will create an `Observer` object using the callback argument as the `next` handler.
================================================
FILE: apps/rxjs.dev/content/guide/operators.md
================================================
# RxJS Operators
RxJS is mostly useful for its _operators_, even though the Observable is the foundation. Operators are the essential pieces that allow complex asynchronous code to be easily composed in a declarative manner.
## What are operators?
Operators are **functions**. There are two kinds of operators:
**Pipeable Operators** are the kind that can be piped to Observables using the syntax `observableInstance.pipe(operator)` or, more commonly, `observableInstance.pipe(operatorFactory())`. Operator factory functions include, [`filter(...)`](/api/operators/filter), and [`mergeMap(...)`](/api/operators/mergeMap).
When Pipeable Operators are called, they do not _change_ the existing Observable instance. Instead, they return a _new_ Observable, whose subscription logic is based on the first Observable.
<span class="informal">A Pipeable Operator is a function that takes an Observable as its input and returns another Observable. It is a pure operation: the previous Observable stays unmodified.</span>
<span class="informal">A Pipeable Operator Factory is a function that can take parameters to set the context and return a Pipeable Operator. The factory’s arguments belong to the operator’s lexical scope.</span>
A Pipeable Operator is essentially a pure function which takes one Observable as input and generates another Observable as output. Subscribing to the output Observable will also subscribe to the input Observable.
**Creation Operators** are the other kind of operator, which can be called as standalone functions to create a new Observable. For example: `of(1, 2, 3)` creates an observable that will emit 1, 2, and 3, one right after another. Creation operators will be discussed in more detail in a later section.
For example, the operator called [`map`](/api/operators/map) is analogous to the Array method of the same name. Just as `[1, 2, 3].map(x => x * x)` will yield `[1, 4, 9]`, the Observable created like this:
```ts
import { of, map } from 'rxjs';
of(1, 2, 3)
.pipe(map((x) => x * x))
.subscribe((v) => console.log(`value: ${v}`));
// Logs:
// value: 1
// value: 4
// value: 9
```
will emit `1`, `4`, `9`. Another useful operator is [`first`](/api/operators/first):
```ts
import { of, first } from 'rxjs';
of(1, 2, 3)
.pipe(first())
.subscribe((v) => console.log(`value: ${v}`));
// Logs:
// value: 1
```
Note that `map` logically must be constructed on the fly, since it must be given the mapping function to. By contrast, `first` could be a constant, but is nonetheless constructed on the fly. As a general practice, all operators are constructed, whether they need arguments or not.
## Piping
Pipeable operators are functions, so they _could_ be used like ordinary functions: `op()(obs)` — but in practice, there tend to be many of them convolved together, and quickly become unreadable: `op4()(op3()(op2()(op1()(obs))))`. For that reason, Observables have a method called `.pipe()` that accomplishes the same thing while being much easier to read:
```ts
obs.pipe(op1(), op2(), op3(), op4());
```
As a stylistic matter, `op()(obs)` is never used, even if there is only one operator; `obs.pipe(op())` is universally preferred.
## Creation Operators
**What are creation operators?** Distinct from pipeable operators, creation operators are functions that can be used to create an Observable with some common predefined behavior or by joining other Observables.
A typical example of a creation operator would be the `interval` function. It takes a number (not an Observable) as input argument, and produces an Observable as output:
```ts
import { interval } from 'rxjs';
const observable = interval(1000 /* number of milliseconds */);
```
See the list of all static creation operators [here](#creation-operators-list).
## Higher-order Observables
Observables most commonly emit ordinary values like strings and numbers, but surprisingly often, it is necessary to handle Observables _of_ Observables, so-called higher-order Observables. For example, imagine you had an Observable emitting strings that were the URLs of files you wanted to see. The code might look like this:
```ts
const fileObservable = urlObservable.pipe(map((url) => http.get(url)));
```
`http.get()` returns an Observable (of string or string arrays probably) for each individual URL. Now you have an Observable _of_ Observables, a higher-order Observable.
But how do you work with a higher-order Observable? Typically, by _flattening_: by (somehow) converting a higher-order Observable into an ordinary Observable. For example:
```ts
const fileObservable = urlObservable.pipe(
map((url) => http.get(url)),
concatAll()
);
```
The [`concatAll()`](/api/operators/concatAll) operator subscribes to each "inner" Observable that comes out of the "outer" Observable, and copies all the emitted values until that Observable completes, and goes on to the next one. All of the values are in that way concatenated. Other useful flattening operators (called [_join operators_](#join-operators)) are
- [`mergeAll()`](/api/operators/mergeAll) — subscribes to each inner Observable as it arrives, then emits each value as it arrives
- [`switchAll()`](/api/operators/switchAll) — subscribes to the first inner Observable when it arrives, and emits each value as it arrives, but when the next inner Observable arrives, unsubscribes to the previous one, and subscribes to the new one.
- [`exhaustAll()`](/api/operators/exhaustAll) — subscribes to the first inner Observable when it arrives, and emits each value as it arrives, discarding all newly arriving inner Observables until that first one completes, then waits for the next inner Observable.
Just as many array libraries combine [`map()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map) and [`flat()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat) (or `flatten()`) into a single [`flatMap()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flatMap), there are mapping equivalents of all the RxJS flattening operators [`concatMap()`](/api/operators/concatMap), [`mergeMap()`](/api/operators/mergeMap), [`switchMap()`](/api/operators/switchMap), and [`exhaustMap()`](/api/operators/exhaustMap).
## Marble diagrams
To explain how operators work, textual descriptions are often not enough. Many operators are related to time, they may for instance delay, sample, throttle, or debounce value emissions in different ways. Diagrams are often a better tool for that. _Marble Diagrams_ are visual representations of how operators work, and include the input Observable(s), the operator and its parameters, and the output Observable.
<span class="informal">In a marble diagram, time flows to the right, and the diagram describes how values ("marbles") are emitted on the Observable execution.</span>
Below you can see the anatomy of a marble diagram.
<img src="assets/images/guide/marble-diagram-anatomy.svg">
Throughout this documentation site, we extensively use marble diagrams to explain how operators work. They may be really useful in other contexts too, like on a whiteboard or even in our unit tests (as ASCII diagrams).
## Categories of operators
There are operators for different purposes, and they may be categorized as: creation, transformation, filtering, joining, multicasting, error handling, utility, etc. In the following list you will find all the operators organized in categories.
For a complete overview, see the [references page](/api).
### <a id="creation-operators-list"></a>Creation Operators
- [`ajax`](/api/ajax/ajax)
- [`bindCallback`](/api/index/function/bindCallback)
- [`bindNodeCallback`](/api/index/function/bindNodeCallback)
- [`defer`](/api/index/function/defer)
- [`EMPTY`](/api/index/const/EMPTY)
- [`from`](/api/index/function/from)
- [`fromEvent`](/api/index/function/fromEvent)
- [`fromEventPattern`](/api/index/function/fromEventPattern)
- [`generate`](/api/index/function/generate)
- [`interval`](/api/index/function/interval)
- [`of`](/api/index/function/of)
- [`range`](/api/index/function/range)
- [`throwError`](/api/index/function/throwError)
- [`timer`](/api/index/function/timer)
- [`iif`](/api/index/function/iif)
### <a id="join-creation-operators"></a>Join Creation Operators
These are Observable creation operators that also have join functionality -- emitting values of multiple source Observables.
- [`combineLatest`](/api/index/function/combineLatest)
- [`concat`](/api/index/function/concat)
- [`forkJoin`](/api/index/function/forkJoin)
- [`merge`](/api/index/function/merge)
- [`partition`](/api/index/function/partition)
- [`race`](/api/index/function/race)
- [`zip`](/api/index/function/zip)
### Transformation Operators
- [`buffer`](/api/operators/buffer)
- [`bufferCount`](/api/operators/bufferCount)
- [`bufferTime`](/api/operators/bufferTime)
- [`bufferToggle`](/api/operators/bufferToggle)
- [`bufferWhen`](/api/operators/bufferWhen)
- [`concatMap`](/api/operators/concatMap)
- [`concatMapTo`](/api/operators/concatMapTo)
- [`exhaustMap`](/api/operators/exhaustMap)
- [`expand`](/api/operators/expand)
- [`groupBy`](/api/operators/groupBy)
- [`map`](/api/operators/map)
- [`mapTo`](/api/operators/mapTo)
- [`mergeMap`](/api/operators/mergeMap)
- [`mergeMapTo`](/api/operators/mergeMapTo)
- [`mergeScan`](/api/operators/mergeScan)
- [`pairwise`](/api/operators/pairwise)
- [`partition`](/api/operators/partition)
- [`scan`](/api/operators/scan)
- [`switchScan`](/api/operators/switchScan)
- [`switchMap`](/api/operators/switchMap)
- [`switchMapTo`](/api/operators/switchMapTo)
- [`window`](/api/operators/window)
- [`windowCount`](/api/operators/windowCount)
- [`windowTime`](/api/operators/windowTime)
- [`windowToggle`](/api/operators/windowToggle)
- [`windowWhen`](/api/operators/windowWhen)
### Filtering Operators
- [`audit`](/api/operators/audit)
- [`auditTime`](/api/operators/auditTime)
- [`debounce`](/api/operators/debounce)
- [`debounceTime`](/api/operators/debounceTime)
- [`distinct`](/api/operators/distinct)
- [`distinctUntilChanged`](/api/operators/distinctUntilChanged)
- [`distinctUntilKeyChanged`](/api/operators/distinctUntilKeyChanged)
- [`elementAt`](/api/operators/elementAt)
- [`filter`](/api/operators/filter)
- [`first`](/api/operators/first)
- [`ignoreElements`](/api/operators/ignoreElements)
- [`last`](/api/operators/last)
- [`sample`](/api/operators/sample)
- [`sampleTime`](/api/operators/sampleTime)
- [`single`](/api/operators/single)
- [`skip`](/api/operators/skip)
- [`skipLast`](/api/operators/skipLast)
- [`skipUntil`](/api/operators/skipUntil)
- [`skipWhile`](/api/operators/skipWhile)
- [`take`](/api/operators/take)
- [`takeLast`](/api/operators/takeLast)
- [`takeUntil`](/api/operators/takeUntil)
- [`takeWhile`](/api/operators/takeWhile)
- [`throttle`](/api/operators/throttle)
- [`throttleTime`](/api/operators/throttleTime)
### <a id="join-operators"></a>Join Operators
Also see the [Join Creation Operators](#join-creation-operators) section above.
- [`combineLatestAll`](/api/operators/combineLatestAll)
- [`concatAll`](/api/operators/concatAll)
- [`exhaustAll`](/api/operators/exhaustAll)
- [`mergeAll`](/api/operators/mergeAll)
- [`switchAll`](/api/operators/switchAll)
- [`startWith`](/api/operators/startWith)
- [`withLatestFrom`](/api/operators/withLatestFrom)
### Multicasting Operators
- [`share`](/api/operators/share)
### Error Handling Operators
- [`catchError`](/api/operators/catchError)
- [`retry`](/api/operators/retry)
- [`retryWhen`](/api/operators/retryWhen)
### Utility Operators
- [`tap`](/api/operators/tap)
- [`delay`](/api/operators/delay)
- [`delayWhen`](/api/operators/delayWhen)
- [`dematerialize`](/api/operators/dematerialize)
- [`materialize`](/api/operators/materialize)
- [`observeOn`](/api/operators/observeOn)
- [`subscribeOn`](/api/operators/subscribeOn)
- [`timeInterval`](/api/operators/timeInterval)
- [`timestamp`](/api/operators/timestamp)
- [`timeout`](/api/operators/timeout)
- [`timeoutWith`](/api/operators/timeoutWith)
- [`toArray`](/api/operators/toArray)
### Conditional and Boolean Operators
- [`defaultIfEmpty`](/api/operators/defaultIfEmpty)
- [`every`](/api/operators/every)
- [`find`](/api/operators/find)
- [`findIndex`](/api/operators/findIndex)
- [`isEmpty`](/api/operators/isEmpty)
### Mathematical and Aggregate Operators
- [`count`](/api/operators/count)
- [`max`](/api/operators/max)
- [`min`](/api/operators/min)
- [`reduce`](/api/operators/reduce)
## Creating custom operators
### Use the `pipe()` function to make new operators
If there is a commonly used sequence of operators in your code, use the `pipe()` function to extract the sequence into a new operator. Even if a sequence is not that common, breaking it out into a single operator can improve readability.
For example, you could make a function that discarded odd values and doubled even values like this:
```ts
import { pipe, filter, map } from 'rxjs';
function discardOddDoubleEven() {
return pipe(
filter((v) => !(v % 2)),
map((v) => v + v)
);
}
```
(The `pipe()` function is analogous to, but not the same thing as, the `.pipe()` method on an Observable.)
### Creating new operators from scratch
It is more complicated, but if you have to write an operator that cannot be made from a combination of existing operators (a rare occurrence), you can write an operator from scratch using the Observable constructor, like this:
```ts
import { Observable, of } from 'rxjs';
function delay<T>(delayInMillis: number) {
return (observable: Observable<T>) =>
new Observable<T>((subscriber) => {
// this function will be called each time this
// Observable is subscribed to.
const allTimerIDs = new Set();
let hasCompleted = false;
const subscription = observable.subscribe({
next(value) {
// Start a timer to delay the next value
// from being pushed.
const timerID = setTimeout(() => {
subscriber.next(value);
// after we push the value, we need to clean up the timer timerID
allTimerIDs.delete(timerID);
// If the source has completed, and there are no more timers running,
// we can complete the resulting observable.
if (hasCompleted && allTimerIDs.size === 0) {
subscriber.complete();
}
}, delayInMillis);
allTimerIDs.add(timerID);
},
error(err) {
// We need to make sure we're propagating our errors through.
subscriber.error(err);
},
complete() {
hasCompleted = true;
// If we still have timers running, we don't want to complete yet.
if (allTimerIDs.size === 0) {
subscriber.complete();
}
},
});
// Return the finalization logic. This will be invoked when
// the result errors, completes, or is unsubscribed.
return () => {
subscription.unsubscribe();
// Clean up our timers.
for (const timerID of allTimerIDs) {
clearTimeout(timerID);
}
};
});
}
// Try it out!
of(1, 2, 3).pipe(delay(1000)).subscribe(console.log);
```
Note that you must
1. implement all three Observer functions, `next()`, `error()`, and `complete()` when subscribing to the input Observable.
2. implement a "finalization" function that cleans up when the Observable completes (in this case by unsubscribing and clearing any pending timeouts).
3. return that finalization function from the function passed to the Observable constructor.
Of course, this is only an example; the [`delay()`](/api/operators/delay) operator already exists.
================================================
FILE: apps/rxjs.dev/content/guide/overview.md
================================================
# Introduction
RxJS is a library for composing asynchronous and event-based programs by using observable sequences. It provides one core type, the [Observable](./guide/observable), satellite types (Observer, Schedulers, Subjects) and operators inspired by `Array` methods (`map`, `filter`, `reduce`, `every`, etc) to allow handling asynchronous events as collections.
<span class="informal">Think of RxJS as Lodash for events.</span>
ReactiveX combines the [Observer pattern](https://en.wikipedia.org/wiki/Observer_pattern) with the [Iterator pattern](https://en.wikipedia.org/wiki/Iterator_pattern) and [functional programming with collections](http://martinfowler.com/articles/collection-pipeline/#NestedOperatorExpressions) to fill the need for an ideal way of managing sequences of events.
The essential concepts in RxJS which solve async event management are:
- **Observable:** represents the idea of an invokable collection of future values or events.
- **Observer:** is a collection of callbacks that knows how to listen to values delivered by the Observable.
- **Subscription:** represents the execution of an Observable, is primarily useful for cancelling the execution.
- **Operators:** are pure functions that enable a functional programming style of dealing with collections with operations like `map`, `filter`, `concat`, `reduce`, etc.
- **Subject:** is equivalent to an EventEmitter, and the only way of multicasting a value or event to multiple Observers.
- **Schedulers:** are centralized dispatchers to control concurrency, allowing us to coordinate when computation happens on e.g. `setTimeout` or `requestAnimationFrame` or others.
## First examples
Normally you register event listeners.
```ts
document.addEventListener('click', () => console.log('Clicked!'));
```
Using RxJS you create an observable instead.
```ts
import { fromEvent } from 'rxjs';
fromEvent(document, 'click').subscribe(() => console.log('Clicked!'));
```
### Purity
What makes RxJS powerful is its ability to produce values using pure functions. That means your code is less prone to errors.
Normally you would create an impure function, where other
pieces of your code can mess up your state.
```ts
let count = 0;
document.addEventListener('click', () => console.log(`Clicked ${++count} times`));
```
Using RxJS you isolate the state.
```ts
import { fromEvent, scan } from 'rxjs';
fromEvent(document, 'click')
.pipe(scan((count) => count + 1, 0))
.subscribe((count) => console.log(`Clicked ${count} times`));
```
The **scan** operator works just like **reduce** for arrays. It takes a value which is exposed to a callback. The returned value of the callback will then become the next value exposed the next time the callback runs.
### Flow
RxJS has a whole range of operators that helps you control how the events flow through your observables.
This is how you would allow at most one click per second, with plain JavaScript:
```ts
let count = 0;
let rate = 1000;
let lastClick = Date.now() - rate;
document.addEventListener('click', () => {
if (Date.now() - lastClick >= rate) {
console.log(`Clicked ${++count} times`);
lastClick = Date.now();
}
});
```
With RxJS:
```ts
import { fromEvent, throttleTime, scan } from 'rxjs';
fromEvent(document, 'click')
.pipe(
throttleTime(1000),
scan((count) => count + 1, 0)
)
.subscribe((count) => console.log(`Clicked ${count} times`));
```
Other flow control operators are [**filter**](../api/operators/filter), [**delay**](../api/operators/delay), [**debounceTime**](../api/operators/debounceTime), [**take**](../api/operators/take), [**takeUntil**](../api/operators/takeUntil), [**distinct**](../api/operators/distinct), [**distinctUntilChanged**](../api/operators/distinctUntilChanged) etc.
### Values
You can transform the values passed through your observables.
Here's how you can add the current mouse x position for every click, in plain JavaScript:
```ts
let count = 0;
const rate = 1000;
let lastClick = Date.now() - rate;
document.addEventListener('click', (event) => {
if (Date.now() - lastClick >= rate) {
count += event.clientX;
console.log(count);
lastClick = Date.now();
}
});
```
With RxJS:
```ts
import { fromEvent, throttleTime, map, scan } from 'rxjs';
fromEvent(document, 'click')
.pipe(
throttleTime(1000),
map((event) => event.clientX),
scan((count, clientX) => count + clientX, 0)
)
.subscribe((count) => console.log(count));
```
Other value producing operators are [**pairwise**](../api/operators/pairwise), [**sample**](../api/operators/sample) etc.
================================================
FILE: apps/rxjs.dev/content/guide/scheduler.md
================================================
# Scheduler
**What is a Scheduler?** A scheduler controls when a subscription starts and when notifications are delivered. It consists of three components.
- **A Scheduler is a data structure.** It knows how to store and queue tasks based on priority or other criteria.
- **A Scheduler is an execution context.** It denotes where and when the task is executed (e.g. immediately, or in another callback mechanism such as setTimeout or process.nextTick, or the animation frame).
- **A Scheduler has a (virtual) clock.** It provides a notion of "time" by a getter method `now()` on the scheduler. Tasks being scheduled on a particular scheduler will adhere only to the time denoted by that clock.
<span class="informal">A Scheduler lets you define in what execution context will an Observable deliver notifications to its Observer.</span>
In the example below, we take the usual simple Observable that emits values `1`, `2`, `3` synchronously, and use the operator `observeOn` to specify the `asyncScheduler` scheduler to use for delivering those values.
<!-- prettier-ignore -->
```ts
import { Observable, observeOn, asyncScheduler } from 'rxjs';
const observable = new Observable((observer) => {
observer.next(1);
observer.next(2);
observer.next(3);
observer.complete();
}).pipe(
observeOn(asyncScheduler)
);
console.log('just before subscribe');
observable.subscribe({
next(x) {
console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
console.log('done');
},
});
console.log('just after subscribe');
```
Which executes with the output:
```none
just before subscribe
just after subscribe
got value 1
got value 2
got value 3
done
```
Notice how the notifications `got value...` were delivered after `just after subscribe`, which is different to the default behavior we have seen so far. This is because `observeOn(asyncScheduler)` introduces a proxy Observer between `new Observable` and the final Observer. Let's rename some identifiers to make that distinction obvious in the example code:
<!-- prettier-ignore -->
```ts
import { Observable, observeOn, asyncScheduler } from 'rxjs';
const observable = new Observable((proxyObserver) => {
proxyObserver.next(1);
proxyObserver.next(2);
proxyObserver.next(3);
proxyObserver.complete();
}).pipe(
observeOn(asyncScheduler)
);
const finalObserver = {
next(x) {
console.log('got value ' + x);
},
error(err) {
console.error('something wrong occurred: ' + err);
},
complete() {
console.log('done');
},
};
console.log('just before subscribe');
observable.subscribe(finalObserver);
console.log('just after subscribe');
```
The `proxyObserver` is created in `observeOn(asyncScheduler)`, and its `next(val)` function is approximately the following:
<!-- prettier-ignore -->
```ts
const proxyObserver = {
next(val) {
asyncScheduler.schedule(
(x) => finalObserver.next(x),
0 /* delay */,
val /* will be the x for the function above */
);
},
// ...
};
```
The `asyncScheduler` Scheduler operates with a `setTimeout` or `setInterval`, even if the given `delay` was zero. As usual, in JavaScript, `setTimeout(fn, 0)` is known to run the function `fn` earliest on the next event loop iteration. This explains why `got value 1` is delivered to the `finalObserver` after `just after subscribe` happened.
The `schedule()` method of a Scheduler takes a `delay` argument, which refers to a quantity of time relative to the Scheduler's own internal clock. A Scheduler's clock need not have any relation to the actual wall-clock time. This is how temporal operators like `delay` operate not on actual time, but on time dictated by the Scheduler's clock. This is specially useful in testing, where a _virtual time Scheduler_ may be used to fake wall-clock time while in reality executing scheduled tasks synchronously.
## Scheduler Types
The `asyncScheduler` Scheduler is one of the built-in schedulers provided by RxJS. Each of these can be created and returned by using static properties of the `Scheduler` object.
| Scheduler | Purpose |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `null` | By not passing any scheduler, notifications are delivered synchronously and recursively. Use this for constant-time operations or tail recursive operations. |
| `queueScheduler` | Schedules on a queue in the current event frame (trampoline scheduler). Use this for iteration operations. |
| `asapScheduler` | Schedules on the
gitextract_fhrsca5d/
├── .editorconfig
├── .eslintignore
├── .eslintrc.json
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yml
│ │ └── config.yml
│ ├── PULL_REQUEST_TEMPLATE.md
│ ├── actions/
│ │ └── install-dependencies/
│ │ └── action.yml
│ ├── lock.yml
│ └── workflows/
│ ├── ci_main.yml
│ ├── ci_ts_latest.yml
│ ├── publish.yml
│ └── rebase.yml
├── .gitignore
├── .prettierrc.json
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE.txt
├── README.md
├── SECURITY.md
├── apps/
│ └── rxjs.dev/
│ ├── .browserslistrc
│ ├── .eslintrc.js
│ ├── .firebaserc
│ ├── .gitignore
│ ├── README.md
│ ├── angular.json
│ ├── content/
│ │ ├── 6-to-7-change-summary.md
│ │ ├── blackLivesMatter.md
│ │ ├── code-of-conduct.md
│ │ ├── deprecations/
│ │ │ ├── array-argument.md
│ │ │ ├── breaking-changes.md
│ │ │ ├── index.md
│ │ │ ├── multicasting.md
│ │ │ ├── resultSelector.md
│ │ │ ├── scheduler-argument.md
│ │ │ ├── subscribe-arguments.md
│ │ │ └── to-promise.md
│ │ ├── file-not-found.md
│ │ ├── guide/
│ │ │ ├── core-semantics.md
│ │ │ ├── glossary-and-semantics.md
│ │ │ ├── higher-order-observables.md
│ │ │ ├── importing.md
│ │ │ ├── installation.md
│ │ │ ├── observable.md
│ │ │ ├── observer.md
│ │ │ ├── operators.md
│ │ │ ├── overview.md
│ │ │ ├── scheduler.md
│ │ │ ├── subject.md
│ │ │ ├── subscription.md
│ │ │ └── testing/
│ │ │ └── marble-testing.md
│ │ ├── license.md
│ │ ├── maintainer-guidelines.md
│ │ ├── marketing/
│ │ │ ├── announcements.json
│ │ │ ├── api.html
│ │ │ ├── contributors.json
│ │ │ ├── index.html
│ │ │ ├── operator-decision-tree.html
│ │ │ └── team.html
│ │ ├── navigation.json
│ │ └── operator-decision-tree.yml
│ ├── database.rules.json
│ ├── firebase.json
│ ├── ngsw-config.json
│ ├── package.json
│ ├── scripts/
│ │ ├── _payload-limits.json
│ │ ├── deploy-to-firebase.sh
│ │ ├── deploy-to-firebase.test.sh
│ │ ├── payload.sh
│ │ ├── publish-docs.sh
│ │ └── test-pwa-score.js
│ ├── src/
│ │ ├── app/
│ │ │ ├── app.component.ts
│ │ │ ├── app.module.ts
│ │ │ ├── custom-elements/
│ │ │ │ ├── announcement-bar/
│ │ │ │ │ ├── announcement-bar.component.spec.ts
│ │ │ │ │ ├── announcement-bar.component.ts
│ │ │ │ │ └── announcement-bar.module.ts
│ │ │ │ ├── api/
│ │ │ │ │ ├── api-list.component.spec.ts
│ │ │ │ │ ├── api-list.component.ts
│ │ │ │ │ ├── api-list.module.ts
│ │ │ │ │ ├── api.service.spec.ts
│ │ │ │ │ └── api.service.ts
│ │ │ │ ├── code/
│ │ │ │ │ ├── code-example.component.spec.ts
│ │ │ │ │ ├── code-example.component.ts
│ │ │ │ │ ├── code-example.module.ts
│ │ │ │ │ ├── code-tabs.component.spec.ts
│ │ │ │ │ ├── code-tabs.component.ts
│ │ │ │ │ ├── code-tabs.module.ts
│ │ │ │ │ ├── code.component.spec.ts
│ │ │ │ │ ├── code.component.ts
│ │ │ │ │ ├── code.module.ts
│ │ │ │ │ └── pretty-printer.service.ts
│ │ │ │ ├── contributor/
│ │ │ │ │ ├── contributor-list.component.spec.ts
│ │ │ │ │ ├── contributor-list.component.ts
│ │ │ │ │ ├── contributor-list.module.ts
│ │ │ │ │ ├── contributor.component.ts
│ │ │ │ │ ├── contributor.service.spec.ts
│ │ │ │ │ ├── contributor.service.ts
│ │ │ │ │ └── contributors.model.ts
│ │ │ │ ├── current-location/
│ │ │ │ │ ├── current-location.component.spec.ts
│ │ │ │ │ ├── current-location.component.ts
│ │ │ │ │ └── current-location.module.ts
│ │ │ │ ├── custom-elements.module.ts
│ │ │ │ ├── element-registry.ts
│ │ │ │ ├── elements-loader.spec.ts
│ │ │ │ ├── elements-loader.ts
│ │ │ │ ├── expandable-section/
│ │ │ │ │ ├── expandable-section.component.ts
│ │ │ │ │ └── expandable-section.module.ts
│ │ │ │ ├── lazy-custom-element.component.spec.ts
│ │ │ │ ├── lazy-custom-element.component.ts
│ │ │ │ ├── live-example/
│ │ │ │ │ ├── live-example.component.spec.ts
│ │ │ │ │ ├── live-example.component.ts
│ │ │ │ │ └── live-example.module.ts
│ │ │ │ ├── operator-decision-tree/
│ │ │ │ │ ├── README.md
│ │ │ │ │ ├── fixtures.ts
│ │ │ │ │ ├── interfaces.ts
│ │ │ │ │ ├── operator-decision-tree-data.service.spec.ts
│ │ │ │ │ ├── operator-decision-tree-data.service.ts
│ │ │ │ │ ├── operator-decision-tree.component.scss
│ │ │ │ │ ├── operator-decision-tree.component.spec.ts
│ │ │ │ │ ├── operator-decision-tree.component.ts
│ │ │ │ │ ├── operator-decision-tree.module.spec.ts
│ │ │ │ │ ├── operator-decision-tree.module.ts
│ │ │ │ │ ├── operator-decision-tree.service.spec.ts
│ │ │ │ │ ├── operator-decision-tree.service.ts
│ │ │ │ │ ├── utils.spec.ts
│ │ │ │ │ └── utils.ts
│ │ │ │ ├── resource/
│ │ │ │ │ ├── resource-list.component.spec.ts
│ │ │ │ │ ├── resource-list.component.ts
│ │ │ │ │ ├── resource-list.module.ts
│ │ │ │ │ ├── resource.model.ts
│ │ │ │ │ ├── resource.service.spec.ts
│ │ │ │ │ └── resource.service.ts
│ │ │ │ ├── search/
│ │ │ │ │ ├── file-not-found-search.component.spec.ts
│ │ │ │ │ ├── file-not-found-search.component.ts
│ │ │ │ │ └── file-not-found-search.module.ts
│ │ │ │ └── toc/
│ │ │ │ ├── toc.component.ts
│ │ │ │ └── toc.module.ts
│ │ │ ├── documents/
│ │ │ │ ├── document-contents.ts
│ │ │ │ ├── document.service.spec.ts
│ │ │ │ └── document.service.ts
│ │ │ ├── layout/
│ │ │ │ ├── doc-viewer/
│ │ │ │ │ ├── doc-viewer.component.spec.ts
│ │ │ │ │ ├── doc-viewer.component.ts
│ │ │ │ │ └── dt.component.ts
│ │ │ │ ├── footer/
│ │ │ │ │ └── footer.component.ts
│ │ │ │ ├── mode-banner/
│ │ │ │ │ └── mode-banner.component.ts
│ │ │ │ ├── nav-item/
│ │ │ │ │ ├── nav-item.component.spec.ts
│ │ │ │ │ └── nav-item.component.ts
│ │ │ │ ├── nav-menu/
│ │ │ │ │ ├── nav-menu.component.spec.ts
│ │ │ │ │ └── nav-menu.component.ts
│ │ │ │ ├── notification/
│ │ │ │ │ └── notification.component.ts
│ │ │ │ └── top-menu/
│ │ │ │ ├── top-menu.component.spec.ts
│ │ │ │ └── top-menu.component.ts
│ │ │ ├── navigation/
│ │ │ │ ├── navigation.model.ts
│ │ │ │ ├── navigation.service.spec.ts
│ │ │ │ └── navigation.service.ts
│ │ │ ├── search/
│ │ │ │ ├── interfaces.ts
│ │ │ │ ├── search-box/
│ │ │ │ │ ├── search-box.component.spec.ts
│ │ │ │ │ └── search-box.component.ts
│ │ │ │ ├── search.service.ts
│ │ │ │ └── search.worker.ts
│ │ │ ├── shared/
│ │ │ │ ├── attribute-utils.spec.ts
│ │ │ │ ├── attribute-utils.ts
│ │ │ │ ├── copier.service.ts
│ │ │ │ ├── current-date.ts
│ │ │ │ ├── custom-icon-registry.spec.ts
│ │ │ │ ├── custom-icon-registry.ts
│ │ │ │ ├── deployment.service.spec.ts
│ │ │ │ ├── deployment.service.ts
│ │ │ │ ├── ga.service.spec.ts
│ │ │ │ ├── ga.service.ts
│ │ │ │ ├── location.service.spec.ts
│ │ │ │ ├── location.service.ts
│ │ │ │ ├── logger.service.spec.ts
│ │ │ │ ├── logger.service.ts
│ │ │ │ ├── reporting-error-handler.spec.ts
│ │ │ │ ├── reporting-error-handler.ts
│ │ │ │ ├── scroll-spy.service.spec.ts
│ │ │ │ ├── scroll-spy.service.ts
│ │ │ │ ├── scroll.service.spec.ts
│ │ │ │ ├── scroll.service.ts
│ │ │ │ ├── search-results/
│ │ │ │ │ ├── search-results.component.spec.ts
│ │ │ │ │ └── search-results.component.ts
│ │ │ │ ├── select/
│ │ │ │ │ ├── select.component.spec.ts
│ │ │ │ │ └── select.component.ts
│ │ │ │ ├── shared.module.ts
│ │ │ │ ├── stackblitz.service.ts
│ │ │ │ ├── toc.service.spec.ts
│ │ │ │ ├── toc.service.ts
│ │ │ │ ├── web-worker-message.ts
│ │ │ │ ├── web-worker.ts
│ │ │ │ └── window.ts
│ │ │ └── sw-updates/
│ │ │ ├── sw-updates.module.ts
│ │ │ ├── sw-updates.service.spec.ts
│ │ │ └── sw-updates.service.ts
│ │ ├── assets/
│ │ │ ├── .gitkeep
│ │ │ └── js/
│ │ │ ├── devtools-welcome.js
│ │ │ └── prettify.js
│ │ ├── environments/
│ │ │ ├── environment.archive.ts
│ │ │ ├── environment.next.ts
│ │ │ ├── environment.stable.ts
│ │ │ └── environment.ts
│ │ ├── extra-files/
│ │ │ ├── README.md
│ │ │ ├── archive/
│ │ │ │ └── robots.txt
│ │ │ ├── next/
│ │ │ │ └── robots.txt
│ │ │ └── stable/
│ │ │ └── robots.txt
│ │ ├── google385281288605d160.html
│ │ ├── index.html
│ │ ├── karma.conf.js
│ │ ├── main.ts
│ │ ├── noop-worker-basic.js
│ │ ├── polyfills.ts
│ │ ├── pwa-manifest.json
│ │ ├── styles/
│ │ │ ├── 0-base/
│ │ │ │ ├── _base-dir.scss
│ │ │ │ └── _typography.scss
│ │ │ ├── 1-layouts/
│ │ │ │ ├── _api-page.scss
│ │ │ │ ├── _content-layout.scss
│ │ │ │ ├── _doc-viewer.scss
│ │ │ │ ├── _footer.scss
│ │ │ │ ├── _layout-global.scss
│ │ │ │ ├── _layouts-dir.scss
│ │ │ │ ├── _marketing-layout.scss
│ │ │ │ ├── _not-found.scss
│ │ │ │ ├── _print-layout.scss
│ │ │ │ ├── _sidenav.scss
│ │ │ │ ├── _table-of-contents.scss
│ │ │ │ └── _top-menu.scss
│ │ │ ├── 2-modules/
│ │ │ │ ├── _alert.scss
│ │ │ │ ├── _api-list.scss
│ │ │ │ ├── _api-pages.scss
│ │ │ │ ├── _buttons.scss
│ │ │ │ ├── _callout.scss
│ │ │ │ ├── _card.scss
│ │ │ │ ├── _code.scss
│ │ │ │ ├── _contribute.scss
│ │ │ │ ├── _contributor.scss
│ │ │ │ ├── _deploy-theme.scss
│ │ │ │ ├── _details.scss
│ │ │ │ ├── _edit-page-cta.scss
│ │ │ │ ├── _features.scss
│ │ │ │ ├── _filetree.scss
│ │ │ │ ├── _heading-anchors.scss
│ │ │ │ ├── _hr.scss
│ │ │ │ ├── _images.scss
│ │ │ │ ├── _label.scss
│ │ │ │ ├── _modules-dir.scss
│ │ │ │ ├── _notification.scss
│ │ │ │ ├── _presskit.scss
│ │ │ │ ├── _progress-bar.scss
│ │ │ │ ├── _resources.scss
│ │ │ │ ├── _scrollbar.scss
│ │ │ │ ├── _search-results.scss
│ │ │ │ ├── _select-menu.scss
│ │ │ │ ├── _subsection.scss
│ │ │ │ ├── _table.scss
│ │ │ │ └── _toc.scss
│ │ │ ├── _constants.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _typography-theme.scss
│ │ │ ├── main.scss
│ │ │ └── rxjs-theme.scss
│ │ ├── styles.scss
│ │ ├── test.ts
│ │ ├── testing/
│ │ │ ├── doc-viewer-utils.ts
│ │ │ ├── location.service.ts
│ │ │ ├── logger.service.ts
│ │ │ └── search.service.ts
│ │ └── typings.d.ts
│ ├── tests/
│ │ └── e2e/
│ │ ├── protractor.conf.js
│ │ ├── tsconfig.e2e.json
│ │ └── visual-testing.e2e-spec.ts
│ ├── tools/
│ │ ├── README.md
│ │ ├── firebase-test-utils/
│ │ │ ├── FirebaseGlob.spec.ts
│ │ │ ├── FirebaseGlob.ts
│ │ │ ├── FirebaseRedirect.spec.ts
│ │ │ ├── FirebaseRedirect.ts
│ │ │ ├── FirebaseRedirector.spec.ts
│ │ │ └── FirebaseRedirector.ts
│ │ ├── marbles/
│ │ │ ├── diagrams/
│ │ │ │ ├── audit.txt
│ │ │ │ ├── bufferWhen.txt
│ │ │ │ ├── concatAll.txt
│ │ │ │ ├── debounce.txt
│ │ │ │ ├── delay.txt
│ │ │ │ ├── exhaustAll.txt
│ │ │ │ ├── throttle.txt
│ │ │ │ └── windowWhen.txt
│ │ │ ├── scripts/
│ │ │ │ └── index.ts
│ │ │ └── tsconfig.marbles.json
│ │ ├── stackblitz/
│ │ │ └── rxjs.version.js
│ │ └── transforms/
│ │ ├── .eslintignore
│ │ ├── .eslintrc.js
│ │ ├── README.md
│ │ ├── angular-api-package/
│ │ │ ├── index.js
│ │ │ ├── mocks/
│ │ │ │ ├── aliasedExports.ts
│ │ │ │ ├── anotherOperator.ts
│ │ │ │ ├── importedSrc.ts
│ │ │ │ ├── operator.ts
│ │ │ │ └── testSrc.ts
│ │ │ ├── post-processors/
│ │ │ │ └── embedMarbleDiagrams.js
│ │ │ ├── processors/
│ │ │ │ ├── addMetadataAliases.js
│ │ │ │ ├── addMetadataAliases.spec.js
│ │ │ │ ├── checkOperator.js
│ │ │ │ ├── computeApiBreadCrumbs.js
│ │ │ │ ├── computeApiBreadCrumbs.spec.js
│ │ │ │ ├── computeSearchTitle.js
│ │ │ │ ├── computeSearchTitle.spec.js
│ │ │ │ ├── computeStability.js
│ │ │ │ ├── computeStability.spec.js
│ │ │ │ ├── convertPrivateClassesToInterfaces.js
│ │ │ │ ├── extractDecoratedClasses.js
│ │ │ │ ├── extractDecoratedClasses.spec.js
│ │ │ │ ├── filterContainedDocs.js
│ │ │ │ ├── filterPrivateDocs.js
│ │ │ │ ├── filterPrivateDocs.spec.js
│ │ │ │ ├── generateApiListDoc.js
│ │ │ │ ├── generateApiListDoc.spec.js
│ │ │ │ ├── generateDeprecationsListDoc.js
│ │ │ │ ├── markAliases.spec.ts
│ │ │ │ ├── markAliases.ts
│ │ │ │ ├── markBarredODocsAsPrivate.js
│ │ │ │ ├── markBarredODocsAsPrivate.spec.js
│ │ │ │ ├── matchUpDirectiveDecorators.js
│ │ │ │ ├── matchUpDirectiveDecorators.spec.js
│ │ │ │ ├── mergeDecoratorDocs.js
│ │ │ │ ├── mergeDecoratorDocs.spec.js
│ │ │ │ ├── migrateLegacyJSDocTags.js
│ │ │ │ ├── migrateLegacyJSDocTags.spec.js
│ │ │ │ ├── processClassLikeMembers.js
│ │ │ │ ├── processClassLikeMembers.spec.js
│ │ │ │ ├── simplifyMemberAnchors.js
│ │ │ │ ├── simplifyMemberAnchors.spec.js
│ │ │ │ ├── splitDescription.js
│ │ │ │ └── splitDescription.spec.js
│ │ │ └── tag-defs/
│ │ │ ├── deprecated.js
│ │ │ ├── internal.js
│ │ │ └── throws.js
│ │ ├── angular-base-package/
│ │ │ ├── ignore-words.json
│ │ │ ├── index.js
│ │ │ ├── post-processors/
│ │ │ │ ├── add-image-dimensions.js
│ │ │ │ ├── add-image-dimensions.spec.js
│ │ │ │ ├── auto-link-code.js
│ │ │ │ ├── auto-link-code.spec.js
│ │ │ │ ├── autolink-headings.js
│ │ │ │ ├── autolink-headings.spec.js
│ │ │ │ ├── h1-checker.js
│ │ │ │ └── h1-checker.spec.js
│ │ │ ├── processors/
│ │ │ │ ├── checkUnbalancedBackTicks.js
│ │ │ │ ├── checkUnbalancedBackTicks.spec.js
│ │ │ │ ├── convertToJson.js
│ │ │ │ ├── convertToJson.spec.js
│ │ │ │ ├── copyContentAssets.js
│ │ │ │ ├── copyContentAssets.spec.js
│ │ │ │ ├── createSitemap.js
│ │ │ │ ├── createSitemap.spec.js
│ │ │ │ ├── fixInternalDocumentLinks.js
│ │ │ │ ├── fixInternalDocumentLinks.spec.js
│ │ │ │ ├── generateKeywords.js
│ │ │ │ ├── generateKeywords.spec.js
│ │ │ │ ├── renderLinkInfo.js
│ │ │ │ └── renderLinkInfo.spec.js
│ │ │ ├── readers/
│ │ │ │ └── json.js
│ │ │ ├── rendering/
│ │ │ │ ├── filterByPropertyValue.js
│ │ │ │ ├── filterByPropertyValue.spec.js
│ │ │ │ ├── toId.js
│ │ │ │ ├── toId.spec.js
│ │ │ │ ├── trimBlankLines.js
│ │ │ │ ├── trimBlankLines.spec.js
│ │ │ │ ├── truncateCode.js
│ │ │ │ └── truncateCode.spec.js
│ │ │ └── services/
│ │ │ ├── copyFolder.js
│ │ │ ├── filterAmbiguousDirectiveAliases.js
│ │ │ ├── filterAmbiguousDirectiveAliases.spec.js
│ │ │ ├── filterFromInImports.spec.js
│ │ │ ├── filterFromInImports.ts
│ │ │ ├── filterPipes.js
│ │ │ ├── filterPipes.spec.js
│ │ │ └── getImageDimensions.js
│ │ ├── angular-content-package/
│ │ │ ├── index.js
│ │ │ └── inline-tag-defs/
│ │ │ └── anchor.js
│ │ ├── angular.io-package/
│ │ │ ├── index.js
│ │ │ └── processors/
│ │ │ ├── cleanGeneratedFiles.js
│ │ │ ├── createOverviewDump.js
│ │ │ └── processNavigationMap.js
│ │ ├── authors-package/
│ │ │ ├── api-package.js
│ │ │ ├── guide-package.js
│ │ │ ├── index.js
│ │ │ ├── index.spec.js
│ │ │ ├── marketing-package.js
│ │ │ ├── tutorial-package.js
│ │ │ └── watchr.js
│ │ ├── config.js
│ │ ├── content-package/
│ │ │ ├── index.js
│ │ │ ├── readers/
│ │ │ │ ├── content.js
│ │ │ │ └── content.spec.js
│ │ │ └── tag-defs/
│ │ │ ├── intro.js
│ │ │ └── title.js
│ │ ├── helpers/
│ │ │ ├── test-package.js
│ │ │ ├── utils.js
│ │ │ └── utils.spec.js
│ │ ├── links-package/
│ │ │ ├── index.js
│ │ │ ├── inline-tag-defs/
│ │ │ │ ├── link.js
│ │ │ │ └── link.spec.js
│ │ │ └── services/
│ │ │ ├── disambiguators/
│ │ │ │ ├── disambiguateByDeprecated.js
│ │ │ │ ├── disambiguateByDeprecated.spec.js
│ │ │ │ ├── disambiguateByModule.js
│ │ │ │ ├── disambiguateByModule.spec.js
│ │ │ │ ├── disambiguateByNonMember.js
│ │ │ │ ├── disambiguateByNonMember.spec.js
│ │ │ │ ├── disambiguateByNonOperator.js
│ │ │ │ └── disambiguateByNonOperator.spec.js
│ │ │ ├── getAliases.js
│ │ │ ├── getAliases.spec.js
│ │ │ ├── getDocFromAlias.js
│ │ │ ├── getDocFromAlias.spec.js
│ │ │ ├── getLinkInfo.js
│ │ │ └── getLinkInfo.spec.js
│ │ ├── remark-package/
│ │ │ ├── index.js
│ │ │ └── services/
│ │ │ ├── handlers/
│ │ │ │ └── code.js
│ │ │ ├── markedNunjucksFilter.js
│ │ │ ├── plugins/
│ │ │ │ └── mapHeadings.js
│ │ │ ├── renderMarkdown.js
│ │ │ └── renderMarkdown.spec.js
│ │ ├── rxjs-decision-tree-generator/
│ │ │ ├── README.md
│ │ │ ├── index.ts
│ │ │ └── src/
│ │ │ └── lib/
│ │ │ ├── addUniqueId.spec.ts
│ │ │ ├── addUniqueId.ts
│ │ │ ├── build.spec.ts
│ │ │ ├── build.ts
│ │ │ ├── decisionTreeReducer.spec.ts
│ │ │ ├── decisionTreeReducer.ts
│ │ │ ├── extractInitialSequence.spec.ts
│ │ │ ├── extractInitialSequence.ts
│ │ │ ├── fixtures.ts
│ │ │ ├── flattenApiList.spec.ts
│ │ │ ├── flattenApiList.ts
│ │ │ ├── generateUniqueId.spec.ts
│ │ │ ├── generateUniqueId.ts
│ │ │ ├── helpers.spec.ts
│ │ │ ├── helpers.ts
│ │ │ ├── index.ts
│ │ │ └── interfaces.ts
│ │ ├── templates/
│ │ │ ├── README.md
│ │ │ ├── api/
│ │ │ │ ├── base.template.html
│ │ │ │ ├── class.template.html
│ │ │ │ ├── const.template.html
│ │ │ │ ├── decorator.template.html
│ │ │ │ ├── deprecation.template.html
│ │ │ │ ├── directive.template.html
│ │ │ │ ├── enum.template.html
│ │ │ │ ├── export-base.template.html
│ │ │ │ ├── function.template.html
│ │ │ │ ├── includes/
│ │ │ │ │ ├── annotations.html
│ │ │ │ │ ├── class-overview.html
│ │ │ │ │ ├── decorator-overview.html
│ │ │ │ │ ├── deprecation.html
│ │ │ │ │ ├── description.html
│ │ │ │ │ ├── directive-overview.html
│ │ │ │ │ ├── export-as.html
│ │ │ │ │ ├── info-bar.html
│ │ │ │ │ ├── interface-overview.html
│ │ │ │ │ ├── metadata.html
│ │ │ │ │ ├── pipe-overview.html
│ │ │ │ │ ├── renamed-exports.html
│ │ │ │ │ ├── security-notes.html
│ │ │ │ │ ├── see-also.html
│ │ │ │ │ ├── selectors.html
│ │ │ │ │ └── usageNotes.html
│ │ │ │ ├── interface.template.html
│ │ │ │ ├── let.template.html
│ │ │ │ ├── lib/
│ │ │ │ │ ├── descendants.html
│ │ │ │ │ ├── directiveHelpers.html
│ │ │ │ │ ├── githubLinks.html
│ │ │ │ │ ├── memberHelpers.html
│ │ │ │ │ └── paramList.html
│ │ │ │ ├── module.template.html
│ │ │ │ ├── pipe.template.html
│ │ │ │ ├── type-alias.template.html
│ │ │ │ ├── value-module.template.html
│ │ │ │ └── var.template.html
│ │ │ ├── content.template.html
│ │ │ ├── data-module.template.js
│ │ │ ├── example-region.template.html
│ │ │ ├── json-doc.template.json
│ │ │ ├── overview-dump.template.html
│ │ │ └── sitemap.template.xml
│ │ └── test.js
│ ├── tsconfig.app.json
│ ├── tsconfig.docs.json
│ ├── tsconfig.json
│ ├── tsconfig.spec.json
│ └── tsconfig.worker.json
├── nx.json
├── package.json
├── packages/
│ ├── observable/
│ │ ├── .eslintrc.json
│ │ ├── .tshy/
│ │ │ ├── browser.json
│ │ │ ├── build.json
│ │ │ ├── commonjs.json
│ │ │ ├── esm.json
│ │ │ └── webpack.json
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── index.ts
│ │ │ ├── observable.spec.ts
│ │ │ ├── observable.ts
│ │ │ └── types.ts
│ │ └── tsconfig.json
│ └── rxjs/
│ ├── .dependency-cruiser.json
│ ├── .dockerignore
│ ├── .eslintrc.json
│ ├── .gitattributes
│ ├── CHANGELOG.md
│ ├── Dockerfile
│ ├── README.md
│ ├── integration/
│ │ └── import/
│ │ ├── fixtures/
│ │ │ ├── browser/
│ │ │ │ ├── browser-test.js
│ │ │ │ ├── index.html
│ │ │ │ ├── index.mjs
│ │ │ │ └── package.json
│ │ │ ├── commonjs/
│ │ │ │ ├── index.js
│ │ │ │ └── package.json
│ │ │ ├── esm/
│ │ │ │ ├── index.mjs
│ │ │ │ └── package.json
│ │ │ ├── vite-bundle/
│ │ │ │ ├── .gitignore
│ │ │ │ ├── index.html
│ │ │ │ ├── package.json
│ │ │ │ ├── src/
│ │ │ │ │ ├── main.ts
│ │ │ │ │ └── vite-env.d.ts
│ │ │ │ ├── test.mjs
│ │ │ │ └── tsconfig.json
│ │ │ └── webpack-bundle/
│ │ │ ├── index.html
│ │ │ ├── package.json
│ │ │ ├── src/
│ │ │ │ └── main.ts
│ │ │ ├── test.js
│ │ │ ├── tsconfig.json
│ │ │ └── webpack.config.js
│ │ └── runner.js
│ ├── package.json
│ ├── spec/
│ │ ├── Observable-spec.ts
│ │ ├── Scheduler-spec.ts
│ │ ├── Subject-spec.ts
│ │ ├── Subscriber-spec.ts
│ │ ├── Subscription-spec.ts
│ │ ├── ajax/
│ │ │ └── index-spec.ts
│ │ ├── config-spec.ts
│ │ ├── exports-spec.ts.disabled
│ │ ├── firstValueFrom-spec.ts
│ │ ├── helpers/
│ │ │ ├── interop-helper-spec.ts
│ │ │ ├── interop-helper.ts
│ │ │ ├── marble-testing.ts
│ │ │ ├── observableMatcher.ts
│ │ │ ├── setup.ts
│ │ │ ├── subscription.ts
│ │ │ └── test-helper.ts
│ │ ├── index-spec.ts
│ │ ├── lastValueFrom-spec.ts
│ │ ├── module-test-spec.mjs
│ │ ├── observables/
│ │ │ ├── bindCallback-spec.ts
│ │ │ ├── bindNodeCallback-spec.ts
│ │ │ ├── combineLatest-spec.ts
│ │ │ ├── concat-spec.ts
│ │ │ ├── connectable-spec.ts
│ │ │ ├── defer-spec.ts
│ │ │ ├── dom/
│ │ │ │ ├── ajax-spec.ts
│ │ │ │ ├── animationFrames-spec.ts
│ │ │ │ ├── fetch-spec.ts
│ │ │ │ └── webSocket-spec.ts
│ │ │ ├── empty-spec.ts
│ │ │ ├── forkJoin-spec.ts
│ │ │ ├── from-promise-spec.ts
│ │ │ ├── from-spec.ts
│ │ │ ├── fromEvent-spec.ts
│ │ │ ├── fromEventPattern-spec.ts
│ │ │ ├── generate-spec.ts
│ │ │ ├── if-spec.ts
│ │ │ ├── interval-spec.ts
│ │ │ ├── merge-spec.ts
│ │ │ ├── never-spec.ts
│ │ │ ├── of-spec.ts
│ │ │ ├── onErrorResumeNext-spec.ts
│ │ │ ├── partition-spec.ts
│ │ │ ├── race-spec.ts
│ │ │ ├── range-spec.ts
│ │ │ ├── throwError-spec.ts
│ │ │ ├── timer-spec.ts
│ │ │ ├── using-spec.ts
│ │ │ └── zip-spec.ts
│ │ ├── operators/
│ │ │ ├── audit-spec.ts
│ │ │ ├── auditTime-spec.ts
│ │ │ ├── buffer-spec.ts
│ │ │ ├── bufferCount-spec.ts
│ │ │ ├── bufferTime-spec.ts
│ │ │ ├── bufferToggle-spec.ts
│ │ │ ├── bufferWhen-spec.ts
│ │ │ ├── catchError-spec.ts
│ │ │ ├── combineLatestAll-spec.ts
│ │ │ ├── combineLatestWith-spec.ts
│ │ │ ├── concatAll-spec.ts
│ │ │ ├── concatMap-spec.ts
│ │ │ ├── concatMapTo-spec.ts
│ │ │ ├── concatWith-spec.ts
│ │ │ ├── connect-spec.ts
│ │ │ ├── count-spec.ts
│ │ │ ├── debounce-spec.ts
│ │ │ ├── debounceTime-spec.ts
│ │ │ ├── defaultIfEmpty-spec.ts
│ │ │ ├── delay-spec.ts
│ │ │ ├── delayWhen-spec.ts
│ │ │ ├── dematerialize-spec.ts
│ │ │ ├── distinct-spec.ts
│ │ │ ├── distinctUntilChanged-spec.ts
│ │ │ ├── distinctUntilKeyChanged-spec.ts
│ │ │ ├── elementAt-spec.ts
│ │ │ ├── endWith-spec.ts
│ │ │ ├── every-spec.ts
│ │ │ ├── exhaustAll-spec.ts
│ │ │ ├── exhaustMap-spec.ts
│ │ │ ├── expand-spec.ts
│ │ │ ├── filter-spec.ts
│ │ │ ├── finalize-spec.ts
│ │ │ ├── find-spec.ts
│ │ │ ├── findIndex-spec.ts
│ │ │ ├── first-spec.ts
│ │ │ ├── groupBy-spec.ts
│ │ │ ├── ignoreElements-spec.ts
│ │ │ ├── index-spec.ts
│ │ │ ├── isEmpty-spec.ts
│ │ │ ├── last-spec.ts
│ │ │ ├── map-spec.ts
│ │ │ ├── mapTo-spec.ts
│ │ │ ├── materialize-spec.ts
│ │ │ ├── max-spec.ts
│ │ │ ├── mergeAll-spec.ts
│ │ │ ├── mergeMap-spec.ts
│ │ │ ├── mergeMapTo-spec.ts
│ │ │ ├── mergeScan-spec.ts
│ │ │ ├── mergeWith-spec.ts
│ │ │ ├── min-spec.ts
│ │ │ ├── observeOn-spec.ts
│ │ │ ├── onErrorResumeNext-spec.ts
│ │ │ ├── pairwise-spec.ts
│ │ │ ├── raceWith-spec.ts
│ │ │ ├── reduce-spec.ts
│ │ │ ├── repeat-spec.ts
│ │ │ ├── repeatWhen-spec.ts
│ │ │ ├── retry-spec.ts
│ │ │ ├── retryWhen-spec.ts
│ │ │ ├── sample-spec.ts
│ │ │ ├── sampleTime-spec.ts
│ │ │ ├── scan-spec.ts
│ │ │ ├── sequenceEqual-spec.ts
│ │ │ ├── share-spec.ts
│ │ │ ├── shareReplay-spec.ts
│ │ │ ├── single-spec.ts
│ │ │ ├── skip-spec.ts
│ │ │ ├── skipLast-spec.ts
│ │ │ ├── skipUntil-spec.ts
│ │ │ ├── skipWhile-spec.ts
│ │ │ ├── startWith-spec.ts
│ │ │ ├── subscribeOn-spec.ts
│ │ │ ├── switchAll-spec.ts
│ │ │ ├── switchMap-spec.ts
│ │ │ ├── switchMapTo-spec.ts
│ │ │ ├── switchScan-spec.ts
│ │ │ ├── take-spec.ts
│ │ │ ├── takeLast-spec.ts
│ │ │ ├── takeUntil-spec.ts
│ │ │ ├── takeWhile-spec.ts
│ │ │ ├── tap-spec.ts
│ │ │ ├── throttle-spec.ts
│ │ │ ├── throttleTime-spec.ts
│ │ │ ├── throwIfEmpty-spec.ts
│ │ │ ├── timeInterval-spec.ts
│ │ │ ├── timeout-spec.ts
│ │ │ ├── timeoutWith-spec.ts
│ │ │ ├── timestamp-spec.ts
│ │ │ ├── toArray-spec.ts
│ │ │ ├── window-spec.ts
│ │ │ ├── windowCount-spec.ts
│ │ │ ├── windowTime-spec.ts
│ │ │ ├── windowToggle-spec.ts
│ │ │ ├── windowWhen-spec.ts
│ │ │ ├── withLatestFrom-spec.ts
│ │ │ ├── zipAll-spec.ts
│ │ │ └── zipWith-spec.ts
│ │ ├── scheduled/
│ │ │ └── scheduled-spec.ts
│ │ ├── schedulers/
│ │ │ ├── AnimationFrameScheduler-spec.ts
│ │ │ ├── AsapScheduler-spec.ts
│ │ │ ├── QueueScheduler-spec.ts
│ │ │ ├── TestScheduler-spec.ts
│ │ │ ├── VirtualTimeScheduler-spec.ts
│ │ │ ├── animationFrameProvider-spec.ts
│ │ │ ├── dateTimestampProvider-spec.ts
│ │ │ ├── intervalProvider-spec.ts
│ │ │ └── timeoutProvider-spec.ts
│ │ ├── subjects/
│ │ │ ├── AsyncSubject-spec.ts
│ │ │ ├── BehaviorSubject-spec.ts
│ │ │ └── ReplaySubject-spec.ts
│ │ ├── support/
│ │ │ ├── .mocharc.js
│ │ │ ├── mocha-browser-runner.html
│ │ │ ├── mocha.sauce.gruntfile.js
│ │ │ └── mocha.sauce.runner.js
│ │ ├── testing/
│ │ │ └── index-spec.ts
│ │ ├── tsconfig.json
│ │ ├── util/
│ │ │ ├── ArgumentOutOfRangeError-spec.ts
│ │ │ ├── EmptyError-spec.ts
│ │ │ ├── Immediate-spec.ts
│ │ │ ├── TimeoutError-spec.ts
│ │ │ ├── UnsubscriptionError-spec.ts
│ │ │ ├── isObservable-spec.ts
│ │ │ ├── isPromise-spec.ts
│ │ │ ├── pipe-spec.ts
│ │ │ └── rx-spec.ts
│ │ └── websocket/
│ │ └── index-spec.ts
│ ├── spec-dtslint/
│ │ ├── AsyncSubject-spec.ts
│ │ ├── BehaviorSubject-spec.ts
│ │ ├── Observable-spec.ts
│ │ ├── ReplaySubject-spec.ts
│ │ ├── Subject-spec.ts
│ │ ├── Subscriber-spec.ts
│ │ ├── errors-spec.ts
│ │ ├── firstValueFrom-spec.ts
│ │ ├── helpers.ts
│ │ ├── index.d.ts
│ │ ├── lastValueFrom-spec.ts
│ │ ├── observables/
│ │ │ ├── bindCallback-spec.ts
│ │ │ ├── combineLatest-spec.ts
│ │ │ ├── concat-spec.ts
│ │ │ ├── defer-spec.ts
│ │ │ ├── dom/
│ │ │ │ ├── ajax-spec.ts
│ │ │ │ ├── animationFrames-spec.ts
│ │ │ │ └── fetch-spec.ts
│ │ │ ├── empty-spec.ts
│ │ │ ├── forkJoin-spec.ts
│ │ │ ├── from-spec.ts
│ │ │ ├── fromEvent-spec.ts
│ │ │ ├── iif-spec.ts
│ │ │ ├── interval-spec.ts
│ │ │ ├── never-spec.ts
│ │ │ ├── of-spec.ts
│ │ │ ├── onErrorResumeNext-spec.ts
│ │ │ ├── partition-spec.ts
│ │ │ ├── race-spec.ts
│ │ │ ├── range-spec.ts
│ │ │ ├── throwError-spec.ts
│ │ │ ├── timer-spec.ts
│ │ │ ├── using-spec.ts
│ │ │ └── zip-spec.ts
│ │ ├── operators/
│ │ │ ├── audit-spec.ts
│ │ │ ├── auditTime-spec.ts
│ │ │ ├── buffer-spec.ts
│ │ │ ├── bufferCount-spec.ts
│ │ │ ├── bufferTime-spec.ts
│ │ │ ├── bufferToggle-spec.ts
│ │ │ ├── bufferWhen-spec.ts
│ │ │ ├── catchError-spec.ts
│ │ │ ├── combineLatestAll-spec.ts
│ │ │ ├── combineLatestWith-spec.ts
│ │ │ ├── concatAll-spec.ts
│ │ │ ├── concatMap-spec.ts
│ │ │ ├── concatMapTo-spec.ts
│ │ │ ├── concatWith-spec.ts
│ │ │ ├── connect-spec.ts
│ │ │ ├── count-spec.ts
│ │ │ ├── debounce-spec.ts
│ │ │ ├── debounceTime-spec.ts
│ │ │ ├── defaultIfEmpty-spec.ts
│ │ │ ├── delay-spec.ts
│ │ │ ├── delayWhen-spec.ts
│ │ │ ├── dematerialize-spec.ts
│ │ │ ├── distinct-spec.ts
│ │ │ ├── distinctUntilChanged-spec.ts
│ │ │ ├── distinctUntilKeyChanged-spec.ts
│ │ │ ├── elementAt-spec.ts
│ │ │ ├── endWith-spec.ts
│ │ │ ├── every-spec.ts
│ │ │ ├── exhaustAll-spec.ts
│ │ │ ├── exhaustMap-spec.ts
│ │ │ ├── expand-spec.ts
│ │ │ ├── filter-spec.ts
│ │ │ ├── finalize-spec.ts
│ │ │ ├── find-spec.ts
│ │ │ ├── findIndex-spec.ts
│ │ │ ├── first-spec.ts
│ │ │ ├── groupBy-spec.ts
│ │ │ ├── ignoreElements-spec.ts
│ │ │ ├── isEmpty-spec.ts
│ │ │ ├── last-spec.ts
│ │ │ ├── map-spec.ts
│ │ │ ├── mapTo-spec.ts
│ │ │ ├── materialize-spec.ts
│ │ │ ├── max-spec.ts
│ │ │ ├── mergeAll-spec.ts
│ │ │ ├── mergeMap-spec.ts
│ │ │ ├── mergeMapTo-spec.ts
│ │ │ ├── mergeScan-spec.ts
│ │ │ ├── mergeWith-spec.ts
│ │ │ ├── min-spec.ts
│ │ │ ├── observeOn-spec.ts
│ │ │ ├── onErrorResumeNextWith-spec.ts
│ │ │ ├── pairwise-spec.ts
│ │ │ ├── raceWith-spec.ts
│ │ │ ├── reduce-spec.ts
│ │ │ ├── repeat-spec.ts
│ │ │ ├── repeatWhen-spec.ts
│ │ │ ├── retry-spec.ts
│ │ │ ├── retryWhen-spec.ts
│ │ │ ├── sample-spec.ts
│ │ │ ├── sampleTime-spec.ts
│ │ │ ├── scan-spec.ts
│ │ │ ├── sequenceEqual-spec.ts
│ │ │ ├── share-spec.ts
│ │ │ ├── shareReplay-spec.ts
│ │ │ ├── single-spec.ts
│ │ │ ├── skip-spec.ts
│ │ │ ├── skipLast-spec.ts
│ │ │ ├── skipUntil-spec.ts
│ │ │ ├── skipWhile-spec.ts
│ │ │ ├── startWith-spec.ts
│ │ │ ├── subscribeOn-spec.ts
│ │ │ ├── switchAll-spec.ts
│ │ │ ├── switchMap-spec.ts
│ │ │ ├── switchMapTo-spec.ts
│ │ │ ├── switchScan-spec.ts
│ │ │ ├── take-spec.ts
│ │ │ ├── takeLast-spec.ts
│ │ │ ├── takeUntil-spec.ts
│ │ │ ├── takeWhile-spec.ts
│ │ │ ├── tap-spec.ts
│ │ │ ├── throttle-spec.ts
│ │ │ ├── throttleTime-spec.ts
│ │ │ ├── throwIfEmpty-spec.ts
│ │ │ ├── timeInterval-spec.ts
│ │ │ ├── timeout-spec.ts
│ │ │ ├── timeoutWith-spec.ts
│ │ │ ├── timestamp-spec.ts
│ │ │ ├── toArray-spec.ts
│ │ │ ├── window-spec.ts
│ │ │ ├── windowCount-spec.ts
│ │ │ ├── windowTime-spec.ts
│ │ │ ├── windowToggle-spec.ts
│ │ │ ├── windowWhen-spec.ts
│ │ │ ├── withLatestFrom-spec.ts
│ │ │ ├── zipAll-spec.ts
│ │ │ └── zipWith-spec.ts
│ │ ├── tsconfig.json
│ │ ├── types-spec.ts
│ │ └── util/
│ │ ├── pipe-spec.ts
│ │ └── rx-spec.ts
│ ├── src/
│ │ ├── Rx.global.js
│ │ ├── ajax/
│ │ │ └── index.ts
│ │ ├── fetch/
│ │ │ └── index.ts
│ │ ├── index.ts
│ │ ├── internal/
│ │ │ ├── AnyCatcher.ts
│ │ │ ├── AsyncSubject.ts
│ │ │ ├── BehaviorSubject.ts
│ │ │ ├── Notification.ts
│ │ │ ├── Operator.ts
│ │ │ ├── ReplaySubject.ts
│ │ │ ├── Scheduler.ts
│ │ │ ├── Subject.ts
│ │ │ ├── ajax/
│ │ │ │ ├── AjaxResponse.ts
│ │ │ │ ├── ajax.ts
│ │ │ │ ├── errors.ts
│ │ │ │ └── types.ts
│ │ │ ├── firstValueFrom.ts
│ │ │ ├── lastValueFrom.ts
│ │ │ ├── observable/
│ │ │ │ ├── bindCallback.ts
│ │ │ │ ├── bindCallbackInternals.ts
│ │ │ │ ├── bindNodeCallback.ts
│ │ │ │ ├── combineLatest.ts
│ │ │ │ ├── concat.ts
│ │ │ │ ├── connectable.ts
│ │ │ │ ├── defer.ts
│ │ │ │ ├── dom/
│ │ │ │ │ ├── WebSocketSubject.ts
│ │ │ │ │ ├── animationFrames.ts
│ │ │ │ │ ├── fetch.ts
│ │ │ │ │ └── webSocket.ts
│ │ │ │ ├── empty.ts
│ │ │ │ ├── forkJoin.ts
│ │ │ │ ├── fromEvent.ts
│ │ │ │ ├── fromEventPattern.ts
│ │ │ │ ├── fromSubscribable.ts
│ │ │ │ ├── generate.ts
│ │ │ │ ├── iif.ts
│ │ │ │ ├── interval.ts
│ │ │ │ ├── merge.ts
│ │ │ │ ├── never.ts
│ │ │ │ ├── of.ts
│ │ │ │ ├── onErrorResumeNext.ts
│ │ │ │ ├── partition.ts
│ │ │ │ ├── race.ts
│ │ │ │ ├── range.ts
│ │ │ │ ├── throwError.ts
│ │ │ │ ├── timer.ts
│ │ │ │ ├── using.ts
│ │ │ │ └── zip.ts
│ │ │ ├── operators/
│ │ │ │ ├── audit.ts
│ │ │ │ ├── auditTime.ts
│ │ │ │ ├── buffer.ts
│ │ │ │ ├── bufferCount.ts
│ │ │ │ ├── bufferTime.ts
│ │ │ │ ├── bufferToggle.ts
│ │ │ │ ├── bufferWhen.ts
│ │ │ │ ├── catchError.ts
│ │ │ │ ├── combineLatestAll.ts
│ │ │ │ ├── combineLatestWith.ts
│ │ │ │ ├── concatAll.ts
│ │ │ │ ├── concatMap.ts
│ │ │ │ ├── concatMapTo.ts
│ │ │ │ ├── concatWith.ts
│ │ │ │ ├── connect.ts
│ │ │ │ ├── count.ts
│ │ │ │ ├── debounce.ts
│ │ │ │ ├── debounceTime.ts
│ │ │ │ ├── defaultIfEmpty.ts
│ │ │ │ ├── delay.ts
│ │ │ │ ├── delayWhen.ts
│ │ │ │ ├── dematerialize.ts
│ │ │ │ ├── distinct.ts
│ │ │ │ ├── distinctUntilChanged.ts
│ │ │ │ ├── distinctUntilKeyChanged.ts
│ │ │ │ ├── elementAt.ts
│ │ │ │ ├── endWith.ts
│ │ │ │ ├── every.ts
│ │ │ │ ├── exhaustAll.ts
│ │ │ │ ├── exhaustMap.ts
│ │ │ │ ├── expand.ts
│ │ │ │ ├── filter.ts
│ │ │ │ ├── finalize.ts
│ │ │ │ ├── find.ts
│ │ │ │ ├── findIndex.ts
│ │ │ │ ├── first.ts
│ │ │ │ ├── groupBy.ts
│ │ │ │ ├── ignoreElements.ts
│ │ │ │ ├── isEmpty.ts
│ │ │ │ ├── joinAllInternals.ts
│ │ │ │ ├── last.ts
│ │ │ │ ├── map.ts
│ │ │ │ ├── mapTo.ts
│ │ │ │ ├── materialize.ts
│ │ │ │ ├── max.ts
│ │ │ │ ├── mergeAll.ts
│ │ │ │ ├── mergeInternals.ts
│ │ │ │ ├── mergeMap.ts
│ │ │ │ ├── mergeMapTo.ts
│ │ │ │ ├── mergeScan.ts
│ │ │ │ ├── mergeWith.ts
│ │ │ │ ├── min.ts
│ │ │ │ ├── observeOn.ts
│ │ │ │ ├── onErrorResumeNextWith.ts
│ │ │ │ ├── pairwise.ts
│ │ │ │ ├── partition.ts
│ │ │ │ ├── raceWith.ts
│ │ │ │ ├── reduce.ts
│ │ │ │ ├── repeat.ts
│ │ │ │ ├── repeatWhen.ts
│ │ │ │ ├── retry.ts
│ │ │ │ ├── retryWhen.ts
│ │ │ │ ├── sample.ts
│ │ │ │ ├── sampleTime.ts
│ │ │ │ ├── scan.ts
│ │ │ │ ├── scanInternals.ts
│ │ │ │ ├── sequenceEqual.ts
│ │ │ │ ├── share.ts
│ │ │ │ ├── shareReplay.ts
│ │ │ │ ├── single.ts
│ │ │ │ ├── skip.ts
│ │ │ │ ├── skipLast.ts
│ │ │ │ ├── skipUntil.ts
│ │ │ │ ├── skipWhile.ts
│ │ │ │ ├── startWith.ts
│ │ │ │ ├── subscribeOn.ts
│ │ │ │ ├── switchAll.ts
│ │ │ │ ├── switchMap.ts
│ │ │ │ ├── switchMapTo.ts
│ │ │ │ ├── switchScan.ts
│ │ │ │ ├── take.ts
│ │ │ │ ├── takeLast.ts
│ │ │ │ ├── takeUntil.ts
│ │ │ │ ├── takeWhile.ts
│ │ │ │ ├── tap.ts
│ │ │ │ ├── throttle.ts
│ │ │ │ ├── throttleTime.ts
│ │ │ │ ├── throwIfEmpty.ts
│ │ │ │ ├── timeInterval.ts
│ │ │ │ ├── timeout.ts
│ │ │ │ ├── timeoutWith.ts
│ │ │ │ ├── timestamp.ts
│ │ │ │ ├── toArray.ts
│ │ │ │ ├── window.ts
│ │ │ │ ├── windowCount.ts
│ │ │ │ ├── windowTime.ts
│ │ │ │ ├── windowToggle.ts
│ │ │ │ ├── windowWhen.ts
│ │ │ │ ├── withLatestFrom.ts
│ │ │ │ ├── zipAll.ts
│ │ │ │ └── zipWith.ts
│ │ │ ├── scheduled/
│ │ │ │ ├── scheduleArray.ts
│ │ │ │ ├── scheduleAsyncIterable.ts
│ │ │ │ ├── scheduleIterable.ts
│ │ │ │ ├── scheduleObservable.ts
│ │ │ │ ├── schedulePromise.ts
│ │ │ │ ├── scheduleReadableStreamLike.ts
│ │ │ │ └── scheduled.ts
│ │ │ ├── scheduler/
│ │ │ │ ├── Action.ts
│ │ │ │ ├── AnimationFrameAction.ts
│ │ │ │ ├── AnimationFrameScheduler.ts
│ │ │ │ ├── AsapAction.ts
│ │ │ │ ├── AsapScheduler.ts
│ │ │ │ ├── AsyncAction.ts
│ │ │ │ ├── AsyncScheduler.ts
│ │ │ │ ├── QueueAction.ts
│ │ │ │ ├── QueueScheduler.ts
│ │ │ │ ├── VirtualTimeScheduler.ts
│ │ │ │ ├── animationFrame.ts
│ │ │ │ ├── animationFrameProvider.ts
│ │ │ │ ├── asap.ts
│ │ │ │ ├── async.ts
│ │ │ │ ├── dateTimestampProvider.ts
│ │ │ │ ├── immediateProvider.ts
│ │ │ │ ├── intervalProvider.ts
│ │ │ │ ├── performanceTimestampProvider.ts
│ │ │ │ ├── queue.ts
│ │ │ │ ├── timeoutProvider.ts
│ │ │ │ └── timerHandle.ts
│ │ │ ├── symbol/
│ │ │ │ └── iterator.ts
│ │ │ ├── testing/
│ │ │ │ ├── ColdObservable.ts
│ │ │ │ ├── HotObservable.ts
│ │ │ │ ├── TestMessage.ts
│ │ │ │ ├── TestScheduler.ts
│ │ │ │ └── subscription-logging.ts
│ │ │ ├── types.ts
│ │ │ └── util/
│ │ │ ├── ArgumentOutOfRangeError.ts
│ │ │ ├── EmptyError.ts
│ │ │ ├── Immediate.ts
│ │ │ ├── NotFoundError.ts
│ │ │ ├── SequenceError.ts
│ │ │ ├── args.ts
│ │ │ ├── argsArgArrayOrObject.ts
│ │ │ ├── argsOrArgArray.ts
│ │ │ ├── arrRemove.ts
│ │ │ ├── createObject.ts
│ │ │ ├── executeSchedule.ts
│ │ │ ├── identity.ts
│ │ │ ├── isDate.ts
│ │ │ ├── isScheduler.ts
│ │ │ ├── mapOneOrManyArgs.ts
│ │ │ ├── noop.ts
│ │ │ ├── not.ts
│ │ │ ├── pipe.ts
│ │ │ ├── rx.ts
│ │ │ ├── throwUnobservableError.ts
│ │ │ └── workarounds.ts
│ │ ├── operators/
│ │ │ └── index.ts
│ │ ├── testing/
│ │ │ └── index.ts
│ │ ├── tsconfig.base.json
│ │ ├── tsconfig.cjs.json
│ │ ├── tsconfig.cjs.spec.json
│ │ ├── tsconfig.esm.json
│ │ ├── tsconfig.types.json
│ │ ├── tsconfig.types.spec.json
│ │ └── webSocket/
│ │ └── index.ts
│ ├── tools/
│ │ ├── add-license-to-file.js
│ │ ├── generate-alias.js
│ │ └── subject-benchmark.js
│ ├── tsconfig.json
│ ├── tsconfig.mocha.json
│ └── wallaby.js
├── resources/
│ └── CI-CD/
│ └── README.md
└── scripts/
├── copy-common-package-files.js
├── publish.js
└── release.js
SYMBOL INDEX (1640 symbols across 460 files)
FILE: apps/rxjs.dev/scripts/test-pwa-score.js
constant CHROME_LAUNCH_OPTS (line 20) | const CHROME_LAUNCH_OPTS = {};
constant SKIPPED_HTTPS_AUDITS (line 21) | const SKIPPED_HTTPS_AUDITS = ['redirects-http'];
constant VIEWER_URL (line 22) | const VIEWER_URL = 'https://googlechrome.github.io/lighthouse/viewer/';
function _main (line 35) | function _main(args) {
function evaluateScore (line 51) | function evaluateScore(expectedScore, actualScore) {
function launchChromeAndRunLighthouse (line 61) | function launchChromeAndRunLighthouse(url, flags, config) {
function onError (line 70) | function onError(err) {
function parseInput (line 75) | function parseInput(args) {
function processResults (line 89) | function processResults(results, logFile) {
function skipHttpsAudits (line 106) | function skipHttpsAudits(config) {
FILE: apps/rxjs.dev/src/app/app.component.ts
class AppComponent (line 111) | class AppComponent implements OnInit {
method isOpened (line 165) | get isOpened() {
method mode (line 168) | get mode() {
method constructor (line 187) | constructor(
method ngOnInit (line 199) | ngOnInit() {
method onDocReady (line 272) | onDocReady() {
method onDocRemoved (line 283) | onDocRemoved() {
method onDocInserted (line 287) | onDocInserted() {
method onDocRendered (line 298) | onDocRendered() {
method onDocVersionChange (line 318) | onDocVersionChange(versionIndex: number) {
method onResize (line 326) | onResize(width: number) {
method onClick (line 340) | onClick(eventTarget: HTMLElement, button: number, ctrlKey: boolean, me...
method setPageId (line 365) | setPageId(id: string) {
method setFolderId (line 370) | setFolderId(id: string) {
method notificationDismissed (line 375) | notificationDismissed() {
method updateHostClasses (line 384) | updateHostClasses() {
method updateShell (line 398) | updateShell() {
method updateSideNav (line 408) | updateSideNav() {
method onScroll (line 425) | onScroll() {
method restrainScrolling (line 441) | restrainScrolling(evt: WheelEvent) {
method hideSearchResults (line 461) | hideSearchResults() {
method focusSearchBox (line 469) | focusSearchBox() {
method doSearch (line 475) | doSearch(query: string) {
method onKeyUp (line 481) | onKeyUp(key: string, keyCode: number) {
FILE: apps/rxjs.dev/src/app/app.module.ts
class AppModule (line 157) | class AppModule { }
FILE: apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.spec.ts
function changeDays (line 113) | function changeDays(initial: Date, days: number) {
FILE: apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.ts
type Announcement (line 8) | interface Announcement {
class AnnouncementBarComponent (line 56) | class AnnouncementBarComponent implements OnInit {
method constructor (line 59) | constructor(private http: HttpClient, private logger: Logger) {}
method ngOnInit (line 61) | ngOnInit() {
method findCurrentAnnouncement (line 80) | private findCurrentAnnouncement(announcements: Announcement[]) {
FILE: apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.module.ts
class AnnouncementBarModule (line 12) | class AnnouncementBarModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/api/api-list.component.spec.ts
function expectFilteredResult (line 38) | function expectFilteredResult(label: string, itemTest: (item: ApiItem) =...
function expectOneItem (line 114) | function expectOneItem(name: string, section: string, type: string, stab...
class TestLocationService (line 209) | class TestLocationService {
method search (line 212) | search() { return this.query; }
class TestApiService (line 215) | class TestApiService {
function getApiSections (line 287) | function getApiSections() { return apiSections; }
FILE: apps/rxjs.dev/src/app/custom-elements/api/api-list.component.ts
class SearchCriteria (line 19) | class SearchCriteria {
class ApiListComponent (line 54) | class ApiListComponent implements OnInit {
method constructor (line 85) | constructor(private apiService: ApiService, private locationService: L...
method ngOnInit (line 87) | ngOnInit() {
method setQuery (line 98) | setQuery(query: string) {
method setStatus (line 102) | setStatus(status: Option) {
method setType (line 108) | setType(type: Option) {
method toggleStatusMenu (line 114) | toggleStatusMenu() {
method toggleTypeMenu (line 118) | toggleTypeMenu() {
method filterSection (line 124) | private filterSection(section: ApiSection, { query, status, type }: Se...
method initializeSearchCriteria (line 146) | private initializeSearchCriteria() {
method setLocationSearch (line 165) | private setLocationSearch() {
method setSearchCriteria (line 176) | private setSearchCriteria(criteria: SearchCriteria) {
FILE: apps/rxjs.dev/src/app/custom-elements/api/api-list.module.ts
class ApiListModule (line 14) | class ApiListModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/api/api.service.spec.ts
class TestLogger (line 124) | class TestLogger {
FILE: apps/rxjs.dev/src/app/custom-elements/api/api.service.ts
type ApiItem (line 10) | interface ApiItem {
type ApiSection (line 19) | interface ApiSection {
class ApiService (line 28) | class ApiService implements OnDestroy {
method sections (line 41) | get sections() {
method constructor (line 59) | constructor(private http: HttpClient, private logger: Logger) { }
method ngOnDestroy (line 61) | ngOnDestroy() {
method fetchSections (line 72) | fetchSections(src?: string) {
FILE: apps/rxjs.dev/src/app/custom-elements/code/code-example.component.spec.ts
class HostComponent (line 85) | @Component({
FILE: apps/rxjs.dev/src/app/custom-elements/code/code-example.component.ts
class CodeExampleComponent (line 33) | class CodeExampleComponent implements AfterViewInit {
method header (line 43) | set header(header: string) {
method header (line 50) | get header(): string { return this._header; }
method path (line 54) | set path(path: string) {
method path (line 58) | get path(): string { return this._path; }
method hidecopy (line 62) | set hidecopy(hidecopy: boolean) {
method hidecopy (line 66) | get hidecopy(): boolean { return this._hidecopy; }
method hyphenatedHideCopy (line 71) | set hyphenatedHideCopy(hidecopy: boolean) {
method capitalizedHideCopy (line 77) | set capitalizedHideCopy(hidecopy: boolean) {
method ngAfterViewInit (line 87) | ngAfterViewInit() {
FILE: apps/rxjs.dev/src/app/custom-elements/code/code-example.module.ts
class CodeExampleModule (line 12) | class CodeExampleModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.spec.ts
class HostComponent (line 10) | @Component({
FILE: apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.ts
type TabInfo (line 5) | interface TabInfo {
class CodeTabsComponent (line 48) | class CodeTabsComponent implements OnInit, AfterViewInit {
method ngOnInit (line 57) | ngOnInit() {
method ngAfterViewInit (line 66) | ngAfterViewInit() {
method getTabInfo (line 73) | private getTabInfo(tabContent: Element): TabInfo {
FILE: apps/rxjs.dev/src/app/custom-elements/code/code-tabs.module.ts
class CodeTabsModule (line 14) | class CodeTabsModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/code/code.component.spec.ts
class HostComponent (line 72) | @Component({
FILE: apps/rxjs.dev/src/app/custom-elements/code/code.component.ts
constant DEFAULT_LINE_NUMS_COUNT (line 15) | const DEFAULT_LINE_NUMS_COUNT = 10;
class CodeComponent (line 58) | class CodeComponent implements OnChanges {
method code (line 66) | set code(code: string) {
method code (line 75) | get code(): string {
method header (line 102) | set header(header: string | null) {
method header (line 107) | get header(): string | null {
method constructor (line 117) | constructor(
method ngOnChanges (line 125) | ngOnChanges() {
method formatDisplayedCode (line 133) | private formatDisplayedCode() {
method showMissingCodeMessage (line 150) | private showMissingCodeMessage() {
method setCodeHtml (line 157) | private setCodeHtml(formattedCode: string) {
method getCodeText (line 164) | private getCodeText() {
method getHtmlFromCode (line 172) | private getHtmlFromCode(code: string): string {
method doCopy (line 180) | doCopy() {
method editInStackBlitz (line 193) | editInStackBlitz() {
method getLinenums (line 205) | getLinenums(code: string) {
function leftAlign (line 222) | function leftAlign(text: string): string {
FILE: apps/rxjs.dev/src/app/custom-elements/code/code.module.ts
class CodeModule (line 14) | class CodeModule { }
FILE: apps/rxjs.dev/src/app/custom-elements/code/pretty-printer.service.ts
type PrettyPrintOne (line 8) | type PrettyPrintOne = (code: string, language?: string, linenums?: numbe...
class PrettyPrinter (line 14) | class PrettyPrinter {
method constructor (line 18) | constructor(private logger: Logger) {
method getPrettyPrintOne (line 22) | private getPrettyPrintOne(): Promise<PrettyPrintOne> {
method formatCode (line 49) | formatCode(code: string, language?: string, linenums?: number | boolea...
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.spec.ts
function getComponent (line 76) | function getComponent(): ContributorListComponent {
type SearchResult (line 82) | interface SearchResult { [index: string]: string }
class TestLocationService (line 84) | class TestLocationService {
class TestContributorService (line 93) | class TestContributorService {
function getTestData (line 98) | function getTestData(): ContributorGroup[] {
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.ts
class ContributorListComponent (line 22) | class ContributorListComponent implements OnInit {
method constructor (line 27) | constructor(
method ngOnInit (line 31) | ngOnInit() {
method selectGroup (line 42) | selectGroup(name: string) {
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.module.ts
class ContributorListModule (line 13) | class ContributorListModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributor.component.ts
class ContributorComponent (line 46) | class ContributorComponent {
method flipCard (line 51) | flipCard(person: Contributor) {
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.spec.ts
function getTestContribs (line 66) | function getTestContribs() {
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.ts
class ContributorService (line 16) | class ContributorService {
method constructor (line 19) | constructor(private http: HttpClient) {
method getContributors (line 23) | private getContributors() {
function compareContributors (line 61) | function compareContributors(l: Contributor, r: Contributor) {
function compareGroups (line 65) | function compareGroups(l: ContributorGroup, r: ContributorGroup) {
FILE: apps/rxjs.dev/src/app/custom-elements/contributor/contributors.model.ts
class ContributorGroup (line 1) | class ContributorGroup {
class Contributor (line 7) | class Contributor {
FILE: apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts
class CurrentLocationComponent (line 11) | class CurrentLocationComponent {
method constructor (line 12) | constructor(public location: LocationService) { }
FILE: apps/rxjs.dev/src/app/custom-elements/current-location/current-location.module.ts
class CurrentLocationModule (line 10) | class CurrentLocationModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/custom-elements.module.ts
class CustomElementsModule (line 24) | class CustomElementsModule { }
FILE: apps/rxjs.dev/src/app/custom-elements/element-registry.ts
constant ELEMENT_MODULE_LOAD_CALLBACKS_AS_ROUTES (line 7) | const ELEMENT_MODULE_LOAD_CALLBACKS_AS_ROUTES = [
type WithCustomElementComponent (line 62) | interface WithCustomElementComponent {
constant ELEMENT_MODULE_LOAD_CALLBACKS_TOKEN (line 76) | const ELEMENT_MODULE_LOAD_CALLBACKS_TOKEN = new InjectionToken<Map<strin...
constant ELEMENT_MODULE_LOAD_CALLBACKS (line 79) | const ELEMENT_MODULE_LOAD_CALLBACKS = new Map<string, LoadChildrenCallba...
FILE: apps/rxjs.dev/src/app/custom-elements/elements-loader.spec.ts
type Deferred (line 14) | interface Deferred {
class FakeCustomElementModule (line 250) | class FakeCustomElementModule implements WithCustomElementComponent {
class FakeComponentFactory (line 254) | class FakeComponentFactory extends ComponentFactory<any> {
method constructor (line 261) | constructor(private identifyingInput: string) { super(); }
method create (line 263) | create(injector: Injector,
class FakeComponentFactoryResolver (line 271) | class FakeComponentFactoryResolver extends ComponentFactoryResolver {
method constructor (line 272) | constructor(private modulePath: string) { super(); }
method resolveComponentFactory (line 274) | resolveComponentFactory(component: Type<any>): ComponentFactory<any> {
class FakeModuleRef (line 279) | class FakeModuleRef extends NgModuleRef<WithCustomElementComponent> {
method constructor (line 284) | constructor(private modulePath: string) {
method destroy (line 290) | destroy() {}
method onDestroy (line 291) | onDestroy(callback: () => void) {}
class FakeModuleFactory (line 294) | class FakeModuleFactory extends NgModuleFactory<any> {
method constructor (line 298) | constructor(private modulePath: string) { super(); }
method create (line 300) | create(parentInjector: Injector | null): NgModuleRef<any> {
function returnPromisesFromSpy (line 305) | function returnPromisesFromSpy(spy: jasmine.Spy): Deferred[] {
FILE: apps/rxjs.dev/src/app/custom-elements/elements-loader.ts
class ElementsLoader (line 16) | class ElementsLoader {
method constructor (line 22) | constructor(private moduleRef: NgModuleRef<any>,
method loadContainedCustomElements (line 33) | loadContainedCustomElements(element: HTMLElement): Observable<void> {
method loadCustomElement (line 45) | loadCustomElement(selector: string): Promise<void> {
FILE: apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts
class ExpandableSectionComponent (line 15) | class ExpandableSectionComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.module.ts
class ExpandableSectionModule (line 10) | class ExpandableSectionModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/lazy-custom-element.component.ts
class LazyCustomElementComponent (line 9) | class LazyCustomElementComponent implements OnInit {
method constructor (line 12) | constructor(
method ngOnInit (line 18) | ngOnInit() {
FILE: apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.spec.ts
class HostComponent (line 18) | @Component({
class TestLocation (line 24) | class TestLocation {
method path (line 25) | path() { return testPath; }
function getAnchors (line 28) | function getAnchors() {
function getHrefs (line 32) | function getHrefs() { return getAnchors().map(a => a.href); }
function setHostTemplate (line 34) | function setHostTemplate(template: string) {
function testComponent (line 38) | function testComponent(testFn: () => void) {
function getLiveExampleAnchor (line 64) | function getLiveExampleAnchor() { return getAnchors()[0]; }
function getDownloadAnchor (line 196) | function getDownloadAnchor() {
function getEmbeddedStackblitzComponent (line 201) | function getEmbeddedStackblitzComponent() {
FILE: apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.ts
constant LIVE_EXAMPLE_BASE (line 7) | const LIVE_EXAMPLE_BASE = CONTENT_URL_PREFIX + 'live-examples/';
constant ZIP_BASE (line 8) | const ZIP_BASE = CONTENT_URL_PREFIX + 'zips/';
class LiveExampleComponent (line 76) | class LiveExampleComponent implements AfterContentInit {
method constructor (line 86) | constructor(elementRef: ElementRef, location: Location) {
method ngAfterContentInit (line 98) | ngAfterContentInit() {
method getEnableDownload (line 106) | private getEnableDownload(attrs: AttrMap) {
method getExampleDir (line 111) | private getExampleDir(attrs: AttrMap, path: string) {
method getMode (line 121) | private getMode(this: LiveExampleComponent, attrs: AttrMap): typeof th...
method getStackblitz (line 128) | private getStackblitz(exampleDir: string, stackblitzName: string, isEm...
method getStackblitzName (line 133) | private getStackblitzName(attrs: AttrMap) {
method getTitle (line 138) | private getTitle(attrs: AttrMap) {
method getZip (line 142) | private getZip(exampleDir: string, stackblitzName: string) {
class EmbeddedStackblitzComponent (line 158) | class EmbeddedStackblitzComponent implements AfterViewInit {
method ngAfterViewInit (line 163) | ngAfterViewInit() {
FILE: apps/rxjs.dev/src/app/custom-elements/live-example/live-example.module.ts
class LiveExampleModule (line 10) | class LiveExampleModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/interfaces.ts
type OperatorTreeNode (line 1) | interface OperatorTreeNode {
type OperatorTreeNodeWithOptions (line 10) | interface OperatorTreeNodeWithOptions extends OperatorTreeNode {
type OperatorDecisionTree (line 14) | interface OperatorDecisionTree {
type State (line 20) | interface State {
FILE: apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.ts
class OperatorDecisionTreeDataService (line 7) | class OperatorDecisionTreeDataService {
method constructor (line 8) | constructor(private http: HttpClient) {}
method getDecisionTree$ (line 10) | getDecisionTree$(): Observable<OperatorDecisionTree> {
FILE: apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.ts
class OperatorDecisionTreeComponent (line 65) | class OperatorDecisionTreeComponent implements OnDestroy {
method constructor (line 71) | constructor(private operatorDecisionTreeService: OperatorDecisionTreeS...
method selectOption (line 73) | selectOption(optionId: string): void {
method back (line 78) | back(): void {
method startOver (line 82) | startOver(): void {
method ngOnDestroy (line 86) | ngOnDestroy(): void {
FILE: apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.module.ts
class OperatorDecisionTreeModule (line 21) | class OperatorDecisionTreeModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.ts
class OperatorDecisionTreeService (line 9) | class OperatorDecisionTreeService {
method constructor (line 66) | constructor(private dataService: OperatorDecisionTreeDataService) {}
method snapShot (line 68) | private get snapShot(): State {
method selectOption (line 72) | selectOption(optionId: string): void {
method back (line 79) | back(): void {
method startOver (line 97) | startOver(): void {
FILE: apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts
function isInitialDecision (line 3) | function isInitialDecision(previousBranchIds: string[]): boolean {
function treeIsErrorFree (line 9) | function treeIsErrorFree(tree: OperatorDecisionTree): boolean {
function nodeHasOptions (line 13) | function nodeHasOptions(node: OperatorTreeNode): node is OperatorTreeNod...
FILE: apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.spec.ts
function getComponent (line 65) | function getComponent(): ResourceListComponent { return injector.get(Re...
class TestPlatformLocation (line 67) | class TestPlatformLocation {
class TestResourceService (line 71) | class TestResourceService {
function getTestData (line 75) | function getTestData(): Category[] {
FILE: apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.ts
class ResourceListComponent (line 42) | class ResourceListComponent implements OnInit {
method constructor (line 47) | constructor(location: PlatformLocation, private resourceService: Resou...
method href (line 51) | href(cat: { id: string }) {
method ngOnInit (line 55) | ngOnInit() {
method onScroll (line 62) | onScroll(target: any) {
FILE: apps/rxjs.dev/src/app/custom-elements/resource/resource-list.module.ts
class ResourceListModule (line 12) | class ResourceListModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/resource/resource.model.ts
class Category (line 1) | class Category {
class SubCategory (line 8) | class SubCategory {
class Resource (line 15) | class Resource {
FILE: apps/rxjs.dev/src/app/custom-elements/resource/resource.service.spec.ts
function getTestResources (line 88) | function getTestResources() {
FILE: apps/rxjs.dev/src/app/custom-elements/resource/resource.service.ts
class ResourceService (line 13) | class ResourceService {
method constructor (line 16) | constructor(private http: HttpClient) {
method getCategories (line 20) | private getCategories(): Observable<Category[]> {
function mkCategories (line 33) | function mkCategories(categoryJson: any): Category[] {
function mkSubCategories (line 47) | function mkSubCategories(subCategoryJson: any, catKey: string): SubCateg...
function mkResources (line 61) | function mkResources(resourceJson: any, subKey: string, catKey: string):...
function compareCats (line 72) | function compareCats(l: Category | SubCategory, r: Category | SubCategor...
function compareTitles (line 76) | function compareTitles(l: {title: string}, r: {title: string}) {
function makeId (line 80) | function makeId(title: string) {
FILE: apps/rxjs.dev/src/app/custom-elements/search/file-not-found-search.component.ts
class FileNotFoundSearchComponent (line 14) | class FileNotFoundSearchComponent implements OnInit {
method constructor (line 16) | constructor(private location: LocationService, private search: SearchS...
method ngOnInit (line 18) | ngOnInit() {
FILE: apps/rxjs.dev/src/app/custom-elements/search/file-not-found-search.module.ts
class FileNotFoundSearchModule (line 11) | class FileNotFoundSearchModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/custom-elements/toc/toc.component.ts
type TocType (line 8) | type TocType = 'None' | 'Floating' | 'EmbeddedSimple' | 'EmbeddedExpanda...
class TocComponent (line 56) | class TocComponent implements OnInit, AfterViewInit, OnDestroy {
method constructor (line 66) | constructor(private scrollService: ScrollService, elementRef: ElementR...
method ngOnInit (line 70) | ngOnInit() {
method ngAfterViewInit (line 80) | ngAfterViewInit() {
method ngOnDestroy (line 108) | ngOnDestroy() {
method toggle (line 112) | toggle(canScroll = true) {
method toTop (line 119) | toTop() {
function count (line 124) | function count<T>(array: T[], fn: (item: T) => boolean) {
FILE: apps/rxjs.dev/src/app/custom-elements/toc/toc.module.ts
class TocModule (line 11) | class TocModule implements WithCustomElementComponent {
FILE: apps/rxjs.dev/src/app/documents/document-contents.ts
type DocumentContents (line 1) | interface DocumentContents {
FILE: apps/rxjs.dev/src/app/documents/document.service.spec.ts
constant CONTENT_URL_PREFIX (line 12) | const CONTENT_URL_PREFIX = 'generated/docs/';
function createInjector (line 17) | function createInjector(initialUrl: string) {
function getServices (line 28) | function getServices(initialUrl: string = '') {
FILE: apps/rxjs.dev/src/app/documents/document.service.ts
constant FILE_NOT_FOUND_ID (line 13) | const FILE_NOT_FOUND_ID = 'file-not-found';
constant FETCHING_ERROR_ID (line 14) | const FETCHING_ERROR_ID = 'fetching-error';
constant CONTENT_URL_PREFIX (line 16) | const CONTENT_URL_PREFIX = 'generated/';
constant DOC_CONTENT_URL_PREFIX (line 17) | const DOC_CONTENT_URL_PREFIX = CONTENT_URL_PREFIX + 'docs/';
class DocumentService (line 32) | class DocumentService {
method constructor (line 38) | constructor(
method getDocument (line 46) | private getDocument(url: string) {
method fetchDocument (line 55) | private fetchDocument(id: string): Observable<DocumentContents> {
method getFileNotFoundDoc (line 76) | private getFileNotFoundDoc(id: string): Observable<DocumentContents> {
method getErrorDoc (line 89) | private getErrorDoc(id: string, error: HttpErrorResponse): Observable<...
FILE: apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.ts
constant NO_ANIMATIONS (line 13) | const NO_ANIMATIONS = 'no-animations';
class DocViewerComponent (line 25) | class DocViewerComponent implements OnDestroy {
method doc (line 39) | set doc(newDoc: DocumentContents) {
method constructor (line 63) | constructor(
method ngOnDestroy (line 88) | ngOnDestroy() {
method prepareTitleAndToc (line 96) | protected prepareTitleAndToc(targetElem: HTMLElement, docId: string): ...
method render (line 136) | protected render(doc: DocumentContents): Observable<void> {
method setNoIndex (line 163) | private setNoIndex(val: boolean) {
method swapViews (line 180) | protected swapViews(onInsertedCb = () => {}): Observable<void> {
method addDocumentMetaTags (line 258) | private addDocumentMetaTags(title: string, description: string | null)...
FILE: apps/rxjs.dev/src/app/layout/doc-viewer/dt.component.ts
class DtComponent (line 15) | class DtComponent {
method text (line 24) | get text() { return this.doc && this.doc.contents; }
method dtextSet (line 26) | dtextSet() {
FILE: apps/rxjs.dev/src/app/layout/footer/footer.component.ts
class FooterComponent (line 13) | class FooterComponent {
FILE: apps/rxjs.dev/src/app/layout/mode-banner/mode-banner.component.ts
class ModeBannerComponent (line 13) | class ModeBannerComponent {
FILE: apps/rxjs.dev/src/app/layout/nav-item/nav-item.component.spec.ts
function initialize (line 20) | function initialize(nd: NavigationNode) {
function onChanges (line 26) | function onChanges() {
FILE: apps/rxjs.dev/src/app/layout/nav-item/nav-item.component.ts
class NavItemComponent (line 50) | class NavItemComponent implements OnChanges {
method ngOnChanges (line 62) | ngOnChanges() {
method setClasses (line 80) | setClasses() {
method headerClicked (line 89) | headerClicked() {
FILE: apps/rxjs.dev/src/app/layout/nav-menu/nav-menu.component.ts
class NavMenuComponent (line 9) | class NavMenuComponent {
method filteredNodes (line 13) | get filteredNodes() {
FILE: apps/rxjs.dev/src/app/layout/notification/notification.component.ts
constant LOCAL_STORAGE_NAMESPACE (line 6) | const LOCAL_STORAGE_NAMESPACE = 'aio-notification/';
class NotificationComponent (line 30) | class NotificationComponent implements OnInit {
method constructor (line 41) | constructor(@Inject(WindowToken) window: Window, @Inject(CurrentDateTo...
method ngOnInit (line 58) | ngOnInit() {
method contentClick (line 64) | contentClick() {
method dismiss (line 70) | dismiss() {
FILE: apps/rxjs.dev/src/app/layout/top-menu/top-menu.component.spec.ts
class TestNavigationService (line 33) | class TestNavigationService {
FILE: apps/rxjs.dev/src/app/layout/top-menu/top-menu.component.ts
class TopMenuComponent (line 11) | class TopMenuComponent {
FILE: apps/rxjs.dev/src/app/navigation/navigation.model.ts
type NavigationNode (line 5) | interface NavigationNode {
type NavigationResponse (line 13) | type NavigationResponse = { __versionInfo: VersionInfo } & { [name: stri...
type NavigationViews (line 15) | interface NavigationViews {
type CurrentNode (line 25) | interface CurrentNode {
type CurrentNodes (line 36) | interface CurrentNodes {
type VersionInfo (line 40) | interface VersionInfo {
FILE: apps/rxjs.dev/src/app/navigation/navigation.service.ts
class NavigationService (line 17) | class NavigationService {
method constructor (line 35) | constructor(private http: HttpClient, private location: LocationServic...
method fetchNavigationInfo (line 55) | private fetchNavigationInfo(): Observable<NavigationResponse> {
method getVersionInfo (line 62) | private getVersionInfo(navigationInfo: Observable<NavigationResponse>) {
method getNavigationViews (line 71) | private getNavigationViews(navigationInfo: Observable<NavigationRespon...
method getCurrentNodes (line 92) | private getCurrentNodes(navigationViews: Observable<NavigationViews>):...
method computeUrlToNavNodesMap (line 112) | private computeUrlToNavNodesMap(navigation: NavigationViews) {
method ensureHasTooltip (line 124) | private ensureHasTooltip(node: NavigationNode) {
method walkNodes (line 136) | private walkNodes(
FILE: apps/rxjs.dev/src/app/search/interfaces.ts
type SearchResults (line 1) | interface SearchResults {
type SearchResult (line 6) | interface SearchResult {
type SearchArea (line 14) | interface SearchArea {
FILE: apps/rxjs.dev/src/app/search/search-box/search-box.component.spec.ts
class HostComponent (line 8) | @Component({
FILE: apps/rxjs.dev/src/app/search/search-box/search-box.component.ts
class SearchBoxComponent (line 27) | class SearchBoxComponent implements OnInit {
method constructor (line 38) | constructor(private locationService: LocationService) { }
method ngOnInit (line 43) | ngOnInit() {
method doSearch (line 51) | doSearch() {
method doFocus (line 55) | doFocus() {
method focus (line 59) | focus() {
method query (line 63) | private get query() { return this.searchBox.nativeElement.value; }
method query (line 64) | private set query(value: string) { this.searchBox.nativeElement.value ...
FILE: apps/rxjs.dev/src/app/search/search.service.ts
class SearchService (line 14) | class SearchService {
method constructor (line 18) | constructor(private zone: NgZone) {}
method initWorker (line 27) | initWorker(initDelay: number) {
method search (line 50) | search(query: string): Observable<SearchResults> {
FILE: apps/rxjs.dev/src/app/search/search.worker.ts
constant SEARCH_TERMS_URL (line 7) | const SEARCH_TERMS_URL = '/generated/docs/app/search-data.json';
type SearchInfo (line 11) | interface SearchInfo {
type PageInfo (line 15) | interface PageInfo {
type EncodedPages (line 25) | interface EncodedPages {
type EncodedPage (line 30) | interface EncodedPage {
function createIndex (line 52) | function createIndex(loadIndexFn: IndexLoader): lunr.Index {
function handleMessage (line 68) | function handleMessage(message: { data: WebWorkerMessage }): void {
function makeRequest (line 88) | function makeRequest(url: string, callback: (response: any) => void): vo...
function loadIndex (line 100) | function loadIndex({ dictionary, pages }: EncodedPages): IndexLoader {
function decodePage (line 113) | function decodePage(encodedPage: EncodedPage, dictionary: string[]): Pag...
function queryIndex (line 123) | function queryIndex(query: string): PageInfo[] {
type IndexLoader (line 175) | type IndexLoader = (indexBuilder: lunr.Builder) => void;
FILE: apps/rxjs.dev/src/app/shared/attribute-utils.ts
type AttrMap (line 4) | interface AttrMap {
function getAttrs (line 14) | function getAttrs(el: HTMLElement | ElementRef): AttrMap {
function getAttrValue (line 28) | function getAttrValue(attrs: AttrMap, attr: string | string[]): string |...
function boolFromValue (line 42) | function boolFromValue(attrValue: string | undefined, def: boolean = fal...
function getBoolFromAttribute (line 53) | function getBoolFromAttribute(
FILE: apps/rxjs.dev/src/app/shared/copier.service.ts
class CopierService (line 13) | class CopierService {
method createFake (line 20) | createFake(text: string) {
method removeFake (line 51) | removeFake() {
method copyText (line 58) | copyText(text: string) {
FILE: apps/rxjs.dev/src/app/shared/current-date.ts
function currentDateProvider (line 4) | function currentDateProvider() { return new Date(); }
FILE: apps/rxjs.dev/src/app/shared/custom-icon-registry.spec.ts
function createSvg (line 43) | function createSvg(svgSrc: string): SVGElement {
FILE: apps/rxjs.dev/src/app/shared/custom-icon-registry.ts
constant SVG_ICONS (line 21) | const SVG_ICONS = new InjectionToken<Array<SvgIconInfo>>('SvgIcons');
type SvgIconInfo (line 22) | interface SvgIconInfo {
type SvgIconMap (line 27) | interface SvgIconMap {
class CustomIconRegistry (line 36) | class CustomIconRegistry extends MatIconRegistry {
method constructor (line 39) | constructor(http: HttpClient, sanitizer: DomSanitizer, @Optional() @In...
method getNamedSvgIcon (line 45) | override getNamedSvgIcon(iconName: string, namespace?: string) {
method loadSvgElements (line 52) | private loadSvgElements(svgIcons: SvgIconInfo[]) {
FILE: apps/rxjs.dev/src/app/shared/deployment.service.spec.ts
function getInjector (line 27) | function getInjector() {
FILE: apps/rxjs.dev/src/app/shared/deployment.service.ts
class Deployment (line 9) | class Deployment {
method constructor (line 16) | constructor(private location: LocationService) {}
FILE: apps/rxjs.dev/src/app/shared/ga.service.ts
class GaService (line 12) | class GaService {
method constructor (line 16) | constructor(@Inject(WindowToken) private window: Window) {
method locationChanged (line 20) | locationChanged(url: string) {
method sendPage (line 24) | sendPage(url: string) {
method sendEvent (line 32) | sendEvent(source: string, action: string, label?: string, value?: numb...
method ga (line 36) | ga(...args: any[]) {
FILE: apps/rxjs.dev/src/app/shared/location.service.spec.ts
class MockPlatformLocation (line 601) | class MockPlatformLocation {
class MockSwUpdatesService (line 606) | class MockSwUpdatesService {
class TestGaService (line 610) | class TestGaService {
FILE: apps/rxjs.dev/src/app/shared/location.service.ts
class LocationService (line 11) | class LocationService {
method constructor (line 25) | constructor(
method go (line 39) | go(url: string|null|undefined) {
method goExternal (line 52) | goExternal(url: string) {
method replace (line 56) | replace(url: string) {
method stripSlashes (line 60) | private stripSlashes(url: string) {
method search (line 64) | search() {
method setSearch (line 82) | setSearch(label: string, params: { [key: string]: string|undefined}) {
method handleAnchorClick (line 114) | handleAnchorClick(anchor: HTMLAnchorElement, button = 0, ctrlKey = fal...
FILE: apps/rxjs.dev/src/app/shared/logger.service.spec.ts
class MockErrorHandler (line 45) | class MockErrorHandler implements ErrorHandler {
FILE: apps/rxjs.dev/src/app/shared/logger.service.ts
class Logger (line 6) | class Logger {
method constructor (line 8) | constructor(private errorHandler: ErrorHandler) {}
method log (line 10) | log(value: any, ...rest: any[]) {
method error (line 16) | error(error: Error) {
method warn (line 20) | warn(value: any, ...rest: any[]) {
FILE: apps/rxjs.dev/src/app/shared/reporting-error-handler.ts
class ReportingErrorHandler (line 10) | class ReportingErrorHandler extends ErrorHandler {
method constructor (line 12) | constructor(@Inject(WindowToken) private window: Window) {
method handleError (line 21) | override handleError(error: string | Error) {
method reportError (line 31) | private reportError(error: unknown) {
FILE: apps/rxjs.dev/src/app/shared/scroll-spy.service.ts
type ScrollItem (line 9) | interface ScrollItem {
type ScrollSpyInfo (line 14) | interface ScrollSpyInfo {
class ScrollSpiedElement (line 28) | class ScrollSpiedElement implements ScrollItem {
method constructor (line 36) | constructor(public readonly element: Element, public readonly index: n...
method calculateTop (line 46) | calculateTop(scrollTop: number, topOffset: number) {
class ScrollSpiedElementGroup (line 60) | class ScrollSpiedElementGroup {
method constructor (line 69) | constructor(elements: Element[]) {
method calibrate (line 82) | calibrate(scrollTop: number, topOffset: number) {
method onScroll (line 99) | onScroll(scrollTop: number, maxScrollTop: number) {
class ScrollSpyService (line 119) | class ScrollSpyService {
method constructor (line 127) | constructor(@Inject(DOCUMENT) private doc: any, private scrollService:...
method spyOn (line 141) | spyOn(elements: Element[]): ScrollSpyInfo {
method getContentHeight (line 164) | private getContentHeight() {
method getScrollTop (line 168) | private getScrollTop() {
method getTopOffset (line 172) | private getTopOffset() {
method getViewportHeight (line 176) | private getViewportHeight() {
method onResize (line 185) | private onResize() {
method onScroll (line 202) | private onScroll() {
method unspy (line 221) | private unspy(spiedGroup: ScrollSpiedElementGroup) {
FILE: apps/rxjs.dev/src/app/shared/scroll.service.spec.ts
class MockPlatformLocation (line 17) | class MockPlatformLocation {
class MockDocument (line 21) | class MockDocument {
class MockElement (line 27) | class MockElement {
FILE: apps/rxjs.dev/src/app/shared/scroll.service.ts
type ScrollPosition (line 6) | type ScrollPosition = [number, number];
type ScrollPositionPopStateEvent (line 7) | interface ScrollPositionPopStateEvent extends PopStateEvent {
class ScrollService (line 17) | class ScrollService {
method topOffset (line 31) | get topOffset() {
method topOfPageElement (line 39) | get topOfPageElement() {
method constructor (line 46) | constructor(
method scroll (line 83) | scroll() {
method isLocationWithHash (line 94) | isLocationWithHash(): boolean {
method scrollAfterRender (line 104) | scrollAfterRender(delay: number) {
method scrollToElement (line 134) | scrollToElement(element: Element|null) {
method scrollToTop (line 155) | scrollToTop() {
method scrollToPosition (line 159) | scrollToPosition() {
method updateScrollPositionInHistory (line 169) | updateScrollPositionInHistory() {
method getStoredScrollPosition (line 179) | getStoredScrollPosition(): ScrollPosition | null {
method removeStoredScrollPosition (line 187) | removeStoredScrollPosition() {
method needToFixScrollPosition (line 194) | needToFixScrollPosition(): boolean {
method getCurrentHash (line 201) | private getCurrentHash() {
FILE: apps/rxjs.dev/src/app/shared/search-results/search-results.component.spec.ts
function getText (line 12) | function getText() {
function getTestResults (line 17) | function getTestResults(take?: number) {
function compareTitle (line 33) | function compareTitle(l: SearchResult, r: SearchResult) {
function setSearchResults (line 37) | function setSearchResults(query: string, results: SearchResult[]) {
FILE: apps/rxjs.dev/src/app/shared/search-results/search-results.component.ts
class SearchResultsComponent (line 38) | class SearchResultsComponent implements OnChanges {
method ngOnChanges (line 56) | ngOnChanges() {
method onResultSelected (line 60) | onResultSelected(page: SearchResult, event: MouseEvent) {
method processSearchResults (line 68) | private processSearchResults(search: SearchResults) {
method computeAreaName (line 94) | private computeAreaName(result: SearchResult) {
function compareResults (line 103) | function compareResults(l: SearchResult, r: SearchResult) {
FILE: apps/rxjs.dev/src/app/shared/select/select.component.spec.ts
class HostComponent (line 135) | @Component({
function getButton (line 152) | function getButton(): HTMLButtonElement {
function getOptionContainer (line 156) | function getOptionContainer(): HTMLUListElement|null {
function getOptions (line 161) | function getOptions(): HTMLLIElement[] {
FILE: apps/rxjs.dev/src/app/shared/select/select.component.ts
type Option (line 3) | interface Option {
class SelectComponent (line 30) | class SelectComponent implements OnInit {
method constructor (line 49) | constructor(private hostElement: ElementRef) {}
method ngOnInit (line 51) | ngOnInit() {
method toggleOptions (line 55) | toggleOptions() {
method hideOptions (line 59) | hideOptions() {
method select (line 63) | select(option: Option, index: number) {
method onClick (line 70) | onClick(eventTarget: HTMLElement) {
method onKeyDown (line 78) | onKeyDown() {
FILE: apps/rxjs.dev/src/app/shared/shared.module.ts
class SharedModule (line 19) | class SharedModule {}
FILE: apps/rxjs.dev/src/app/shared/stackblitz.service.ts
type StackBlitzExampleConfig (line 5) | interface StackBlitzExampleConfig {
class StackblitzService (line 17) | class StackblitzService {
method openProject (line 18) | openProject(config: StackBlitzExampleConfig) {
FILE: apps/rxjs.dev/src/app/shared/toc.service.spec.ts
function callGenToc (line 16) | function callGenToc(html = '', docId = 'fizz/buzz'): HTMLDivElement {
type TestSafeHtml (line 337) | interface TestSafeHtml extends SafeHtml {
class TestDomSanitizer (line 342) | class TestDomSanitizer {
class MockScrollSpyService (line 350) | class MockScrollSpyService {
method $lastInfo (line 356) | get $lastInfo() {
method spyOn (line 363) | spyOn(headings: HTMLHeadingElement[]): ScrollSpyInfo {
function createTocItem (line 371) | function createTocItem(title: string, level = 'h2', href = '', content =...
FILE: apps/rxjs.dev/src/app/shared/toc.service.ts
type TocItem (line 7) | interface TocItem {
class TocService (line 16) | class TocService {
method constructor (line 21) | constructor(@Inject(DOCUMENT) private document: any, private domSaniti...
method genToc (line 23) | genToc(docElement?: Element, docId = '') {
method reset (line 46) | reset() {
method extractHeadingSafeHtml (line 52) | private extractHeadingSafeHtml(heading: HTMLHeadingElement) {
method findTocHeadings (line 75) | private findTocHeadings(docElement: Element): HTMLHeadingElement[] {
method resetScrollSpyInfo (line 82) | private resetScrollSpyInfo() {
method getId (line 93) | private getId(h: HTMLHeadingElement, idMap: Map<string, number>) {
FILE: apps/rxjs.dev/src/app/shared/web-worker-message.ts
type WebWorkerMessage (line 1) | interface WebWorkerMessage {
FILE: apps/rxjs.dev/src/app/shared/web-worker.ts
class WebWorkerClient (line 11) | class WebWorkerClient {
method create (line 14) | static create(worker: Worker, zone: NgZone) {
method constructor (line 18) | private constructor(private worker: Worker, private zone: NgZone) {}
method sendMessage (line 20) | sendMessage<T>(type: string, payload?: any): Observable<T> {
FILE: apps/rxjs.dev/src/app/shared/window.ts
function windowProvider (line 4) | function windowProvider() { return window; }
FILE: apps/rxjs.dev/src/app/sw-updates/sw-updates.module.ts
class SwUpdatesModule (line 11) | class SwUpdatesModule {}
FILE: apps/rxjs.dev/src/app/sw-updates/sw-updates.service.spec.ts
class MockApplicationRef (line 203) | class MockApplicationRef {
class MockLogger (line 207) | class MockLogger {
class MockSwUpdate (line 211) | class MockSwUpdate {
method constructor (line 224) | constructor(public isEnabled: boolean) {}
FILE: apps/rxjs.dev/src/app/sw-updates/sw-updates.service.ts
class SwUpdatesService (line 21) | class SwUpdatesService implements OnDestroy {
method constructor (line 26) | constructor(appRef: ApplicationRef, private logger: Logger, private sw...
method ngOnDestroy (line 57) | ngOnDestroy() {
method log (line 61) | private log(message: string) {
FILE: apps/rxjs.dev/src/assets/js/prettify.js
function T (line 18) | function T(a){function d(e){var b=e.charCodeAt(0);if(92!==b)return b;var...
function U (line 22) | function U(a,d){function f(a){var c=a.nodeType;if(1==c){if(!b.test(a.cla...
function J (line 23) | function J(a,d,f,b,v){f&&(a={h:a,l:1,j:null,m:null,a:f,c:null,i:d,g:null...
function V (line 23) | function V(a){for(var d=void 0,f=a.firstChild;f;f=f.nextSibling)var b=f....
function G (line 23) | function G(a,d){function f(a){for(var l=a.i,m=a.h,c=[l,"pln"],p=0,w=a.a....
function y (line 25) | function y(a){var d=[],f=[];a.tripleQuotedStrings?d.push(["str",/^(?:\'\...
function L (line 29) | function L(a,d,f){function b(a){var c=a.nodeType;if(1==c&&!A.test(a.clas...
function t (line 31) | function t(a,d){for(var f=d.length;0<=--f;){var b=d[f];I.hasOwnProperty(...
function K (line 31) | function K(a,d){a&&I.hasOwnProperty(a)||(a=/^\s*</.test(d)?
function M (line 32) | function M(a){var d=a.j;try{var f=U(a.h,a.l),b=f.a;a.a=b;a.c=f.c;a.i=0;K...
function f (line 43) | function f(){for(var b=E.PR_SHOULD_USE_CONTINUATION?c.now()+250:Infinity...
FILE: apps/rxjs.dev/src/testing/doc-viewer-utils.ts
class TestDocViewerComponent (line 19) | class TestDocViewerComponent extends DocViewerComponent {
method prepareTitleAndToc (line 23) | override prepareTitleAndToc(targetElem: HTMLElement, docId: string): (...
method render (line 24) | override render(doc: DocumentContents): Observable<void> { return null...
method swapViews (line 25) | override swapViews(onInsertedCb?: () => void): Observable<void> { retu...
class TestParentComponent (line 38) | class TestParentComponent {
class MockTitle (line 45) | class MockTitle {
class MockMeta (line 50) | class MockMeta {
class MockTocService (line 56) | class MockTocService {
class MockElementsLoader (line 62) | class MockElementsLoader {
class TestModule (line 80) | class TestModule { }
class ObservableWithSubscriptionSpies (line 87) | class ObservableWithSubscriptionSpies<T = void> extends Observable<T> {
method constructor (line 96) | constructor(subscriber = () => undefined) { super(subscriber); }
FILE: apps/rxjs.dev/src/testing/location.service.ts
class MockLocationService (line 4) | class MockLocationService {
method constructor (line 18) | constructor(private initialUrl: string) {}
method stripSlashes (line 20) | private stripSlashes(url: string) {
FILE: apps/rxjs.dev/src/testing/logger.service.ts
class MockLogger (line 4) | class MockLogger {
method log (line 12) | log(value: any, ...rest: any[]) {
method error (line 16) | error(value: any, ...rest: any[]) {
method warn (line 20) | warn(value: any, ...rest: any[]) {
FILE: apps/rxjs.dev/src/testing/search.service.ts
class MockSearchService (line 4) | class MockSearchService {
FILE: apps/rxjs.dev/src/typings.d.ts
type NodeModule (line 3) | interface NodeModule {
FILE: apps/rxjs.dev/tests/e2e/protractor.conf.js
method onPrepare (line 32) | onPrepare() {
FILE: apps/rxjs.dev/tools/firebase-test-utils/FirebaseGlob.spec.ts
function testGlob (line 178) | function testGlob(pattern: string, matches: string[], nonMatches: string...
function testMatch (line 184) | function testMatch(pattern: string, captures: { named?: string[], rest?:...
FILE: apps/rxjs.dev/tools/firebase-test-utils/FirebaseGlob.ts
class FirebaseGlob (line 13) | class FirebaseGlob {
method constructor (line 18) | constructor(glob: string) {
method test (line 45) | test(url: string) {
method match (line 49) | match(url: string) {
function replaceModifiedPattern (line 60) | function replaceModifiedPattern(_, modifier, pattern) {
FILE: apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirect.ts
class FirebaseRedirect (line 4) | class FirebaseRedirect {
method constructor (line 6) | constructor(public source: string, public destination: string) {}
method replace (line 8) | replace(url: string) {
FILE: apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirector.ts
type FirebaseRedirectConfig (line 3) | interface FirebaseRedirectConfig {
class FirebaseRedirector (line 8) | class FirebaseRedirector {
method constructor (line 10) | constructor(redirects: FirebaseRedirectConfig[]) {
method redirect (line 14) | redirect(url: string) {
method doRedirect (line 27) | private doRedirect(url: string) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/mocks/testSrc.ts
class MyClass (line 24) | class MyClass {
method constructor (line 31) | constructor(name) { this.message = 'hello ' + name; }
method greet (line 36) | greet() { return this.message; }
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/addMetadataAliases.js
function extractSelectors (line 32) | function extractSelectors(selectors) {
function stripQuotes (line 47) | function stripQuotes(value) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/checkOperator.js
method $process (line 5) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/computeApiBreadCrumbs.js
method $process (line 5) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/computeSearchTitle.js
method $process (line 5) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/computeStability.js
method $process (line 6) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/generateApiListDoc.js
function getModuleInfo (line 22) | function getModuleInfo(moduleDoc) {
function getExportInfo (line 37) | function getExportInfo(exportDoc) {
function getDocType (line 48) | function getDocType(doc) {
function getStability (line 57) | function getStability(doc) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/markAliases.ts
function markAliases (line 3) | function markAliases(log: any): MarkAliases {
class MarkAliases (line 9) | class MarkAliases implements Processor {
method constructor (line 13) | constructor(
method $process (line 18) | $process(docs: DocCollection): void {
method findDuplicateDocs (line 34) | private findDuplicateDocs(doc: Document): DocCollection {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/matchUpDirectiveDecorators.js
function getBindingInfo (line 34) | function getBindingInfo(directiveBindings, members, bindingType) {
function stripQuotes (line 68) | function stripQuotes(value) {
function parseBinding (line 72) | function parseBinding(option) {
function createBindingInfo (line 80) | function createBindingInfo(propertyName, bindingName) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/mergeDecoratorDocs.js
function getInitializer (line 110) | function getInitializer(doc) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/migrateLegacyJSDocTags.js
method $process (line 5) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/processClassLikeMembers.js
method $process (line 9) | $process(docs) {
function isMethod (line 50) | function isMethod(doc) {
function computeMemberDescription (line 54) | function computeMemberDescription(member) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/simplifyMemberAnchors.js
function computeAnchor (line 29) | function computeAnchor(member) {
FILE: apps/rxjs.dev/tools/transforms/angular-api-package/processors/splitDescription.js
method $process (line 11) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/post-processors/add-image-dimensions.spec.js
function mockGetImageDimensions (line 96) | function mockGetImageDimensions() {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/post-processors/auto-link-code.js
function autoLinkCodeImpl (line 33) | function autoLinkCodeImpl() {
function isValidCodeElement (line 66) | function isValidCodeElement(node, ancestors) {
function isInsideLink (line 80) | function isInsideLink(ancestors) {
function getFilteredDocsFromAlias (line 84) | function getFilteredDocsFromAlias(words, index) {
function shouldSkipFindingValidDoc (line 90) | function shouldSkipFindingValidDoc(words, index) {
function getNodes (line 94) | function getNodes(node, file) {
function foundValidDoc (line 119) | function foundValidDoc(docs, keyword, file) {
function createLinkNode (line 147) | function createLinkNode(doc, text) {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/post-processors/autolink-headings.js
constant HEADINGS (line 11) | const HEADINGS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
constant NO_ANCHOR_CLASS (line 12) | const NO_ANCHOR_CLASS = 'no-anchor';
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/post-processors/h1-checker.js
function getText (line 30) | function getText(h1) {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/processors/copyContentAssets.js
method $process (line 6) | $process() {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/processors/createSitemap.js
method $process (line 15) | $process(docs) {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/processors/generateKeywords.js
method $process (line 25) | async $process(docs) {
function isString (line 192) | function isString(value) {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/processors/generateKeywords.spec.js
function createProcessor (line 14) | function createProcessor() {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/processors/renderLinkInfo.js
method $process (line 11) | $process(docs) {
function getLinks (line 39) | function getLinks(hash, docPath) {
FILE: apps/rxjs.dev/tools/transforms/angular-base-package/rendering/truncateCode.js
function balance (line 27) | function balance(str, openers, closers) {
FILE: apps/rxjs.dev/tools/transforms/angular.io-package/index.js
method test (line 48) | test(url) {
FILE: apps/rxjs.dev/tools/transforms/angular.io-package/processors/processNavigationMap.js
function walk (line 33) | function walk(node, map, path) {
function isRelative (line 51) | function isRelative(url) {
FILE: apps/rxjs.dev/tools/transforms/authors-package/api-package.js
function createPackage (line 30) | function createPackage(packageName) {
FILE: apps/rxjs.dev/tools/transforms/authors-package/guide-package.js
function createPackage (line 17) | function createPackage(guideName) {
FILE: apps/rxjs.dev/tools/transforms/authors-package/index.js
function createPackage (line 10) | function createPackage(changedFile) {
FILE: apps/rxjs.dev/tools/transforms/authors-package/marketing-package.js
function createPackage (line 12) | function createPackage() {
FILE: apps/rxjs.dev/tools/transforms/authors-package/tutorial-package.js
function createPackage (line 17) | function createPackage(tutorialName) {
FILE: apps/rxjs.dev/tools/transforms/authors-package/watchr.js
function listener (line 7) | function listener(changeType, fullPath) {
function next (line 17) | function next(error) {
FILE: apps/rxjs.dev/tools/transforms/config.js
constant PROJECT_ROOT (line 4) | const PROJECT_ROOT = resolve(__dirname, '../../../..');
constant AIO_PATH (line 5) | const AIO_PATH = resolve(PROJECT_ROOT, 'apps/rxjs.dev');
constant TEMPLATES_PATH (line 6) | const TEMPLATES_PATH = resolve(AIO_PATH, 'tools/transforms/templates');
constant API_TEMPLATES_PATH (line 7) | const API_TEMPLATES_PATH = resolve(TEMPLATES_PATH, 'api');
constant CONTENTS_PATH (line 8) | const CONTENTS_PATH = resolve(AIO_PATH, 'content');
constant SRC_PATH (line 9) | const SRC_PATH = resolve(AIO_PATH, 'src');
constant OUTPUT_PATH (line 10) | const OUTPUT_PATH = resolve(SRC_PATH, 'generated');
constant DOCS_OUTPUT_PATH (line 11) | const DOCS_OUTPUT_PATH = resolve(OUTPUT_PATH, 'docs');
constant API_SOURCE_PATH (line 12) | const API_SOURCE_PATH = resolve(PROJECT_ROOT, 'packages/rxjs/src');
constant MARBLE_IMAGES_PATH (line 13) | const MARBLE_IMAGES_PATH = resolve(SRC_PATH, 'assets/images/marble-diagr...
constant MARBLE_IMAGES_WEB_PATH (line 14) | const MARBLE_IMAGES_WEB_PATH = 'assets/images/marble-diagrams';
constant DECISION_TREE_PATH (line 15) | const DECISION_TREE_PATH = resolve(CONTENTS_PATH, 'operator-decision-tre...
function requireFolder (line 17) | function requireFolder(dirname, folderPath) {
FILE: apps/rxjs.dev/tools/transforms/helpers/utils.js
method mapObject (line 7) | mapObject(obj, mapper) {
method parseAttributes (line 18) | parseAttributes(str) {
method renderAttributes (line 94) | renderAttributes(attrMap) {
FILE: apps/rxjs.dev/tools/transforms/links-package/inline-tag-defs/link.js
method handler (line 21) | handler(doc, tagName, tagDescription) {
FILE: apps/rxjs.dev/tools/transforms/links-package/services/getAliases.js
function parseCodeName (line 2) | function parseCodeName(codeName) {
FILE: apps/rxjs.dev/tools/transforms/links-package/services/getDocFromAlias.js
function getDocFromAlias (line 15) | function getDocFromAlias(alias, originatingDoc) {
FILE: apps/rxjs.dev/tools/transforms/links-package/services/getLinkInfo.js
function getLinkInfoImpl (line 18) | function getLinkInfoImpl(url, title, currentDoc) {
FILE: apps/rxjs.dev/tools/transforms/remark-package/services/plugins/mapHeadings.js
function headingToLevel (line 3) | function headingToLevel(heading) {
function parseMappings (line 8) | function parseMappings(mappings) {
FILE: apps/rxjs.dev/tools/transforms/remark-package/services/renderMarkdown.js
function noIndentedCodeBlocks (line 33) | function noIndentedCodeBlocks() {
function inlineTagDefs (line 43) | function inlineTagDefs() {
function plainHTMLBlocks (line 80) | function plainHTMLBlocks() {
function matchRecursiveRegExp (line 145) | function matchRecursiveRegExp(str, left, right, flags) {
function rgxFindMatchPos (line 162) | function rgxFindMatchPos(str, left, right, flags) {
function createOpenMatcher (line 202) | function createOpenMatcher(elementNameMatcher) {
function createCloseMatcher (line 212) | function createCloseMatcher(elementNameMatcher) {
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/addUniqueId.ts
function addUniqueId (line 15) | function addUniqueId(tree: TreeNodeRaw[], depth = 0): TreeNode[] {
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/build.ts
function build (line 17) | function build(apiList: FlattenedApiList, tree: TreeNodeRaw[], log: { wa...
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/decisionTreeReducer.ts
function decisionTreeReducer (line 12) | function decisionTreeReducer(tree: TreeNode[], apiList: FlattenedApiList...
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/extractInitialSequence.ts
function extractInitialSequence (line 10) | function extractInitialSequence(tree: TreeNode[]): {id: string, options:...
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/flattenApiList.ts
function flattenApiList (line 14) | function flattenApiList(apiList: ApiListNode[]): FlattenedApiList {
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/generateUniqueId.ts
function generateUniqueId (line 10) | function generateUniqueId(): string {
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/helpers.ts
type Omit (line 3) | type Omit<T, K extends keyof T> = Pick<T, Exclude<keyof T, K>>;
function isStable (line 14) | function isStable(stability: string): boolean {
function treeNodeCount (line 25) | function treeNodeCount(tree: TreeNodeRaw[]) {
function rawNodesWithMethodCount (line 44) | function rawNodesWithMethodCount(tree: TreeNodeRaw[]): number {
function validApiRefCount (line 68) | function validApiRefCount(apiList: ApiListNode[]): number {
FILE: apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/interfaces.ts
type DocType (line 3) | type DocType =
type ApiUnion (line 12) | type ApiUnion =
type ApiListItem (line 105) | interface ApiListItem {
type ApiListNode (line 114) | interface ApiListNode {
type FlattenedApiNode (line 120) | interface FlattenedApiNode {
type FlattenedApiList (line 125) | type FlattenedApiList = {
type TreeNodeRaw (line 129) | interface TreeNodeRaw {
type TreeNode (line 135) | interface TreeNode {
type DecisionTree (line 146) | interface DecisionTree {
FILE: packages/observable/src/observable.spec.ts
function expectFullObserver (line 4) | function expectFullObserver(val: any) {
method error (line 35) | error(err) {
method error (line 164) | error() {
FILE: packages/observable/src/observable.ts
class UnsubscriptionError (line 23) | class UnsubscriptionError extends Error {
method constructor (line 28) | constructor(public errors: any[]) {
class Subscription (line 49) | class Subscription implements SubscriptionLike {
method constructor (line 71) | constructor(private initialTeardown?: () => void) {}
method unsubscribe (line 78) | unsubscribe(): void {
method add (line 134) | add(teardown: TeardownLogic): void {
method remove (line 176) | remove(teardown: Exclude<TeardownLogic, void>): void {
type Subscription (line 184) | interface Subscription {
method constructor (line 71) | constructor(private initialTeardown?: () => void) {}
method unsubscribe (line 78) | unsubscribe(): void {
method add (line 134) | add(teardown: TeardownLogic): void {
method remove (line 176) | remove(teardown: Exclude<TeardownLogic, void>): void {
function execFinalizer (line 192) | function execFinalizer(finalizer: Unsubscribable | (() => void)) {
type SubscriberOverrides (line 200) | interface SubscriberOverrides<T> {
class Subscriber (line 239) | class Subscriber<T> extends Subscription implements Observer<T> {
method constructor (line 277) | constructor(destination?: Subscriber<T> | Partial<Observer<T>> | ((val...
method next (line 317) | next(value: T): void {
method error (line 331) | error(err?: any): void {
method complete (line 345) | complete(): void {
method unsubscribe (line 354) | unsubscribe(): void {
method _next (line 362) | protected _next(value: T): void {
method _error (line 366) | protected _error(err: any): void {
method _complete (line 374) | protected _complete(): void {
type GlobalConfig (line 397) | interface GlobalConfig {
function overrideNext (line 422) | function overrideNext<T>(this: Subscriber<T>, value: T): void {
function overrideError (line 430) | function overrideError(this: Subscriber<unknown>, err: any): void {
function overrideComplete (line 440) | function overrideComplete(this: Subscriber<unknown>): void {
class ConsumerObserver (line 450) | class ConsumerObserver<T> implements Observer<T> {
method constructor (line 451) | constructor(private partialObserver: Partial<Observer<T>>) {}
method next (line 453) | next(value: T): void {
method error (line 464) | error(err: any): void {
method complete (line 477) | complete(): void {
function createSafeObserver (line 489) | function createSafeObserver<T>(observerOrNext?: Partial<Observer<T>> | (...
function handleStoppedNotification (line 498) | function handleStoppedNotification(notification: ObservableNotification<...
function hasAddAndUnsubscribe (line 503) | function hasAddAndUnsubscribe(value: any): value is Subscription {
type OperateConfig (line 507) | interface OperateConfig<In, Out> extends SubscriberOverrides<In> {
function operate (line 536) | function operate<In, Out>({ destination, ...subscriberOverrides }: Opera...
type SymbolConstructor (line 542) | interface SymbolConstructor {
class Observable (line 551) | class Observable<T> implements Subscribable<T> {
method constructor (line 558) | constructor(subscribe?: (this: Observable<T>, subscriber: Subscriber<T...
method subscribe (line 695) | subscribe(observerOrNext?: Partial<Observer<T>> | ((value: T) => void)...
method _trySubscribe (line 702) | protected _trySubscribe(sink: Subscriber<T>): TeardownLogic {
method forEach (line 757) | forEach(next: (value: T) => void): Promise<void> {
method _subscribe (line 776) | protected _subscribe(_subscriber: Subscriber<any>): TeardownLogic {
method pipe (line 883) | pipe(...operations: UnaryFunction<any, any>[]): unknown {
method [Symbol.observable ?? '@@observable'] (line 784) | [Symbol.observable ?? '@@observable']() {
method [Symbol.asyncIterator] (line 922) | [Symbol.asyncIterator](): AsyncGenerator<T, void, void> {
function pipeReducer (line 1010) | function pipeReducer(prev: any, fn: UnaryFunction<any, any>) {
function reportUnhandledError (line 1023) | function reportUnhandledError(err: any) {
function from (line 1107) | function from<T>(input: ObservableInput<T>): Observable<T> {
function fromInteropObservable (line 1131) | function fromInteropObservable<T>(obj: any) {
function fromArrayLike (line 1149) | function fromArrayLike<T>(array: ArrayLike<T>) {
function fromPromise (line 1155) | function fromPromise<T>(promise: PromiseLike<T>) {
function fromIterable (line 1171) | function fromIterable<T>(iterable: Iterable<T>) {
function fromAsyncIterable (line 1183) | function fromAsyncIterable<T>(asyncIterable: AsyncIterable<T>) {
function fromReadableStreamLike (line 1189) | function fromReadableStreamLike<T>(readableStream: ReadableStreamLike<T>) {
function process (line 1193) | async function process<T>(asyncIterable: AsyncIterable<T>, subscriber: S...
function subscribeToArray (line 1210) | function subscribeToArray<T>(array: ArrayLike<T>, subscriber: Subscriber...
type ObservableInputType (line 1231) | enum ObservableInputType {
function getObservableInputType (line 1241) | function getObservableInputType(input: unknown): ObservableInputType {
function isFunction (line 1274) | function isFunction(value: any): value is (...args: any[]) => any {
function isAsyncIterable (line 1278) | function isAsyncIterable<T>(obj: any): obj is AsyncIterable<T> {
function isReadableStreamLike (line 1297) | function isReadableStreamLike<T>(obj: any): obj is ReadableStreamLike<T> {
function isPromise (line 1307) | function isPromise(value: any): value is PromiseLike<any> {
function isInteropObservable (line 1312) | function isInteropObservable(input: any): input is InteropObservable<any> {
function isIterable (line 1317) | function isIterable(input: any): input is Iterable<any> {
function isArrayLike (line 1321) | function isArrayLike<T>(x: any): x is ArrayLike<T> {
function isObservable (line 1329) | function isObservable(obj: any): obj is Observable<unknown> {
constant COMPLETE_NOTIFICATION (line 1340) | const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, ...
function errorNotification (line 1347) | function errorNotification(error: any): ErrorNotification {
function nextNotification (line 1356) | function nextNotification<T>(value: T) {
function createNotification (line 1375) | function createNotification<T>(kind: 'N' | 'E' | 'C', value: T | undefin...
FILE: packages/observable/src/types.ts
type SymbolConstructor (line 11) | interface SymbolConstructor {
type UnaryFunction (line 25) | interface UnaryFunction<T, R> {
type OperatorFunction (line 29) | interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Ob...
type FactoryOrValue (line 31) | type FactoryOrValue<T> = T | (() => T);
type MonoTypeOperatorFunction (line 39) | interface MonoTypeOperatorFunction<T> extends OperatorFunction<T, T> {}
type Timestamp (line 48) | interface Timestamp<T> {
type TimeInterval (line 64) | interface TimeInterval<T> {
type Unsubscribable (line 77) | interface Unsubscribable {
type TeardownLogic (line 81) | type TeardownLogic = Subscription | Unsubscribable | (() => void) | void;
type SubscriptionLike (line 83) | interface SubscriptionLike extends Unsubscribable {
type Subscribable (line 90) | interface Subscribable<T> {
type ObservableInput (line 97) | type ObservableInput<T> =
type InteropObservable (line 109) | interface InteropObservable<T> {
type NextNotification (line 119) | interface NextNotification<T> {
type ErrorNotification (line 130) | interface ErrorNotification {
type CompleteNotification (line 140) | interface CompleteNotification {
type ObservableNotification (line 147) | type ObservableNotification<T> = NextNotification<T> | ErrorNotification...
type NextObserver (line 151) | interface NextObserver<T> {
type ErrorObserver (line 158) | interface ErrorObserver<T> {
type CompletionObserver (line 165) | interface CompletionObserver<T> {
type PartialObserver (line 172) | type PartialObserver<T> = NextObserver<T> | ErrorObserver<T> | Completio...
type Observer (line 181) | interface Observer<T> {
type SubjectLike (line 212) | interface SubjectLike<T> extends Observer<T>, Subscribable<T> {}
type SchedulerLike (line 216) | interface SchedulerLike extends TimestampProvider {
type SchedulerAction (line 222) | interface SchedulerAction<T> extends Subscription {
type TimestampProvider (line 229) | interface TimestampProvider {
type ObservedValueOf (line 244) | type ObservedValueOf<O> = O extends ObservableInput<infer T> ? T : never;
type ObservedValueUnionFromArray (line 254) | type ObservedValueUnionFromArray<X> = X extends Array<ObservableInput<in...
type ObservedValueTupleFromArray (line 262) | type ObservedValueTupleFromArray<X> = { [K in keyof X]: ObservedValueOf<...
type ObservableInputTuple (line 269) | type ObservableInputTuple<T> = {
type Cons (line 277) | type Cons<X, Y extends readonly any[]> = ((arg: X, ...rest: Y) => any) e...
type Head (line 283) | type Head<X extends readonly any[]> = ((...args: X) => any) extends (arg...
type Tail (line 289) | type Tail<X extends readonly any[]> = ((...args: X) => any) extends (arg...
type ValueFromArray (line 296) | type ValueFromArray<A extends readonly unknown[]> = A extends Array<infe...
type ValueFromNotification (line 301) | type ValueFromNotification<T> = T extends { kind: 'N' | 'E' | 'C' }
type Falsy (line 314) | type Falsy = null | undefined | false | 0 | -0 | 0n | '';
type TruthyTypesOf (line 316) | type TruthyTypesOf<T> = T extends Falsy ? never : T;
type ReadableStreamLike (line 323) | type ReadableStreamLike<T> = Pick<ReadableStream<T>, 'getReader'>;
type Connectable (line 329) | interface Connectable<T> extends Observable<T> {
FILE: packages/rxjs/integration/import/fixtures/browser/index.mjs
function main (line 8) | async function main() {
FILE: packages/rxjs/integration/import/fixtures/vite-bundle/src/main.ts
type Window (line 10) | interface Window {
function runTest (line 15) | function runTest() {
FILE: packages/rxjs/integration/import/fixtures/vite-bundle/test.mjs
function main (line 9) | async function main() {
FILE: packages/rxjs/integration/import/fixtures/webpack-bundle/src/main.ts
type Window (line 10) | interface Window {
function runTest (line 15) | function runTest() {
FILE: packages/rxjs/integration/import/fixtures/webpack-bundle/test.js
function main (line 9) | async function main() {
FILE: packages/rxjs/integration/import/runner.js
constant FIXTURES (line 14) | const FIXTURES = [
function execAsync (line 29) | function execAsync(cmd, cwd = '.') {
function main (line 61) | async function main() {
function addYarnResolution (line 126) | function addYarnResolution(fixturePath, name, version) {
function removeYarnResolution (line 134) | function removeYarnResolution(fixturePath, name) {
FILE: packages/rxjs/spec-dtslint/Observable-spec.ts
function a (line 32) | function a<I, O extends string>(inputOrOutput: I | O, output?: O): Opera...
FILE: packages/rxjs/spec-dtslint/helpers.ts
class A (line 3) | class A { a = 0; }
class B (line 4) | class B { b = 0; }
class C (line 5) | class C { c = 0; }
class D (line 6) | class D { d = 0; }
class E (line 7) | class E { e = 0; }
class F (line 8) | class F { f = 0; }
class G (line 9) | class G { g = 0; }
class H (line 10) | class H { h = 0; }
class I (line 11) | class I { i = 0; }
class J (line 12) | class J { j = 0; }
FILE: packages/rxjs/spec-dtslint/observables/dom/animationFrames-spec.ts
method now (line 12) | now() { return 'wee' }
FILE: packages/rxjs/spec-dtslint/observables/from-spec.ts
method pull (line 57) | pull(controller) {
FILE: packages/rxjs/spec-dtslint/observables/fromEvent-spec.ts
method addListener (line 77) | addListener(eventName: "something", handler: () => void) {}
method removeListener (line 78) | removeListener(eventName: "something", handler: () => void) {}
method on (line 98) | on(eventName: "something", handler: (this: any, b: B) => any) {}
method off (line 99) | off(eventName: "something", handler: (this: any, b: B) => any) {}
FILE: packages/rxjs/spec-dtslint/observables/iif-spec.ts
function alwaysTrueButReturnsAny (line 29) | function alwaysTrueButReturnsAny(): any {
FILE: packages/rxjs/spec-dtslint/operators/distinct-spec.ts
type Person (line 11) | interface Person { name: string; }
method [Symbol.asyncIterator] (line 35) | [Symbol.asyncIterator]() {
method [Symbol.iterator] (line 57) | [Symbol.iterator]() {
method pull (line 76) | pull(controller) {
FILE: packages/rxjs/spec-dtslint/operators/distinctUntilChanged-spec.ts
type Person (line 4) | interface Person { name: string; }
FILE: packages/rxjs/spec-dtslint/operators/filter-spec.ts
type I (line 62) | interface I {
function isDefined (line 71) | function isDefined<T>() {
function isTruthy (line 81) | function isTruthy(value: number): any {
FILE: packages/rxjs/spec-dtslint/operators/findIndex-spec.ts
function isTruthy (line 37) | function isTruthy(value: number): any {
FILE: packages/rxjs/spec-dtslint/operators/first-spec.ts
function isTruthy (line 71) | function isTruthy(value: number): any {
FILE: packages/rxjs/spec-dtslint/operators/groupBy-spec.ts
function isNumber (line 52) | function isNumber(value: string | number): value is number {
FILE: packages/rxjs/spec-dtslint/operators/last-spec.ts
function isTruthy (line 79) | function isTruthy(value: number): any {
FILE: packages/rxjs/spec-dtslint/operators/reduce-spec.ts
function toArrayReducer (line 47) | function toArrayReducer(arr: number[], item: number, index: number): num...
FILE: packages/rxjs/spec-dtslint/operators/repeatWhen-spec.ts
method [Symbol.asyncIterator] (line 29) | [Symbol.asyncIterator]() {
method [Symbol.iterator] (line 51) | [Symbol.iterator]() {
method pull (line 70) | pull(controller) {
FILE: packages/rxjs/spec-dtslint/operators/retryWhen-spec.ts
method [Symbol.asyncIterator] (line 29) | [Symbol.asyncIterator]() {
method [Symbol.iterator] (line 51) | [Symbol.iterator]() {
method pull (line 70) | pull(controller) {
FILE: packages/rxjs/spec-dtslint/operators/sample-spec.ts
method [Symbol.asyncIterator] (line 26) | [Symbol.asyncIterator]() {
method [Symbol.iterator] (line 48) | [Symbol.iterator]() {
method pull (line 67) | pull(controller) {
FILE: packages/rxjs/spec-dtslint/operators/scan-spec.ts
function toArrayReducer (line 47) | function toArrayReducer(arr: number[], item: number, index: number): num...
FILE: packages/rxjs/spec-dtslint/operators/single-spec.ts
function isTruthy (line 47) | function isTruthy(value: number): any {
FILE: packages/rxjs/spec-dtslint/operators/takeWhile-spec.ts
function isTruthy (line 35) | function isTruthy(value: number): any {
FILE: packages/rxjs/spec-dtslint/operators/zipAll-spec.ts
method next (line 32) | next(value) {
FILE: packages/rxjs/spec-dtslint/util/pipe-spec.ts
function a (line 21) | function a<I extends string, O extends string>(input: I, output: O): Una...
FILE: packages/rxjs/spec/Observable-spec.ts
method next (line 447) | next(x: any) {
method error (line 465) | error(err: any) {
method next (line 516) | next() {
method next (line 545) | next() {
method error (line 550) | error() {
method next (line 578) | next() {
method complete (line 583) | complete() {
FILE: packages/rxjs/spec/Subscriber-spec.ts
method next (line 14) | next() {
method next (line 32) | next() {
method error (line 35) | error() {
method next (line 55) | next() {
method complete (line 58) | complete() {
class CustomConsumer (line 176) | class CustomConsumer {
method next (line 180) | next(value: string) {
method next (line 209) | next() {
method complete (line 225) | complete() {
method error (line 241) | error() {
method next (line 257) | next() {
method error (line 260) | error() {
method complete (line 263) | complete() {
method next (line 279) | next() {
method error (line 282) | error() {
method complete (line 285) | complete() {
method add (line 288) | add() {
method remove (line 291) | remove() {
method unsubscribe (line 294) | unsubscribe() {
method next (line 308) | next() {
method error (line 311) | error() {
method complete (line 314) | complete() {
method next (line 358) | next() {
method error (line 396) | error() {
method complete (line 437) | complete() {
FILE: packages/rxjs/spec/Subscription-spec.ts
method unsubscribe (line 58) | unsubscribe() {
method unsubscribe (line 71) | unsubscribe() {
method unsubscribe (line 108) | unsubscribe() {
FILE: packages/rxjs/spec/helpers/interop-helper.ts
function asInteropObservable (line 10) | function asInteropObservable<T>(observable: Observable<T>): Observable<T> {
function asInteropSubject (line 34) | function asInteropSubject<T>(subject: Subject<T>): Subject<T> {
function asInteropSubscriber (line 43) | function asInteropSubscriber<T>(subscriber: Subscriber<T>): Subscriber<T> {
function interopSubscribe (line 55) | function interopSubscribe<T>(subscribe: (...args: any[]) => Subscription) {
FILE: packages/rxjs/spec/helpers/marble-testing.ts
function hot (line 11) | function hot<V>(marbles: string, values?: { [index: string]: V } | void,...
function cold (line 20) | function cold(marbles: string, values?: any, error?: any): ColdObservabl...
function expectObservable (line 27) | function expectObservable(observable: Observable<any>, unsubscriptionMar...
function expectSubscriptions (line 34) | function expectSubscriptions(actualSubscriptionLogs: SubscriptionLog[]):...
function time (line 41) | function time(marbles: string): number {
FILE: packages/rxjs/spec/helpers/observableMatcher.ts
function stringify (line 4) | function stringify(x: any): string {
function deleteErrorNotificationStack (line 19) | function deleteErrorNotificationStack(marble: any) {
function observableMatcher (line 30) | function observableMatcher(actual: any, expected: any) {
FILE: packages/rxjs/spec/helpers/subscription.ts
function getRegisteredFinalizers (line 4) | function getRegisteredFinalizers(subscription: any): Exclude<TeardownLog...
FILE: packages/rxjs/spec/helpers/test-helper.ts
function lowerCaseO (line 18) | function lowerCaseO<T>(...args: Array<any>): Observable<T> {
constant NO_SUBS (line 62) | const NO_SUBS: string[] = [];
FILE: packages/rxjs/spec/observables/bindCallback-spec.ts
function callback (line 12) | function callback(cb: () => void) {
function callback (line 31) | function callback(datum: number, cb: (v: unknown) => void) {
method next (line 40) | next(value) {
method complete (line 43) | complete() {
function callback (line 52) | function callback(datum: number, cb: (v: unknown) => void) {
method next (line 61) | next(value: any) {
method complete (line 64) | complete() {
function callback (line 73) | function callback(datum: number, cb: (result: number) => void) {
function callback (line 92) | function callback(this: any, cb: (arg: number) => void) {
function callback (line 109) | function callback(datum: number, cb: (v: unknown) => void) {
function callback (line 129) | function callback(datum: number, cb: (result: number) => void) {
function callback (line 164) | function callback(cb: () => void) {
function callback (line 185) | function callback(datum: number, cb: (result: number) => void) {
function callback (line 206) | function callback(this: { datum: number }, cb: (num: number) => void) {
function callback (line 222) | function callback(datum: number, cb: () => void): never {
function callback (line 243) | function callback(datum: number, cb: (a: number, b: number, c: number, d...
function callback (line 265) | function callback(datum: number, cb: (x: number) => void) {
function callback (line 302) | function callback(datum: number, cb: (v: unknown) => void) {
function badFunction (line 329) | function badFunction(callback: (answer: number) => void): void {
FILE: packages/rxjs/spec/observables/bindNodeCallback-spec.ts
function callback (line 18) | function callback(cb: (v: unknown) => void) {
function callback (line 38) | function callback(cb: (err: any, n: number) => any) {
function callback (line 58) | function callback(datum: number, cb: (err: any, n: number) => void) {
function callback (line 77) | function callback(this: { datum: number }, cb: (err: any, n: number) => ...
function callback (line 91) | function callback(cb: (v: unknown) => void) {
function callback (line 118) | function callback(datum: number, cb: (err: any, n: number) => void) {
function callback (line 138) | function callback(datum: number, cb: (err: any, n: number) => void) {
function callback (line 167) | function callback(cb: (v: unknown) => void) {
function callback (line 189) | function callback(datum: number, cb: (err: any, n: number) => void) {
function callback (line 210) | function callback(this: { datum: number }, cb: (err: any, n: number) => ...
function callback (line 225) | function callback(datum: number, cb: (err: any, n: number) => void) {
function callback (line 248) | function callback(cb: (v: unknown) => void) {
function callback (line 274) | function callback(datum: number, cb: (err: any, a: number, b: number, c:...
function callback (line 296) | function callback(datum: number, cb: (err: any, n: number) => void) {
function badFunction (line 332) | function badFunction(callback: (error: Error, answer: number) => void): ...
function myFunc (line 347) | function myFunc(callback: (error: any, result: any) => void) {
function callback (line 371) | function callback(datum: number, cb: (a: unknown, b: number) => void) {
FILE: packages/rxjs/spec/observables/dom/ajax-spec.ts
class MockXHREventTarget (line 1528) | class MockXHREventTarget {
method addEventListener (line 1531) | addEventListener(type: string, handler: (e: ProgressEvent) => void) {
method removeEventListener (line 1539) | removeEventListener(type: string, handler: (e: ProgressEvent) => void) {
method dispatchEvent (line 1543) | dispatchEvent(event: ProgressEvent) {
class MockXMLHttpRequest (line 1553) | class MockXMLHttpRequest extends MockXHREventTarget {
method mostRecent (line 1559) | static get mostRecent(): MockXMLHttpRequest {
method allRequests (line 1563) | static get allRequests(): Array<MockXMLHttpRequest> {
method clearRequest (line 1567) | static clearRequest(): void {
method constructor (line 1597) | constructor() {
method send (line 1605) | send(data: any): void {
method abort (line 1619) | abort() {
method open (line 1623) | open(method: any, url: any, async: any): void {
method setRequestHeader (line 1637) | setRequestHeader(key: any, value: any): void {
method getAllResponseHeaders (line 1643) | getAllResponseHeaders() {
method respondWith (line 1651) | respondWith(
method triggerEvent (line 1717) | triggerEvent(this: any, name: any, eventObj?: any): void {
method triggerUploadEvent (line 1728) | triggerUploadEvent(this: any, name: any, eventObj?: any): void {
FILE: packages/rxjs/spec/observables/dom/fetch-spec.ts
constant OK_RESPONSE (line 8) | const OK_RESPONSE = {
function mockFetchImpl (line 12) | function mockFetchImpl(input: string | Request, init?: RequestInit): Pro...
class MockDOMException (line 39) | class MockDOMException {}
class MockAbortController (line 41) | class MockAbortController {
method abort (line 44) | abort() {
method constructor (line 48) | constructor() {
method reset (line 54) | static reset() {
class MockAbortSignal (line 59) | class MockAbortSignal {
method addEventListener (line 64) | addEventListener(name: 'abort', handler: () => unknown) {
method removeEventListener (line 68) | removeEventListener(name: 'abort', handler: () => unknown) {
method _signal (line 75) | _signal() {
type MockFetch (line 83) | interface MockFetch {
FILE: packages/rxjs/spec/observables/dom/webSocket-spec.ts
type WebSocketState (line 8) | enum WebSocketState {
function setupMockWebSocket (line 19) | function setupMockWebSocket() {
function teardownMockWebSocket (line 24) | function teardownMockWebSocket() {
method next (line 421) | next(x: any) {
method next (line 453) | next(e: any) {
class MockWebSocket (line 754) | class MockWebSocket {
method lastSocket (line 756) | static get lastSocket(): MockWebSocket {
method clearSockets (line 762) | static clearSockets(): void {
method constructor (line 773) | constructor(public url: string, public protocol: string) {
method send (line 777) | send(data: string): void {
method lastMessageSent (line 781) | get lastMessageSent(): string {
method triggerClose (line 787) | triggerClose(e: Partial<CloseEvent>): void {
method triggerMessage (line 792) | triggerMessage(data: any): void {
method open (line 803) | open(): void {
method close (line 808) | close(code: any, reason: any): void {
method trigger (line 816) | trigger(this: any, name: string, e: any) {
FILE: packages/rxjs/spec/observables/empty-spec.ts
method complete (line 25) | complete() {
FILE: packages/rxjs/spec/observables/forkJoin-spec.ts
method next (line 31) | next(value) {
method error (line 34) | error(err) {
method complete (line 37) | complete() {
method next (line 48) | next(value) {
method error (line 51) | error(err) {
method complete (line 54) | complete() {
FILE: packages/rxjs/spec/observables/from-promise-spec.ts
class CustomPromise (line 68) | class CustomPromise<T> implements PromiseLike<T> {
method constructor (line 69) | constructor(private promise: PromiseLike<T>) {
method then (line 71) | then<TResult1 = T, TResult2 = T>(
FILE: packages/rxjs/spec/observables/from-spec.ts
function getArguments (line 10) | function getArguments<T>(...args: T[]) {
method pull (line 221) | pull(controller) {
method [Symbol.asyncIterator] (line 234) | [Symbol.asyncIterator]() {
method pull (line 354) | pull(controller) {
method pull (line 383) | pull(controller) {
FILE: packages/rxjs/spec/observables/fromEvent-spec.ts
method addListener (line 100) | addListener(a: string | symbol, b: (...args: any[]) => void) {
method removeListener (line 105) | removeListener(a: string | symbol, b: (...args: any[]) => void) {
method addListener (line 133) | addListener(a: string | symbol, b: (...args: any[]) => void) {
method removeListener (line 138) | removeListener(a: string | symbol, b: (...args: any[]) => void) {
method addListener (line 164) | addListener(a: string, b: (...args: any[]) => any, context?: any): { con...
method removeListener (line 169) | removeListener(a: string, b: (...args: any[]) => void) {
function selector (line 291) | function selector(x: string) {
function selector (line 323) | function selector() {
function selector (line 355) | function selector() {
function selector (line 387) | function selector(x: number, y: number, z: number) {
class NullProtoEventTarget (line 440) | class NullProtoEventTarget {
method on (line 441) | on() {
method off (line 444) | off() {
method addEventListener (line 460) | addEventListener() {
method removeEventListener (line 463) | removeEventListener() {
method addEventListener (line 468) | addEventListener() {
method removeEventListener (line 471) | removeEventListener() {
method addEventListener (line 479) | addEventListener() {
method removeEventListener (line 482) | removeEventListener() {
method addEventListener (line 504) | addEventListener(...args: any[]) {
method removeEventListener (line 507) | removeEventListener(...args: any[]) {
method addEventListener (line 514) | addEventListener(...args: any[]) {
method removeEventListener (line 517) | removeEventListener(...args: any[]) {
FILE: packages/rxjs/spec/observables/fromEventPattern-spec.ts
function addHandler (line 24) | function addHandler(h: any) {
FILE: packages/rxjs/spec/observables/generate-spec.ts
function err (line 9) | function err(): any {
FILE: packages/rxjs/spec/observables/interval-spec.ts
method next (line 79) | next(x) {
method error (line 82) | error(e) {
method complete (line 86) | complete() {
method next (line 107) | next(x) {
method error (line 110) | error(e) {
method complete (line 114) | complete() {
method next (line 135) | next(x) {
method error (line 138) | error(e) {
method complete (line 142) | complete() {
FILE: packages/rxjs/spec/observables/partition-spec.ts
function expectObservableArray (line 17) | function expectObservableArray(result: Observable<string>[], expected: s...
function predicate (line 50) | function predicate(x: string) {
function predicate (line 69) | function predicate(value: string, index: number) {
function predicate (line 88) | function predicate(this: any, x: string) {
function predicate (line 107) | function predicate(x: string) {
function predicate (line 126) | function predicate(x: string) {
function predicate (line 147) | function predicate(x: string) {
function predicate (line 170) | function predicate(x: string) {
function predicate (line 189) | function predicate(x: string) {
function predicate (line 208) | function predicate(x: string) {
function predicate (line 227) | function predicate(x: string) {
function predicate (line 246) | function predicate(x: string) {
function predicate (line 265) | function predicate(x: string) {
function predicate (line 284) | function predicate(x: string) {
function predicate (line 304) | function predicate(x: string) {
FILE: packages/rxjs/spec/operators/audit-spec.ts
function durationSelector (line 332) | function durationSelector() {
function durationSelector (line 346) | function durationSelector() {
function durationSelector (line 360) | function durationSelector() {
function durationSelector (line 374) | function durationSelector() {
function durationSelector (line 388) | function durationSelector() {
FILE: packages/rxjs/spec/operators/catchError-spec.ts
type SetTimeout (line 398) | type SetTimeout = (callback: (...args: any[]) => void, ms: number, ...ar...
FILE: packages/rxjs/spec/operators/concatMap-spec.ts
function arrayRepeat (line 667) | function arrayRepeat(value: string, times: number) {
FILE: packages/rxjs/spec/operators/debounce-spec.ts
function getTimerSelector (line 15) | function getTimerSelector(x: number) {
function selectorFunction (line 363) | function selectorFunction(x: string) {
function selectorFunction (line 385) | function selectorFunction(x: string) {
function selectorFunction (line 400) | function selectorFunction() {
FILE: packages/rxjs/spec/operators/delay-spec.ts
method next (line 245) | next() {
method complete (line 249) | complete() {
FILE: packages/rxjs/spec/operators/delayWhen-spec.ts
function durationSelector (line 32) | function durationSelector(x: any) {
FILE: packages/rxjs/spec/operators/every-spec.ts
function truePredicate (line 16) | function truePredicate(x: number | string) {
function predicate (line 20) | function predicate(x: number | string) {
function faultyPredicate (line 135) | function faultyPredicate(x: string) {
function faultyPredicate (line 183) | function faultyPredicate(x: number): boolean {
function faultyPredicate (line 214) | function faultyPredicate(x: number) {
FILE: packages/rxjs/spec/operators/expand-spec.ts
method subscribe (line 412) | subscribe(observer: Observer<number>) {
method [Symbol.observable] (line 416) | [Symbol.observable]() {
FILE: packages/rxjs/spec/operators/filter-spec.ts
function oddFilter (line 15) | function oddFilter(x: number | string) {
function isPrime (line 19) | function isPrime(i: number | string) {
function predicate (line 114) | function predicate(x: any) {
function predicate (line 133) | function predicate(x: any, i: number) {
function predicate (line 175) | function predicate(x: any, i: number) {
function predicate (line 190) | function predicate(x: any, i: number) {
function predicate (line 206) | function predicate(x: any, i: number) {
class Filterer (line 241) | class Filterer {
type Bar (line 368) | interface Bar {
type Baz (line 371) | interface Baz {
class Foo (line 374) | class Foo implements Bar, Baz {
method constructor (line 375) | constructor(public bar: string = 'name', public baz: number = 42) {}
FILE: packages/rxjs/spec/operators/finalize-spec.ts
function checkFinally (line 68) | function checkFinally() {
FILE: packages/rxjs/spec/operators/find-spec.ts
function truePredicate (line 15) | function truePredicate(x: any) {
type Bar (line 187) | interface Bar {
type Baz (line 190) | interface Baz {
class Foo (line 193) | class Foo implements Bar, Baz {
method constructor (line 194) | constructor(public bar: string = 'name', public baz: number = 42) {}
FILE: packages/rxjs/spec/operators/findIndex-spec.ts
function truePredicate (line 15) | function truePredicate(x: any) {
FILE: packages/rxjs/spec/operators/first-spec.ts
type Bar (line 240) | interface Bar {
type Baz (line 243) | interface Baz {
class Foo (line 246) | class Foo implements Bar, Baz {
method constructor (line 247) | constructor(public bar: string = 'name', public baz: number = 42) {}
FILE: packages/rxjs/spec/operators/groupBy-spec.ts
function reverseString (line 30) | function reverseString(str: string) {
function mapObject (line 34) | function mapObject<T>(obj: Record<string, T>, fn: (val: T) => unknown) {
function phonyMarbelize (line 1494) | function phonyMarbelize<T>(testScheduler: TestScheduler) {
FILE: packages/rxjs/spec/operators/last-spec.ts
type Bar (line 155) | interface Bar {
type Baz (line 158) | interface Baz {
class Foo (line 161) | class Foo implements Bar, Baz {
method constructor (line 162) | constructor(public bar: string = 'name', public baz: number = 42) {}
FILE: packages/rxjs/spec/operators/map-spec.ts
method complete (line 117) | complete() {
method complete (line 156) | complete() {
method complete (line 181) | complete() {
method error (line 206) | error() {
method complete (line 236) | complete() {
method subscribe (line 287) | subscribe(observer: Observer<number>) {
FILE: packages/rxjs/spec/operators/mergeAll-spec.ts
method next (line 507) | next() {
method return (line 510) | return() {
method [Symbol.iterator] (line 513) | [Symbol.iterator]() {
FILE: packages/rxjs/spec/operators/mergeMap-spec.ts
function arrayRepeat (line 728) | function arrayRepeat<T>(value: T, times: number): T[] {
method next (line 843) | next(value: any) {
method complete (line 846) | complete() {
method next (line 866) | next(value) {
method complete (line 869) | complete() {
method next (line 891) | next(value) {
method complete (line 894) | complete() {
FILE: packages/rxjs/spec/operators/reduce-spec.ts
method complete (line 79) | complete() {
method complete (line 96) | complete() {
FILE: packages/rxjs/spec/operators/retry-spec.ts
method next (line 51) | next(x: number) {
method error (line 54) | error() {
method next (line 76) | next() {
method error (line 79) | error() {
method complete (line 83) | complete() {
method next (line 104) | next() {
method error (line 107) | error() {
method complete (line 111) | complete() {
method next (line 135) | next(x: number) {
method error (line 138) | error() {
method complete (line 141) | complete() {
method next (line 185) | next(x: number) {
method error (line 188) | error() {
method complete (line 192) | complete() {
method next (line 217) | next(x: number) {
method error (line 220) | error() {
method next (line 363) | next(x: number) {
method error (line 366) | error(err: any) {
method complete (line 371) | complete() {
FILE: packages/rxjs/spec/operators/retryWhen-spec.ts
method next (line 81) | next(x: any) {
method error (line 84) | error(err: any) {
method next (line 104) | next(n: number) {
method error (line 107) | error() {
method complete (line 110) | complete() {
FILE: packages/rxjs/spec/operators/skipUntil-spec.ts
method next (line 50) | next(value) {
method error (line 53) | error(err) {
method complete (line 56) | complete() {
FILE: packages/rxjs/spec/operators/skipWhile-spec.ts
method complete (line 198) | complete() {
FILE: packages/rxjs/spec/operators/switchAll-spec.ts
method next (line 42) | next(x) {
method next (line 78) | next(x) {
method next (line 260) | next(x) {
method complete (line 263) | complete() {
method next (line 274) | next() {
method error (line 277) | error(err) {
method complete (line 281) | complete() {
method next (line 294) | next(x) {
method complete (line 297) | complete() {
FILE: packages/rxjs/spec/operators/switchMap-spec.ts
function project (line 79) | function project(): any[] {
FILE: packages/rxjs/spec/operators/switchMapTo-spec.ts
method next (line 36) | next(x) {
FILE: packages/rxjs/spec/operators/switchScan-spec.ts
function project (line 95) | function project(): any[] {
FILE: packages/rxjs/spec/operators/take-spec.ts
method next (line 180) | next() {
method complete (line 183) | complete() {
FILE: packages/rxjs/spec/operators/takeWhile-spec.ts
function predicate (line 90) | function predicate(value: string) {
function predicate (line 107) | function predicate(value: string) {
function predicate (line 177) | function predicate(value: string, index: number) {
function predicate (line 221) | function predicate(value: string) {
function predicate (line 245) | function predicate(value: string) {
function predicate (line 263) | function predicate(value: string) {
function predicate (line 281) | function predicate(value: string) {
type Bar (line 299) | interface Bar {
type Baz (line 302) | interface Baz {
class Foo (line 305) | class Foo implements Bar, Baz {
method constructor (line 306) | constructor(public bar: string = 'name', public baz: number = 42) {}
FILE: packages/rxjs/spec/operators/tap-spec.ts
method error (line 57) | error(ex) {
method error (line 119) | error(err: any) {
method error (line 139) | error(err) {
method error (line 188) | error(err: any) {
method error (line 204) | error(err: any) {
method error (line 218) | error(err: any) {
FILE: packages/rxjs/spec/operators/throttle-spec.ts
function durationSelector (line 316) | function durationSelector() {
function durationSelector (line 331) | function durationSelector() {
function durationSelector (line 346) | function durationSelector() {
function durationSelector (line 361) | function durationSelector() {
function durationSelector (line 376) | function durationSelector() {
FILE: packages/rxjs/spec/operators/throwIfEmpty-spec.ts
method error (line 32) | error(err) {
method error (line 47) | error(err) {
method error (line 120) | error(err) {
method error (line 134) | error(err) {
method error (line 148) | error(err) {
method error (line 220) | error(err) {
FILE: packages/rxjs/spec/operators/withLatestFrom-spec.ts
method next (line 281) | next(x: any) {
FILE: packages/rxjs/spec/operators/zipAll-spec.ts
method next (line 49) | next(x) {
method next (line 744) | next(vals) {
method next (line 765) | next(vals) {
FILE: packages/rxjs/spec/operators/zipWith-spec.ts
method next (line 472) | next(vals) {
FILE: packages/rxjs/spec/scheduled/scheduled-spec.ts
method next (line 46) | next(value) {
method complete (line 49) | complete() {
method next (line 72) | next(value) {
method complete (line 76) | complete() { results.push('done'); }
FILE: packages/rxjs/spec/schedulers/AsapScheduler-spec.ts
type State (line 69) | type State = typeof state;
function dispatch (line 70) | function dispatch(this: SchedulerAction<State>, state: State): void {
type State (line 95) | type State = typeof state;
function dispatch (line 96) | function dispatch(this: SchedulerAction<State>, state: State): void {
FILE: packages/rxjs/spec/schedulers/dateTimestampProvider-spec.ts
method now (line 16) | now() {
FILE: packages/rxjs/spec/subjects/AsyncSubject-spec.ts
class TestObserver (line 5) | class TestObserver implements Observer<number> {
method next (line 8) | next(value: number): void {
method error (line 12) | error(err: any): void {
method complete (line 16) | complete(): void {
FILE: packages/rxjs/spec/subjects/BehaviorSubject-spec.ts
function feedNextIntoSubject (line 162) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 165) | function feedErrorIntoSubject(err: any) {
function feedCompleteIntoSubject (line 168) | function feedCompleteIntoSubject() {
function feedNextIntoSubject (line 194) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 197) | function feedErrorIntoSubject(err: any) {
function feedCompleteIntoSubject (line 200) | function feedCompleteIntoSubject() {
FILE: packages/rxjs/spec/subjects/ReplaySubject-spec.ts
function feedNextIntoSubject (line 120) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 123) | function feedErrorIntoSubject(err: string) {
function feedCompleteIntoSubject (line 126) | function feedCompleteIntoSubject() {
function feedNextIntoSubject (line 152) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 155) | function feedErrorIntoSubject(err: string) {
function feedCompleteIntoSubject (line 158) | function feedCompleteIntoSubject() {
function feedNextIntoSubject (line 250) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 253) | function feedErrorIntoSubject(err: any) {
function feedCompleteIntoSubject (line 256) | function feedCompleteIntoSubject() {
function feedNextIntoSubject (line 282) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 285) | function feedErrorIntoSubject(err: any) {
function feedCompleteIntoSubject (line 288) | function feedCompleteIntoSubject() {
function feedNextIntoSubject (line 306) | function feedNextIntoSubject(x: string) {
function feedErrorIntoSubject (line 309) | function feedErrorIntoSubject(err: any) {
function feedCompleteIntoSubject (line 312) | function feedCompleteIntoSubject() {
FILE: packages/rxjs/spec/util/isObservable-spec.ts
method lift (line 12) | lift() { /* noop */ }
method subscribe (line 13) | subscribe() { /* noop */ }
method subscribe (line 21) | subscribe() { /* noop */ }
FILE: packages/rxjs/src/internal/AnyCatcher.ts
type AnyCatcher (line 14) | type AnyCatcher = typeof anyCatcherSymbol;
FILE: packages/rxjs/src/internal/AsyncSubject.ts
class AsyncSubject (line 8) | class AsyncSubject<T> extends Subject<T> {
method _checkFinalizedStatuses (line 14) | protected _checkFinalizedStatuses(subscriber: Subscriber<T>) {
method next (line 24) | next(value: T): void {
method complete (line 31) | complete(): void {
FILE: packages/rxjs/src/internal/BehaviorSubject.ts
class BehaviorSubject (line 8) | class BehaviorSubject<T> extends Subject<T> {
method constructor (line 9) | constructor(private _value: T) {
method value (line 13) | get value(): T {
method _subscribe (line 18) | protected _subscribe(subscriber: Subscriber<T>): Subscription {
method getValue (line 24) | getValue(): T {
method next (line 32) | next(value: T): void {
FILE: packages/rxjs/src/internal/Notification.ts
function observeNotification (line 10) | function observeNotification<T>(notification: ObservableNotification<T>,...
FILE: packages/rxjs/src/internal/Operator.ts
type Operator (line 7) | interface Operator<T, R> {
FILE: packages/rxjs/src/internal/ReplaySubject.ts
class ReplaySubject (line 36) | class ReplaySubject<T> extends Subject<T> {
method constructor (line 46) | constructor(
method next (line 57) | next(value: T): void {
method _subscribe (line 68) | protected _subscribe(subscriber: Subscriber<T>): Subscription {
method _trimBuffer (line 86) | private _trimBuffer() {
FILE: packages/rxjs/src/internal/Scheduler.ts
class Scheduler (line 24) | class Scheduler implements SchedulerLike {
method constructor (line 27) | constructor(private schedulerActionCtor: typeof Action, now: () => num...
method schedule (line 57) | public schedule<T>(work: (this: SchedulerAction<T>, state?: T) => void...
FILE: packages/rxjs/src/internal/Subject.ts
class Subject (line 12) | class Subject<T> extends Observable<T> implements SubscriptionLike {
method closed (line 19) | get closed() {
method observers (line 34) | get observers(): Observer<T>[] {
method constructor (line 44) | constructor() {
method _clearObservers (line 49) | protected _clearObservers() {
method next (line 54) | next(value: T) {
method error (line 64) | error(err: any) {
method complete (line 77) | complete() {
method unsubscribe (line 89) | unsubscribe() {
method observed (line 94) | get observed() {
method _subscribe (line 99) | protected _subscribe(subscriber: Subscriber<T>): Subscription {
method _innerSubscribe (line 105) | protected _innerSubscribe(subscriber: Subscriber<any>) {
method _checkFinalizedStatuses (line 122) | protected _checkFinalizedStatuses(subscriber: Subscriber<any>) {
method asObservable (line 137) | asObservable(): Observable<T> {
FILE: packages/rxjs/src/internal/ajax/AjaxResponse.ts
class AjaxResponse (line 17) | class AjaxResponse<T> {
method constructor (line 64) | constructor(
FILE: packages/rxjs/src/internal/ajax/ajax.ts
type AjaxCreationMethod (line 7) | interface AjaxCreationMethod {
function ajaxGet (line 138) | function ajaxGet<T>(url: string, headers?: Record<string, string>): Obse...
function ajaxPost (line 142) | function ajaxPost<T>(url: string, body?: any, headers?: Record<string, s...
function ajaxDelete (line 146) | function ajaxDelete<T>(url: string, headers?: Record<string, string>): O...
function ajaxPut (line 150) | function ajaxPut<T>(url: string, body?: any, headers?: Record<string, st...
function ajaxPatch (line 154) | function ajaxPatch<T>(url: string, body?: any, headers?: Record<string, ...
function ajaxGetJSON (line 160) | function ajaxGetJSON<T>(url: string, headers?: Record<string, string>): ...
constant UPLOAD (line 289) | const UPLOAD = 'upload';
constant DOWNLOAD (line 290) | const DOWNLOAD = 'download';
constant LOADSTART (line 291) | const LOADSTART = 'loadstart';
constant PROGRESS (line 292) | const PROGRESS = 'progress';
constant LOAD (line 293) | const LOAD = 'load';
function fromAjax (line 295) | function fromAjax<T>(init: AjaxConfig): Observable<AjaxResponse<T>> {
function extractContentTypeAndMaybeSerializeBody (line 540) | function extractContentTypeAndMaybeSerializeBody(body: any, headers: Rec...
function toStringCheck (line 579) | function toStringCheck(obj: any, name: string): boolean {
function isArrayBuffer (line 583) | function isArrayBuffer(body: any): body is ArrayBuffer {
function isFile (line 587) | function isFile(body: any): body is File {
function isBlob (line 591) | function isBlob(body: any): body is Blob {
function isArrayBufferView (line 595) | function isArrayBufferView(body: any): body is ArrayBufferView {
function isFormData (line 599) | function isFormData(body: any): body is FormData {
function isURLSearchParams (line 603) | function isURLSearchParams(body: any): body is URLSearchParams {
function isReadableStream (line 607) | function isReadableStream(body: any): body is ReadableStream {
FILE: packages/rxjs/src/internal/ajax/errors.ts
class AjaxError (line 11) | class AjaxError extends Error {
method constructor (line 42) | constructor(message: string, xhr: XMLHttpRequest, request: AjaxRequest) {
class AjaxTimeoutError (line 62) | class AjaxTimeoutError extends AjaxError {
method constructor (line 67) | constructor(xhr: XMLHttpRequest, request: AjaxRequest) {
FILE: packages/rxjs/src/internal/ajax/types.ts
type AjaxDirection (line 8) | type AjaxDirection = 'upload' | 'download';
type ProgressEventType (line 10) | type ProgressEventType = 'loadstart' | 'progress' | 'load';
type AjaxResponseType (line 12) | type AjaxResponseType = `${AjaxDirection}_${ProgressEventType}`;
type AjaxRequest (line 20) | interface AjaxRequest {
type AjaxConfig (line 82) | interface AjaxConfig {
FILE: packages/rxjs/src/internal/firstValueFrom.ts
type FirstValueFromConfig (line 5) | interface FirstValueFromConfig<T> {
function firstValueFrom (line 56) | function firstValueFrom<T, D>(source: Observable<T>, config?: FirstValue...
FILE: packages/rxjs/src/internal/lastValueFrom.ts
type LastValueFromConfig (line 4) | interface LastValueFromConfig<T> {
function lastValueFrom (line 54) | function lastValueFrom<T, D>(source: Observable<T>, config?: LastValueFr...
FILE: packages/rxjs/src/internal/observable/bindCallback.ts
function bindCallback (line 143) | function bindCallback(
FILE: packages/rxjs/src/internal/observable/bindCallbackInternals.ts
function bindCallbackInternals (line 8) | function bindCallbackInternals(
FILE: packages/rxjs/src/internal/observable/bindNodeCallback.ts
function bindNodeCallback (line 125) | function bindNodeCallback(
FILE: packages/rxjs/src/internal/observable/combineLatest.ts
function combineLatest (line 165) | function combineLatest<O extends ObservableInput<any>, R>(
function combineLatestInit (line 196) | function combineLatestInit(observables: ObservableInput<any>[], valueTra...
FILE: packages/rxjs/src/internal/observable/concat.ts
function concat (line 114) | function concat(...args: any[]): Observable<unknown> {
FILE: packages/rxjs/src/internal/observable/connectable.ts
type ConnectableConfig (line 7) | interface ConnectableConfig<T> {
constant DEFAULT_CONFIG (line 27) | const DEFAULT_CONFIG: ConnectableConfig<unknown> = {
function connectable (line 40) | function connectable<T>(source: ObservableInput<T>, config: ConnectableC...
FILE: packages/rxjs/src/internal/observable/defer.ts
function defer (line 50) | function defer<R extends ObservableInput<any>>(observableFactory: () => ...
FILE: packages/rxjs/src/internal/observable/dom/WebSocketSubject.ts
type WebSocketSubjectConfig (line 102) | interface WebSocketSubjectConfig<In, Out = In> {
constant DEFAULT_WEBSOCKET_CONFIG (line 142) | const DEFAULT_WEBSOCKET_CONFIG = {
constant WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT (line 147) | const WEBSOCKETSUBJECT_INVALID_ERROR_OBJECT =
type WebSocketMessage (line 150) | type WebSocketMessage = string | ArrayBuffer | Blob | ArrayBufferView;
class WebSocketSubject (line 152) | class WebSocketSubject<In, Out = In> extends Observable<Out> {
method observed (line 170) | get observed() {
method constructor (line 174) | constructor(urlConfigOrSource: string | WebSocketSubjectConfig<In, Out...
method _resetState (line 191) | private _resetState() {
method multiplex (line 219) | multiplex(subMsg: () => In, unsubMsg: () => In, messageFilter: (value:...
method #outputNext (line 238) | #outputNext(value: Out) {
method #outputError (line 244) | #outputError(err: any) {
method #outputComplete (line 251) | #outputComplete() {
method _connectSocket (line 258) | private _connectSocket() {
method next (line 323) | next(value: In) {
method error (line 335) | error(err: any) {
method complete (line 350) | complete() {
method #closeSocket (line 358) | #closeSocket() {
method _subscribe (line 368) | protected _subscribe(subscriber: Subscriber<Out>): Subscription {
method unsubscribe (line 383) | unsubscribe() {
FILE: packages/rxjs/src/internal/observable/dom/animationFrames.ts
function animationFrames (line 75) | function animationFrames(timestampProvider?: TimestampProvider) {
function animationFramesFactory (line 83) | function animationFramesFactory(timestampProvider?: TimestampProvider) {
constant DEFAULT_ANIMATION_FRAMES (line 132) | const DEFAULT_ANIMATION_FRAMES = animationFramesFactory();
FILE: packages/rxjs/src/internal/observable/dom/fetch.ts
function fromFetch (line 93) | function fromFetch<T>(
FILE: packages/rxjs/src/internal/observable/dom/webSocket.ts
function webSocket (line 182) | function webSocket<In, Out = In>(urlConfigOrSource: string | WebSocketSu...
FILE: packages/rxjs/src/internal/observable/empty.ts
constant EMPTY (line 65) | const EMPTY = new Observable<never>((subscriber) => subscriber.complete());
FILE: packages/rxjs/src/internal/observable/forkJoin.ts
function forkJoin (line 144) | function forkJoin(...args: any[]): Observable<any> {
FILE: packages/rxjs/src/internal/observable/fromEvent.ts
type NodeStyleEventEmitter (line 10) | interface NodeStyleEventEmitter {
type NodeEventHandler (line 15) | type NodeEventHandler = (...args: any[]) => void;
type NodeCompatibleEventEmitter (line 20) | interface NodeCompatibleEventEmitter {
type JQueryStyleEventEmitter (line 30) | interface JQueryStyleEventEmitter<TContext, T> {
type EventListenerObject (line 35) | interface EventListenerObject<E> {
type HasEventTargetAddRemove (line 39) | interface HasEventTargetAddRemove<E> {
type EventListenerOptions (line 52) | interface EventListenerOptions {
type AddEventListenerOptions (line 58) | interface AddEventListenerOptions extends EventListenerOptions {
function fromEvent (line 241) | function fromEvent<T>(
function doSubscribe (line 279) | function doSubscribe(
function getRegistryMethodNames (line 294) | function getRegistryMethodNames(target: any) {
function isNodeStyleEventEmitter (line 311) | function isNodeStyleEventEmitter(target: any): target is NodeStyleEventE...
function isJQueryStyleEventEmitter (line 320) | function isJQueryStyleEventEmitter(target: any): target is JQueryStyleEv...
function isEventTarget (line 329) | function isEventTarget(target: any): target is HasEventTargetAddRemove<a...
FILE: packages/rxjs/src/internal/observable/fromEventPattern.ts
function fromEventPattern (line 135) | function fromEventPattern<T>(
FILE: packages/rxjs/src/internal/observable/fromSubscribable.ts
function fromSubscribable (line 15) | function fromSubscribable<T>(subscribable: Subscribable<T>) {
FILE: packages/rxjs/src/internal/observable/generate.ts
type ConditionFunc (line 8) | type ConditionFunc<S> = (state: S) => boolean;
type IterateFunc (line 9) | type IterateFunc<S> = (state: S) => S;
type ResultFunc (line 10) | type ResultFunc<S, T> = (state: S) => T;
type GenerateBaseOptions (line 12) | interface GenerateBaseOptions<S> {
type GenerateOptions (line 34) | interface GenerateOptions<T, S> extends GenerateBaseOptions<S> {
function generate (line 336) | function generate<T, S>(
FILE: packages/rxjs/src/internal/observable/iif.ts
function iif (line 83) | function iif<T, F>(condition: () => boolean, trueResult: ObservableInput...
FILE: packages/rxjs/src/internal/observable/interval.ts
function interval (line 50) | function interval(period = 0, scheduler: SchedulerLike = asyncScheduler)...
FILE: packages/rxjs/src/internal/observable/merge.ts
function merge (line 87) | function merge(...args: (ObservableInput<unknown> | number | SchedulerLi...
FILE: packages/rxjs/src/internal/observable/never.ts
constant NEVER (line 37) | const NEVER = new Observable<never>(noop);
FILE: packages/rxjs/src/internal/observable/of.ts
function of (line 72) | function of<T>(...values: T[]): Observable<T> {
FILE: packages/rxjs/src/internal/observable/onErrorResumeNext.ts
function onErrorResumeNext (line 71) | function onErrorResumeNext<A extends readonly unknown[]>(
FILE: packages/rxjs/src/internal/observable/partition.ts
function partition (line 79) | function partition<T>(
FILE: packages/rxjs/src/internal/observable/race.ts
function race (line 48) | function race<T>(...sources: (ObservableInput<T> | ObservableInput<T>[])...
function raceInit (line 59) | function raceInit<T>(sources: ObservableInput<T>[]) {
FILE: packages/rxjs/src/internal/observable/range.ts
function range (line 56) | function range(start: number, count?: number, scheduler?: SchedulerLike)...
FILE: packages/rxjs/src/internal/observable/throwError.ts
function throwError (line 95) | function throwError(errorFactory: () => any): Observable<never> {
FILE: packages/rxjs/src/internal/observable/timer.ts
function timer (line 134) | function timer(
FILE: packages/rxjs/src/internal/observable/using.ts
function using (line 31) | function using<T extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/observable/zip.ts
function zip (line 51) | function zip(...args: unknown[]): Observable<unknown> {
FILE: packages/rxjs/src/internal/operators/audit.ts
function audit (line 50) | function audit<T>(durationSelector: (value: T) => ObservableInput<any>):...
FILE: packages/rxjs/src/internal/operators/auditTime.ts
function auditTime (line 53) | function auditTime<T>(duration: number, scheduler: SchedulerLike = async...
FILE: packages/rxjs/src/internal/operators/buffer.ts
function buffer (line 43) | function buffer<T>(closingNotifier: ObservableInput<any>): OperatorFunct...
FILE: packages/rxjs/src/internal/operators/bufferCount.ts
function bufferCount (line 56) | function bufferCount<T>(bufferSize: number, startBufferEvery: number | n...
FILE: packages/rxjs/src/internal/operators/bufferTime.ts
function bufferTime (line 73) | function bufferTime<T>(bufferTimeSpan: number, ...otherArgs: any[]): Ope...
FILE: packages/rxjs/src/internal/operators/bufferToggle.ts
function bufferToggle (line 49) | function bufferToggle<T, O>(
FILE: packages/rxjs/src/internal/operators/bufferWhen.ts
function bufferWhen (line 44) | function bufferWhen<T>(closingSelector: () => ObservableInput<any>): Ope...
FILE: packages/rxjs/src/internal/operators/catchError.ts
function catchError (line 101) | function catchError<T, O extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/operators/combineLatestAll.ts
function combineLatestAll (line 48) | function combineLatestAll<R>(project?: (...values: Array<any>) => R) {
FILE: packages/rxjs/src/internal/operators/combineLatestWith.ts
function combineLatestWith (line 45) | function combineLatestWith<T, A extends readonly unknown[]>(
FILE: packages/rxjs/src/internal/operators/concatAll.ts
function concatAll (line 60) | function concatAll<O extends ObservableInput<any>>(): OperatorFunction<O...
FILE: packages/rxjs/src/internal/operators/concatMap.ts
function concatMap (line 60) | function concatMap<T, O extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/operators/concatMapTo.ts
function concatMapTo (line 60) | function concatMapTo<O extends ObservableInput<unknown>>(innerObservable...
FILE: packages/rxjs/src/internal/operators/concatWith.ts
function concatWith (line 45) | function concatWith<T, A extends readonly unknown[]>(
FILE: packages/rxjs/src/internal/operators/connect.ts
type ConnectConfig (line 9) | interface ConnectConfig<T> {
constant DEFAULT_CONFIG (line 20) | const DEFAULT_CONFIG: ConnectConfig<unknown> = {
function connect (line 97) | function connect<T, O extends ObservableInput<unknown>>(
FILE: packages/rxjs/src/internal/operators/count.ts
function count (line 59) | function count<T>(predicate?: (value: T, index: number) => boolean): Ope...
FILE: packages/rxjs/src/internal/operators/debounce.ts
function debounce (line 64) | function debounce<T>(durationSelector: (value: T) => ObservableInput<any...
FILE: packages/rxjs/src/internal/operators/debounceTime.ts
function debounceTime (line 63) | function debounceTime<T>(dueTime: number, scheduler: SchedulerLike = asy...
FILE: packages/rxjs/src/internal/operators/defaultIfEmpty.ts
function defaultIfEmpty (line 39) | function defaultIfEmpty<T, R>(defaultValue: R): OperatorFunction<T, T | ...
FILE: packages/rxjs/src/internal/operators/delay.ts
function delay (line 62) | function delay<T>(due: number | Date, scheduler: SchedulerLike = asyncSc...
FILE: packages/rxjs/src/internal/operators/delayWhen.ts
function delayWhen (line 92) | function delayWhen<T>(
FILE: packages/rxjs/src/internal/operators/dematerialize.ts
function dematerialize (line 53) | function dematerialize<N extends ObservableNotification<any>>(): Operato...
FILE: packages/rxjs/src/internal/operators/distinct.ts
function distinct (line 62) | function distinct<T, K>(keySelector?: (value: T) => K, flushes?: Observa...
FILE: packages/rxjs/src/internal/operators/distinctUntilChanged.ts
function distinctUntilChanged (line 138) | function distinctUntilChanged<T, K>(
function defaultCompare (line 183) | function defaultCompare(a: any, b: any) {
FILE: packages/rxjs/src/internal/operators/distinctUntilKeyChanged.ts
function distinctUntilKeyChanged (line 70) | function distinctUntilKeyChanged<T, K extends keyof T>(
FILE: packages/rxjs/src/internal/operators/elementAt.ts
function elementAt (line 54) | function elementAt<T, D = T>(index: number, defaultValue?: D): OperatorF...
FILE: packages/rxjs/src/internal/operators/endWith.ts
function endWith (line 52) | function endWith<T, A extends readonly unknown[] = T[]>(...values: A): O...
FILE: packages/rxjs/src/internal/operators/every.ts
function every (line 32) | function every<T>(predicate: (value: T, index: number) => boolean): Oper...
FILE: packages/rxjs/src/internal/operators/exhaustAll.ts
function exhaustAll (line 49) | function exhaustAll<O extends ObservableInput<any>>(): OperatorFunction<...
FILE: packages/rxjs/src/internal/operators/exhaustMap.ts
function exhaustMap (line 48) | function exhaustMap<T, O extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/operators/expand.ts
function expand (line 60) | function expand<T, O extends ObservableInput<unknown>>(
FILE: packages/rxjs/src/internal/operators/filter.ts
function filter (line 60) | function filter<T>(predicate: (value: T, index: number) => boolean, this...
FILE: packages/rxjs/src/internal/operators/finalize.ts
function finalize (line 65) | function finalize<T>(callback: () => void): MonoTypeOperatorFunction<T> {
FILE: packages/rxjs/src/internal/operators/find.ts
function find (line 50) | function find<T>(predicate: (value: T, index: number, source: Observable...
function createFind (line 54) | function createFind<T>(
FILE: packages/rxjs/src/internal/operators/findIndex.ts
function findIndex (line 49) | function findIndex<T>(predicate: (value: T, index: number, source: Obser...
FILE: packages/rxjs/src/internal/operators/first.ts
function first (line 79) | function first<T, D>(
FILE: packages/rxjs/src/internal/operators/groupBy.ts
type BasicGroupByOptions (line 5) | interface BasicGroupByOptions<K, T> {
type GroupByOptionsWithElement (line 11) | interface GroupByOptionsWithElement<K, E, T> {
function groupBy (line 138) | function groupBy<T, K, R>(
type GroupedObservable (line 252) | interface GroupedObservable<K, T> extends Observable<T> {
FILE: packages/rxjs/src/internal/operators/ignoreElements.ts
function ignoreElements (line 40) | function ignoreElements(): OperatorFunction<unknown, never> {
FILE: packages/rxjs/src/internal/operators/isEmpty.ts
function isEmpty (line 65) | function isEmpty<T>(): OperatorFunction<T, boolean> {
FILE: packages/rxjs/src/internal/operators/joinAllInternals.ts
function joinAllInternals (line 19) | function joinAllInternals<T, R>(joinFn: (sources: ObservableInput<T>[]) ...
FILE: packages/rxjs/src/internal/operators/last.ts
function last (line 75) | function last<T, D>(
FILE: packages/rxjs/src/internal/operators/map.ts
function map (line 39) | function map<T, R>(project: (value: T, index: number) => R): OperatorFun...
FILE: packages/rxjs/src/internal/operators/mapTo.ts
function mapTo (line 46) | function mapTo<R>(value: R): OperatorFunction<unknown, R> {
FILE: packages/rxjs/src/internal/operators/materialize.ts
function materialize (line 52) | function materialize<T>(): OperatorFunction<T, ObservableNotification<T>> {
FILE: packages/rxjs/src/internal/operators/max.ts
function max (line 52) | function max<T>(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunc...
FILE: packages/rxjs/src/internal/operators/mergeAll.ts
function mergeAll (line 64) | function mergeAll<O extends ObservableInput<any>>(concurrent: number = I...
FILE: packages/rxjs/src/internal/operators/mergeInternals.ts
function mergeInternals (line 18) | function mergeInternals<T, R>(
FILE: packages/rxjs/src/internal/operators/mergeMap.ts
function mergeMap (line 58) | function mergeMap<T, O extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/operators/mergeMapTo.ts
function mergeMapTo (line 45) | function mergeMapTo<O extends ObservableInput<unknown>>(
FILE: packages/rxjs/src/internal/operators/mergeScan.ts
function mergeScan (line 70) | function mergeScan<T, R>(
FILE: packages/rxjs/src/internal/operators/mergeWith.ts
function mergeWith (line 46) | function mergeWith<T, A extends readonly unknown[]>(
FILE: packages/rxjs/src/internal/operators/min.ts
function min (line 52) | function min<T>(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunc...
FILE: packages/rxjs/src/internal/operators/observeOn.ts
function observeOn (line 57) | function observeOn<T>(scheduler: SchedulerLike, delay = 0): MonoTypeOper...
FILE: packages/rxjs/src/internal/operators/onErrorResumeNextWith.ts
function onErrorResumeNextWith (line 84) | function onErrorResumeNextWith<T, A extends readonly unknown[]>(
FILE: packages/rxjs/src/internal/operators/pairwise.ts
function pairwise (line 47) | function pairwise<T>(): OperatorFunction<T, [T, T]> {
FILE: packages/rxjs/src/internal/operators/partition.ts
function partition (line 56) | function partition<T>(
FILE: packages/rxjs/src/internal/operators/raceWith.ts
function raceWith (line 32) | function raceWith<T, A extends readonly unknown[]>(
FILE: packages/rxjs/src/internal/operators/reduce.ts
function reduce (line 59) | function reduce<V, A>(accumulator: (acc: V | A, value: V, index: number)...
FILE: packages/rxjs/src/internal/operators/repeat.ts
type RepeatConfig (line 7) | interface RepeatConfig {
function repeat (line 114) | function repeat<T>(countOrConfig?: number | RepeatConfig): MonoTypeOpera...
FILE: packages/rxjs/src/internal/operators/repeatWhen.ts
function repeatWhen (line 40) | function repeatWhen<T>(notifier: (notifications: Observable<void>) => Ob...
FILE: packages/rxjs/src/internal/operators/retry.ts
type RetryConfig (line 11) | interface RetryConfig {
function retry (line 82) | function retry<T>(configOrCount: number | RetryConfig = Infinity): MonoT...
FILE: packages/rxjs/src/internal/operators/retryWhen.ts
function retryWhen (line 62) | function retryWhen<T>(notifier: (errors: Observable<any>) => ObservableI...
FILE: packages/rxjs/src/internal/operators/sample.ts
function sample (line 45) | function sample<T>(notifier: ObservableInput<any>): MonoTypeOperatorFunc...
FILE: packages/rxjs/src/internal/operators/sampleTime.ts
function sampleTime (line 49) | function sampleTime<T>(period: number, scheduler: SchedulerLike = asyncS...
FILE: packages/rxjs/src/internal/operators/scan.ts
function scan (line 88) | function scan<V, A, S>(accumulator: (acc: V | A | S, value: V, index: nu...
FILE: packages/rxjs/src/internal/operators/scanInternals.ts
function scanInternals (line 13) | function scanInternals<V, A, S>(
FILE: packages/rxjs/src/internal/operators/sequenceEqual.ts
function sequenceEqual (line 61) | function sequenceEqual<T>(
type SequenceState (line 129) | interface SequenceState<T> {
function createState (line 140) | function createState<T>(): SequenceState<T> {
FILE: packages/rxjs/src/internal/operators/share.ts
type ShareConfig (line 6) | interface ShareConfig<T> {
function share (line 139) | function share<T>(options: ShareConfig<T> = {}): MonoTypeOperatorFunctio...
function handleReset (line 234) | function handleReset<T extends unknown[] = never[]>(
FILE: packages/rxjs/src/internal/operators/shareReplay.ts
type ShareReplayConfig (line 5) | interface ShareReplayConfig {
function shareReplay (line 154) | function shareReplay<T>(
FILE: packages/rxjs/src/internal/operators/single.ts
function single (line 91) | function single<T>(predicate?: (value: T, index: number, source: Observa...
FILE: packages/rxjs/src/internal/operators/skip.ts
function skip (line 37) | function skip<T>(count: number): MonoTypeOperatorFunction<T> {
FILE: packages/rxjs/src/internal/operators/skipLast.ts
function skipLast (line 47) | function skipLast<T>(skipCount: number): MonoTypeOperatorFunction<T> {
FILE: packages/rxjs/src/internal/operators/skipUntil.ts
function skipUntil (line 50) | function skipUntil<T>(notifier: ObservableInput<any>): MonoTypeOperatorF...
FILE: packages/rxjs/src/internal/operators/skipWhile.ts
function skipWhile (line 51) | function skipWhile<T>(predicate: (value: T, index: number) => boolean): ...
FILE: packages/rxjs/src/internal/operators/startWith.ts
function startWith (line 47) | function startWith<T, D>(...values: D[]): OperatorFunction<T, T | D> {
FILE: packages/rxjs/src/internal/operators/subscribeOn.ts
function subscribeOn (line 63) | function subscribeOn<T>(scheduler: SchedulerLike, delay: number = 0): Mo...
FILE: packages/rxjs/src/internal/operators/switchAll.ts
function switchAll (line 63) | function switchAll<O extends ObservableInput<any>>(): OperatorFunction<O...
FILE: packages/rxjs/src/internal/operators/switchMap.ts
function switchMap (line 66) | function switchMap<T, O extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/operators/switchMapTo.ts
function switchMapTo (line 43) | function switchMapTo<O extends ObservableInput<unknown>>(innerObservable...
FILE: packages/rxjs/src/internal/operators/switchScan.ts
function switchScan (line 24) | function switchScan<T, R, O extends ObservableInput<any>>(
FILE: packages/rxjs/src/internal/operators/take.ts
function take (line 47) | function take<T>(count: number): MonoTypeOperatorFunction<T> {
FILE: packages/rxjs/src/internal/operators/takeLast.ts
function takeLast (line 44) | function takeLast<T>(count: number): MonoTypeOperatorFunction<T> {
FILE: packages/rxjs/src/internal/operators/takeUntil.ts
function takeUntil (line 43) | function takeUntil<T>(notifier: ObservableInput<any>): MonoTypeOperatorF...
FILE: packages/rxjs/src/internal/operators/takeWhile.ts
function takeWhile (line 54) | function takeWhile<T>(predicate: (value: T, index: number) => boolean, i...
FILE: packages/rxjs/src/internal/operators/tap.ts
type TapObserver (line 50) | interface TapObserver<T> extends Observer<T> {
function tap (line 156) | function tap<T>(observerOrNext?: Partial<TapObserver<T>> | ((value: T) =...
FILE: packages/rxjs/src/internal/operators/throttle.ts
type ThrottleConfig (line 12) | interface ThrottleConfig {
function throttle (line 81) | function throttle<T>(durationSelector: (value: T) => ObservableInput<any...
FILE: packages/rxjs/src/internal/operators/throttleTime.ts
function throttleTime (line 56) | function throttleTime<T>(
FILE: packages/rxjs/src/internal/operators/throwIfEmpty.ts
function throwIfEmpty (line 41) | function throwIfEmpty<T>(errorFactory: () => any = defaultErrorFactory):...
function defaultErrorFactory (line 58) | function defaultErrorFactory() {
FILE: packages/rxjs/src/internal/operators/timeInterval.ts
function timeInterval (line 44) | function timeInterval<T>(scheduler: SchedulerLike = asyncScheduler): Ope...
class TimeInterval (line 65) | class TimeInterval<T> {
method constructor (line 69) | constructor(public value: T, public interval: number) {}
FILE: packages/rxjs/src/internal/operators/timeout.ts
type TimeoutConfig (line 8) | interface TimeoutConfig<T, O extends ObservableInput<unknown> = Observab...
type TimeoutInfo (line 41) | interface TimeoutInfo<T, M = unknown> {
class TimeoutError (line 60) | class TimeoutError<T, M> extends Error {
method constructor (line 70) | constructor(public info: TimeoutInfo<T, M> | null = null) {
function timeout (line 279) | function timeout<T, O extends ObservableInput<any>, M>(
function timeoutErrorFactory (line 379) | function timeoutErrorFactory(info: TimeoutInfo<any>): Observable<never> {
FILE: packages/rxjs/src/internal/operators/timeoutWith.ts
function timeoutWith (line 83) | function timeoutWith<T, R>(
FILE: packages/rxjs/src/internal/operators/timestamp.ts
function timestamp (line 37) | function timestamp<T>(timestampProvider: TimestampProvider = dateTimesta...
FILE: packages/rxjs/src/internal/operators/toArray.ts
function toArray (line 37) | function toArray<T>(): OperatorFunction<T, T[]> {
FILE: packages/rxjs/src/internal/operators/window.ts
function window (line 50) | function window<T>(windowBoundaries: ObservableInput<any>): OperatorFunc...
FILE: packages/rxjs/src/internal/operators/windowCount.ts
function windowCount (line 66) | function windowCount<T>(windowSize: number, startWindowEvery: number = 0...
FILE: packages/rxjs/src/internal/operators/windowTime.ts
function windowTime (line 103) | function windowTime<T>(windowTimeSpan: number, ...otherArgs: any[]): Ope...
type WindowRecord (line 201) | interface WindowRecord<T> {
FILE: packages/rxjs/src/internal/operators/windowToggle.ts
function windowToggle (line 52) | function windowToggle<T, O>(
FILE: packages/rxjs/src/internal/operators/windowWhen.ts
function windowWhen (line 54) | function windowWhen<T>(closingSelector: () => ObservableInput<any>): Ope...
FILE: packages/rxjs/src/internal/operators/withLatestFrom.ts
function withLatestFrom (line 57) | function withLatestFrom<T, R>(...inputs: any[]): OperatorFunction<T, R |...
FILE: packages/rxjs/src/internal/operators/zipAll.ts
function zipAll (line 18) | function zipAll<T, R>(project?: (...values: T[]) => R) {
FILE: packages/rxjs/src/internal/operators/zipWith.ts
function zipWith (line 28) | function zipWith<T, A extends readonly unknown[]>(...otherInputs: [...Ob...
FILE: packages/rxjs/src/internal/scheduled/scheduleArray.ts
function scheduleArray (line 5) | function scheduleArray<T>(input: ArrayLike<T>, scheduler: SchedulerLike) {
FILE: packages/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts
function scheduleAsyncIterable (line 5) | function scheduleAsyncIterable<T>(input: AsyncIterable<T>, scheduler: Sc...
FILE: packages/rxjs/src/internal/scheduled/scheduleIterable.ts
function scheduleIterable (line 11) | function scheduleIterable<T>(input: Iterable<T>, scheduler: SchedulerLik...
FILE: packages/rxjs/src/internal/scheduled/scheduleObservable.ts
function scheduleObservable (line 6) | function scheduleObservable<T>(input: InteropObservable<T>, scheduler: S...
FILE: packages/rxjs/src/internal/scheduled/schedulePromise.ts
function schedulePromise (line 6) | function schedulePromise<T>(input: PromiseLike<T>, scheduler: SchedulerL...
FILE: packages/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts
function scheduleReadableStreamLike (line 6) | function scheduleReadableStreamLike<T>(input: ReadableStreamLike<T>, sch...
FILE: packages/rxjs/src/internal/scheduled/scheduled.ts
function scheduled (line 22) | function scheduled<T>(input: ObservableInput<T>, scheduler: SchedulerLik...
FILE: packages/rxjs/src/internal/scheduler/Action.ts
class Action (line 17) | class Action<T> extends Subscription {
method constructor (line 18) | constructor(scheduler: Scheduler, work: (this: SchedulerAction<T>, sta...
method schedule (line 31) | public schedule(state?: T, delay: number = 0): Subscription {
FILE: packages/rxjs/src/internal/scheduler/AnimationFrameAction.ts
class AnimationFrameAction (line 7) | class AnimationFrameAction<T> extends AsyncAction<T> {
method constructor (line 8) | constructor(protected scheduler: AnimationFrameScheduler, protected wo...
method requestAsyncId (line 12) | protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: Time...
method recycleAsyncId (line 25) | protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: Time...
FILE: packages/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts
class AnimationFrameScheduler (line 4) | class AnimationFrameScheduler extends AsyncScheduler {
method flush (line 5) | public flush(action?: AsyncAction<any>): void {
FILE: packages/rxjs/src/internal/scheduler/AsapAction.ts
class AsapAction (line 7) | class AsapAction<T> extends AsyncAction<T> {
method constructor (line 8) | constructor(protected scheduler: AsapScheduler, protected work: (this:...
method requestAsyncId (line 12) | protected requestAsyncId(scheduler: AsapScheduler, id?: TimerHandle, d...
method recycleAsyncId (line 25) | protected recycleAsyncId(scheduler: AsapScheduler, id?: TimerHandle, d...
FILE: packages/rxjs/src/internal/scheduler/AsapScheduler.ts
class AsapScheduler (line 4) | class AsapScheduler extends AsyncScheduler {
method flush (line 5) | public flush(action?: AsyncAction<any>): void {
FILE: packages/rxjs/src/internal/scheduler/AsyncAction.ts
class AsyncAction (line 9) | class AsyncAction<T> extends Action<T> {
method constructor (line 15) | constructor(protected scheduler: AsyncScheduler, protected work: (this...
method schedule (line 19) | public schedule(state?: T, delay: number = 0): Subscription {
method requestAsyncId (line 66) | protected requestAsyncId(scheduler: AsyncScheduler, _id?: TimerHandle,...
method recycleAsyncId (line 70) | protected recycleAsyncId(_scheduler: AsyncScheduler, id?: TimerHandle,...
method execute (line 87) | public execute(state: T, delay: number): any {
method _execute (line 114) | protected _execute(state: T, _delay: number): any {
method unsubscribe (line 132) | unsubscribe() {
FILE: packages/rxjs/src/internal/scheduler/AsyncScheduler.ts
class AsyncScheduler (line 6) | class AsyncScheduler extends Scheduler {
method constructor (line 22) | constructor(SchedulerAction: typeof Action, now: () => number = Schedu...
method flush (line 26) | public flush(action: AsyncAction<any>): void {
FILE: packages/rxjs/src/internal/scheduler/QueueAction.ts
class QueueAction (line 7) | class QueueAction<T> extends AsyncAction<T> {
method constructor (line 8) | constructor(protected scheduler: QueueScheduler, protected work: (this...
method schedule (line 12) | public schedule(state?: T, delay: number = 0): Subscription {
method execute (line 22) | public execute(state: T, delay: number): any {
method requestAsyncId (line 26) | protected requestAsyncId(scheduler: QueueScheduler, id?: TimerHandle, ...
FILE: packages/rxjs/src/internal/scheduler/QueueScheduler.ts
class QueueScheduler (line 3) | class QueueScheduler extends AsyncScheduler {}
FILE: packages/rxjs/src/internal/scheduler/VirtualTimeScheduler.ts
class VirtualTimeScheduler (line 7) | class VirtualTimeScheduler extends AsyncScheduler {
method constructor (line 32) | constructor(schedulerActionCtor: typeof AsyncAction = VirtualAction as...
method flush (line 40) | public flush(): void {
class VirtualAction (line 63) | class VirtualAction<T> extends AsyncAction<T> {
method constructor (line 66) | constructor(
method schedule (line 75) | public schedule(state?: T, delay: number = 0): Subscription {
method requestAsyncId (line 95) | protected requestAsyncId(scheduler: VirtualTimeScheduler, id?: any, de...
method recycleAsyncId (line 103) | protected recycleAsyncId(scheduler: VirtualTimeScheduler, id?: any, de...
method _execute (line 107) | protected _execute(state: T, delay: number): any {
method sortActions (line 113) | private static sortActions<T>(a: VirtualAction<T>, b: VirtualAction<T>) {
FILE: packages/rxjs/src/internal/scheduler/animationFrameProvider.ts
type AnimationFrameProvider (line 3) | interface AnimationFrameProvider {
method schedule (line 18) | schedule(callback) {
method requestAnimationFrame (line 35) | requestAnimationFrame(...args) {
method cancelAnimationFrame (line 39) | cancelAnimationFrame(...args) {
FILE: packages/rxjs/src/internal/scheduler/dateTimestampProvider.ts
type DateTimestampProvider (line 3) | interface DateTimestampProvider extends TimestampProvider {
method now (line 8) | now() {
FILE: packages/rxjs/src/internal/scheduler/immediateProvider.ts
type SetImmediateFunction (line 5) | type SetImmediateFunction = (handler: () => void, ...args: any[]) => Tim...
type ClearImmediateFunction (line 6) | type ClearImmediateFunction = (handle: TimerHandle) => void;
type ImmediateProvider (line 8) | interface ImmediateProvider {
method setImmediate (line 22) | setImmediate(...args) {
method clearImmediate (line 26) | clearImmediate(handle) {
FILE: packages/rxjs/src/internal/scheduler/intervalProvider.ts
type SetIntervalFunction (line 2) | type SetIntervalFunction = (handler: () => void, timeout?: number, ...ar...
type ClearIntervalFunction (line 3) | type ClearIntervalFunction = (handle: TimerHandle) => void;
type IntervalProvider (line 5) | interface IntervalProvider {
method setInterval (line 19) | setInterval(handler: () => void, timeout?: number, ...args) {
method clearInterval (line 26) | clearInterval(handle) {
FILE: packages/rxjs/src/internal/scheduler/performanceTimestampProvider.ts
type PerformanceTimestampProvider (line 3) | interface PerformanceTimestampProvider extends TimestampProvider {
method now (line 8) | now() {
FILE: packages/rxjs/src/internal/scheduler/timeoutProvider.ts
type SetTimeoutFunction (line 2) | type SetTimeoutFunction = (handler: () => void, timeout?: number, ...arg...
type ClearTimeoutFunction (line 3) | type ClearTimeoutFunction = (handle: TimerHandle) => void;
type TimeoutProvider (line 5) | interface TimeoutProvider {
method setTimeout (line 19) | setTimeout(handler: () => void, timeout?: number, ...args) {
method clearTimeout (line 26) | clearTimeout(handle) {
FILE: packages/rxjs/src/internal/scheduler/timerHandle.ts
type TimerHandle (line 1) | type TimerHandle = number | ReturnType<typeof setTimeout>;
FILE: packages/rxjs/src/internal/symbol/iterator.ts
function getSymbolIterator (line 1) | function getSymbolIterator(): symbol {
FILE: packages/rxjs/src/internal/testing/ColdObservable.ts
class ColdObservable (line 9) | class ColdObservable<T> extends Observable<T> {
method _subscribe (line 14) | protected _subscribe(subscriber: Subscriber<any>): TeardownLogic {
method constructor (line 26) | constructor(public messages: TestMessage[], public scheduler: Schedule...
method scheduleMessages (line 30) | scheduleMessages(subscriber: Subscriber<any>) {
FILE: packages/rxjs/src/internal/testing/HotObservable.ts
class HotObservable (line 10) | class HotObservable<T> extends Subject<T> {
method constructor (line 17) | constructor(public messages: TestMessage[], public scheduler: Schedule...
method _subscribe (line 22) | protected _subscribe(subscriber: Subscriber<any>): Subscription {
method setup (line 34) | setup() {
FILE: packages/rxjs/src/internal/testing/TestMessage.ts
type TestMessage (line 3) | interface TestMessage {
FILE: packages/rxjs/src/internal/testing/TestScheduler.ts
type RunHelpers (line 19) | interface RunHelpers {
type FlushableTest (line 29) | interface FlushableTest {
type observableToBeFn (line 35) | type observableToBeFn = (marbles: string, values?: any, errorValue?: any...
type subscriptionLogsToBeFn (line 36) | type subscriptionLogsToBeFn = (marbles: string | string[]) => void;
class TestScheduler (line 38) | class TestScheduler extends VirtualTimeScheduler {
method constructor (line 71) | constructor(public assertDeepEqual: (actual: any, expected: any) => bo...
method createTime (line 75) | createTime(marbles: string): number {
method createColdObservable (line 88) | createColdObservable<T = string>(marbles: string, values?: { [marble: ...
method createHotObservable (line 106) | createHotObservable<T = string>(marbles: string, values?: { [marble: s...
method materializeInnerObservable (line 116) | private materializeInnerObservable(observable: Observable<any>, outerF...
method expectObservable (line 132) | expectObservable<T>(observable: Observable<T>, subscriptionMarbles: st...
method expectSubscriptions (line 194) | expectSubscriptions(actualSubscriptionLogs: SubscriptionLog[]): { toBe...
method flush (line 209) | flush() {
method parseMarblesAsSubscriptions (line 226) | static parseMarblesAsSubscriptions(marbles: string | null, runMode = f...
method parseMarbles (line 323) | static parseMarbles(
method createAnimator (line 437) | private createAnimator() {
method createDelegates (line 500) | private createDelegates() {
method run (line 650) | run<T>(callback: (helpers: RunHelpers) => T): T {
FILE: packages/rxjs/src/internal/testing/subscription-logging.ts
type SubscriptionLoggingProps (line 1) | interface SubscriptionLoggingProps {
class SubscriptionLog (line 6) | class SubscriptionLog {
method constructor (line 7) | constructor(public subscribedFrame: number, public unsubscribedFrame: ...
function logUnsubscribedFrame (line 10) | function logUnsubscribedFrame(this: SubscriptionLoggingProps, index: num...
function logSubscribedFrame (line 16) | function logSubscribedFrame(this: SubscriptionLoggingProps): number {
FILE: packages/rxjs/src/internal/types.ts
type SymbolConstructor (line 11) | interface SymbolConstructor {
type UnaryFunction (line 25) | interface UnaryFunction<T, R> {
type OperatorFunction (line 29) | interface OperatorFunction<T, R> extends UnaryFunction<Observable<T>, Ob...
type FactoryOrValue (line 31) | type FactoryOrValue<T> = T | (() => T);
type MonoTypeOperatorFunction (line 39) | interface MonoTypeOperatorFunction<T> extends OperatorFunction<T, T> {}
type Timestamp (line 48) | interface Timestamp<T> {
type TimeInterval (line 64) | interface TimeInterval<T> {
type Unsubscribable (line 77) | interface Unsubscribable {
type TeardownLogic (line 81) | type TeardownLogic = Subscription | Unsubscribable | (() => void) | void;
type SubscriptionLike (line 83) | interface SubscriptionLike extends Unsubscribable {
type Subscribable (line 90) | interface Subscribable<T> {
type ObservableInput (line 97) | type ObservableInput<T> =
type InteropObservable (line 109) | interface InteropObservable<T> {
type NextNotification (line 119) | interface NextNotification<T> {
type ErrorNotification (line 130) | interface ErrorNotification {
type CompleteNotification (line 140) | interface CompleteNotification {
type ObservableNotification (line 147) | type ObservableNotification<T> = NextNotification<T> | ErrorNotification...
type NextObserver (line 151) | interface NextObserver<T> {
type ErrorObserver (line 158) | interface ErrorObserver<T> {
type CompletionObserver (line 165) | interface CompletionObserver<T> {
type PartialObserver (line 172) | type PartialObserver<T> = NextObserver<T> | ErrorObserver<T> | Completio...
type Observer (line 181) | interface Observer<T> {
type SubjectLike (line 212) | interface SubjectLike<T> extends Observer<T>, Subscribable<T> {}
type SchedulerLike (line 216) | interface SchedulerLike extends TimestampProvider {
type SchedulerAction (line 222) | interface SchedulerAction<T> extends Subscription {
type TimestampProvider (line 229) | interface TimestampProvider {
type ObservedValueOf (line 244) | type ObservedValueOf<O> = O extends ObservableInput<infer T> ? T : never;
type ObservedValueUnionFromArray (line 254) | type ObservedValueUnionFromArray<X> = X extends Array<ObservableInput<in...
type ObservedValueTupleFromArray (line 262) | type ObservedValueTupleFromArray<X> = { [K in keyof X]: ObservedValueOf<...
type ObservableInputTuple (line 269) | type ObservableInputTuple<T> = {
type Cons (line 277) | type Cons<X, Y extends readonly any[]> = ((arg: X, ...rest: Y) => any) e...
type Head (line 283) | type Head<X extends readonly any[]> = ((...args: X) => any) extends (arg...
type Tail (line 289) | type Tail<X extends readonly any[]> = ((...args: X) => any) extends (arg...
type ValueFromArray (line 296) | type ValueFromArray<A extends readonly unknown[]> = A extends Array<infe...
type ValueFromNotification (line 301) | type ValueFromNotification<T> = T extends { kind: 'N' | 'E' | 'C' }
type Falsy (line 314) | type Falsy = null | undefined | false | 0 | -0 | 0n | '';
type TruthyTypesOf (line 316) | type TruthyTypesOf<T> = T extends Falsy ? never : T;
type ReadableStreamLike (line 323) | type ReadableStreamLike<T> = Pick<ReadableStream<T>, 'getReader'>;
type Connectable (line 329) | interface Connectable<T> extends Observable<T> {
FILE: packages/rxjs/src/internal/util/ArgumentOutOfRangeError.ts
class ArgumentOutOfRangeError (line 9) | class ArgumentOutOfRangeError extends Error {
method constructor (line 14) | constructor() {
FILE: packages/rxjs/src/internal/util/EmptyError.ts
class EmptyError (line 11) | class EmptyError extends Error {
method constructor (line 16) | constructor() {
FILE: packages/rxjs/src/internal/util/Immediate.ts
function findAndClearHandle (line 11) | function findAndClearHandle(handle: number): boolean {
method setImmediate (line 23) | setImmediate(cb: () => void): number {
method clearImmediate (line 33) | clearImmediate(handle: number): void {
method pending (line 42) | pending() {
FILE: packages/rxjs/src/internal/util/NotFoundError.ts
class NotFoundError (line 7) | class NotFoundError extends Error {
method constructor (line 12) | constructor(message: string) {
FILE: packages/rxjs/src/internal/util/SequenceError.ts
class SequenceError (line 7) | class SequenceError extends Error {
method constructor (line 12) | constructor(message: string) {
FILE: packages/rxjs/src/internal/util/args.ts
function last (line 5) | function last<T>(arr: T[]): T | undefined {
function popResultSelector (line 9) | function popResultSelector(args: any[]): ((...args: unknown[]) => unknow...
function popScheduler (line 13) | function popScheduler(args: any[]): SchedulerLike | undefined {
function popNumber (line 17) | function popNumber(args: any[], defaultValue: number): number {
FILE: packages/rxjs/src/internal/util/argsArgArrayOrObject.ts
function argsArgArrayOrObject (line 10) | function argsArgArrayOrObject<T, O extends Record<string, T>>(args: T[] ...
function arrayOrObject (line 22) | function arrayOrObject<T, O extends Record<string, T>>(first: T | T[] | ...
function isPOJO (line 36) | function isPOJO(obj: any): obj is object {
FILE: packages/rxjs/src/internal/util/argsOrArgArray.ts
function argsOrArgArray (line 7) | function argsOrArgArray<T>(args: (T | T[])[]): T[] {
FILE: packages/rxjs/src/internal/util/arrRemove.ts
function arrRemove (line 6) | function arrRemove<T>(arr: T[] | undefined | null, item: T) {
FILE: packages/rxjs/src/internal/util/createObject.ts
function createObject (line 1) | function createObject(keys: string[], values: any[]) {
FILE: packages/rxjs/src/internal/util/executeSchedule.ts
function executeSchedule (line 4) | function executeSchedule(
FILE: packages/rxjs/src/internal/util/identity.ts
function identity (line 43) | function identity<T>(x: T): T {
FILE: packages/rxjs/src/internal/util/isDate.ts
function isValidDate (line 8) | function isValidDate(value: any): value is Date {
FILE: packages/rxjs/src/internal/util/isScheduler.ts
function isScheduler (line 4) | function isScheduler(value: any): value is SchedulerLike {
FILE: packages/rxjs/src/internal/util/mapOneOrManyArgs.ts
function callOrApply (line 6) | function callOrApply<T, R>(fn: (...values: T[]) => R, args: T | T[]): R {
function mapOneOrManyArgs (line 14) | function mapOneOrManyArgs<T, R>(fn: (...values: T[]) => R): OperatorFunc...
FILE: packages/rxjs/src/internal/util/noop.ts
function noop (line 1) | function noop() { }
FILE: packages/rxjs/src/internal/util/not.ts
function not (line 1) | function not<T>(pred: (value: T, index: number) => boolean, thisArg: any...
FILE: packages/rxjs/src/internal/util/pipe.ts
function pipe (line 77) | function pipe(...fns: Array<UnaryFunction<any, any>>): UnaryFunction<any...
function pipeReducer (line 81) | function pipeReducer(prev: any, fn: UnaryFunction<any, any>): any {
FILE: packages/rxjs/src/internal/util/rx.ts
function rx (line 115) | function rx(source: ObservableInput<unknown>, ...fns: UnaryFunction<any,...
function pipeReducer (line 119) | function pipeReducer(prev: any, fn: UnaryFunction<any, any>) {
FILE: packages/rxjs/src/internal/util/throwUnobservableError.ts
function createInvalidObservableTypeError (line 5) | function createInvalidObservableTypeError(input: any) {
FILE: packages/rxjs/tools/add-license-to-file.js
function addLicenseTextToFile (line 3) | function addLicenseTextToFile(licenseText, destination) {
function addLicenseToFile (line 19) | function addLicenseToFile(license, destination) {
FILE: packages/rxjs/tools/subject-benchmark.js
function run (line 6) | async function run() {
FILE: scripts/publish.js
constant DIST_TAGS (line 11) | const DIST_TAGS = {
function isPrerelease (line 75) | function isPrerelease(version) {
FILE: scripts/release.js
function getRemoteFor (line 90) | function getRemoteFor(url) {
Condensed preview — 1068 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (4,467K chars).
[
{
"path": ".editorconfig",
"chars": 110,
"preview": "root = true\r\n\r\n[*]\r\nend_of_line = lf\r\nindent_size = 2\r\nindent_style = space\r\ntrim_trailing_whitespace = true\r\n"
},
{
"path": ".eslintignore",
"chars": 41,
"preview": "packages/rxjs/integration/import/fixtures"
},
{
"path": ".eslintrc.json",
"chars": 1244,
"preview": "{\n \"root\": true,\n \"ignorePatterns\": [\"**/*\"],\n \"plugins\": [\"@nx\"],\n \"overrides\": [\n {\n \"files\": [\"*.ts\", \"*."
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yml",
"chars": 1379,
"preview": "name: Bug Report\ndescription: Bug report for RxJS core behavior.\nbody:\n - type: textarea\n id: description\n attrib"
},
{
"path": ".github/ISSUE_TEMPLATE/config.yml",
"chars": 230,
"preview": "blank_issues_enabled: false\ncontact_links:\n - name: Questions, request, issues other than Rx core bugs\n url: https:/"
},
{
"path": ".github/PULL_REQUEST_TEMPLATE.md",
"chars": 1102,
"preview": "<!--\nThank you very much for your pull request!\n\nIf your PR is the addition of a new operator, please make sure all thes"
},
{
"path": ".github/actions/install-dependencies/action.yml",
"chars": 1122,
"preview": "name: Install Dependencies\ndescription: 'Prepares the repo by installing dependencies'\ninputs:\n node-version:\n descr"
},
{
"path": ".github/lock.yml",
"chars": 685,
"preview": "# Configuration for lock-threads - https://github.com/dessant/lock-threads\n\n# Number of days of inactivity before a clos"
},
{
"path": ".github/workflows/ci_main.yml",
"chars": 1167,
"preview": "name: CI\n\non:\n pull_request:\n types: ['opened', 'reopened', 'synchronize']\n\npermissions:\n contents: read\n\njobs:\n b"
},
{
"path": ".github/workflows/ci_ts_latest.yml",
"chars": 582,
"preview": "name: CI (ts@latest)\n\non:\n pull_request:\n types: ['opened', 'reopened', 'synchronize']\n\npermissions:\n contents: rea"
},
{
"path": ".github/workflows/publish.yml",
"chars": 1225,
"preview": "name: publish\n\non:\n # Run manually using the GitHub UI\n workflow_dispatch:\n inputs:\n version:\n descript"
},
{
"path": ".github/workflows/rebase.yml",
"chars": 950,
"preview": "on: \n issue_comment:\n types: [created]\npermissions:\n contents: read\nname: Automatic Rebase\njobs:\n rebase:\n perm"
},
{
"path": ".gitignore",
"chars": 529,
"preview": "# Editor-specific\n.idea/\n*.iml\n*.sublime-project\n*.sublime-workspace\n.settings\n.vscode\n\n# Installed libs\nnode_modules/\nt"
},
{
"path": ".prettierrc.json",
"chars": 360,
"preview": "{\n \"trailingComma\": \"es5\",\n \"singleQuote\": true,\n \"printWidth\": 140,\n \"overrides\": [\n {\n \"files\": [\"spec/**/"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3280,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 10780,
"preview": "# Contributing to RxJS\n\n[Read and abide by the Code of Conduct](CODE_OF_CONDUCT.md)! Even if you don't read it,\nit still"
},
{
"path": "LICENSE.txt",
"chars": 11109,
"preview": " Apache License\n Version 2.0, January 2004\n h"
},
{
"path": "README.md",
"chars": 2565,
"preview": "# <img src=\"apps/rxjs.dev/src/assets/images/logos/Rx_Logo_S.png\" alt=\"RxJS Logo\" width=\"86\" height=\"86\"> RxJS: Reactive "
},
{
"path": "SECURITY.md",
"chars": 891,
"preview": "# Security Policy\n\n## Supported Versions\n\nSecurity updates are applied only to the latest release.\n\n## Reporting a Vulne"
},
{
"path": "apps/rxjs.dev/.browserslistrc",
"chars": 473,
"preview": "# This file is used by the build system to adjust CSS and JS output to support the specified browsers below.\n# For addit"
},
{
"path": "apps/rxjs.dev/.eslintrc.js",
"chars": 3206,
"preview": "module.exports = {\n root: true,\n overrides: [\n {\n files: ['*.ts'],\n parserOptions: {\n project: ['."
},
{
"path": "apps/rxjs.dev/.firebaserc",
"chars": 124,
"preview": "{\n \"targets\": {\n \"rxjs-dev\": {\n \"hosting\": {\n \"stable\": [\n \"rxjs-dev\"\n ]\n }\n }\n "
},
{
"path": "apps/rxjs.dev/.gitignore",
"chars": 646,
"preview": "# See http://help.github.com/ignore-files/ for more about ignoring files.\n\n# compiled output\n/dist\n/out-tsc\n/src/generat"
},
{
"path": "apps/rxjs.dev/README.md",
"chars": 6022,
"preview": "# RxJS documentation project\n\nEverything in this folder is part of the documentation project. This includes\n\n- the web s"
},
{
"path": "apps/rxjs.dev/angular.json",
"chars": 7368,
"preview": "{\n \"$schema\": \"../../node_modules/@angular/cli/lib/config/schema.json\",\n \"version\": 1,\n \"cli\": {\n \"packageManager\""
},
{
"path": "apps/rxjs.dev/content/6-to-7-change-summary.md",
"chars": 22326,
"preview": "# RxJS 6.x to 7.x Detailed Change List\n\nThis document contains a detailed list of changes between RxJS 6.x and RxJS 7.x,"
},
{
"path": "apps/rxjs.dev/content/blackLivesMatter.md",
"chars": 2702,
"preview": "<style>\n .blm-background {\n background-color: black; \n color: white; \n display: flex; \n m"
},
{
"path": "apps/rxjs.dev/content/code-of-conduct.md",
"chars": 3280,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "apps/rxjs.dev/content/deprecations/array-argument.md",
"chars": 802,
"preview": "# Array Arguments\n\nTo unify the API surface of `forkJoin` and `combineLatest` we deprecated some signatures.\nSince that "
},
{
"path": "apps/rxjs.dev/content/deprecations/breaking-changes.md",
"chars": 10266,
"preview": "# Breaking Changes in Version 7\n\n## General\n\n- **TS:** RxJS requires TS 4.2\n\n- **rxjs-compat:** `rxjs-compat` is not pub"
},
{
"path": "apps/rxjs.dev/content/deprecations/index.md",
"chars": 655,
"preview": "# Deprecations and Breaking Changes\n\nWhile the core team always tries to limit changes, sometimes we have to deprecate A"
},
{
"path": "apps/rxjs.dev/content/deprecations/multicasting.md",
"chars": 12028,
"preview": "# Multicasting\n\nIn version 7, the multicasting APIs were simplified to just a few functions:\n\n- [connectable](/api/index"
},
{
"path": "apps/rxjs.dev/content/deprecations/resultSelector.md",
"chars": 1407,
"preview": "# ResultSelector Parameter\n\nSome operator supported a resultSelector argument that acted as mapping function on the resu"
},
{
"path": "apps/rxjs.dev/content/deprecations/scheduler-argument.md",
"chars": 3148,
"preview": "# Scheduler Argument\n\nTo limit the API surface of some operators, but also prepare for a [major refactoring in V8](https"
},
{
"path": "apps/rxjs.dev/content/deprecations/subscribe-arguments.md",
"chars": 2345,
"preview": "# Subscribe Arguments\n\nYou might have seen that we deprecated some signatures of the `subscribe` method, which might hav"
},
{
"path": "apps/rxjs.dev/content/deprecations/to-promise.md",
"chars": 4264,
"preview": "# Conversion to Promises\n\nThe similarity between Observables and Promises is that both [collections](/guide/observable) "
},
{
"path": "apps/rxjs.dev/content/file-not-found.md",
"chars": 323,
"preview": "@description\n\n<div class=\"nf-container l-flex-wrap flex-center\">\n <img src=\"assets/images/support/rxjs-404.png\" width"
},
{
"path": "apps/rxjs.dev/content/guide/core-semantics.md",
"chars": 4593,
"preview": "# RxJS Core Semantics\n\nStarting in version 8, all RxJS operators that are provided in the core library MUST meet the fol"
},
{
"path": "apps/rxjs.dev/content/guide/glossary-and-semantics.md",
"chars": 14319,
"preview": "# RxJS: Glossary And Semantics\n\nWhen discussing and documenting observables, it's important to have a common language an"
},
{
"path": "apps/rxjs.dev/content/guide/higher-order-observables.md",
"chars": 2030,
"preview": "# Higher-order Observables\n\nObservables most commonly emit ordinary values like strings and numbers, but surprisingly of"
},
{
"path": "apps/rxjs.dev/content/guide/importing.md",
"chars": 6047,
"preview": "# Importing instructions\n\nThere are different ways you can {@link guide/installation install} RxJS. Using/importing RxJS"
},
{
"path": "apps/rxjs.dev/content/guide/installation.md",
"chars": 2257,
"preview": "# Installation Instructions\n\nHere are different ways you can install RxJS:\n\n## ES2015 via npm\n\n```shell\nnpm install rxjs"
},
{
"path": "apps/rxjs.dev/content/guide/observable.md",
"chars": 16361,
"preview": "# Observable\n\nObservables are lazy Push collections of multiple values. They fill the missing spot in the following tabl"
},
{
"path": "apps/rxjs.dev/content/guide/observer.md",
"chars": 1656,
"preview": "# Observer\n\n**What is an Observer?** An Observer is a consumer of values delivered by an Observable. Observers are simpl"
},
{
"path": "apps/rxjs.dev/content/guide/operators.md",
"chars": 15792,
"preview": "# RxJS Operators\n\nRxJS is mostly useful for its _operators_, even though the Observable is the foundation. Operators are"
},
{
"path": "apps/rxjs.dev/content/guide/overview.md",
"chars": 4606,
"preview": "# Introduction\n\nRxJS is a library for composing asynchronous and event-based programs by using observable sequences. It "
},
{
"path": "apps/rxjs.dev/content/guide/scheduler.md",
"chars": 8296,
"preview": "# Scheduler\n\n**What is a Scheduler?** A scheduler controls when a subscription starts and when notifications are deliver"
},
{
"path": "apps/rxjs.dev/content/guide/subject.md",
"chars": 12808,
"preview": "# Subject\n\n**What is a Subject?** An RxJS Subject is a special type of Observable that allows values to be multicasted t"
},
{
"path": "apps/rxjs.dev/content/guide/subscription.md",
"chars": 1642,
"preview": "# Subscription\n\n**What is a Subscription?** A Subscription is an object that represents a disposable resource, usually t"
},
{
"path": "apps/rxjs.dev/content/guide/testing/marble-testing.md",
"chars": 18392,
"preview": "# Testing RxJS Code with Marble Diagrams\n\n<div class=\"alert is-helpful\">\n <span>This guide refers to usage of marble di"
},
{
"path": "apps/rxjs.dev/content/license.md",
"chars": 1134,
"preview": "@title\n@description\nThe MIT License\n\nCopyright (c) 2014-2018 Google, Inc., RxJS Team Members and Contributors\n\nPermissio"
},
{
"path": "apps/rxjs.dev/content/maintainer-guidelines.md",
"chars": 2929,
"preview": "# Maintainer Guidelines\n\nThese are guidelines for maintainers of this repository as (mostly) [gifted to us by](https://g"
},
{
"path": "apps/rxjs.dev/content/marketing/announcements.json",
"chars": 332,
"preview": "[\n {\n \"startDate\": \"2019-12-20\",\n \"endDate\": \"2020-03-20\",\n \"message\": \"<strong style=\\\"font-weight: 700\\\" cla"
},
{
"path": "apps/rxjs.dev/content/marketing/api.html",
"chars": 63,
"preview": "<h1 class=\"no-toc\">API List</h1>\n<aio-api-list></aio-api-list>\n"
},
{
"path": "apps/rxjs.dev/content/marketing/contributors.json",
"chars": 5751,
"preview": "{\n \"ben\": {\n \"name\": \"Ben Lesh\",\n \"role\": \"Developer\",\n \"github\": \"https://github.com/benlesh\",\n \"picture\":"
},
{
"path": "apps/rxjs.dev/content/marketing/index.html",
"chars": 2721,
"preview": "<!-- FULL HEADER BLOCK -->\n<header>\n\n <!-- BACKGROUND IMAGE -->\n <div class=\"hero\"></div>\n\n <!-- INTRO SECTION -->\n "
},
{
"path": "apps/rxjs.dev/content/marketing/operator-decision-tree.html",
"chars": 57,
"preview": "<aio-operator-decision-tree></aio-operator-decision-tree>"
},
{
"path": "apps/rxjs.dev/content/marketing/team.html",
"chars": 47,
"preview": "<aio-contributor-list></aio-contributor-list>\r\n"
},
{
"path": "apps/rxjs.dev/content/navigation.json",
"chars": 2933,
"preview": "{\n \"TopBar\": [\n {\n \"url\": \"guide/overview\",\n \"title\": \"Overview\"\n },\n {\n \"url\": \"api\",\n \"t"
},
{
"path": "apps/rxjs.dev/content/operator-decision-tree.yml",
"chars": 15304,
"preview": "- label: 'I have one existing Observable, and'\n children:\n - label: I want to change each emitted value\n childr"
},
{
"path": "apps/rxjs.dev/database.rules.json",
"chars": 79,
"preview": "{\n \"rules\": {\n \".read\": \"auth != null\",\n \".write\": \"auth != null\"\n }\n}\n"
},
{
"path": "apps/rxjs.dev/firebase.json",
"chars": 1575,
"preview": "{\n \"database\": {\n \"rules\": \"database.rules.json\"\n },\n \"hosting\": {\n \"public\": \"dist\",\n \"target\": \"stable\",\n "
},
{
"path": "apps/rxjs.dev/ngsw-config.json",
"chars": 1952,
"preview": "{\n \"index\": \"/index.html\",\n \"assetGroups\": [\n {\n \"name\": \"app-shell\",\n \"installMode\": \"prefetch\",\n \""
},
{
"path": "apps/rxjs.dev/package.json",
"chars": 5546,
"preview": "{\n \"name\": \"rxjs.dev\",\n \"version\": \"1.0.0\",\n \"main\": \"index.js\",\n \"repository\": \"git@github.com:ReactiveX/rxjs.git\","
},
{
"path": "apps/rxjs.dev/scripts/_payload-limits.json",
"chars": 175,
"preview": "{\n \"aio\": {\n \"master\": {\n \"uncompressed\": {\n \"inline\": 1971,\n \"main\": 567849,\n \"polyfills\""
},
{
"path": "apps/rxjs.dev/scripts/deploy-to-firebase.sh",
"chars": 3293,
"preview": "#!/usr/bin/env bash\n\n# WARNING: FIREBASE_TOKEN should NOT be printed.\nset +x -eu -o pipefail\n\n## Only deploy if this not"
},
{
"path": "apps/rxjs.dev/scripts/deploy-to-firebase.test.sh",
"chars": 4664,
"preview": "#!/usr/bin/env bash\nset +x -eu -o pipefail\n\nfunction check {\n if [[ $1 == $2 ]]; then\n echo Pass\n exit 0\n fi\n e"
},
{
"path": "apps/rxjs.dev/scripts/payload.sh",
"chars": 273,
"preview": "#!/usr/bin/env bash\n\nset -eu -o pipefail\n\nreadonly thisDir=$(cd $(dirname $0); pwd)\nreadonly parentDir=$(dirname $thisDi"
},
{
"path": "apps/rxjs.dev/scripts/publish-docs.sh",
"chars": 498,
"preview": "#!/usr/bin/env bash\n\nreadonly projectId=rxjs-dev\nreadonly deployedUrl=https://rxjs-dev.firebaseapp.com\nreadonly firebase"
},
{
"path": "apps/rxjs.dev/scripts/test-pwa-score.js",
"chars": 3126,
"preview": "#!/bin/env node\n\n/**\n * Usage:\n * node scripts/test-pwa-score <url> <min-score> [<log-file>]\n *\n * Fails if the score "
},
{
"path": "apps/rxjs.dev/src/app/app.component.ts",
"chars": 18797,
"preview": "import { Component, ElementRef, HostBinding, HostListener, OnInit, QueryList, ViewChild, ViewChildren } from '@angular/c"
},
{
"path": "apps/rxjs.dev/src/app/app.module.ts",
"chars": 5980,
"preview": "import { BrowserModule } from '@angular/platform-browser';\nimport { ErrorHandler, NgModule } from '@angular/core';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.spec.ts",
"chars": 4372,
"preview": "import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\nimport { ComponentFixture"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.component.ts",
"chars": 2810,
"preview": "import { Component, OnInit } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { catchErro"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.module.ts",
"chars": 614,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModul"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/api/api-list.component.spec.ts",
"chars": 9200,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { BehaviorSubject } from 'rxjs';\n\nimport { Api"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/api/api-list.component.ts",
"chars": 5928,
"preview": "/*\n * API List & Filter Component\n *\n * A page that displays a formatted list of the public Angular API entities.\n * Cli"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/api/api-list.module.ts",
"chars": 647,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModul"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/api/api.service.spec.ts",
"chars": 3439,
"preview": "import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\nimport { Injector } from "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/api/api.service.ts",
"chars": 2643,
"preview": "import { Injectable, OnDestroy } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/ht"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code-example.component.spec.ts",
"chars": 3147,
"preview": "import { Component, ViewChild } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code-example.component.ts",
"chars": 2499,
"preview": "/* tslint:disable component-selector */\nimport { Component, HostBinding, ElementRef, ViewChild, Input, AfterViewInit } f"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code-example.module.ts",
"chars": 539,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CodeExampleComp"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.spec.ts",
"chars": 3199,
"preview": "import { Component, ViewChild, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angu"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code-tabs.component.ts",
"chars": 2765,
"preview": "/* tslint:disable component-selector */\nimport { AfterViewInit, Component, ElementRef, Input, OnInit, QueryList, ViewChi"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code-tabs.module.ts",
"chars": 663,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CodeTabsCompone"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code.component.spec.ts",
"chars": 3370,
"preview": "import { Component, ViewChild, NO_ERRORS_SCHEMA } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angu"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code.component.ts",
"chars": 7523,
"preview": "import { Component, ElementRef, EventEmitter, Input, OnChanges, Output, ViewChild } from '@angular/core';\nimport { Logge"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/code.module.ts",
"chars": 525,
"preview": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CodeComponent } from "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/code/pretty-printer.service.ts",
"chars": 2161,
"preview": "import { Injectable } from '@angular/core';\n\nimport { from as fromPromise, Observable } from 'rxjs';\nimport { first, map"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.spec.ts",
"chars": 3698,
"preview": "import { ReflectiveInjector } from '@angular/core';\n\nimport { of } from 'rxjs';\n\nimport { ContributorGroup } from './con"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.component.ts",
"chars": 1703,
"preview": "import { Component, OnInit } from '@angular/core';\nimport { ContributorGroup } from './contributors.model';\nimport { Con"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.module.ts",
"chars": 644,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ContributorList"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributor.component.ts",
"chars": 2332,
"preview": "import { Component, Input } from '@angular/core';\n\nimport { Contributor } from './contributors.model';\nimport { CONTENT_"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.spec.ts",
"chars": 3689,
"preview": "import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\nimport { Injector } from "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributor.service.ts",
"chars": 2256,
"preview": "import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { ConnectableObse"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/contributor/contributors.model.ts",
"chars": 279,
"preview": "export class ContributorGroup {\n name: string;\n order: number;\n contributors: Contributor[];\n}\n\nexport class Contribu"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.spec.ts",
"chars": 1105,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { LocationService } from 'app/shared/location."
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts",
"chars": 445,
"preview": "/* tslint:disable component-selector */\nimport { Component } from '@angular/core';\nimport { LocationService } from 'app/"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/current-location/current-location.module.ts",
"chars": 466,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CurrentLocation"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/custom-elements.module.ts",
"chars": 933,
"preview": "import { NgModule } from '@angular/core';\nimport { ROUTES} from '@angular/router';\nimport { ElementsLoader } from './ele"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/element-registry.ts",
"chars": 3278,
"preview": "import { InjectionToken, Type } from '@angular/core';\nimport { LoadChildrenCallback } from '@angular/router';\n\n// Module"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/elements-loader.spec.ts",
"chars": 10449,
"preview": "import {\n Compiler,\n ComponentFactory,\n ComponentFactoryResolver, ComponentRef, Injector, NgModuleFactory,\n NgModule"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/elements-loader.ts",
"chars": 4544,
"preview": "import {\n Compiler,\n Inject,\n Injectable,\n NgModuleFactory,\n NgModuleRef,\n Type,\n} from '@angular/core';\nimport { "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts",
"chars": 505,
"preview": "/* tslint:disable component-selector */\nimport { Component, Input } from '@angular/core';\n\n/** Custom element wrapper fo"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.module.ts",
"chars": 501,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { ExpandableSectionComponent } from './expandable-section.compone"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/lazy-custom-element.component.spec.ts",
"chars": 2467,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { Logger } from 'app/shared/logger.service';\ni"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/lazy-custom-element.component.ts",
"chars": 789,
"preview": "import { Component, ElementRef, Input, OnInit } from '@angular/core';\nimport { Logger } from 'app/shared/logger.service'"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.spec.ts",
"chars": 8447,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/live-example/live-example.component.ts",
"chars": 6911,
"preview": "/* tslint:disable component-selector */\nimport { AfterContentInit, AfterViewInit, Component, ElementRef, Input, ViewChil"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/live-example/live-example.module.ts",
"chars": 504,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EmbeddedStackbl"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/README.md",
"chars": 453,
"preview": "The `operator-decision-tree` module requires `decision-tree-data.json`, which is hosted at `/generated/app`.\n\nThe JSON i"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/fixtures.ts",
"chars": 1002,
"preview": "import {\n OperatorDecisionTree,\n OperatorTreeNode,\n OperatorTreeNodeWithOptions\n} from './interfaces';\n\nexport const "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/interfaces.ts",
"chars": 486,
"preview": "export interface OperatorTreeNode {\n id: string;\n label?: string;\n options?: string[];\n path?: string;\n docType?: s"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.spec.ts",
"chars": 1147,
"preview": "import { TestBed } from '@angular/core/testing';\nimport { OperatorDecisionTreeDataService } from './operator-decision-tr"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.ts",
"chars": 459,
"preview": "import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } fro"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.scss",
"chars": 546,
"preview": "@use '@angular/material' as mat;\n@import '../../../styles/constants';\n\nh2 {\n max-width: 700px;\n}\n\nbutton.option {\n @in"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.spec.ts",
"chars": 8939,
"preview": "import { CommonModule, Location } from '@angular/common';\nimport { ComponentFixture, TestBed, waitForAsync } from '@angu"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.ts",
"chars": 3519,
"preview": "import { animate, state, style, transition, trigger } from '@angular/animations';\nimport { Component, OnDestroy } from '"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.module.spec.ts",
"chars": 392,
"preview": "import { OperatorDecisionTreeModule } from './operator-decision-tree.module';\n\ndescribe('OperatorDecisionTreeModule', ()"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.module.ts",
"chars": 1081,
"preview": "import { CommonModule } from '@angular/common';\nimport { NgModule, Type } from '@angular/core';\nimport { MatButtonModule"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.spec.ts",
"chars": 6700,
"preview": "import { TestBed } from '@angular/core/testing';\nimport { cold, initTestScheduler, addMatchers } from 'jasmine-marbles';"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.service.ts",
"chars": 3204,
"preview": "import { Injectable } from '@angular/core';\nimport { BehaviorSubject, combineLatest, Observable, of } from 'rxjs';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.spec.ts",
"chars": 1167,
"preview": "import { isInitialDecision, treeIsErrorFree, nodeHasOptions } from './utils';\n\ndescribe('isInitialDecision', () => {\n d"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts",
"chars": 487,
"preview": "import { OperatorDecisionTree, OperatorTreeNode, OperatorTreeNodeWithOptions } from './interfaces';\n\nexport function isI"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.spec.ts",
"chars": 2437,
"preview": "import { ReflectiveInjector } from '@angular/core';\nimport { PlatformLocation } from '@angular/common';\n\nimport { of } f"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/resource/resource-list.component.ts",
"chars": 2379,
"preview": "import { Component, HostListener, OnInit } from '@angular/core';\nimport { PlatformLocation } from '@angular/common';\n\nim"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/resource/resource-list.module.ts",
"chars": 539,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ResourceListCom"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/resource/resource.model.ts",
"chars": 699,
"preview": "export class Category {\n id: string; // \"education\"\n title: string; // \"Education\"\n order: number; // 2\n subCateg"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/resource/resource.service.spec.ts",
"chars": 4462,
"preview": "import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\nimport { Injector } from "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/resource/resource.service.ts",
"chars": 2452,
"preview": "import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { ConnectableObse"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/search/file-not-found-search.component.spec.ts",
"chars": 1995,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/search/file-not-found-search.component.ts",
"chars": 922,
"preview": "import { Component, OnInit } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { switchMap } from 'rxjs/op"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/search/file-not-found-search.module.ts",
"chars": 556,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedModule } "
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/toc/toc.component.ts",
"chars": 4417,
"preview": "import { AfterViewInit, Component, ElementRef, OnDestroy, OnInit, QueryList, ViewChildren } from '@angular/core';\nimport"
},
{
"path": "apps/rxjs.dev/src/app/custom-elements/toc/toc.module.ts",
"chars": 476,
"preview": "import { NgModule, Type } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule }"
},
{
"path": "apps/rxjs.dev/src/app/documents/document-contents.ts",
"chars": 173,
"preview": "export interface DocumentContents {\n /** The unique identifier for this document */\n id: string;\n /** The HTML to dis"
},
{
"path": "apps/rxjs.dev/src/app/documents/document.service.spec.ts",
"chars": 8036,
"preview": "import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\nimport { TestBed } from '"
},
{
"path": "apps/rxjs.dev/src/app/documents/document.service.ts",
"chars": 3309,
"preview": "import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\n\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.spec.ts",
"chars": 30263,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { Meta, Title } from '@angular/platform-browse"
},
{
"path": "apps/rxjs.dev/src/app/layout/doc-viewer/doc-viewer.component.ts",
"chars": 10799,
"preview": "import { Component, ElementRef, EventEmitter, Input, OnDestroy, Output } from '@angular/core';\nimport { Title, Meta } fr"
},
{
"path": "apps/rxjs.dev/src/app/layout/doc-viewer/dt.component.ts",
"chars": 765,
"preview": "import { Component, ElementRef, EventEmitter, Input, Output, ViewChild } from '@angular/core';\nimport { DocumentContents"
},
{
"path": "apps/rxjs.dev/src/app/layout/footer/footer.component.ts",
"chars": 564,
"preview": "import { Component, Input } from '@angular/core';\n\nimport { NavigationNode, VersionInfo } from 'app/navigation/navigatio"
},
{
"path": "apps/rxjs.dev/src/app/layout/mode-banner/mode-banner.component.ts",
"chars": 547,
"preview": "import { Component, Input } from '@angular/core';\nimport { VersionInfo } from 'app/navigation/navigation.service';\n\n@Com"
},
{
"path": "apps/rxjs.dev/src/app/layout/nav-item/nav-item.component.spec.ts",
"chars": 7423,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\nimport { By } from '@angular/platform-browser';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/layout/nav-item/nav-item.component.ts",
"chars": 2703,
"preview": "import { Component, Input, OnChanges } from '@angular/core';\nimport { NavigationNode } from 'app/navigation/navigation.m"
},
{
"path": "apps/rxjs.dev/src/app/layout/nav-menu/nav-menu.component.spec.ts",
"chars": 659,
"preview": "import { NavMenuComponent } from './nav-menu.component';\nimport { NavigationNode } from 'app/navigation/navigation.servi"
},
{
"path": "apps/rxjs.dev/src/app/layout/nav-menu/nav-menu.component.ts",
"chars": 569,
"preview": "import { Component, Input } from '@angular/core';\nimport { CurrentNode, NavigationNode } from 'app/navigation/navigation"
},
{
"path": "apps/rxjs.dev/src/app/layout/notification/notification.component.ts",
"chars": 2543,
"preview": "import { animate, state, style, trigger, transition } from '@angular/animations';\nimport { Component, EventEmitter, Host"
},
{
"path": "apps/rxjs.dev/src/app/layout/top-menu/top-menu.component.spec.ts",
"chars": 1074,
"preview": "import { ComponentFixture, TestBed } from '@angular/core/testing';\n\nimport { BehaviorSubject } from 'rxjs';\n\nimport { To"
},
{
"path": "apps/rxjs.dev/src/app/layout/top-menu/top-menu.component.ts",
"chars": 408,
"preview": "import { Component, Input } from '@angular/core';\nimport { NavigationNode } from 'app/navigation/navigation.service';\n\n@"
},
{
"path": "apps/rxjs.dev/src/app/navigation/navigation.model.ts",
"chars": 1349,
"preview": "// Pulled all interfaces out of `navigation.service.ts` because of this:\n// https://github.com/angular/angular-cli/issue"
},
{
"path": "apps/rxjs.dev/src/app/navigation/navigation.service.spec.ts",
"chars": 7358,
"preview": "import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';\nimport { Injector } from "
},
{
"path": "apps/rxjs.dev/src/app/navigation/navigation.service.ts",
"chars": 6337,
"preview": "import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { combineLatest, "
},
{
"path": "apps/rxjs.dev/src/app/search/interfaces.ts",
"chars": 313,
"preview": "export interface SearchResults {\n query: string;\n results: SearchResult[];\n}\n\nexport interface SearchResult {\n path: "
},
{
"path": "apps/rxjs.dev/src/app/search/search-box/search-box.component.spec.ts",
"chars": 4425,
"preview": "import { Component } from '@angular/core';\nimport { ComponentFixture, fakeAsync, inject, TestBed, tick } from '@angular/"
},
{
"path": "apps/rxjs.dev/src/app/search/search-box/search-box.component.ts",
"chars": 2067,
"preview": "import { Component, OnInit, ViewChild, ElementRef, EventEmitter, Output } from '@angular/core';\nimport { LocationService"
},
{
"path": "apps/rxjs.dev/src/app/search/search.service.ts",
"chars": 2353,
"preview": "/*\nCopyright 2016 Google Inc. All Rights Reserved.\nUse of this source code is governed by an MIT-style license that\ncan "
},
{
"path": "apps/rxjs.dev/src/app/search/search.worker.ts",
"chars": 5695,
"preview": "/* eslint-env worker */\n/// <reference lib=\"webworker\" />\nimport * as lunr from 'lunr';\n\nimport { WebWorkerMessage } fro"
},
{
"path": "apps/rxjs.dev/src/app/shared/attribute-utils.spec.ts",
"chars": 4442,
"preview": "import { ElementRef } from '@angular/core';\n\nimport { AttrMap, getAttrs, getAttrValue, getBoolFromAttribute, boolFromVal"
},
{
"path": "apps/rxjs.dev/src/app/shared/attribute-utils.ts",
"chars": 1998,
"preview": "// Utilities for processing HTML element attributes\nimport { ElementRef } from '@angular/core';\n\nexport interface AttrMa"
},
{
"path": "apps/rxjs.dev/src/app/shared/copier.service.ts",
"chars": 1891,
"preview": "import { Injectable } from '@angular/core';\n/**\n * This class is based on the code in the following projects:\n *\n * - ht"
},
{
"path": "apps/rxjs.dev/src/app/shared/current-date.ts",
"chars": 177,
"preview": "import { InjectionToken } from '@angular/core';\n\nexport const CurrentDateToken = new InjectionToken('CurrentDate');\nexpo"
},
{
"path": "apps/rxjs.dev/src/app/shared/custom-icon-registry.spec.ts",
"chars": 2165,
"preview": "import { ErrorHandler } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { CustomI"
},
{
"path": "apps/rxjs.dev/src/app/shared/custom-icon-registry.ts",
"chars": 2229,
"preview": "import { InjectionToken, Inject, Injectable, Optional, ErrorHandler } from '@angular/core';\nimport { DOCUMENT } from '@a"
},
{
"path": "apps/rxjs.dev/src/app/shared/deployment.service.spec.ts",
"chars": 1115,
"preview": "import { ReflectiveInjector } from '@angular/core';\nimport { environment } from 'environments/environment';\nimport { Loc"
},
{
"path": "apps/rxjs.dev/src/app/shared/deployment.service.ts",
"chars": 551,
"preview": "import { Injectable } from '@angular/core';\nimport { LocationService } from 'app/shared/location.service';\nimport { envi"
},
{
"path": "apps/rxjs.dev/src/app/shared/ga.service.spec.ts",
"chars": 3494,
"preview": "import { ReflectiveInjector } from '@angular/core';\n\nimport { GaService } from 'app/shared/ga.service';\nimport { WindowT"
},
{
"path": "apps/rxjs.dev/src/app/shared/ga.service.ts",
"chars": 1152,
"preview": "import { Inject, Injectable } from '@angular/core';\n\nimport { environment } from '../../environments/environment';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/shared/location.service.spec.ts",
"chars": 20738,
"preview": "import { ReflectiveInjector } from '@angular/core';\nimport { Location, LocationStrategy, PlatformLocation } from '@angul"
},
{
"path": "apps/rxjs.dev/src/app/shared/location.service.ts",
"chars": 5073,
"preview": "import { Injectable } from '@angular/core';\nimport { Location, PlatformLocation } from '@angular/common';\n\nimport { Repl"
},
{
"path": "apps/rxjs.dev/src/app/shared/logger.service.spec.ts",
"chars": 1349,
"preview": "import { ErrorHandler, ReflectiveInjector } from '@angular/core';\nimport { Logger } from './logger.service';\n\ndescribe('"
},
{
"path": "apps/rxjs.dev/src/app/shared/logger.service.ts",
"chars": 478,
"preview": "import { ErrorHandler, Injectable } from '@angular/core';\nimport { environment } from '../../environments/environment';\n"
},
{
"path": "apps/rxjs.dev/src/app/shared/reporting-error-handler.spec.ts",
"chars": 2400,
"preview": "import { ErrorHandler, ReflectiveInjector } from '@angular/core';\nimport { TestBed } from '@angular/core/testing';\nimpor"
},
{
"path": "apps/rxjs.dev/src/app/shared/reporting-error-handler.ts",
"chars": 1246,
"preview": "import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { WindowToken } from './window';\n\n/**\n * Extend"
},
{
"path": "apps/rxjs.dev/src/app/shared/scroll-spy.service.spec.ts",
"chars": 17432,
"preview": "import { Injector, ReflectiveInjector } from '@angular/core';\nimport { fakeAsync, tick } from '@angular/core/testing';\ni"
},
{
"path": "apps/rxjs.dev/src/app/shared/scroll-spy.service.ts",
"chars": 8576,
"preview": "import { Inject, Injectable } from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { fromEvent, Obse"
},
{
"path": "apps/rxjs.dev/src/app/shared/scroll.service.spec.ts",
"chars": 13976,
"preview": "import { ReflectiveInjector } from '@angular/core';\nimport { Location, LocationStrategy, PlatformLocation, ViewportScrol"
},
{
"path": "apps/rxjs.dev/src/app/shared/scroll.service.ts",
"chars": 7554,
"preview": "import { DOCUMENT, Location, PlatformLocation, PopStateEvent, ViewportScroller } from '@angular/common';\nimport { Inject"
},
{
"path": "apps/rxjs.dev/src/app/shared/search-results/search-results.component.spec.ts",
"chars": 6971,
"preview": "import { DebugElement } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testing';\nimport "
},
{
"path": "apps/rxjs.dev/src/app/shared/search-results/search-results.component.ts",
"chars": 3683,
"preview": "import { Component, EventEmitter, Input, OnChanges, Output } from '@angular/core';\nimport { SearchResult, SearchResults,"
},
{
"path": "apps/rxjs.dev/src/app/shared/select/select.component.spec.ts",
"chars": 5463,
"preview": "import { Component, DebugElement } from '@angular/core';\nimport { ComponentFixture, TestBed } from '@angular/core/testin"
},
{
"path": "apps/rxjs.dev/src/app/shared/select/select.component.ts",
"chars": 2009,
"preview": "import { Component, ElementRef, EventEmitter, HostListener, Input, Output, OnInit } from '@angular/core';\n\nexport interf"
},
{
"path": "apps/rxjs.dev/src/app/shared/shared.module.ts",
"chars": 451,
"preview": "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SearchResultsComponen"
},
{
"path": "apps/rxjs.dev/src/app/shared/stackblitz.service.ts",
"chars": 1169,
"preview": "import StackBlitzkSDK from '@stackblitz/sdk';\nimport { Injectable } from '@angular/core';\nimport { Project } from '@stac"
},
{
"path": "apps/rxjs.dev/src/app/shared/toc.service.spec.ts",
"chars": 12386,
"preview": "import { DOCUMENT } from '@angular/common';\nimport { ReflectiveInjector } from '@angular/core';\nimport { DomSanitizer, S"
},
{
"path": "apps/rxjs.dev/src/app/shared/toc.service.ts",
"chars": 3838,
"preview": "import { DOCUMENT } from '@angular/common';\nimport { Inject, Injectable } from '@angular/core';\nimport { DomSanitizer, S"
},
{
"path": "apps/rxjs.dev/src/app/shared/web-worker-message.ts",
"chars": 85,
"preview": "export interface WebWorkerMessage {\n type: string;\n payload: any;\n id?: number;\n}\n"
},
{
"path": "apps/rxjs.dev/src/app/shared/web-worker.ts",
"chars": 1781,
"preview": "/*\nCopyright 2016 Google Inc. All Rights Reserved.\nUse of this source code is governed by an MIT-style license that\ncan "
},
{
"path": "apps/rxjs.dev/src/app/shared/window.ts",
"chars": 158,
"preview": "import { InjectionToken } from '@angular/core';\n\nexport const WindowToken = new InjectionToken('Window');\nexport functio"
},
{
"path": "apps/rxjs.dev/src/app/sw-updates/sw-updates.module.ts",
"chars": 189,
"preview": "import { NgModule } from '@angular/core';\n\nimport { SwUpdatesService } from './sw-updates.service';\n\n\n@NgModule({\n prov"
},
{
"path": "apps/rxjs.dev/src/app/sw-updates/sw-updates.service.spec.ts",
"chars": 7425,
"preview": "import { ApplicationRef, ReflectiveInjector } from '@angular/core';\nimport { discardPeriodicTasks, fakeAsync, tick } fro"
},
{
"path": "apps/rxjs.dev/src/app/sw-updates/sw-updates.service.ts",
"chars": 2110,
"preview": "import { ApplicationRef, Injectable, OnDestroy } from '@angular/core';\nimport { SwUpdate } from '@angular/service-worker"
},
{
"path": "apps/rxjs.dev/src/assets/.gitkeep",
"chars": 0,
"preview": ""
},
{
"path": "apps/rxjs.dev/src/assets/js/devtools-welcome.js",
"chars": 372,
"preview": "var welcomeText = (\n ' ____ _ ____ \\n' +\n '| _ \\\\ __ __ | / ___| \\n' +\n '| |_) |\\\\ \\\\/ / | \\\\__"
},
{
"path": "apps/rxjs.dev/src/assets/js/prettify.js",
"chars": 15502,
"preview": "!function(){/*\n\n Copyright (C) 2006 Google Inc.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you m"
},
{
"path": "apps/rxjs.dev/src/environments/environment.archive.ts",
"chars": 264,
"preview": "// This is for archived sites, which are hosted at https://vX.angular.io, where X is the major Angular version.\nexport c"
},
{
"path": "apps/rxjs.dev/src/environments/environment.next.ts",
"chars": 267,
"preview": "// This is for the staging site, which is hosted at https://next.angular.io (and https://aio-staging.firebaseapp.org)\nex"
},
{
"path": "apps/rxjs.dev/src/environments/environment.stable.ts",
"chars": 185,
"preview": "// This is for the production site, which is hosted at https://angular.io\nexport const environment = {\n gaId: 'UA-36380"
},
{
"path": "apps/rxjs.dev/src/environments/environment.ts",
"chars": 447,
"preview": "// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the "
}
]
// ... and 868 more files (download for full content)
About this extraction
This page contains the full source code of the ReactiveX/rxjs GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1068 files (4.1 MB), approximately 1.1M tokens, and a symbol index with 1640 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.