├── .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 │ ├── images │ │ └── marketing │ │ │ └── home │ │ │ ├── Rx_Logo-512-512.png │ │ │ ├── rxjs-live-london.svg │ │ │ └── rxjs-live.svg │ ├── 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 │ │ ├── images │ │ │ ├── favicons │ │ │ │ ├── apple-touch-icon-144x144.png │ │ │ │ ├── favicon-128x128.png │ │ │ │ ├── favicon-144x144.png │ │ │ │ ├── favicon-152x152.png │ │ │ │ ├── favicon-192x192.png │ │ │ │ ├── favicon-384x384.png │ │ │ │ ├── favicon-512x512.png │ │ │ │ ├── favicon-72x72.png │ │ │ │ ├── favicon-96x96.png │ │ │ │ └── favicon.ico │ │ │ ├── guide │ │ │ │ └── marble-diagram-anatomy.svg │ │ │ ├── logos │ │ │ │ ├── Rx_Logo_S.png │ │ │ │ ├── github-icon.svg │ │ │ │ ├── logo.png │ │ │ │ └── twitter-icon.svg │ │ │ ├── marble-diagrams │ │ │ │ ├── audit.svg │ │ │ │ ├── auditTime.png │ │ │ │ ├── buffer.png │ │ │ │ ├── bufferCount.png │ │ │ │ ├── bufferTime.png │ │ │ │ ├── bufferToggle.png │ │ │ │ ├── bufferWhen.svg │ │ │ │ ├── catch.png │ │ │ │ ├── combineAll.png │ │ │ │ ├── combineLatest.png │ │ │ │ ├── concat.png │ │ │ │ ├── concatAll.png │ │ │ │ ├── concatAll.svg │ │ │ │ ├── concatMap.png │ │ │ │ ├── concatMapTo.png │ │ │ │ ├── count.png │ │ │ │ ├── create.png │ │ │ │ ├── debounce.svg │ │ │ │ ├── debounceTime.png │ │ │ │ ├── defaultIfEmpty.png │ │ │ │ ├── defer.png │ │ │ │ ├── delay.svg │ │ │ │ ├── delayWhen.png │ │ │ │ ├── dematerialize.png │ │ │ │ ├── distinctUntilChanged.png │ │ │ │ ├── distinctUntilKeyChanged.png │ │ │ │ ├── elementAt.png │ │ │ │ ├── empty.png │ │ │ │ ├── endWith.png │ │ │ │ ├── every.png │ │ │ │ ├── exhaustAll.svg │ │ │ │ ├── exhaustMap.png │ │ │ │ ├── expand.png │ │ │ │ ├── filter.png │ │ │ │ ├── find.png │ │ │ │ ├── findIndex.png │ │ │ │ ├── first.png │ │ │ │ ├── forkJoin.png │ │ │ │ ├── from.png │ │ │ │ ├── fromEvent.png │ │ │ │ ├── fromEventPattern.png │ │ │ │ ├── generate.png │ │ │ │ ├── groupBy.png │ │ │ │ ├── ignoreElements.png │ │ │ │ ├── interval.png │ │ │ │ ├── isEmpty.png │ │ │ │ ├── last.png │ │ │ │ ├── map.png │ │ │ │ ├── mapTo.png │ │ │ │ ├── materialize.png │ │ │ │ ├── max.png │ │ │ │ ├── merge.png │ │ │ │ ├── mergeAll.png │ │ │ │ ├── mergeMap.png │ │ │ │ ├── mergeMapTo.png │ │ │ │ ├── min.png │ │ │ │ ├── never.png │ │ │ │ ├── observeOn.png │ │ │ │ ├── of.png │ │ │ │ ├── onErrorResumeNext.png │ │ │ │ ├── pairwise.png │ │ │ │ ├── partition.png │ │ │ │ ├── race.png │ │ │ │ ├── range.png │ │ │ │ ├── reduce.png │ │ │ │ ├── repeat.png │ │ │ │ ├── repeatWhen.png │ │ │ │ ├── retry.png │ │ │ │ ├── retryWhen.png │ │ │ │ ├── sample.png │ │ │ │ ├── sampleTime.png │ │ │ │ ├── scan.png │ │ │ │ ├── sequenceEqual.png │ │ │ │ ├── share.png │ │ │ │ ├── single.png │ │ │ │ ├── skip.png │ │ │ │ ├── skipLast.png │ │ │ │ ├── skipUntil.png │ │ │ │ ├── skipWhile.png │ │ │ │ ├── startWith.png │ │ │ │ ├── subscribeOn.png │ │ │ │ ├── switchAll.png │ │ │ │ ├── switchMap.png │ │ │ │ ├── switchMapTo.png │ │ │ │ ├── take.png │ │ │ │ ├── takeLast.png │ │ │ │ ├── takeUntil.png │ │ │ │ ├── takeWhile.png │ │ │ │ ├── tap.png │ │ │ │ ├── throttle.svg │ │ │ │ ├── throttleTime.png │ │ │ │ ├── throw.png │ │ │ │ ├── throwIfEmpty.png │ │ │ │ ├── timeInterval.png │ │ │ │ ├── timeout.png │ │ │ │ ├── timeoutWith.png │ │ │ │ ├── timer.png │ │ │ │ ├── timestamp.png │ │ │ │ ├── toArray.png │ │ │ │ ├── window.png │ │ │ │ ├── windowCount.png │ │ │ │ ├── windowTime.png │ │ │ │ ├── windowToggle.png │ │ │ │ ├── windowWhen.svg │ │ │ │ ├── withLatestFrom.png │ │ │ │ └── zipAll.png │ │ │ └── support │ │ │ │ └── rxjs-404.png │ │ └── 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.scss │ ├── 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 │ ├── 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-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 │ ├── 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 │ ├── 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 │ └── logo │ └── svg │ ├── RxJs_Logo_Basic.svg │ ├── RxJs_Logo_Basic_Outline.svg │ ├── RxJs_Logo_Black.svg │ └── RxJs_Logo_Black_Outline.svg ├── scripts ├── copy-common-package-files.js ├── publish.js └── release.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | indent_size = 2 6 | indent_style = space 7 | trim_trailing_whitespace = true 8 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | packages/rxjs/integration/import/fixtures -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | contact_links: 3 | - name: Questions, request, issues other than Rx core bugs 4 | url: https://github.com/ReactiveX/rxjs/discussions 5 | about: For general discussions, or request please use discussions. 6 | -------------------------------------------------------------------------------- /.github/lock.yml: -------------------------------------------------------------------------------- 1 | # Configuration for lock-threads - https://github.com/dessant/lock-threads 2 | 3 | # Number of days of inactivity before a closed issue or pull request is locked 4 | daysUntilLock: 30 5 | 6 | # Issues and pull requests with these labels will not be locked. Set to `[]` to disable 7 | exemptLabels: [] 8 | 9 | # Label to add before locking, such as `outdated`. Set to `false` to disable 10 | lockLabel: false 11 | 12 | # Comment to post before locking. Set to `false` to disable 13 | lockComment: false 14 | 15 | # Limit to only `issues` or `pulls` 16 | # only: issues 17 | 18 | # Optionally, specify configuration settings just for `issues` or `pulls` 19 | # issues: 20 | # exemptLabels: 21 | # - help-wanted 22 | # lockLabel: outdated 23 | 24 | # pulls: 25 | # daysUntilLock: 30 26 | -------------------------------------------------------------------------------- /.github/workflows/ci_ts_latest.yml: -------------------------------------------------------------------------------- 1 | name: CI (ts@latest) 2 | 3 | on: 4 | pull_request: 5 | types: ['opened', 'reopened', 'synchronize'] 6 | 7 | permissions: 8 | contents: read 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | strategy: 14 | matrix: 15 | node: ['20'] 16 | 17 | name: ts@latest 18 | 19 | steps: 20 | - uses: actions/checkout@v4 21 | 22 | - name: Install Dependencies 23 | uses: ./.github/actions/install-dependencies 24 | with: 25 | node-version: ${{ matrix.node }} 26 | 27 | - name: build 28 | run: | 29 | yarn workspace rxjs add typescript@latest @types/node@latest --peer --no-save 30 | yarn nx compile rxjs 31 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Editor-specific 2 | .idea/ 3 | *.iml 4 | *.sublime-project 5 | *.sublime-workspace 6 | .settings 7 | .vscode 8 | 9 | # Installed libs 10 | node_modules/ 11 | typings/ 12 | 13 | # Generated 14 | dist/ 15 | .tshy-build 16 | 17 | # Import location artifacts 18 | packages/rxjs/ajax/ 19 | packages/rxjs/fetch/ 20 | packages/rxjs/operators/ 21 | packages/rxjs/testing/ 22 | packages/rxjs/webSocket/ 23 | 24 | # Copied Package Files 25 | packages/**/LICENSE.txt 26 | packages/**/CODE_OF_CONDUCT.md 27 | 28 | # Misc 29 | npm-debug.log 30 | .DS_STORE 31 | *.tgz 32 | .eslintcache 33 | package-lock.json 34 | 35 | integration/import/**/rx.json 36 | integration/import/**/operators.json 37 | 38 | 39 | .nx/cache -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "singleQuote": true, 4 | "printWidth": 140, 5 | "overrides": [ 6 | { 7 | "files": ["spec/**/*.ts", "spec-dtslint/**/*.ts"], 8 | "options": { 9 | "requirePragma": true 10 | } 11 | }, 12 | { 13 | "files": ["spec/operators/**/*.ts", "spec/subjects/**/*.ts"], 14 | "options": { 15 | "requirePragma": false 16 | } 17 | } 18 | ] 19 | } 20 | -------------------------------------------------------------------------------- /apps/rxjs.dev/.browserslistrc: -------------------------------------------------------------------------------- 1 | # This file is used by the build system to adjust CSS and JS output to support the specified browsers below. 2 | # For additional information regarding the format and rule options, please see: 3 | # https://github.com/browserslist/browserslist#queries 4 | 5 | # You can see what browsers were selected by your queries by running: 6 | # npx browserslist 7 | 8 | > 0.5% 9 | last 2 versions 10 | Firefox ESR 11 | not dead 12 | not IE 9-11 # For IE 9-11 support, remove 'not'. 13 | not ios_saf 15.2-15.3 14 | not safari 15.2-15.3 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "targets": { 3 | "rxjs-dev": { 4 | "hosting": { 5 | "stable": [ 6 | "rxjs-dev" 7 | ] 8 | } 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/content/deprecations/index.md: -------------------------------------------------------------------------------- 1 | # Deprecations and Breaking Changes 2 | 3 | While the core team always tries to limit changes, sometimes we have to deprecate APIs or do breaking changes for various reasons. 4 | 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 5 | them appropriately in a changelog. Additionally, we can provide code examples in the documentation, to make required changes more comprehensible and therefore 6 | lower migration efforts. 7 | 8 | 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. -------------------------------------------------------------------------------- /apps/rxjs.dev/content/file-not-found.md: -------------------------------------------------------------------------------- 1 | @description 2 | 3 |
4 | 5 |
6 |

Page Not Found

7 |

We're sorry. The page you are looking for cannot be found.

8 |
9 |
10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/content/images/marketing/home/Rx_Logo-512-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/content/images/marketing/home/Rx_Logo-512-512.png -------------------------------------------------------------------------------- /apps/rxjs.dev/content/marketing/announcements.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "startDate": "2019-12-20", 4 | "endDate": "2020-03-20", 5 | "message": "RxJS Live Conference in London
March 19th-20th, 2020", 6 | "imageUrl": "generated/images/marketing/home/rxjs-live-london.svg", 7 | "linkUrl": "https://www.rxjs.live/london" 8 | } 9 | ] -------------------------------------------------------------------------------- /apps/rxjs.dev/content/marketing/api.html: -------------------------------------------------------------------------------- 1 |

API List

2 | 3 | -------------------------------------------------------------------------------- /apps/rxjs.dev/content/marketing/operator-decision-tree.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/rxjs.dev/content/marketing/team.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /apps/rxjs.dev/database.rules.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | ".read": "auth != null", 4 | ".write": "auth != null" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/scripts/_payload-limits.json: -------------------------------------------------------------------------------- 1 | { 2 | "aio": { 3 | "master": { 4 | "uncompressed": { 5 | "inline": 1971, 6 | "main": 567849, 7 | "polyfills": 40272, 8 | "prettify": 14886 9 | } 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/scripts/payload.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -eu -o pipefail 4 | 5 | readonly thisDir=$(cd $(dirname $0); pwd) 6 | readonly parentDir=$(dirname $thisDir) 7 | 8 | # Track payload size functions 9 | source ../scripts/ci/payload-size.sh 10 | 11 | trackPayloadSize "aio" "dist/*.js" true true "${thisDir}/_payload-limits.json" 12 | 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/scripts/publish-docs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | readonly projectId=rxjs-dev 4 | readonly deployedUrl=https://rxjs-dev.firebaseapp.com 5 | readonly firebaseToken=$FIREBASE_TOKEN 6 | 7 | # Deploy 8 | ( 9 | cd "`dirname $0`/.." 10 | 11 | # Build the app 12 | yarn build --env=stable 13 | 14 | # Include any mode-specific files 15 | cp -rf src/extra-files/$deployEnv/. dist/ 16 | 17 | # Deploy to Firebase 18 | yarn firebase -- login 19 | yarn firebase -- use "$projectId" 20 | yarn firebase -- deploy --message "Deploy docs automatically" --non-interactive 21 | yarn firebase -- logout 22 | ) 23 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/announcement-bar/announcement-bar.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { HttpClientModule } from '@angular/common/http'; 4 | import { SharedModule } from '../../shared/shared.module'; 5 | import { AnnouncementBarComponent } from './announcement-bar.component'; 6 | import { WithCustomElementComponent } from '../element-registry'; 7 | 8 | @NgModule({ 9 | imports: [ CommonModule, SharedModule, HttpClientModule ], 10 | declarations: [ AnnouncementBarComponent ] 11 | }) 12 | export class AnnouncementBarModule implements WithCustomElementComponent { 13 | customElementComponent: Type = AnnouncementBarComponent; 14 | } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/api/api-list.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { HttpClientModule } from '@angular/common/http'; 4 | import { SharedModule } from '../../shared/shared.module'; 5 | import { ApiListComponent } from './api-list.component'; 6 | import { ApiService } from './api.service'; 7 | import { WithCustomElementComponent } from '../element-registry'; 8 | 9 | @NgModule({ 10 | imports: [ CommonModule, SharedModule, HttpClientModule ], 11 | declarations: [ ApiListComponent ], 12 | providers: [ ApiService ] 13 | }) 14 | export class ApiListModule implements WithCustomElementComponent { 15 | customElementComponent: Type = ApiListComponent; 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/code/code-example.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { CodeExampleComponent } from './code-example.component'; 4 | import { CodeModule } from './code.module'; 5 | import { WithCustomElementComponent } from '../element-registry'; 6 | 7 | @NgModule({ 8 | imports: [ CommonModule, CodeModule ], 9 | declarations: [ CodeExampleComponent ], 10 | exports: [ CodeExampleComponent ] 11 | }) 12 | export class CodeExampleModule implements WithCustomElementComponent { 13 | customElementComponent: Type = CodeExampleComponent; 14 | } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/code/code-tabs.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { CodeTabsComponent } from './code-tabs.component'; 4 | import { MatCardModule } from '@angular/material/card'; 5 | import { MatTabsModule } from '@angular/material/tabs'; 6 | import { CodeModule } from './code.module'; 7 | import { WithCustomElementComponent } from '../element-registry'; 8 | 9 | @NgModule({ 10 | imports: [ CommonModule, MatCardModule, MatTabsModule, CodeModule ], 11 | declarations: [ CodeTabsComponent ], 12 | exports: [ CodeTabsComponent ] 13 | }) 14 | export class CodeTabsModule implements WithCustomElementComponent { 15 | customElementComponent: Type = CodeTabsComponent; 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/code/code.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { CodeComponent } from './code.component'; 4 | import { MatSnackBarModule } from '@angular/material/snack-bar'; 5 | import { PrettyPrinter } from './pretty-printer.service'; 6 | import { CopierService } from 'app/shared/copier.service'; 7 | 8 | @NgModule({ 9 | imports: [ CommonModule, MatSnackBarModule ], 10 | declarations: [ CodeComponent ], 11 | exports: [ CodeComponent ], 12 | providers: [ PrettyPrinter, CopierService ] 13 | }) 14 | export class CodeModule { } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/contributor/contributor-list.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { ContributorListComponent } from './contributor-list.component'; 4 | import { ContributorService } from './contributor.service'; 5 | import { ContributorComponent } from './contributor.component'; 6 | import { WithCustomElementComponent } from '../element-registry'; 7 | 8 | @NgModule({ 9 | imports: [CommonModule], 10 | declarations: [ContributorListComponent, ContributorComponent], 11 | providers: [ContributorService], 12 | }) 13 | export class ContributorListModule implements WithCustomElementComponent { 14 | customElementComponent: Type = ContributorListComponent; 15 | } 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/contributor/contributors.model.ts: -------------------------------------------------------------------------------- 1 | export class ContributorGroup { 2 | name: string; 3 | order: number; 4 | contributors: Contributor[]; 5 | } 6 | 7 | export class Contributor { 8 | group: string; 9 | name: string; 10 | picture?: string; 11 | website?: string; 12 | twitter?: string; 13 | github?: string; 14 | bio?: string; 15 | isFlipped ? = false; 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/current-location/current-location.component.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable component-selector */ 2 | import { Component } from '@angular/core'; 3 | import { LocationService } from 'app/shared/location.service'; 4 | 5 | /** Renders the current location path. */ 6 | @Component({ 7 | // eslint-disable-next-line @angular-eslint/component-selector 8 | selector: 'current-location', 9 | template: '{{ location.currentPath | async }}' 10 | }) 11 | export class CurrentLocationComponent { 12 | constructor(public location: LocationService) { } 13 | } 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/current-location/current-location.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { CurrentLocationComponent } from './current-location.component'; 4 | import { WithCustomElementComponent } from '../element-registry'; 5 | 6 | @NgModule({ 7 | imports: [ CommonModule ], 8 | declarations: [ CurrentLocationComponent ] 9 | }) 10 | export class CurrentLocationModule implements WithCustomElementComponent { 11 | customElementComponent: Type = CurrentLocationComponent; 12 | } 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.component.ts: -------------------------------------------------------------------------------- 1 | /* tslint:disable component-selector */ 2 | import { Component, Input } from '@angular/core'; 3 | 4 | /** Custom element wrapper for the material expansion panel with a title input. */ 5 | @Component({ 6 | selector: 'aio-expandable-section', 7 | template: ` 8 | 9 | {{ title }} 10 | 11 | 12 | 13 | `, 14 | }) 15 | export class ExpandableSectionComponent { 16 | @Input() title: string; 17 | } 18 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/expandable-section/expandable-section.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { ExpandableSectionComponent } from './expandable-section.component'; 3 | import { WithCustomElementComponent } from '../element-registry'; 4 | import { MatExpansionModule } from '@angular/material/expansion'; 5 | 6 | @NgModule({ 7 | imports: [ MatExpansionModule ], 8 | declarations: [ ExpandableSectionComponent, ] 9 | }) 10 | export class ExpandableSectionModule implements WithCustomElementComponent { 11 | customElementComponent: Type = ExpandableSectionComponent; 12 | } 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/live-example/live-example.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { EmbeddedStackblitzComponent, LiveExampleComponent } from './live-example.component'; 4 | import { WithCustomElementComponent } from '../element-registry'; 5 | 6 | @NgModule({ 7 | imports: [ CommonModule ], 8 | declarations: [ LiveExampleComponent, EmbeddedStackblitzComponent ] 9 | }) 10 | export class LiveExampleModule implements WithCustomElementComponent { 11 | customElementComponent: Type = LiveExampleComponent; 12 | } 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/README.md: -------------------------------------------------------------------------------- 1 | The `operator-decision-tree` module requires `decision-tree-data.json`, which is hosted at `/generated/app`. 2 | 3 | The JSON is generated via `apps/rxjs.dev/content/operator-decision-tree.yml`. 4 | 5 | # TODO 6 | 7 | - Consider placing the widget on the home page - or a link on the home page, “Decision Tree” 8 | - Manual focus calls when navigating the tree (example: after making a selection, focus on the current sentence) 9 | - Drop jasmine-marbles for just the TestScheduler 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/interfaces.ts: -------------------------------------------------------------------------------- 1 | export interface OperatorTreeNode { 2 | id: string; 3 | label?: string; 4 | options?: string[]; 5 | path?: string; 6 | docType?: string; 7 | method?: string; 8 | } 9 | 10 | export interface OperatorTreeNodeWithOptions extends OperatorTreeNode { 11 | options: string[]; 12 | } 13 | 14 | export interface OperatorDecisionTree { 15 | [key: string]: OperatorTreeNode; 16 | initial: Required>; 17 | error?: any; 18 | } 19 | 20 | export interface State { 21 | previousBranchIds: string[]; 22 | currentBranchId: string; 23 | } 24 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree-data.service.ts: -------------------------------------------------------------------------------- 1 | import { HttpClient } from '@angular/common/http'; 2 | import { Injectable } from '@angular/core'; 3 | import { Observable } from 'rxjs'; 4 | import { OperatorDecisionTree } from './interfaces'; 5 | 6 | @Injectable() 7 | export class OperatorDecisionTreeDataService { 8 | constructor(private http: HttpClient) {} 9 | 10 | getDecisionTree$(): Observable { 11 | return this.http.get( 12 | '/generated/docs/app/decision-tree-data.json' 13 | ); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.component.scss: -------------------------------------------------------------------------------- 1 | @use '@angular/material' as mat; 2 | @import '../../../styles/constants'; 3 | 4 | h2 { 5 | max-width: 700px; 6 | } 7 | 8 | button.option { 9 | @include mat.elevation-transition; 10 | border-radius: 34px; 11 | border: 0; 12 | cursor: pointer; 13 | display: block; 14 | margin-bottom: 12px; 15 | padding: 0; 16 | text-align: left; 17 | 18 | &:active, &:hover, &:focus { 19 | @include mat.elevation(8); 20 | mat-card { 21 | background-color: $pink; 22 | color: $white; 23 | } 24 | } 25 | 26 | } 27 | 28 | mat-card { 29 | border-radius: 34px; 30 | padding: 12px 24px; 31 | transition: all 250ms; 32 | } 33 | 34 | section { 35 | margin-bottom: 16px; 36 | } 37 | 38 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/operator-decision-tree.module.spec.ts: -------------------------------------------------------------------------------- 1 | import { OperatorDecisionTreeModule } from './operator-decision-tree.module'; 2 | 3 | describe('OperatorDecisionTreeModule', () => { 4 | let chooseYourOwnOperatorModule: OperatorDecisionTreeModule; 5 | 6 | beforeEach(() => { 7 | chooseYourOwnOperatorModule = new OperatorDecisionTreeModule(); 8 | }); 9 | 10 | it('should create an instance', () => { 11 | expect(chooseYourOwnOperatorModule).toBeTruthy(); 12 | }); 13 | }); 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/operator-decision-tree/utils.ts: -------------------------------------------------------------------------------- 1 | import { OperatorDecisionTree, OperatorTreeNode, OperatorTreeNodeWithOptions } from './interfaces'; 2 | 3 | export function isInitialDecision(previousBranchIds: string[]): boolean { 4 | return ( 5 | previousBranchIds.includes('initial') && previousBranchIds.length === 1 6 | ); 7 | } 8 | 9 | export function treeIsErrorFree(tree: OperatorDecisionTree): boolean { 10 | return !tree.error; 11 | } 12 | 13 | export function nodeHasOptions(node: OperatorTreeNode): node is OperatorTreeNodeWithOptions { 14 | return !!node.options; 15 | } 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/resource/resource-list.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { ResourceListComponent } from './resource-list.component'; 4 | import { ResourceService } from './resource.service'; 5 | import { WithCustomElementComponent } from '../element-registry'; 6 | 7 | @NgModule({ 8 | imports: [ CommonModule ], 9 | declarations: [ ResourceListComponent ], 10 | providers: [ ResourceService ] 11 | }) 12 | export class ResourceListModule implements WithCustomElementComponent { 13 | customElementComponent: Type = ResourceListComponent; 14 | } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/resource/resource.model.ts: -------------------------------------------------------------------------------- 1 | export class Category { 2 | id: string; // "education" 3 | title: string; // "Education" 4 | order: number; // 2 5 | subCategories: SubCategory[]; 6 | } 7 | 8 | export class SubCategory { 9 | id: string; // "books" 10 | title: string; // "Books" 11 | order: number; // 1 12 | resources: Resource[]; 13 | } 14 | 15 | export class Resource { 16 | category: string; // "Education" 17 | subCategory: string; // "Books" 18 | id: string; // "-KLI8vJ0ZkvWhqPembZ7" 19 | desc: string; // "This books shows all the steps necessary for the development of SPA" 20 | rev: boolean; // true (always true in the original) 21 | title: string; // "Practical Angular 2", 22 | url: string; // "https://leanpub.com/practical-angular-2" 23 | } 24 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/search/file-not-found-search.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { SharedModule } from '../../shared/shared.module'; 4 | import { FileNotFoundSearchComponent } from './file-not-found-search.component'; 5 | import { WithCustomElementComponent } from '../element-registry'; 6 | 7 | @NgModule({ 8 | imports: [ CommonModule, SharedModule ], 9 | declarations: [ FileNotFoundSearchComponent ] 10 | }) 11 | export class FileNotFoundSearchModule implements WithCustomElementComponent { 12 | customElementComponent: Type = FileNotFoundSearchComponent; 13 | } 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/custom-elements/toc/toc.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule, Type } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { MatIconModule } from '@angular/material/icon'; 4 | import { WithCustomElementComponent } from '../element-registry'; 5 | import { TocComponent } from './toc.component'; 6 | 7 | @NgModule({ 8 | imports: [ CommonModule, MatIconModule ], 9 | declarations: [ TocComponent ] 10 | }) 11 | export class TocModule implements WithCustomElementComponent { 12 | customElementComponent: Type = TocComponent; 13 | } 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/documents/document-contents.ts: -------------------------------------------------------------------------------- 1 | export interface DocumentContents { 2 | /** The unique identifier for this document */ 3 | id: string; 4 | /** The HTML to display in the doc viewer */ 5 | contents: string|null; 6 | } 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/layout/footer/footer.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | 3 | import { NavigationNode, VersionInfo } from 'app/navigation/navigation.service'; 4 | 5 | @Component({ 6 | selector: 'aio-footer', 7 | template: `

8 | Code licensed under an Apache-2.0 License. Documentation licensed under 9 | CC BY 4.0. 10 |

11 |

Version {{ versionInfo?.full }}.

`, 12 | }) 13 | export class FooterComponent { 14 | @Input() nodes: NavigationNode[]; 15 | @Input() versionInfo: VersionInfo; 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/layout/mode-banner/mode-banner.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { VersionInfo } from 'app/navigation/navigation.service'; 3 | 4 | @Component({ 5 | selector: 'aio-mode-banner', 6 | template: ` 7 |
8 | This is the archived documentation for Angular v{{version?.major}}. 9 | Please visit angular.io to see documentation for the current version of Angular. 10 |
11 | ` 12 | }) 13 | export class ModeBannerComponent { 14 | @Input() mode: string; 15 | @Input() version: VersionInfo; 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/layout/nav-menu/nav-menu.component.spec.ts: -------------------------------------------------------------------------------- 1 | import { NavMenuComponent } from './nav-menu.component'; 2 | import { NavigationNode } from 'app/navigation/navigation.service'; 3 | 4 | // Testing the component class behaviors, independent of its template 5 | // No dependencies, no life-cycle hooks. Just new it and test :) 6 | // Let e2e tests verify how it displays. 7 | describe('NavMenuComponent (class-only)', () => { 8 | it('should filter out hidden nodes', () => { 9 | const component = new NavMenuComponent(); 10 | const nodes: NavigationNode[] = 11 | [ { title: 'a' }, { title: 'b', hidden: true}, { title: 'c'} ]; 12 | component.nodes = nodes; 13 | expect(component.filteredNodes).toEqual([ nodes[0], nodes[2] ]); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/layout/nav-menu/nav-menu.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { CurrentNode, NavigationNode } from 'app/navigation/navigation.service'; 3 | 4 | @Component({ 5 | selector: 'aio-nav-menu', 6 | template: ` 7 | `, 8 | }) 9 | export class NavMenuComponent { 10 | @Input() currentNode: CurrentNode | undefined; 11 | @Input() isWide = false; 12 | @Input() nodes: NavigationNode[]; 13 | get filteredNodes() { 14 | return this.nodes ? this.nodes.filter((n) => !n.hidden) : []; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/layout/top-menu/top-menu.component.ts: -------------------------------------------------------------------------------- 1 | import { Component, Input } from '@angular/core'; 2 | import { NavigationNode } from 'app/navigation/navigation.service'; 3 | 4 | @Component({ 5 | selector: 'aio-top-menu', 6 | template: ` 7 | ` 10 | }) 11 | export class TopMenuComponent { 12 | @Input() nodes: NavigationNode[]; 13 | 14 | } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/search/interfaces.ts: -------------------------------------------------------------------------------- 1 | export interface SearchResults { 2 | query: string; 3 | results: SearchResult[]; 4 | } 5 | 6 | export interface SearchResult { 7 | path: string; 8 | title: string; 9 | type: string; 10 | titleWords: string; 11 | keywords: string; 12 | } 13 | 14 | export interface SearchArea { 15 | name: string; 16 | pages: SearchResult[]; 17 | priorityPages: SearchResult[]; 18 | } 19 | 20 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/shared/current-date.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from '@angular/core'; 2 | 3 | export const CurrentDateToken = new InjectionToken('CurrentDate'); 4 | export function currentDateProvider() { return new Date(); } 5 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/shared/deployment.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | import { LocationService } from 'app/shared/location.service'; 3 | import { environment } from 'environments/environment'; 4 | 5 | /** 6 | * Information about the deployment of this application. 7 | */ 8 | @Injectable() 9 | export class Deployment { 10 | /** 11 | * The deployment mode set from the environment provided at build time; 12 | * or overridden by the `mode` query parameter: e.g. `...?mode=archive` 13 | */ 14 | mode: string = this.location.search().mode || environment.mode; 15 | 16 | constructor(private location: LocationService) {} 17 | }; 18 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/shared/logger.service.ts: -------------------------------------------------------------------------------- 1 | import { ErrorHandler, Injectable } from '@angular/core'; 2 | import { environment } from '../../environments/environment'; 3 | 4 | 5 | @Injectable() 6 | export class Logger { 7 | 8 | constructor(private errorHandler: ErrorHandler) {} 9 | 10 | log(value: any, ...rest: any[]) { 11 | if (!environment.production) { 12 | console.log(value, ...rest); 13 | } 14 | } 15 | 16 | error(error: Error) { 17 | this.errorHandler.handleError(error); 18 | } 19 | 20 | warn(value: any, ...rest: any[]) { 21 | console.warn(value, ...rest); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/shared/shared.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | import { CommonModule } from '@angular/common'; 3 | import { SearchResultsComponent } from './search-results/search-results.component'; 4 | import { SelectComponent } from './select/select.component'; 5 | 6 | @NgModule({ 7 | imports: [ 8 | CommonModule 9 | ], 10 | exports: [ 11 | SearchResultsComponent, 12 | SelectComponent 13 | ], 14 | declarations: [ 15 | SearchResultsComponent, 16 | SelectComponent 17 | ] 18 | }) 19 | export class SharedModule {} 20 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/shared/web-worker-message.ts: -------------------------------------------------------------------------------- 1 | export interface WebWorkerMessage { 2 | type: string; 3 | payload: any; 4 | id?: number; 5 | } 6 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/shared/window.ts: -------------------------------------------------------------------------------- 1 | import { InjectionToken } from '@angular/core'; 2 | 3 | export const WindowToken = new InjectionToken('Window'); 4 | export function windowProvider() { return window; } 5 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/app/sw-updates/sw-updates.module.ts: -------------------------------------------------------------------------------- 1 | import { NgModule } from '@angular/core'; 2 | 3 | import { SwUpdatesService } from './sw-updates.service'; 4 | 5 | 6 | @NgModule({ 7 | providers: [ 8 | SwUpdatesService 9 | ] 10 | }) 11 | export class SwUpdatesModule {} 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/.gitkeep -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/apple-touch-icon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/apple-touch-icon-144x144.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-128x128.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-144x144.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-152x152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-152x152.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-192x192.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-384x384.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-384x384.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-512x512.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-72x72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-72x72.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon-96x96.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/favicons/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/favicons/favicon.ico -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/logos/Rx_Logo_S.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/logos/Rx_Logo_S.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/logos/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/logos/logo.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/logos/twitter-icon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/auditTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/auditTime.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/buffer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/buffer.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/bufferCount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/bufferCount.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/bufferTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/bufferTime.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/bufferToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/bufferToggle.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/catch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/catch.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/combineAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/combineAll.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/combineLatest.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/combineLatest.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/concat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/concat.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/concatAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/concatAll.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/concatMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/concatMap.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/concatMapTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/concatMapTo.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/count.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/create.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/debounceTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/debounceTime.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/defaultIfEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/defaultIfEmpty.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/defer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/defer.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/delayWhen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/delayWhen.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/dematerialize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/dematerialize.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/distinctUntilChanged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/distinctUntilChanged.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/distinctUntilKeyChanged.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/distinctUntilKeyChanged.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/elementAt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/elementAt.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/empty.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/endWith.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/endWith.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/every.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/every.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/exhaustMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/exhaustMap.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/expand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/expand.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/filter.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/find.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/find.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/findIndex.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/findIndex.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/first.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/first.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/forkJoin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/forkJoin.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/from.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/from.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/fromEvent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/fromEvent.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/fromEventPattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/fromEventPattern.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/generate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/generate.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/groupBy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/groupBy.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/ignoreElements.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/ignoreElements.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/interval.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/interval.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/isEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/isEmpty.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/last.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/last.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/map.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/mapTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/mapTo.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/materialize.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/materialize.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/max.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/max.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/merge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/merge.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/mergeAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/mergeAll.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/mergeMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/mergeMap.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/mergeMapTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/mergeMapTo.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/min.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/never.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/never.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/observeOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/observeOn.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/of.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/of.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/onErrorResumeNext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/onErrorResumeNext.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/pairwise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/pairwise.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/partition.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/partition.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/race.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/race.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/range.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/range.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/reduce.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/reduce.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/repeat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/repeat.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/repeatWhen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/repeatWhen.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/retry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/retry.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/retryWhen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/retryWhen.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/sample.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/sampleTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/sampleTime.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/scan.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/sequenceEqual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/sequenceEqual.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/share.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/single.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/single.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/skip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/skip.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/skipLast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/skipLast.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/skipUntil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/skipUntil.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/skipWhile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/skipWhile.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/startWith.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/startWith.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/subscribeOn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/subscribeOn.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/switchAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/switchAll.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/switchMap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/switchMap.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/switchMapTo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/switchMapTo.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/take.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/take.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/takeLast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/takeLast.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/takeUntil.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/takeUntil.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/takeWhile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/takeWhile.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/tap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/tap.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/throttleTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/throttleTime.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/throw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/throw.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/throwIfEmpty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/throwIfEmpty.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/timeInterval.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/timeInterval.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/timeout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/timeout.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/timeoutWith.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/timeoutWith.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/timer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/timer.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/timestamp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/timestamp.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/toArray.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/toArray.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/window.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/window.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/windowCount.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/windowCount.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/windowTime.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/windowTime.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/windowToggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/windowToggle.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/withLatestFrom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/withLatestFrom.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/marble-diagrams/zipAll.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/marble-diagrams/zipAll.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/images/support/rxjs-404.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/apps/rxjs.dev/src/assets/images/support/rxjs-404.png -------------------------------------------------------------------------------- /apps/rxjs.dev/src/assets/js/devtools-welcome.js: -------------------------------------------------------------------------------- 1 | var welcomeText = ( 2 | ' ____ _ ____ \n' + 3 | '| _ \\ __ __ | / ___| \n' + 4 | '| |_) |\\ \\/ / | \\___ \\ \n' + 5 | '| _ < > < |_| |___) | \n' + 6 | '|_| \\_\\/_/\\_\\___/|____/ \n' + 7 | '\nTo start experimenting with RxJS: https://stackblitz.com/edit/rxjs\n' 8 | ); 9 | if (console.info) { 10 | console.info(welcomeText); 11 | } else { 12 | console.log(welcomeText); 13 | } 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/environments/environment.archive.ts: -------------------------------------------------------------------------------- 1 | // This is for archived sites, which are hosted at https://vX.angular.io, where X is the major Angular version. 2 | export const environment = { 3 | gaId: 'UA-36380079-2', // Production id (since it is linked from the main site) 4 | production: true, 5 | mode: 'archive' 6 | }; 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/environments/environment.next.ts: -------------------------------------------------------------------------------- 1 | // This is for the staging site, which is hosted at https://next.angular.io (and https://aio-staging.firebaseapp.org) 2 | export const environment = { 3 | gaId: 'UA-36380079-2', // Production id (since it is linked from the main site) 4 | production: true, 5 | mode: 'next' 6 | }; 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/environments/environment.stable.ts: -------------------------------------------------------------------------------- 1 | // This is for the production site, which is hosted at https://angular.io 2 | export const environment = { 3 | gaId: 'UA-36380079-2', // Production id 4 | production: true, 5 | mode: 'stable' 6 | }; 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/environments/environment.ts: -------------------------------------------------------------------------------- 1 | // The file contents for the current environment will overwrite these during build. 2 | // The build system defaults to the dev environment which uses `environment.ts`, but if you do 3 | // `ng build --env=prod` then `environment.prod.ts` will be used instead. 4 | // The list of which env maps to which file can be found in `angular-cli.json`. 5 | 6 | export const environment = { 7 | gaId: 'UA-36380079-2', // Development id 8 | production: false, 9 | mode: 'stable' 10 | }; 11 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/extra-files/README.md: -------------------------------------------------------------------------------- 1 | # Extra files folder 2 | 3 | This folder is used for extra files that should be included in deployments to firebase. 4 | 5 | After the AIO application had been built and before it is deployed all files and folders 6 | inside the folder with the same name as the current deployment mode (next, stable, archive) 7 | will be copied to the `dist` folder. 8 | 9 | See the `scripts/deploy-to-firebase.sh` script for more detail. 10 | 11 | **Note:** 12 | The `deploy-to-firebase.sh` script always expects there to be a folder for the current deployment 13 | mode (even if it is empty). 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/extra-files/archive/robots.txt: -------------------------------------------------------------------------------- 1 | # Disallow all URLs (see http://www.robotstxt.org/robotstxt.html) 2 | User-agent: * 3 | Disallow: / 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/extra-files/next/robots.txt: -------------------------------------------------------------------------------- 1 | # Disallow all URLs (see http://www.robotstxt.org/robotstxt.html) 2 | User-agent: * 3 | Disallow: / 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/extra-files/stable/robots.txt: -------------------------------------------------------------------------------- 1 | # Allow all URLs (see http://www.robotstxt.org/robotstxt.html) 2 | User-agent: * 3 | Disallow: 4 | Sitemap: https://rxjs.dev/generated/sitemap.xml 5 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/google385281288605d160.html: -------------------------------------------------------------------------------- 1 | google-site-verification: google385281288605d160.html -------------------------------------------------------------------------------- /apps/rxjs.dev/src/main.ts: -------------------------------------------------------------------------------- 1 | import { enableProdMode } from '@angular/core'; 2 | import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; 3 | 4 | import { AppModule } from './app/app.module'; 5 | import { environment } from './environments/environment'; 6 | 7 | if (environment.production) { 8 | enableProdMode(); 9 | } 10 | 11 | platformBrowserDynamic().bootstrapModule(AppModule); 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles.scss: -------------------------------------------------------------------------------- 1 | /* You can add global styles to this file, and also import other style files */ 2 | @import './styles/rxjs-theme'; 3 | @import './styles/main.scss'; 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/0-base/_base-dir.scss: -------------------------------------------------------------------------------- 1 | /* ============================== 2 | BASE STYLES 3 | ============================== */ 4 | 5 | @import 'typography'; -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/1-layouts/_content-layout.scss: -------------------------------------------------------------------------------- 1 | aio-shell.page-docs { 2 | .sidenav-content { 3 | // padding: 6rem 3rem 3rem 3rem; // THIS CAUSES THE TOP NAV TOOLBAR TO JUMP BETWEEN DOCS AND OTHER PAGES 4 | margin: auto; 5 | } 6 | } 7 | 8 | .sidenav-content { 9 | min-height: 100vh; 10 | padding: 80px 3rem 1rem; 11 | } 12 | 13 | @media (max-width: 600px) { 14 | aio-menu { 15 | display: none; 16 | } 17 | 18 | .sidenav-content { 19 | min-height: 450px; 20 | padding: 80px 1rem 1rem; 21 | } 22 | } 23 | 24 | .sidenav-container { 25 | width: 100%; 26 | height: 100vh; 27 | } 28 | 29 | .sidenav-content button { 30 | min-width: 50px; 31 | } 32 | 33 | #guide-change-log h2::before { 34 | content: ""; 35 | display: block; 36 | height: 1px; 37 | margin: 24px 0px; 38 | background: $lightgray; 39 | } 40 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/1-layouts/_doc-viewer.scss: -------------------------------------------------------------------------------- 1 | .no-animations aio-doc-viewer > * { 2 | // Disable view transition animations. 3 | transition: none !important; 4 | } 5 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/1-layouts/_layouts-dir.scss: -------------------------------------------------------------------------------- 1 | /* ============================== 2 | LAYOUT STYLES 3 | ============================== */ 4 | 5 | @import 'api-page'; 6 | @import 'content-layout'; 7 | @import 'doc-viewer'; 8 | @import 'footer'; 9 | @import 'layout-global'; 10 | @import 'marketing-layout'; 11 | @import 'not-found'; 12 | @import 'sidenav'; 13 | @import 'table-of-contents'; 14 | @import 'top-menu'; 15 | @import 'print-layout'; -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/1-layouts/_not-found.scss: -------------------------------------------------------------------------------- 1 | #file-not-found { 2 | padding: 3rem 3rem 3rem; 3 | } 4 | 5 | .nf-container { 6 | align-items: center; 7 | padding: 32px; 8 | } 9 | 10 | .nf-response { 11 | margin: 32px; 12 | height: 100%; 13 | flex-direction: column; 14 | 15 | h1 { 16 | font-size: 48px; 17 | color: $pink; 18 | text-transform: uppercase; 19 | margin: 8px 0; 20 | } 21 | } 22 | 23 | .nf-icon.material-icons { 24 | color: $pink; 25 | font-size: 100px; 26 | position: static; 27 | } 28 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/1-layouts/_table-of-contents.scss: -------------------------------------------------------------------------------- 1 | nav#main-table-of-contents { 2 | width: 200px; 3 | height: 900px; 4 | position: fixed; 5 | right: 0; 6 | top: 50px; 7 | bottom: 100px; 8 | margin-left: 32px; 9 | background-color: $pink; 10 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_contribute.scss: -------------------------------------------------------------------------------- 1 | .contribute-container { 2 | h2 { 3 | margin: 0; 4 | } 5 | 6 | .l-sub-section { 7 | width: 90%; 8 | margin-bottom: 20px; 9 | 10 | &:last-child { 11 | margin-bottom: 0; 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_edit-page-cta.scss: -------------------------------------------------------------------------------- 1 | .edit-page-cta { 2 | font-weight: 400; 3 | font-size: 14px; 4 | color: $pink; 5 | text-align: right; 6 | margin-right: 32px; 7 | display: block; 8 | position: absolute; 9 | right: 0; 10 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_features.scss: -------------------------------------------------------------------------------- 1 | // FEATURES MARKETING PAGE SPECIFIC STYLES 2 | 3 | .feature-section { 4 | margin: 0 0 32px; 5 | 6 | .feature-header, .text-headline { 7 | text-align: center; 8 | } 9 | 10 | .feature-header img { 11 | margin: 16px; 12 | } 13 | 14 | .feature-title { 15 | font-size: 16px; 16 | font-weight: 500; 17 | margin: 8px 0px; 18 | clear: both; 19 | } 20 | 21 | .feature-row { 22 | display: flex; 23 | flex-wrap: wrap; 24 | 25 | @media (max-width: 600px) { 26 | flex-direction: column; 27 | } 28 | 29 | .feature { 30 | max-width: 300px; 31 | margin: 0 16px; 32 | 33 | @media (max-width: 768px) { 34 | max-width: 100%; 35 | } 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_heading-anchors.scss: -------------------------------------------------------------------------------- 1 | .sidenav-content { 2 | h1, h2, h3, h4, h5, h6 { 3 | 4 | .header-link { 5 | color: $mediumgray; 6 | margin: 0 4px; 7 | text-decoration: none; 8 | user-select: none; 9 | visibility: hidden; 10 | display: inline-block; 11 | vertical-align: text-top; 12 | } 13 | 14 | &:hover .header-link { 15 | visibility: visible; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_hr.scss: -------------------------------------------------------------------------------- 1 | hr { 2 | border: none; 3 | background: $lightgray; 4 | height: 1px; 5 | } 6 | 7 | .hr-margin { 8 | display: block; 9 | height: 1px; 10 | border: 0; 11 | margin-top: 16px; 12 | margin-bottom: 16px; 13 | padding: 0; 14 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_progress-bar.scss: -------------------------------------------------------------------------------- 1 | .progress-bar-container { 2 | height: 2px; 3 | overflow: hidden; 4 | position: fixed; 5 | top: 0; 6 | width: 100vw; 7 | z-index: 11; 8 | } 9 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/2-modules/_subsection.scss: -------------------------------------------------------------------------------- 1 | .l-sub-section { 2 | color: $darkgray; 3 | background-color: rgba($pink, 0.05); 4 | border-left: 8px solid $pink; 5 | padding: 16px; 6 | margin-bottom: 8px; 7 | display: table; 8 | clear: both; 9 | width: 100%; 10 | box-sizing: border-box; 11 | 12 | h3 { 13 | margin: 8px 0 0; 14 | } 15 | 16 | a:hover { 17 | color: $pink; 18 | text-decoration: underline; 19 | } 20 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/src/styles/main.scss: -------------------------------------------------------------------------------- 1 | // import global themes 2 | @import './rxjs-theme'; 3 | 4 | // import global variables 5 | @import './constants'; 6 | 7 | // import global mixins 8 | @import './mixins'; 9 | 10 | // import directories 11 | @import './0-base/base-dir'; 12 | @import './1-layouts/layouts-dir'; 13 | @import './2-modules/modules-dir'; 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/testing/logger.service.ts: -------------------------------------------------------------------------------- 1 | import { Injectable } from '@angular/core'; 2 | 3 | @Injectable() 4 | export class MockLogger { 5 | 6 | output: { log: any[], error: any[], warn: any[] } = { 7 | log: [], 8 | error: [], 9 | warn: [] 10 | }; 11 | 12 | log(value: any, ...rest: any[]) { 13 | this.output.log.push([value, ...rest]); 14 | } 15 | 16 | error(value: any, ...rest: any[]) { 17 | this.output.error.push([value, ...rest]); 18 | } 19 | 20 | warn(value: any, ...rest: any[]) { 21 | this.output.warn.push([value, ...rest]); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/testing/search.service.ts: -------------------------------------------------------------------------------- 1 | import { Subject } from 'rxjs'; 2 | import { SearchResults } from 'app/search/interfaces'; 3 | 4 | export class MockSearchService { 5 | searchResults = new Subject(); 6 | initWorker = jasmine.createSpy('initWorker'); 7 | loadIndex = jasmine.createSpy('loadIndex'); 8 | search = jasmine.createSpy('search'); 9 | } 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/src/typings.d.ts: -------------------------------------------------------------------------------- 1 | /* SystemJS module definition */ 2 | declare var module: NodeModule; 3 | interface NodeModule { 4 | id: string; 5 | } 6 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tests/e2e/tsconfig.e2e.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../../out-tsc/e2e", 5 | "baseUrl": "./", 6 | "module": "commonjs", 7 | "target": "es5", 8 | "types": [ 9 | "jasmine", 10 | "jasminewd2", 11 | "node" 12 | ] 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/firebase-test-utils/FirebaseRedirect.ts: -------------------------------------------------------------------------------- 1 | import * as XRegExp from 'xregexp'; 2 | import { FirebaseGlob } from './FirebaseGlob'; 3 | 4 | export class FirebaseRedirect { 5 | glob = new FirebaseGlob(this.source); 6 | constructor(public source: string, public destination: string) {} 7 | 8 | replace(url: string) { 9 | const match = this.glob.match(url); 10 | if (match) { 11 | const paramReplacers = Object.keys(this.glob.namedParams).map(name => [ XRegExp(`:${name}`, 'g'), match[name] ]); 12 | const restReplacers = Object.keys(this.glob.restParams).map(name => [ XRegExp(`:${name}\\*`, 'g'), match[name] ]); 13 | return XRegExp.replaceEach(this.destination, [...paramReplacers, ...restReplacers]); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/audit.txt: -------------------------------------------------------------------------------- 1 | -a-xy-----b--x--cxyz-| 2 | 3 | ----i 4 | 5 | ----i 6 | 7 | ----i 8 | 9 | > audit() 10 | 11 | -----y--------x-----z| 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/bufferWhen.txt: -------------------------------------------------------------------------------- 1 | [styles] 2 | event_radius = 33 3 | operator_height = 60 4 | completion_height = 80 5 | 6 | ---a---b---c---d---e---f---g---h---| 7 | 8 | -------------s 9 | 10 | > bufferWhen() 11 | 12 | -------------x------------y--------(z|) 13 | x := [a, b, c] 14 | y := [d, e, f] 15 | z := [g, h] 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/concatAll.txt: -------------------------------------------------------------------------------- 1 | x = ----a------b------| 2 | 3 | y = ---c-d---| 4 | 5 | z = ---e--f-| 6 | 7 | -x---y----z------| 8 | 9 | > concatAll 10 | 11 | -----a------b---------c-d------e--f-| -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/debounce.txt: -------------------------------------------------------------------------------- 1 | -a----bc----d-ef----| 2 | 3 | ---x 4 | 5 | ---x 6 | 7 | ---x 8 | 9 | > debounce() 10 | 11 | ----a-----c-------f-| 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/delay.txt: -------------------------------------------------------------------------------- 1 | [styles] 2 | event_radius = 15 3 | 4 | ---a--b--c---| 5 | 6 | > delay(20) 7 | 8 | -----a--b--c-| 9 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/exhaustAll.txt: -------------------------------------------------------------------------------- 1 | x = --a---b---c--| 2 | 3 | y = ---d--e---f---| 4 | 5 | z = ---g--h---i---| 6 | 7 | ------x-------y------z--| 8 | ghosts = y 9 | 10 | > exhaustAll 11 | 12 | --------a---b---c-------g--h---i---| 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/throttle.txt: -------------------------------------------------------------------------------- 1 | -a-xy-----b--x--cxyz-| 2 | 3 | ----i 4 | 5 | ----i 6 | 7 | ----i 8 | 9 | > throttle() 10 | 11 | -a--------b-----c----| 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/diagrams/windowWhen.txt: -------------------------------------------------------------------------------- 1 | [styles] 2 | event_radius = 33 3 | operator_height = 60 4 | completion_height = 80 5 | 6 | ---a---b---c---d---e---f---g---h---| 7 | 8 | -------------x| 9 | -------------x| 10 | -------------x| 11 | 12 | > windowWhen() 13 | 14 | x = ---a---b---c-| 15 | 16 | y = --d---e---f---g| 17 | 18 | z = -g---h---| 19 | 20 | x------------y------------z--------| 21 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/marbles/tsconfig.marbles.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../../tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/stackblitz/rxjs.version.js: -------------------------------------------------------------------------------- 1 | // Exposes the current RxJS version number from the library's package.json 2 | // for usage in TypeScript files. 3 | // (Since said package.json is outside of this TypeScript project, it's not 4 | // available for a direct TypeScript import). 5 | 6 | module.exports = require('../../../../packages/rxjs/package.json').version; 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/.eslintignore: -------------------------------------------------------------------------------- 1 | **/*.template.js 2 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { 4 | es6: true, 5 | jasmine: true, 6 | node: true, 7 | }, 8 | extends: ['eslint:recommended', 'plugin:jasmine/recommended'], 9 | parserOptions: { 10 | ecmaVersion: 2020, 11 | }, 12 | plugins: ['jasmine'], 13 | rules: { 14 | 'linebreak-style': ['error', 'unix'], 15 | 'no-prototype-builtins': ['off'], 16 | quotes: ['error', 'single'], 17 | semi: ['error', 'always'], 18 | 'jasmine/new-line-before-expect': ['off'], 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/mocks/aliasedExports.ts: -------------------------------------------------------------------------------- 1 | export * from './operator'; 2 | export { operator as aliasedOperator } from './operator'; 3 | export { operator } from './operator'; 4 | export { anotherOperator as operatorWithoutDuplicate } from './anotherOperator'; 5 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/mocks/anotherOperator.ts: -------------------------------------------------------------------------------- 1 | export const anotherOperator = () => {}; 2 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/mocks/importedSrc.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright Google Inc. All Rights Reserved. 4 | * 5 | * Use of this source code is governed by an MIT-style license that can be 6 | * found in the LICENSE file at https://angular.io/license 7 | */ 8 | 9 | export const x = 100; 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/mocks/operator.ts: -------------------------------------------------------------------------------- 1 | export const operator = () => {}; 2 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/checkOperator.js: -------------------------------------------------------------------------------- 1 | module.exports = function checkOperator() { 2 | return { 3 | $runAfter: ['generateApiListDoc'], 4 | $runBefore: ['rendering-docs'], 5 | $process(docs) { 6 | docs.forEach((doc) => { 7 | doc.isOperator = !!(doc.originalModule?.startsWith('internal/operators') && doc.docType === 'function'); 8 | }); 9 | }, 10 | }; 11 | }; 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/computeApiBreadCrumbs.js: -------------------------------------------------------------------------------- 1 | module.exports = function computeApiBreadCrumbs(EXPORT_DOC_TYPES) { 2 | return { 3 | $runAfter: ['paths-computed'], 4 | $runBefore: ['rendering-docs'], 5 | $process(docs) { 6 | // Compute the breadcrumb for each doc by processing its containers 7 | docs.forEach(doc => { 8 | if (EXPORT_DOC_TYPES.indexOf(doc.docType) !== -1) { 9 | doc.breadCrumbs = [ 10 | { text: 'API', path: '/api' }, 11 | { text: 'rxjs/' + doc.moduleDoc.id, path: doc.moduleDoc.path }, 12 | { text: doc.name, path: doc.path } 13 | ]; 14 | } 15 | }); 16 | } 17 | }; 18 | }; 19 | 20 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/computeSearchTitle.js: -------------------------------------------------------------------------------- 1 | module.exports = function computeSearchTitleProcessor() { 2 | return { 3 | $runAfter: ['ids-computed'], 4 | $runBefore: ['generateKeywordsProcessor'], 5 | $process(docs) { 6 | docs.forEach(doc => { 7 | switch(doc.docType) { 8 | case 'function': 9 | doc.searchTitle = `${doc.name}()`; 10 | break; 11 | case 'module': 12 | doc.searchTitle = `${doc.id} package`; 13 | break; 14 | } 15 | }); 16 | } 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/computeStability.js: -------------------------------------------------------------------------------- 1 | module.exports = function computeStability(log, createDocMessage) { 2 | return { 3 | docTypes: [], 4 | $runAfter: ['tags-extracted'], 5 | $runBefore: ['rendering-docs'], 6 | $process(docs) { 7 | docs.forEach(doc => { 8 | if (this.docTypes.indexOf(doc.docType) !== -1 && 9 | doc.experimental === undefined && 10 | doc.deprecated === undefined && 11 | doc.stable === undefined) { 12 | log.debug(createDocMessage('Adding stable property', doc)); 13 | doc.stable = true; 14 | } 15 | }); 16 | } 17 | }; 18 | }; 19 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/convertPrivateClassesToInterfaces.js: -------------------------------------------------------------------------------- 1 | module.exports = function convertPrivateClassesToInterfacesProcessor( 2 | convertPrivateClassesToInterfaces) { 3 | return { 4 | $runAfter: ['processing-docs'], 5 | $runBefore: ['docs-processed'], 6 | $process: function(docs) { 7 | convertPrivateClassesToInterfaces(docs, false); 8 | return docs; 9 | } 10 | }; 11 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/filterContainedDocs.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Remove docs that are contained in (owned by) another doc 3 | * so that they don't get rendered as files in themselves. 4 | */ 5 | module.exports = function filterContainedDocs() { 6 | return { 7 | docTypes: ['member', 'function-overload', 'get-accessor-info', 'set-accessor-info', 'parameter'], 8 | $runAfter: ['extra-docs-added'], 9 | $runBefore: ['computing-paths'], 10 | $process: function(docs) { 11 | var docTypes = this.docTypes; 12 | return docs.filter(function(doc) { 13 | return docTypes.indexOf(doc.docType) === -1; 14 | }); 15 | } 16 | }; 17 | }; 18 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/filterPrivateDocs.js: -------------------------------------------------------------------------------- 1 | module.exports = function filterPrivateDocs() { 2 | return { 3 | $runAfter: ['extra-docs-added'], 4 | $runBefore: ['computing-paths'], 5 | $process: function(docs) { 6 | return docs.filter(function(doc) { return doc.privateExport !== true; }); 7 | } 8 | }; 9 | }; 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/processors/markBarredODocsAsPrivate.js: -------------------------------------------------------------------------------- 1 | module.exports = function markBarredODocsAsPrivate() { 2 | return { 3 | $runAfter: ['readTypeScriptModules'], 4 | $runBefore: ['adding-extra-docs'], 5 | $process: function(docs) { 6 | docs.forEach(doc => { 7 | if (doc.name && doc.name.indexOf('ɵ') === 0) { 8 | doc.privateExport = true; 9 | } 10 | }); 11 | } 12 | }; 13 | }; 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/tag-defs/deprecated.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return {name: 'deprecated'}; 3 | }; 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/tag-defs/internal.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Use this tag to ensure that dgeni does not include this code item 3 | * in the rendered docs. 4 | * 5 | * The `@internal` tag indicates to the compiler not to include the 6 | * item in the public typings file. 7 | * Use the `@nodoc` alias if you only want to hide the item from the 8 | * docs but not from the typings file. 9 | */ 10 | module.exports = function() { 11 | return { 12 | name: 'internal', 13 | aliases: ['nodoc'], 14 | transforms: function() { return true; } 15 | }; 16 | }; 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-api-package/tag-defs/throws.js: -------------------------------------------------------------------------------- 1 | module.exports = function(extractTypeTransform, wholeTagTransform) { 2 | return { 3 | name: 'throws', 4 | aliases: ['exception'], 5 | multi: true, 6 | transforms: [ extractTypeTransform, wholeTagTransform ] 7 | }; 8 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/processors/copyContentAssets.js: -------------------------------------------------------------------------------- 1 | 2 | module.exports = function copyContentAssetsProcessor(copyFolder) { 3 | return { 4 | $runBefore: ['postProcessHtml'], 5 | assetMappings: [], 6 | $process() { 7 | this.assetMappings.forEach(map => { 8 | copyFolder(map.from, map.to); 9 | }); 10 | } 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/readers/json.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Read in JSON files 3 | */ 4 | module.exports = function jsonFileReader() { 5 | return { 6 | name: 'jsonFileReader', 7 | getDocs: function(fileInfo) { 8 | 9 | // We return a single element array because content files only contain one document 10 | return [{ 11 | docType: fileInfo.baseName + '-json', 12 | data: JSON.parse(fileInfo.content), 13 | template: 'json-doc.template.json', 14 | id: fileInfo.baseName, 15 | aliases: [fileInfo.baseName, fileInfo.relativePath] 16 | }]; 17 | } 18 | }; 19 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/rendering/filterByPropertyValue.js: -------------------------------------------------------------------------------- 1 | module.exports = function filterBy() { 2 | return { 3 | name: 'filterByPropertyValue', 4 | process: function(list, property, value) { 5 | if (!list) return list; 6 | return list.filter(item => item[property] === value); 7 | } 8 | }; 9 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/rendering/filterByPropertyValue.spec.js: -------------------------------------------------------------------------------- 1 | const factory = require('./filterByPropertyValue'); 2 | 3 | describe('filterByPropertyValue filter', () => { 4 | let filter; 5 | 6 | beforeEach(function() { filter = factory(); }); 7 | 8 | it('should be called "filterByPropertyValue"', function() { expect(filter.name).toEqual('filterByPropertyValue'); }); 9 | 10 | it('should filter out items that do not match the given property value', function() { 11 | expect(filter.process([{ a: 1 }, { a: 2 }, { b: 1 }, { a: 1, b: 2 }, { a: null }, { a: undefined }], 'a', 1)) 12 | .toEqual([{ a: 1 }, { a: 1, b: 2 }]); 13 | }); 14 | }); -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/rendering/toId.js: -------------------------------------------------------------------------------- 1 | module.exports = function toId() { 2 | return { 3 | name: 'toId', 4 | process: function(str) { return str.replace(/[^(a-z)(A-Z)(0-9)._-]/g, '-'); } 5 | }; 6 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/rendering/toId.spec.js: -------------------------------------------------------------------------------- 1 | var factory = require('./toId'); 2 | 3 | describe('toId filter', function() { 4 | var filter; 5 | 6 | beforeEach(function() { filter = factory(); }); 7 | 8 | it('should be called "toId"', function() { expect(filter.name).toEqual('toId'); }); 9 | 10 | it('should convert a string to make it appropriate for use as an HTML id', function() { 11 | expect(filter.process('This is a big string with €bad#characters¢\nAnd even NewLines')) 12 | .toEqual('This-is-a-big-string-with--bad-characters--And-even-NewLines'); 13 | }); 14 | }); -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/rendering/trimBlankLines.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return { 3 | name: 'trimBlankLines', 4 | process: function(str) { 5 | var lines = str.split(/\r?\n/); 6 | while (lines.length && (lines[0].trim() === '')) { 7 | lines.shift(); 8 | } 9 | while (lines.length && (lines[lines.length - 1].trim() === '')) { 10 | lines.pop(); 11 | } 12 | return lines.join('\n'); 13 | } 14 | }; 15 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/rendering/trimBlankLines.spec.js: -------------------------------------------------------------------------------- 1 | var factory = require('./trimBlankLines'); 2 | 3 | describe('trimBlankLines filter', function() { 4 | var filter; 5 | 6 | beforeEach(function() { filter = factory(); }); 7 | 8 | it('should be called "trimBlankLines"', 9 | function() { expect(filter.name).toEqual('trimBlankLines'); }); 10 | 11 | it('should remove empty lines from the start and end of the string', function() { 12 | expect(filter.process('\n \n\nsome text\n \nmore text\n \n')) 13 | .toEqual('some text\n \nmore text'); 14 | }); 15 | }); -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/services/copyFolder.js: -------------------------------------------------------------------------------- 1 | const {copySync} = require('fs-extra'); 2 | 3 | module.exports = function copyFolder() { 4 | return (from, to) => copySync(from, to); 5 | }; 6 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/services/filterFromInImports.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * This filter is filtering word 'from' in ES6 import statements. 3 | * For example, next line: 4 | * 5 | * ``` 6 | * import { interval, from } from 'rxjs'; 7 | * ``` 8 | * 9 | * will filter the second occurrence of the word 'from' leaving 10 | * it without the link, but the first occurrence will remain 11 | * unfiltered, thus it will get the link to 12 | * /api/index/function/from 13 | */ 14 | module.exports = function filterFromInImports(): (words: string[], index: number) => boolean { 15 | return (words: string[], index: number) => { 16 | const previousWord = words[index - 1]; 17 | const nextWord = words[index + 1]; 18 | 19 | return words[index] === 'from' && /}/.test(previousWord) && /'/.test(nextWord); 20 | }; 21 | }; 22 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/services/filterPipes.js: -------------------------------------------------------------------------------- 1 | 2 | /** 3 | * This service is used by the autoLinkCode post-processors to filter out pipe docs 4 | * where the matching word is the pipe name and is not preceded by a pipe 5 | */ 6 | module.exports = function filterPipes() { 7 | return (docs, words, index) => 8 | docs.filter(doc => 9 | doc.docType !== 'pipe' || 10 | doc.pipeOptions.name !== '\'' + words[index] + '\'' || 11 | index > 0 && words[index - 1].trim() === '|'); 12 | }; 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-base-package/services/getImageDimensions.js: -------------------------------------------------------------------------------- 1 | const { resolve } = require('canonical-path'); 2 | const sizeOf = require('image-size'); 3 | 4 | module.exports = function getImageDimensions() { 5 | return (basePath, path) => sizeOf(resolve(basePath, path)); 6 | }; 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular-content-package/inline-tag-defs/anchor.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'a', 3 | description: 'A shorthand for creating heading anchors. Usage: `{@a some-id}`', 4 | handler: function(doc, tagName, tagDescription) { 5 | return ''; 6 | } 7 | }; 8 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular.io-package/processors/cleanGeneratedFiles.js: -------------------------------------------------------------------------------- 1 | const rimraf = require('rimraf'); 2 | module.exports = function cleanGeneratedFiles() { 3 | return { 4 | $runAfter: ['writing-files'], 5 | $runBefore: ['writeFilesProcessor'], 6 | $process: function() { 7 | rimraf.sync('src/generated/{*.json}'); 8 | } 9 | }; 10 | }; 11 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/angular.io-package/processors/createOverviewDump.js: -------------------------------------------------------------------------------- 1 | var _ = require('lodash'); 2 | 3 | module.exports = function createOverviewDump() { 4 | 5 | return { 6 | $runAfter: ['processing-docs'], 7 | $runBefore: ['docs-processed'], 8 | $process: function(docs) { 9 | var overviewDoc = { 10 | id: 'overview-dump', 11 | aliases: ['overview-dump'], 12 | path: 'overview-dump', 13 | outputPath: 'overview-dump.html', 14 | modules: [] 15 | }; 16 | _.forEach(docs, function(doc) { 17 | if (doc.docType === 'module') { 18 | overviewDoc.modules.push(doc); 19 | } 20 | }); 21 | docs.push(overviewDoc); 22 | } 23 | }; 24 | }; -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/content-package/readers/content.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @dgService 3 | * @description 4 | * This file reader will pull the contents from a text file (by default .md) 5 | * 6 | * The doc will initially have the form: 7 | * ``` 8 | * { 9 | * content: 'the content of the file', 10 | * startingLine: 1 11 | * } 12 | * ``` 13 | */ 14 | module.exports = function contentFileReader() { 15 | return { 16 | name: 'contentFileReader', 17 | defaultPattern: /\.md$/, 18 | getDocs: function(fileInfo) { 19 | 20 | // We return a single element array because content files only contain one document 21 | return [{docType: 'content', content: fileInfo.content, startingLine: 1}]; 22 | } 23 | }; 24 | }; 25 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/content-package/tag-defs/intro.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return {name: 'intro'}; 3 | }; 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/content-package/tag-defs/title.js: -------------------------------------------------------------------------------- 1 | module.exports = function() { 2 | return {name: 'title'}; 3 | }; 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/links-package/services/disambiguators/disambiguateByDeprecated.js: -------------------------------------------------------------------------------- 1 | module.exports = function disambiguateByDeprecated() { 2 | return (alias, originatingDoc, docs) => { 3 | const filteredDocs = docs.filter((doc) => doc.deprecated === undefined); 4 | return filteredDocs.length > 0 ? filteredDocs : docs; 5 | }; 6 | }; 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/links-package/services/disambiguators/disambiguateByDeprecated.spec.js: -------------------------------------------------------------------------------- 1 | const disambiguateByDeprecated = require('./disambiguateByDeprecated')(); 2 | const doc1 = { id: 'doc1' }; 3 | const doc2 = { id: 'doc2', deprecated: true }; 4 | const doc3 = { id: 'doc3', deprecated: '' }; 5 | const doc4 = { id: 'doc4' }; 6 | const doc5 = { id: 'doc5', deprecated: 'Some text' }; 7 | 8 | describe('disambiguateByDeprecated', () => { 9 | it('should filter out docs whose `deprecated` property is defined', () => { 10 | expect(disambiguateByDeprecated('alias', {}, [doc1, doc2, doc3, doc4, doc5])).toEqual([doc1, doc4]); 11 | }); 12 | 13 | it('should not filter docs if all of them are `deprecated`', () => { 14 | expect(disambiguateByDeprecated('alias', {}, [doc2, doc3, doc5])).toEqual([doc2, doc3, doc5]); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/links-package/services/disambiguators/disambiguateByModule.js: -------------------------------------------------------------------------------- 1 | module.exports = function disambiguateByModule() { 2 | return (alias, originatingDoc, docs) => { 3 | const originatingModule = originatingDoc && originatingDoc.moduleDoc; 4 | if (originatingModule) { 5 | const filteredDocs = docs.filter(doc => doc.moduleDoc === originatingModule); 6 | if (filteredDocs.length > 0) { 7 | return filteredDocs; 8 | } 9 | } 10 | return docs; 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/links-package/services/disambiguators/disambiguateByNonMember.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This link disambiguator will remove all the members from the list of ambiguous links 3 | * if there is at least one link to a doc that is not a member. 4 | * 5 | * The heuristic is that exports are more important than members when linking, and that 6 | * in general members will be linked to via a more explicit code links such as 7 | * `MyClass.member` rather than simply `member`. 8 | */ 9 | module.exports = function disambiguateByNonMember() { 10 | return (alias, originatingDoc, docs) => { 11 | const filteredDocs = docs.filter(doc => doc.docType !== 'member'); 12 | return filteredDocs.length > 0 ? filteredDocs : docs; 13 | }; 14 | }; 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/links-package/services/disambiguators/disambiguateByNonOperator.js: -------------------------------------------------------------------------------- 1 | /** 2 | * This link disambiguator will remove all the members from the list of ambiguous links 3 | * if there is at least one link to a doc that does not belong to 'operators' module. 4 | * TODO Remove this disambiguator once 'rxjs/operators' export is removed 5 | */ 6 | module.exports = function disambiguateByNonOperator() { 7 | return (alias, originatingDoc, docs) => { 8 | const filteredDocs = docs.filter((doc) => doc.moduleDoc?.id !== 'operators'); 9 | return filteredDocs.length > 0 ? filteredDocs : docs; 10 | }; 11 | }; 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/links-package/services/getAliases.spec.js: -------------------------------------------------------------------------------- 1 | var getAliasesFactory = require('./getAliases'); 2 | 3 | describe('getAliases', function() { 4 | 5 | it('should extract all the parts from a code name', function() { 6 | 7 | var getAliases = getAliasesFactory(); 8 | 9 | expect(getAliases({id: 'module:ng.service:$http#get'})).toEqual([ 10 | '$http#get', 'service:$http#get', 'ng.$http#get', 'module:ng.$http#get', 11 | 'ng.service:$http#get', 'module:ng.service:$http#get', 'get' 12 | ]); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/remark-package/index.js: -------------------------------------------------------------------------------- 1 | var Package = require('dgeni').Package; 2 | 3 | /** 4 | * @dgPackage remark 5 | * @description Overrides the renderMarkdown service with an implementation based on remark 6 | */ 7 | module.exports = new Package('remark', ['nunjucks']) 8 | .factory(require('./services/markedNunjucksFilter')) 9 | .factory(require('./services/renderMarkdown')); 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/remark-package/services/handlers/code.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Render markdown code blocks as `` tags 3 | */ 4 | module.exports = function code(h, node) { 5 | var value = node.value ? ('\n' + node.value + '\n') : ''; 6 | var lang = node.lang && node.lang.match(/^[^ \t]+(?=[ \t]|$)/); 7 | var props = {}; 8 | 9 | if (lang) { 10 | props.language = lang; 11 | } 12 | 13 | return h(node, 'code-example', props, [{ type: 'text', value }]); 14 | }; 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/remark-package/services/markedNunjucksFilter.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Convert the value, as markdown, into HTML 3 | * @param headingMappings A map of headings to convert (e.g. from h3 to h4). 4 | */ 5 | module.exports = function markedNunjucksFilter(renderMarkdown) { 6 | return { 7 | name: 'marked', 8 | process: function(str, headingMappings) { 9 | return str && renderMarkdown(str, headingMappings); 10 | } 11 | }; 12 | }; 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/build.spec.ts: -------------------------------------------------------------------------------- 1 | import { build } from './build'; 2 | import { mockFlatApiList, mockRawTreeNodes } from './fixtures'; 3 | import { treeNodeCount } from './helpers'; 4 | 5 | describe('build', () => { 6 | const tree = build(mockFlatApiList, mockRawTreeNodes, {warn: () => {}}); 7 | it('should return a flat map of all nodes and one additional initial node', () => { 8 | expect(tree.initial).toBeDefined() 9 | expect(Object.keys(tree).length).toBe(treeNodeCount(mockRawTreeNodes) + 1); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/extractInitialSequence.ts: -------------------------------------------------------------------------------- 1 | import { TreeNode } from './interfaces'; 2 | 3 | /** 4 | * Strip out initial sequence and add to tree 5 | * 6 | * @export 7 | * @param {Tree} tree 8 | * @returns {{id: string, options: string[]}} 9 | */ 10 | export function extractInitialSequence(tree: TreeNode[]): {id: string, options: string[]} { 11 | return { 12 | id: 'initial', 13 | options: tree.filter(node => !node.depth).map(node => node.id) 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/flattenApiList.spec.ts: -------------------------------------------------------------------------------- 1 | import { flattenApiList } from './flattenApiList'; 2 | import { mockRawApiListWithDeprecatedRefs } from './fixtures'; 3 | import { validApiRefCount } from './helpers'; 4 | 5 | describe('flattenApiList', () => { 6 | describe('when a API reference is deprecated', () => { 7 | const flattenedApiList = flattenApiList(mockRawApiListWithDeprecatedRefs); 8 | const validRefCount = validApiRefCount(mockRawApiListWithDeprecatedRefs); 9 | it('should return a flat list with only stable refs', () => { 10 | expect(Object.keys(flattenedApiList).length).toBe(validRefCount); 11 | }); 12 | }); 13 | }); 14 | 15 | 16 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/generateUniqueId.spec.ts: -------------------------------------------------------------------------------- 1 | import { generateUniqueId } from './generateUniqueId'; 2 | 3 | describe('generateUniqueId', () => { 4 | describe('when called', () => { 5 | it('will generate a unique string', () => { 6 | const x = generateUniqueId(); 7 | expect(x).not.toBe(generateUniqueId()); 8 | expect(typeof x).toBe('string'); 9 | }); 10 | }); 11 | }); 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/generateUniqueId.ts: -------------------------------------------------------------------------------- 1 | import { randomBytes } from 'crypto'; 2 | 3 | /** 4 | * Generates a unique ID for the decision tree nodes 5 | * 6 | * @export 7 | * @requires crypto:randomByes 8 | * @returns {string} 9 | */ 10 | export function generateUniqueId(): string { 11 | return randomBytes(2).toString('hex'); 12 | } 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/helpers.spec.ts: -------------------------------------------------------------------------------- 1 | import { isStable } from './helpers'; 2 | 3 | describe('isStable', () => { 4 | describe('when passed anything but the string "deprecated"', () => { 5 | it('will return true', () => { 6 | expect(isStable('')).toBeTruthy(); 7 | }); 8 | }); 9 | describe('when passed the string "deprecated"', () => { 10 | it('will return false', () => { 11 | expect(isStable('deprecated')).toBeFalsy(); 12 | }); 13 | }); 14 | }); 15 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/rxjs-decision-tree-generator/src/lib/index.ts: -------------------------------------------------------------------------------- 1 | export * from './addUniqueId'; 2 | export * from './build'; 3 | export * from './extractInitialSequence'; 4 | export * from './flattenApiList'; 5 | export * from './generateUniqueId'; 6 | export * from './interfaces'; 7 | export * from './decisionTreeReducer'; 8 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/const.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'var.template.html' -%} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/decorator.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/memberHelpers.html" as memberHelper -%} 2 | {% import "lib/paramList.html" as params -%} 3 | {% extends 'export-base.template.html' %} 4 | 5 | {% block overview %}{% include "includes/decorator-overview.html" %}{% endblock %} 6 | {% block details %} 7 | {% include "includes/description.html" %} 8 | {$ memberHelper.renderProperties(doc.members, 'metadata-members', 'metadata-member', 'Options') $} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/deprecation.template.html: -------------------------------------------------------------------------------- 1 | {% block overview %} 2 |
3 |

Deprecations

4 |

The API listed below will be removed in the next major release!

5 | 6 | {% for deprecation in doc.data %} 7 | 8 | 11 | 14 | 15 | {% endfor %} 16 |
9 | {$ deprecation.name $} 10 | 12 | {$ deprecation.text $} 13 |
17 |
18 | {% endblock %} 19 | 20 | 21 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/directive.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/directiveHelpers.html" as directiveHelper -%} 2 | {% import "lib/paramList.html" as params -%} 3 | {% extends 'class.template.html' -%} 4 | 5 | {% block overview %}{% include "includes/directive-overview.html" %}{% endblock %} 6 | {% block additional -%} 7 | {% include "includes/selectors.html" %} 8 | {$ directiveHelper.renderBindings(doc.inputs, 'inputs', 'input', 'Inputs') $} 9 | {$ directiveHelper.renderBindings(doc.outputs, 'outputs', 'output', 'Outputs') $} 10 | {% include "includes/export-as.html" %} 11 | {% endblock %} 12 | 13 | {% block annotations %}{% endblock %} 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/enum.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'class.template.html' -%} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/export-base.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.template.html' -%} 2 | 3 | {% block body %} 4 | {% include "includes/renamed-exports.html" %} 5 |

{$ doc.shortDescription | marked $}

6 | {% include "includes/security-notes.html" %} 7 | {% include "includes/deprecation.html" %} 8 | {% block overview %}{% endblock %} 9 | {% block details %}{% endblock %} 10 | {% include "includes/usageNotes.html" %} 11 | {% include "includes/see-also.html" %} 12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/annotations.html: -------------------------------------------------------------------------------- 1 | {%- if doc.decorators.length %} 2 |
3 |

Annotations

4 | {%- for decorator in doc.decorators %} 5 | @{$ decorator.name $}({$ decorator.arguments $}) 6 | {% if not decorator.notYetDocumented %}{$ decorator.description | marked $}{% endif %} 7 | {% endfor %} 8 |
9 | {% endif %} 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/class-overview.html: -------------------------------------------------------------------------------- 1 | {% import "lib/memberHelpers.html" as memberHelper -%} 2 | 3 |
4 | 5 | {% if doc.isAbstract %}abstract {% endif%}{$ doc.docType $} {$ doc.name $}{$ doc.typeParams | escape $}{$ memberHelper.renderHeritage(doc) $} {{$ memberHelper.renderMembers(doc) $} 6 | } 7 | 8 | {$ descendants.renderDescendants(doc, 'class', 'Subclasses') $} 9 |
10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/decorator-overview.html: -------------------------------------------------------------------------------- 1 | {% import "lib/memberHelpers.html" as memberHelper -%} 2 | 3 | {% if doc.members.length %} 4 |
5 | 6 | @{$ doc.name $}{$ doc.typeParams | escape $}({ {$ memberHelper.renderMembers(doc) $} 7 | }) 8 | 9 |
10 | {% endif %} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/deprecation.html: -------------------------------------------------------------------------------- 1 | {% if doc.deprecated %} 2 |
3 |

Deprecation Notes

4 | {$ doc.deprecated | marked $} 5 |
6 | {% endif %} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/description.html: -------------------------------------------------------------------------------- 1 | {% if doc.description %} 2 |
3 |

Description

4 | {$ doc.description | trimBlankLines | marked $} 5 |
6 | {% endif %} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/directive-overview.html: -------------------------------------------------------------------------------- 1 | {% import "lib/memberHelpers.html" as memberHelper -%} 2 | 3 |
4 | {% for decorator in doc.decorators %} 5 | @{$ decorator.name $}({$ decorator.arguments $}){% endfor %} 6 | class {$ doc.name $}{$ doc.typeParams | escape $}{$ memberHelper.renderHeritage(doc) $} { 7 | {%- if doc.statics.length %}{% for member in doc.statics %}{% if not member.internal %} 8 | {$ memberHelper.renderMemberSyntax(member, 1) $}{% endif %}{% endfor %}{% endif -%} 9 | {$ memberHelper.renderMembers(doc) $} 10 | } 11 | 12 |
13 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/export-as.html: -------------------------------------------------------------------------------- 1 | {%- if doc.exportAs %} 2 |
3 |

Exported as

4 |
5 | {$ doc.exportAs $} 6 |
7 |
8 | {% endif %} 9 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/info-bar.html: -------------------------------------------------------------------------------- 1 | {% import "lib/githubLinks.html" as github -%} 2 | 3 | 4 |
5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | {% if doc.ngModule %} 21 | 22 | 23 | 24 | 25 | {% endif %} 26 | 27 |
npm Package@angular/{$ doc.moduleDoc.id.split('/')[0] $}
Moduleimport { {$ doc.name $} } from '@angular/{$ doc.moduleDoc.id $}';
Source{$ github.githubViewLink(doc, versionInfo) $}
NgModule{@link {$ doc.ngModule $}}
28 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/interface-overview.html: -------------------------------------------------------------------------------- 1 | {% import "lib/memberHelpers.html" as memberHelper -%} 2 | 3 |
4 | 5 | interface {$ doc.name $}{$ doc.typeParams | escape $}{$ memberHelper.renderHeritage(doc) $} {{$ memberHelper.renderMembers(doc) $} 6 | } 7 | 8 | {$ descendants.renderDescendants(doc, 'interface', 'Child Interfaces') $} 9 | {$ descendants.renderDescendants(doc, 'class', 'Class Implementations') $} 10 |
-------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/metadata.html: -------------------------------------------------------------------------------- 1 | {% if doc.members.length %} 2 | 13 | {% endif %} 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/renamed-exports.html: -------------------------------------------------------------------------------- 1 | {% if doc.renamedDuplicates %} 2 |
3 | Aliased as 4 | {% for d in doc.renamedDuplicates %} 5 | {$ d.name $}{% if not loop.last %}, {% endif %} 6 | {% endfor %} 7 |
8 | {% endif %} 9 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/security-notes.html: -------------------------------------------------------------------------------- 1 | {% if doc.security %} 2 |
3 |

Security Risk

4 | {$ doc.security | marked $} 5 |
6 | {% endif %} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/see-also.html: -------------------------------------------------------------------------------- 1 | {%- if doc.see.length %} 2 |
3 |

See Also

4 |
    5 | {% for see in doc.see %} 6 |
  • {$ see | marked $}
  • {% endfor %} 7 |
8 |
9 | {% endif %} 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/selectors.html: -------------------------------------------------------------------------------- 1 | {%- if doc.selector %} 2 |
3 |

Selectors

4 | 5 | {%- for selector in doc.selector.split(',') %} 6 | {$ selector $}{% endfor %} 7 | 8 |
9 | {% endif %} 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/includes/usageNotes.html: -------------------------------------------------------------------------------- 1 | {% if doc.usageNotes %} 2 |
3 |

Usage Notes

4 | {$ doc.usageNotes | marked $} 5 |
6 | {% endif %} 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/interface.template.html: -------------------------------------------------------------------------------- 1 | {% import "lib/paramList.html" as params -%} 2 | {% import "lib/memberHelpers.html" as memberHelper -%} 3 | {% import "lib/descendants.html" as descendants -%} 4 | {% extends 'export-base.template.html' -%} 5 | 6 | {% block overview %}{% include "includes/interface-overview.html" %}{% endblock %} 7 | {% block details %} 8 | {% include "includes/description.html" %} 9 | {$ memberHelper.renderProperties(doc.properties, 'instance-properties', 'instance-property', 'Properties') $} 10 | {$ memberHelper.renderMethodDetails(doc.methods, 'instance-methods', 'instance-method', 'Methods') $} 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/let.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'var.template.html' -%} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/lib/directiveHelpers.html: -------------------------------------------------------------------------------- 1 | {% macro renderBindings(bindings, cssContainerClass, cssItemClass, title) -%} 2 | {% if bindings.length %} 3 |
4 |

{$ title $}

5 | {% for binding in bindings %} 6 |
7 | {$ binding.bindingName $} bound to {$ binding.memberDoc.containerDoc.name $}.{$ binding.propertyName $} 8 | {#{$ binding.memberDoc.description | trimBlankLines | marked $}#} 9 |
10 | {% endfor %} 11 |
12 | {% endif %} 13 | {%- endmacro %} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/module.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'base.template.html' -%} 2 | 3 | {% block body -%} 4 | 5 | {% include "includes/deprecation.html" %} 6 | {% include "includes/description.html" %} 7 | 8 |
9 |
    10 | {% for export in doc.exports -%} 11 | {% if not export.duplicateOf %} 12 |
  • {$ export.name $}
  • 13 | {% endif %} 14 | {%- endfor %} 15 |
16 |
17 | 18 | {%- endblock %} 19 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/pipe.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'export-base.template.html' -%} 2 | 3 | {% block overview %} 4 | {% include "includes/pipe-overview.html" %} 5 | {% endblock %} 6 | {% block details %} 7 | {% include "includes/description.html" %} 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/type-alias.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'export-base.template.html' %} 2 | 3 | {% block overview %} 4 |
5 | 6 | type {$ doc.name $}{$ doc.typeParameters | escape $}{% if doc.typeDefinition %} = {$ doc.typeDefinition | escape $}{% endif %}; 7 | 8 |
9 | {% endblock %} 10 | 11 | {% block details %} 12 | {% include "includes/description.html" %} 13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/value-module.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'interface.template.html' %} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/api/var.template.html: -------------------------------------------------------------------------------- 1 | {% extends 'export-base.template.html' %} 2 | 3 | {% block overview %} 4 | 5 | const {$ doc.name $}: {$ (doc.type | escape) or 'any' $}; 6 | 7 | {% endblock %} 8 | 9 | {% block details %} 10 | {% include "includes/description.html" %} 11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/content.template.html: -------------------------------------------------------------------------------- 1 | {% if doc.title %}{$ ('# ' + doc.title.trim()) | marked $}{% endif %} 2 |
3 | {$ doc.description | marked $} 4 |
-------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/data-module.template.js: -------------------------------------------------------------------------------- 1 | /* tslint:disable quotemark */ 2 | /* TODO: rework this so that it has single quotes */ 3 | export const {$ doc.serviceName $} = {$ doc.value | json $}; 4 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/example-region.template.html: -------------------------------------------------------------------------------- 1 | {$ doc.contents | escape $} 2 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/json-doc.template.json: -------------------------------------------------------------------------------- 1 | {$ doc.data | json $} -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/templates/sitemap.template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | {%- for url in doc.urls %} 4 | 5 | https://rxjs.dev/{$ url $} 6 | {% endfor %} 7 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tools/transforms/test.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Use this script to run the tests for the doc generation 3 | * We cannot use the Jasmine CLI directly because it doesn't seem to 4 | * understand the glob and only runs one spec file. 5 | * 6 | * Equally we cannot use a jasmine.json config file because it doesn't 7 | * allow us to set the projectBaseDir, which means that you have to run 8 | * jasmine CLI from this directory. 9 | * 10 | * Using a file like this gives us full control and keeps the package.json 11 | * file clean and simple. 12 | */ 13 | 14 | const Jasmine = require('jasmine'); 15 | const jasmine = new Jasmine({ projectBaseDir: __dirname }); 16 | jasmine.loadConfig({ spec_files: ['**/*.spec.{js,ts}'] }); 17 | jasmine.execute(); 18 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tsconfig.app.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "noPropertyAccessFromIndexSignature": false, 5 | "outDir": "./out-tsc/app", 6 | "types": [ 7 | "trusted-types" 8 | ], 9 | "plugins": [ 10 | { 11 | "name": "tsec", 12 | "exemptionConfig": "./security-exemptions.json" 13 | } 14 | ] 15 | }, 16 | "files": [ 17 | "src/main.ts", 18 | "src/polyfills.ts" 19 | ], 20 | "include": [ 21 | "src/**/*.d.ts" 22 | ] 23 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/tsconfig.docs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "noUnusedParameters": false, 6 | "noUnusedLocals": false, 7 | "target": "es6" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /apps/rxjs.dev/tsconfig.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "noUnusedParameters": false, 5 | "outDir": "./out-tsc/spec", 6 | "types": [ 7 | "jasmine", 8 | "node" 9 | ] 10 | }, 11 | "files": [ 12 | "src/test.ts", 13 | "src/polyfills.ts" 14 | ], 15 | "include": [ 16 | "src/testing/**/*.ts", 17 | "src/**/*.spec.ts", 18 | "src/**/*.d.ts" 19 | ] 20 | } -------------------------------------------------------------------------------- /apps/rxjs.dev/tsconfig.worker.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "./out-tsc/worker", 5 | "types": [ 6 | "lunr" 7 | ], 8 | "lib": [ 9 | "es2018", 10 | "webworker" 11 | ] 12 | }, 13 | "include": [ 14 | "src/**/*.worker.ts" 15 | ] 16 | } 17 | -------------------------------------------------------------------------------- /packages/observable/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": ["../../.eslintrc.json"], 3 | "ignorePatterns": ["!**/*"], 4 | "overrides": [ 5 | { 6 | "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], 7 | "parserOptions": { 8 | "project": ["./packages/observable/tsconfig.json"] 9 | }, 10 | "rules": {} 11 | }, 12 | { 13 | "files": ["*.ts", "*.tsx"], 14 | "rules": {} 15 | }, 16 | { 17 | "files": ["*.js", "*.jsx"], 18 | "rules": {} 19 | }, 20 | { 21 | "files": ["./package.json"], 22 | "parser": "jsonc-eslint-parser", 23 | "rules": { 24 | "@nx/dependency-checks": ["error"] 25 | } 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /packages/observable/.tshy/browser.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./build.json", 3 | "include": [ 4 | "../src/**/*.ts", 5 | "../src/**/*.mts", 6 | "../src/**/*.tsx" 7 | ], 8 | "exclude": [], 9 | "compilerOptions": { 10 | "outDir": "../.tshy-build/browser" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/observable/.tshy/build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "rootDir": "../src", 5 | "target": "es2022", 6 | "module": "nodenext", 7 | "moduleResolution": "nodenext" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/observable/.tshy/commonjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./build.json", 3 | "include": [ 4 | "../src/**/*.ts", 5 | "../src/**/*.cts", 6 | "../src/**/*.tsx" 7 | ], 8 | "exclude": [ 9 | "../src/**/*.mts" 10 | ], 11 | "compilerOptions": { 12 | "outDir": "../.tshy-build/commonjs" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/observable/.tshy/esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./build.json", 3 | "include": [ 4 | "../src/**/*.ts", 5 | "../src/**/*.mts", 6 | "../src/**/*.tsx" 7 | ], 8 | "exclude": [], 9 | "compilerOptions": { 10 | "outDir": "../.tshy-build/esm" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/observable/.tshy/webpack.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./build.json", 3 | "include": [ 4 | "../src/**/*.ts", 5 | "../src/**/*.cts", 6 | "../src/**/*.tsx" 7 | ], 8 | "exclude": [ 9 | "../src/**/*.mts" 10 | ], 11 | "compilerOptions": { 12 | "outDir": "../.tshy-build/webpack" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /packages/observable/src/index.ts: -------------------------------------------------------------------------------- 1 | export { Observable, Subscriber, Subscription, UnsubscriptionError, config, from, isObservable, operate } from './observable.js'; 2 | export type { GlobalConfig, SubscriberOverrides } from './observable.js'; 3 | 4 | // TODO: reevaluate these as part of public API of @rxjs/observable? They aren't exported from rxjs so feel more internal? 5 | export { 6 | COMPLETE_NOTIFICATION, 7 | ObservableInputType, 8 | createNotification, 9 | errorNotification, 10 | fromArrayLike, 11 | getObservableInputType, 12 | isArrayLike, 13 | isFunction, 14 | isPromise, 15 | nextNotification, 16 | readableStreamLikeToAsyncGenerator, 17 | subscribeToArray, 18 | } from './observable.js'; 19 | -------------------------------------------------------------------------------- /packages/observable/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "declarationMap": true, 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "inlineSources": true, 8 | "jsx": "react", 9 | "module": "nodenext", 10 | "moduleResolution": "nodenext", 11 | "noUncheckedIndexedAccess": true, 12 | "resolveJsonModule": true, 13 | "skipLibCheck": true, 14 | "sourceMap": true, 15 | "strict": true, 16 | "target": "es2022" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/rxjs/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | npm-debug.log 3 | Dockerfile* 4 | docker-compose* 5 | .dockerignore 6 | .git 7 | .gitignore -------------------------------------------------------------------------------- /packages/rxjs/.gitattributes: -------------------------------------------------------------------------------- 1 | # no eol conversions! 2 | -------------------------------------------------------------------------------- /packages/rxjs/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:lts 2 | 3 | # Create app directory 4 | WORKDIR /rxjs 5 | 6 | COPY . . 7 | 8 | WORKDIR /rxjs/apps/rxjs.dev 9 | 10 | RUN yarn setup 11 | 12 | EXPOSE 4200 13 | 14 | CMD ["npm", "start:docker"] -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/browser/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | RxJS Import Integration Test 7 | 8 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/browser/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rxjs-import-test", 3 | "private": true, 4 | "version": "0.0.1", 5 | "module": "./index.mjs", 6 | "scripts": { 7 | "test": "node ./index.mjs" 8 | }, 9 | "dependencies": { 10 | "puppeteer": "^21.4.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/commonjs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rxjs-import-test", 3 | "private": true, 4 | "version": "0.0.1", 5 | "main": "./index.js", 6 | "scripts": { 7 | "test": "node ./index.js" 8 | }, 9 | "dependencies": {} 10 | } 11 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/esm/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rxjs-import-test", 3 | "private": true, 4 | "module": "./index.mjs", 5 | "version": "0.0.1", 6 | "scripts": { 7 | "test": "node ./index.mjs" 8 | }, 9 | "dependencies": {} 10 | } 11 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/vite-bundle/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/vite-bundle/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vite + TS Import Test 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/vite-bundle/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-bundle", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "test": "node test.mjs", 8 | "dev": "vite", 9 | "build": "tsc && vite build", 10 | "preview": "vite preview" 11 | }, 12 | "devDependencies": { 13 | "typescript": "^5.0.2", 14 | "vite": "^4.4.5" 15 | }, 16 | "dependencies": { 17 | "puppeteer": "^21.4.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/vite-bundle/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/vite-bundle/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "resolveJsonModule": true, 13 | "isolatedModules": true, 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true 21 | }, 22 | "include": ["src"] 23 | } 24 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/webpack-bundle/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Vite + TS Import Test 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/webpack-bundle/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rxjs-import-test", 3 | "private": true, 4 | "version": "0.0.1", 5 | "scripts": { 6 | "test": "node ./test.js" 7 | }, 8 | "dependencies": { 9 | "html-webpack-plugin": "^5.5.3", 10 | "puppeteer": "^21.4.1", 11 | "ts-loader": "^9.5.0", 12 | "typescript": "^5.2.2", 13 | "webpack": "^5.89.0", 14 | "webpack-cli": "^5.1.4", 15 | "webpack-dev-server": "^4.15.1" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/webpack-bundle/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "node", 11 | // "allowImportingTsExtensions": true, 12 | // "resolveJsonModule": true, 13 | // "isolatedModules": true, 14 | // "noEmit": true, 15 | 16 | // /* Linting */ 17 | // "strict": true, 18 | // "noUnusedLocals": true, 19 | // "noUnusedParameters": true, 20 | // "noFallthroughCasesInSwitch": true 21 | }, 22 | "include": ["src"] 23 | } 24 | -------------------------------------------------------------------------------- /packages/rxjs/integration/import/fixtures/webpack-bundle/webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const HtmlWebpackPlugin = require('html-webpack-plugin'); 3 | 4 | module.exports = { 5 | mode: 'development', 6 | entry: './src/main.ts', 7 | output: { 8 | path: path.resolve(__dirname, 'dist'), 9 | filename: 'bundle.js', 10 | }, 11 | module: { 12 | rules: [ 13 | { 14 | test: /\.ts$/, 15 | use: 'ts-loader', 16 | exclude: /node_modules/, 17 | }, 18 | ], 19 | }, 20 | resolve: { 21 | extensions: ['.ts', '.js'], 22 | }, 23 | plugins: [ 24 | new HtmlWebpackPlugin({ 25 | template: 'index.html', 26 | }), 27 | ], 28 | devServer: { 29 | port: 8080, 30 | }, 31 | }; 32 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/Subscriber-spec.ts: -------------------------------------------------------------------------------- 1 | import { Subscriber } from "rxjs"; 2 | 3 | describe("Subscriber", () => { 4 | it('should have deprecated and internal constructors', () => { 5 | const s1 = new Subscriber(); // $ExpectDeprecation 6 | const s2 = new Subscriber(() => {}); // $ExpectDeprecation 7 | const s3 = new Subscriber({}); // $ExpectDeprecation 8 | const s4 = new Subscriber({ next: () => {}}); // $ExpectDeprecation 9 | const s5 = new Subscriber({ }, { next: () => {} }); // $ExpectError 10 | }); 11 | }); -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/firstValueFrom-spec.ts: -------------------------------------------------------------------------------- 1 | import { firstValueFrom } from 'rxjs'; 2 | import { a$ } from 'helpers'; 3 | 4 | describe('firstValueFrom', () => { 5 | it('should infer the element type', () => { 6 | const r = firstValueFrom(a$); // $ExpectType Promise 7 | }) 8 | 9 | it('should infer the element type from a default value', () => { 10 | const r = firstValueFrom(a$, { defaultValue: null }); // $ExpectType Promise 11 | }); 12 | 13 | it('should require an argument', () => { 14 | const r = firstValueFrom(); // $ExpectError 15 | }); 16 | 17 | it('should require an observable argument', () => { 18 | const r = firstValueFrom(Promise.resolve(42)); // $ExpectError 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/index.d.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ReactiveX/rxjs/c15b37f81ba5f5abea8c872b0189a70b150df4cb/packages/rxjs/spec-dtslint/index.d.ts -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/lastValueFrom-spec.ts: -------------------------------------------------------------------------------- 1 | import { lastValueFrom } from 'rxjs'; 2 | import { a$ } from 'helpers'; 3 | 4 | describe('lastValueFrom', () => { 5 | it('should infer the element type', () => { 6 | const r = lastValueFrom(a$); // $ExpectType Promise 7 | }); 8 | 9 | it('should infer the element type from a default value', () => { 10 | const r = lastValueFrom(a$, { defaultValue: null }); // $ExpectType Promise 11 | }); 12 | 13 | it('should require an argument', () => { 14 | const r = lastValueFrom(); // $ExpectError 15 | }); 16 | 17 | it('should require an observable argument', () => { 18 | const r = lastValueFrom(Promise.resolve(42)); // $ExpectError 19 | }); 20 | }); 21 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/dom/animationFrames-spec.ts: -------------------------------------------------------------------------------- 1 | import { animationFrames } from 'rxjs'; 2 | 3 | it('should just be an observable of numbers', () => { 4 | const o$ = animationFrames(); // $ExpectType Observable<{ timestamp: number; elapsed: number; }> 5 | }); 6 | 7 | it('should allow the passing of a timestampProvider', () => { 8 | const o$ = animationFrames(performance); // $ExpectType Observable<{ timestamp: number; elapsed: number; }> 9 | }); 10 | 11 | it('should not allow the passing of an invalid timestamp provider', () => { 12 | const o$ = animationFrames({ now() { return 'wee' } }); // $ExpectError 13 | }); -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/dom/fetch-spec.ts: -------------------------------------------------------------------------------- 1 | import { fromFetch } from 'rxjs/fetch'; 2 | import { a$ } from '../../helpers'; 3 | 4 | it('should emit the fetch Response by default', () => { 5 | const a = fromFetch("a"); // $ExpectType Observable 6 | }); 7 | 8 | it('should support a selector that returns a Response promise', () => { 9 | const a = fromFetch("a", { selector: response => response.text() }); // $ExpectType Observable 10 | }); 11 | 12 | it('should support a selector that returns an arbitrary type', () => { 13 | const a = fromFetch("a", { selector: response => a$ }); // $ExpectType Observable 14 | }); 15 | 16 | it('should error for selectors that don\'t return an ObservableInput', () => { 17 | const a = fromFetch("a", { selector: response => 42 }); // $ExpectError 18 | }); 19 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/empty-spec.ts: -------------------------------------------------------------------------------- 1 | import { EMPTY } from 'rxjs'; 2 | 3 | it('should always infer empty observable', () => { 4 | // Empty Observable that replace empty static function 5 | const a = EMPTY; // $ExpectType Observable 6 | }); 7 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/interval-spec.ts: -------------------------------------------------------------------------------- 1 | import { interval, animationFrameScheduler } from 'rxjs'; 2 | 3 | it('should infer correctly with number param', () => { 4 | const a = interval(1); // $ExpectType Observable 5 | }); 6 | 7 | it('should infer correctly with no param', () => { 8 | const a = interval(); // $ExpectType Observable 9 | }); 10 | 11 | it('should support scheduler', () => { 12 | const a = interval(1, animationFrameScheduler); // $ExpectType Observable 13 | }); 14 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/never-spec.ts: -------------------------------------------------------------------------------- 1 | import { NEVER } from 'rxjs'; 2 | 3 | it('should be of type Observable', () => { 4 | const a = NEVER; // $ExpectType Observable 5 | }); 6 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/range-spec.ts: -------------------------------------------------------------------------------- 1 | import { range, animationFrameScheduler } from 'rxjs'; 2 | 3 | it('should infer correctly with number parameters', () => { 4 | const a = range(1, 2); // $ExpectType Observable 5 | }); 6 | 7 | it('should accept only number parameters', () => { 8 | const a = range('a', 1); // $ExpectError 9 | }); 10 | 11 | it('should allow 1 parameter', () => { 12 | const a = range(1); // $ExpectType Observable 13 | }); 14 | 15 | it('should support scheduler', () => { 16 | const a = range(1, 2, animationFrameScheduler); // $ExpectType Observable 17 | }); 18 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/throwError-spec.ts: -------------------------------------------------------------------------------- 1 | import { throwError } from 'rxjs'; 2 | 3 | it('should error for incorrect errorFactory', () => { 4 | const a = throwError(1); // $ExpectError 5 | const b = throwError('a'); // $ExpectError 6 | const c = throwError({ a: 1 }); // $ExpectError 7 | }); 8 | 9 | it('should accept any type and return never observable with support of factory', () => { 10 | const a = throwError(() => (1)); // $ExpectType Observable 11 | const b = throwError(() => ('a')); // $ExpectType Observable 12 | const c = throwError(() => ({ a: 1 })); // $ExpectType Observable 13 | const d = throwError(() => ({ a: 2 })); // $ExpectType Observable 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/observables/using-spec.ts: -------------------------------------------------------------------------------- 1 | import { using } from 'rxjs'; 2 | import { a$, b$ } from '../helpers'; 3 | 4 | it('should infer with a simple factory', () => { 5 | const o = using(() => {}, () => a$); // $ExpectType Observable 6 | }); 7 | 8 | it('should infer with a factory that returns a union', () => { 9 | const o = using(() => {}, () => Math.random() < 0.5 ? a$ : b$); // $ExpectType Observable 10 | }); -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/audit-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, NEVER } from 'rxjs'; 2 | import { audit } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(audit(() => of('foo'))); // $ExpectType Observable 6 | const p = of(1, 2, 3).pipe(audit(() => NEVER)); // $ExpectType Observable 7 | }); 8 | 9 | it('should infer correctly with a Promise', () => { 10 | const o = of(1, 2, 3).pipe(audit(() => new Promise(() => {}))); // $ExpectType Observable 11 | }); 12 | 13 | it('should enforce types', () => { 14 | const o = of(1, 2, 3).pipe(audit()); // $ExpectError 15 | const p = of(1, 2, 3).pipe(audit((p: string) => of('foo'))); // $ExpectError 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/auditTime-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, asyncScheduler } from 'rxjs'; 2 | import { auditTime } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(auditTime(47)); // $ExpectType Observable 6 | }); 7 | 8 | it('should support a scheduler', () => { 9 | const o = of('a', 'b', 'c').pipe(auditTime(47, asyncScheduler)); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of('a', 'b', 'c').pipe(auditTime()); // $ExpectError 14 | const p = of('a', 'b', 'c').pipe(auditTime('47')); // $ExpectError 15 | const q = of('a', 'b', 'c').pipe(auditTime(47, 'foo')); // $ExpectError 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/buffer-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { buffer } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(buffer(of('foo'))); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(buffer()); // $ExpectError 10 | const p = of(1, 2, 3).pipe(buffer(6)); // $ExpectError 11 | }); 12 | 13 | it('should support Promises', () => { 14 | const o = of(1, 2, 3).pipe(buffer(Promise.resolve('foo'))); // $ExpectType Observable 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/bufferCount-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { bufferCount } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(bufferCount(1)); // $ExpectType Observable 6 | const p = of(1, 2, 3).pipe(bufferCount(1, 7)); // $ExpectType Observable 7 | }); 8 | 9 | it('should enforce types', () => { 10 | const o = of(1, 2, 3).pipe(bufferCount()); // $ExpectError 11 | }); 12 | 13 | it('should enforce type of bufferSize', () => { 14 | const o = of(1, 2, 3).pipe(bufferCount('7')); // $ExpectError 15 | }); 16 | 17 | it('should enforce type of startBufferEvery', () => { 18 | const o = of(1, 2, 3).pipe(bufferCount(1, '7')); // $ExpectError 19 | }); 20 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/bufferWhen-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { bufferWhen } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(bufferWhen(() => of('a', 'b', 'c'))); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(bufferWhen()); // $ExpectError 10 | }); 11 | 12 | it('should enforce type of closingSelector', () => { 13 | const o = of(1, 2, 3).pipe(bufferWhen(of('a', 'b', 'c'))); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/concatAll-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { concatAll } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(of(1, 2, 3)).pipe(concatAll()); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(concatAll()); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/connect-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { connect } from 'rxjs/operators'; 3 | import { a$, b$ } from '../helpers'; 4 | 5 | it('should infer from a union', () => { 6 | const o = of(null).pipe(connect(() => Math.random() > 0.5 ? a$ : b$)); // $ExpectType Observable 7 | }); -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/debounce-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, timer } from 'rxjs'; 2 | import { debounce } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(debounce(() => timer(47))); // $ExpectType Observable 6 | }); 7 | 8 | it('should infer correctly with a Promise', () => { 9 | const o = of(1, 2, 3).pipe(debounce(() => new Promise(() => {}))); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of(1, 2, 3).pipe(debounce()); // $ExpectError 14 | const p = of(1, 2, 3).pipe(debounce(() => {})); // $ExpectError 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/debounceTime-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, asyncScheduler } from 'rxjs'; 2 | import { debounceTime } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(debounceTime(47)); // $ExpectType Observable 6 | }); 7 | 8 | it('should support a scheduler', () => { 9 | const o = of(1, 2, 3).pipe(debounceTime(47, asyncScheduler)); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of(1, 2, 3).pipe(debounceTime()); // $ExpectError 14 | const p = of(1, 2, 3).pipe(debounceTime('foo')); // $ExpectError 15 | const q = of(1, 2, 3).pipe(debounceTime(47, 'foo')); // $ExpectError 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/delay-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, asyncScheduler } from 'rxjs'; 2 | import { delay } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(delay(100)); // $ExpectType Observable 6 | }); 7 | 8 | it('should support date parameter', () => { 9 | const o = of(1, 2, 3).pipe(delay(new Date(2018, 9, 18))); // $ExpectType Observable 10 | }); 11 | 12 | it('should support a scheduler', () => { 13 | const o = of(1, 2, 3).pipe(delay(100, asyncScheduler)); // $ExpectType Observable 14 | }); 15 | 16 | it('should enforce types', () => { 17 | const o = of(1, 2, 3).pipe(delay()); // $ExpectError 18 | const p = of(1, 2, 3).pipe(delay('foo')); // $ExpectError 19 | const q = of(1, 2, 3).pipe(delay(47, 'foo')); // $ExpectError 20 | }); 21 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/finalize-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { finalize } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(finalize(() => {})); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(finalize()); // $ExpectError 10 | const p = of(1, 2, 3).pipe(finalize((value => {}))); // $ExpectError 11 | }); 12 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/isEmpty-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { isEmpty } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(isEmpty()); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(isEmpty('nope')); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/mapTo-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { mapTo } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(mapTo(47)); // $ExpectType Observable 6 | }); 7 | 8 | it('should infer correctly when returning a different type', () => { 9 | const o = of(1, 2, 3).pipe(mapTo('carrot')); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of(1, 2, 3).pipe(mapTo()); // $ExpectError 14 | }); 15 | 16 | it('should be deprecated', () => { 17 | const o = of(1, 2, 3).pipe(mapTo(true)); // $ExpectDeprecation 18 | }); -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/materialize-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { materialize } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('foo').pipe(materialize()); // $ExpectType Observable> 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('foo').pipe(materialize(() => {})); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/max-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { max } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const a = of(1, 2, 3).pipe(max()); // $ExpectType Observable 6 | const b = of('abc', 'bcd', 'def').pipe(max()); // $ExpectType Observable 7 | }); 8 | 9 | it(' should except empty comparer', () => { 10 | const a = of(1, 2, 3).pipe(max()); // $ExpectType Observable 11 | }); 12 | 13 | it('should enforce comparer types', () => { 14 | const a = of(1, 2, 3).pipe(max((a: number, b: number) => a - b)); // $ExpectType Observable 15 | const b = of(1, 2, 3).pipe(max((a: number, b: string) => 0)); // $ExpectError 16 | const c = of(1, 2, 3).pipe(max((a: string, b: number) => 0)); // $ExpectError 17 | }); 18 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/mergeAll-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { mergeAll } from 'rxjs/operators'; 3 | import { a$, b$ } from '../helpers'; 4 | 5 | it('should infer correctly with sources of same type', () => { 6 | const o = of(a$, a$).pipe(mergeAll()); // $ExpectType Observable 7 | }); 8 | 9 | it('should infer correctly with sources of different types', () => { 10 | const o = of(a$, b$).pipe(mergeAll()); // $ExpectType Observable 11 | }); 12 | 13 | it('should enforce types', () => { 14 | const o = a$.pipe(mergeAll()); // $ExpectError 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/min-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { min } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const a = of(1, 2, 3).pipe(min()); // $ExpectType Observable 6 | const b = of('abc', 'bcd', 'def').pipe(min()); // $ExpectType Observable 7 | }); 8 | 9 | it('should except empty comparer', () => { 10 | const a = of(1, 2, 3).pipe(min()); // $ExpectType Observable 11 | }); 12 | 13 | it('should enforce comparer types', () => { 14 | const a = of(1, 2, 3).pipe(min((a: number, b: number) => a - b)); // $ExpectType Observable 15 | const b = of(1, 2, 3).pipe(min((a: number, b: string) => 0)); // $ExpectError 16 | const c = of(1, 2, 3).pipe(min((a: string, b: number) => 0)); // $ExpectError 17 | }); 18 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/pairwise-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { pairwise } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('apple', 'banana', 'peach').pipe(pairwise()); // $ExpectType Observable<[string, string]> 6 | }); 7 | 8 | it('should infer correctly with multiple types', () => { 9 | const o = of('apple', 4, 'peach', 7).pipe(pairwise()); // $ExpectType Observable<[string | number, string | number]> 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of('apple', 'banana', 'peach').pipe(pairwise('lemon')); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/repeat-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { repeat } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(repeat()); // $ExpectType Observable 6 | }); 7 | 8 | it('should accept a count parameter', () => { 9 | const o = of('a', 'b', 'c').pipe(repeat(47)); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of('a', 'b', 'c').pipe(repeat('aa')); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/retry-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { retry } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(retry()); // $ExpectType Observable 6 | }); 7 | 8 | it('should accept a count parameter', () => { 9 | const o = of(1, 2, 3).pipe(retry(47)); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce types', () => { 13 | const o = of(1, 2, 3).pipe(retry('aa')); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/sampleTime-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, asyncScheduler } from 'rxjs'; 2 | import { sampleTime } from 'rxjs/operators'; 3 | 4 | it('should enforce period parameter', () => { 5 | const a = of(1, 2, 3).pipe(sampleTime()); // $ExpectError 6 | }); 7 | 8 | it('should infer correctly', () => { 9 | const a = of(1, 2, 3).pipe(sampleTime(1000)); // $ExpectType Observable 10 | }); 11 | 12 | it('should accept scheduler parameter', () => { 13 | const a = of(1, 2, 3).pipe(sampleTime(1000, asyncScheduler)); // $ExpectType Observable 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/share-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { share } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('foo', 'bar', 'baz').pipe(share()); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('foo', 'bar', 'baz').pipe(share('abc')); // $ExpectError 10 | }); 11 | 12 | it('should support Promises', () => { 13 | const factory = () => Promise.resolve(); 14 | of(1, 2, 3).pipe(share({ resetOnError: factory, resetOnComplete: factory, resetOnRefCountZero: factory })); // $ExpectType Observable 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/skip-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { skip } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('foo', 'bar', 'baz').pipe(skip(7)); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('foo', 'bar', 'baz').pipe(skip()); // $ExpectError 10 | const p = of('foo', 'bar', 'baz').pipe(skip('7')); // $ExpectError 11 | }); 12 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/skipLast-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { skipLast } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('foo', 'bar', 'baz').pipe(skipLast(7)); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('foo', 'bar', 'baz').pipe(skipLast()); // $ExpectError 10 | const p = of('foo', 'bar', 'baz').pipe(skipLast('7')); // $ExpectError 11 | }); 12 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/skipUntil-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { skipUntil } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('foo', 'bar', 'baz').pipe(skipUntil(of(4, 'RxJS', 7))); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('foo', 'bar', 'baz').pipe(skipUntil()); // $ExpectError 10 | const p = of('foo', 'bar', 'baz').pipe(skipUntil(7)); // $ExpectError 11 | }); 12 | 13 | it('should support Promises', () => { 14 | of(1, 2, 3).pipe(skipUntil(Promise.resolve('foo'))); // $ExpectType Observable 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/switchAll-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { switchAll } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(of(1, 2, 3)).pipe(switchAll()); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(switchAll()); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/take-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { take } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(take(7)); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(take('7')); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/takeLast-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { takeLast } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(takeLast(7)); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(takeLast('7')); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/takeUntil-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { takeUntil } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(takeUntil(of(1, 2, 3))); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1, 2, 3).pipe(takeUntil(value => value < 3)); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/throwIfEmpty-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { throwIfEmpty } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(throwIfEmpty()); // $ExpectType Observable 6 | }); 7 | 8 | it('should support an errorFactory', () => { 9 | const o = of('a', 'b', 'c').pipe(throwIfEmpty(() => 47)); // $ExpectType Observable 10 | }); 11 | 12 | it('should enforce errorFactory type', () => { 13 | const o = of('a', 'b', 'c').pipe(throwIfEmpty('nope')); // $ExpectError 14 | const p = of('a', 'b', 'c').pipe(throwIfEmpty(x => 47)); // $ExpectError 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/timeInterval-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, asyncScheduler } from 'rxjs'; 2 | import { timeInterval } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(timeInterval()); // $ExpectType Observable> 6 | }); 7 | 8 | it('should support a scheduler', () => { 9 | const o = of('a', 'b', 'c').pipe(timeInterval(asyncScheduler)); // $ExpectType Observable> 10 | }); 11 | 12 | it('should enforce scheduler type', () => { 13 | const o = of('a', 'b', 'c').pipe(timeInterval('nope')); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/timestamp-spec.ts: -------------------------------------------------------------------------------- 1 | import { of, asyncScheduler } from 'rxjs'; 2 | import { timestamp } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(timestamp()); // $ExpectType Observable> 6 | }); 7 | 8 | it('should support a scheduler', () => { 9 | const o = of('a', 'b', 'c').pipe(timestamp(asyncScheduler)); // $ExpectType Observable> 10 | }); 11 | 12 | it('should enforce scheduler type', () => { 13 | const o = of('a', 'b', 'c').pipe(timestamp('nope')); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/toArray-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { toArray } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of(1, 2, 3).pipe(toArray()); // $ExpectType Observable 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of(1).pipe(toArray('')); // $ExpectError 10 | }); 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/window-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { window } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | of(1).pipe(window(of('1'))); // $ExpectType Observable> 6 | }); 7 | 8 | it('should enforce types', () => { 9 | of(1).pipe(window()); // $ExpectError 10 | of(1).pipe(window(6)); // $ExpectError 11 | }); 12 | 13 | it('should support Promises', () => { 14 | of(1, 2, 3).pipe(window(Promise.resolve('foo'))); // $ExpectType Observable> 15 | }); 16 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/windowCount-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { windowCount } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | of('test').pipe(windowCount(1)); // $ExpectType Observable> 6 | of('test').pipe(windowCount(1, 2)); // $ExpectType Observable> 7 | }); 8 | 9 | it('should enforce windowSize type', () => { 10 | of(1).pipe(windowCount()); // $ExpectError 11 | of(1).pipe(windowCount('1')); // $ExpectError 12 | }); 13 | 14 | it('should enforce startEveryWindow type', () => { 15 | of(1).pipe(windowCount(1, '2')); // $ExpectError 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/windowToggle-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { windowToggle } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(windowToggle(of(1, 2, 3), () => of({}))); // $ExpectType Observable> 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('a', 'b', 'c').pipe(windowToggle()); // $ExpectError 10 | }); 11 | 12 | it('should enforce openings type', () => { 13 | const o = of('a', 'b', 'c').pipe(windowToggle('nope')); // $ExpectError 14 | }); 15 | 16 | it('should enforce closingSelector type', () => { 17 | const o = of('a', 'b', 'c').pipe(windowToggle(of(1, 2, 3), 'nope')); // $ExpectError 18 | const p = of('a', 'b', 'c').pipe(windowToggle(of(1, 2, 3), (closingSelector: string) => of(1))); // $ExpectError 19 | }); 20 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/operators/windowWhen-spec.ts: -------------------------------------------------------------------------------- 1 | import { of } from 'rxjs'; 2 | import { windowWhen } from 'rxjs/operators'; 3 | 4 | it('should infer correctly', () => { 5 | const o = of('a', 'b', 'c').pipe(windowWhen(() => of(1, 2, 3))); // $ExpectType Observable> 6 | }); 7 | 8 | it('should enforce types', () => { 9 | const o = of('a', 'b', 'c').pipe(windowWhen()); // $ExpectError 10 | }); 11 | 12 | it('should enforce closingSelector type', () => { 13 | const o = of('a', 'b', 'c').pipe(windowWhen('nope')); // $ExpectError 14 | }); 15 | -------------------------------------------------------------------------------- /packages/rxjs/spec-dtslint/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "baseUrl": ".", 4 | "lib": ["esnext", "dom"], 5 | "module": "commonjs", 6 | "noEmit": true, 7 | "paths": { 8 | "rxjs": ["../dist/types"], 9 | "rxjs/ajax": ["../dist/types/ajax"], 10 | "rxjs/fetch": ["../dist/types/fetch"], 11 | "rxjs/operators": ["../dist/types/operators"], 12 | "rxjs/testing": ["../dist/types/testing"], 13 | "rxjs/webSocket": ["../dist/types/webSocket"] 14 | }, 15 | "skipLibCheck": true, 16 | "strict": true, 17 | "target": "esnext" 18 | } 19 | } -------------------------------------------------------------------------------- /packages/rxjs/spec/ajax/index-spec.ts: -------------------------------------------------------------------------------- 1 | import * as index from 'rxjs/ajax'; 2 | import { expect } from 'chai'; 3 | 4 | describe('index', () => { 5 | it('should export static ajax observable creator functions', () => { 6 | expect(index.ajax).to.exist; 7 | }); 8 | 9 | it('should export Ajax data classes', () => { 10 | expect(index.AjaxError).to.exist; 11 | expect(index.AjaxTimeoutError).to.exist; 12 | // Interfaces can be checked by creating a variable of that type 13 | let ajaxRequest: index.AjaxRequest; 14 | let ajaxResponse: index.AjaxResponse; 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec/helpers/interop-helper-spec.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { Observable, of, Subscriber } from 'rxjs'; 3 | import { asInteropObservable, asInteropSubscriber } from './interop-helper'; 4 | 5 | describe('interop helper', () => { 6 | it('should simulate interop observables', () => { 7 | const observable: any = asInteropObservable(of(42)); 8 | expect(observable).to.not.be.instanceOf(Observable); 9 | expect(observable[Symbol.observable ?? '@@observable']).to.be.a('function'); 10 | }); 11 | 12 | it('should simulate interop subscribers', () => { 13 | const subscriber: any = asInteropSubscriber(new Subscriber()); 14 | expect(subscriber).to.not.be.instanceOf(Subscriber); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec/helpers/subscription.ts: -------------------------------------------------------------------------------- 1 | /** @prettier */ 2 | import type { TeardownLogic } from 'rxjs'; 3 | 4 | export function getRegisteredFinalizers(subscription: any): Exclude[] { 5 | if ('_finalizers' in subscription) { 6 | return subscription._finalizers ?? []; 7 | } else { 8 | throw new TypeError('Invalid Subscription'); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/rxjs/spec/module-test-spec.mjs: -------------------------------------------------------------------------------- 1 | /* Test file to ensure rxjs can be loaded from esm 2 | 3 | https://github.com/ReactiveX/rxjs/pull/6192 4 | If this fails node will error when running this with an error like 5 | node:internal/process/esm_loader:74 6 | internalBinding('errors').triggerUncaughtException( 7 | */ 8 | import {Observable} from 'rxjs'; 9 | import * as o from 'rxjs/operators'; 10 | import * as a from 'rxjs/ajax'; 11 | import * as f from 'rxjs/fetch'; 12 | import * as t from 'rxjs/testing'; 13 | import * as w from 'rxjs/webSocket'; 14 | -------------------------------------------------------------------------------- /packages/rxjs/spec/observables/never-spec.ts: -------------------------------------------------------------------------------- 1 | /** @prettier */ 2 | import { NEVER } from 'rxjs'; 3 | import { expect } from 'chai'; 4 | import { TestScheduler } from 'rxjs/testing'; 5 | import { observableMatcher } from '../helpers/observableMatcher'; 6 | 7 | /** @test {NEVER} */ 8 | describe('NEVER', () => { 9 | let rxTestScheduler: TestScheduler; 10 | 11 | beforeEach(() => { 12 | rxTestScheduler = new TestScheduler(observableMatcher); 13 | }); 14 | 15 | it('should create a cold observable that never emits', () => { 16 | rxTestScheduler.run(({ expectObservable }) => { 17 | const expected = '-'; 18 | const e1 = NEVER; 19 | expectObservable(e1).toBe(expected); 20 | }); 21 | }); 22 | 23 | it('should return the same instance every time', () => { 24 | expect(NEVER).to.equal(NEVER); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /packages/rxjs/spec/schedulers/dateTimestampProvider-spec.ts: -------------------------------------------------------------------------------- 1 | /** @prettier */ 2 | import { expect } from 'chai'; 3 | import { dateTimestampProvider } from 'rxjs/internal/scheduler/dateTimestampProvider'; 4 | 5 | describe('dateTimestampProvider', () => { 6 | const originalDate = global.Date; 7 | 8 | afterEach(() => { 9 | global.Date = originalDate; 10 | }); 11 | 12 | it('should be monkey patchable', () => { 13 | let nowCalled = false; 14 | 15 | global.Date = { 16 | now() { 17 | nowCalled = true; 18 | return 0; 19 | }, 20 | } as any; 21 | 22 | dateTimestampProvider.now(); 23 | 24 | expect(nowCalled).to.be.true; 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /packages/rxjs/spec/support/.mocharc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | require: ['ts-node/register', 'spec/helpers/setup.ts'], 3 | reporter: 'dot', 4 | extensions: ['ts', 'js'], 5 | timeout: 5000, 6 | recursive: true, 7 | 'enable-source-maps': true, 8 | 'expose-gc': true, 9 | // Uncomment this to find all skipped tests. 10 | // forbidPending: true 11 | }; 12 | -------------------------------------------------------------------------------- /packages/rxjs/spec/support/mocha.sauce.gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function (grunt) { 2 | grunt.initConfig({ 3 | pkg: grunt.file.readJSON('../../package.json'), 4 | 5 | run: { 6 | sauce: { 7 | args: ['./mocha.sauce.runner.js'], 8 | options: { 9 | wait: true, 10 | cwd: './' 11 | } 12 | } 13 | }, 14 | 15 | connect: { 16 | server: { 17 | options: { 18 | base: '../../', 19 | port: 9876 20 | } 21 | } 22 | } 23 | }); 24 | 25 | var parentcwd = process.cwd(); 26 | process.chdir('../../'); 27 | 28 | grunt.loadNpmTasks('grunt-contrib-connect'); 29 | grunt.loadNpmTasks('grunt-run'); 30 | 31 | process.chdir(parentcwd); 32 | 33 | grunt.registerTask('default', ['connect', 'run:sauce']); 34 | }; -------------------------------------------------------------------------------- /packages/rxjs/spec/testing/index-spec.ts: -------------------------------------------------------------------------------- 1 | import * as index from 'rxjs/testing'; 2 | import { expect } from 'chai'; 3 | 4 | describe('index', () => { 5 | it('should export TestScheduler', () => { 6 | expect(index.TestScheduler).to.exist; 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /packages/rxjs/spec/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "outDir": "../dist/spec", 5 | "module": "CommonJS" 6 | }, 7 | "references": [ 8 | { 9 | "path": "../src/tsconfig.types.spec.json" 10 | } 11 | ] 12 | } -------------------------------------------------------------------------------- /packages/rxjs/spec/util/ArgumentOutOfRangeError-spec.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { ArgumentOutOfRangeError } from 'rxjs'; 3 | 4 | /** @test {ArgumentOutOfRangeError} */ 5 | describe('ArgumentOutOfRangeError', () => { 6 | const error = new ArgumentOutOfRangeError(); 7 | it('Should have a name', () => { 8 | expect(error.name).to.be.equal('ArgumentOutOfRangeError'); 9 | }); 10 | it('Should have a message', () => { 11 | expect(error.message).to.be.equal('argument out of range'); 12 | }); 13 | it('Should have a stack', () => { 14 | expect(error.stack).to.be.a('string'); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec/util/EmptyError-spec.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { EmptyError } from 'rxjs'; 3 | 4 | /** @test {EmptyError} */ 5 | describe('EmptyError', () => { 6 | const error = new EmptyError(); 7 | it('Should have a name', () => { 8 | expect(error.name).to.be.equal('EmptyError'); 9 | }); 10 | it('Should have a message', () => { 11 | expect(error.message).to.be.equal('no elements in sequence'); 12 | }); 13 | it('Should have a stack', () => { 14 | expect(error.stack).to.be.a('string'); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec/util/TimeoutError-spec.ts: -------------------------------------------------------------------------------- 1 | import { expect } from 'chai'; 2 | import { TimeoutError } from 'rxjs'; 3 | 4 | /** @test {TimeoutError} */ 5 | describe('TimeoutError', () => { 6 | const error = new TimeoutError(); 7 | it('Should have a name', () => { 8 | expect(error.name).to.be.equal('TimeoutError'); 9 | }); 10 | it('Should have a message', () => { 11 | expect(error.message).to.be.equal('Timeout has occurred'); 12 | }); 13 | it('Should have a stack', () => { 14 | expect(error.stack).to.be.a('string'); 15 | }); 16 | }); 17 | -------------------------------------------------------------------------------- /packages/rxjs/spec/websocket/index-spec.ts: -------------------------------------------------------------------------------- 1 | import * as index from 'rxjs/webSocket'; 2 | import { expect } from 'chai'; 3 | 4 | describe('index', () => { 5 | it('should export static websocket subject creator functions', () => { 6 | expect(index.webSocket).to.exist; 7 | }); 8 | }); 9 | -------------------------------------------------------------------------------- /packages/rxjs/src/Rx.global.js: -------------------------------------------------------------------------------- 1 | (function (root, factory) { 2 | root.Rx = factory(); 3 | })(window || global || this, function () { 4 | return require('../dist/package/Rx'); 5 | }); -------------------------------------------------------------------------------- /packages/rxjs/src/ajax/index.ts: -------------------------------------------------------------------------------- 1 | export { ajax } from '../internal/ajax/ajax.js'; 2 | export { AjaxError, AjaxTimeoutError } from '../internal/ajax/errors.js'; 3 | export { AjaxResponse } from '../internal/ajax/AjaxResponse.js'; 4 | export type { AjaxRequest, AjaxConfig, AjaxDirection } from '../internal/ajax/types.js'; 5 | -------------------------------------------------------------------------------- /packages/rxjs/src/fetch/index.ts: -------------------------------------------------------------------------------- 1 | export { fromFetch } from '../internal/observable/dom/fetch.js'; 2 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/AnyCatcher.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Note that we cannot apply the `internal` tag here because the declaration 3 | * needs to survive the `stripInternal` option. Otherwise, `AnyCatcher` will 4 | * be `any` in the `.d.ts` files. 5 | */ 6 | declare const anyCatcherSymbol: unique symbol; 7 | 8 | /** 9 | * This is just a type that we're using to identify `any` being passed to 10 | * function overloads. This is used because of situations like {@link forkJoin}, 11 | * where it could return an `Observable` or an `Observable<{ [key: K]: T }>`, 12 | * so `forkJoin(any)` would mean we need to return `Observable`. 13 | */ 14 | export type AnyCatcher = typeof anyCatcherSymbol; 15 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/Operator.ts: -------------------------------------------------------------------------------- 1 | import type { Subscriber } from '@rxjs/observable'; 2 | import type { TeardownLogic } from './types.js'; 3 | 4 | /*** 5 | * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. 6 | */ 7 | export interface Operator { 8 | call(subscriber: Subscriber, source: any): TeardownLogic; 9 | } 10 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/observable/fromSubscribable.ts: -------------------------------------------------------------------------------- 1 | import type { Subscriber } from '@rxjs/observable'; 2 | import { Observable } from '@rxjs/observable'; 3 | import type { Subscribable } from '../types.js'; 4 | 5 | /** 6 | * Used to convert a subscribable to an observable. 7 | * 8 | * Currently, this is only used within internals. 9 | * 10 | * TODO: Discuss ObservableInput supporting "Subscribable". 11 | * https://github.com/ReactiveX/rxjs/issues/5909 12 | * 13 | * @param subscribable A subscribable 14 | */ 15 | export function fromSubscribable(subscribable: Subscribable) { 16 | return new Observable((subscriber: Subscriber) => subscribable.subscribe(subscriber)); 17 | } 18 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduled/scheduleObservable.ts: -------------------------------------------------------------------------------- 1 | import { from } from '@rxjs/observable'; 2 | import { observeOn } from '../operators/observeOn.js'; 3 | import { subscribeOn } from '../operators/subscribeOn.js'; 4 | import type { InteropObservable, SchedulerLike } from '../types.js'; 5 | 6 | export function scheduleObservable(input: InteropObservable, scheduler: SchedulerLike) { 7 | return from(input).pipe(subscribeOn(scheduler), observeOn(scheduler)); 8 | } 9 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduled/schedulePromise.ts: -------------------------------------------------------------------------------- 1 | import { from } from '@rxjs/observable'; 2 | import { observeOn } from '../operators/observeOn.js'; 3 | import { subscribeOn } from '../operators/subscribeOn.js'; 4 | import type { SchedulerLike } from '../types.js'; 5 | 6 | export function schedulePromise(input: PromiseLike, scheduler: SchedulerLike) { 7 | return from(input).pipe(subscribeOn(scheduler), observeOn(scheduler)); 8 | } 9 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts: -------------------------------------------------------------------------------- 1 | import type { SchedulerLike, ReadableStreamLike } from '../types.js'; 2 | import type { Observable} from '@rxjs/observable'; 3 | import { readableStreamLikeToAsyncGenerator } from '@rxjs/observable'; 4 | import { scheduleAsyncIterable } from './scheduleAsyncIterable.js'; 5 | 6 | export function scheduleReadableStreamLike(input: ReadableStreamLike, scheduler: SchedulerLike): Observable { 7 | return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler); 8 | } 9 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduler/QueueScheduler.ts: -------------------------------------------------------------------------------- 1 | import { AsyncScheduler } from './AsyncScheduler.js'; 2 | 3 | export class QueueScheduler extends AsyncScheduler {} 4 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduler/dateTimestampProvider.ts: -------------------------------------------------------------------------------- 1 | import type { TimestampProvider } from '../types.js'; 2 | 3 | interface DateTimestampProvider extends TimestampProvider { 4 | delegate: TimestampProvider | undefined; 5 | } 6 | 7 | export const dateTimestampProvider: DateTimestampProvider = { 8 | now() { 9 | // Use the variable rather than `this` so that the function can be called 10 | // without being bound to the provider. 11 | return (dateTimestampProvider.delegate || Date).now(); 12 | }, 13 | delegate: undefined, 14 | }; 15 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduler/performanceTimestampProvider.ts: -------------------------------------------------------------------------------- 1 | import type { TimestampProvider } from '../types.js'; 2 | 3 | interface PerformanceTimestampProvider extends TimestampProvider { 4 | delegate: TimestampProvider | undefined; 5 | } 6 | 7 | export const performanceTimestampProvider: PerformanceTimestampProvider = { 8 | now() { 9 | // Use the variable rather than `this` so that the function can be called 10 | // without being bound to the provider. 11 | return (performanceTimestampProvider.delegate || performance).now(); 12 | }, 13 | delegate: undefined, 14 | }; 15 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/scheduler/timerHandle.ts: -------------------------------------------------------------------------------- 1 | export type TimerHandle = number | ReturnType; 2 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/symbol/iterator.ts: -------------------------------------------------------------------------------- 1 | export function getSymbolIterator(): symbol { 2 | if (typeof Symbol !== 'function' || !Symbol.iterator) { 3 | return '@@iterator' as any; 4 | } 5 | 6 | return Symbol.iterator; 7 | } 8 | 9 | export const iterator = getSymbolIterator(); 10 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/testing/TestMessage.ts: -------------------------------------------------------------------------------- 1 | import type { ObservableNotification } from '../types.js'; 2 | 3 | export interface TestMessage { 4 | frame: number; 5 | notification: ObservableNotification; 6 | isGhost?: boolean; 7 | } 8 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/testing/subscription-logging.ts: -------------------------------------------------------------------------------- 1 | interface SubscriptionLoggingProps { 2 | subscriptions: SubscriptionLog[]; 3 | scheduler: { now(): number }; 4 | } 5 | 6 | export class SubscriptionLog { 7 | constructor(public subscribedFrame: number, public unsubscribedFrame: number = Infinity) {} 8 | } 9 | 10 | export function logUnsubscribedFrame(this: SubscriptionLoggingProps, index: number) { 11 | const subscriptionLogs = this.subscriptions; 12 | const oldSubscriptionLog = subscriptionLogs[index]; 13 | subscriptionLogs[index] = new SubscriptionLog(oldSubscriptionLog.subscribedFrame, this.scheduler.now()); 14 | } 15 | 16 | export function logSubscribedFrame(this: SubscriptionLoggingProps): number { 17 | this.subscriptions.push(new SubscriptionLog(this.scheduler.now())); 18 | return this.subscriptions.length - 1; 19 | } 20 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/ArgumentOutOfRangeError.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * An error thrown when an element was queried at a certain index of an 3 | * Observable, but no such index or position exists in that sequence. 4 | * 5 | * @see {@link elementAt} 6 | * @see {@link take} 7 | * @see {@link takeLast} 8 | */ 9 | export class ArgumentOutOfRangeError extends Error { 10 | /** 11 | * @deprecated Internal implementation detail. Do not construct error instances. 12 | * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269 13 | */ 14 | constructor() { 15 | super('argument out of range'); 16 | this.name = 'ArgumentOutOfRangeError'; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/EmptyError.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * An error thrown when an Observable or a sequence was queried but has no 3 | * elements. 4 | * 5 | * @see {@link first} 6 | * @see {@link last} 7 | * @see {@link single} 8 | * @see {@link firstValueFrom} 9 | * @see {@link lastValueFrom} 10 | */ 11 | export class EmptyError extends Error { 12 | /** 13 | * @deprecated Internal implementation detail. Do not construct error instances. 14 | * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269 15 | */ 16 | constructor() { 17 | super('no elements in sequence'); 18 | this.name = 'EmptyError'; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/NotFoundError.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * An error thrown when a value or values are missing from an 3 | * observable sequence. 4 | * 5 | * @see {@link operators/single} 6 | */ 7 | export class NotFoundError extends Error { 8 | /** 9 | * @deprecated Internal implementation detail. Do not construct error instances. 10 | * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269 11 | */ 12 | constructor(message: string) { 13 | super(message); 14 | this.name = 'NotFoundError'; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/SequenceError.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * An error thrown when something is wrong with the sequence of 3 | * values arriving on the observable. 4 | * 5 | * @see {@link operators/single} 6 | */ 7 | export class SequenceError extends Error { 8 | /** 9 | * @deprecated Internal implementation detail. Do not construct error instances. 10 | * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269 11 | */ 12 | constructor(message: string) { 13 | super(message); 14 | this.name = 'SequenceError'; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/args.ts: -------------------------------------------------------------------------------- 1 | import type { SchedulerLike } from '../types.js'; 2 | import { isFunction } from '@rxjs/observable'; 3 | import { isScheduler } from './isScheduler.js'; 4 | 5 | function last(arr: T[]): T | undefined { 6 | return arr[arr.length - 1]; 7 | } 8 | 9 | export function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined { 10 | return isFunction(last(args)) ? args.pop() : undefined; 11 | } 12 | 13 | export function popScheduler(args: any[]): SchedulerLike | undefined { 14 | return isScheduler(last(args)) ? args.pop() : undefined; 15 | } 16 | 17 | export function popNumber(args: any[], defaultValue: number): number { 18 | return typeof last(args) === 'number' ? args.pop()! : defaultValue; 19 | } 20 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/argsOrArgArray.ts: -------------------------------------------------------------------------------- 1 | const { isArray } = Array; 2 | 3 | /** 4 | * Used in operators and functions that accept either a list of arguments, or an array of arguments 5 | * as a single argument. 6 | */ 7 | export function argsOrArgArray(args: (T | T[])[]): T[] { 8 | return args.length === 1 && isArray(args[0]) ? args[0] : (args as T[]); 9 | } 10 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/arrRemove.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Removes an item from an array, mutating it. 3 | * @param arr The array to remove the item from 4 | * @param item The item to remove 5 | */ 6 | export function arrRemove(arr: T[] | undefined | null, item: T) { 7 | if (arr) { 8 | const index = arr.indexOf(item); 9 | 0 <= index && arr.splice(index, 1); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/createObject.ts: -------------------------------------------------------------------------------- 1 | export function createObject(keys: string[], values: any[]) { 2 | return keys.reduce((result, key, i) => ((result[key] = values[i]), result), {} as any); 3 | } 4 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/isDate.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Checks to see if a value is not only a `Date` object, 3 | * but a *valid* `Date` object that can be converted to a 4 | * number. For example, `new Date('blah')` is indeed an 5 | * `instanceof Date`, however it cannot be converted to a 6 | * number. 7 | */ 8 | export function isValidDate(value: any): value is Date { 9 | return value instanceof Date && !isNaN(value as any); 10 | } 11 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/isScheduler.ts: -------------------------------------------------------------------------------- 1 | import type { SchedulerLike } from '../types.js'; 2 | import { isFunction } from '@rxjs/observable'; 3 | 4 | export function isScheduler(value: any): value is SchedulerLike { 5 | return value && isFunction(value.schedule); 6 | } 7 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/mapOneOrManyArgs.ts: -------------------------------------------------------------------------------- 1 | import type { OperatorFunction } from '../types.js'; 2 | import { map } from '../operators/map.js'; 3 | 4 | const { isArray } = Array; 5 | 6 | function callOrApply(fn: (...values: T[]) => R, args: T | T[]): R { 7 | return isArray(args) ? fn(...args) : fn(args); 8 | } 9 | 10 | /** 11 | * Used in several -- mostly deprecated -- situations where we need to 12 | * apply a list of arguments or a single argument to a result selector. 13 | */ 14 | export function mapOneOrManyArgs(fn: (...values: T[]) => R): OperatorFunction { 15 | return map((args) => callOrApply(fn, args)); 16 | } 17 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/noop.ts: -------------------------------------------------------------------------------- 1 | export function noop() { } 2 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/not.ts: -------------------------------------------------------------------------------- 1 | export function not(pred: (value: T, index: number) => boolean, thisArg: any): (value: T, index: number) => boolean { 2 | return (value: T, index: number) => !pred.call(thisArg, value, index); 3 | } -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/throwUnobservableError.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Creates the TypeError to throw if an invalid object is passed to `from` or `scheduled`. 3 | * @param input The object that was passed. 4 | */ 5 | export function createInvalidObservableTypeError(input: any) { 6 | // TODO: We should create error codes that can be looked up, so this can be less verbose. 7 | return new TypeError( 8 | `You provided ${ 9 | input !== null && typeof input === 'object' ? 'an invalid object' : `'${input}'` 10 | } where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.` 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /packages/rxjs/src/internal/util/workarounds.ts: -------------------------------------------------------------------------------- 1 | // Instead of using any - or another less-than-ideal type - to workaround a 2 | // TypeScript problem or bug, create a type alias and use that instead. 3 | // Wherever possible, use a TypeScript issue number in the type - something 4 | // like TS_18757 - or use a descriptive name and leave a detailed comment 5 | // alongside the type alias. 6 | 7 | export {}; 8 | -------------------------------------------------------------------------------- /packages/rxjs/src/testing/index.ts: -------------------------------------------------------------------------------- 1 | export type { RunHelpers } from '../internal/testing/TestScheduler.js'; 2 | export { TestScheduler } from '../internal/testing/TestScheduler.js'; 3 | -------------------------------------------------------------------------------- /packages/rxjs/src/tsconfig.base.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../tsconfig.json", 3 | "compilerOptions": { 4 | "noEmit": false, 5 | "baseUrl": ".", 6 | "paths": { 7 | "rxjs": ["./"], 8 | "rxjs/*": ["./*"] 9 | } 10 | }, 11 | "include": ["./**/*.ts"], 12 | "exclude": ["node_modules", "dist"] 13 | } 14 | -------------------------------------------------------------------------------- /packages/rxjs/src/tsconfig.cjs.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "commonjs", 5 | "target": "ES2022", 6 | "downlevelIteration": true, 7 | "outDir": "../dist/cjs" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /packages/rxjs/src/tsconfig.cjs.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.cjs.json", 3 | /** 4 | * this is pseudo config for test case's relative path resolution to `../src`, runs 5 | * cjs config once more instead of manual copying to utilize incremental build. 6 | */ 7 | "compilerOptions": { 8 | "outDir": "../dist/src" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /packages/rxjs/src/tsconfig.esm.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.base.json", 3 | "compilerOptions": { 4 | "module": "esnext", 5 | "target": "ES2022", 6 | "outDir": "../dist/esm" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /packages/rxjs/src/tsconfig.types.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.esm.json", 3 | "compilerOptions": { 4 | "composite": true, 5 | "module": "es2015", 6 | "target": "ES2022", 7 | "removeComments": false, 8 | "declaration": true, 9 | "declarationMap": true, 10 | "declarationDir": "../dist/types", 11 | "emitDeclarationOnly": true 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /packages/rxjs/src/tsconfig.types.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.types.json", 3 | "compilerOptions": { 4 | "declarationDir": "../dist/types_spec", 5 | "stripInternal": false 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /packages/rxjs/src/webSocket/index.ts: -------------------------------------------------------------------------------- 1 | export { webSocket as webSocket } from '../internal/observable/dom/webSocket.js'; 2 | export type { WebSocketSubjectConfig } from '../internal/observable/dom/WebSocketSubject.js'; 3 | export { WebSocketSubject } from '../internal/observable/dom/WebSocketSubject.js'; 4 | -------------------------------------------------------------------------------- /packages/rxjs/tools/add-license-to-file.js: -------------------------------------------------------------------------------- 1 | var fs = require('fs'); 2 | 3 | function addLicenseTextToFile(licenseText, destination) { 4 | if (!destination) { 5 | throw new Error('destination file path is required as 2nd argument'); 6 | } 7 | 8 | fs.writeFileSync( 9 | destination, 10 | `/** 11 | @license 12 | ${licenseText} 13 | **/ 14 | ${fs.readFileSync(`${destination}`).toString()} 15 | ` 16 | ); 17 | } 18 | 19 | function addLicenseToFile(license, destination) { 20 | if (!license) { 21 | throw new Error('license path is required as 1st argument'); 22 | } 23 | 24 | addLicenseTextToFile(fs.readFileSync(license).toString(), destination); 25 | } 26 | 27 | module.exports = { 28 | addLicenseToFile: addLicenseToFile, 29 | addLicenseTextToFile: addLicenseTextToFile, 30 | }; 31 | -------------------------------------------------------------------------------- /packages/rxjs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "incremental": true, 4 | "removeComments": true, 5 | "preserveConstEnums": true, 6 | "sourceMap": true, 7 | "strict": true, 8 | "noImplicitReturns": true, 9 | "moduleResolution": "node", 10 | "stripInternal": true, 11 | "noEmit": true, 12 | "lib": ["esnext", "dom"], 13 | "target": "esnext", 14 | "baseUrl": ".", 15 | "paths": { 16 | "@rxjs/observable": ["../observable/src/index"], 17 | "rxjs": ["./src/index"], 18 | "rxjs/operators": ["./src/operators/index"], 19 | "rxjs/testing": ["./src/testing/index"], 20 | "rxjs/ajax": ["./src/ajax/index"], 21 | "rxjs/webSocket": ["./src/webSocket/index"], 22 | "rxjs/fetch": ["./src/fetch/index"], 23 | "rxjs/internal/*": ["./src/internal/*"] 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /packages/rxjs/tsconfig.mocha.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "target": "ES2022", 5 | "lib": ["ES2022"] 6 | }, 7 | "ts-node": { 8 | "transpileOnly": true, 9 | "transpiler": "ts-node/transpilers/swc-experimental" 10 | } 11 | } -------------------------------------------------------------------------------- /resources/CI-CD/README.md: -------------------------------------------------------------------------------- 1 | This folder contains all resources, docs licenses or other information 2 | related to the corporate identity and corporate design of this project. 3 | -------------------------------------------------------------------------------- /scripts/copy-common-package-files.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | const { copyFileSync } = require('fs'); 4 | const { createProjectGraphAsync, joinPathFragments, workspaceRoot } = require('@nx/devkit'); 5 | 6 | const getWorkspacePath = (...pathFragments) => joinPathFragments(workspaceRoot, ...pathFragments); 7 | 8 | (async () => { 9 | const projectGraph = await createProjectGraphAsync(); 10 | 11 | for (const projectConfig of Object.values(projectGraph.nodes)) { 12 | const projectRoot = projectConfig.data.root; 13 | if (!projectRoot.startsWith('packages')) { 14 | continue; 15 | } 16 | copyFileSync(getWorkspacePath('LICENSE.txt'), getWorkspacePath(projectRoot, `LICENSE.txt`)); 17 | copyFileSync(getWorkspacePath('CODE_OF_CONDUCT.md'), getWorkspacePath(projectRoot, `CODE_OF_CONDUCT.md`)); 18 | } 19 | 20 | process.exit(0); 21 | })(); 22 | --------------------------------------------------------------------------------