RxJS-4.1.0/000077500000000000000000000000001266736161100123535ustar00rootroot00000000000000RxJS-4.1.0/.coveralls.yml000066400000000000000000000001071266736161100151440ustar00rootroot00000000000000service_name: travis-pro repo_token: 8YyWggHYCJrQmm4qdV2f5LVvo3vBD7Xsa RxJS-4.1.0/.editorconfig000066400000000000000000000001441266736161100150270ustar00rootroot00000000000000root = true [*] end_of_line = lf insert_final_newline = false indent_style = space indent_size = 2 RxJS-4.1.0/.gitattributes000066400000000000000000000000761266736161100152510ustar00rootroot00000000000000* text eol=lf *.png -text *.exe -text *.jpg -text *.txt -text RxJS-4.1.0/.gitignore000066400000000000000000000000651266736161100143440ustar00rootroot00000000000000.idea/ .DS_Store node_modules npm-debug.log .vscode/ RxJS-4.1.0/.jamignore000066400000000000000000000001401266736161100143220ustar00rootroot00000000000000.* *.bat *.md *.min.* *.txt *.log package.json node_modules doc examples src tests .nuget nuget RxJS-4.1.0/.jscsrc000066400000000000000000000025431266736161100136470ustar00rootroot00000000000000{ "excludeFiles": [ "src/core/asyncintro.js", "src/core/intro.js", "src/core/outro.js", "src/core/suboutro.js", "src/core/subintro.js", "src/core/testintro.js" ], "requireCurlyBraces": [ "if", "else", "for", "while", "do", "try", "catch" ], "requireOperatorBeforeLineBreak": true, "requireCamelCaseOrUpperCaseIdentifiers": true, "disallowMultipleLineStrings": true, "disallowMixedSpacesAndTabs": true, "disallowTrailingWhitespace": true, "disallowSpaceAfterPrefixUnaryOperators": true, "requireSpaceAfterKeywords": [ "if", "else", "for", "while", "do", "switch", "return", "try", "catch" ], "requireSpaceBeforeBinaryOperators": [ "=", "+=", "-=", "*=", "/=", "%=", "<<=", ">>=", ">>>=", "&=", "|=", "^=", "+=", "+", "-", "*", "/", "%", "<<", ">>", ">>>", "&", "|", "^", "&&", "||", "===", "==", ">=", "<=", "<", ">", "!=", "!==" ], "requireSpaceAfterBinaryOperators": true, "requireSpacesInConditionalExpression": true, "requireSpaceBeforeBlockStatements": true, "requireLineFeedAtFileEnd": true, "requireSpacesInFunctionExpression": { "beforeOpeningCurlyBrace": true }, "disallowSpacesInsideParentheses": true, "disallowMultipleLineBreaks": true, "disallowNewlineBeforeBlockStatements": true }RxJS-4.1.0/.jscsrc.todo000066400000000000000000000007231266736161100146110ustar00rootroot00000000000000{ "maximumLineLength": { "value": 80, "allowComments": true, "allowRegex": true }, "validateIndentation": 2, "validateQuoteMarks": "'", "disallowMultipleVarDecl": true, "disallowSpacesInAnonymousFunctionExpression": { "beforeOpeningRoundBrace": true }, "disallowSpacesInsideObjectBrackets": "all", "disallowSpacesInsideArrayBrackets": "all", "validateJSDoc": { "checkParamNames": true, "requireParamTypes": true } }RxJS-4.1.0/.jshintrc000066400000000000000000000003751266736161100142050ustar00rootroot00000000000000{ "curly": true, "eqeqeq": true, "immed": true, "latedef": true, "newcap": true, "noarg": true, "sub": true, "undef": true, "unused": true, "boss": true, "eqnull": true, "node": true, "-W030": true, "predef": [ "Promise" ] } RxJS-4.1.0/.npmignore000066400000000000000000000002621266736161100143520ustar00rootroot00000000000000node_modules/ modules/ .npm-debug.log .nuget/ .vscode/ nuget/ doc/ examples/ tests/ logos/ modules/ src/ .git* .jshint* .npmignore .travis.yml CHANGELOG.* Gruntfile.js travis.sh RxJS-4.1.0/.nuget/000077500000000000000000000000001266736161100135535ustar00rootroot00000000000000RxJS-4.1.0/.nuget/nuget.config000066400000000000000000000002411266736161100160610ustar00rootroot00000000000000 RxJS-4.1.0/.nuget/nuget.targets000066400000000000000000000072221266736161100162730ustar00rootroot00000000000000 $(MSBuildProjectDirectory)\..\ $([System.IO.Path]::Combine($(SolutionDir), ".nuget")) $([System.IO.Path]::Combine($(ProjectDir), "packages.config")) $([System.IO.Path]::Combine($(SolutionDir), "packages")) $(SolutionDir).nuget packages.config $(SolutionDir)packages $(NuGetToolsPath)\nuget.exe "$(NuGetExePath)" mono --runtime=v4.0.30319 $(NuGetExePath) $(TargetDir.Trim('\\')) "" false false $(NuGetCommand) install "$(PackagesConfig)" -source $(PackageSources) -o "$(PackagesDir)" $(NuGetCommand) pack "$(ProjectPath)" -p Configuration=$(Configuration) -o "$(PackageOutputDir)" -symbols RestorePackages; $(BuildDependsOn); $(BuildDependsOn); BuildPackage; RxJS-4.1.0/.travis.yml000066400000000000000000000014141266736161100144640ustar00rootroot00000000000000language: node_js node_js: - "0.10" - "0.12" - 4 - 5 env: global: - secure: "JwyiLIEV6S7wzr9eUgQ/rP8BeeSY6ZabknHpUKSk4miA7d+/acFeuMAYu0d79BG8ndFIdG9EYbA7ZY1TH/metqDTrExzYLooa0XrAYg2x+cDSboII9albVn5bvdmmWIcgcmcZwKvi5JYLHWcA3Px84Aaf3YXN9V4lS1uLhl0eBI=" - secure: "BVYlZy3vIt21bhrzKPgQzRlbwGCBrdBtRPRvX/qCGi1jYAoAtrT0bYllZpNqduPLouW3LaJDwOJx9zLDmZDwKDvPgTinpVwmkhZYRFl1kNweku3ZfeHR5ejOVYvdQEqVU4rOtTBLk6emItEPTuFtC9SPSYQZQtjnZAjHTg0jqLU=" notifications: slack: reactivex:e424dAgQ2W9kuRMe6ngxHQbv webhooks: urls: - https://webhooks.gitter.im/e/8f1482d7420d95b647ce on_success: change # options: [always|never|change] default: always on_failure: always # options: [always|never|change] default: always on_start: false # default: false RxJS-4.1.0/Gruntfile.js000066400000000000000000004103771266736161100146640ustar00rootroot00000000000000module.exports = function (grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), meta: { banner: '/*'+ 'Copyright (c) Microsoft. All rights reserved.\r\n' + 'Microsoft Open Technologies. Licensed under the Apache License, Version 2.0 (the "License"); you.\r\n' + 'may not use this file except in compliance with the License. You may.\r\n' + 'obtain a copy of the License at.\r\n\r\n' + 'http://www.apache.org/licenses/LICENSE-2.0.\r\n\r\n' + 'Unless required by applicable law or agreed to in writing, software.\r\n' + 'distributed under the License is distributed on an "AS IS" BASIS,.\r\n' + 'WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or.\r\n' + 'implied. See the License for the specific language governing permissions.\r\n' + 'and limitations under the License..\r\n' + '*/' }, concat: { core: { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/coreheader.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', // internals 'src/core/internal/util.js', // Disposables 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', // Schedulers 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/internal/priorityqueue.js', // Observer 'src/core/observer-lite.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', // Observable 'src/core/observable.js', 'src/core/anonymousobservable.js', 'src/core/perf/observablebase.js', 'src/core/autodetachobserver.js', 'src/core/linq/observable/create.js', 'src/core/headers/exports.js', // Long stacktrace end 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js' ], dest: 'dist/rx.core.js' }, 'core-binding': { src: [ 'src/core/headers/license.js', 'src/core/headers/core-intro.js', 'src/core/headers/core-bindingheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/multicast.js', 'src/core/linq/observable/publish.js', 'src/core/linq/observable/share.js', 'src/core/linq/observable/publishlast.js', 'src/core/linq/observable/publishvalue.js', 'src/core/linq/observable/sharevalue.js', 'src/core/linq/observable/replay.js', 'src/core/linq/observable/sharereplay.js', 'src/core/scheduledobserver.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/behaviorsubject.js', 'src/core/subjects/replaysubject.js', 'src/core/linq/connectableobservable.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.core.binding.js' }, 'core-testing': { src: [ 'src/core/headers/license.js', 'src/core/headers/core-intro.js', 'src/core/headers/core-testheader.js', 'src/core/notification.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/virtualtimescheduler.js', 'src/core/testing/reactivetest.js', 'src/core/testing/recorded.js', 'src/core/testing/subscription.js', 'src/core/testing/mockdisposable.js', 'src/core/testing/mockobserver.js', 'src/core/testing/mockpromise.js', 'src/core/testing/hotobservable.js', 'src/core/testing/coldobservable.js', 'src/core/testing/testscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.core.testing.js' }, all: { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/basicheader.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', 'src/core/internal/errors.js', 'src/core/headers/enumeratorheader.js', 'src/core/internal/bindcallback.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/internal/util.js', 'src/core/internal/priorityqueue.js', 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', 'src/core/disposables/refcountdisposable.js', 'src/core/disposables/scheduleddisposable.js', 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/scheduler.wrappers.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/concurrency/catchscheduler.js', 'src/core/notification.js', 'src/core/observer.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', 'src/core/checkedobserver.js', 'src/core/scheduledobserver.js', 'src/core/observeonobserver.js', 'src/core/observable.js', 'src/core/perf/observablebase.js', 'src/core/perf/operators/flatmapbase.js', 'src/core/enumerable.js', // Concurrency 'src/core/linq/observable/observeon.js', // ObserveOnObserver 'src/core/linq/observable/subscribeon.js', // SingleAssignmentDisposable, SerialDisposable, ScheduleDisposable // Async 'src/core/perf/operators/frompromise.js', // AsyncSubject, asObservable 'src/core/linq/observable/topromise.js', // Creation 'src/core/perf/operators/toarray.js', 'src/core/linq/observable/create.js', 'src/core/linq/observable/defer.js', 'src/core/perf/operators/empty.js', 'src/core/perf/operators/from.js', 'src/core/perf/operators/fromarrayobservable.js','src/core/perf/operators/fromarray.js', 'src/core/linq/observable/generate.js', 'src/core/perf/operators/of.js', 'src/core/linq/observable/ofarraychanges.js', 'src/core/linq/observable/ofobjectchanges.js', 'src/core/perf/operators/never.js', 'src/core/perf/operators/pairs.js', 'src/core/perf/operators/range.js', 'src/core/perf/operators/repeat.js', 'src/core/perf/operators/just.js', 'src/core/perf/operators/throw.js', 'src/core/linq/observable/using.js', // Multiple 'src/core/linq/observable/ambproto.js', 'src/core/linq/observable/amb.js', 'src/core/linq/observable/catchproto.js', 'src/core/linq/observable/catch.js', 'src/core/linq/observable/combinelatestproto.js', 'src/core/perf/operators/combinelatest.js', 'src/core/linq/observable/concatproto.js', 'src/core/perf/operators/concat.js', 'src/core/linq/observable/concatall.js', 'src/core/perf/operators/mergeconcat.js', 'src/core/linq/observable/merge.js', 'src/core/perf/operators/mergeall.js', 'src/core/linq/observable/mergedelayerror.js', 'src/core/linq/observable/onerrorresumenextproto.js', 'src/core/linq/observable/onerrorresumenext.js', 'src/core/perf/operators/skipuntil.js', 'src/core/perf/operators/switch.js', 'src/core/perf/operators/takeuntil.js', 'src/core/perf/operators/withlatestfrom.js', 'src/core/perf/operators/zip.js', 'src/core/linq/observable/zip.js', 'src/core/linq/observable/zipiterable.js', // Single 'src/core/linq/observable/asobservable.js', 'src/core/linq/observable/bufferwithcount.js', 'src/core/linq/observable/dematerialize.js', 'src/core/perf/operators/distinctuntilchanged.js', 'src/core/perf/operators/tap.js', 'src/core/perf/operators/finally.js', 'src/core/perf/operators/ignoreelements.js', 'src/core/linq/observable/materialize.js', 'src/core/linq/observable/repeatproto.js', 'src/core/linq/observable/retry.js', 'src/core/linq/observable/retrywhen.js', 'src/core/linq/observable/repeatwhen.js', 'src/core/perf/operators/scan.js', 'src/core/linq/observable/skiplast.js', 'src/core/linq/observable/startwith.js', 'src/core/linq/observable/takelast.js', 'src/core/linq/observable/takelastbuffer.js', 'src/core/linq/observable/windowwithcount.js', // Standard query operators 'src/core/linq/observable/concatmap.js', 'src/core/linq/observable/concatmapobserver.js', 'src/core/linq/observable/defaultifempty.js', 'src/core/linq/observable/distinct.js', 'src/core/linq/observable/groupby.js', 'src/core/linq/observable/groupbyuntil.js', 'src/core/perf/operators/map.js', 'src/core/linq/observable/pluck.js', 'src/core/perf/operators/flatmap.js', 'src/core/linq/observable/selectmanyobserver.js', 'src/core/perf/operators/flatmaplatest.js', 'src/core/perf/operators/skip.js', 'src/core/linq/observable/skipwhile.js', 'src/core/perf/operators/take.js', 'src/core/linq/observable/takewhile.js', 'src/core/perf/operators/filter.js', // Aggregate Operators 'src/core/linq/observable/_extremaby.js', 'src/core/linq/observable/_firstonly.js', 'src/core/perf/operators/reduce.js', // scan, startwith, finalvalue 'src/core/linq/observable/some.js', // where 'src/core/linq/observable/isempty.js', // any, select 'src/core/linq/observable/every.js', // where, any 'src/core/linq/observable/includes.js', // where, any 'src/core/linq/observable/count.js', // where, aggregate 'src/core/linq/observable/indexof.js', 'src/core/linq/observable/sum.js', // select, aggregate 'src/core/linq/observable/minby.js', // _extremaby 'src/core/linq/observable/min.js', // minby, _firstonly 'src/core/linq/observable/maxby.js', // _extremaby 'src/core/linq/observable/max.js', // max, _firstonly 'src/core/linq/observable/average.js', // select, scan, aggregate, finalvalue 'src/core/linq/observable/sequenceequal.js', // compositedisposable 'src/core/linq/observable/elementat.js', 'src/core/linq/observable/single.js', 'src/core/linq/observable/first.js', 'src/core/linq/observable/last.js', 'src/core/linq/observable/_findvalue.js', 'src/core/linq/observable/find.js', // _findvalue, where 'src/core/linq/observable/findindex.js', // _findvalue, where 'src/core/linq/observable/toset.js', 'src/core/linq/observable/tomap.js', 'src/core/linq/observable/slice.js', 'src/core/linq/observable/lastindexof.js', // Async operators 'src/core/linq/observable/spawn.js', 'src/core/linq/observable/start.js', // toasync 'src/core/linq/observable/toasync.js', // AsyncSubject, asObservable 'src/core/perf/operators/fromcallback.js', 'src/core/perf/operators/fromnodecallback.js', 'src/core/linq/observable/fromevent.js', // publish 'src/core/linq/observable/fromeventpattern.js', // publish 'src/core/linq/observable/startasync.js', // Backpressure operators 'src/core/backpressure/pausable.js', 'src/core/backpressure/pausablebuffered.js', 'src/core/backpressure/controlled.js', 'src/core/backpressure/stopandwait.js', 'src/core/backpressure/windowed.js', 'src/core/linq/observable/pipe.js', // Binding operators 'src/core/linq/observable/multicast.js', // ConnectableObservable 'src/core/linq/observable/publish.js', // mulitcast, Subject 'src/core/linq/observable/share.js', // mulitcast, Subject, Reference counted 'src/core/linq/observable/publishlast.js', // multicast, AsyncSubject 'src/core/linq/observable/publishvalue.js', // multicast, BehaviorSubject 'src/core/linq/observable/sharevalue.js', // multicast, BehaviorSubject, Reference counted 'src/core/linq/observable/replay.js', // multicast, ReplaySubject 'src/core/linq/observable/sharereplay.js', 'src/core/subjects/innersubscription.js', 'src/core/linq/connectableobservable.js', 'src/core/linq/observable/singleinstance.js', // Coincidence operators 'src/core/linq/observable/join.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/groupjoin.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/buffer.js', // window, selectMany, toArray 'src/core/linq/observable/window.js', // CompositeDisposable, RefCountDisposable, Subject, SingleAssignmentDisposable 'src/core/linq/observable/pairwise.js', 'src/core/linq/observable/partition.js', // Experimental operators 'src/core/linq/enumerable/while.js', // Enumerable 'src/core/linq/observable/let.js', 'src/core/linq/observable/if.js', // defer, empty 'src/core/linq/observable/for.js', // Enumerable.forEach, concatproto 'src/core/linq/observable/while.js', // Enumerable.while, concatproto 'src/core/linq/observable/dowhile.js', // Enumerable.while, concat 'src/core/linq/observable/case.js', // defer, empty 'src/core/linq/observable/expand.js', // immediateScheduler, SerialDisposable, CompositeDisposable, SingleAssignmentDisposable 'src/core/linq/observable/forkjoin.js', // CompositeDisposable 'src/core/linq/observable/forkjoinproto.js', // SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/manyselect.js', // ImmediateScheduler, CurrentThreadScheduler, select, do, observeOn // Join pattern operators 'src/core/internal/map.js', 'src/core/joins/pattern.js', 'src/core/joins/plan.js', 'src/core/joins/activeplan.js', 'src/core/joins/joinobserver.js', 'src/core/linq/observable/and.js', // Pattern 'src/core/linq/observable/thendo.js', // Pattern 'src/core/linq/observable/when.js', // CompositeDisposable // Time based operators 'src/core/linq/observable/_observabletimer.js', // AnonymousObservable 'src/core/linq/observable/_observabletimerdateandperiod.js', // AnonymousObservable, normalizeTime 'src/core/linq/observable/_observabletimertimespanandperiod.js', // AnonymousObservable, defer, _observabletimerdateandperiod 'src/core/linq/observable/interval.js', // timeoutScheduler, _observabletimertimespanandperiod 'src/core/linq/observable/timer.js', // timeoutScheduler, _observabletimerdate, _observabletimerdateandperiod, _observabletimertimespan, _observabletimertimespanandperiod 'src/core/linq/observable/delay.js', // AnonymousObservable, timeoutScheduler, SerialDisposable, materialize, timestamp 'src/core/linq/observable/debounce.js', // AnonymousObservable, SerialDisposable, timeoutScheduler, SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/windowwithtime.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/windowwithtimeorcount.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/bufferwithtime.js', // windowwithtime, selectMany, toArray 'src/core/linq/observable/bufferwithtimeorcount.js', // windowwithtimeorcount, selectMany, toArray 'src/core/linq/observable/timeinterval.js', // timeoutScheduler, defer, select 'src/core/linq/observable/timestamp.js', // timeoutScheduler, select 'src/core/linq/observable/sample.js', // AnonymousObservable, CompositeDisposable, interval, timeoutScheduler 'src/core/linq/observable/timeout.js', // AnonymousObservable, timeoutScheduler, throw, SingleAssignmentDisposable, SerialDisposable, CompositeDisposable 'src/core/linq/observable/generatewithabsolutetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/generatewithrelativetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/delaysubscription.js', // delayWithSelector, timer, empty 'src/core/linq/observable/skiplastwithtime.js', 'src/core/linq/observable/takelastwithtime.js', 'src/core/linq/observable/takelastbufferwithtime.js', 'src/core/linq/observable/takewithtime.js', 'src/core/linq/observable/skipwithtime.js', 'src/core/linq/observable/skipuntilwithtime.js', 'src/core/linq/observable/takeuntilwithtime.js', 'src/core/linq/observable/throttle.js', // Transducers 'src/core/linq/observable/transduce.js', // Experimental Flattening 'src/core/linq/observable/switchfirst.js', 'src/core/perf/operators/flatmapfirst.js', 'src/core/perf/operators/flatmapwithmaxconcurrent.js', // Virtual time 'src/core/concurrency/virtualtimescheduler.js', 'src/core/concurrency/historicalscheduler.js', 'src/core/testing/reactivetest.js', 'src/core/testing/recorded.js', 'src/core/testing/subscription.js', 'src/core/testing/mockdisposable.js', 'src/core/testing/mockobserver.js', 'src/core/testing/mockpromise.js', 'src/core/testing/hotobservable.js', 'src/core/testing/coldobservable.js', 'src/core/testing/testscheduler.js', 'src/core/anonymousobservable.js', 'src/core/autodetachobserver.js', 'src/core/linq/groupedobservable.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/behaviorsubject.js', 'src/core/subjects/replaysubject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/backpressure/pauser.js', 'src/core/headers/exports.js', // Long stacktrace end 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js' ], dest: 'dist/rx.all.js' }, 'all-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/basicheader-compat.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', 'src/core/internal/polyfills.js', 'src/core/internal/errors.js', 'src/core/headers/enumeratorheader.js', 'src/core/internal/bindcallback.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/internal/util.js', 'src/core/internal/priorityqueue.js', 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', 'src/core/disposables/refcountdisposable.js', 'src/core/disposables/scheduleddisposable.js', 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/scheduler.wrappers.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/concurrency/catchscheduler.js', 'src/core/notification.js', 'src/core/observer.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', 'src/core/checkedobserver.js', 'src/core/scheduledobserver.js', 'src/core/observeonobserver.js', 'src/core/observable.js', 'src/core/perf/observablebase.js', 'src/core/perf/operators/flatmapbase.js', 'src/core/enumerable.js', 'src/core/linq/observable/observeon.js', // ObserveOnObserver 'src/core/linq/observable/subscribeon.js', // SingleAssignmentDisposable, SerialDisposable, ScheduleDisposable // Async 'src/core/perf/operators/frompromise.js', // AsyncSubject, asObservable 'src/core/linq/observable/topromise.js', // Creation 'src/core/perf/operators/toarray.js', 'src/core/linq/observable/create.js', 'src/core/linq/observable/defer.js', 'src/core/perf/operators/empty.js', 'src/core/perf/operators/from.js', 'src/core/perf/operators/fromarrayobservable.js','src/core/perf/operators/fromarray.js', 'src/core/linq/observable/generate.js', 'src/core/perf/operators/of.js', 'src/core/perf/operators/never.js', 'src/core/perf/operators/pairs.js', 'src/core/perf/operators/range.js', 'src/core/perf/operators/repeat.js', 'src/core/perf/operators/just.js', 'src/core/perf/operators/throw.js', 'src/core/linq/observable/using.js', // Multiple 'src/core/linq/observable/ambproto.js', 'src/core/linq/observable/amb.js', 'src/core/linq/observable/catchproto.js', 'src/core/linq/observable/catch.js', 'src/core/linq/observable/combinelatestproto.js', 'src/core/perf/operators/combinelatest.js', 'src/core/linq/observable/concatproto.js', 'src/core/perf/operators/concat.js', 'src/core/linq/observable/concatall.js', 'src/core/perf/operators/mergeconcat.js', 'src/core/linq/observable/merge.js', 'src/core/perf/operators/mergeall.js', 'src/core/linq/observable/mergedelayerror.js', 'src/core/linq/observable/onerrorresumenextproto.js', 'src/core/linq/observable/onerrorresumenext.js', 'src/core/perf/operators/skipuntil.js', 'src/core/perf/operators/switch.js', 'src/core/perf/operators/takeuntil.js', 'src/core/perf/operators/withlatestfrom.js', 'src/core/perf/operators/zip.js', 'src/core/linq/observable/zip.js', 'src/core/linq/observable/zipiterable.js', // Single 'src/core/linq/observable/asobservable.js', 'src/core/linq/observable/bufferwithcount.js', 'src/core/linq/observable/dematerialize.js', 'src/core/perf/operators/distinctuntilchanged.js', 'src/core/perf/operators/tap.js', 'src/core/perf/operators/finally.js', 'src/core/perf/operators/ignoreelements.js', 'src/core/linq/observable/materialize.js', 'src/core/linq/observable/repeatproto.js', 'src/core/linq/observable/retry.js', 'src/core/linq/observable/retrywhen.js', 'src/core/linq/observable/repeatwhen.js', 'src/core/perf/operators/scan.js', 'src/core/linq/observable/skiplast.js', 'src/core/linq/observable/startwith.js', 'src/core/linq/observable/takelast.js', 'src/core/linq/observable/takelastbuffer.js', 'src/core/linq/observable/windowwithcount.js', // Standard query operators 'src/core/perf/operators/concatmap.js', 'src/core/linq/observable/concatmapobserver.js', 'src/core/linq/observable/defaultifempty.js', 'src/core/linq/observable/distinct.js', 'src/core/linq/observable/groupby.js', 'src/core/linq/observable/groupbyuntil.js', 'src/core/perf/operators/map.js', 'src/core/linq/observable/pluck.js', 'src/core/perf/operators/flatmap.js', 'src/core/linq/observable/selectmanyobserver.js', 'src/core/perf/operators/flatmaplatest.js', 'src/core/perf/operators/skip.js', 'src/core/linq/observable/skipwhile.js', 'src/core/perf/operators/take.js', 'src/core/linq/observable/takewhile.js', 'src/core/perf/operators/filter.js', // Aggregate operators 'src/core/linq/observable/_extremaby.js', 'src/core/linq/observable/_firstonly.js', 'src/core/perf/operators/reduce.js', // scan, startwith, finalvalue 'src/core/linq/observable/some.js', // where 'src/core/linq/observable/isempty.js', // any, select 'src/core/linq/observable/every.js', // where, any 'src/core/linq/observable/includes.js', // where, any 'src/core/linq/observable/count.js', // where, aggregate 'src/core/linq/observable/indexof.js', 'src/core/linq/observable/sum.js', // select, aggregate 'src/core/linq/observable/minby.js', // _extremaby 'src/core/linq/observable/min.js', // minby, _firstonly 'src/core/linq/observable/maxby.js', // _extremaby 'src/core/linq/observable/max.js', // max, _firstonly 'src/core/linq/observable/average.js', // select, scan, aggregate, finalvalue 'src/core/linq/observable/sequenceequal.js', // compositedisposable 'src/core/linq/observable/elementat.js', 'src/core/linq/observable/single.js', 'src/core/linq/observable/first.js', 'src/core/linq/observable/last.js', 'src/core/linq/observable/_findvalue.js', 'src/core/linq/observable/find.js', // _findvalue, where 'src/core/linq/observable/findindex.js', // _findvalue, where 'src/core/linq/observable/toset.js', 'src/core/linq/observable/tomap.js', 'src/core/linq/observable/slice.js', 'src/core/linq/observable/lastindexof.js', // Async compat operators 'src/core/linq/observable/spawn.js', 'src/core/linq/observable/start.js', // toasync 'src/core/linq/observable/toasync.js', // asyncsubject, asObservable 'src/core/perf/operators/fromcallback.js', 'src/core/perf/operators/fromnodecallback.js', 'src/core/linq/observable/fromevent.js', // publish 'src/core/linq/observable/fromeventpattern.js', // publish 'src/core/linq/observable/startasync.js', // Backpressure operators 'src/core/backpressure/pausable.js', 'src/core/backpressure/pausablebuffered.js', 'src/core/backpressure/controlled.js', 'src/core/backpressure/stopandwait.js', 'src/core/backpressure/windowed.js', 'src/core/linq/observable/pipe.js', // Binding operators 'src/core/linq/observable/multicast.js', // ConnectableObservable 'src/core/linq/observable/publish.js', // mulitcast, Subject 'src/core/linq/observable/share.js', // mulitcast, Subject, Reference counted 'src/core/linq/observable/publishlast.js', // multicast, AsyncSubject 'src/core/linq/observable/publishvalue.js', // multicast, BehaviorSubject 'src/core/linq/observable/sharevalue.js', // multicast, BehaviorSubject, Reference counted 'src/core/linq/observable/replay.js', // multicast, ReplaySubject 'src/core/linq/observable/sharereplay.js', 'src/core/subjects/innersubscription.js', 'src/core/linq/connectableobservable.js', 'src/core/linq/observable/singleinstance.js', // Coincidence operators 'src/core/linq/observable/join.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/groupjoin.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/buffer.js', // window, selectMany, toArray 'src/core/linq/observable/window.js', // CompositeDisposable, RefCountDisposable, Subject, SingleAssignmentDisposable 'src/core/linq/observable/pairwise.js', 'src/core/linq/observable/partition.js', // Experimental operators 'src/core/linq/enumerable/while.js', // Enumerable 'src/core/linq/observable/let.js', 'src/core/linq/observable/if.js', // defer, empty 'src/core/linq/observable/for.js', // Enumerable.forEach, concatproto 'src/core/linq/observable/while.js', // Enumerable.while, concatproto 'src/core/linq/observable/dowhile.js', // Enumerable.while, concat 'src/core/linq/observable/case.js', // defer, empty 'src/core/linq/observable/expand.js', // immediateScheduler, SerialDisposable, CompositeDisposable, SingleAssignmentDisposable 'src/core/linq/observable/forkjoin.js', // CompositeDisposable 'src/core/linq/observable/forkjoinproto.js', // SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/manyselect.js', // ImmediateScheduler, CurrentThreadScheduler, select, do, observeOn // Join pattern operators 'src/core/internal/map.js', 'src/core/joins/pattern.js', 'src/core/joins/plan.js', 'src/core/joins/activeplan.js', 'src/core/joins/joinobserver.js', 'src/core/linq/observable/and.js', // Pattern 'src/core/linq/observable/thendo.js', // Pattern 'src/core/linq/observable/when.js', // CompositeDisposable // Time based operators 'src/core/linq/observable/_observabletimer.js', // AnonymousObservable 'src/core/linq/observable/_observabletimerdateandperiod.js', // AnonymousObservable, normalizeTime 'src/core/linq/observable/_observabletimertimespanandperiod.js', // AnonymousObservable, defer, _observabletimerdateandperiod 'src/core/linq/observable/interval.js', // timeoutScheduler, _observabletimertimespanandperiod 'src/core/linq/observable/timer.js', // timeoutScheduler, _observabletimerdate, _observabletimerdateandperiod, _observabletimertimespan, _observabletimertimespanandperiod 'src/core/linq/observable/delay.js', // AnonymousObservable, timeoutScheduler, SerialDisposable, materialize, timestamp 'src/core/linq/observable/debounce.js', // AnonymousObservable, SerialDisposable, timeoutScheduler, SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/windowwithtime.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/windowwithtimeorcount.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/bufferwithtime.js', // windowwithtime, selectMany, toArray 'src/core/linq/observable/bufferwithtimeorcount.js', // windowwithtimeorcount, selectMany, toArray 'src/core/linq/observable/timeinterval.js', // timeoutScheduler, defer, select 'src/core/linq/observable/timestamp.js', // timeoutScheduler, select 'src/core/linq/observable/sample.js', // AnonymousObservable, CompositeDisposable, interval, timeoutScheduler 'src/core/linq/observable/timeout.js', // AnonymousObservable, timeoutScheduler, throw, SingleAssignmentDisposable, SerialDisposable, CompositeDisposable 'src/core/linq/observable/generatewithabsolutetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/generatewithrelativetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/delaysubscription.js', // delayWithSelector, timer, empty 'src/core/linq/observable/skiplastwithtime.js', 'src/core/linq/observable/takelastwithtime.js', 'src/core/linq/observable/takelastbufferwithtime.js', 'src/core/linq/observable/takewithtime.js', 'src/core/linq/observable/skipwithtime.js', 'src/core/linq/observable/skipuntilwithtime.js', 'src/core/linq/observable/takeuntilwithtime.js', 'src/core/linq/observable/throttle.js', // Experimental Flattening 'src/core/linq/observable/switchfirst.js', 'src/core/perf/operators/flatmapfirst.js', 'src/core/perf/operators/flatmapwithmaxconcurrent.js', // Transducers 'src/core/linq/observable/transduce.js', // Virtual time 'src/core/concurrency/virtualtimescheduler.js', 'src/core/concurrency/historicalscheduler.js', 'src/core/testing/reactivetest.js', 'src/core/testing/recorded.js', 'src/core/testing/subscription.js', 'src/core/testing/mockdisposable.js', 'src/core/testing/mockobserver.js', 'src/core/testing/mockpromise.js', 'src/core/testing/hotobservable.js', 'src/core/testing/coldobservable.js', 'src/core/testing/testscheduler.js', 'src/core/anonymousobservable.js', 'src/core/autodetachobserver.js', 'src/core/linq/groupedobservable.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/subjects/behaviorsubject.js', 'src/core/subjects/replaysubject.js', 'src/core/backpressure/pauser.js', 'src/core/headers/exports.js', // End long stack traces 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js', ], dest: 'dist/rx.all.compat.js' }, main: { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/basicheader.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', 'src/core/internal/errors.js', 'src/core/headers/enumeratorheader.js', 'src/core/internal/bindcallback.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/internal/util.js', 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', 'src/core/disposables/refcountdisposable.js', 'src/core/disposables/scheduleddisposable.js', 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/scheduler.wrappers.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/concurrency/catchscheduler.js', 'src/core/internal/priorityqueue.js', 'src/core/notification.js', 'src/core/observer.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', 'src/core/checkedobserver.js', 'src/core/scheduledobserver.js', 'src/core/observeonobserver.js', 'src/core/observable.js', 'src/core/perf/observablebase.js', 'src/core/perf/operators/flatmapbase.js', 'src/core/enumerable.js', // Concurrency 'src/core/linq/observable/observeon.js', // ObserveOnObserver 'src/core/linq/observable/subscribeon.js', // SingleAssignmentDisposable, SerialDisposable, ScheduleDisposable // Async 'src/core/perf/operators/frompromise.js', // AsyncSubject, asObservable 'src/core/linq/observable/topromise.js', // Creation 'src/core/perf/operators/toarray.js', 'src/core/linq/observable/create.js', 'src/core/linq/observable/defer.js', 'src/core/perf/operators/empty.js', 'src/core/perf/operators/from.js', 'src/core/perf/operators/fromarrayobservable.js','src/core/perf/operators/fromarray.js', 'src/core/linq/observable/generate.js', 'src/core/perf/operators/never.js', 'src/core/perf/operators/of.js', 'src/core/perf/operators/pairs.js', 'src/core/perf/operators/range.js', 'src/core/perf/operators/repeat.js', 'src/core/perf/operators/just.js', 'src/core/perf/operators/throw.js', 'src/core/linq/observable/using.js', // Multiple 'src/core/linq/observable/ambproto.js', 'src/core/linq/observable/amb.js', 'src/core/linq/observable/catchproto.js', 'src/core/linq/observable/catch.js', 'src/core/linq/observable/combinelatestproto.js', 'src/core/perf/operators/combinelatest.js', 'src/core/linq/observable/concatproto.js', 'src/core/perf/operators/concat.js', 'src/core/linq/observable/concatall.js', 'src/core/perf/operators/mergeconcat.js', 'src/core/linq/observable/merge.js', 'src/core/linq/observable/mergedelayerror.js', 'src/core/perf/operators/mergeall.js', 'src/core/linq/observable/onerrorresumenextproto.js', 'src/core/linq/observable/onerrorresumenext.js', 'src/core/perf/operators/skipuntil.js', 'src/core/perf/operators/switch.js', 'src/core/perf/operators/takeuntil.js', 'src/core/perf/operators/withlatestfrom.js', 'src/core/perf/operators/zip.js', 'src/core/linq/observable/zip.js', 'src/core/linq/observable/zipiterable.js', // Single 'src/core/linq/observable/asobservable.js', 'src/core/linq/observable/bufferwithcount.js', 'src/core/linq/observable/dematerialize.js', 'src/core/perf/operators/distinctuntilchanged.js', 'src/core/perf/operators/tap.js', 'src/core/perf/operators/finally.js', 'src/core/perf/operators/ignoreelements.js', 'src/core/linq/observable/materialize.js', 'src/core/linq/observable/repeatproto.js', 'src/core/linq/observable/retry.js', 'src/core/linq/observable/retrywhen.js', 'src/core/linq/observable/repeatwhen.js', 'src/core/perf/operators/scan.js', 'src/core/linq/observable/skiplast.js', 'src/core/linq/observable/startwith.js', 'src/core/linq/observable/takelast.js', 'src/core/linq/observable/takelastbuffer.js', 'src/core/linq/observable/windowwithcount.js', // Standard query operators 'src/core/perf/operators/concatmap.js', 'src/core/linq/observable/concatmapobserver.js', 'src/core/linq/observable/defaultifempty.js', 'src/core/linq/observable/distinct.js', 'src/core/perf/operators/map.js', 'src/core/linq/observable/pluck.js', 'src/core/linq/observable/selectmanyobserver.js', 'src/core/perf/operators/flatmap.js', 'src/core/perf/operators/flatmaplatest.js', 'src/core/perf/operators/skip.js', 'src/core/linq/observable/skipwhile.js', 'src/core/perf/operators/take.js', 'src/core/linq/observable/takewhile.js', 'src/core/perf/operators/filter.js', // Transducers 'src/core/linq/observable/transduce.js', 'src/core/anonymousobservable.js', 'src/core/autodetachobserver.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/headers/exports.js', // Long stack trace end 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js', ], dest: 'dist/rx.js' }, 'main-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/basicheader-compat.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', 'src/core/internal/polyfills.js', 'src/core/internal/errors.js', 'src/core/headers/enumeratorheader.js', 'src/core/internal/bindcallback.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/internal/util.js', 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', 'src/core/disposables/refcountdisposable.js', 'src/core/disposables/scheduleddisposable.js', 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/scheduler.wrappers.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/concurrency/catchscheduler.js', 'src/core/internal/priorityqueue.js', 'src/core/notification.js', 'src/core/observer.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', 'src/core/checkedobserver.js', 'src/core/scheduledobserver.js', 'src/core/observeonobserver.js', 'src/core/observable.js', 'src/core/perf/observablebase.js', 'src/core/perf/operators/flatmapbase.js', 'src/core/enumerable.js', 'src/core/linq/observable/observeon.js', // ObserveOnObserver 'src/core/linq/observable/subscribeon.js', // SingleAssignmentDisposable, SerialDisposable, ScheduleDisposable // Async 'src/core/perf/operators/frompromise.js', // AsyncSubject, asObservable 'src/core/linq/observable/topromise.js', // Creation 'src/core/perf/operators/toarray.js', 'src/core/linq/observable/create.js', 'src/core/linq/observable/defer.js', 'src/core/perf/operators/empty.js', 'src/core/perf/operators/from.js', 'src/core/perf/operators/fromarrayobservable.js','src/core/perf/operators/fromarray.js', 'src/core/linq/observable/generate.js', 'src/core/perf/operators/never.js', 'src/core/perf/operators/of.js', 'src/core/perf/operators/pairs.js', 'src/core/perf/operators/range.js', 'src/core/perf/operators/repeat.js', 'src/core/perf/operators/just.js', 'src/core/perf/operators/throw.js', 'src/core/linq/observable/using.js', // Multiple 'src/core/linq/observable/ambproto.js', 'src/core/linq/observable/amb.js', 'src/core/linq/observable/catchproto.js', 'src/core/linq/observable/catch.js', 'src/core/linq/observable/combinelatestproto.js', 'src/core/perf/operators/combinelatest.js', 'src/core/linq/observable/concatproto.js', 'src/core/perf/operators/concat.js', 'src/core/linq/observable/concatall.js', 'src/core/perf/operators/mergeconcat.js', 'src/core/linq/observable/merge.js', 'src/core/perf/operators/mergeall.js', 'src/core/linq/observable/mergedelayerror.js', 'src/core/linq/observable/onerrorresumenextproto.js', 'src/core/linq/observable/onerrorresumenext.js', 'src/core/perf/operators/skipuntil.js', 'src/core/perf/operators/switch.js', 'src/core/perf/operators/takeuntil.js', 'src/core/perf/operators/withlatestfrom.js', 'src/core/perf/operators/zip.js', 'src/core/linq/observable/zip.js', 'src/core/linq/observable/zipiterable.js', // Single 'src/core/linq/observable/asobservable.js', 'src/core/linq/observable/bufferwithcount.js', 'src/core/linq/observable/dematerialize.js', 'src/core/perf/operators/distinctuntilchanged.js', 'src/core/perf/operators/tap.js', 'src/core/perf/operators/finally.js', 'src/core/perf/operators/ignoreelements.js', 'src/core/linq/observable/materialize.js', 'src/core/linq/observable/repeatproto.js', 'src/core/linq/observable/retry.js', 'src/core/linq/observable/retrywhen.js', 'src/core/linq/observable/repeatwhen.js', 'src/core/perf/operators/scan.js', 'src/core/linq/observable/skiplast.js', 'src/core/linq/observable/startwith.js', 'src/core/linq/observable/takelast.js', 'src/core/linq/observable/takelastbuffer.js', 'src/core/linq/observable/windowwithcount.js', // Standard query operators 'src/core/perf/operators/concatmap.js', 'src/core/linq/observable/concatmapobserver.js', 'src/core/linq/observable/defaultifempty.js', 'src/core/linq/observable/distinct.js', 'src/core/perf/operators/map.js', 'src/core/linq/observable/pluck.js', 'src/core/perf/operators/flatmap.js', 'src/core/linq/observable/selectmanyobserver.js', 'src/core/perf/operators/flatmaplatest.js', 'src/core/perf/operators/skip.js', 'src/core/linq/observable/skipwhile.js', 'src/core/perf/operators/take.js', 'src/core/linq/observable/takewhile.js', 'src/core/perf/operators/filter.js', // Transducers 'src/core/linq/observable/transduce.js', 'src/core/anonymousobservable.js', 'src/core/autodetachobserver.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/headers/exports.js', 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js', ], dest: 'dist/rx.compat.js' }, lite: { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/liteheader.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', 'src/core/internal/errors.js', 'src/core/headers/enumeratorheader.js', 'src/core/internal/bindcallback.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/internal/util.js', 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', 'src/core/disposables/refcountdisposable.js', 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/internal/priorityqueue.js', 'src/core/notification.js', 'src/core/observer-lite.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', 'src/core/observable.js', 'src/core/scheduledobserver.js', 'src/core/perf/observablebase.js', 'src/core/perf/operators/flatmapbase.js', 'src/core/enumerable.js', // Creation 'src/core/perf/operators/toarray.js', 'src/core/linq/observable/create.js', 'src/core/linq/observable/defer.js', 'src/core/perf/operators/empty.js', 'src/core/perf/operators/from.js', 'src/core/perf/operators/fromarrayobservable.js','src/core/perf/operators/fromarray.js', 'src/core/perf/operators/never.js', 'src/core/perf/operators/of.js', 'src/core/perf/operators/pairs.js', 'src/core/perf/operators/range.js', 'src/core/perf/operators/repeat.js', 'src/core/perf/operators/just.js', 'src/core/perf/operators/throw.js', // Multiple 'src/core/linq/observable/catchproto.js', 'src/core/linq/observable/catch.js', 'src/core/linq/observable/combinelatestproto.js', 'src/core/perf/operators/combinelatest.js', 'src/core/linq/observable/concatproto.js', 'src/core/perf/operators/concat.js', 'src/core/linq/observable/concatall.js', 'src/core/perf/operators/mergeconcat.js', 'src/core/linq/observable/merge.js', 'src/core/linq/observable/mergedelayerror.js', 'src/core/perf/operators/mergeall.js', 'src/core/perf/operators/skipuntil.js', 'src/core/perf/operators/switch.js', 'src/core/perf/operators/takeuntil.js', 'src/core/perf/operators/withlatestfrom.js', 'src/core/perf/operators/zip.js', 'src/core/linq/observable/zip.js', 'src/core/linq/observable/zipiterable.js', // Single 'src/core/linq/observable/asobservable.js', 'src/core/linq/observable/dematerialize.js', 'src/core/perf/operators/distinctuntilchanged.js', 'src/core/perf/operators/tap.js', 'src/core/perf/operators/finally.js', 'src/core/perf/operators/ignoreelements.js', 'src/core/linq/observable/materialize.js', 'src/core/linq/observable/repeatproto.js', 'src/core/linq/observable/retry.js', 'src/core/linq/observable/retrywhen.js', 'src/core/linq/observable/repeatwhen.js', 'src/core/perf/operators/scan.js', 'src/core/linq/observable/skiplast.js', 'src/core/linq/observable/startwith.js', 'src/core/linq/observable/takelast.js', // Standard Query Operators 'src/core/perf/operators/concatmap.js', 'src/core/perf/operators/map.js', 'src/core/linq/observable/pluck.js', 'src/core/perf/operators/flatmap.js', 'src/core/perf/operators/flatmaplatest.js', 'src/core/perf/operators/skip.js', 'src/core/linq/observable/skipwhile.js', 'src/core/perf/operators/take.js', 'src/core/linq/observable/takewhile.js', 'src/core/perf/operators/filter.js', // Async Operators 'src/core/perf/operators/fromcallback.js', 'src/core/perf/operators/fromnodecallback.js', 'src/core/linq/observable/fromevent.js', // publish 'src/core/linq/observable/fromeventpattern.js', // publish 'src/core/perf/operators/frompromise.js', // AsyncSubject, asObservable 'src/core/linq/observable/topromise.js', 'src/core/linq/observable/startasync.js', // Binding Operators 'src/core/linq/observable/multicast.js', // ConnectableObservable 'src/core/linq/observable/publish.js', // mulitcast, Subject 'src/core/linq/observable/share.js', // mulitcast, Subject, Reference counted 'src/core/linq/observable/publishlast.js', // multicast, AsyncSubject 'src/core/linq/observable/publishvalue.js', // multicast, BehaviorSubject 'src/core/linq/observable/sharevalue.js', // multicast, BehaviorSubject, Reference counted 'src/core/linq/observable/replay.js', // multicast, ReplaySubject 'src/core/linq/observable/sharereplay.js', 'src/core/linq/connectableobservable.js', // Time operators 'src/core/linq/observable/_observabletimer.js', // AnonymousObservable 'src/core/linq/observable/_observabletimerdateandperiod.js', // AnonymousObservable, normalizeTime 'src/core/linq/observable/_observabletimertimespanandperiod.js', // AnonymousObservable, defer, _observabletimerdateandperiod 'src/core/linq/observable/interval.js', // timeoutScheduler, _observabletimertimespanandperiod 'src/core/linq/observable/timer.js', // timeoutScheduler, _observabletimerdate, _observabletimerdateandperiod, _observabletimertimespan, _observabletimertimespanandperiod 'src/core/linq/observable/delay.js', // AnonymousObservable, timeoutScheduler, SerialDisposable, materialize, timestamp 'src/core/linq/observable/debounce.js', // AnonymousObservable, SerialDisposable, timeoutScheduler, SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/timestamp.js', // timeoutScheduler, select 'src/core/linq/observable/sample.js', // AnonymousObservable, CompositeDisposable, interval, timeoutScheduler 'src/core/linq/observable/timeout.js', // AnonymousObservable, timeoutScheduler, throw, SingleAssignmentDisposable, SerialDisposable, CompositeDisposable 'src/core/linq/observable/throttle.js', // Backpressure operators 'src/core/backpressure/pausable.js', 'src/core/backpressure/pausablebuffered.js', 'src/core/backpressure/controlled.js', 'src/core/linq/observable/pipe.js', // Transducers 'src/core/linq/observable/transduce.js', 'src/core/anonymousobservable.js', 'src/core/autodetachobserver.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/subjects/behaviorsubject.js', 'src/core/subjects/replaysubject.js', 'src/core/backpressure/pauser.js', 'src/core/headers/exports.js', // End long stack traces 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js', ], dest: 'dist/rx.lite.js' }, 'lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/intro.js', 'src/core/headers/liteheader-compat.js', // Stack trace start 'src/core/internal/trycatch.js', 'src/core/longstacktraces/longstackbegin.js', 'src/core/longstacktraces/longstacktraces.js', 'src/core/internal/polyfills.js', 'src/core/internal/errors.js', 'src/core/headers/enumeratorheader.js', 'src/core/internal/bindcallback.js', 'src/core/internal/dontenums.js', 'src/core/internal/isequal.js', 'src/core/internal/util.js', 'src/core/disposables/compositedisposable.js', 'src/core/disposables/disposable.js', 'src/core/disposables/booleandisposable.js', 'src/core/disposables/binarydisposable.js', 'src/core/disposables/refcountdisposable.js', 'src/core/concurrency/scheduleditem.js', 'src/core/concurrency/scheduler.js', 'src/core/concurrency/scheduler.recursive.js', 'src/core/concurrency/scheduler.periodic.js', 'src/core/concurrency/immediatescheduler.js', 'src/core/concurrency/currentthreadscheduler.js', 'src/core/concurrency/scheduleperiodicrecursive.js', 'src/core/concurrency/defaultscheduler.js', 'src/core/internal/priorityqueue.js', 'src/core/notification.js', 'src/core/observer-lite.js', 'src/core/abstractobserver.js', 'src/core/anonymousobserver.js', 'src/core/observable.js', 'src/core/perf/observablebase.js', 'src/core/perf/operators/flatmapbase.js', 'src/core/enumerable.js', 'src/core/scheduledobserver.js', // Creation 'src/core/perf/operators/toarray.js', 'src/core/linq/observable/create.js', 'src/core/linq/observable/defer.js', 'src/core/perf/operators/empty.js', 'src/core/perf/operators/from.js', 'src/core/perf/operators/fromarrayobservable.js','src/core/perf/operators/fromarray.js', 'src/core/perf/operators/never.js', 'src/core/perf/operators/of.js', 'src/core/perf/operators/pairs.js', 'src/core/perf/operators/range.js', 'src/core/perf/operators/repeat.js', 'src/core/perf/operators/just.js', 'src/core/perf/operators/throw.js', // Multiple 'src/core/linq/observable/catchproto.js', 'src/core/linq/observable/catch.js', 'src/core/linq/observable/combinelatestproto.js', 'src/core/perf/operators/combinelatest.js', 'src/core/linq/observable/concatproto.js', 'src/core/perf/operators/concat.js', 'src/core/linq/observable/concatall.js', 'src/core/perf/operators/mergeconcat.js', 'src/core/linq/observable/merge.js', 'src/core/perf/operators/mergeall.js', 'src/core/linq/observable/mergedelayerror.js', 'src/core/perf/operators/skipuntil.js', 'src/core/perf/operators/switch.js', 'src/core/perf/operators/takeuntil.js', 'src/core/perf/operators/withlatestfrom.js', 'src/core/perf/operators/zip.js', 'src/core/linq/observable/zip.js', 'src/core/linq/observable/zipiterable.js', // Single 'src/core/linq/observable/asobservable.js', 'src/core/linq/observable/dematerialize.js', 'src/core/perf/operators/distinctuntilchanged.js', 'src/core/perf/operators/tap.js', 'src/core/perf/operators/finally.js', 'src/core/perf/operators/ignoreelements.js', 'src/core/linq/observable/materialize.js', 'src/core/linq/observable/repeatproto.js', 'src/core/linq/observable/retry.js', 'src/core/linq/observable/retrywhen.js', 'src/core/linq/observable/repeatwhen.js', 'src/core/perf/operators/scan.js', 'src/core/linq/observable/skiplast.js', 'src/core/linq/observable/startwith.js', 'src/core/linq/observable/takelast.js', // Standard Query Operators 'src/core/perf/operators/concatmap.js', 'src/core/perf/operators/map.js', 'src/core/linq/observable/pluck.js', 'src/core/perf/operators/flatmap.js', 'src/core/perf/operators/flatmaplatest.js', 'src/core/perf/operators/skip.js', 'src/core/linq/observable/skipwhile.js', 'src/core/perf/operators/take.js', 'src/core/linq/observable/takewhile.js', 'src/core/perf/operators/filter.js', // Async Operators 'src/core/perf/operators/fromcallback.js', 'src/core/perf/operators/fromnodecallback.js', 'src/core/linq/observable/fromevent.js', // publish 'src/core/linq/observable/fromeventpattern.js', // publish 'src/core/perf/operators/frompromise.js', // AsyncSubject, asObservable 'src/core/linq/observable/topromise.js', 'src/core/linq/observable/startasync.js', // Binding Operators 'src/core/linq/observable/multicast.js', // ConnectableObservable 'src/core/linq/observable/publish.js', // mulitcast, Subject 'src/core/linq/observable/share.js', // mulitcast, Subject, Reference counted 'src/core/linq/observable/publishlast.js', // multicast, AsyncSubject 'src/core/linq/observable/publishvalue.js', // multicast, BehaviorSubject 'src/core/linq/observable/sharevalue.js', // multicast, BehaviorSubject, Reference counted 'src/core/linq/observable/replay.js', // multicast, ReplaySubject 'src/core/linq/observable/sharereplay.js', 'src/core/linq/connectableobservable.js', // Time operators 'src/core/linq/observable/_observabletimer.js', // AnonymousObservable 'src/core/linq/observable/_observabletimerdateandperiod.js', // AnonymousObservable, normalizeTime 'src/core/linq/observable/_observabletimertimespanandperiod.js', // AnonymousObservable, defer, _observabletimerdateandperiod 'src/core/linq/observable/interval.js', // timeoutScheduler, _observabletimertimespanandperiod 'src/core/linq/observable/timer.js', // timeoutScheduler, _observabletimerdate, _observabletimerdateandperiod, _observabletimertimespan, _observabletimertimespanandperiod 'src/core/linq/observable/delay.js', // AnonymousObservable, timeoutScheduler, SerialDisposable, materialize, timestamp 'src/core/linq/observable/debounce.js', // AnonymousObservable, SerialDisposable, timeoutScheduler, SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/timestamp.js', // timeoutScheduler, select 'src/core/linq/observable/sample.js', // AnonymousObservable, CompositeDisposable, interval, timeoutScheduler 'src/core/linq/observable/timeout.js', // AnonymousObservable, timeoutScheduler, throw, SingleAssignmentDisposable, SerialDisposable, CompositeDisposable 'src/core/linq/observable/throttle.js', // Backpressure operators 'src/core/backpressure/pausable.js', 'src/core/backpressure/pausablebuffered.js', 'src/core/backpressure/controlled.js', 'src/core/linq/observable/pipe.js', // Transducers 'src/core/linq/observable/transduce.js', 'src/core/anonymousobservable.js', 'src/core/autodetachobserver.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/subject.js', 'src/core/subjects/asyncsubject.js', 'src/core/subjects/anonymoussubject.js', 'src/core/subjects/behaviorsubject.js', 'src/core/subjects/replaysubject.js', 'src/core/backpressure/pauser.js', 'src/core/headers/exports.js', // End long stack traces 'src/core/longstacktraces/longstackend.js', 'src/core/headers/outro.js', ], dest: 'dist/rx.lite.compat.js' }, 'lite-extras': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/liteextrasheader.js', 'src/core/internal/trycatch.js', 'src/core/disposables/scheduleddisposable.js', 'src/core/checkedobserver.js', 'src/core/observeonobserver.js', 'src/core/observer-extras.js', // Concurrency 'src/core/linq/observable/observeon.js', // ObserveOnObserver 'src/core/linq/observable/subscribeon.js', // SingleAssignmentDisposable, SerialDisposable, ScheduleDisposable // Creation 'src/core/linq/observable/generate.js', 'src/core/linq/observable/using.js', // Multiple 'src/core/linq/observable/ambproto.js', 'src/core/linq/observable/amb.js', 'src/core/linq/observable/onerrorresumenextproto.js', 'src/core/linq/observable/onerrorresumenext.js', // Single 'src/core/linq/observable/bufferwithcount.js', 'src/core/linq/observable/windowwithcount.js', 'src/core/linq/observable/takelastbuffer.js', // Standard Query Operators 'src/core/linq/observable/defaultifempty.js', 'src/core/linq/observable/distinct.js', 'src/core/linq/observable/singleinstance.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.lite.extras.js' }, 'lite-extras-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/liteextrasheader.js', 'src/core/internal/trycatch.js', 'src/core/disposables/scheduleddisposable.js', 'src/core/checkedobserver.js', 'src/core/observeonobserver.js', 'src/core/observer-extras.js', // Concurrency 'src/core/linq/observable/observeon.js', // ObserveOnObserver 'src/core/linq/observable/subscribeon.js', // SingleAssignmentDisposable, SerialDisposable, ScheduleDisposable // Creation 'src/core/linq/observable/generate.js', 'src/core/linq/observable/using.js', // Multiple 'src/core/linq/observable/ambproto.js', 'src/core/linq/observable/amb.js', 'src/core/linq/observable/onerrorresumenextproto.js', 'src/core/linq/observable/onerrorresumenext.js', // Single 'src/core/linq/observable/bufferwithcount.js', 'src/core/linq/observable/windowwithcount.js', 'src/core/linq/observable/takelastbuffer.js', // Standard Query Operators 'src/core/linq/observable/defaultifempty.js', 'src/core/linq/observable/distinct.js', 'src/core/linq/observable/singleinstance.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.lite.extras.compat.js' }, backpressure: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/backpressureheader.js', 'src/core/internal/trycatch.js', // Backpressure operators 'src/core/backpressure/pauser.js', 'src/core/backpressure/pausable.js', 'src/core/backpressure/pausablebuffered.js', 'src/core/backpressure/controlled.js', 'src/core/backpressure/stopandwait.js', 'src/core/backpressure/windowed.js', 'src/core/linq/observable/pipe.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.backpressure.js' }, 'backpressure-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/backpressureheader.js', 'src/core/internal/trycatch.js', // Backpressure operators 'src/core/backpressure/stopandwait.js', 'src/core/backpressure/windowed.js', 'src/core/linq/observable/pipe.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-backpressure/rx.lite.backpressure.js' }, 'backpressure-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/backpressureheader.js', 'src/core/internal/trycatch.js', // Backpressure operators 'src/core/backpressure/stopandwait.js', 'src/core/backpressure/windowed.js', 'src/core/linq/observable/pipe.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-backpressure-compat/rx.lite.backpressure.compat.js' }, aggregates: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/aggregatesheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/_extremaby.js', 'src/core/linq/observable/_firstonly.js', 'src/core/perf/operators/reduce.js', // scan, startwith, finalvalue 'src/core/linq/observable/some.js', // where 'src/core/linq/observable/isempty.js', // any, select 'src/core/linq/observable/every.js', // where, any 'src/core/linq/observable/includes.js', // where, any 'src/core/linq/observable/count.js', // where, aggregate 'src/core/linq/observable/indexof.js', 'src/core/linq/observable/sum.js', // select, aggregate 'src/core/linq/observable/minby.js', // _extremaby 'src/core/linq/observable/min.js', // minby, _firstonly 'src/core/linq/observable/maxby.js', // _extremaby 'src/core/linq/observable/max.js', // max, _firstonly 'src/core/linq/observable/average.js', // select, scan, aggregate, finalvalue 'src/core/linq/observable/sequenceequal.js', // compositedisposable 'src/core/linq/observable/elementat.js', 'src/core/linq/observable/single.js', 'src/core/linq/observable/first.js', 'src/core/linq/observable/last.js', 'src/core/linq/observable/_findvalue.js', 'src/core/linq/observable/find.js', // _findvalue, where 'src/core/linq/observable/findindex.js', // _findvalue, where 'src/core/linq/observable/toset.js', 'src/core/linq/observable/tomap.js', 'src/core/linq/observable/slice.js', 'src/core/linq/observable/lastindexof.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.aggregates.js' }, 'aggregates-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/aggregatesheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/_extremaby.js', 'src/core/linq/observable/_firstonly.js', 'src/core/perf/operators/reduce.js', // scan, startwith, finalvalue 'src/core/linq/observable/some.js', // where 'src/core/linq/observable/isempty.js', // any, select 'src/core/linq/observable/every.js', // where, any 'src/core/linq/observable/includes.js', // where, any 'src/core/linq/observable/count.js', // where, aggregate 'src/core/linq/observable/indexof.js', 'src/core/linq/observable/sum.js', // select, aggregate 'src/core/linq/observable/minby.js', // _extremaby 'src/core/linq/observable/min.js', // minby, _firstonly 'src/core/linq/observable/maxby.js', // _extremaby 'src/core/linq/observable/max.js', // max, _firstonly 'src/core/linq/observable/average.js', // select, scan, aggregate, finalvalue 'src/core/linq/observable/sequenceequal.js', // compositedisposable 'src/core/linq/observable/elementat.js', 'src/core/linq/observable/single.js', 'src/core/linq/observable/first.js', 'src/core/linq/observable/last.js', 'src/core/linq/observable/_findvalue.js', 'src/core/linq/observable/find.js', // _findvalue, where 'src/core/linq/observable/findindex.js', // _findvalue, where 'src/core/linq/observable/toset.js', 'src/core/linq/observable/tomap.js', 'src/core/linq/observable/slice.js', 'src/core/linq/observable/lastindexof.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-aggregates/rx.lite.aggregates.js' }, 'aggregates-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/aggregatesheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/_extremaby.js', 'src/core/linq/observable/_firstonly.js', 'src/core/perf/operators/reduce.js', // scan, startwith, finalvalue 'src/core/linq/observable/some.js', // where 'src/core/linq/observable/isempty.js', // any, select 'src/core/linq/observable/every.js', // where, any 'src/core/linq/observable/includes.js', // where, any 'src/core/linq/observable/count.js', // where, aggregate 'src/core/linq/observable/indexof.js', 'src/core/linq/observable/sum.js', // select, aggregate 'src/core/linq/observable/minby.js', // _extremaby 'src/core/linq/observable/min.js', // minby, _firstonly 'src/core/linq/observable/maxby.js', // _extremaby 'src/core/linq/observable/max.js', // max, _firstonly 'src/core/linq/observable/average.js', // select, scan, aggregate, finalvalue 'src/core/linq/observable/sequenceequal.js', // compositedisposable 'src/core/linq/observable/elementat.js', 'src/core/linq/observable/single.js', 'src/core/linq/observable/first.js', 'src/core/linq/observable/last.js', 'src/core/linq/observable/_findvalue.js', 'src/core/linq/observable/find.js', // _findvalue, where 'src/core/linq/observable/findindex.js', // _findvalue, where 'src/core/linq/observable/toset.js', 'src/core/linq/observable/tomap.js', 'src/core/linq/observable/slice.js', 'src/core/linq/observable/lastindexof.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-aggregates-compat/rx.lite.aggregates.compat.js' }, 'async': { src: [ 'src/core/headers/license.js', 'src/core/headers/asyncintro.js', 'src/core/headers/asyncheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/spawn.js', 'src/core/linq/observable/start.js', // toasync 'src/core/linq/observable/toasync.js', // AsyncSubject, asObservable 'src/core/perf/operators/fromcallback.js', 'src/core/perf/operators/fromnodecallback.js', 'src/core/linq/observable/fromevent.js', // publish 'src/core/linq/observable/fromeventpattern.js', // publish 'src/core/linq/observable/startasync.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.async.js' }, 'async-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/asyncintro.js', 'src/core/headers/asyncheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/spawn.js', 'src/core/linq/observable/start.js', // toasync 'src/core/linq/observable/toasync.js', // asyncsubject, asObservable 'src/core/perf/operators/fromcallback.js', 'src/core/perf/operators/fromnodecallback.js', 'src/core/linq/observable/fromevent.js', // publish 'src/core/linq/observable/fromeventpattern.js', // publish 'src/core/linq/observable/startasync.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.async.compat.js' }, 'async-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/asyncheader.js', 'src/core/linq/observable/spawn.js', 'src/core/linq/observable/start.js', // toasync 'src/core/linq/observable/startasync.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-async/rx.lite.async.js' }, 'async-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/asyncheader.js', 'src/core/linq/observable/spawn.js', 'src/core/linq/observable/start.js', // toasync 'src/core/linq/observable/startasync.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-async-compat/rx.lite.async.compat.js' }, binding: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/bindingheader.js', 'src/core/linq/observable/multicast.js', // ConnectableObservable 'src/core/linq/observable/publish.js', // mulitcast, Subject 'src/core/linq/observable/share.js', // mulitcast, Subject, Reference counted 'src/core/linq/observable/publishlast.js', // multicast, AsyncSubject 'src/core/linq/observable/publishvalue.js', // multicast, BehaviorSubject 'src/core/linq/observable/sharevalue.js', // multicast, BehaviorSubject, Reference counted 'src/core/linq/observable/replay.js', // multicast, ReplaySubject 'src/core/linq/observable/sharereplay.js', 'src/core/subjects/innersubscription.js', 'src/core/subjects/behaviorsubject.js', 'src/core/subjects/replaysubject.js', 'src/core/linq/connectableobservable.js', 'src/core/linq/observable/singleinstance.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.binding.js' }, coincidence: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/coincidenceheader.js', 'src/core/internal/trycatch.js', 'src/core/internal/map.js', 'src/core/linq/observable/join.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/groupjoin.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/buffer.js', // window, selectMany, toArray 'src/core/linq/observable/window.js', // CompositeDisposable, RefCountDisposable, Subject, SingleAssignmentDisposable 'src/core/linq/observable/pairwise.js', 'src/core/linq/observable/partition.js', 'src/core/linq/observable/groupby.js', 'src/core/linq/observable/groupbyuntil.js', 'src/core/linq/groupedobservable.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.coincidence.js' }, 'coincidence-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/coincidenceheader.js', 'src/core/internal/trycatch.js', 'src/core/internal/map.js', 'src/core/linq/observable/join.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/groupjoin.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/buffer.js', // window, selectMany, toArray 'src/core/linq/observable/window.js', // CompositeDisposable, RefCountDisposable, Subject, SingleAssignmentDisposable 'src/core/linq/observable/pairwise.js', 'src/core/linq/observable/partition.js', 'src/core/linq/observable/groupby.js', 'src/core/linq/observable/groupbyuntil.js', 'src/core/linq/groupedobservable.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-coincidence/rx.lite.coincidence.js' }, 'coincidence-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/coincidenceheader.js', 'src/core/internal/trycatch.js', 'src/core/internal/map.js', 'src/core/linq/observable/join.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/groupjoin.js', // SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, Dictionary 'src/core/linq/observable/buffer.js', // window, selectMany, toArray 'src/core/linq/observable/window.js', // CompositeDisposable, RefCountDisposable, Subject, SingleAssignmentDisposable 'src/core/linq/observable/pairwise.js', 'src/core/linq/observable/partition.js', 'src/core/linq/observable/groupby.js', 'src/core/linq/observable/groupbyuntil.js', 'src/core/linq/groupedobservable.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-coincidence-compat/rx.lite.coincidence.compat.js' }, experimental: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/experimentalheader.js', 'src/core/internal/trycatch.js', 'src/core/headers/enumeratorheader.js', 'src/core/linq/enumerable/while.js', // Enumerable 'src/core/linq/observable/let.js', 'src/core/linq/observable/if.js', // defer, empty 'src/core/linq/observable/for.js', // Enumerable.forEach, concatproto 'src/core/linq/observable/while.js', // Enumerable.while, concatproto 'src/core/linq/observable/dowhile.js', // Enumerable.while, concat 'src/core/linq/observable/case.js', // defer, empty 'src/core/linq/observable/expand.js', // immediateScheduler, SerialDisposable, CompositeDisposable, SingleAssignmentDisposable 'src/core/linq/observable/forkjoin.js', // CompositeDisposable 'src/core/linq/observable/forkjoinproto.js', // SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/manyselect.js', // ImmediateScheduler, CurrentThreadScheduler, select, do, observeOn // Experimental Flattening 'src/core/linq/observable/switchfirst.js', 'src/core/perf/operators/flatmapfirst.js', 'src/core/perf/operators/flatmapwithmaxconcurrent.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.experimental.js' }, 'experimental-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/experimentalheader.js', 'src/core/internal/trycatch.js', 'src/core/headers/enumeratorheader.js', 'src/core/linq/enumerable/while.js', // Enumerable 'src/core/linq/observable/let.js', 'src/core/linq/observable/if.js', // defer, empty 'src/core/linq/observable/for.js', // Enumerable.forEach, concatproto 'src/core/linq/observable/while.js', // Enumerable.while, concatproto 'src/core/linq/observable/dowhile.js', // Enumerable.while, concat 'src/core/linq/observable/case.js', // defer, empty 'src/core/linq/observable/expand.js', // immediateScheduler, SerialDisposable, CompositeDisposable, SingleAssignmentDisposable 'src/core/linq/observable/forkjoin.js', // CompositeDisposable 'src/core/linq/observable/forkjoinproto.js', // SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/manyselect.js', // ImmediateScheduler, CurrentThreadScheduler, select, do, observeOn // Experimental Flattening 'src/core/linq/observable/switchfirst.js', 'src/core/perf/operators/flatmapfirst.js', 'src/core/perf/operators/flatmapwithmaxconcurrent.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-experimental/rx.lite.experimental.js' }, 'experimental-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/experimentalheader.js', 'src/core/internal/trycatch.js', 'src/core/headers/enumeratorheader.js', 'src/core/linq/enumerable/while.js', // Enumerable 'src/core/linq/observable/let.js', 'src/core/linq/observable/if.js', // defer, empty 'src/core/linq/observable/for.js', // Enumerable.forEach, concatproto 'src/core/linq/observable/while.js', // Enumerable.while, concatproto 'src/core/linq/observable/dowhile.js', // Enumerable.while, concat 'src/core/linq/observable/case.js', // defer, empty 'src/core/linq/observable/expand.js', // immediateScheduler, SerialDisposable, CompositeDisposable, SingleAssignmentDisposable 'src/core/linq/observable/forkjoin.js', // CompositeDisposable 'src/core/linq/observable/forkjoinproto.js', // SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/manyselect.js', // ImmediateScheduler, CurrentThreadScheduler, select, do, observeOn // Experimental Flattening 'src/core/linq/observable/switchfirst.js', 'src/core/perf/operators/flatmapfirst.js', 'src/core/perf/operators/flatmapwithmaxconcurrent.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-experimental-compat/rx.lite.experimental.compat.js' }, joinpatterns: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/joinpatternsheader.js', 'src/core/internal/trycatch.js', 'src/core/internal/map.js', 'src/core/joins/pattern.js', 'src/core/joins/plan.js', 'src/core/joins/activeplan.js', 'src/core/joins/joinobserver.js', 'src/core/linq/observable/and.js', // Pattern 'src/core/linq/observable/thendo.js', // Pattern 'src/core/linq/observable/when.js', // CompositeDisposable 'src/core/headers/suboutro.js' ], dest: 'dist/rx.joinpatterns.js' }, 'joinpatterns-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/joinpatternsheader.js', 'src/core/internal/trycatch.js', 'src/core/internal/map.js', 'src/core/joins/pattern.js', 'src/core/joins/plan.js', 'src/core/joins/activeplan.js', 'src/core/joins/joinobserver.js', 'src/core/linq/observable/and.js', // Pattern 'src/core/linq/observable/thendo.js', // Pattern 'src/core/linq/observable/when.js', // CompositeDisposable 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-joinpatterns/rx.lite.joinpatterns.js' }, 'joinpatterns-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/joinpatternsheader.js', 'src/core/internal/trycatch.js', 'src/core/internal/map.js', 'src/core/joins/pattern.js', 'src/core/joins/plan.js', 'src/core/joins/activeplan.js', 'src/core/joins/joinobserver.js', 'src/core/linq/observable/and.js', // Pattern 'src/core/linq/observable/thendo.js', // Pattern 'src/core/linq/observable/when.js', // CompositeDisposable 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-joinpatterns-compat/rx.lite.joinpatterns.compat.js' }, testing: { src: [ 'src/core/headers/license.js', 'src/core/headers/testintro.js', 'src/core/headers/testheader.js', 'src/core/testing/reactivetest.js', 'src/core/testing/recorded.js', 'src/core/testing/subscription.js', 'src/core/testing/mockdisposable.js', 'src/core/testing/mockobserver.js', 'src/core/testing/mockpromise.js', 'src/core/testing/hotobservable.js', 'src/core/testing/coldobservable.js', 'src/core/testing/testscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.testing.js' }, 'testing-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/litetestintro.js', 'src/core/headers/testheader.js', 'src/core/testing/reactivetest.js', 'src/core/testing/recorded.js', 'src/core/testing/subscription.js', 'src/core/testing/mockdisposable.js', 'src/core/testing/mockobserver.js', 'src/core/testing/mockpromise.js', 'src/core/testing/hotobservable.js', 'src/core/testing/coldobservable.js', 'src/core/testing/testscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-testing/rx.lite.testing.js' }, 'testing-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/litetestintro-compat.js', 'src/core/headers/testheader.js', 'src/core/testing/reactivetest.js', 'src/core/testing/recorded.js', 'src/core/testing/subscription.js', 'src/core/testing/mockdisposable.js', 'src/core/testing/mockobserver.js', 'src/core/testing/mockpromise.js', 'src/core/testing/hotobservable.js', 'src/core/testing/coldobservable.js', 'src/core/testing/testscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-testing-compat/rx.lite.testing.compat.js' }, time: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/timeheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/_observabletimer.js', // AnonymousObservable 'src/core/linq/observable/_observabletimerdateandperiod.js', // AnonymousObservable, normalizeTime 'src/core/linq/observable/_observabletimertimespanandperiod.js', // AnonymousObservable, defer, _observabletimerdateandperiod 'src/core/linq/observable/interval.js', // timeoutScheduler, _observabletimertimespanandperiod 'src/core/linq/observable/timer.js', // timeoutScheduler, _observabletimerdate, _observabletimerdateandperiod, _observabletimertimespan, _observabletimertimespanandperiod 'src/core/linq/observable/delay.js', // AnonymousObservable, timeoutScheduler, SerialDisposable, materialize, timestamp 'src/core/linq/observable/debounce.js', // AnonymousObservable, SerialDisposable, timeoutScheduler, SingleAssignmentDisposable, CompositeDisposable 'src/core/linq/observable/windowwithtime.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/windowwithtimeorcount.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/bufferwithtime.js', // windowwithtime, selectMany, toArray 'src/core/linq/observable/bufferwithtimeorcount.js', // windowwithtimeorcount, selectMany, toArray 'src/core/linq/observable/timeinterval.js', // timeoutScheduler, defer, select 'src/core/linq/observable/timestamp.js', // timeoutScheduler, select 'src/core/linq/observable/sample.js', // AnonymousObservable, CompositeDisposable, interval, timeoutScheduler 'src/core/linq/observable/timeout.js', // AnonymousObservable, timeoutScheduler, throw, SingleAssignmentDisposable, SerialDisposable, CompositeDisposable 'src/core/linq/observable/generatewithabsolutetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/generatewithrelativetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/delaysubscription.js', // delayWithSelector, timer, empty 'src/core/linq/observable/skiplastwithtime.js', 'src/core/linq/observable/takelastwithtime.js', 'src/core/linq/observable/takelastbufferwithtime.js', 'src/core/linq/observable/takewithtime.js', 'src/core/linq/observable/skipwithtime.js', 'src/core/linq/observable/skipuntilwithtime.js', 'src/core/linq/observable/takeuntilwithtime.js', 'src/core/linq/observable/throttle.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.time.js' }, 'time-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/timeheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/windowwithtime.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/windowwithtimeorcount.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/bufferwithtime.js', // windowwithtime, selectMany, toArray 'src/core/linq/observable/bufferwithtimeorcount.js', // windowwithtimeorcount, selectMany, toArray 'src/core/linq/observable/timeinterval.js', // timeoutScheduler, defer, select 'src/core/linq/observable/generatewithabsolutetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/generatewithrelativetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/delaysubscription.js', // delayWithSelector, timer, empty 'src/core/linq/observable/skiplastwithtime.js', 'src/core/linq/observable/takelastwithtime.js', 'src/core/linq/observable/takelastbufferwithtime.js', 'src/core/linq/observable/takewithtime.js', 'src/core/linq/observable/skipwithtime.js', 'src/core/linq/observable/skipuntilwithtime.js', 'src/core/linq/observable/takeuntilwithtime.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-time/rx.lite.time.js' }, 'time-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/timeheader.js', 'src/core/internal/trycatch.js', 'src/core/linq/observable/windowwithtime.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/windowwithtimeorcount.js', // AnonymousObservable, SerialDisposable, SingleAssignmentDisposable, RefCountDisposable, CompositeDisposable, addref, subject 'src/core/linq/observable/bufferwithtime.js', // windowwithtime, selectMany, toArray 'src/core/linq/observable/bufferwithtimeorcount.js', // windowwithtimeorcount, selectMany, toArray 'src/core/linq/observable/timeinterval.js', // timeoutScheduler, defer, select 'src/core/linq/observable/generatewithabsolutetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/generatewithrelativetime.js', // timeoutScheduler, AnonymousObservable 'src/core/linq/observable/delaysubscription.js', // delayWithSelector, timer, empty 'src/core/linq/observable/skiplastwithtime.js', 'src/core/linq/observable/takelastwithtime.js', 'src/core/linq/observable/takelastbufferwithtime.js', 'src/core/linq/observable/takewithtime.js', 'src/core/linq/observable/skipwithtime.js', 'src/core/linq/observable/skipuntilwithtime.js', 'src/core/linq/observable/takeuntilwithtime.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-time-compat/rx.lite.time.compat.js' }, virtualtime: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/virtualtimeheader.js', 'src/core/concurrency/virtualtimescheduler.js', 'src/core/concurrency/historicalscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.virtualtime.js' }, 'virtualtime-lite': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro.js', 'src/core/headers/virtualtimeheader.js', 'src/core/concurrency/virtualtimescheduler.js', 'src/core/concurrency/historicalscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-virtualtime/rx.lite.virtualtime.js' }, 'virtualtime-lite-compat': { src: [ 'src/core/headers/license.js', 'src/core/headers/liteintro-compat.js', 'src/core/headers/virtualtimeheader.js', 'src/core/concurrency/virtualtimescheduler.js', 'src/core/concurrency/historicalscheduler.js', 'src/core/headers/suboutro.js' ], dest: 'modules/rx-lite-virtualtime-compat/rx.lite.virtualtime.compat.js' }, sorting: { src: [ 'src/core/headers/license.js', 'src/core/headers/subintro.js', 'src/core/headers/sortingheader.js', 'src/core/linq/observable/jortsort.js', 'src/core/linq/observable/jortsortuntil.js', 'src/core/headers/suboutro.js' ], dest: 'dist/rx.sorting.js' } }, uglify: { options: { banner: '/* Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.*/' }, core: { options: { sourceMap: true, sourceMapName: 'dist/rx.core.map' }, files: {'dist/rx.core.min.js': ['dist/rx.core.js'] } }, 'core-binding': { options: { sourceMap: true, sourceMapName: 'dist/rx.core.binding.map' }, files: {'dist/rx.core.binding.min.js': ['dist/rx.core.binding.js'] } }, 'core-testing': { options: { sourceMap: true, sourceMapName: 'dist/rx.core.testing.map' }, files: {'dist/rx.core.testing.min.js': ['dist/rx.core.testing.js'] } }, all: { options: { sourceMap: true, sourceMapName: 'dist/rx.all.map' }, files: {'dist/rx.all.min.js': ['dist/rx.all.js'] } }, 'all-compat': { options: { sourceMap: true, sourceMapName: 'dist/rx.all.compat.map' }, files: {'dist/rx.all.compat.min.js': ['dist/rx.all.compat.js'] } }, main: { options: { sourceMap: true, sourceMapName: 'dist/rx.map' }, files: {'dist/rx.min.js': ['dist/rx.js'] } }, 'main-compat': { options: { sourceMap: true, sourceMapName: 'dist/rx.compat.map' }, files: {'dist/rx.compat.min.js': ['dist/rx.compat.js'] } }, lite: { options: { sourceMap: true, sourceMapName: 'dist/rx.lite.map' }, files: {'dist/rx.lite.min.js': ['dist/rx.lite.js'] } }, 'lite-compat': { options: { sourceMap: true, sourceMapName: 'dist/rx.lite.compat.map' }, files: {'dist/rx.lite.compat.min.js': ['dist/rx.lite.compat.js'] } }, 'lite-extras': { options: { sourceMap: true, sourceMapName: 'dist/rx.lite.extras.map' }, files: {'dist/rx.lite.extras.min.js': ['dist/rx.lite.extras.js'] } }, 'lite-extras-compat': { options: { sourceMap: true, sourceMapName: 'dist/rx.lite.extras.compat.map' }, files: {'dist/rx.lite.extras.compat.min.js': ['dist/rx.lite.extras.compat.js'] } }, aggregates: { options: { sourceMap: true, sourceMapName: 'dist/rx.aggregates.map' }, files: {'dist/rx.aggregates.min.js': ['dist/rx.aggregates.js'] } }, 'aggregates-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-aggregates/rx.lite.aggregates.map' }, files: {'modules/rx-lite-aggregates/rx.lite.aggregates.min.js': ['modules/rx-lite-aggregates/rx.lite.aggregates.js'] } }, 'aggregates-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-aggregates-compat/rx.lite.aggregates.compat.map' }, files: {'modules/rx-lite-aggregates-compat/rx.lite.aggregates.compat.min.js': ['modules/rx-lite-aggregates-compat/rx.lite.aggregates.compat.js'] } }, 'async': { options: { sourceMap: true, sourceMapName: 'dist/rx.async.map' }, files: {'dist/rx.async.min.js': ['dist/rx.async.js'] } }, 'async-compat': { options: { sourceMap: true, sourceMapName: 'dist/rx.async.compat.map' }, files: {'dist/rx.async.compat.min.js': ['dist/rx.async.compat.js'] } }, 'async-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-async/rx.lite.async.map' }, files: {'modules/rx-lite-async/rx.lite.async.min.js': ['modules/rx-lite-async/rx.lite.async.js'] } }, 'async-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-async-compat/rx.lite.async.compat.map' }, files: {'modules/rx-lite-async-compat/rx.lite.async.compat.min.js': ['modules/rx-lite-async-compat/rx.lite.async.compat.js'] } }, backpressure: { options: { sourceMap: true, sourceMapName: 'dist/rx.backpressure.map' }, files: {'dist/rx.backpressure.min.js': ['dist/rx.backpressure.js'] } }, 'backpressure-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-backpressure/rx.lite.backpressure.map' }, files: {'modules/rx-lite-backpressure/rx.lite.backpressure.min.js': ['modules/rx-lite-backpressure/rx.lite.backpressure.js'] } }, 'backpressure-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-backpressure-compat/rx.lite.backpressure.compat.map' }, files: {'modules/rx-lite-backpressure-compat/rx.lite.backpressure.compat.min.js': ['modules/rx-lite-backpressure-compat/rx.lite.backpressure.compat.js'] } }, binding: { options: { sourceMap: true, sourceMapName: 'dist/rx.binding.map' }, files: {'dist/rx.binding.min.js': ['dist/rx.binding.js'] } }, coincidence: { options: { sourceMap: true, sourceMapName: 'dist/rx.coincidence.map' }, files: {'dist/rx.coincidence.min.js': ['dist/rx.coincidence.js'] } }, 'coincidence-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-coincidence/rx.lite.coincidence.map' }, files: {'modules/rx-lite-coincidence/rx.lite.coincidence.min.js': ['modules/rx-lite-coincidence/rx.lite.coincidence.js'] } }, 'coincidence-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-coincidence-compat/rx.lite.coincidence.compat.map' }, files: {'modules/rx-lite-coincidence-compat/rx.lite.coincidence.compat.min.js': ['modules/rx-lite-coincidence-compat/rx.lite.coincidence.compat.js'] } }, experimental: { options: { sourceMap: true, sourceMapName: 'dist/rx.experimental.map' }, files: {'dist/rx.experimental.min.js': ['dist/rx.experimental.js'] } }, 'experimental-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-experimental/rx.lite.experimental.map' }, files: {'modules/rx-lite-experimental/rx.lite.experimental.min.js': ['modules/rx-lite-experimental/rx.lite.experimental.js'] } }, 'experimental-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-experimental-compat/rx.lite.experimental.compat.map' }, files: {'modules/rx-lite-experimental-compat/rx.lite.experimental.compat.min.js': ['modules/rx-lite-experimental-compat/rx.lite.experimental.compat.js'] } }, joinpatterns: { options: { sourceMap: true, sourceMapName: 'dist/rx.joinpatterns.map' }, files: {'dist/rx.joinpatterns.min.js': ['dist/rx.joinpatterns.js'] } }, 'joinpatterns-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-joinpatterns/rx.lite.joinpatterns.map' }, files: {'modules/rx-lite-joinpatterns/rx.lite.joinpatterns.min.js': ['modules/rx-lite-joinpatterns/rx.lite.joinpatterns.js'] } }, 'joinpatterns-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-joinpatterns-compat/rx.lite.joinpatterns.compat.map' }, files: {'modules/rx-lite-joinpatterns-compat/rx.lite.joinpatterns.compat.min.js': ['modules/rx-lite-joinpatterns-compat/rx.lite.joinpatterns.compat.js'] } }, testing: { options: { sourceMap: true, sourceMapName: 'dist/rx.testing.map' }, files: {'dist/rx.testing.min.js': ['dist/rx.testing.js'] } }, 'testing-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-testing/rx.lite.testing.map' }, files: {'modules/rx-lite-testing/rx.lite.testing.min.js': ['modules/rx-lite-testing/rx.lite.testing.js'] } }, 'testing-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-testing-compat/rx.lite.testing.compat.map' }, files: {'modules/rx-lite-testing-compat/rx.lite.testing.compat.min.js': ['modules/rx-lite-testing-compat/rx.lite.testing.compat.js'] } }, time: { options: { sourceMap: true, sourceMapName: 'dist/rx.time.map' }, files: {'dist/rx.time.min.js': ['dist/rx.time.js'] } }, 'time-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-time/rx.lite.time.map' }, files: {'modules/rx-lite-time/rx.lite.time.min.js': ['modules/rx-lite-time/rx.lite.time.js'] } }, 'time-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-time-compat/rx.lite.time.compat.map' }, files: {'modules/rx-lite-time-compat/rx.lite.time.compat.min.js': ['modules/rx-lite-time-compat/rx.lite.time.compat.js'] } }, virtualtime: { options: { sourceMap: true, sourceMapName: 'dist/rx.virtualtime.map' }, files: {'dist/rx.virtualtime.min.js': ['dist/rx.virtualtime.js'] } }, 'virtualtime-lite': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-virtualtime/rx.lite.virtualtime.map' }, files: {'modules/rx-lite-virtualtime/rx.lite.virtualtime.min.js': ['modules/rx-lite-virtualtime/rx.lite.virtualtime.js'] } }, 'virtualtime-lite-compat': { options: { sourceMap: true, sourceMapName: 'modules/rx-lite-virtualtime-compat/rx.lite.virtualtime.compat.map' }, files: {'modules/rx-lite-virtualtime-compat/rx.lite.virtualtime.compat.min.js': ['modules/rx-lite-virtualtime-compat/rx.lite.virtualtime.compat.js'] } }, sorting: { options: { sourceMap: true, sourceMapName: 'dist/rx.sorting.map' }, files: {'dist/rx.sorting.min.js': ['dist/rx.sorting.js'] } } }, qunit: { all: ['tests/*.html'] }, jshint: { all: [ 'rx.all.js' ] }, jscs: { src: 'src/**/*.js', options: { config: '.jscsrc' } }, watch: { scripts: { files: 'src/**/*.js', tasks: ['default'], options: { interrupt: true } } }, copy: { 'lite': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.lite.js', 'dist/rx.lite.map', 'dist/rx.lite.min.js' ], dest: 'modules/rx-lite/' }, 'lite-compat': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.lite.compat.js', 'dist/rx.lite.compat.map', 'dist/rx.lite.compat.min.js' ], dest: 'modules/rx-lite-compat/' }, 'lite-extras': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.lite.extras.js', 'dist/rx.lite.extras.map', 'dist/rx.lite.extras.min.js' ], dest: 'modules/rx-lite-extras/' }, 'lite-extras-compat': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.lite.extras.compat.js', 'dist/rx.lite.extras.compat.map', 'dist/rx.lite.extras.compat.min.js' ], dest: 'modules/rx-lite-extras-compat/' }, 'core': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.core.js', 'dist/rx.core.map', 'dist/rx.core.min.js' ], dest: 'modules/rx-core/' }, 'core-binding': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.core.binding.js', 'dist/rx.core.binding.map', 'dist/rx.core.binding.min.js' ], dest: 'modules/rx-core-binding/' }, 'core-testing': { flatten: true, filter: 'isFile', expand: true, src: [ 'dist/rx.core.testing.js', 'dist/rx.core.testing.map', 'dist/rx.core.testing.min.js' ], dest: 'modules/rx-core-testing/' } } }); // Load all "grunt-*" tasks require('load-grunt-tasks')(grunt); function createNuGetPackage(nuspec) { var done = this.async(); //invoke nuget.exe grunt.util.spawn({ cmd: ".nuget/nuget.exe", args: [ //specify the .nuspec file "pack", nuspec, //specify where we want the package to be created "-OutputDirectory", "nuget", //override the version with whatever is currently defined in package.json "-Version", grunt.config.get("pkg").version ] }, function (error, result) { if (error) { grunt.log.error(error); } else { grunt.log.write(result); } done(); }); } grunt.registerTask('nuget-complete', 'Register NuGet-Complete', function () { createNuGetPackage.call(this, 'nuget/RxJS-Complete/RxJS-Complete.nuspec'); }); grunt.registerTask('nuget-aggregates', 'Register NuGet-Aggregates', function () { createNuGetPackage.call(this, 'nuget/RxJS-Aggregates/RxJS-Aggregates.nuspec'); }); grunt.registerTask('nuget-all', 'Register NuGet-All', function () { createNuGetPackage.call(this, 'nuget/RxJS-All/RxJS-All.nuspec'); }); grunt.registerTask('nuget-async', 'Register NuGet-Async', function () { createNuGetPackage.call(this, 'nuget/RxJS-Async/RxJS-Async.nuspec'); }); grunt.registerTask('nuget-backpressure', 'Register NuGet-BackPressure', function () { createNuGetPackage.call(this, 'nuget/RxJS-BackPressure/RxJS-BackPressure.nuspec'); }); grunt.registerTask('nuget-binding', 'Register NuGet-Binding', function () { createNuGetPackage.call(this, 'nuget/RxJS-Binding/RxJS-Binding.nuspec'); }); grunt.registerTask('nuget-coincidence', 'Register NuGet-Coincidence', function () { createNuGetPackage.call(this, 'nuget/RxJS-Coincidence/RxJS-Coincidence.nuspec'); }); grunt.registerTask('nuget-experimental', 'Register NuGet-Experimental', function () { createNuGetPackage.call(this, 'nuget/RxJS-Experimental/RxJS-Experimental.nuspec'); }); grunt.registerTask('nuget-joinpatterns', 'Register NuGet-JoinPatterns', function () { createNuGetPackage.call(this, 'nuget/RxJS-JoinPatterns/RxJS-JoinPatterns.nuspec'); }); grunt.registerTask('nuget-lite', 'Register NuGet-Lite', function () { createNuGetPackage.call(this, 'nuget/RxJS-Lite/RxJS-Lite.nuspec'); }); grunt.registerTask('nuget-main', 'Register NuGet-Main', function () { createNuGetPackage.call(this, 'nuget/RxJS-Main/RxJS-Main.nuspec'); }); grunt.registerTask('nuget-testing', 'Register NuGet-Testing', function () { createNuGetPackage.call(this, 'nuget/RxJS-Testing/RxJS-Testing.nuspec'); }); grunt.registerTask('nuget-time', 'Register NuGet-Time', function () { createNuGetPackage.call(this, 'nuget/RxJS-Time/RxJS-Time.nuspec'); }); grunt.registerTask('nuget-virtualtime', 'Register NuGet-VirtualTime', function () { createNuGetPackage.call(this, 'nuget/RxJS-VirtualTime/RxJS-VirtualTime.nuspec'); }); grunt.registerTask('nuget', [ 'nuget-complete', 'nuget-aggregates', 'nuget-all', 'nuget-async', 'nuget-backpressure', 'nuget-binding', 'nuget-coincidence', 'nuget-experimental', 'nuget-joinpatterns', 'nuget-lite', 'nuget-main', 'nuget-testing', 'nuget-time', 'nuget-virtualtime' ]); grunt.registerTask('rebuild-ts', 'Rebuild typescript declarations', function() { var path = require('path'); var fs = require('fs'); var cache = {}; var dependencies = {}; var concatItems = grunt.config.get('concat'); var allLoadedFiles = {}; function loadFile(tsFile) { if (cache[tsFile]) { return; } var dependencyRegex = /\/\/\/ /g; var c; //, count = 0; var source = grunt.file.read(tsFile); // source with tests var s = source.match(/module Rx \{([\s\S]*)\}[\s\S]*\(function\s*\(\)\s*\{[\s\S]*\}\)/); if (s && s[1]) { c = cache[tsFile] = s[1]; } if (!s) { // source without tests s = source.match(/module Rx \{([\s\S]*)\}/); if (s && s[1]) { c = cache[tsFile] = s[1]; } } var deps = dependencies[tsFile] = []; var result; while (result = dependencyRegex.exec(source)) { var dep = path.resolve(__dirname, path.dirname(tsFile), result[1]) .substr(__dirname.length + 1) .replace(/\\/g, '/'); if (tsFile.indexOf('/testscheduler.ts') > -1 && dep.indexOf('virtualtimescheduler.ts') > -1) { continue; } deps.push(dep); loadFile(dep); } return c; } function addLoadedFile(concatKey, tsFile) { if (loadedFiles[tsFile]) { return; } if (!(concatKey === 'all' || concatKey === 'main' || concatKey === 'lite' || concatKey === 'core')) { if ((concatKey.indexOf('lite') === 0 && allLoadedFiles['lite'][tsFile]) || (concatKey.indexOf('lite') !== 0 && allLoadedFiles['main'][tsFile]) || allLoadedFiles['core'][tsFile]) { loadedFiles[tsFile] = true; return; } } if (!(tsFile.match(/\/toset\.ts$/) || tsFile.match(/\/tomap\.ts$/))) { output.push(cache[tsFile]); } es6Output.push(cache[tsFile]); loadedFiles[tsFile] = true; } function addFileContent(concatKey, tsFile) { if (loadedFiles[tsFile]) { return; } var deps = dependencies[tsFile]; for (var k = 0; k < deps.length; k++) { addLoadedFile(concatKey, deps[k]); addFileContent(concatKey, deps[k]); } addLoadedFile(concatKey, tsFile); } loadFile('ts/core/es5.ts'); loadFile('ts/core/es6.ts'); var items = []; for (var key in concatItems) { if (key.indexOf('-compat') > -1) { continue; } if (key === 'lite' || key === 'main' || key === 'core') { items.unshift(key); } else { items.push(key); } } for (var key = 0; key < items.length; key++) { var concatKey = items[key]; if (!allLoadedFiles[concatKey]) allLoadedFiles[concatKey] = {}; var loadedFiles = allLoadedFiles[concatKey]; var output = []; var es6Output = []; var value = concatItems[concatKey]; var src = value.src; var dest = value.dest; var dist = false; if (dest.indexOf('dist/') === 0) { dist = dest.match(/dist\/(.*?)\.js/)[1]; dest = dest.replace(/dist\/(.*?)\.js/, 'ts/$1.d.ts'); } else if (dest.indexOf('modules/') === 0) { continue; } else { throw new Error("not sure how to handle " + dest); } for (var i = 0; i < src.length; i++) { var file = src[i]; var tsFile = file .replace(/src\/(.*?).js/, 'ts/$1.ts') // Is this right 100% of the time? .replace('perf/operators', 'linq/observable'); if (cache[tsFile] || fs.existsSync(tsFile)) { if (!cache[tsFile]) { loadFile(tsFile); } if (tsFile.indexOf('/es5') === -1 || tsFile.indexOf('/es6') === -1) { addFileContent(concatKey, tsFile); } } else { var valid = ['/headers/', '/longstacktraces/', '/internal/', '/autodetachobserver', '/subjects/innersubscription', '/perf/observablebase', 'linq/enumerable/while', '.compat.', 'linq/observable/_', '/linq/observable/fromarrayobservable', '/joins/', '/linq/observable/flatmapbase', '/disposables/scheduleddisposable', '/concurrency/catchscheduler', '/core/observeonobserver', '/testing/mockpromise', '/testing/hotobservable', '/testing/coldobservable']; var validResult = false; for (var z = 0; z < valid.length; z++) { if (tsFile.indexOf(valid[z]) !== -1) { validResult = true; break; } } } } var writeOut = function(dest, output, es6) { var outputString = 'declare module Rx {\n' + output.join('') + '\n}\n'; if (concatKey === 'all' || concatKey === 'main' || concatKey === 'lite' || concatKey === 'core') { outputString += '\ndeclare module "rx" { export = Rx; }\n'; } if (dist && concatKey !== 'core' && concatKey !== 'main') { outputString += 'declare module "'+dist+'" { export = Rx; }'; } outputString = outputString + '\n'; grunt.file.write(dest, outputString); }; if (concatKey === 'all' || concatKey === 'main' || concatKey === 'lite' || concatKey === 'core') { output.unshift(cache['ts/core/es5.ts']); es6Output.unshift(cache['ts/core/es6.ts']); } writeOut(dest, output); writeOut(dest.replace(/.d.ts$/, '.es6.d.ts'), es6Output, true); } grunt.file.write('ts/iterable.es6.d.ts', grunt.file.read('ts/core/es6-iterable.d.ts')); grunt.file.write('ts/es6-promise.es6.d.ts', grunt.file.read('ts/core/es6-promise.d.ts')); }); grunt.registerTask('concat-min', [ 'concat:core', 'concat:core-binding', 'concat:core-testing', 'concat:all', 'concat:all-compat', 'concat:main', 'concat:main-compat', 'concat:aggregates', 'concat:aggregates-lite', 'concat:aggregates-lite-compat', 'concat:async', 'concat:async-compat', 'concat:async-lite', 'concat:async-lite-compat', 'concat:backpressure', 'concat:backpressure-lite', 'concat:backpressure-lite-compat', 'concat:binding', 'concat:coincidence', 'concat:coincidence-lite', 'concat:coincidence-lite-compat', 'concat:experimental', 'concat:experimental-lite', 'concat:experimental-lite-compat', 'concat:joinpatterns', 'concat:joinpatterns-lite', 'concat:joinpatterns-lite-compat', 'concat:lite', 'concat:lite-compat', 'concat:lite-extras', 'concat:lite-extras-compat', 'concat:time', 'concat:time-lite', 'concat:time-lite-compat', 'concat:testing', 'concat:testing-lite', 'concat:testing-lite-compat', 'concat:virtualtime', 'concat:virtualtime-lite', 'concat:virtualtime-lite-compat', 'concat:sorting', 'uglify:core', 'uglify:core-binding', 'uglify:core-testing', 'uglify:all', 'uglify:all-compat', 'uglify:main', 'uglify:main-compat', 'uglify:aggregates', 'uglify:aggregates-lite', 'uglify:aggregates-lite-compat', 'uglify:async', 'uglify:async-compat', 'uglify:async-lite', 'uglify:async-lite-compat', 'uglify:backpressure', 'uglify:backpressure-lite', 'uglify:backpressure-lite-compat', 'uglify:binding', 'uglify:coincidence', 'uglify:coincidence-lite', 'uglify:coincidence-lite-compat', 'uglify:experimental', 'uglify:experimental-lite', 'uglify:experimental-lite-compat', 'uglify:joinpatterns', 'uglify:joinpatterns-lite', 'uglify:joinpatterns-lite-compat', 'uglify:lite', 'uglify:lite-compat', 'uglify:lite-extras', 'uglify:lite-extras-compat', 'uglify:time', 'uglify:time-lite', 'uglify:time-lite-compat', 'uglify:testing', 'uglify:testing-lite', 'uglify:testing-lite-compat', 'uglify:virtualtime', 'uglify:virtualtime-lite', 'uglify:virtualtime-lite-compat', 'uglify:sorting', 'copy:lite', 'copy:lite-compat', 'copy:lite-extras', 'copy:lite-extras-compat', 'copy:core', 'copy:core-binding', 'copy:core-testing' ]); // Default task grunt.registerTask('default', [ 'concat:core', 'concat:core-binding', 'concat:core-testing', 'concat:all', 'concat:all-compat', 'concat:main', 'concat:main-compat', 'concat:aggregates', 'concat:aggregates-lite', 'concat:aggregates-lite-compat', 'concat:async', 'concat:async-compat', 'concat:async-lite', 'concat:async-lite-compat', 'concat:backpressure', 'concat:backpressure-lite', 'concat:backpressure-lite-compat', 'concat:binding', 'concat:coincidence', 'concat:coincidence-lite', 'concat:coincidence-lite-compat', 'concat:experimental', 'concat:experimental-lite', 'concat:experimental-lite-compat', 'concat:joinpatterns', 'concat:joinpatterns-lite', 'concat:joinpatterns-lite-compat', 'concat:lite', 'concat:lite-compat', 'concat:lite-extras', 'concat:lite-extras-compat', 'concat:time', 'concat:time-lite', 'concat:time-lite-compat', 'concat:testing', 'concat:testing-lite', 'concat:testing-lite-compat', 'concat:virtualtime', 'concat:virtualtime-lite', 'concat:virtualtime-lite-compat', 'concat:sorting', 'uglify:core', 'uglify:core-binding', 'uglify:core-testing', 'uglify:all', 'uglify:all-compat', 'uglify:main', 'uglify:main-compat', 'uglify:aggregates', 'uglify:aggregates-lite', 'uglify:aggregates-lite-compat', 'uglify:async', 'uglify:async-compat', 'uglify:async-lite', 'uglify:async-lite-compat', 'uglify:backpressure', 'uglify:backpressure-lite', 'uglify:backpressure-lite-compat', 'uglify:binding', 'uglify:coincidence', 'uglify:coincidence-lite', 'uglify:coincidence-lite-compat', 'uglify:experimental', 'uglify:experimental-lite', 'uglify:experimental-lite-compat', 'uglify:joinpatterns', 'uglify:joinpatterns-lite', 'uglify:joinpatterns-lite-compat', 'uglify:lite', 'uglify:lite-compat', 'uglify:lite-extras', 'uglify:lite-extras-compat', 'uglify:time', 'uglify:time-lite', 'uglify:time-lite-compat', 'uglify:testing', 'uglify:testing-lite', 'uglify:testing-lite-compat', 'uglify:virtualtime', 'uglify:virtualtime-lite', 'uglify:virtualtime-lite-compat', 'uglify:sorting', 'copy:lite', 'copy:lite-compat', 'copy:lite-extras', 'copy:lite-extras-compat', 'copy:core', 'copy:core-binding', 'copy:core-testing', 'qunit', 'rebuild-ts' ]); }; RxJS-4.1.0/authors.txt000066400000000000000000000001641266736161100146020ustar00rootroot00000000000000Matthew Podwysocki Bart de Smet Erik Meijer RxJS-4.1.0/bower.json000066400000000000000000000005501266736161100143640ustar00rootroot00000000000000{ "name": "rxjs", "main": "dist/rx.all.js", "repository": { "type": "git", "url": "https://github.com/Reactive-Extensions/RxJS.git" }, "license": "Apache-2.0", "ignore": [ ".sh", ".*", "*.bat", "*.md", "*.txt", "*.log", "package.json", "node_modules", "doc", "examples", "src", "tests" ] } RxJS-4.1.0/code-of-conduct.md000066400000000000000000000033411266736161100156470ustar00rootroot00000000000000# Code of Conduct # [_Adapted from the Rust Code of Conduct_](https://github.com/rust-lang/rust/wiki/Note-development-policy#conduct) We are committed to providing a friendly, safe and welcoming environment for all, regardless of gender, sexual orientation, disability, ethnicity, religion, or similar personal characteristic. - On any communication medium, please avoid using overtly sexual nicknames or other nicknames that might detract from a friendly, safe and welcoming environment for all. - Please be kind and courteous. There's no need to be mean or rude. - Respect that people have differences of opinion and that every design or implementation choice carries a trade-off and numerous costs. There is seldom a right answer. - Please keep unstructured critique to a minimum. If you have solid ideas you want to experiment with, make a fork and see how it works. - We will exclude you from interaction if you insult, demean or harass anyone. That is not welcome behavior. We interpret the term "harassment" as including the definition in the [Citizen Code of Conduct](http://citizencodeofconduct.org/); if you have any lack of clarity about what might be included in that concept, please read their definition. In particular, we don't tolerate behavior that excludes people in socially marginalized groups. - Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one the RxJS team immediately. Whether you're a regular contributor or a newcomer, we care about making this community a safe place for you and we've got your back. - Likewise any spamming, trolling, flaming, baiting or other attention-stealing behavior is not welcome. RxJS-4.1.0/component.json000066400000000000000000000032351266736161100152530ustar00rootroot00000000000000{ "name": "rx", "scripts": [ "dist/rx.aggregates.js", "dist/rx.aggregates.map", "dist/rx.aggregates.min.js", "dist/rx.all.compat.js", "dist/rx.all.compat.map", "dist/rx.all.compat.min.js", "dist/rx.all.js", "dist/rx.all.min.js", "dist/rx.all.map", "dist/rx.async.js", "dist/rx.async.map", "dist/rx.async.min.js", "dist/rx.async.compat.js", "dist/rx.async.compat.map", "dist/rx.async.compat.min.js", "dist/rx.backpressure.js", "dist/rx.backpressure.map", "dist/rx.backpressure.min.js", "dist/rx.backpressure.js", "dist/rx.backpressure.map", "dist/rx.backpressure.min.js", "dist/rx.binding.js", "dist/rx.binding.map", "dist/rx.binding.min.js", "dist/rx.coincidence.js", "dist/rx.coincidence.map", "dist/rx.coincidence.min.js", "dist/rx.js", "dist/rx.map", "dist/rx.min.js", "dist/rx.compat.js", "dist/rx.compat.map", "dist/rx.compat.min.js", "dist/rx.experimental.js", "dist/rx.experimental.map", "dist/rx.experimental.min.js", "dist/rx.joinpatterns.js", "dist/rx.joinpatterns.map", "dist/rx.joinpatterns.min.js", "dist/rx.lite.js", "dist/rx.lite.map", "dist/rx.lite.min.js", "dist/rx.lite.compat.js", "dist/rx.lite.compat.map", "dist/rx.lite.compat.min.js", "dist/rx.lite.extras.js", "dist/rx.lite.extras.map", "dist/rx.lite.extras.min.js", "dist/rx.testing.js", "dist/rx.testing.map", "dist/rx.testing.min.js", "dist/rx.time.js", "dist/rx.time.map", "dist/rx.time.min.js", "dist/rx.virtualtime.js", "dist/rx.virtualtime.map", "dist/rx.virtualtime.min.js" ] } RxJS-4.1.0/contributing.md000066400000000000000000000254361266736161100154160ustar00rootroot00000000000000# Contributing to RxJS # Want to contribute to the Reactive Extensions for JavaScript (RxJS)? There are many ways of helping whether contributing code, documentation, examples, podcasts, videos and presentations. # Get Involved! In [the issue tracker](https://github.com/Reactive-Extensions/RxJS/issues), bugs can only be assigned to people who have commit access. Also, we aspire to make as many bugs as possible "owned" by assigning them to a core Rx contributor. Therefore, just because a bug is assigned doesn't mean it's being actively worked on. We (the core contributors) are all busy, and welcome help from the community. If you see a bug you'd like to work on that's assigned but appears to be dormant, communicate with the bug's owner with an @-reply in a comment on the issue page. If you see a bug you'd like to work on that's unassigned, it's fair game: comment to say you'd like to work on it so that we know it's getting attention. # Pull Requests To make a pull request, you will need a GitHub account; if you're unclear on this process, see GitHub's documentation on [forking](https://help.github.com/articles/fork-a-repo/) and [pull requests](https://help.github.com/articles/using-pull-requests). Pull requests should be targeted at RxJS's master branch. Before pushing to your Github repo and issuing the pull request, please do two things: 1. Rebase your local changes against the master branch. Resolve any conflicts that arise. 2. Run the full RxJS test suite by running `grunt` in the root of the repository. Pull requests will be treated as "review requests", and we will give feedback we expect to see corrected on style and substance before pulling. Changes contributed via pull request should focus on a single issue at a time, like any other. We will not look kindly on pull-requests that try to "sneak" unrelated changes in. Note for bug fixes, regression tests should be included, denoted by Issue Number so that we have full traceability. # What Are We Looking For? For documentation, we are looking for the following: - API Documentation that is missing or out of date - "How Do I?" examples - Comparison to other libraries - Comparison to Promises - Introduction material - Tutorials For coding, we have strict standards that must be adhere to when working on RxJS. In order for us to accept pull requests, they must abide by the following: - [Coding Standard](#coding-standard) - [Tests](#tests) - [Documentation](#documentation) ## Coding Standard For RxJS, we follow the [Google JavaScript Style Guide](http://google-styleguide.googlecode.com/svn/trunk/javascriptguide.xml) and adhere to it strictly in areas such as documentation using JSDoc. The only exception to extending native prototypes is to polyfill behavior which may not exist in all browsers yet, for example, many of the [Array#extras](http://blogs.msdn.com/b/ie/archive/2010/12/13/ecmascript-5-part-2-array-extras.aspx) are implemented in compatibility builds. We also strictly follow [our design guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines) as well. ### Supporting Multiple Platforms RxJS runs on a number of platforms and supports many styles of programming. RxJS supports [Universal Module Definition (UMD)](https://github.com/umdjs/umd) which allows the library to work in a number of environments such as [Asynchronous Module Definition (AMD)](https://github.com/amdjs/amdjs-api/wiki/AMD), [CommonJS](http://wiki.commonjs.org/wiki/CommonJS), [Node.js](http://nodejs.org), [RingoJS](http://ringojs.org/), [Narwhal](https://github.com/280north/narwhal), the browser and other environments such as [Windows Script Host (WSH)](http://msdn.microsoft.com/en-us/library/9bbdkx3k.aspx) and embedded devices such as [Tessel](http://tessel.io). RxJS is committed to using the latest JavaScript standards as they start to arrive, for example, supporting generators, Maps, Sets, and Observable versions of new Array methods. We also are committed to supporting legacy code as well through compatibility builds, even supporting browsers back to IE6, Firefox 3, and older versions of Node.js. Should behavior not exist in those platforms, that behavior must be polyfilled, and made available in `*.compat.js` files only. For example, we have `rx.lite.js` which supports modern browsers greater than or equal to IE9, and `rx.lite.compat.js` for older browsers before IE9 and modern Firefox builds. In special cases such as event handling is different, we must provide a mainstream version of the file as well as a compat file, the latter which is included in the compat file. ### Implementing Custom Operators We welcome custom operators to RxJS if they make sense in the core RxJS, as opposed to belonging in user land. There are a number of rules that must be adhered to when implementing a custom operator including: - Prefer composition over implementing a totally new operator from scratch - If the operator introduces any notion of concurrency, then a scheduler must introduced. Usage of concurrency primitives such as `setTimeout`, `setInterval`, etc are forbidden. This is to ensure easy testability. - The scheduler must be optional with the appropriate default picked - `Rx.Scheduler.immediate` for any immediate blocking operations - `Rx.Scheduler.currentThread` for any immediate blocking operators that require re-entrant behavior such as recursive scheduling. - `Rx.Scheduler.timeout` for any operator that has a notion of time To make this concrete, let's implement a custom operator such as an implementation of `_.reject` from [Underscore.js](http://underscorejs.org/) / [Lo-Dash](http://lodash.com/). ```js /** * The opposite of _.filter this method returns the elements of a collection that the callback does **not** return truthy for. * @param {Function} [callback] The function called per iteration. * @param {Any} [thisArg] The this binding of callback. * @returns {Observable} An Observable sequence which contains items that the callback does not return truthy for. */ Rx.Observable.prototype.reject = function (callback, thisArg) { callback || (callback = Rx.helpers.identity); var source = this; return new Rx.AnonymousObservable(function (observer) { var i = 0; return source.subscribe( function (x) { var noYield = true; try { noYield = callback.call(thisArg, x, i++, source); } catch (e) { observer.onError(e); return; } if (!noYield) { observer.onNext(x); } }, observer.onError.bind(observer), observer.onCompleted.bind(observer) ); }); }; ``` Of course, we could have implemented this using composition as well, such as using `Rx.Observable.prototype.filter`. ```js /** * The opposite of _.filter this method returns the elements of a collection that the callback does **not** return truthy for. * @param {Function} [callback] The function called per iteration. * @param {Any} [thisArg] The this binding of callback. * @returns {Observable} An Observable sequence which contains items that the callback does not return truthy for. */ Rx.Observable.prototype.reject = function (callback, thisArg) { callback || (callback = Rx.helpers.identity); return this.filter(function (x, i, o) { return !callback.call(thisArg, x, i o); }); }; ``` To show an operator that introduces a level of concurrency, let's implement a custom operator such as an implementation of `_.pairs` from [Underscore.js](http://underscorejs.org/) / [Lo-Dash](http://lodash.com/). Note that since this requires recursion to implement properly, we'll use the `Rx.Scheduler.currentThread` scheduler. ```js var keysFunction = Object.keys || someKeysPolyfill; /** * Creates an Observable with an of an object’s key-value pairs. * @param {Object} obj The object to inspect. * @returns {Observable} An Observable with an of an object’s key-value pairs. */ Rx.Observable.pairs = function (obj, scheduler) { scheduler || (scheduler = Rx.Scheduler.currentThread); return new Rx.AnonymousObservable(function (observer) { var keys = keysFunction(object), i = 0, len = keys.length; return scheduler.scheduleRecursive(function (self) { if (i < len) { var key = keys[i++], value = obj[key]; observer.onNext([key, value]); self(); } else { observer.onCompleted(); } }); }); }; ``` Note that all operators must have the documentation and must be split out into its own file. This allows us to be able to put it in different files, or make it available in custom builds. ## Tests When a new operator is written for RxJS, in order to accepted, must be accompanied by tests. RxJS currently uses [QUnit](http://qunitjs.com/) as a straight forward way to test our code. These tests are automatically executed by our [Grunt](http://gruntjs.com/) setup to concatenate files, minimize, create source maps, and finally run all the tests in the [tests folder](https://github.com/Reactive-Extensions/RxJS/tree/master/tests). Each file that we produce, for example, `rx.js` has an accompanying test file such as `rx.html`, which includes tests for all operators included in that file. Each operator under test must be in its own file to cover the following cases: - Never - Empty - Single/Multiple Values - Error in the sequence - Never ending sequences - Early disposal in sequences If the operator has a callback, then it must cover the following cases: - Success with all values in the callback - Success with the context, if any allowed in the operator signature - If an error is thrown To get a good feeling on what kind of rigor is required for testing, check out the following examples: - [`concatMap`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/concatmap.js) - [`from`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/from.js) ## Documentation Documentation is also a must, as all external operators and types must be documented and put in the [API Folder](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api). Each operator on an Observable must have its own file in the [Operators Folder](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators). For operators, they must be linked from the [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) API document. In addition, each operator must be listed in which file it belongs in the [Libraries Folder](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/libraries). The standard format of operators must be such as the [`of`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/of.md) operator which includes: - File Location - Method signature - Method description - List of Arguments - Return type (if there is one) - An example - File Distribution(s) - NuGet Distribution - NPM Distribution - Unit Tests RxJS-4.1.0/doc/000077500000000000000000000000001266736161100131205ustar00rootroot00000000000000RxJS-4.1.0/doc/api/000077500000000000000000000000001266736161100136715ustar00rootroot00000000000000RxJS-4.1.0/doc/api/config/000077500000000000000000000000001266736161100151365ustar00rootroot00000000000000RxJS-4.1.0/doc/api/config/readme.md000066400000000000000000000043521266736161100167210ustar00rootroot00000000000000# Reactive Extensions Configuration # Configuration information for the Reactive Extensions for JavaScript ## Documentation ## - [`Rx.config.Promise`](#rxconfigpromise) - [`Rx.config.useNativeEvents`](#rxconfigusenativeevents) * * * ### `Rx.config.Promise` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] Sets the default Promise type to be used when the [`toPromise`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/topromise.md) method is called. Note that the Promise implementation must conform to the ES6 specification. Some of those supported libraries are [Q](https://github.com/kriskowal/q), [RSVP](https://github.com/tildeio/rsvp.js), [when.js](https://github.com/cujojs/when) among others. If not specified, this defaults to the native ES6 Promise, if available, else will throw an error. #### Example ```js Rx.config.Promise = RSVP.Promise; var p = Rx.Observable.just(1).toPromise() .then(function (value) { console.log('Value: %s', s); }); // => Value: 1 ``` * * * ### `Rx.config.useNativeEvents` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromevent.js "View in source") [Ⓣ][1] Determines whether the [`fromEvent`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromevent.md) method uses native DOM events only and disregards the referenced supported libraries such as [jQuery](http://jquery.com/), [Zepto.js](http://zeptojs.com/), [AngularJS](https://angularjs.org/), [Ember.js](http://emberjs.com/) and [Backbone.js](http://backbonejs.org) #### Example For example, we could have jQuery referenced as part of our project, however, we only want native DOM events. ```html ``` We can do this by setting the `Rx.config.useNativeEvents` flag to `true`. ```js Rx.config.useNativeEvents = true; Rx.Observable.fromEvent(document, 'mousemove') .subscribe(function (e) { console.log('ClientX: %d, ClientY: %d', e.clientX, e.clientY); }); ``` * * * RxJS-4.1.0/doc/api/core/000077500000000000000000000000001266736161100146215ustar00rootroot00000000000000RxJS-4.1.0/doc/api/core/notification.md000066400000000000000000000167351266736161100176450ustar00rootroot00000000000000# Notification object # Represents a notification to an observer. ## Usage ## This can be dematerialized into an Observable. ```js var source = Rx.Observable .of( Rx.Notification.createOnNext(42), Rx.Notification.createOnCompleted() ) .dematerialize(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`notification.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js) ## `Notification Methods` - [`createOnCompleted`](#rxnotificationcreateoncompleted) - [`createOnError`](#rxnotificationcreateonerrorexception) - [`createOnNext`](#rxnotificationcreateonnextvalue) ## `Notification Instance Methods` - [`accept`](#rxnotificationprototypeacceptobserver--onnext-onerror-oncompleted) - [`toObservable`](#rxnotificationprototypetoobservablescheduler) ## `Notification Properties` - [`error`](#error) - [`kind`](#kind) - [`value`](#value) ## _Notification Methods_ ## ### `Rx.Notification.createOnCompleted()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js#L113-L134 "View in source") Creates an object that represents an OnCompleted notification to an observer. #### Returns `Notification` - The OnCompleted notification. #### Example ```js var source = Rx.Observable .of(Rx.Notification.createOnCompleted() ) .dematerialize(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Completed ``` *** ### `Rx.Notification.createOnError(exception)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js#L85-L107 "View in source") Creates an object that represents an OnError notification to an observer. ### Arguments 1. `error`: `Any` - The exception contained in the notification. #### Returns `Notification` - The OnError notification containing the exception. #### Example ```js var source = Rx.Observable .of(Rx.Notification.createOnError(new Error('woops')) ) .dematerialize(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Error: Error: woops ``` ### Location - rx.js *** ### `Rx.Notification.createOnNext(value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js#L56-L178 "View in source") Creates an object that represents an OnNext notification to an observer. ### Arguments 1. `value`: `Any` - The value contained in the notification. #### Returns `Notification`: The onNext notification containing the value. #### Example ```js var source = Rx.Observable .of( Rx.Notification.createOnNext(42), Rx.Notification.createOnCompleted() ) .dematerialize(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` *** ## _Notification Instance Methods_ ## ### `Rx.Notification.prototype.accept(observer | onNext, onError, onCompleted)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js "View in source") Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result or the individual functions given. ### Arguments 1. `[observer]`: `Observer` Observer to invoke the notification on. OR 1. `onNext`: `Function` - Function to invoke for an `onNext` notification. 2. `onError`: `Function` - Function to invoke for an `onError` notification. 3. `onCompleted`: `Function` - Function to invoke for an `onCompleted` notification. #### Returns `Any`: Result produced by the observation. #### Example ```js /* Using an observer */ var observer = Rx.Observer.create(function (x) { return x; }); var notification = Rx.Notification.createOnNext(42); console.log(notification.accept(observer)); // => 42 /* Using a function */ var notification = Rx.Notification.createOnNext(42); console.log(notification.accept(function (x) { return x; })) // => 42 ``` *** ### `Rx.Notification.prototype.toObservable([scheduler])` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js "View in source") Returns an observable sequence with a single notification. ### Arguments 1. `[scheduler = Rx.Scheduler.immediate]` `Scheduler`: Scheduler to send out the notification calls on. #### Returns `Observable`: The observable sequence that surfaces the behavior of the notification upon subscription. #### Example ```js /* Without a scheduler */ var source = Rx.Notification.createOnNext(42) .toObservable(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed /* With a scheduler */ var source = Rx.Notification.createOnError(new Error('error!')) .toObservable(Rx.Scheduler.default); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Error: Error: error! ``` *** ## _Notification Properties_ ## ### `error` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js "View in source") Gets the exception from the OnError notification. #### Returns `Any`: The Error from the `onError` notification. #### Example ```js var notification = Rx.Notification.createOnError(new Error('invalid')); console.log(notification.error); // => Error: invalid ``` *** ### `kind` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js "View in source") Gets the kind from the notification which denotes 'N' for OnNext, 'E' for OnError and 'C' for OnCompleted. #### Returns `String`: The kind from the notification which denotes 'N' for OnNext, 'E' for OnError and 'C' for OnCompleted. #### Example ```js var notification = Rx.Notification.createOnCompleted(); console.log(notification.kind); // => C ``` *** ### `value` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/notification.js "View in source") Gets the value from the `onNext` notification. #### Returns `Any`: The value from the `onNext` notification. #### Example ```js var notification = Rx.Notification.createOnNext(42); console.log(notification.value); // => 42 ``` *** RxJS-4.1.0/doc/api/core/observable.md000066400000000000000000000175111266736161100172740ustar00rootroot00000000000000# Observable object # The Observable object represents a push based collection. The Observer and Observable interfaces provide a generalized mechanism for push-based notification, also known as the observer design pattern. The Observable object represents the object that sends notifications (the provider); the Observer object represents the class that receives them (the observer). ## `Observable Methods` - [`amb`](operators/amb.md) - [`case`](operators/case.md) - [`catch`](operators/catch.md) - [`combineLatest`](operators/combinelatest.md) - [`concat`](operators/concat.md) - [`create`](operators/create.md) - [`defer`](operators/defer.md) - [`empty`](operators/empty.md) - [`for`](operators/for.md) - [`forkJoin`](operators/forkjoin.md) - [`from`](operators/from.md) - [`fromCallback`](operators/fromcallback.md) - [`fromEvent`](operators/fromevent.md) - [`fromEventPattern`](operators/fromeventpattern.md) - [`fromNodeCallback`](operators/fromnodecallback.md) - [`fromPromise`](operators/frompromise.md) - [`generate`](operators/generate.md) - [`generateWithAbsoluteTime`](operators/generatewithabsolutetime.md) - [`generateWithRelativeTime`](operators/generatewithrelativetime.md) - [`if`](operators/if.md) - [`interval`](operators/interval.md) - [`just`](operators/return.md) - [`merge`](operators/merge.md) - [`mergeDelayError`](operators/mergedelayerror.md) - [`never`](operators/never.md) - [`of`](operators/of.md) - [`ofWithScheduler`](operators/ofwithscheduler.md) - [`onErrorResumeNext`](operators/onerrorresumenext.md) - [`pairs`](operators/pairs.md) - [`range`](operators/range.md) - [`repeat`](operators/repeat.md) - [`return`](operators/return.md) - [`spawn`](operators/spawn.md) - [`start`](operators/start.md) - [`startAsync`](operators/startasync.md) - [`throw`](operators/throw.md) - [`timer`](operators/timer.md) - [`toAsync`](operators/toasync.md) - [`using`](operators/using.md) - [`when`](operators/when.md) - [`while`](operators/while.md) - [`wrap`](operators/wrap.md) - [`zip`](operators/zip.md) ## `Observable Instance Methods` - [`amb`](operators/ambproto.md) - [`and`](operators/and.md) - [`asObservable`](operators/asobservable.md) - [`average`](operators/average.md) - [`buffer`](operators/buffer.md) - [`bufferWithCount`](operators/bufferwithcount.md) - [`bufferWithTime`](operators/bufferwithtime.md) - [`bufferWithTimeOrCount`](operators/bufferwithtimeorcount.md) - [`catch`](operators/catchproto.md) - [`combineLatest`](operators/combinelatestproto.md) - [`concat`](operators/concatproto.md) - [`concatAll`](operators/concatall.md) - [`concatMap`](operators/concatmap.md) - [`concatMapObserver`](operators/concatmapobserver.md) - [`connect`](operators/connect.md) - [`controlled`](operators/controlled.md) - [`count`](operators/count.md) - [`debounce`](operators/debounce.md) - [`defaultIfEmpty`](operators/defaultifempty.md) - [`delay`](operators/delay.md) - [`delaySubscription`](operators/delaysubscription.md) - [`dematerialize`](operators/dematerialize.md) - [`distinct`](operators/distinct.md) - [`distinctUntilChanged`](operators/distinctuntilchanged.md) - [`do`](operators/do.md) - [`doOnCompleted`](operators/dooncompleted.md) - [`doOnError`](operators/doonerror.md) - [`doOnNext`](operators/doonnext.md) - [`doWhile`](operators/dowhile.md) - [`elementAt`](operators/elementat.md) - [`every`](operators/every.md) - [`expand`](operators/expand.md) - [`extend`](operators/manyselect.md) - [`filter`](operators/where.md) - [`finally`](operators/finally.md) - [`find`](operators/find.md) - [`findIndex`](operators/findindex.md) - [`first`](operators/first.md) - [`flatMap`](operators/selectmany.md) - [`flatMapFirst`](operators/flatmapfirst.md) - [`flatMapLatest`](operators/flatmaplatest.md) - [`flatMapObserver`](operators/flatmapobserver.md) - [`flatMapWithMaxConcurrent`](operators/flatmapwithmaxconcurrent.md) - [`forkJoin`](operators/forkjoinproto.md) - [`groupBy`](operators/groupby.md) - [`groupByUntil`](operators/groupbyuntil.md) - [`groupJoin`](operators/groupjoin.md) - [`ignoreElements`](operators/ignoreelements.md) - [`includes`](operators/includes.md) - [`indexOf`](operators/indexof.md) - [`isEmpty`](operators/isempty.md) - [`join`](operators/join.md) - [`jortSort`](operators/jortsort.md) - [`jortSortUntil`](operators/jortsortuntil.md) - [`last`](operators/last.md) - [`lastIndexOf`](operators/lastindexof.md) - [`let`](operators/let.md) - [`manySelect`](operators/manyselect.md) - [`map`](operators/select.md) - [`max`](operators/max.md) - [`maxBy`](operators/maxby.md) - [`merge`](operators/mergeproto.md) - [`mergeAll`](operators/mergeall.md) - [`min`](operators/min.md) - [`minBy`](operators/minby.md) - [`multicast`](operators/multicast.md) - [`observeOn`](operators/observeon.md) - [`onErrorResumeNext`](operators/onerrorresumenextproto.md) - [`pairwise`](operators/pairwise.md) - [`partition`](operators/partition.md) - [`pausable`](operators/pausable.md) - [`pausableBuffered`](operators/pausablebuffered.md) - [`pluck`](operators/pluck.md) - [`publish`](operators/publish.md) - [`publishLast`](operators/publishlast.md) - [`publishValue`](operators/publishvalue.md) - [`reduce`](operators/reduce.md) - [`refCount`](operators/refcount.md) - [`repeat`](operators/repeatproto.md) - [`repeatWhen`](operators/repeatwhen.md) - [`replay`](operators/replay.md) - [`retry`](operators/retry.md) - [`retryWhen`](operators/retrywhen.md) - [`sample`](operators/sample.md) - [`scan`](operators/scan.md) - [`select`](operators/select.md) - [`selectConcat`](operators/concatmap.md) - [`selectConcatObserver`](operators/concatmapobserver.md) - [`selectMany`](operators/selectmany.md) - [`selectManyObserver`](operators/flatmapobserver.md) - [`sequenceEqual`](operators/sequenceequal.md) - [`share`](operators/share.md) - [`shareReplay`](operators/sharereplay.md) - [`shareValue`](operators/sharevalue.md) - [`single`](operators/single.md) - [`singleInstance`](operators/singleinstance.md) - [`skip`](operators/skip.md) - [`skipLast`](operators/skiplast.md) - [`skipLastWithTime`](operators/skiplastwithtime.md) - [`skipUntil`](operators/skipuntil.md) - [`skipUntilWithTime`](operators/skipuntilwithtime.md) - [`skipWhile`](operators/skipwhile.md) - [`slice`](operators/slice.md) - [`some`](operators/some.md) - [`startWith`](operators/startwith.md) - [`subscribe | forEach`](operators/subscribe.md) - [`subscribeOn`](operators/subscribeon.md) - [`subscribeOnCompleted`](operators/subscribeoncompleted.md) - [`subscribeOnError`](operators/subscribeonerror.md) - [`subscribeOnNext`](operators/subscribeonnext.md) - [`sum`](operators/sum.md) - [`switch | switchLatest`](operators/switch.md) - [`switchFirst`](operators/switchfirst.md) - [`take`](operators/take.md) - [`takeLast`](operators/takelast.md) - [`takeLastBuffer`](operators/takelastbuffer.md) - [`takeLastBufferWithTime`](operators/takelastbufferwithtime.md) - [`takeLastWithTime`](operators/takelastwithtime.md) - [`takeUntil`](operators/takeuntil.md) - [`takeUntilWithTime`](operators/takeuntilwithtime.md) - [`takeWhile`](operators/takewhile.md) - [`tap`](operators/do.md) - [`tapOnCompleted`](operators/dooncompleted.md) - [`tapOnError`](operators/doonerror.md) - [`tapOnNext`](operators/doonnext.md) - [`throttle`](operators/throttle.md) - [`timeInterval`](operators/timeinterval.md) - [`timeout`](operators/timeout.md) - [`timeoutWithSelector`](operators/timeoutwithselector.md) - [`timestamp`](operators/timestamp.md) - [`toArray`](operators/toarray.md) - [`toMap`](operators/tomap.md) - [`toPromise`](operators/topromise.md) - [`toSet`](operators/toset.md) - [`transduce`](operators/transduce.md) - [`where`](operators/where.md) - [`window`](operators/window.md) - [`windowWithCount`](operators/windowwithcount.md) - [`windowWithTime`](operators/windowwithtime.md) - [`windowWithTimeOrCount`](operators/windowwithtimeorcount.md) - [`withLatestFrom`](operators/withlatestfrom.md) - [`zip`](operators/zipproto.md) - [`zipIterable`](operators/zipiterable.md) RxJS-4.1.0/doc/api/core/observer.md000066400000000000000000000226501266736161100167770ustar00rootroot00000000000000# Observer object # The Observer object provides support for push-style iteration over an observable sequence. The Observer and Objects interfaces provide a generalized mechanism for push-based notification, also known as the observer design pattern. The Observable object represents the object that sends notifications (the provider); the Observer object represents the class that receives them (the observer). ## `Observer Methods` - [`create`](#rxobservercreateonnext-onerror-oncompleted) - [`fromNotifier`](#rxobserverfromotifierhandler) ## `Observer Instance Methods` - [`asObserver`](#rxobserverprototypeasobserver) - [`checked`](#rxobserverprototypechecked) - [`notifyOn`](#rxobserverprototypenotifyonscheduler) - [`onCompleted`](#rxobserverprototypeoncompleted) - [`onError`](#rxobserverprototypeonerrorerror) - [`onNext`](#rxobserverprototypeonnextvalue) - [`toNotifier`](#rxobserverprototypetonotifier) ## _Observer Methods_ ## ### `Rx.Observer.create([onNext], [onError], [onCompleted])` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1828-L1833 "View in source") [Ⓣ][1] Creates an observer from the specified `onNext`, `onError`, and `onCompleted` actions. #### Arguments 1. `[onNext]` *(Function)*: Observer's onNext action implementation. 2. `[onError]` *(Function)*: Observer's onError action implementation. 3. `[onCompleted]` *(Function)*: Observer's onCompleted action implementation. #### Returns *(Observer)*: The observer object implemented using the given actions. #### Example ```js var source = Rx.Observable.return(42); var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); var subscription = source.subscribe(observer); // => Next: 42 // => Completed ``` ### Location - rx.js * * * ### `Rx.Observer.fromNotifier(handler, [thisArg])` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1843-L1851 "View in source") [Ⓣ][1] Creates an observer from a notification callback. #### Arguments 1. `handler` *(Function)*: Function that handles a notification. 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing `handler`. #### Returns *(Observer)*: The observer object that invokes the specified handler using a notification corresponding to each message it receives. #### Example ```js function handler(n) { // Handle next calls if (n.kind === 'N') { console.log('Next: ' + n.value); } // Handle error calls if (n.kind === 'E') { console.log('Error: ' + n.exception); } // Handle completed if (n.kind === 'C') { console.log('Completed') } } Rx.Observer.fromNotifier(handler).onNext(42); // => Next: 42 Rx.Observer.fromNotifier(handler).onError(new Error('error!!!')); // => Error: Error: error!!! Rx.Observer.fromNotifier(handler).onCompleted(); // => false ``` ### Location - rx.js * * * ## _Observer Instance Methods_ ## ### `Rx.Observer.prototype.asObserver()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1810-L1812 "View in source") [Ⓣ][1] Hides the identity of an observer. #### Returns *(Observer)*: An observer that hides the identity of the specified observer. #### Example ```js function SampleObserver () { Rx.Observer.call(this); this.isStopped = false; } SampleObserver.prototype = Object.create(Rx.Observer.prototype); SampleObserver.prototype.constructor = SampleObserver; Object.defineProperties(SampleObserver.prototype, { onNext: { value: function (x) { if (!this.isStopped) { console.log('Next: ' + x); } } }, onError: { value: function (err) { if (!this.isStopped) { this.isStopped = true; console.log('Error: ' + err); } } }, onCompleted: { value: function () { if (!this.isStopped) { this.isStopped = true; console.log('Completed'); } } } }); var sampleObserver = new SampleObserver(); var source = sampleObserver.asObserver(); console.log(source === sampleObserver); // => false ``` ### Location - rx.js * * * ### `Rx.Observer.prototype.checked()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1819 "View in source") [Ⓣ][1] Checks access to the observer for grammar violations. This includes checking for multiple `onError` or `onCompleted` calls, as well as reentrancy in any of the observer methods. If a violation is detected, an Error is thrown from the offending observer method call. #### Returns *(Observer)*: An observer that checks callbacks invocations against the observer grammar and, if the checks pass, forwards those to the specified observer. #### Example ```js var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); var checked = observer.checked(); checked.onNext(42); // => Next: 42 checked.onCompleted(); // => Completed // Throws Error('Observer completed') checked.onNext(42); ``` ### Location - rx.js * * * ### `Rx.Observer.prototype.notifyOn(scheduler)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1858-1860 "View in source") [Ⓣ][1] Schedules the invocation of observer methods on the given scheduler. #### Arguments 1. `scheduler` *(Scheduler)*: Scheduler to schedule observer messages on. #### Returns *(Observer)*: Observer whose messages are scheduled on the given scheduler. #### Example ```js var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); // Notify on timeout scheduler var timeoutObserver = observer.notifyOn(Rx.Scheduler.timeout); timeoutObserver.onNext(42); // => Next: 42 ``` ### Location - rx.js * * * ### `Rx.Observer.prototype.onCompleted()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1899-L1904 "View in source") [Ⓣ][1] Notifies the observer of the end of the sequence. #### Example ```js var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); observer.onCompleted(); // => Completed ``` ### Location - rx.js * * * ### `Rx.Observer.prototype.onError(error)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1889-L1894 "View in source") [Ⓣ][1] Notifies the observer that an exception has occurred. #### Arguments 1. `error` *(Any)*: The error that has occurred. #### Example ```js var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); observer.onError(new Error('error!!')); // => Error: Error: error!! ``` ### Location - rx.js * * * ### `Rx.Observer.prototype.onNext(value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1881-L1883 "View in source") [Ⓣ][1] Notifies the observer of a new element in the sequence. #### Arguments 1. `value` *(Any)*: Next element in the sequence. #### Example ```js var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); observer.onNext(42); // => Next: 42 ``` ### Location - rx.js * * * ### `Rx.Observer.prototype.toNotifier()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L1801-L1804 "View in source") [Ⓣ][1] Creates a notification callback from an observer. #### Returns *(Function)*: The function that forwards its input notification to the underlying observer. #### Example ```js var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x) }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); var notifier = observer.toNotifier(); // Invoke with onNext notifier(Rx.Notification.createOnNext(42)); // => Next: 42 // Invoke with onCompleted notifier(Rx.Notification.createOnCompleted()); // => Completed ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/core/operators/000077500000000000000000000000001266736161100166375ustar00rootroot00000000000000RxJS-4.1.0/doc/api/core/operators/amb.md000066400000000000000000000045231266736161100177240ustar00rootroot00000000000000### `Rx.Observable.amb(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/amb.js "View in source") Propagates the observable sequence or Promise that reacts first. "amb" stands for [ambiguous](http://blogs.msdn.com/b/jeffva/archive/2009/11/18/amb-materialize-and-dematerialize.aspx). #### Arguments 1. `args` *(Array|arguments)*: Observable sources or Promises competing to react first either as an array or arguments. #### Returns *(`Observable`)*: An observable sequence that surfaces any of the given sequences, whichever reacted first. #### Example ```js /* Using Observable sequences */ var source = Rx.Observable.amb( Rx.Observable.timer(500).select(function () { return 'foo'; }), Rx.Observable.timer(200).select(function () { return 'bar'; }) ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: bar // => Completed /* Using Promises and Observables */ var source = Rx.Observable.amb( RSVP.Promise.resolve('foo'), Rx.Observable.timer(200).select(function () { return 'bar'; }) ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: foo // => Completed ``` ### Location File: - [`/src/core/linq/observable/amb.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/amb.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [`/tests/observable/ambproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/ambproto.js) RxJS-4.1.0/doc/api/core/operators/ambproto.md000066400000000000000000000037611266736161100210130ustar00rootroot00000000000000### `Rx.Observable.prototype.amb(rightSource)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ambproto.js "View in source") Propagates the observable sequence that reacts first. #### Arguments 1. `rightSource` *(`Observable`)*: Second observable sequence. #### Returns *(`Observable`)*: An observable sequence that surfaces either of the given sequences, whichever reacted first. #### Example ```js var first = Rx.Observable.timer(300).map(function () { return 'first'; }); var second = Rx.Observable.timer(500).map(function () { return 'second'; }); var source = first.amb(second); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: first // => Completed ``` ### Location File: - [/src/core/linq/observable/ambproto.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ambproto.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/ambproto.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/ambproto.js) RxJS-4.1.0/doc/api/core/operators/and.md000066400000000000000000000042361266736161100177300ustar00rootroot00000000000000### `Rx.Observable.prototype.and(rightSource)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/and.js "View in source") Propagates the observable sequence that reacts first. #### Arguments 1. `right` *(`Observable`)*: Observable sequence to match with the current sequence. #### Returns *(`Pattern`)*: Pattern object that matches when both observable sequences have an available value. #### Example ```js // Choice of either plan, the first set of timers or second set var source = Rx.Observable.when( Rx.Observable.timer(200).and(Rx.Observable.timer(300)).thenDo(function (x, y) { return 'first'; }), Rx.Observable.timer(400).and(Rx.Observable.timer(500)).thenDo(function (x, y) { return 'second'; }) ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: first // => Next: second // => Completed ``` ### Location File: - [/src/core/linq/observable/and.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/and.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.joinpatterns.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.joinpatterns.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-JoinPatterns`](http://www.nuget.org/packages/RxJS-JoinPatterns) Unit Tests: - [/tests/observable/when.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/when.js) RxJS-4.1.0/doc/api/core/operators/asobservable.md000066400000000000000000000034261266736161100216360ustar00rootroot00000000000000### `Rx.Observable.asObservable()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/asobservable.js "View in source") Hides the identity of an observable sequence. #### Returns *(`Observable`)*: An observable sequence that hides the identity of the source sequence. #### Example ```js // Create subject var subject = new Rx.AsyncSubject(); // Send a value subject.onNext(42); subject.onCompleted(); // Hide its type var source = subject.asObservable(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/asobservable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/asobservable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [`/tests/observable/asobservable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/asobservable.js) RxJS-4.1.0/doc/api/core/operators/average.md000066400000000000000000000050551266736161100206000ustar00rootroot00000000000000### `Rx.Observable.prototype.average([selector], [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/average.js "View in source") Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present. #### Arguments 1. `[selector]` *(`Function`)*: A transform function to apply to each element. 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing `selector`. #### Returns *(`Observable`)*: An observable sequence containing a single element with the average of the sequence of values. #### Example ```js // Without a selector var source = Rx.Observable.range(0, 9).average(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 4 // => Completed // With a selector var arr = [ { value: 1 }, { value: 2 }, { value: 3 } ]; var source = Rx.Observable.from(arr).average(function (x) { return x.value; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 2 // => Completed ``` ### Location File: - [`/src/core/linq/observable/average.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/average.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [rx.aggregates.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/average.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/average.js) RxJS-4.1.0/doc/api/core/operators/buffer.md000066400000000000000000000123571266736161100204420ustar00rootroot00000000000000### `Rx.Observable.prototype.buffer()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js#L572-L585 "View in source") The `buffer` method periodically gathers items emitted by a source Observable into buffers, and emits these buffers as its own emissions. Note that if the source Observable issues an `onError` notification, `buffer` will pass on this notification immediately without first emitting the buffer it is in the process of assembling, even if that buffer contains items that were emitted by the source Observable before it issued the error notification. There are a number of ways with which you can regulate how `buffer` gathers items from the source Observable into buffers: #### With buffer closing selector ```js Rx.Observable.prototype.buffer(bufferClosingSelector); ``` Returns an Observable that emits buffers of items it collects from the source `Observable`. The resulting `Observable` emits connected, non-overlapping buffers. It emits the current buffer and replaces it with a new buffer whenever the `Observable` produced by the specified `bufferClosingSelector` emits an item. #### Arguments 1. `bufferClosingSelector` *(`Function`)*: A function invoked to define the closing of each produced window. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js // With closings var source = Rx.Observable.timer(0, 50) .buffer(function () { return Rx.Observable.timer(125); }) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0,1,2 // => Next: 3,4,5 // => Next: 6,7 // => Completed ``` #### With buffer opening and buffer closing selector ```js Rx.Observable.prototype.buffer(bufferOpenings, bufferClosingSelector); ``` This version of `buffer` monitors an `Observable`, `bufferOpenings`, that emits Observable objects. Each time it observes such an emitted object, it creates a new bundle to begin collecting items emitted by the source Observable and it passes the `bufferOpenings` Observable into the `bufferClosingSelector` function. That function returns an `Observable`. `buffer` monitors that `Observable` and when it detects an emitted object, it closes its bundle and emits it as its own emission. 1. `bufferOpenings` *(`Observable`)*: Observable sequence whose elements denote the creation of new windows. 2. `bufferClosingSelector` *(`Function`)*: A function invoked to define the closing of each produced window. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js /* Using Openings and Closing Selector */ var openings = Rx.Observable.interval(200); var source = Rx.Observable.interval(50) .buffer(openings, function (x) { return Rx.Observable.timer(x + 100); }) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 3,4 // => Next: 7,8 // => Next: 11,12 // => Completed ``` #### With boundaries ```js Rx.Observable.prototype.buffer(bufferBoundaries); ``` Returns an `Observable` that emits non-overlapping buffered items from the source `Observable` each time the specified boundary `Observable` emits an item. #### Arguments 1. `bufferBoundaries` *(`Observable`)*: Sequence of buffer boundary markers. The current buffer is closed and a new buffer is opened upon receiving a boundary marker. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js /* Using buffer boundaries */ var openings = Rx.Observable.interval(500); // Convert the window to an array var source = Rx.Observable.timer(0, 100) .buffer(openings) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0,1,2,3,4 // => Next: 5,6,7,8,9,10 // => Next: 11,12,13,14,15 // => Completed ``` ### Location File: - [`/src/core/linq/observable/buffer.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/buffer.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/buffer.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/buffer.js) RxJS-4.1.0/doc/api/core/operators/bufferwithcount.md000066400000000000000000000046621266736161100224070ustar00rootroot00000000000000### `Rx.Observable.prototype.bufferWithCount(count, [skip])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/bufferwithcount.js) Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. #### Arguments 1. `count` *(`Function`)*: Length of each buffer. 2. `[skip]` *(`Function`)*: Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. #### Returns *(`Observable`)*: An observable sequence of buffers. #### Example ```js /* Without a skip */ var source = Rx.Observable.range(1, 6) .bufferWithCount(2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1,2 // => Next: 3,4 // => Next: 5,6 // => Completed /* Using a skip */ var source = Rx.Observable.range(1, 6) .bufferWithCount(2, 1); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1,2 // => Next: 2,3 // => Next: 3,4 // => Next: 4,5 // => Next: 5,6 // => Next: 6 // => Completed ``` ### Location File: - [`/src/core/linq/observable/bufferwithcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/bufferwithcount.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/bufferwithcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/bufferwithcount.js) RxJS-4.1.0/doc/api/core/operators/bufferwithtime.md000066400000000000000000000054701266736161100222130ustar00rootroot00000000000000### `Rx.Observable.prototype.bufferWithTime(timeSpan, [timeShift | scheduler], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/bufferwithtime.js "View in source") Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. #### Arguments 1. `timeSpan` *(`Number`)*: Length of each buffer (specified as an integer denoting milliseconds). 2. `[timeShift]` *(`Number`)*: Interval between creation of consecutive buffers (specified as an integer denoting milliseconds). 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence of buffers. #### Example ```js /* Without a skip */ var source = Rx.Observable.interval(100) .bufferWithTime(500) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0,1,2,3 // => Next: 4,5,6,7,8 // => Next: 9,10,11,12,13 // => Completed /* Using a skip */ var source = Rx.Observable.interval(100) .bufferWithTime(500, 100) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0,1,2,3,4 // => Next: 0,1,2,3,4,5 // => Next: 2,3,4,5,6 // => Completed ``` ### Location File: - [`/src/core/linq/observable/bufferwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/bufferwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).time.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | rx.lite.compat.js NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/bufferwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/bufferwithtime.js) RxJS-4.1.0/doc/api/core/operators/bufferwithtimeorcount.md000066400000000000000000000045301266736161100236210ustar00rootroot00000000000000### `Rx.Observable.prototype.bufferWithTimeOrCount(timeSpan, count, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/bufferwithtimeorcount.js "View in source") Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. #### Arguments 1. `timeSpan` *(`Number`)*: Maximum time length of a buffer. 2. `count` *(`Number`)*: Maximum element count of a buffer. 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence of buffers. #### Example ```js /* Hitting the count buffer first */ var source = Rx.Observable.interval(100) .bufferWithTimeOrCount(500, 3) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0,1,2 // => Next: 3,4,5 // => Next: 6,7,8 // => Completed ``` ### Location File: - [/src/core/linq/observable/bufferwithtimeorcount.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/bufferwithtimeorcount.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).time.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | rx.lite.compat.js NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/bufferwithtimeorcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/bufferwithtimeorcount.js) RxJS-4.1.0/doc/api/core/operators/case.md000066400000000000000000000050131266736161100200730ustar00rootroot00000000000000### `Rx.Observable.case(selector, sources, [elseSource|scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/case.js "View in source") Uses selector to determine which source in sources to use. There is an alias 'switchCase' for browsers Next: 42 //=> Completed ``` ### Location File: - [`/src/core/linq/observable/case.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/case.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - If using `rx.expermental.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/case.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/case.js) RxJS-4.1.0/doc/api/core/operators/catch.md000066400000000000000000000037761266736161100202600ustar00rootroot00000000000000### `Rx.Observable.catch(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/catch.js "View in source") Continues an observable sequence that is terminated by an exception with the next observable sequence. #### Arguments 1. `args` *(`Array` | `arguments`)*: Observable sequences to catch exceptions for. #### Returns *(`Observable`)*: An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. #### Example ```js var obs1 = Rx.Observable.throw(new Error('error')); var obs2 = Rx.Observable.return(42); var source = Rx.Observable.catch(obs1, obs2); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/catch.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/catch.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/catchproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/catchproto.js) RxJS-4.1.0/doc/api/core/operators/catchproto.md000066400000000000000000000053371266736161100213370ustar00rootroot00000000000000### `Rx.Observable.prototype.catch(second | handler)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js#L3107-L3112 "View in source") Continues an observable sequence that is terminated by an exception with the next observable sequence. #### Arguments Using another Observable: - `second` *(`Observable`)*: A second observable sequence used to produce results when an error occurred in the first sequence. Using a handler: - `handler` *(`Function`)*: Exception handler function that returns an observable sequence given the error that occurred in the first sequence #### Returns *(`Observable`)*: An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. #### Example ```js /* Using a second observable */ var source = Rx.Observable.throw(new Error()).catch(Rx.Observable.just(42)); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed /* Using a handler function */ var source = Rx.Observable.throw(new TimeoutError()) .catch(function (e) { var returnValue; if (e instanceof TimeoutError) { return Rx.Observable.just(42); } return Rx.Observable.throw(e); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/catchproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/catchproto.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/catchexceptionproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/catchproto.js) RxJS-4.1.0/doc/api/core/operators/combinelatest.md000066400000000000000000000073401266736161100220160ustar00rootroot00000000000000### `Rx.Observable.combineLatest(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/combinelatest.js "View in source") Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element. This can be in the form of an argument list of observables or an array. If the result selector is omitted, a list with the elements will be yielded. #### Arguments 1. `args` *(arguments | Array)*: An array or arguments of Observable sequences. 2. `[resultSelector]` *(`Function`)*: Function to invoke whenever either of the sources produces an element. If omitted, a list with the elements will be yielded. #### Returns *(`Observable`)*: An observable sequence containing the result of combining elements of the sources using the specified result selector function. #### Example ```js /* Have staggering intervals */ var source1 = Rx.Observable.interval(100) .map(function (i) { return 'First: ' + i; }); var source2 = Rx.Observable.interval(150) .map(function (i) { return 'Second: ' + i; }); // Combine latest of source1 and source2 whenever either gives a value var source = Rx.Observable.combineLatest( source1, source2 ).take(4); var subscription = source.subscribe( function (x) { console.log('Next: %s', JSON.stringify(x)); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: ["First: 0","Second: 0"] // => Next: ["First: 1","Second: 0"] // => Next: ["First: 1","Second: 1"] // => Next: ["First: 2","Second: 1"] // => Completed /* Have staggering intervals */ var source1 = Rx.Observable.interval(100) .map(function (i) { return 'First: ' + i; }); var source2 = Rx.Observable.interval(150) .map(function (i) { return 'Second: ' + i; }); // Combine latest of source1 and source2 whenever either gives a value with a selector var source = Rx.Observable.combineLatest( source1, source2, function (s1, s2) { return s1 + ', ' + s2; } ).take(4); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: First: 0, Second: 0 // => Next: First: 1, Second: 0 // => Next: First: 1, Second: 1 // => Next: First: 2, Second: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/combinelatest.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/combinelatest.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/combinelatestproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/combinelatestproto.js) RxJS-4.1.0/doc/api/core/operators/combinelatestproto.md000066400000000000000000000073771266736161100231140ustar00rootroot00000000000000### `Rx.Observable.prototype.combineLatest(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/combinelatestproto.js "View in source") Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences produces an element (so long as each of the source observable sequences has emitted at least one element). This can be in the form of an argument list of observables or an array. If the result selector is omitted, a list with the elements will be yielded. #### Arguments 1. `args` *(arguments | Array)*: An array or arguments of Observable sequences. 2. `[resultSelector]` *(`Function`)*: Function to invoke whenever either of the sources produces an element. If omitted, a list with the elements will be yielded. #### Returns *(`Observable`)*: An observable sequence containing the result of combining elements of the sources using the specified result selector function. #### Example ```js /* Have staggering intervals */ var source1 = Rx.Observable.interval(100) .map(function (i) { return 'First: ' + i; }); var source2 = Rx.Observable.interval(150) .map(function (i) { return 'Second: ' + i; }); // Combine latest of source1 and source2 whenever either gives a value with selector var source = source1.combineLatest( source2 ).take(4); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: First: 0,Second: 0 // => Next: First: 1,Second: 0 // => Next: First: 1,Second: 1 // => Next: First: 2,Second: 1 // => Completed /* Have staggering intervals */ var source1 = Rx.Observable.interval(100) .map(function (i) { return 'First: ' + i; }); var source2 = Rx.Observable.interval(150) .map(function (i) { return 'Second: ' + i; }); // Combine latest of source1 and source2 whenever either gives a value var source = source1.combineLatest( source2, function (s1, s2) { return s1 + ', ' + s2; } ).take(4); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: First: 0, Second: 0 // => Next: First: 1, Second: 0 // => Next: First: 1, Second: 1 // => Next: First: 2, Second: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/combinelatestproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/combinelatestproto.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/combinelatestproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/combinelatestproto.js) RxJS-4.1.0/doc/api/core/operators/concat.md000066400000000000000000000050071266736161100204320ustar00rootroot00000000000000### `Rx.Observable.concat(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concat.js "View in source") Concatenates all of the specified observable sequences, as long as the previous observable sequence terminated successfully. #### Arguments 1. `args` *(`Array` | `arguments`)*: Observable sequences or Promises to concatenate. #### Returns *(`Observable`)*: An observable sequence that contains the elements of each given sequence, in sequential order. #### Example ```js /* Using Observable sequences */ var source1 = Rx.Observable.return(42); var source2 = Rx.Observable.return(56); var source = Rx.Observable.concat(source1, source2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 56 // => Completed /* Using Promises and Observable sequences */ var source1 = Rx.Observable.return(42); var source2 = RSVP.Promise.resolve(56); var source = Rx.Observable.concat(source1, source2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 56 // => Completed ``` ### Location File: - [`/src/core/linq/observable/concat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concat.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/concatproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/concatproto.js) RxJS-4.1.0/doc/api/core/operators/concatall.md000066400000000000000000000040461266736161100211250ustar00rootroot00000000000000### `Rx.Observable.prototype.concatAll()` ### ### `Rx.Observable.prototype.concatObservable()` **DEPRECATED** ### [Ⓢ](/src/core/linq/observable/concatobservable.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatall.js "View in source") Concatenates a sequence of observable sequences or promises into a single observable sequence. #### Returns *(`Observable`)*: The observable sequence that merges the elements of the inner sequences. #### Example ```js var source = Rx.Observable.range(0, 3) .map(function (x) { return Rx.Observable.range(x, 3); }) .concatAll(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` #### Location File: - [/src/core/linq/observable/concatall.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatall.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/concatall.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/concatall.js) RxJS-4.1.0/doc/api/core/operators/concatmap.md000066400000000000000000000126071266736161100211340ustar00rootroot00000000000000### `Rx.Observable.prototype.concatMap(selector, [resultSelector], [thisArg])` ### `Rx.Observable.prototype.selectConcat(selector, [resultSelector], [thisArg])` [Ⓢ]((https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatmap.js "View in source") This is an alias for the `selectConcat` method. This can be one of the following: Projects each element of an observable sequence to an observable sequence and concatenates the resulting observable sequences or Promises or array/iterable into one observable sequence. ```js source.concatMap(function (x, i) { return Rx.Observable.range(0, x); }); source.concatMap(function (x, i) { return Promise.resolve(x + 1); }); source.concatMap(function (x, i) { return [x, i]; }); ``` Projects each element of an observable sequence or Promise to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and concatenates the results into one observable sequence. ```js source.concatMap(function (x, i) { return Rx.Observable.range(0, x); }, function (x, y, ix, iy) { return x + y + ix + iy; }); source.concatMap(function (x, i) { return Promise.resolve(x + i); }, function (x, y, ix, iy) { return x + y + ix + iy; }); source.concatMap(function (x, i) { return [x, i]; }, function (x, y, ix, iy) { return x + y + ix + iy; }); ``` Projects each element of the source observable sequence to the other observable sequence or Promise or array/iterable and merges the resulting observable sequences into one observable sequence. ```js source.concatMap(Rx.Observable.of(1,2,3)); source.concatMap(Promise.resolve(42)); source.concatMap([1,2,3]); ``` #### Arguments 1. `selector` *(`Function` | `Iterable` | `Promise`)*: An Object to project to the sequence or a transform function to apply to each element or an observable sequence to project each element from the source sequence onto. The selector is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[resultSelector]` *(`Function`)*: A transform function to apply to each element of the intermediate sequence. The resultSelector is called with the following information: 1. the value of the outer element 2. the value of the inner element 3. the index of the outer element 4. the index of the inner element 3. `[thisArg]` *(`Any`)*: If `resultSelector` is not `Function`, Object to use as `this` when executing `selector`. #### Returns *(`Observable`)*: An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. #### Example ```js var source = Rx.Observable.range(0, 5) .concatMap(function (x, i) { return Rx.Observable .interval(100) .take(x).map(function() { return i; }); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 2 // => Next: 3 // => Next: 3 // => Next: 3 // => Next: 4 // => Next: 4 // => Next: 4 // => Next: 4 // => Completed /* Using a promise */ var source = Rx.Observable.of(1,2,3,4) .concatMap(function (x, i) { return Promise.resolve(x + i); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 3 // => Next: 5 // => Next: 7 // => Completed /* Using an array */ var source = Rx.Observable.of(1,2,3) .concatMap( function (x, i) { return [x,i]; }, function (x, y, ix, iy) { return x + y + ix + iy; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 2 // => Next: 5 // => Next: 5 // => Next: 8 // => Next: 8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/concatmap.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatmap.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/concatmap.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/concatmap.js) RxJS-4.1.0/doc/api/core/operators/concatmapobserver.md000066400000000000000000000051651266736161100227050ustar00rootroot00000000000000### `Rx.Observable.prototype.concatMapObserver(onNext, onError, onCompleted, [thisArg])` ### `Rx.Observable.prototype.selectConcatObserver(onNext, onError, onCompleted, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatmapobserver.js "View in source") Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. #### Arguments 1. `onNext` *(`Function`)*: A transform function to apply to each element. The selector is called with the following information: 1. the value of the element 2. the index of the element 2. `onError` *(`Function`)*: A transform function to apply when an error occurs in the source sequence. 3. `onCompleted` *(`Function`)*: A transform function to apply when the end of the source sequence is reached. 4. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the transform functions. #### Returns *(`Observable`)*: An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. #### Example ```js var source = Rx.Observable.range(1, 3) .concatMapObserver( function (x, i) { return Rx.Observable.repeat(x, i); }, function (err) { return Rx.Observable.return(42); }, function () { return Rx.Observable.empty(); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 3 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/concatmapobserver.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatmapobserver.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [`/tests/observable/concatmapobserver.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/concatmapobserver.js) RxJS-4.1.0/doc/api/core/operators/concatproto.md000066400000000000000000000050741266736161100215220ustar00rootroot00000000000000### `Rx.Observable.prototype.concat(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatproto.js "View in source") Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. #### Arguments 1. `args` *(arguments | Array)*: An array or arguments of Observable sequences. #### Returns *(`Observable`)*: An observable sequence that contains the elements of each given sequence, in sequential order. #### Example ```js var source = Rx.Observable .return(42) .concat(Rx.Observable.return(56), Rx.Observable.return(72)); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 56 // => Next: 72 // => Completed // With a promise var source = Rx.Observable.just(42) .concat(Promise.resolve(42)); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/concatproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/concatproto.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/concatproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/concatproto.js) RxJS-4.1.0/doc/api/core/operators/connect.md000066400000000000000000000051171266736161100206160ustar00rootroot00000000000000### `ConnectableObservable.prototype.connect()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js#L504 "View in source") Connects the observable wrapper to its source. All subscribed observers will receive values from the underlying observable sequence as long as the connection is established. #### Returns *(Disposable)*: Disposable object used to disconnect the observable wrapper from its source, causing subscribed observer to stop receiving values from the underlying observable sequence. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .do(function (x) { console.log('Side effect'); }); var published = source.publish(); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); // Connect the source var connection = published.connect(); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed // => Completed ``` ### Location File: - [`/src/core/linq/connectableobservable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/connectableobservable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) Unit Tests: - [`/tests/observable/connectableobservable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/connectableobservable.js) RxJS-4.1.0/doc/api/core/operators/controlled.md000066400000000000000000000037461266736161100213400ustar00rootroot00000000000000### `Rx.Observable.prototype.controlled([enableQueue])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/backpressure/controlled.js "View in source") Attaches a controller to the observable sequence with the ability to queue. #### Arguments 1. `[enableQueue]` *(Boolean)*: Whether to enable queueing. If not specified, defaults to true. #### Returns *(`Observable`)*: An observable sequence which can be used to request values from the sequence. #### Example ```js var source = Rx.Observable.range(0, 10).controlled(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); source.request(2); // => Next: 0 // => Next: 1 ``` ### Location File: - [`/src/core/backpressure/controlled.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/backpressure/controlled.js) Dist: - [`rx.backpressure.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.backpressure.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-BackPressure`](http://www.nuget.org/packages/RxJS-BackPressure/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/controlled.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/controlled.js) RxJS-4.1.0/doc/api/core/operators/count.md000066400000000000000000000054561266736161100203230ustar00rootroot00000000000000### `Rx.Observable.prototype.count([predicate], [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/count.js "View in source") Returns an observable sequence containing a value that represents how many elements in the specified observable sequence satisfy a condition if provided, else the count of items. #### Arguments 1. `[predicate]` *(`Function`)*: A function to test each element for a condition. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing `predicate`. #### Returns *(`Observable`)*: An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function if provided, else the count of items in the sequence. #### Example ```js /* Without a predicate */ var source = Rx.Observable.range(0, 10).count(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 10 // => Completed /* With a predicate */ var source = Rx.Observable.range(0, 10) .count(function (x) { return x % 2 === 0; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 5 // => Completed ``` ### Location File: - [`/src/core/linq/observable/count.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/count.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/count.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/count.js) RxJS-4.1.0/doc/api/core/operators/create.md000066400000000000000000000056331266736161100204330ustar00rootroot00000000000000### `Rx.Observable.create(subscribe)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/create.js "View in source") Creates an observable sequence from a specified subscribe method implementation. This is an alias for the `createWithDisposable` method #### Arguments 1. `subscribe` *(`Function`)*: Implementation of the resulting observable sequence's subscribe method, optionally returning a function that will be wrapped in a disposable object. This could also be a disposable object. #### Returns *(`Observable`)*: The observable sequence with the specified implementation for the subscribe method. #### Example ```js /* Using a function */ var source = Rx.Observable.create(function (observer) { observer.onNext(42); observer.onCompleted(); // Note that this is optional, you do not have to return this if you require no cleanup return function () { console.log('disposed'); }; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed subscription.dispose(); // => disposed /* Using a disposable */ var source = Rx.Observable.create(function (observer) { observer.onNext(42); observer.onCompleted(); // Note that this is optional, you do not have to return this if you require no cleanup return Rx.Disposable.create(function () { console.log('disposed'); }); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/create.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/create.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/create.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/create.js) RxJS-4.1.0/doc/api/core/operators/debounce.md000066400000000000000000000065321266736161100207530ustar00rootroot00000000000000### `Rx.Observable.prototype.debounce(dueTime, [scheduler])` ### ### `Rx.Observable.prototype.debounce(durationSelector)` ### [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/debounce.js "View in source") Emits an item from the source Observable after a particular timespan has passed without the Observable omitting any other items. --OR-- Ignores values from an observable sequence which are followed by another value within a computed debounced duration. #### Arguments If using a relative due time: 1. `dueTime` *(`Number`)*: Duration of the throttle period for each value (specified as an integer denoting milliseconds). 2. `[scheduler]` *(`Any`)*: Scheduler to run the throttle timers on. If not specified, the default scheduler is used. If using the duration selector function: 1. `durationSelector` *(`Function`)*: Selector function to retrieve a sequence indicating the throttle duration for each given element. #### Returns *(`Observable`)*: The debounced sequence. #### Example ```js var times = [ { value: 0, time: 100 }, { value: 1, time: 600 }, { value: 2, time: 400 }, { value: 3, time: 700 }, { value: 4, time: 200 } ]; // Delay each item by time and project value; var source = Rx.Observable.from(times) .flatMap(function (item) { return Rx.Observable .of(item.value) .delay(item.time); }) .debounce(500 /* ms */); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 3 // => Completed /* Using Selector */ var array = [ 800, 700, 600, 500 ]; var source = Rx.Observable.for( array, function (x) { return Rx.Observable.timer(x) } ) .map(function(x, i) { return i; }) .debounce(function (x) { return Rx.Observable.timer(700); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/debounce.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/debounce.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/debounce.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/debounce.js) RxJS-4.1.0/doc/api/core/operators/defaultifempty.md000066400000000000000000000046551266736161100222150ustar00rootroot00000000000000### `Rx.Observable.prototype.defaultIfEmpty([defaultValue])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/defaultifempty.js "View in source") Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. #### Arguments 1. `[defaultValue=null]` *(`Any`)*: The value to return if the sequence is empty. If not provided, this defaults to null. #### Returns *(`Observable`)*: An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. #### Example ```js /* Without a default value */ var source = Rx.Observable.empty().defaultIfEmpty(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: null // => Completed /* With a defaultValue */ var source = Rx.Observable.empty().defaultIfEmpty(false); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: false // => Completed ``` ### Location File: - [`/src/core/linq/observable/defaultifempty.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/defaultifempty.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/defaultifempty.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/defaultifempty.js) RxJS-4.1.0/doc/api/core/operators/defer.md000066400000000000000000000046371266736161100202600ustar00rootroot00000000000000### `Rx.Observable.defer(observableFactory)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/defer.js "View in source") Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. #### Arguments 1. `observableFactory` *(`Function`)*: Observable factory function to invoke for each observer that subscribes to the resulting sequence. #### Returns *(`Observable`)*: An observable sequence whose observers trigger an invocation of the given observable factory function. #### Example ```js /* Using an observable sequence */ var source = Rx.Observable.defer(function () { return Rx.Observable.return(42); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed /* Using a promise */ var source = Rx.Observable.defer(function () { return RSVP.Promise.resolve(42); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/defer.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/defer.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/defer.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/defer.js) RxJS-4.1.0/doc/api/core/operators/delay.md000066400000000000000000000101011266736161100202500ustar00rootroot00000000000000### `Rx.Observable.prototype.delay(dueTime, [scheduler])` ### `Rx.Observable.prototype.delay([subscriptionDelay], delayDurationSelector` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/delay.js "View in source") Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. --OR-- Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. #### Arguments For delays with an absolute or relative time: 1. `dueTime` *(Date | Number)*: Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. 2. `[scheduler]` *(`Scheduler`)*: Scheduler to run the delay timers on. If not specified, the default scheduler is used. For delays with a delay selector function: 1. `[subscriptionDelay]` *(`Observable`)*: Sequence indicating the delay for the subscription to the source. 2. `delayDurationSelector` *(`Function`)*: Selector function to retrieve a sequence indicating the delay for each given element. #### Returns *(`Observable`)*: Time-shifted sequence. #### Example ```js /* Using an absolute time to delay by a second */ var source = Rx.Observable.range(0, 3) .delay(new Date(Date.now() + 1000)); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed /* Using an relatove time to delay by a second */ var source = Rx.Observable.range(0, 3) .delay(1000); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed /* With subscriptionDelay */ var source = Rx.Observable .range(0, 3) .delay( Rx.Observable.timer(300), function (x) { return Rx.Observable.timer(x * 400); } ) .timeInterval() .map(function (x) { return x.value + ':' + x.interval; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0:300 // => Next: 1:400 // => Next: 2:400 // => Completed /* Without subscriptionDelay */ var source = Rx.Observable .range(0, 3) .delay(function (x) { return Rx.Observable.timer(x * 400); }) .timeInterval() .map(function (x) { return x.value + ':' + x.interval; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0:0 // => Next: 1:400 // => Next: 2:400 // => Completed ``` ### Location File: - [`/src/core/linq/observable/delay.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/delay.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).time.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | rx.lite.compat.js NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/delay.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/delay.js) RxJS-4.1.0/doc/api/core/operators/delaysubscription.md000066400000000000000000000052011266736161100227220ustar00rootroot00000000000000### `Rx.Observable.prototype.delaySubscription(dueTime, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/delaysubscription.js "View in source") Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. This operator is more efficient than `delay` but postpones all side-effects of subscription and affects error propagation timing. The side-effects of subscribing to the source sequence will be run on the specified scheduler. Observer callbacks will not be affected. #### Arguments 1. `dueTime` *(`Number | Date`)*: Relative (Number) or Absolute (Date) time shift of the subscription. 2. `[scheduler]` *(`Scheduler`)*: Scheduler to run the subscription delay timer on. If not specified, the default scheduler is used. #### Returns *(`Observable`)*: Time-shifted sequence. #### Example ```js var start = Date.now() var source = Rx.Observable .range(0, 3) .delaySubscription(5000); var subscription = source.subscribe( function (x) { console.log('Next: %s, %s', x, Date.now() - start); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); //=> Next: 0, 5001 //=> Next: 1, 5002 //=> Next: 2, 5003 //=> Completed ``` ### Location File: - [`/src/core/linq/observable/delaysubscription.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/delaysubscription.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/delaysubscription.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/delaysubscription.js) RxJS-4.1.0/doc/api/core/operators/dematerialize.md000066400000000000000000000036641266736161100220110ustar00rootroot00000000000000### `Rx.Observable.prototype.dematerialize()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/dematerialize.js "View in source") Dematerializes the explicit notification values of an observable sequence as implicit notifications. #### Returns *(`Observable`)*: An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. #### Example ```js var source = Rx.Observable .from([ Rx.Notification.createOnNext(42), Rx.Notification.createOnError(new Error('woops')) ]) .dematerialize(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Error: Error: woops ``` ### Location File: - [`/src/core/linq/observable/dematerialize.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/dematerialize.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/dematerialize.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/dematerialize.js) RxJS-4.1.0/doc/api/core/operators/distinct.md000066400000000000000000000052751266736161100210130ustar00rootroot00000000000000### `Rx.Observable.prototype.distinct([keySelector], [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/distinct.js "View in source") Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. #### Arguments 1. `[keySelector]` *(`Function`)*: A function to compute the comparison key for each element. 2. `[comparer]` *(`Function`)*: Used to compare objects for equality. If not provided, defaults to an equality comparer function. #### Returns *(`Observable`)*: An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. #### Example ```js /* Without key selector */ var source = Rx.Observable.of(42, 24, 42, 24) .distinct(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 24 // => Completed /* With key selector */ var source = Rx.Observable.of({value: 42}, {value: 24}, {value: 42}, {value: 24}) .distinct(function (x) { return x.value; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: { value: 42 } // => Next: { value: 24 } // => Completed ``` ### Location File: - [`/src/core/linq/observable/distinct.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/distinct.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) - [`rx.lite.extras.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/distinct.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/distinct.js) RxJS-4.1.0/doc/api/core/operators/distinctuntilchanged.md000066400000000000000000000063301266736161100233720ustar00rootroot00000000000000### `Rx.Observable.prototype.distinctUntilChanged([keySelector], [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/distinctuntilchanged.js "View in source") Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. #### Arguments 1. `[keySelector]` *(`Function`)*: A function to compute the comparison key for each element. If not provided, it projects the value. 2. `[comparer]` *(`Function`)*: Equality comparer for computed key values. If not provided, defaults to an equality comparer function. #### Returns *(`Observable`)*: An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. #### Example ```js /* Without key selector */ var source = Rx.Observable.of(42, 42, 24, 24) .distinctUntilChanged(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 24 // => Completed /* With key selector */ var source = Rx.Observable.of({value: 42}, {value: 42}, {value: 24}, {value: 24}) .distinctUntilChanged(function (x) { return x.value; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: { value: 42 } // => Next: { value: 24 } // => Completed /* With comparer */ var source = Rx.Observable.of({value: 42}, {value: 42}, {value: 24}, {value: 24}) .distinctUntilChanged(function (x) { return x.value; }, function (a,b) { return a !== b; }); var subscription = source.subscribe( function (x) { console.dir('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: { value: 42 } // => Next: { value: 42 } // => Completed ``` ### Location File: - [`/src/core/linq/observable/distinctuntilchanged.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/distinctuntilchanged.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/distinctuntilchanged.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/distinctuntilchanged.js) RxJS-4.1.0/doc/api/core/operators/do.md000066400000000000000000000070031266736161100175630ustar00rootroot00000000000000### `Rx.Observable.prototype.do([observer] | [onNext], [onError], [onCompleted])` ### ### `Rx.Observable.prototype.tap([observer] | [onNext], [onError], [onCompleted])` ### [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js "View in source") Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. There is an alias to this method `doAction` for browsers Do Next: 0 // => Next: 0 // => Do Next: 1 // => Next: 1 // => Do Next: 2 // => Next: 2 // => Do Completed // => Completed /* Using an observer */ var observer = Rx.Observer.create( function (x) { console.log('Do Next: %s', x); }, function (err) { console.log('Do Error: %s', err); }, function () { console.log('Do Completed'); } ); var source = Rx.Observable.range(0, 3) .do(observer); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Do Next: 0 // => Next: 0 // => Do Next: 1 // => Next: 1 // => Do Next: 2 // => Next: 2 // => Do Completed // => Completed ``` ### Location File: - [`/src/core/linq/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/do.js) RxJS-4.1.0/doc/api/core/operators/dooncompleted.md000066400000000000000000000052421266736161100220200ustar00rootroot00000000000000### `Rx.Observable.prototype.doOnCompleted(onCompleted, [thisArg])` ### `Rx.Observable.prototype.tapOnCompleted(onCompleted, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js "View in source") Invokes an action upon graceful termination of the observable sequence. This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. #### Arguments 1. `oncompleted` *(`Function`)*: Function to invoke upon graceful termination of the observable sequence. 2. [`thisArg`] *(Any)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: The source sequence with the side-effecting behavior applied. #### Example ```js /* Using a function */ var source = Rx.Observable.range(0, 3) .doOnCompleted( function () { console.log('Do Completed'); } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Do Completed // => Completed /* Using a thisArg */ var source = Rx.Observable.range(0, 3) .doOnCompleted( function () { this.log('Do Completed'); }, console ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Do Completed // => Completed ``` ### Location File: - [`/src/core/linq/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/do.js) RxJS-4.1.0/doc/api/core/operators/doonerror.md000066400000000000000000000051411266736161100211730ustar00rootroot00000000000000### `Rx.Observable.prototype.doOnError(onError, [thisArg])` ### `Rx.Observable.prototype.tapOnError(onError, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js "View in source") Invokes an action upon exceptional termination of the observable sequence. This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. #### Arguments 1. `onError` *(`Function`)*: Function to invoke upon exceptional termination of the observable sequence. 2. [`thisArg`] *(Any)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: The source sequence with the side-effecting behavior applied. #### Example ```js /* Using a function */ var source = Rx.Observable.throw(new Error()) .doOnError( function (err) { console.log('Do Error: %s', err); } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Do Error: Error // => Error: Error /* Using a thisArg */ var source = Rx.Observable.throw(new Error()) .doOnError( function (err) { this.log('Do Error: %s', err); }, console ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Do Error: Error // => Error: Error ``` ### Location File: - [`/src/core/linq/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/do.js) RxJS-4.1.0/doc/api/core/operators/doonnext.md000066400000000000000000000052601266736161100210220ustar00rootroot00000000000000### `Rx.Observable.prototype.doOnNext(onNext, [thisArg])` ### `Rx.Observable.prototype.tapOnNext(onNext, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js "View in source") Invokes an action for each element of the observable sequence. This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. #### Arguments 1. `onNext` *(`Function`)*: Function to invoke for each element in the observable sequence. 2. [`thisArg`] *(Any)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: The source sequence with the side-effecting behavior applied. #### Example ```js /* Using a function */ var source = Rx.Observable.range(0, 3) .doOnNext( function () { console.log('Do Next: %s', x); } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Do Next: 0 // => Next: 0 // => Do Next: 1 // => Next: 1 // => Do Next: 2 // => Next: 2 // => Completed /* Using a thisArg */ var source = Rx.Observable.range(0, 3) .doOnNext( function () { this.log('Do Next: %s', x); }, console ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Do Next: 0 // => Next: 0 // => Do Next: 1 // => Next: 1 // => Do Next: 2 // => Next: 2 // => Completed ``` ### Location File: - [`/src/core/linq/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/do.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/do.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/do.js) RxJS-4.1.0/doc/api/core/operators/dowhile.md000066400000000000000000000037571266736161100206300ustar00rootroot00000000000000### `Rx.Observable.prototype.doWhile(condition)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/dowhile.js "View in source") Repeats source as long as condition holds emulating a do while loop. #### Arguments 1. `condition` *(`Function`)*: The condition which determines if the source will be repeated. #### Returns *(`Observable`)*: An observable sequence whose observers trigger an invocation of the given observable factory function. #### Example ```js var i = 0; var source = Rx.Observable.return(42).doWhile(function (x) { return ++i < 2; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/dowhile.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/dowhile.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/dowhile.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/dowhile.js) RxJS-4.1.0/doc/api/core/operators/elementat.md000066400000000000000000000053531266736161100211450ustar00rootroot00000000000000### `Rx.Observable.prototype.elementAt(index, [defaultValue])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/elementat.js "View in source") Returns the element at a specified index in a sequence. If the specified index is out of bounds and no default value was given `onError` will be called with an error, however, if a default value has been specified, that value will be returned via an `onNext` call. #### Arguments 1. `index` *(`Number`)*: The zero-based index of the element to retrieve. 2. `[defaultValue]` *(`Any`)*: Default value if no such element exists. #### Returns *(`Observable`)*: An observable sequence that produces the element at the specified position in the source sequence. If the specified index is out of bounds and no default value was given `onError` will be called with an error, however, if a default value has been specified, that value will be returned via an `onNext` call. #### Example ```js /* Finds an index */ var source = Rx.Observable.from([1,2,3,4]) .elementAt(1); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 2 // => Completed /* With default value */ var source = Rx.Observable.from([1,2,3,4]) .elementAt(4, 42); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/elementat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/elementat.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/elementat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/elementat.js) RxJS-4.1.0/doc/api/core/operators/empty.md000066400000000000000000000035101266736161100203160ustar00rootroot00000000000000### `Rx.Observable.empty([scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/empty.js "View in source") Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. #### Arguments 1. `[scheduler=Rx.Scheduler.immediate]` *(`Scheduler`)*: Scheduler to send the termination call on. #### Returns *(`Observable`)*: An observable sequence with no elements. #### Example ```js var source = Rx.Observable.empty(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Completed ``` ### Location File: - [/src/core/linq/observable/empty.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/empty.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/empty.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/empty.js) RxJS-4.1.0/doc/api/core/operators/every.md000066400000000000000000000041141266736161100203130ustar00rootroot00000000000000### `Rx.Observable.prototype.every(predicate, [thisArg])` ## [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/every.js "View in source") Determines whether all elements of an observable sequence satisfy a condition. #### Arguments 1. `predicate` *(`Function`)*: A function to test each element for a condition. 2. `[thisArg]` *(`Function`)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. #### Example ```js var source = Rx.Observable.of(1,2,3,4,5) .every(function (x) { return x < 6; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: true // => Completed ``` ### Location File: - [`/src/core/linq/observable/every.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/every.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/every.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/every.js) RxJS-4.1.0/doc/api/core/operators/expand.md000066400000000000000000000045311266736161100204430ustar00rootroot00000000000000### `Rx.Observable.prototype.expand(selector, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/expand.js "View in source") Expands an observable sequence by recursively invoking selector. #### Arguments 1. `selector` *(`Function`)*: Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. 2. [`scheduler=Rx.Scheduler.immediate`] *(`Scheduler`)*: Scheduler on which to perform the expansion. If not provided, this defaults to the immediate scheduler. #### Returns *(`Observable`)*: An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. #### Example ```js var source = Rx.Observable.return(42) .expand(function (x) { return Rx.Observable.return(42 + x); }) .take(5); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Next: 84 // => Next: 126 // => Next: 168 // => Next: 210 // => Completed ``` ### Location File: - [`/src/core/linq/observable/expand.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/expand.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/expand.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/expand.js) RxJS-4.1.0/doc/api/core/operators/finally.md000066400000000000000000000040011266736161100206120ustar00rootroot00000000000000### `Rx.Observable.prototype.finally(action)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/finally.js "View in source") Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. There is an alias called `finallyAction` for browsers Error: Error // => Finally ``` ### Location File: - [`/src/core/linq/observable/finally.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/finally.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/finally.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/finally.js) RxJS-4.1.0/doc/api/core/operators/find.md000066400000000000000000000052761266736161100201130ustar00rootroot00000000000000### `Rx.Observable.prototype.find(predicate, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/find.js) Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. #### Arguments 1. `predicate` *(`Function`)*: A function to test each source element for a condition; The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Observable`)*: An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, an empty sequence. #### Example ```js /* Found an element */ var array = [1,2,3,4]; var source = Rx.Observable.from(array) .find(function (x, i, obs) { return x === 1; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Completed /* Not found */ var array = [1,2,3,4]; var source = Rx.Observable.from(array) .find(function (x, i, obs) { return x === 5; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Completed ``` ### Location File: - [`/src/core/linq/observable/find.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/find.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/find.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/find.js) RxJS-4.1.0/doc/api/core/operators/findindex.md000066400000000000000000000053771266736161100211450ustar00rootroot00000000000000### `Rx.Observable.prototype.findIndex(predicate, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/findindex.js "View in source") Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. #### Arguments 1. `predicate` *(`Function`)*: A function to test each source element for a condition; The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Observable`)*: An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, undefined. #### Example ```js /* Found an element */ var array = [1,2,3,4]; var source = Rx.Observable.from(array) .findIndex(function (x, i, obs) { return x === 1; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Completed /* Not found */ var array = [1,2,3,4]; var source = Rx.Observable.from(array) .findIndex(function (x, i, obs) { return x === 5; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: -1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/findindex.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/findindex.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/findindex.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/findindex.js) RxJS-4.1.0/doc/api/core/operators/first.md000066400000000000000000000074631266736161100203220ustar00rootroot00000000000000### `Rx.Observable.prototype.first([predicate], [thisArg], [defaultValue])` ### `Rx.Observable.prototype.first([settings])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/first.js "View in source") Returns the first element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. If no default value is given, then `onError` will be called. #### Arguments `Rx.Observable.prototype.first([predicate], [thisArg], [defaultValue])` 1. `[predicate]` *(`Function`)*: A predicate function to evaluate for elements in the source sequence. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. 3. `[defaultValue]` *(`Any`)*: Default value if no such element exists. `Rx.Observable.prototype.first([settings])` 1. `[settings]` *(`Object`)*: An object with the following fields - `[predicate]` *(`Function`)*: A predicate function to evaluate for elements in the source sequence. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed - `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. - `[defaultValue]` *(`Any`)*: Default value if no such element exists. #### Returns *(`Observable`)*: An observable sequence that contains elements from the input sequence that satisfy the condition. #### Example ```js /* Without a predicate */ var source = Rx.Observable.range(0, 10).first(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Completed /* With a predicate */ var source = Rx.Observable.range(0, 10) .first(function (x, idx, obs) { return x % 2 === 1; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Completed /* With a default value */ var source = Rx.Observable.range(0, 10) .first({ predicate: function (x, idx, obs) { return x > 10; }, defaultValue: 42 }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/first.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/first.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/first.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/first.js) RxJS-4.1.0/doc/api/core/operators/flatmapfirst.md000066400000000000000000000054761266736161100216710ustar00rootroot00000000000000### `Rx.Observable.prototype.flatMapFirst(selector, [thisArg])` ### `Rx.Observable.prototype.selectSwitchFirst(selector, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/flatmapfirst.js "View in source") Transform the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable. The `flatMapFirst` operator is similar to the `flatMap` and `concatMap` methods described above, however, rather than emitting all of the items emitted by all of the Observables that the operator generates by transforming items from the source `Observable`, `flatMapFirst` instead propagates the first `Observable` exclusively until it completes before it begins subscribes to the next `Observable`. Observables that come before the current `Observable` completes will be dropped and will not propagate. #### Arguments 1. `selector` *(`Function`)*: A transform function to apply to each source element. The callback has the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Observable`)*: An Observable sequence that is the result of concatenating non-overlapping items emitted by an Observable of Observables. #### Example ```js //Generate an event every 100 milliseconds var source = Rx.Observable.generateWithRelativeTime( 0, function(x) {return x < 5; }, function(x) {return x + 1; }, function(x) {return x; }, function(x) {return 100; }) .flatMapFirst(function(value) { //Observable takes 150 milliseconds to complete return Rx.Observable.timer(150).map(value); }); var subscription = source.subscribe( function (x) { console.log('Next: %d', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // Next: 0 // Next: 2 // Next: 4 // Completed ``` ### Location File: - [`/src/core/linq/observable/flatmapfirst.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/flatmapfirst.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental/) Unit Tests: - [`/tests/observable/flatmapfirst.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/flatmapfirst.js) RxJS-4.1.0/doc/api/core/operators/flatmaplatest.md000066400000000000000000000055321266736161100220270ustar00rootroot00000000000000### `Rx.Observable.prototype.flatMapLatest(selector, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/flatmaplatest.js "View in source") Transform the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable. The `flatMapLatest` operator is similar to the `flatMap` and `concatMap` methods described above, however, rather than emitting all of the items emitted by all of the Observables that the operator generates by transforming items from the source `Observable`, `flatMapLatest` instead emits items from each such transformed `Observable` only until the next such `Observable` is emitted, then it ignores the previous one and begins emitting items emitted by the new one. #### Arguments 1. `selector` *(`Function`)*: A transform function to apply to each source element. The callback has the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Observable`)*: An observable sequence which transforms the items emitted by an Observable into Observables, and mirror those items emitted by the most-recently transformed Observable. #### Example ```js var source = Rx.Observable .range(1, 3) .flatMapLatest(function(x) { return Rx.Observable.from([x + 'a', x + 'b']); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // Next: 1a // Next: 2a // Next: 3a // Next: 3b // Completed ``` ### Location File: - [`/src/core/linq/observable/flatmaplatest.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/flatmaplatest.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/flatmaplatest.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/flatmaplatest.js) RxJS-4.1.0/doc/api/core/operators/flatmapobserver.md000066400000000000000000000051631266736161100223620ustar00rootroot00000000000000### `Rx.Observable.prototype.flatMapObserver(onNext, onError, onCompleted, [thisArg])` ### `Rx.Observable.prototype.selectManyObserver(onNext, onError, onCompleted, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/selectmanyobserver.js "View in source") Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. #### Arguments 1. `onNext` *(`Function`)*: A transform function to apply to each element. The selector is called with the following information: 1. the value of the element 2. the index of the element 2. `onError` *(`Function`)*: A transform function to apply when an error occurs in the source sequence. 3. `onCompleted` *(`Function`)*: A transform function to apply when the end of the source sequence is reached. 4. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the transform functions. #### Returns *(`Observable`)*: An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. #### Example ```js var source = Rx.Observable.range(1, 3) .flatMapObserver( function (x, i) { return Rx.Observable.repeat(x, i); }, function (err) { return Rx.Observable.return(42); }, function () { return Rx.Observable.empty(); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 3 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/selectmanyobserver.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/selectmanyobserver.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [`/tests/observable/selectmanyobserver.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/selectmanyobserver.js) RxJS-4.1.0/doc/api/core/operators/flatmapwithmaxconcurrent.md000066400000000000000000000130331266736161100243120ustar00rootroot00000000000000### `Rx.Observable.prototype.flatMapWithMaxConcurrent(maxConcurrent, selector, [resultSelector], [thisArg])` ### `Rx.Observable.prototype.selectWithMaxConcurrent(maxConcurrent, selector, [resultSelector], [thisArg])` [Ⓢ]((https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/flatmapwithmaxconcurrent.js "View in source") This is an alias for the `selectWithMaxConcurrent` method. This can be one of the following: Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence with the given concurrency limit. ```js source.flatMapWithMaxConcurrent(10, function (x, i) { return Rx.Observable.range(0, x); }); source.flatMapWithMaxConcurrent(1, function (x, i) { return Promise.resolve(x + 1); }); source.flatMapWithMaxConcurrent(1, function (x, i) { return [x, i]; }); ``` Projects each element of an observable sequence or Promise to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence with the given concurrency limit. ```js source.flatMapWithMaxConcurrent(10, function (x, i) { return Rx.Observable.range(0, x); }, function (x, y, ix, iy) { return x + y + ix + iy; }); source.flatMapWithMaxConcurrent(1, function (x, i) { return Promise.resolve(x + i); }, function (x, y, ix, iy) { return x + y + ix + iy; }); source.flatMapWithMaxConcurrent(1, function (x, i) { return [x, i]; }, function (x, y, ix, iy) { return x + y + ix + iy; }); ``` Projects each element of the source observable sequence to the other observable sequence or Promise or array/iterable and merges the resulting observable sequences into one observable sequence with the given max concurrency limit. ```js source.flatMapWithMaxConcurrent(1, Rx.Observable.of(1,2,3)); source.flatMapWithMaxConcurrent(1, Promise.resolve(42)); source.flatMapWithMaxConcurrent(1, [1,2,3]); ``` #### Arguments 1. `maxConcurrent` *(`Number`)*: Maximum number of inner observable sequences being subscribed to concurrently. 2. `selector` *(`Function` | `Iterable` | `Promise`)*: An Object to project to the sequence or a transform function to apply to each element or an observable sequence to project each element from the source sequence onto. The selector is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 3. `[resultSelector]` *(`Function`)*: A transform function to apply to each element of the intermediate sequence. The resultSelector is called with the following information: 1. the value of the outer element 2. the value of the inner element 3. the index of the outer element 4. the index of the inner element 4. `[thisArg]` *(`Any`)*: If `resultSelector` is not `Function`, Object to use as `this` when executing `selector`. #### Returns *(`Observable`)*: An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. #### Example ```js var source = Rx.Observable.range(0, 5) .flatMapWithMaxConcurrent(2, function (x, i) { return Rx.Observable .interval(100) .take(x).map(function() { return i; }); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 2 // => Next: 3 // => Next: 4 // => Next: 3 // => Next: 4 // => Next: 4 // => Next: 4 // => Completed /* Using a promise */ var source = Rx.Observable.of(1,2,3,4) .flatMapWithMaxConcurrent(1, function (x, i) { return Promise.resolve(x + i); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 3 // => Next: 5 // => Next: 7 // => Completed /* Using an array */ var source = Rx.Observable.of(1,2,3) .flatMapWithMaxConcurrent( 1, function (x, i) { return [x,i]; }, function (x, y, ix, iy) { return x + y + ix + iy; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 2 // => Next: 5 // => Next: 5 // => Next: 8 // => Next: 8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/flatmapwithmaxconcurrent.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/flatmapwithmaxconcurrent.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete/) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental/) Unit Tests: - [`/tests/observable/flatmapwithmaxconcurrent.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/flatmapwithmaxconcurrent.js) RxJS-4.1.0/doc/api/core/operators/for.md000066400000000000000000000057741266736161100177640ustar00rootroot00000000000000### `Rx.Observable.for(sources, resultSelector, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/for.js "View in source") Concatenates the observable sequences or Promises obtained by running the specified result selector for each element in source. There is an alias for this method called `forIn` for browsers Next: 1 // => Next: 2 // => Next: 3 // => Completed /* Using Promises */ var array = [1, 2, 3]; var source = Rx.Observable.for( array, function (x) { return RSVP.Promise.resolve(x); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [/src/core/linq/observable/for.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/for.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - If using `rx.expermental.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/for.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/for.js) RxJS-4.1.0/doc/api/core/operators/forkjoin.md000066400000000000000000000053031266736161100210030ustar00rootroot00000000000000### `Rx.Observable.forkJoin(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/forkjoin.js "View in source") Runs all observable sequences in parallel and collect their last elements. #### Arguments 1. `args` *(Arguments | Array)*: An array or arguments of Observable sequences or Promises to collect the last elements for. 2. `resultSelector`: `Function` - The result selector from all the values produced. If not specified, `forkJoin` will return the results as an array. #### Returns *(`Observable`)*: An observable sequence with an array collecting the last elements of all the input sequences or the result of the result selector if specified. #### Example ```js /* Without a selector */ var source = Rx.Observable.forkJoin( Rx.Observable.return(42), Rx.Observable.range(0, 10), Rx.Observable.from([1,2,3]), RSVP.Promise.resolve(56) ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: [42, 9, 3, 56] // => Completed var source = Rx.Observable.forkJoin( Rx.Observable.just(42), Rx.Observable.just(56), function (x, y) { return x + y; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 98 // => Completed ``` ### Location File: - [`/src/core/linq/observable/forkjoin.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/forkjoin.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - If using `rx.experimental.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/forkjoin.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/forkjoin.js) RxJS-4.1.0/doc/api/core/operators/forkjoinproto.md000066400000000000000000000051521266736161100220710ustar00rootroot00000000000000### `Rx.Observable.prototype.forkJoin(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/forkjoinproto.js "View in source") Runs all observable sequences in parallel and collect their last elements. #### Arguments 1. `args`: `Arguments` | `Array` - An array or arguments of Observable sequences or Promises to collect the last elements for. 2. `resultSelector`: `Function` - The result selector from all the values produced. If not specified, `forkJoin` will return the results as an array. #### Returns *(`Observable`)*: An observable sequence with an array collecting the last elements of all the input sequences or the result of the result selector if specified. #### Example ```js // With a selector var source = Rx.Observable.just(42).forkJoin( Rx.Observable.range(0, 3), function (s1, s2) { return s1 + s2; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 44 // => Completed // Without a selector var source = Rx.Observable.just(42).forkJoin( Rx.Observable.range(0, 3)); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: [42, 2] // => Completed ``` ### Location File: - [`/src/core/linq/observable/forkjoinproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/forkjoinproto.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/forkjoin.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/forkjoin.js) RxJS-4.1.0/doc/api/core/operators/from.md000066400000000000000000000075361266736161100201370ustar00rootroot00000000000000### `Rx.Observable.from(iterable, [mapFn], [thisArg], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/from.js 'View in source') This method creates a new Observable sequence from an array-like or iterable object. #### Arguments 1. `iterable` *(`Array` | `Arguments` | `Iterable`)*: An array-like or iterable object to convert to an Observable sequence. 2. `[mapFn]` *(`Function`)*: Map function to call on every element of the array. 3. `[thisArg]` *(`Any`)*: The context to use calling the mapFn if provided. 4. `[scheduler=Rx.Scheduler.currentThread]` *(`Scheduler`)*: Scheduler to run the enumeration of the input sequence on. #### Returns *(`Observable`)*: The observable sequence whose elements are pulled from the given iterable sequence. #### Example ```js // Array-like object (arguments) to Observable function f() { return Rx.Observable.from(arguments); } f(1, 2, 3).subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Completed // Any iterable object... // Set var s = new Set(['foo', window]); Rx.Observable.from(s).subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: foo // => Next: window // => Completed // Map var m = new Map([[1, 2], [2, 4], [4, 8]]); Rx.Observable.from(m).subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: [1, 2] // => Next: [2, 4] // => Next: [4, 8] // => Completed // String Rx.Observable.from('foo').subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: f // => Next: o // => Next: o // => Completed // Using an arrow function as the map function to // manipulate the elements Rx.Observable.from([1, 2, 3], function (x) { return x + x; }).subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 4 // => Next: 6 // => Completed // Generate a sequence of numbers Rx.Observable.from({length: 5}, function(v, k) { return k; }).subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/from.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/from.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/from.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/from.js) RxJS-4.1.0/doc/api/core/operators/fromarray.md000066400000000000000000000041601266736161100211640ustar00rootroot00000000000000### ** DEPRECATED - Use Rx.Observable.from instead** `Rx.Observable.fromArray(array, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromarray.js "View in source") Converts an array to an observable sequence, using an optional scheduler to enumerate the array. #### Arguments 1. `array` *(Array)*: An array to convert to an Observable sequence. 2. `[scheduler=Rx.Scheduler.currentThread]` *(`Scheduler`)*: Scheduler to run the enumeration of the input sequence on. #### Returns *(`Observable`)*: The observable sequence whose elements are pulled from the given enumerable sequence. #### Example ```js var array = [1,2,3]; var source = Rx.Observable.fromArray(array); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/fromarray.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromarray.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/fromarray.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/fromarray.js) RxJS-4.1.0/doc/api/core/operators/fromcallback.md000066400000000000000000000054471266736161100216130ustar00rootroot00000000000000### `Rx.Observable.fromCallback(func, [context], [selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromcallback.js "View in source") Converts a callback function to an observable sequence. #### Arguments 1. `func` *(`Function`)*: Function with a callback as the last parameter to convert to an Observable sequence. 2. `[context]` *(`Any`)*: The context for the func parameter to be executed. If not specified, defaults to undefined. 3. `[selector]` *(`Function`)*: A selector which takes the arguments from the callback to produce a single item to yield on next. #### Returns *(`Function`)*: A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array if no selector given, else the object created by the selector function. #### Example ```js var fs = require('fs'), Rx = require('rx'); // Wrap fs.exists var exists = Rx.Observable.fromCallback(fs.exists); // Check if file.txt exists var source = exists('file.txt'); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: true // => Completed ``` ### Location File: - [`/src/core/linq/observable/fromcallback.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromcallback.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/fromcallback.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/fromcallback.js) RxJS-4.1.0/doc/api/core/operators/fromevent.md000066400000000000000000000075571266736161100212040ustar00rootroot00000000000000### `Rx.Observable.fromEvent(element, eventName, [selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromevent.js "View in source") Creates an observable sequence by adding an event listener to the matching DOMElement, jQuery element, Zepto Element, Angular element, Ember.js element or EventEmitter. Note that this uses the library approaches for jQuery, Zepto, Backbone.Marionette, AngularJS and Ember.js and falls back to native binding if not present. If you are using AMD you may need to include these libraries as dependencies of RxJs in your requirejs configuration file. RxJs will attempt to detect their presence when deciding which library to use. #### Arguments 1. `element` *(`Any`)*: The DOMElement, NodeList, jQuery element, Zepto Element, Angular element, Ember.js element or EventEmitter to attach a listener. For Backbone.Marionette this would be the application or an EventAggregator object. 2. `eventName` *(`String`)*: The event name to attach the observable sequence. 3. `[selector]` *(`Function`)*: A selector which takes the arguments from the event emitter so that you can return a single object. #### Returns *(`Observable`)*: An observable sequence of events from the specified element and the specified event. #### Example Wrapping an event from [jQuery](http://jquery.com) ```js var input = $('#input'); var source = Rx.Observable.fromEvent(input, 'click'); var subscription = source.subscribe( function (x) { console.log('Next: Clicked!'); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); input.trigger('click'); // => Next: Clicked! ``` Using in Node.js with using an `EventEmitter` with a selector function (which is not required). ```js var EventEmitter = require('events').EventEmitter, Rx = require('rx'); var eventEmitter = new EventEmitter(); var source = Rx.Observable.fromEvent( eventEmitter, 'data', function (foo, bar) { return { foo: foo, bar: bar }; }); var subscription = source.subscribe( function (x) { console.log('Next: foo -' + x.foo + ', bar -' + x.bar); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); eventEmitter.emit('data', 'baz', 'quux'); // => Next: foo - baz, bar - quux ``` ### Location File: - [`/src/core/linq/observable/fromevent.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromevent.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) | [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/fromevent-compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/fromevent-compat.js) - [`/tests/observable/fromevent.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/fromevent.js) RxJS-4.1.0/doc/api/core/operators/fromeventpattern.md000066400000000000000000000076661266736161100226030ustar00rootroot00000000000000### `Rx.Observable.fromEventPattern(addHandler, [removeHandler], [selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromeventpattern.js "View in source") Creates an observable sequence by using the addHandler and removeHandler functions to add and remove the handlers, with an optional selector function to project the event arguments. #### Arguments 1. `addHandler` *(`Function`)*: The DOMElement, NodeList or EventEmitter to attach a listener. 2. `[removeHandler]` *(`Function`)*: The optional function to remove a handler from an emitter. 3. `[selector]` *(`Function`)*: A selector which takes the arguments from the event handler to produce a single item to yield on next. #### Returns *(`Observable`)*: An observable sequence of events from the specified element and the specified event. #### Example Wrapping an event from [jQuery](http://jquery.com) ```js var input = $('#input'); var source = Rx.Observable.fromEventPattern( function add (h) { input.bind('click', h); }, function remove (h) { input.unbind('click', h); } ); var subscription = source.subscribe( function (x) { console.log('Next: Clicked!'); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); input.trigger('click'); // => Next: Clicked! ``` Wrapping an event from the [Dojo Toolkit](http://dojotoolkit.org) ```js require(['dojo/on', 'dojo/dom', 'rx', 'rx.async', 'rx.binding'], function (on, dom, rx) { var input = dom.byId('input'); var source = Rx.Observable.fromEventPattern( function add (h) { return on(input, 'click', h); }, function remove (_, signal) { signal.remove(); } ); var subscription = source.subscribe( function (x) { console.log('Next: Clicked!'); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); on.emit(input, 'click'); // => Next: Clicked! }); ``` Using in Node.js with using an `EventEmitter`. ```js var EventEmitter = require('events').EventEmitter, Rx = require('rx'); var e = new EventEmitter(); // Wrap EventEmitter var source = Rx.Observable.fromEventPattern( function add (h) { e.addListener('data', h); }, function remove (h) { e.removeListener('data', h); }, function (foo, bar) { return foo + ',' + bar; } ); var subscription = source.subscribe( function (result) { console.log('Next: %s', result); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); e.emit('data', 'foo', 'bar'); // => Next: foo,bar ``` ### Location File: - [/src/core/linq/observable/fromeventpattern.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromeventpattern.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using rx.async.js | rx.async.compat.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx`](https://www.npmjs.org/package/rx).lite.js | rx.lite.compat.js NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/fromeventpattern.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/fromeventpattern.js) RxJS-4.1.0/doc/api/core/operators/fromnodecallback.md000066400000000000000000000053711266736161100224550ustar00rootroot00000000000000### `Rx.Observable.fromNodeCallback(func, [context], [selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromnodecallback.js "View in source") Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. #### Arguments 1. `func` *(`Function`)*: Function with a callback as the last parameter to convert to an Observable sequence. 2. `[context]` *(`Any`)*: The context for the func parameter to be executed. If not specified, defaults to undefined. 3. `[selector]` *(`Function`)*: A selector which takes the arguments from callback sans the error to produce a single item to yield on next. #### Returns *(`Function`)*: A function which when applied, returns an observable sequence with the callback arguments as an array if no selector given, else the object created by the selector function on success, or an error if the first parameter is not falsy. #### Example ```js var fs = require('fs'), Rx = require('rx'); // Wrap fs.rename var rename = Rx.Observable.fromNodeCallback(fs.rename); // Rename file which returns no parameters except an error var source = rename('file1.txt', 'file2.txt'); var subscription = source.subscribe( function () { console.log('Next: success!'); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: success! // => Completed ``` ### Location File: - [/src/core/linq/observable/fromnodecallback.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/fromnodecallback.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx`](https://www.npmjs.org/package/rx).lite.js | rx.lite.compat.js NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/fromnodecallback.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/fromnodecallback.js) RxJS-4.1.0/doc/api/core/operators/frompromise.md000066400000000000000000000061151266736161100215260ustar00rootroot00000000000000### `Rx.Observable.fromPromise(promise)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/frompromise.js "View in source") Converts a Promises/A+ spec compliant Promise and/or ES2015 compliant Promise or a factory function which returns said Promise to an Observable sequence. #### Arguments 1. `promise|Function`: `Promise` - Promises/A+ spec compliant Promise to an Observable sequence or a function which returns a Promise. #### Returns `Observable`: An Observable sequence which wraps the existing promise success and failure. #### Example ```js // Create a factory function which returns a promise var promiseFn = function () { return Promise.resolve(42); }; var source = Rx.Observable.fromPromise(promiseFn); var subscription1 = source1.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // Create a promise which resolves 42 var promise1 = Promise.resolve(42) var source1 = Rx.Observable.fromPromise(promise1); var subscription1 = source1.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed // Create a promise which rejects with an error var promise2 = Promise.reject(new Error('reason')); var source2 = Rx.Observable.fromPromise(promise2); var subscription2 = source2.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Error: Error: reject ``` ### Location File: - [`/src/core/linq/observable/frompromise.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/frompromise.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/frompromise.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/frompromise.js) RxJS-4.1.0/doc/api/core/operators/generate.md000066400000000000000000000044451266736161100207620ustar00rootroot00000000000000### `Rx.Observable.generate(initialState, condition, iterate, resultSelector, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/generate.js "View in source") Generates an observable sequence in a manner similar to a for loop, using an optional scheduler to enumerate the values. #### Arguments 1. `initialState` *(`Any`)*: Initial state. 2. `condition` *(`Function`)*: Condition to terminate generation (upon returning false). 3. `iterate` *(`Function`)*: Iteration step function. 4. `resultSelector` *(`Function`)*: Selector function for results produced in the sequence. 5. `[scheduler=Rx.Scheduler.currentThread]` *(`Scheduler`)*: Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. #### Returns *(`Observable`)*: The generated sequence. #### Example ```js var source = Rx.Observable.generate( 0, function (x) { return x < 3; }, function (x) { return x + 1; }, function (x) { return x; } ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed ``` ### Location File: - [/src/core/linq/observable/generate.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/generate.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/generate.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/generate.js) RxJS-4.1.0/doc/api/core/operators/generatewithabsolutetime.md000066400000000000000000000050551266736161100242720ustar00rootroot00000000000000### `Rx.Observable.generateWithAbsoluteTime(initialState, condition, iterate, resultSelector, timeSelector, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/generatewithabsolutetime.js "View in source") Generates an observable sequence by iterating a state from an initial state until the condition fails. #### Arguments 1. `initialState` *(`Any`)*: Initial state. 2. `condition` *(`Function`)*: Condition to terminate generation (upon returning false). 3. `iterate` *(`Function`)*: Iteration step function. 4. `resultSelector` *(`Function`)*: Selector function for results produced in the sequence. 5. `timeSelector` *(`Function`)*: Time selector function to control the speed of values being produced each iteration, returning Date values. 6. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.timeout. #### Returns *(`Observable`)*: The generated sequence. #### Example ```js // Generate a value with an absolute time with an offset of 100ms multipled by value var source = Rx.Observable.generate( 1, function (x) { return x < 4; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return Date.now() + (100 * x); } ).timeInterval(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: {value: 1, interval: 100} // => Next: {value: 2, interval: 200} // => Next: {value: 3, interval: 300} // => Completed ``` ### Location File: - [/src/core/linq/observable/generatewithabsolutetime.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/generatewithabsolutetime.js) Dist: - [rx.time.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](https://www.npmjs.org/package/RxJS-All) - [`RxJS-Time`](https://www.npmjs.org/package/RxJS-Time) Unit Tests: - [/tests/observable/generatewithabsolutetime.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/generatewithabsolutetime.js) RxJS-4.1.0/doc/api/core/operators/generatewithrelativetime.md000066400000000000000000000050071266736161100242640ustar00rootroot00000000000000### `Rx.Observable.generateWithRelativeTime(initialState, condition, iterate, resultSelector, timeSelector, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/generatewithrelativetime.js "View in source") Generates an observable sequence by iterating a state from an initial state until the condition fails. #### Arguments 1. `initialState` *(`Any`)*: Initial state. 2. `condition` *(`Function`)*: Condition to terminate generation (upon returning false). 3. `iterate` *(`Function`)*: Iteration step function. 4. `resultSelector` *(`Function`)*: Selector function for results produced in the sequence. 5. `timeSelector` *(`Function`)*: Time selector function to control the speed of values being produced each iteration, returning integer values denoting milliseconds. 6. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.timeout. #### Returns *(`Observable`)*: The generated sequence. #### Example ```js // Generate a value with an absolute time with an offset of 100ms multipled by value var source = Rx.Observable.generateWithRelativeTime( 1, function (x) { return x < 4; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return 100 * x; } ).timeInterval(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: {value: 1, interval: 100} // => Next: {value: 2, interval: 200} // => Next: {value: 3, interval: 300} // => Completed ``` ### Location File: - [`/src/core/linq/observable/generatewithrelativetime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/generatewithrelativetime.js) Dist: - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - if `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](https://www.npmjs.org/package/RxJS-All) - [`RxJS-Time`](https://www.npmjs.org/package/RxJS-Time) Unit Tests: - [/tests/observable/generatewithrelativetime.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/generatewithrelativetime.js) RxJS-4.1.0/doc/api/core/operators/groupby.md000066400000000000000000000047431266736161100206600ustar00rootroot00000000000000### `Rx.Observable.prototype.groupBy(keySelector, [elementSelector], [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/groupby.js "View in source") Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. #### Arguments 1. `keySelector` *(`Function`)*: A function to extract the key for each element. 2. `[elementSelector]` *(`Function`)*: A function to map each source element to an element in an observable group. 3. `[comparer]` *(`Any`)*: Used to compare objects. If not specified, the default comparer is used. #### Returns *(`Observable`)*: A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. #### Example ```js var codes = [ { keyCode: 38}, // up { keyCode: 38}, // up { keyCode: 40}, // down { keyCode: 40}, // down { keyCode: 37}, // left { keyCode: 39}, // right { keyCode: 37}, // left { keyCode: 39}, // right { keyCode: 66}, // b { keyCode: 65} // a ]; var source = Rx.Observable.from(codes) .groupBy( function (x) { return x.keyCode; }, function (x) { return x.keyCode; }); var subscription = source.subscribe( function (obs) { // Print the count obs.count().subscribe(function (x) { console.log('Count: ' + x); }); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Count: 2 // => Count: 2 // => Count: 2 // => Count: 2 // => Count: 1 // => Count: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/groupby.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/groupby.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/groupby.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/groupby.js) RxJS-4.1.0/doc/api/core/operators/groupbyuntil.md000066400000000000000000000055771266736161100217420ustar00rootroot00000000000000### `Rx.Observable.prototype.groupByUntil(keySelector, [elementSelector], durationSelector, [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/groupbyuntil.js "View in source") Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. #### Arguments 1. `keySelector` *(`Function`)*: A function to extract the key for each element. 2. `[elementSelector]` *(`Function`)*: A function to map each source element to an element in an observable group. 3. `durationSelector` *(`Function`)*: A function to signal the expiration of a group. 4. `[comparer]` *(`Any`)*: Used to compare objects. If not specified, the default comparer is used. #### Returns *(`Observable`)*: A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encountered. #### Example ```js var codes = [ { keyCode: 38}, // up { keyCode: 38}, // up { keyCode: 40}, // down { keyCode: 40}, // down { keyCode: 37}, // left { keyCode: 39}, // right { keyCode: 37}, // left { keyCode: 39}, // right { keyCode: 66}, // b { keyCode: 65} // a ]; var source = Rx.Observable .for(codes, function (x) { return Rx.Observable.return(x).delay(1000); }) .groupByUntil( function (x) { return x.keyCode; }, function (x) { return x.keyCode; }, function (x) { return Rx.Observable.timer(2000); }); var subscription = source.subscribe( function (obs) { // Print the count obs.count().subscribe(function (x) { console.log('Count: ' + x); }); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Count: 2 // => Count: 2 // => Count: 1 // => Count: 1 // => Count: 1 // => Count: 1 // => Count: 1 // => Count: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/groupbyuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/groupbyuntil.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/groupbyuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/groupbyuntil.js) RxJS-4.1.0/doc/api/core/operators/groupjoin.md000066400000000000000000000056511266736161100212040ustar00rootroot00000000000000### `Rx.Observable.prototype.groupJoin(right, leftDurationSelector, rightDurationSelector, resultSelector)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/groupjoin.js "View in source") Correlates the elements of two sequences based on overlapping durations, and groups the results. #### Arguments 1. `right` *(`Observable`)*: The right observable sequence to join elements for. 2. `leftDurationSelector` *(`Function`)*: A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. 3. `rightDurationSelector` *(`Function`)*: A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. 4. `resultSelector` *(`Any`)*: A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. It has the following arguments 1. *(`Any`)* An element of the left sequence. 2. *(`Observable`)* An observable sequence with elements from the right sequence that overlap with the left sequence's element. #### Returns *(`Observable`)*: An observable sequence that contains result elements computed from source elements that have an overlapping duration. #### Example ```js var xs = Rx.Observable.interval(100) .map(function (x) { return 'first' + x; }); var ys = Rx.Observable.interval(100) .map(function (x) { return 'second' + x; }); var source = xs.groupJoin( ys, function () { return Rx.Observable.timer(0); }, function () { return Rx.Observable.timer(0); }, function (x, yy) { return yy.select(function (y) { return x + y; }) }).mergeAll().take(5); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: first0second0 // => Next: first1second1 // => Next: first2second2 // => Next: first3second3 // => Next: first4second4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/groupjoin.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/groupjoin.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/groupjoin.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/groupjoin.js) RxJS-4.1.0/doc/api/core/operators/if.md000066400000000000000000000054071266736161100175650ustar00rootroot00000000000000### `Rx.Observable.if(condition, thenSource, [elseSource])` ### `Rx.Observable.ifThen(condition, thenSource, [elseSource])` *DEPRECATED* [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/if.js "View in source") Determines whether an observable collection contains values. There is an alias for this method called `ifThen` for browsers Next: 42 // => Completed // The next example uses an elseSource var shouldRun = false; var source = Rx.Observable.if( function () { return shouldRun; }, Rx.Observable.return(42), Rx.Observable.return(56) ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 56 // => Completed ``` ### Location File: - [/src/core/linq/observable/if.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/if.js) Dist: - [rx.all.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [rx.experimental.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - If using `rx.experimental.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [/tests/observable/if.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/if.js) RxJS-4.1.0/doc/api/core/operators/ignoreelements.md000066400000000000000000000035031266736161100222020ustar00rootroot00000000000000### `Rx.Observable.prototype.ignoreElements()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ignoreelements.js "View in source") Ignores all elements in an observable sequence leaving only the termination messages. #### Returns *(`Observable`)*: An empty observable sequence that signals termination, successful or exceptional, of the source sequence. #### Example ```js var source = Rx.Observable.range(0, 10) .ignoreElements(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Completed ``` ### Location File: - [`/src/core/linq/observable/ignoreelements.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ignoreelements.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/ignoreelements.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/ignoreelements.js) RxJS-4.1.0/doc/api/core/operators/includes.md000066400000000000000000000050341266736161100207710ustar00rootroot00000000000000### `Rx.Observable.prototype.includes(searchElement, [fromIndex])` ### ### `Rx.Observable.prototype.contains(searchElement, [fromIndex])` **DEPRECATED** ### [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/includes.js "View in source") Determines whether an observable sequence includes a specified element with an optional from index. #### Arguments 1. `searchElement` *(`Any`)*: The value to locate in the source sequence. 2. `[fromIndex]` *(`Number`)*: The index to start the search. If not specified, defaults to 0. #### Returns *(`Observable`)*: An observable sequence containing a single element determining whether the source sequence includes an element that has the specified value with an optional from index. #### Example ```js /* Without an index */ var source = Rx.Observable.of(42) .includes(42); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: true // => Completed /* With an index */ var source = Rx.Observable.of(1,2,3) .includes(2, 1); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: true // => Completed ``` ### Location File: - [`/src/core/linq/observable/includes.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/includes.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/includes.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/includes.js) RxJS-4.1.0/doc/api/core/operators/indexof.md000066400000000000000000000046561266736161100206300ustar00rootroot00000000000000### `Rx.Observable.prototype.indexOf(searchElement, [fromIndex])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/indexof.js "View in source") Returns the first index at which a given element can be found in the observable sequence, or -1 if it is not present. #### Arguments 1. `searchElement` *(`Any`)*: The value to locate in the source sequence. 2. `[fromIndex]` *(`Number`)*: The index to start the search. If not specified, defaults to 0. #### Returns *(`Observable`)*: And observable sequence containing the first index at which a given element can be found in the observable sequence, or -1 if it is not present. #### Example ```js /* Without an index */ var source = Rx.Observable.of(42) .indexOf(42); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Completed /* With an index */ var source = Rx.Observable.of(1,2,3) .indexOf(2, 1); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Completed ``` ### Location File: - [`/src/core/linq/observable/indexof.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/indexof.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/indexof.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/indexof.js) RxJS-4.1.0/doc/api/core/operators/interval.md000066400000000000000000000044241266736161100210110ustar00rootroot00000000000000### `Rx.Observable.interval(period, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/interval.js "View in source") Returns an observable sequence that produces a value after each period. #### Arguments 1. `period` *(`Number`)*: Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). 2. `[scheduler]` *(Scheduler=Rx.Scheduler.timeout)*: Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. #### Returns *(`Observable`)*: An observable sequence that produces a value after each period. #### Example ```js var source = Rx.Observable .interval(500 /* ms */) .timeInterval() .take(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: {value: 0, interval: 500} // => Next: {value: 1, interval: 500} // => Next: {value: 2, interval: 500} // => Completed ``` ### Location File: - [/src/core/linq/observable/interval.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/interval.js) Dist: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - if `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](https://www.npmjs.org/package/RxJS-Time) - [`RxJS-Time`](https://www.npmjs.org/package/RxJS-Time) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/interval.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/interval.js) RxJS-4.1.0/doc/api/core/operators/isempty.md000066400000000000000000000042161266736161100206560ustar00rootroot00000000000000### `Rx.Observable.prototype.isEmpty()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/isempty.js "View in source") Determines whether an observable sequence is empty. #### Returns *(`Observable`)*: An observable sequence containing a single element determining whether the source sequence is empty. #### Example ```js /* Not empty */ var source = Rx.Observable.range(0, 5) .isEmpty() var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: false // => Completed /* Empty */ var source = Rx.Observable.empty() .isEmpty() var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: true // => Completed ``` ### Location File: - [`/src/core/linq/observable/isempty.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/isempty.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/isempty.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/isempty.js) RxJS-4.1.0/doc/api/core/operators/join.md000066400000000000000000000054131266736161100201230ustar00rootroot00000000000000### `Rx.Observable.prototype.join(right, leftDurationSelector, rightDurationSelector, resultSelector)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/join.js "View in source") Correlates the elements of two sequences based on overlapping durations. #### Arguments 1. `right` *(`Observable`)*: The right observable sequence to join elements for. 2. `leftDurationSelector` *(`Function`)*: A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. 3. `rightDurationSelector` *(`Function`)*: A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. 4. `resultSelector` *(`Any`)*: A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters are as follows: 1. *(`Any`)* Element from the left source for which the overlap occurs. 2. *(`Any`)* Element from the right source for which the overlap occurs. #### Returns *(`Observable`)*: An observable sequence that contains result elements computed from source elements that have an overlapping duration. #### Example ```js var xs = Rx.Observable.interval(100) .map(function (x) { return 'first' + x; }); var ys = Rx.Observable.interval(100) .map(function (x) { return 'second' + x; }); var source = xs .join( ys, function () { return Rx.Observable.timer(0); }, function () { return Rx.Observable.timer(0); }, function (x, y) { return x + y; } ) .take(5); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: first0second0 // => Next: first1second1 // => Next: first2second2 // => Next: first3second3 // => Next: first4second4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/join.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/join.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/join.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/join.js) RxJS-4.1.0/doc/api/core/operators/jortsort.md000066400000000000000000000034261266736161100210540ustar00rootroot00000000000000### `Rx.Observable.jortSort()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/jortsort.js "View in source") The `jortSort` method checks if your inputs are sorted. Note that this is only for a sequence with an end. See [http://jort.technology/](http://jort.technology/) for full details. #### Returns *(`Observable`)*: An observable which has a single value of `true` if sorted, else `false`. #### Example ```js // Sorted var source = Rx.Observable.of(1,2,3,4) .jortSort(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function ( ) { console.log('Completed'); } ); // => Next: true // => Completed // Non sorted var source = Rx.Observable.of(3,1,2,4) .jortSort(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function ( ) { console.log('Completed'); } ); // => Next: false // => Completed ``` ### Location File: - [`/src/core/linq/observable/jortsort.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/jortsort.js) Dist: - [`rx.sorting.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.sorting.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Unit Tests: - [`/tests/observable/jortsort.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/jortsort.js) RxJS-4.1.0/doc/api/core/operators/jortsortuntil.md000066400000000000000000000042411266736161100221240ustar00rootroot00000000000000### `Rx.Observable.jortSortUntil(other)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/jortsortuntil.js "View in source") The `jortSort` method checks if your inputs are sorted until another Observable sequence fires. See [http://jort.technology/](http://jort.technology/) for full details. #### Arguments 1. `other` *(`Observable`)*: The Observable sequence which will cause the termination of the sequence. #### Returns *(`Observable`)*: An observable which has a single value of `true` if sorted, else `false`. #### Example ```js var just = Rx.helpers.just; // Sorted var source = Rx.Observable.of(1,2,3,4) .flatMap(function (x) { return Rx.Observable.timer(1000).map(just(x)); }) .jortSortUntil(Rx.Observable.timer(3000)); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function ( ) { console.log('Completed'); } ); // => Next: true // => Completed // Non sorted var source = Rx.Observable.of(3,1,2,4) .flatMap(function (x) { return Rx.Observable.timer(1000).map(just(x)); }) .jortSortUntil(Rx.Observable.timer(3000)); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function ( ) { console.log('Completed'); } ); // => Next: false // => Completed ``` ### Location File: - [`/src/core/linq/observable/jortsortuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/jortsortuntil.js) Dist: - [`rx.sorting.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.sorting.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Unit Tests: - [`/tests/observable/jortsortuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/jortsortuntil.js) RxJS-4.1.0/doc/api/core/operators/last.md000066400000000000000000000074541266736161100201360ustar00rootroot00000000000000### `Rx.Observable.prototype.last([predicate], [thisArg])` ### `Rx.Observable.prototype.last([settings])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/last.js "View in source") Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element. If no element was found and no default value is specified, `onError` is called with an error, however if a default value was specified, it will be yielded via an `onNext` call. #### Arguments `Rx.Observable.prototype.last([predicate], [thisArg], [defaultValue])` 1. `[predicate]` *(`Function`)*: A predicate function to evaluate for elements in the source sequence. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. 3. `[defaultValue]` *(`Any`)*: Default value if no such element exists. `Rx.Observable.prototype.last([settings])` 1. `[settings]` *(`Object`)*: An object with the following fields - `[predicate]` *(`Function`)*: A predicate function to evaluate for elements in the source sequence. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed - `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. - `[defaultValue]` *(`Any`)*: Default value if no such element exists. #### Returns *(`Observable`)*: Sequence containing the last element in the observable sequence that satisfies the condition. #### Example ```js /* Default value */ var source = Rx.Observable.empty().last({defaultValue: 42}); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed /* Without predicate */ var source = Rx.Observable.range(0, 10).last(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 9 // => Completed /* With predicate */ var source = Rx.Observable.range(0, 10) .last(function (x, idx, obs) { return x % 2 === 0; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/last.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/last.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/last.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/last.js) RxJS-4.1.0/doc/api/core/operators/lastindexof.md000066400000000000000000000047321266736161100215070ustar00rootroot00000000000000### `Rx.Observable.prototype.lastIndexOf(searchElement, [fromIndex])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/lastindexof.js "View in source") Returns the last index at which a given element can be found in the observable sequence, or -1 if it is not present. #### Arguments 1. `searchElement` *(`Any`)*: The value to locate in the source sequence. 2. `[fromIndex]` *(`Number`)*: The index to start the search. If not specified, defaults to 0. #### Returns *(`Observable`)*: And observable sequence containing the last index at which a given element can be found in the observable sequence, or -1 if it is not present. #### Example ```js /* Without an index */ var source = Rx.Observable.of(1,2,3,1,2,3) .lastIndexOf(3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 5 // => Completed /* With an index */ var source = Rx.Observable.of(1,2,3,1,2,3) .lastIndexOf(2, 1); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 5 // => Completed ``` ### Location File: - [`/src/core/linq/observable/lastindexof.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/lastindexof.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/lastindexof.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/lastindexof.js) RxJS-4.1.0/doc/api/core/operators/let.md000066400000000000000000000045471266736161100177570ustar00rootroot00000000000000### `Rx.Observable.prototype.let(func)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/let.js "View in source") Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. This operator allows for a fluent style of writing queries that use the same sequence multiple times. There is an alias of `letBind` for browsers older than IE 9. #### Arguments 1. `func` *(`Function`)*: Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. #### Returns *(`Observable`)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. #### Example ```js var obs = Rx.Observable.range(1, 3); var source = obs.let(function (o) { return o.concat(o); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 1 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/let.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/let.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/let.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/let.js) RxJS-4.1.0/doc/api/core/operators/manyselect.md000066400000000000000000000043111266736161100213240ustar00rootroot00000000000000### `Rx.Observable.prototype.manySelect(selector, [scheduler])` ### `Rx.Observable.prototype.extend(selector, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/manyselect.js "View in source") Comonadic bind operator. #### Arguments 1. `selector` *(`Function`)*: A transform function to apply to each element. 2. `[scheduler=Rx.Scheduler.immediate]` *(`Scheduler`)*: Scheduler used to execute the operation. If not specified, defaults to the `Rx.Scheduler.immediate` scheduler. #### Returns *(`Observable`)*: An observable sequence which results from the comonadic bind operation. #### Example ```js var source = Rx.Observable.range(0, 3) .manySelect(function (ys) { return ys.first(); }) .mergeAll(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed ``` ### Location File: - [`/src/core/linq/observable/manyselect.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/manyselect.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/manyselect.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/manyselect.js) RxJS-4.1.0/doc/api/core/operators/materialize.md000066400000000000000000000036031266736161100214710ustar00rootroot00000000000000### `Rx.Observable.prototype.materialize()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/materialize.js "View in source") Materializes the implicit notifications of an observable sequence as explicit notification values. #### Returns *(`Observable`)*: An observable sequence containing the materialized notification values from the source sequence. #### Example ```js var source = Rx.Observable.of(1,2,3).materialize(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next OnNext(1) // => Next OnNext(2) // => Next OnNext(3) // => Next OnCompleted() // => Completed ``` ### Location File: - [`/src/core/linq/observable/materialize.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/materialize.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/materialize.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/materialize.js) RxJS-4.1.0/doc/api/core/operators/max.md000066400000000000000000000046601266736161100177540ustar00rootroot00000000000000### `Rx.Observable.prototype.max([comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/max.js "View in source") Returns the maximum value in an observable sequence according to the specified comparer. #### Arguments 1. `[comparer]` *(`Function`)*: Comparer used to compare elements. #### Returns *(`Observable`)*: An observable sequence containing a single element with the maximum element in the source sequence. #### Example ```js /* Without comparer */ var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8]) .max(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 9 // => Completed /* With a comparer */ function comparer (x, y) { if (x > y) { return 1; } else if (x < y) { return -1; } return 0; } var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8]) .max(comparer); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 9 // => Completed ``` ### Location File: - [`/src/core/linq/observable/max.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/max.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/max.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/max.js) RxJS-4.1.0/doc/api/core/operators/maxby.md000066400000000000000000000040761266736161100203100ustar00rootroot00000000000000### `Rx.Observable.prototype.maxBy(keySelector, [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/maxby.js "View in source") Returns the maximum value in an observable sequence according to the specified comparer. #### Arguments 1. `keySelector` *(`Function`)*: Key selector function. 2. `[comparer]` *(`Function`)*: Comparer used to compare elements. #### Returns *(`Observable`)*: An observable sequence containing a list of zero or more elements that have a maximum key value. #### Example ```js /* Without comparer */ var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8,9]) .maxBy(function (x) { return x; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 9,9 // => Completed ``` ### Location File: - [`/src/core/linq/observable/maxby.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/maxby.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/maxby.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/maxby.js) RxJS-4.1.0/doc/api/core/operators/merge.md000066400000000000000000000046411266736161100202650ustar00rootroot00000000000000### `Rx.Observable.merge([scheduler], ...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/merge.js "View in source") Merges all the observable sequences and Promises into a single observable sequence. #### Arguments 1. `[scheduler]` *(Scheduler=Rx.Scheduler.immediate)*: Scheduler to run the timer on. If not specified, Rx.Scheduler.immediate is used. 1. `args` *(Array|arguments)*: Observable sequences to merge into a single sequence. #### Returns *(`Observable`)*: An observable sequence that produces a value after each period. #### Example ```js var source1 = Rx.Observable.interval(100) .timeInterval() .pluck('interval'); var source2 = Rx.Observable.interval(150) .timeInterval() .pluck('interval'); var source = Rx.Observable.merge( source1, source2) .take(5); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 100 // => Next: 150 // => Next: 100 // => Next: 150 // => Next: 100 // => Completed ``` ### Location File: - [/src/core/linq/observable/merge.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/merge.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/merge.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/merge.js) RxJS-4.1.0/doc/api/core/operators/mergeall.md000066400000000000000000000037631266736161100207620ustar00rootroot00000000000000### `Rx.Observable.prototype.mergeAll()` ### ### `Rx.Observable.prototype.mergeObservable()` **DEPRECATED** ### [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/mergeall.js "View in source") Merges an observable sequence of observable sequences into an observable sequence. #### Returns *(`Observable`)*: The observable sequence that merges the elements of the inner sequences. #### Example ```js var source = Rx.Observable.range(0, 3) .map(function (x) { return Rx.Observable.range(x, 3); }) .mergeAll(); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 1 // => Next: 2 // => Next: 2 // => Next: 2 // => Next: 3 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/mergeall.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/mergeall.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/mergeall.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/mergeall.js) RxJS-4.1.0/doc/api/core/operators/mergedelayerror.md000066400000000000000000000053251266736161100223560ustar00rootroot00000000000000### `Rx.Observable.mergeDelayError(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/mergedelayerror.js "View in source") Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to receive all successfully emitted items from all of the source Observables without being interrupted by an error notification from one of them. This behaves like `Observable.prototype.mergeAll` except that if any of the merged Observables notify of an error via the Observer's `onError`, `mergeDelayError` will refrain from propagating that error notification until all of the merged Observables have finished emitting items. #### Arguments 1. `args` *(Array|arguments)*: Arguments or an array of Observable sequences to merge. #### Returns *(`Observable`)*: An Observable that emits all of the items emitted by the Observables emitted by the Observable #### Example ```js var source1 = Rx.Observable.of(1,2,3); var source2 = Rx.Observable.throwError(new Error('woops')); var source3 = Rx.Observable.of(4,5,6); var source = Rx.Observable.mergeDelayError(source1, source2, source3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => 1 // => 2 // => 3 // => 4 // => 5 // => 6 // => Error: Error: woops ``` ### Location File: - [/src/core/linq/observable/mergedelayerror.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/mergedelayerror.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/mergedelayerror.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/mergedelayerror.js) RxJS-4.1.0/doc/api/core/operators/mergeproto.md000066400000000000000000000057131266736161100213520ustar00rootroot00000000000000### `Rx.Observable.prototype.merge(maxConcurrent | other)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/perf/operators/mergeconcat.js "View in source") Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. Or merges two observable sequences into a single observable sequence. #### Arguments 1. `maxConcurrent` *(`Number`)*: Maximum number of inner observable sequences being subscribed to concurrently. 1. `other` *(`Observable`)*: The second observable sequence to merge into the first. #### Returns *(`Observable`)*: The observable sequence that merges the elements of the inner sequences. #### Example ```js /* Merge two sequences */ var source1 = Rx.Observable.interval(100) .map(function (x) { return 'First: ' + x; }); var source2 = Rx.Observable.interval(50) .map(function (x) { return 'Second: ' + x; }); var source = source1 .merge(source2) .take(5); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: Second: 0 // => Next: First: 0 // => Next: Second: 1 // => Next: Second: 2 // => Next: First: 1 // => Completed /* Use max concurrency */ var source = Rx.Observable.range(0, 3) .map(function (x) { return Rx.Observable.range(x, 3); }) .merge(1); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/perf/operators/mergeconcat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/perf/operators/mergeconcat.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/mergeproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/mergeproto.js) * * * RxJS-4.1.0/doc/api/core/operators/min.md000066400000000000000000000047351266736161100177550ustar00rootroot00000000000000### `Rx.Observable.prototype.min([comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/min.js "View in source") Returns the minimum element in an observable sequence according to the optional comparer else a default greater than less than check. #### Arguments 1. `[comparer]` *(`Function`)*: Comparer used to compare elements. #### Returns *(`Observable`)*: An observable sequence containing a single element with the minimum element in the source sequence. #### Example ```js /* Without comparer */ var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8]) .min(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Completed /* With a comparer */ function comparer (x, y) { if (x > y) { return 1; } else if (x < y) { return -1; } return 0; } var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8]) .min(comparer); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/min.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/min.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/min.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/min.js) RxJS-4.1.0/doc/api/core/operators/minby.md000066400000000000000000000041241266736161100203000ustar00rootroot00000000000000### `Rx.Observable.prototype.minBy(keySelector, [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/minby.js "View in source") Returns the elements in an observable sequence with the minimum key value according to the specified comparer. #### Arguments 1. `keySelector` *(`Function`)*: Key selector function. 2. `[comparer]` *(`Function`)*: Comparer used to compare elements. #### Returns *(`Observable`)*: An observable sequence containing a list of zero or more elements that have a minimum key value. #### Example ```js /* Without comparer */ var source = Rx.Observable.from([1,3,5,7,9,2,4,6,8,1]) .minBy(function (x) { return x; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1,1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/minby.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/minby.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/minby.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/minby.js) RxJS-4.1.0/doc/api/core/operators/multicast.md000066400000000000000000000061771266736161100212010ustar00rootroot00000000000000### `Rx.Observable.prototype.multicast(subject | subjectSelector, [selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/multicast.js "View in source") Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's invocation. For specializations with fixed subject types, see `publish`, `share`, `publishValue`, `shareValue`, `publishLast`, `replay`, and `shareReplay`. #### Arguments 1. `subjectSelector` *(`Function`)*: Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. 1. `subject` *(Subject)*: Subject to push source elements into. 2. `[selector]` *(`Function`)*: Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if `subjectSelector` is provided. #### Returns *(`Observable`)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. #### Example ```js var subject = new Rx.Subject(); var source = Rx.Observable.range(0, 3) .multicast(subject); var observer = Rx.Observer.create( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); } ); var subscription = source.subscribe(observer); subject.subscribe(observer); var connected = source.connect(); subscription.dispose(); // => Next: 0 // => Next: 0 // => Next: 1 // => Next: 1 // => Next: 2 // => Next: 2 // => Completed ``` ### Location File: - [`/src/core/linq/observable/multicast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/multicast.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/multicast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/multicast.js) RxJS-4.1.0/doc/api/core/operators/never.md000066400000000000000000000037421266736161100203060ustar00rootroot00000000000000### `Rx.Observable.never()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/never.js "View in source") Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). #### Returns *(`Observable`)*: An observable sequence whose observers will never get called. #### Example ```js // This will never produce a value, hence never calling any of the callbacks var source = Rx.Observable.never(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); ``` ### Location File: - [/src/core/linq/observable/never.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/never.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/never.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/never.js) RxJS-4.1.0/doc/api/core/operators/observeon.md000066400000000000000000000042331266736161100211650ustar00rootroot00000000000000### `Rx.Observable.prototype.observeOn(scheduler)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/observeon.js "View in source") Wraps the source sequence in order to run its observer callbacks on the specified scheduler. This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects that require to be run on a scheduler, use subscribeOn. #### Arguments 1. `scheduler` *(`Scheduler`)*: Scheduler to notify observers on. #### Returns *(`Observable`)*: The source sequence whose observations happen on the specified scheduler. #### Example ```js /* Change from immediate scheduler to timeout */ var source = Rx.Observable.return(42, Rx.Scheduler.immediate) .observeOn(Rx.Scheduler.timeout); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/observeon.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/observeon.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/observeon.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/observeon.js) RxJS-4.1.0/doc/api/core/operators/of.md000066400000000000000000000035141266736161100175700ustar00rootroot00000000000000### `Rx.Observable.of(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/of.js "View in source") Converts arguments to an observable sequence. #### Arguments 1. `args` *(Arguments)*: A list of arguments to turn into an Observable sequence. #### Returns *(`Observable`)*: The observable sequence whose elements are pulled from the given arguments. #### Example ```js var source = Rx.Observable.of(1,2,3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/of.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/of.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/of.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/of.js) * * * RxJS-4.1.0/doc/api/core/operators/ofarraychanges.md000066400000000000000000000025551266736161100221640ustar00rootroot00000000000000### `Rx.Observable.ofArrayChanges(array)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ofarraychanges.js "View in source") Creates an Observable sequence from changes to an array using `Array.observe`. #### Arguments 1. `array` *(`Array`)*: The array to observe changes using `Array.observe` #### Returns *(`Observable`)*: An observable sequence containing changes to an array from `Array.observe`. #### Example ```js var arr = [1,2,3]; var source = Rx.Observable.ofArrayChanges(arr); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); arr.push(4); // => Next: {type: "splice", object: Array[4], index: 3, removed: Array[0], addedCount: 1} ``` ### Location File: - [`/src/core/linq/observable/ofarraychanges.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ofarraychanges.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) Prerequisites: - None NPM Packages: - None NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) Unit Tests: - [`/tests/observable/ofarraychanges.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/ofarraychanges.js) RxJS-4.1.0/doc/api/core/operators/ofobjectchanges.md000066400000000000000000000025371266736161100223140ustar00rootroot00000000000000### `Rx.Observable.ofObjectChanges(obj)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ofobjectchanges.js "View in source") Creates an Observable sequence from changes to an object using `Object.observe`. #### Arguments 1. `array` *(`Array`)*: The object to observe changes using `Object.observe` #### Returns *(`Observable`)*: An observable sequence containing changes to an object from `Object.observe`. #### Example ```js var obj = {x: 1}; var source = Rx.Observable.ofObjectChanges(obj); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); obj.x = 42; // => Next: {type: "update", object: Object, name: "x", oldValue: 1} ``` ### Location File: - [`/src/core/linq/observable/ofobjectchanges.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/ofobjectchanges.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) Prerequisites: - None NPM Packages: - None NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) Unit Tests: - [`/tests/observable/ofarraychanges.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/ofobjectchanges.js) RxJS-4.1.0/doc/api/core/operators/ofwithscheduler.md000066400000000000000000000040211266736161100223550ustar00rootroot00000000000000### `Rx.Observable.ofWithScheduler([scheduler], ...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/of.js "View in source") Converts arguments to an observable sequence, using an optional scheduler to enumerate the arguments. #### Arguments 1. `[scheduler]` *(Scheduler)*: An optional scheduler used to enumerate the arguments. 2. `args` *(Arguments)*: A list of arguments to turn into an Observable sequence. #### Returns *(`Observable`)*: The observable sequence whose elements are pulled from the given arguments. #### Example ```js var source = Rx.Observable.ofWithScheduler(Rx.Scheduler.timeout, 1,2,3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/of.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/of.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/of.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/of.js) RxJS-4.1.0/doc/api/core/operators/onerrorresumenext.md000066400000000000000000000041051266736161100227670ustar00rootroot00000000000000### `Rx.Observable.onErrorResumeNext(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/onerrorresumenext.js "View in source") Continues an observable sequence that is terminated normally or by an exception with the next observable sequence or Promise. ### Arguments 1. `args` *(Array|arguments)*: Observable sequences to concatenate. #### Returns *(`Observable`)*: An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. #### Example ```js var source1 = Rx.Observable.throw(new Error('error 1')); var source2 = Rx.Observable.throw(new Error('error 2')); var source3 = Rx.Observable.return(42); var source = Rx.Observable.onErrorResumeNext(source1, source2, source3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [/src/core/linq/observable/onerrorresumenext.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/onerrorresumenext.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [/tests/observable/onerrorresumenext.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/onerrorresumenext.js) RxJS-4.1.0/doc/api/core/operators/onerrorresumenextproto.md000066400000000000000000000040451266736161100240560ustar00rootroot00000000000000### `Rx.Observable.prototype.onErrorResumeNext(second)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/onerrorresumenextproto.js "View in source") Continues an observable sequence that is terminated normally or by an exception with the next observable sequence or Promise. #### Arguments 1. `second` *(`Observable` | `Promise`)*: Second observable sequence used to produce results after the first sequence terminates. #### Returns *(`Observable`)*: An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. #### Example ```js var source = Rx.Observable.throw(new Error()) .onErrorResumeNext(Rx.Observable.return(42)); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/onerrorresumenextproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/onerrorresumenextproto.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/onerrorresumenext.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/onerrorresumenext.js) RxJS-4.1.0/doc/api/core/operators/pairs.md000066400000000000000000000051411266736161100203000ustar00rootroot00000000000000### `Rx.Observable.pairs(obj, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/pairs.js "View in source") Convert an object into an observable sequence of [key, value] pairs using an optional `Scheduler` to enumerate the object. #### Arguments 1. `obj` *(Object)*: The object to inspect and turn into an Observable sequence. 2. `[scheduler]` *(`Scheduler`)*: Scheduler to run the enumeration of the input sequence on. If not specified, defaults to `Rx.Scheduler.currentThread` #### Returns *(`Observable`)*: An observable sequence of [key, value] pairs from the object. #### Example ```js // Using Standard JavaScript var obj = { foo: 42, bar: 56, baz: 78 }; var source = Rx.Observable.pairs(obj); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: ['foo', 42] // => Next: ['bar', 56] // => Next: ['baz', 78] // => Completed ``` ES6 makes for an even nicer experience such as: ```es6 let obj = { foo: 42, bar: 56, baz: 78 }; let source = Rx.Observable.pairs(obj); let subscription = source.subscribe( x => { var [key, value] = x; console.log('Key:', key, 'Value:', value); }, err => { console.log('Error: %s', err); }, => () { console.log('Completed'); }); // => Key: 'foo' Value: 42 // => Key: 'bar' Value: 56 // => Key: 'baz' Value: 78 // => Completed ``` ### Location File: - [`/src/core/linq/observable/pairs.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/pairs.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/pairs.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/pairs.js) RxJS-4.1.0/doc/api/core/operators/pairwise.md000066400000000000000000000047571266736161100210210ustar00rootroot00000000000000### `Rx.Observable.prototype.pairwise()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/pairwise.js "View in source") Triggers on the second and subsequent triggerings of the input observable. The Nth triggering of the input observable passes the arguments from the N-1th and Nth triggering as a pair. #### Returns *(`Observable`)*: An observable that triggers on successive pairs of observations from the input observable as an array. #### Example ```js var r = Rx.Observable.range(1, 4); var source = r.pairwise(); var subscription = source.subscribe( function (x) { console.log('Next: ' + JSON.stringify(x)); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: [1,2] // => Next: [2,3] // => Next: [3,4] // => Completed ``` #### Example (Draw line) ```html ``` ```js var canvas = document.getElementById("canvas"); var g = canvas.getContext("2d"); g.rect(0, 0, canvas.width, canvas.height); g.fillStyle = "rgb(0,0,0)"; g.fill(); var mouseMove = Rx.Observable.fromEvent(document, 'mousemove'); var mouseDown = Rx.Observable.fromEvent(document.getElementById('canvas'), 'mousedown'); var mouseUp = Rx.Observable.fromEvent(document.getElementById('canvas'), 'mouseup'); mouseDown.flatMap(function(ev) { return mouseMove.map(function(ev) { return { x: ev.clientX, y: ev.clientY }; }).pairwise().takeUntil(mouseUp); }).subscribe(function(pos) { g.beginPath(); g.lineWidth = 1; g.strokeStyle = "rgb(255, 0, 0)"; g.moveTo(pos[0].x, pos[0].y); g.lineTo(pos[1].x, pos[1].y); g.stroke(); }); ``` ### Location File: - [`/src/core/linq/observable/pairwise.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/pairwise.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/pairwise.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/pairwise.js) RxJS-4.1.0/doc/api/core/operators/partition.md000066400000000000000000000067161266736161100212040ustar00rootroot00000000000000### `Rx.Observable.prototype.partition(predicate, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/partition.js "View in source") Returns two observables which partition the observations of the source by the given function. The first will trigger observations for those values for which the predicate returns true. The second will trigger observations for those values where the predicate returns false. The predicate is executed once for each subscribed observer. Both also propagate all error observations arising from the source and each completes when the source completes. #### Arguments 1. `predicate` *(`Function`)*: Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Array`)*: An array of observables. The first triggers when the predicate returns true, and the second triggers when the predicate returns false. #### Example An example using ES6 syntax: ```es6 let [odds, evens] = Rx.Observable.range(0, 10) .partition(x => x % 2 === 0); let subscription1 = evens.subscribe( x => console.log('Evens: %s', x), e => console.log('Error: %s', e), () => console.log('Completed') ); // => Evens: 0 // => Evens: 2 // => Evens: 4 // => Evens: 6 // => Evens: 8 // => Completed let subscription2 = odds.subscribe( x => console.log('Odds: %s', x), e => console.log('Error: %s', e), () => console.log('Completed') ); // => Odds: 1 // => Odds: 3 // => Odds: 5 // => Odds: 7 // => Odds: 9 // => Completed ``` #### Example ```html

``` ```js var sourceElement = document.getElementById("dom-event-source"); var elements = ["#dom-event-output .left p", "#dom-event-output .right p"].map(document.querySelector.bind(document)); var elementRect = sourceElement.getBoundingClientRect(); var observers = Rx.Observable.fromEvent(sourceElement, 'mousemove') .map(e => ({ x: Math.floor(e.clientX - elementRect.left), y: Math.floor(e.clientY - elementRect.top) }) ).partition(pos => pos.x < sourceElement.clientWidth / 2); elements.forEach((n, i, a) => observers[i].subscribe(displayCoordinates.bind(displayCoordinates, n))); function displayCoordinates(element, pos) { element.textContent = `(x: ${pos.x}, y: ${pos.y})`; } ``` ### Location File: - [`/src/core/linq/observable/partition.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/partition.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/partition.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/partition.js) RxJS-4.1.0/doc/api/core/operators/pausable.md000066400000000000000000000045471266736161100207670ustar00rootroot00000000000000### `Rx.Observable.prototype.pausable(pauser)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/backpressure/pausable.js "View in source") Pauses the underlying observable sequence based upon the observable sequence which yields true/false. Note that this only works on hot observables. #### Arguments 1. `pauser` *(`Observable`)*: The observable sequence used to pause the underlying sequence. #### Returns *(`Observable`)*: The observable sequence which is paused based upon the pauser. #### Example ```js var pauser = new Rx.Subject(); var source = Rx.Observable.fromEvent(document, 'mousemove').pausable(pauser); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // To begin the flow pauser.onNext(true); // or source.resume(); // To pause the flow at any point pauser.onNext(false); // or source.pause(); ``` ### Location File: - [`/src/core/backpressure/pausable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/backpressure/pausable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [rx.backpressure.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.backpressure.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.backpressure.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-BackPressure`](http://www.nuget.org/packages/RxJS-BackPressure/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/pausable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/pausable.js) RxJS-4.1.0/doc/api/core/operators/pausablebuffered.md000066400000000000000000000047731266736161100224730ustar00rootroot00000000000000### `Rx.Observable.prototype.pausableBuffered(pauser)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/backpressure/pausablebuffered.js "View in source") Pauses the underlying observable sequence based upon the observable sequence which yields true/false, and yields the values that were buffered while paused. Note that this only works on hot observables. #### Arguments 1. `pauser` *(`Observable`)*: The observable sequence used to pause the underlying sequence. #### Returns *(`Observable`)*: The observable sequence which is paused based upon the pauser. #### Example ```js var pauser = new Rx.Subject(); var source = Rx.Observable.interval(1000).pausableBuffered(pauser); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // To begin the flow pauser.onNext(true); // or source.resume(); // To pause the flow at any point pauser.onNext(false); // or source.pause(); // Resume the flow which empties the queue from when you last paused pauser.onNext(true); // or source.resume(); ``` ### Location File: - [`/src/core/backpressure/pausablebuffered.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/backpressure/pausablebuffered.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [rx.backpressure.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.backpressure.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.backpressure.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-BackPressure`](http://www.nuget.org/packages/RxJS-BackPressure/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/pausablebuffered.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/pausablebuffered.js) RxJS-4.1.0/doc/api/core/operators/pluck.md000066400000000000000000000052061266736161100203020ustar00rootroot00000000000000### `Rx.Observable.prototype.pluck(property)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/pluck.js#L10 "View in source") Returns an Observable containing the value of a specified nested property from all elements in the Observable sequence. If a property can't be resolved, it will return `undefined` for that value. #### Arguments 1. `property` *(`String`)*: The property or properties to pluck. `pluck` accepts an unlimited number of nested property parameters. #### Returns *(`Observable`)*: Returns a new Observable sequence of property values. #### Example ```js var source = Rx.Observable .from([ { value: 0 }, { value: 1 }, { value: 2 } ]) .pluck('value'); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed // Using nested properties: var source = Rx.Observable .from([ { valueA: { valueB: { valueC: 0 }}}, { valueA: { valueB: { valueC: 1 }}}, { valueA: { valueB: 2 }}, ]) .pluck('valueA', 'valueB', 'valueC'); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: undefined // => Completed ``` ### Location File: - [`/src/core/linq/observable/pluck.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/pluck.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/pluck.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/pluck.js) RxJS-4.1.0/doc/api/core/operators/publish.md000066400000000000000000000072001266736161100206260ustar00rootroot00000000000000### `Rx.Observable.prototype.publish([selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/publish.js "View in source") Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. This operator is a specialization of `multicast` using a regular `Rx.Subject`. #### Arguments 1. `[selector]` *(`Function`)*: Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. #### Returns *(ConnectableObservable)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. #### Example ```js /* Without publish */ var interval = Rx.Observable.interval(1000); var source = interval .take(2) .do(function (x) { console.log('Side effect'); }); source.subscribe(createObserver('SourceA')); source.subscribe(createObserver('SourceB')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Side effect // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Completed // => Side effect // => Next: SourceB1 // => Completed /* With publish */ var interval = Rx.Observable.interval(1000); var source = interval .take(2) .doAction(function (x) { console.log('Side effect'); }); var published = source.publish(); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); var connection = published.connect(); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/publish.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/publish.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/publish.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/publish.js) RxJS-4.1.0/doc/api/core/operators/publishlast.md000066400000000000000000000056151266736161100215220ustar00rootroot00000000000000### `Rx.Observable.prototype.publishLast([selector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/publishlast.js "View in source") Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. This operator is a specialization of `multicast` using a `Rx.AsyncSubject`. #### Arguments 1. `[selector]` *(`Function`)*: Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. #### Returns *(ConnectableObservable)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .doAction(function (x) { console.log('Side effect'); }); var published = source.publishLast(); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); var connection = published.connect(); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Side effect // => Next: SourceA1 // => Completed // => Next: SourceB1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/publishlast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/publishlast.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/publishlast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/publishlast.js) RxJS-4.1.0/doc/api/core/operators/publishvalue.md000066400000000000000000000061411266736161100216660ustar00rootroot00000000000000### `Rx.Observable.prototype.publishValue([selector], initialValue)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/publishvalue.js "View in source") Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. This operator is a specialization of `multicast` using a `Rx.BehaviorSubject`. #### Arguments 1. `[selector]`: `Function` - Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. 2. `initialValue`: `Any` - Initial value received by observers upon subscription. #### Returns `ConnectableObservable` - An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function and initial value. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .tap(function (x) { console.log('Side effect'); }); var published = source.publishValue(42); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); var connection = published.connect(); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Next: SourceA42 // => Next: SourceB42 // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed // => Completed ``` ### Location File: - [`/src/core/linq/observable/publishvalue.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/publishvalue.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/publishvalue.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/publishvalue.js) RxJS-4.1.0/doc/api/core/operators/range.md000066400000000000000000000045021266736161100202560ustar00rootroot00000000000000### `Rx.Observable.range(start, count, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/range.js "View in source") Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. ### Arguments 1. `start` *(`Number`)*: The value of the first integer in the sequence. 2. `count` *(`Number`)*: The number of sequential integers to generate. 3. `[scheduler=Rx.Scheduler.currentThread]` *(`Scheduler`)*: Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. #### Returns *(`Observable`)*: An observable sequence that contains a range of sequential integral numbers. #### Example ```js var source = Rx.Observable.range(0, 3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed ``` ### Location File: - [/src/core/linq/observable/range.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/range.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/range.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/range.js) RxJS-4.1.0/doc/api/core/operators/reduce.md000066400000000000000000000055521266736161100204370ustar00rootroot00000000000000### `Rx.Observable.prototype.reduce(accumulator, [seed])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/reduce.js "View in source") Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. For aggregation behavior with incremental intermediate results, see the [`scan`](scan.md) method. #### Arguments 1. `accumulator` *(`Function`)*: An accumulator function to be invoked on each element with the following arguments: 1. `acc`: `Any` - the accumulated value. 2. `currentValue`: `Any` - the current value 3. `index`: `Number` - the current index 4. `source`: `Observable` - the current observable instance 2. `[seed]` *(`Any`)*: The initial accumulator value. #### Returns *(`Observable`)*: An observable sequence containing a single element with the final accumulator value. #### Example ```js /* With a seed */ var source = Rx.Observable.range(1, 3) .reduce(function (acc, x, idx, source) { return acc * x; }, 1) var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 6 // => Completed /* Without a seed */ var source = Rx.Observable.range(1, 3) .reduce(function (acc, x, idx, source) { return acc * x; }) var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 6 // => Completed ``` ### Location File: - [`/src/core/linq/observable/reduce.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/reduce.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/reduce.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/reduce.js) RxJS-4.1.0/doc/api/core/operators/refcount.md000066400000000000000000000050731266736161100210130ustar00rootroot00000000000000### `ConnectableObservable.prototype.refCount()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/connectableobservable.js "View in source") Returns an observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. #### Returns *(`Observable`)*: An observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .doAction(function (x) { console.log('Side effect'); }); var published = source.publish().refCount(); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed // => Completed ``` ### Location File: - [`/src/core/linq/observable/connectableobservable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/connectableobservable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) Unit Tests: - [`/tests/observable/connectableobservable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/connectableobservable.js) RxJS-4.1.0/doc/api/core/operators/repeat.md000066400000000000000000000045551266736161100204520ustar00rootroot00000000000000### `Rx.Observable.repeat(value, [repeatCount], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/repeat.js "View in source") Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. ### Arguments 1. `value` *(`Any`)*: Element to repeat. 2. `[repeatCount=-1]` *(`Number`)*:Number of times to repeat the element. If not specified, repeats indefinitely. 3. `[scheduler=Rx.Scheduler.immediate]` *(`Scheduler`)*: Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. #### Returns *(`Observable`)*: An observable sequence that repeats the given element the specified number of times. #### Example ```js var source = Rx.Observable.repeat(42, 3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); //=> Next: 42 // => Next: 42 // => Next: 42 // => Completed ``` ### Location File: - [/src/core/linq/observable/repeat.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/repeat.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/repeat.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/repeat.js) RxJS-4.1.0/doc/api/core/operators/repeatproto.md000066400000000000000000000040751266736161100215330ustar00rootroot00000000000000### `Rx.Observable.prototype.repeat(repeatCount)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/repeatproto.js "View in source") Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. #### Arguments 1. `repeatCount` *(`Number`)*: Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. #### Returns *(`Observable`)*: The observable sequence producing the elements of the given sequence repeatedly. #### Example ```js var source = Rx.Observable.range(1, 3) .repeat(2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 1 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/repeatproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/repeatproto.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/repeatproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/repeatproto.js) RxJS-4.1.0/doc/api/core/operators/repeatwhen.md000066400000000000000000000050231266736161100213230ustar00rootroot00000000000000### `Rx.Observable.prototype.repeatWhen(notificationHandler)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/repeatwhen.js "View in source") Returns an Observable that emits the same values as the source Observable with the exception of an onCompleted. An onCompleted notification from the source will result in the emission of a void item to the Observable provided as an argument to the notificationHandler function. If that Observable calls onComplete or onError then repeatWhen will call onCompleted or onError on the child subscription. Otherwise, this Observable will resubscribe to the source observable. #### Arguments 1. `notificationHandler`: `Function` - receives an Observable of notifications with which a user can complete or error, aborting the repeat. #### Returns `Observable`: Observable modified with repeat logic #### Example: Delayed repeat ```js var source = Rx.Observable.just(42) .repeatWhen(function(notifications) { return notifications.scan( function (acc, x) { return acc + x; }, 0) .delay(200) .takeWhile(function (count) { return count < 2; }); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // 200 ms pass // => Next: 42 // 200 ms pass // => Completed ``` ### Location File: - [`/src/core/linq/observable/repeatwhen.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/repeatwhen.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/repeatwhen.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/repeatwhen.js) RxJS-4.1.0/doc/api/core/operators/replay.md000066400000000000000000000066601266736161100204650ustar00rootroot00000000000000### `Rx.Observable.prototype.replay([selector], [bufferSize], [window], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/replay.js "View in source") Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. This operator is a specialization of `multicast` using a `Rx.ReplaySubject`. #### Arguments 1. `[selector]` *(`Function`)*: Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. 2. `[bufferSize]` *(`Number`)*: Maximum element count of the replay buffer. 3. `[window]` *(`Number`)*: Maximum time length of the replay buffer in milliseconds. 4. `[scheduler]` *(`Scheduler`)*: Scheduler where connected observers within the selector function will be invoked on. #### Returns *(`Observable`)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .do(function (x) { console.log('Side effect'); }); var published = source .replay(function (x) { return x.take(2).repeat(2); }, 3); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Side effect // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceA0 // => Next: SourceA1 // => Completed // => Side effect // => Next: SourceB1 // => Next: SourceB0 // => Next: SourceB1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/replay.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/replay.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/replay.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/replay.js) RxJS-4.1.0/doc/api/core/operators/retry.md000066400000000000000000000044701266736161100203330ustar00rootroot00000000000000### `Rx.Observable.prototype.retry([retryCount])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/retry.js "View in source") Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. Note if you encounter an error and want it to retry once, then you must use .retry(2). #### Arguments 1. `[retryCount]` *(`Number`)*: Number of times to retry the sequence. If not provided, retry the sequence indefinitely. #### Returns *(`Observable`)*: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. #### Example ```js var count = 0; var source = Rx.Observable.interval(1000) .selectMany(function () { if (++count < 2) { return Rx.Observable.throw(new Error()); } return Rx.Observable.return(42); }) .retry(3) .take(1); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/retry.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/retry.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/retry.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/retry.js) RxJS-4.1.0/doc/api/core/operators/retrywhen.md000066400000000000000000000110451266736161100212110ustar00rootroot00000000000000### `Rx.Observable.prototype.retryWhen(notifier)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/retrywhen.js "View in source") Repeats the source observable sequence on error when the notifier emits a next value. If the source observable errors and the notifier completes, it will complete the source sequence. #### Arguments 1. `notificationHandler` *(`Function`)*: A handler that is passed an observable sequence of errors raised by the source observable and returns an observable that either continues, completes or errors. This behavior is then applied to the source observable. #### Returns *(`Observable`)*: An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully or is notified to error or complete. #### Example: Delayed retry ```js var source = Rx.Observable.interval(1000) .map(function(n) { if(n === 2) { throw 'ex'; } return n; }) .retryWhen(function(errors) { return errors.delay(200); }) .take(6); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // 200 ms pass // => Next: 0 // => Next: 1 // 200 ms pass // => Next: 0 // => Next: 1 // => Completed ``` #### Example: Erroring an observable after 2 failures ```js var source = Rx.Observable.interval(1000) .map(function(n) { if(n === 2) { throw 'ex'; } return n; }) .retryWhen(function(errors) { return errors.scan(function(errorCount, err) { if(errorCount >= 2) { throw err; } return errorCount + 1; }, 0); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 0 // => Next: 1 // => Error: 'ex' ``` #### Example: Completing an observable after 2 failures ```js var source = Rx.Observable.interval(1000) .map(function(n) { if(n === 2) { throw 'ex'; } return n; }) .retryWhen(function(errors) { return errors.scan(function(errorCount, err) { return errorCount + 1; }, 0).takeWhile(function(errorCount) { return errorCount < 2; }); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 0 // => Next: 1 // => Completed ``` #### Example: An incremental back-off strategy for handling errors ```js Rx.Observable.create(function (o) { console.log("subscribing"); o.onError(new Error("always fails")); }).retryWhen(function (attempts) { return Rx.Observable.range(1, 3).zip(attempts, function (i) { return i; }).flatMap(function (i) { console.log("delay retry by " + i + " second(s)"); return Rx.Observable.timer(i * 1000); }); }).subscribe(); /* subscribing delay retry by 1 second(s) subscribing delay retry by 2 second(s) subscribing delay retry by 3 second(s) subscribing */ ``` ### Location File: - [`/src/core/linq/observable/retrywhen.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/retrywhen.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/retrywhen.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/retrywhen.js) RxJS-4.1.0/doc/api/core/operators/return.md000066400000000000000000000044511266736161100205040ustar00rootroot00000000000000### `Rx.Observable.return(value, [scheduler])` ### ### `Rx.Observable.just(value, [scheduler])` ### [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/return.js "View in source") Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. There is an alias called `returnValue` for browsers Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/return.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/return.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/return.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/return.js) RxJS-4.1.0/doc/api/core/operators/sample.md000066400000000000000000000050341266736161100204440ustar00rootroot00000000000000### `Rx.Observable.prototype.sample(interval | sampleObservable)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sample.js "View in source") Samples the observable sequence at each interval. #### Arguments 1. `[interval]` *(`Number`)*: Interval at which to sample (specified as an integer denoting milliseconds) 2. `[sampleObservable]` *(`Observable`)*: Sampler Observable. 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: Sampled observable sequence. #### Example ```js /* With an interval time */ var source = Rx.Observable.interval(1000) .sample(5000) .take(2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 3 // => Next: 8 // => Completed /* With a sampler */ var source = Rx.Observable.interval(1000) .sample(Rx.Observable.interval(5000)) .take(2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 3 // => Next: 8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/sample.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sample.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/sample.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/sample.js) RxJS-4.1.0/doc/api/core/operators/scan.md000066400000000000000000000056451266736161100201170ustar00rootroot00000000000000### `Rx.Observable.prototype.scan(accumulator, [seed])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/scan.js "View in source") Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. For aggregation behavior with no intermediate results, see `Rx.Observable#reduce`. Note the `Rx.Observable.prototype.scan([seed], accumulator)` has been removed as per v3.0 and replaced with `Rx.Observable.prototype.scan(accumulator, [seed])`. #### Arguments 1. `accumulator` *(`Function`)*: An accumulator function to be invoked on each element with the following arguments: 1. `acc`: `Any` - the accumulated value. 2. `currentValue`: `Any` - the current value 3. `index`: `Number` - the current index 4. `source`: `Observable` - the current observable instance 2. `[seed]` *(`Any`)*: The initial accumulator value. #### Returns *(`Observable`)*: An observable sequence which results from the comonadic bind operation. #### Example ```js /* Without a seed */ var source = Rx.Observable.range(1, 3) .scan(function (acc, x, i, source) { return acc + x; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 3 // => Next: 6 // => Completed /* With a seed */ var source = Rx.Observable.range(1, 3) .scan(function (acc, x, i, source) { return acc * x; }, 1); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 6 // => Completed ``` ### Location File: - [`/src/core/linq/observable/scan.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/scan.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/scan.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/scan.js) RxJS-4.1.0/doc/api/core/operators/select.md000066400000000000000000000050021266736161100204350ustar00rootroot00000000000000### `Rx.Observable.prototype.select(selector, [thisArg])` ### `Rx.Observable.prototype.map(selector, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/select.js "View in source") Projects each element of an observable sequence into a new form by incorporating the element's index. This is an alias for the `select` method. #### Arguments 1. `selector` *(`Function` | `Object`)*: Transform function to apply to each source element or an element to yield. If selector is a function, it is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Observable`)*: An observable sequence which results from the comonadic bind operation. #### Example ```js // Using a value var md = Rx.Observable.fromEvent(document, 'mousedown').map(true); var mu = Rx.Observable.fromEvent(document, 'mouseup').map(false); // Using a function var source = Rx.Observable.range(1, 3) .select(function (x, idx, obs) { return x * x; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 4 // => Next: 9 // => Completed ``` ### Location File: - [`/src/core/linq/observable/select.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/select.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/select.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/select.js) RxJS-4.1.0/doc/api/core/operators/selectmany.md000066400000000000000000000127751266736161100213410ustar00rootroot00000000000000### `Rx.Observable.prototype.flatMap(selector, [resultSelector])` ### `Rx.Observable.prototype.selectMany(selector, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/selectmany.js "View in source") Aliases: `Rx.Observable.prototype.flatMap` and `Rx.Observable.prototype.selectMany` are equivalent. One of the following: Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences or Promises or array/iterable into one observable sequence. ```js source.selectMany(function (x, i) { return Rx.Observable.range(0, x); }); source.selectMany(function (x, i) { return Promise.resolve(x + 1); }); source.selectMany(function (x, i) { return [x, i]; }); ``` Projects each element of an observable sequence or Promise to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. ```js source.selectMany(function (x, i) { return Rx.Observable.range(0, x); }, function (x, y, ix, iy) { return x + y + ix + iy; }); source.selectMany(function (x, i) { return Promise.resolve(x + i); }, function (x, y, ix, iy) { return x + y + ix + iy; }); source.selectMany(function (x, i) { return [x, i]; }, function (x, y, ix, iy) { return x + y + ix + iy; }); ``` Projects each element of the source observable sequence to the other observable sequence or Promise, or array/iterable and merges the resulting observable sequences into one observable sequence. ```js source.selectMany(Rx.Observable.of(1,2,3)); source.selectMany(Promise.resolve(42)); source.selectMany([1,2,3]); ``` #### Arguments 1. `selector` *(`Function` | `Iterable` | `Promise`)*: An Object to project to the sequence or a transform function to apply to each element or an observable sequence to project each element from the source sequence onto. The selector is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[resultSelector]` *(`Function`)*: A transform function to apply to each element of the intermediate sequence. The resultSelector is called with the following information: 1. the value of the outer element 2. the value of the inner element 3. the index of the outer element 4. the index of the inner element #### Returns *(`Observable`)*: An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. #### Example ```js var source = Rx.Observable .range(1, 2) .selectMany(function (x) { return Rx.Observable.range(x, 2); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 2 // => Next: 3 // => Completed /* Using a promise */ var source = Rx.Observable.of(1,2,3,4) .selectMany(function (x, i) { return Promise.resolve(x + i); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 3 // => Next: 5 // => Next: 7 // => Completed /* Using an array */ Rx.Observable.of(2, 3, 5).selectMany( function(x) { // Return x^2, x^3 and x^4 return [ x * x, x * x * x, x * x * x * x ]; }, function(outer, inner, outerIndex, innerIndex) { return { outer : outer, inner : inner, outerIdx : outerIndex, innerIdx : innerIndex }; } ).subscribe( function(next) { console.log( 'Outer: ' + next.outer + ', Inner: ' + next.inner + ', InnerIndex: ' + next.innerIdx + ', OuterIndex: ' + next.outerIdx ); }, function() { console.log('Completed'); } ); //=> Outer: 2, Inner: 4, InnerIndex : 0, OuterIndex : 0 //=> Outer: 2, Inner: 8, InnerIndex : 1, OuterIndex : 0 //=> Outer: 2, Inner: 16, InnerIndex : 2, OuterIndex : 0 //=> Outer: 3, Inner: 9, InnerIndex : 0, OuterIndex : 1 //=> Outer: 3, Inner: 27, InnerIndex : 1, OuterIndex : 1 //=> Outer: 3, Inner: 81, InnerIndex : 2, OuterIndex : 1 //...etc //=> Completed ``` ### Location File: - [`/src/core/linq/observable/selectmany.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/selectmany.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/selectmany.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/selectmany.js) * * * RxJS-4.1.0/doc/api/core/operators/sequenceequal.md000066400000000000000000000044731266736161100220310ustar00rootroot00000000000000### `Rx.Observable.prototype.sequenceEqual(second, [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sequenceequal.js "View in source") Determins whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. #### Arguments 1. `second` *(`Observable` | `Promise` | `Array`)*: Second observable sequence, Promise or array to compare. 2. `[comparer]` *(`Function`)*: Comparer used to compare elements of both sequences. #### Returns *(`Observable`)*: An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. #### Example ```js var source1 = Rx.Observable.return(42); var source2 = Rx.Observable.return(42); var source = source1.sequenceEqual(source2); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: true // => Completed ``` ### Location File: - [`/src/core/linq/observable/sequenceequal.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sequenceequal.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/sequenceequal.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/sequenceequal.js) RxJS-4.1.0/doc/api/core/operators/share.md000066400000000000000000000073101266736161100202640ustar00rootroot00000000000000### `Rx.Observable.prototype.share()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/share.js "View in source") Returns an observable sequence that shares a single subscription to the underlying sequence. This operator is a specialization of `publish` which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. #### Returns *(`Observable`)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. #### Example ```js /* Without share */ var interval = Rx.Observable.interval(1000); var source = interval .take(2) .doAction(function (x) { console.log('Side effect'); }); source.subscribe(createObserver('SourceA')); source.subscribe(createObserver('SourceB')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Side effect // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Completed // => Side effect // => Next: SourceB1 // => Completed /* With share */ var interval = Rx.Observable.interval(1000); var source = interval .take(2) .do( function (x) { console.log('Side effect'); }); var published = source.share(); // When the number of observers subscribed to published observable goes from // 0 to 1, we connect to the underlying observable sequence. published.subscribe(createObserver('SourceA')); // When the second subscriber is added, no additional subscriptions are added to the // underlying observable sequence. As a result the operations that result in side // effects are not repeated per subscriber. published.subscribe(createObserver('SourceB')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/share.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/share.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/publish.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/publish.js) RxJS-4.1.0/doc/api/core/operators/sharereplay.md000066400000000000000000000070011266736161100214760ustar00rootroot00000000000000### `Rx.Observable.prototype.shareReplay([bufferSize], [window], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sharereplay.js "View in source") Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. This operator is a specialization of `replay` that connects to the connectable observable sequence when the number of observers goes from zero to one, and disconnects when there are no more observers. #### Arguments 1. `[bufferSize]` *(`Number`)*: Maximum element count of the replay buffer. 2. `[window]` *(`Number`)*: Maximum time length of the replay buffer in milliseconds. 3. `[scheduler]` *(`Scheduler`)*: Scheduler where connected observers within the selector function will be invoked on. #### Returns *(`Observable`)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(4) .doAction(function (x) { console.log('Side effect'); }); var published = source .shareReplay(3); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); // Creating a third subscription after the previous two subscriptions have // completed. Notice that no side effects result from this subscription, // because the notifications are cached and replayed. Rx.Observable .return(true) .delay(6000) .flatMap(published) .subscribe(createObserver('SourceC')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Side effect // => Next: SourceA2 // => Next: SourceB2 // => Side effect // => Next: SourceA3 // => Next: SourceB3 // => Completed // => Completed // => Next: SourceC1 // => Next: SourceC2 // => Next: SourceC3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/sharereplay.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sharereplay.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/replay.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/replay.js) RxJS-4.1.0/doc/api/core/operators/sharevalue.md000066400000000000000000000053521266736161100213250ustar00rootroot00000000000000### `Rx.Observable.prototype.shareValue(value)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sharevalue.js "View in source") Returns an observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. This operator is a specialization of `publishValue` which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. #### Returns *(`Observable`)*: An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .doAction(function (x) { console.log('Side effect'); }); var published = source.shareValue(42); published.subscribe(createObserver('SourceA')); published.subscribe(createObserver('SourceB')); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); } // => Next: SourceA42 // => Next: SourceB42 // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed // => Completed ``` ### Location File: - [`/src/core/linq/observable/sharevalue.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sharevalue.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/publishvalue.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/publishvalue.js) RxJS-4.1.0/doc/api/core/operators/single.md000066400000000000000000000070251266736161100204460ustar00rootroot00000000000000### `Rx.Observable.prototype.single([predicate], [thisArg], [defaultValue])` ### `Rx.Observable.prototype.single([settings])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/first.js "View in source") Returns a single element of an observable sequence that satisfies the condition in the predicate, or a default value if no such element exists. If no default value is given, then `onError` will be called. If there are more than one element that matches, then `onError` will be called. #### Arguments `Rx.Observable.prototype.single([predicate], [thisArg], [defaultValue])` 1. `[predicate]` *(`Function`)*: A predicate function to evaluate for elements in the source sequence. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. 3. `[defaultValue]` *(`Any`)*: Default value if no such element exists. `Rx.Observable.prototype.single([settings])` 1. `[settings]` *(`Object`)*: An object with the following fields - `[predicate]` *(`Function`)*: A predicate function to evaluate for elements in the source sequence. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed - `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. - `[defaultValue]` *(`Any`)*: Default value if no such element exists. #### Returns *(`Observable`)*: An observable sequence that contains elements from the input sequence that satisfy the condition. #### Example ```js /* with a default value */ var source = Rx.Observable.empty().single({defaultValue: 42}); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed /* With a predicate */ var source = Rx.Observable.range(0, 10) .single(function (x, idx, obs) { return x === 1; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/single.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/single.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/single.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/single.js) RxJS-4.1.0/doc/api/core/operators/singleinstance.md000066400000000000000000000067661266736161100222060ustar00rootroot00000000000000### `Observable.prototype.singleInstance()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/singleinstance.js "View in source") Returns a "cold" observable that becomes "hot" upon first subscription, and goes "cold" again when all subscriptions to it are disposed. At first subscription to the returned observable, the source observable is subscribed to. That source subscription is then shared amongst each subsequent simultaneous subscription to the returned observable. When all subscriptions to the returned observable have completed, the source observable subscription is disposed of. The first subscription after disposal starts again, subscribing one time to the source observable, then sharing that subscription with each subsequent simultaneous subscription. #### Returns *(`Observable`)*: An observable sequence that stays connected to the source as long as there is at least one subscription to the observable sequence. #### Example ```js var interval = Rx.Observable.interval(1000); var source = interval .take(2) .doAction(function (x) { console.log('Side effect'); }); var single = source.singleInstance(); // two simultaneous subscriptions, lasting 2 seconds single.subscribe(createObserver('SourceA')); single.subscribe(createObserver('SourceB')); setTimeout(function(){ // resubscribe two times again, more than 5 seconds later, // long after the original two subscriptions have ended single.subscribe(createObserver('SourceC')); single.subscribe(createObserver('SourceD')); }, 5000); function createObserver(tag) { return Rx.Observer.create( function (x) { console.log('Next: ' + tag + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed: ' + tag); }); } // => Side effect // => Next: SourceA0 // => Next: SourceB0 // => Side effect // => Next: SourceA1 // => Next: SourceB1 // => Completed: SourceA // => Completed: SourceB // => Side effect // => Next: SourceC0 // => Next: SourceD0 // => Side effect // => Next: SourceC1 // => Next: SourceD1 // => Completed: SourceC // => Completed: SourceD ``` ### Location File: - [`/src/core/linq/observable/singleinstance.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/singleinstance.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.binding.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) Unit Tests: - [`/tests/observable/singleinstance.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/singleinstance.js) RxJS-4.1.0/doc/api/core/operators/skip.md000066400000000000000000000036771266736161100201440ustar00rootroot00000000000000### `Rx.Observable.prototype.skip(count)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skip.js "View in source") Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. #### Arguments 1. `count` *(`Number`)*: The number of elements to skip before returning the remaining elements. #### Returns *(`Observable`)*: An observable sequence that contains the elements that occur after the specified index in the input sequence. #### Example ```js var source = Rx.Observable.range(0, 5) .skip(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/skip.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skip.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/skip.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/skip.js) RxJS-4.1.0/doc/api/core/operators/skiplast.md000066400000000000000000000042441266736161100210170ustar00rootroot00000000000000### `Rx.Observable.prototype.skipLast(count)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skiplast.js "View in source") Bypasses a specified number of elements at the end of an observable sequence. This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. #### Arguments 1. `count` *(`Number`)*: Number of elements to bypass at the end of the source sequence. #### Returns *(`Observable`)*: An observable sequence containing the source sequence elements except for the bypassed ones at the end. #### Example ```js var source = Rx.Observable.range(0, 5) .skipLast(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Completed ``` ### Location File: - [`/src/core/linq/observable/skiplast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skiplast.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/skiplast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/skiplast.js) RxJS-4.1.0/doc/api/core/operators/skiplastwithtime.md000066400000000000000000000050361266736161100225720ustar00rootroot00000000000000### `Rx.Observable.prototype.skipLastWithTime(duration, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skiplastwithtime.js "View in source") Bypasses a specified number of elements at the end of an observable sequence. This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. #### Arguments 1. `duration` *(`Number`)*: Duration for skipping elements from the end of the sequence. 1. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the timer on. If not specified, defaults to timeout scheduler. #### Returns *(`Observable`)*: An observable sequence with the elements skipped during the specified duration from the end of the source sequence. #### Example ```js var source = Rx.Observable.timer(0, 1000) .take(10) .skipLastWithTime(5000); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/skiplastwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skiplastwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/skiplastwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/skiplastwithtime.js) RxJS-4.1.0/doc/api/core/operators/skipuntil.md000066400000000000000000000040761266736161100212120ustar00rootroot00000000000000### `Rx.Observable.prototype.skipUntil(other)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skipuntil.js "View in source") Returns the values from the source observable sequence only after the other observable sequence produces a value. #### Arguments 1. `other` *(`Observable` | `Promise`)*: The observable sequence or Promise that triggers propagation of elements of the source sequence. #### Returns *(`Observable`)*: An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. #### Example ```js var source = Rx.Observable.timer(0, 1000) .skipUntil(Rx.Observable.timer(5000)); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 6 // => Next: 7 // => Next: 8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/skipuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skipuntil.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/skipuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/skipuntil.js) RxJS-4.1.0/doc/api/core/operators/skipuntilwithtime.md000066400000000000000000000044371266736161100227660ustar00rootroot00000000000000### `Rx.Observable.prototype.skipUntilWithTime(startTime, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skipuntilwithtime.js "View in source") Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. #### Arguments 1. `startTime` *(`Date` | `Number`)*: Time to start taking elements from the source sequence. If this value is less than or equal to current time, no elements will be skipped. 2. [`scheduler = Rx.Scheduler.timeout`] *(`Scheduler`)*: Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. #### Returns *(`Observable`)*: An observable sequence with the elements skipped until the specified start time. #### Example ```js // Using relative time var source = Rx.Observable.timer(0, 1000) .skipUntilWithTime(5000); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 6 // => Next: 7 // => Next: 8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/skipuntilwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skipuntilwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/skipuntilwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/skipuntilwithtime.js) RxJS-4.1.0/doc/api/core/operators/skipwhile.md000066400000000000000000000045521266736161100211660ustar00rootroot00000000000000### `Rx.Observable.prototype.skipWhile(predicate, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skipwhile.js "View in source") Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. #### Arguments 1. `predicate` *(`Function`)*: A function to test each source element for a condition. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. #### Example ```js // With a predicate var source = Rx.Observable.range(1, 5) .skipWhile(function (x) { return x < 3; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 3 // => Next: 4 // => Next: 5 // => Completed ``` ### Location File: - [`/src/core/linq/observable/skipwhile.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/skipwhile.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/skipwhile.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/skipwhile.js) RxJS-4.1.0/doc/api/core/operators/slice.md000066400000000000000000000047251266736161100202700ustar00rootroot00000000000000### `Rx.Observable.prototype.slice([begin], [end])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/slice.js "View in source") The `slice` method returns a shallow copy of a portion of an Observable into a new Observable object. Unlike the `Array` version, this does not support negative numbers for being or end. #### Arguments 1. `[begin]`: `Any`: Zero-based index at which to begin extraction. If omitted, this will default to zero. 2. `[end]` `Number`: Zero-based index at which to end extraction. slice extracts up to but not including end. #### Returns `Observable`: A shallow copy of a portion of an Observable into a new Observable object. #### Example ```js /* Without an end */ var source = Rx.Observable.of(1,2,3,1,2,3) .slice(3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 3 // => Completed /* With an end */ var source = Rx.Observable.of(1,2,3,1,2,3) .slice(2, 1); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/slice.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/slice.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/slice.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/slice.js) RxJS-4.1.0/doc/api/core/operators/some.md000066400000000000000000000041751266736161100201330ustar00rootroot00000000000000### `Rx.Observable.prototype.some([predicate], [thisArg])` ### [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/some.js "View in source") Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence. #### Arguments 1. `predicate` *(`Function`)*: A function to test each element for a condition. 2. `[thisArg]` *(`Any`)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: An observable sequence containing a single element determining whether one of the elements in the source sequence pass the test in the specified predicate. #### Example ```js var source = Rx.Observable.of(1,2,3,4,5) .some(function (x) { return x % 2 === 0; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: true // => Completed ``` ### Location File: - [`/src/core/linq/observable/some.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/some.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/some.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/some.js) RxJS-4.1.0/doc/api/core/operators/spawn.md000066400000000000000000000045051266736161100203150ustar00rootroot00000000000000### `Rx.Observable.spawn(fn)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/spawn.js "View in source") Spawns a generator function which allows for Promises, Observable sequences, Arrays, Objects, Generators and functions. #### Arguments 1. `fn` *(`Function`)*: The spawning function. #### Returns *(`Observable`)*: An Observable with the final result #### Example ```js var Rx = require('rx'); var thunk = function (val) { return function (cb) { cb(null, val); }; }; var spawned = Rx.Observable.spawn(function* () { var v = yield thunk(12); var w = yield [24]; var x = yield Rx.Observable.just(42); var y = yield Rx.Observable.just(56); var z = yield Promise.resolve(78); return v + w[0] + x + y + z; }); spawned.subscribe( function (x) { console.log('next %s', x); }, function (e) { console.log('error %s', e); }, function () { console.log('completed'); } ); // => next 212 // => completed ``` ### Location File: - [/src/core/linq/observable/spawn.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/spawn.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) Unit Tests: - [``/tests/observable/spawn.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/spawn.js) RxJS-4.1.0/doc/api/core/operators/start.md000066400000000000000000000046131266736161100203220ustar00rootroot00000000000000### `Rx.Observable.start(func, [context], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/start.js "View in source") Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence. ### Arguments 1. `func` *(`Function`)*: Function to run asynchronously. 2. `[context]` *(`Any`)*: The context for the func parameter to be executed. If not specified, defaults to undefined. 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. #### Returns *(`Observable`)*: An observable sequence exposing the function's result value, or an exception. #### Example ```js var context = { value: 42 }; var source = Rx.Observable.start( function () { return this.value; }, context, Rx.Scheduler.timeout ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [/src/core/linq/observable/start.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/start.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using rx.async.js | rx.async.compat.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/start.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/start.js) RxJS-4.1.0/doc/api/core/operators/startasync.md000066400000000000000000000040251266736161100213550ustar00rootroot00000000000000### `Rx.Observable.startAsync(functionAsync)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/startasync.js "View in source") Invokes the asynchronous function, surfacing the result through an observable sequence. ### Arguments 1. `functionAsync` *(`Function`)*: Asynchronous function which returns a Promise to run. #### Returns *(`Observable`)*: An observable sequence exposing the function's Promises's value or error. #### Example ```js var source = Rx.Observable.startAsync(function () { return RSVP.Promise.resolve(42); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [/src/core/linq/observable/startasync.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/startasync.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/startasync.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/start.js) RxJS-4.1.0/doc/api/core/operators/startwith.md000066400000000000000000000040301266736161100212070ustar00rootroot00000000000000### `Rx.Observable.prototype.startWith([scheduler] ...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/startwith.js "View in source") Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. #### Arguments 1. `[scheduler]` *(`Scheduler`)*: Scheduler to execute the function. 2. `args` *(arguments)*: Values to prepend to the observable sequence. #### Returns *(`Observable`)*: The source sequence prepended with the specified values. #### Example ```js var source = Rx.Observable.return(4) .startWith(1, 2, 3) var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/startwith.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/startwith.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/startwith.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/startwith.js) RxJS-4.1.0/doc/api/core/operators/subscribe.md000066400000000000000000000054161266736161100211500ustar00rootroot00000000000000### `Rx.Observable.prototype.subscribe([observer] | [onNext], [onError], [onCompleted])` ### `Rx.Observable.prototype.forEach([observer] | [onNext], [onError], [onCompleted])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js "View in source") Subscribes an observer to the observable sequence. #### Arguments 1. `[observer]` *(Observer)*: The object that is to receive notifications. 1. `[onNext]` *(`Function`)*: Function to invoke for each element in the observable sequence. 2. `[onError]` *(`Function`)*: Function to invoke upon exceptional termination of the observable sequence. 3. `[onCompleted]` *(`Function`)*: Function to invoke upon graceful termination of the observable sequence. #### Returns *(Disposable)*: The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. #### Example ```js /* With no arguments */ var source = Rx.Observable.range(0, 3) .do(function (x) { console.log('Do Next: ' + x); }); var subscription = source.subscribe(); // => Do Next: 0 // => Do Next: 1 // => Do Next: 2 /* With an observer */ var observer = Rx.Observer.create( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); var source = Rx.Observable.range(0, 3) var subscription = source.subscribe(observer); // => Next: 0 // => Next: 1 // => Next: 2 /* Using functions */ var source = Rx.Observable.range(0, 3) var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 ``` ### Location File: - [`/src/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/core/observable.js) RxJS-4.1.0/doc/api/core/operators/subscribeon.md000066400000000000000000000043511266736161100215020ustar00rootroot00000000000000### `Rx.Observable.prototype.subscribeOn(scheduler)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/subscribeon.js "View in source") Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer callbacks on a scheduler, use `observeOn`. #### Arguments 1. `scheduler` *(`Scheduler`)*: Scheduler to notify observers on. #### Returns *(`Observable`)*: The source sequence whose observations happen on the specified scheduler. #### Example ```js var observable = Rx.Observable.create(function (observer) { function handler () { observer.onNext(42); observer.onCompleted(); } // Change scheduler for here var id = setTimeout(handler, 1000); return function () { // And change scheduler for here if (id) clearTimeout(id); }; }); // Change the scheduler to timeout for subscribe/unsubscribe var source = observable.subscribeOn(Rx.Scheduler.timeout); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/subscribeon.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/subscribeon.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [`/tests/observable/subscribeon.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/subscribeon.js) RxJS-4.1.0/doc/api/core/operators/subscribeoncompleted.md000066400000000000000000000040051266736161100233730ustar00rootroot00000000000000### `Rx.Observable.prototype.subscribeOnCompleted(onCompleted, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js "View in source") Subscribes a function to invoke upon graceful termination of the observable sequence. #### Arguments 1. `onCompleted` *(`Function`)*: Function to invoke upon graceful termination of the observable sequence. 2. `[thisArg]` *(`Any`)*: Object to use as this when executing callback. #### Returns *(Disposable)*: The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. #### Example ```js /* Using functions */ var source = Rx.Observable.range(0, 3); var subscription = source.subscribeOnCompleted( function () { console.log('Completed'); }); // => Completed /* With a thisArg */ var source = Rx.Observable.range(0, 3); var subscription = source.subscribeOnCompleted( function (err) { this.log('Completed'); }, console); // => Completed ``` ### Location File: - [`/src/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/core/observable.js) RxJS-4.1.0/doc/api/core/operators/subscribeonerror.md000066400000000000000000000040301266736161100225460ustar00rootroot00000000000000### `Rx.Observable.prototype.subscribeOnError(onError, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js "View in source") Subscribes a function to invoke upon exceptional termination of the observable sequence. #### Arguments 1. `onError` *(`Function`)*: Function to invoke upon exceptional termination of the observable sequence. 2. `[thisArg]` *(`Any`)*: Object to use as this when executing callback. #### Returns *(Disposable)*: The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. #### Example ```js /* Using functions */ var source = Rx.Observable.throw(new Error()); var subscription = source.subscribeOnError( function (err) { console.log('Error: %s', err); }); // => Error: Error /* With a thisArg */ var source = Rx.Observable.throw(new Error()); var subscription = source.subscribeOnError( function (err) { this.log('Error: %s', err); }, console); // => Error: Error ``` ### Location File: - [`/src/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/core/observable.js) RxJS-4.1.0/doc/api/core/operators/subscribeonnext.md000066400000000000000000000040171266736161100224000ustar00rootroot00000000000000### `Rx.Observable.prototype.subscribeOnNext(onNext, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js "View in source") Subscribes a function to invoke for each element in the observable sequence. #### Arguments 1. `onNext` *(`Function`)*: Function to invoke for each element in the observable sequence. 2. `[thisArg]` *(`Any`)*: Object to use as this when executing callback. #### Returns *(Disposable)*: The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. #### Example ```js /* Using functions */ var source = Rx.Observable.range(0, 3) var subscription = source.subscribeOnNext( function (x) { console.log('Next: %s', x); }); // => Next: 0 // => Next: 1 // => Next: 2 /* With a thisArg */ var source = Rx.Observable.range(0, 3) var subscription = source.subscribeOnNext( function (x) { this.log('Next: %s', x); }, console); // => Next: 0 // => Next: 1 // => Next: 2 ``` ### Location File: - [`/src/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/observable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/core/observable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/core/observable.js) RxJS-4.1.0/doc/api/core/operators/sum.md000066400000000000000000000053211266736161100177660ustar00rootroot00000000000000### `Rx.Observable.prototype.sum([keySelector], [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sum.js "View in source") Computes the sum of a sequence of values that are obtained by invoking an optional transform function on each element of the input sequence, else if not specified computes the sum on each item in the sequence. #### Arguments 1. `[keySelector]` *(`Scheduler`)*: A transform function to apply to each element. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed #### Returns *(`Observable`)*: An observable sequence containing a single element with the sum of the values in the source sequence. #### Example ```js /* Without a selector */ var source = Rx.Observable.range(1, 10) .sum(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 55 // => Completed /* With a selector */ var array = [ { value: 1 }, { value: 2 }, { value: 3 } ]; var source = Rx.Observable .from(array) .sum(function (x, idx, obs) { return x.value; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 6 // => Completed ``` ### Location File: - [`/src/core/linq/observable/sum.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/sum.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) Prerequisites: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/sum.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/sum.js) RxJS-4.1.0/doc/api/core/operators/switch.md000066400000000000000000000041451266736161100204660ustar00rootroot00000000000000### `Rx.Observable.prototype.switch()` ### `Rx.Observable.prototype.switchLatest()` *DEPRECATED* [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/switchlatest.js "View in source") Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. There is an alias for this method called `switchLatest` for browsers Next: 0 // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/switch.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/switch.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/switch.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/switch.js) * * * RxJS-4.1.0/doc/api/core/operators/switchfirst.md000066400000000000000000000046161266736161100215410ustar00rootroot00000000000000### `Rx.Observable.prototype.switchFirst()` ## [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/exclusive.js "View in source") Receives an `Observable` of `Observables` and propagates the first `Observable` exclusively until it completes before it begins subscribes to the next `Observable`. Observables that come before the current Observable completes will be dropped and will not propagate. This operator is similar to `concatAll()` except that it will not hold onto Observables that come in before the current one is finished completed. #### Returns *(`Observable`)*: An Observable sequence that is the result of concatenating non-overlapping items emitted by an Observable of Observables. #### Example ```javascript //Generate an event every 100 milliseconds var source = Rx.Observable.generateWithRelativeTime( 0, function(x) {return x < 5; }, function(x) {return x + 1; }, function(x) {return x; }, function(x) {return 100; }) .map(function(value) { //Observable takes 150 milliseconds to complete return Rx.Observable.timer(150).map(value); }); source.exclusive().subscribe( function (x) { console.log("Next %d", x); }, function(e) { console.log("Error %s", e); }, function() { console.log("Completed"); }); // Next 0 // Next 2 // Next 4 // Completed ``` #### Location File: - [`/src/core/linq/observable/exclusive.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/exclusive.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) - [`rx.experimental-lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental-lite.js) - [`rx.experimental-lite-compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental-lite-compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental/) Unit Tests: - [`/tests/observable/exclusive.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/exclusive.js) RxJS-4.1.0/doc/api/core/operators/take.md000066400000000000000000000041271266736161100201110ustar00rootroot00000000000000### `Rx.Observable.prototype.take(count, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/take.js "View in source") Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of `take(0)`. #### Arguments 1. `count` *(`Number`)*: The number of elements to return. 2. `[scheduler]` *(`Scheduler`)*: Scheduler used to produce an onCompleted message in case `count` is set to 0. #### Returns *(`Observable`)*: An observable sequence that contains the elements before and including the specified index in the input sequence. #### Example ```js var source = Rx.Observable.range(0, 5) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed ``` ### Location File: - [`/src/core/linq/observable/take.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/take.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/take.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/take.js) RxJS-4.1.0/doc/api/core/operators/takelast.md000066400000000000000000000043241266736161100207740ustar00rootroot00000000000000### `Rx.Observable.prototype.takeLast(count)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelast.js "View in source") Returns a specified number of contiguous elements from the end of an observable sequence, using an optional scheduler to drain the queue. This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. #### Arguments 1. `count` *(`Number`)*: Number of elements to bypass at the end of the source sequence. #### Returns *(`Observable`)*: An observable sequence containing the source sequence elements except for the bypassed ones at the end. #### Example ```js var source = Rx.Observable.range(0, 5) .takeLast(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takelast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelast.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/takelast.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takelast.js) RxJS-4.1.0/doc/api/core/operators/takelastbuffer.md000066400000000000000000000036461266736161100221740ustar00rootroot00000000000000### `Rx.Observable.prototype.takeLastBuffer(count)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelastbuffer.js "View in source") Returns an array with the specified number of contiguous elements from the end of an observable sequence. #### Arguments 1. `count` *(`Number`)*: Number of elements to bypass at the end of the source sequence. #### Returns *(`Observable`)*: An observable sequence containing a single array with the specified number of elements from the end of the source sequence. #### Example ```js var source = Rx.Observable.range(0, 5) .takeLastBuffer(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 2,3,4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takelastbuffer.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelastbuffer.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/takelastbuffer.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takelastbuffer.js) RxJS-4.1.0/doc/api/core/operators/takelastbufferwithtime.md000066400000000000000000000047301266736161100237420ustar00rootroot00000000000000### `Rx.Observable.prototype.takeLastBufferWithTime(duration, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelastbufferwithtime.js "View in source") Returns an array with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. This operator accumulates a queue with a length enough to store elements received during the initial duration window. As more elements are received, elements older than the specified duration are taken from the queue and produced on the result sequence. This causes elements to be delayed with duration. #### Arguments 1. `duration` *(`Number`)*: Duration for taking elements from the end of the sequence. 2. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the timer on. If not specified, defaults to timeout scheduler. #### Returns *(`Observable`)*: An observable sequence containing a single array with the elements taken during the specified duration from the end of the source sequence. #### Example ```js var source = Rx.Observable .timer(0, 1000) .take(10) .takeLastBufferWithTime(5000); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 5,6,7,8,9 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takelastbufferwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelastbufferwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/takelastbufferwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takelastbufferwithtime.js) * * * RxJS-4.1.0/doc/api/core/operators/takelastwithtime.md000066400000000000000000000051231266736161100225450ustar00rootroot00000000000000### `Rx.Observable.prototype.takeLastWithTime(duration, [timeScheduler], [loopScheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelastwithtime.js "View in source") Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. #### Arguments 1. `duration` *(`Number`)*: Duration for taking elements from the end of the sequence. 2. `[timeScheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the timer on. If not specified, defaults to timeout scheduler. 2. `[loopScheduler=Rx.Scheduler.currentThread]` *(`Scheduler`)*: Scheduler to drain the collected elements. If not specified, defaults to current thread scheduler. #### Returns *(`Observable`)*: An observable sequence with the elements taken during the specified duration from the end of the source sequence. #### Example ```js var source = Rx.Observable.timer(0, 1000) .take(10) .takeLastWithTime(5000); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 5 // => Next: 6 // => Next: 7 // => Next: 8 // => Next: 9 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takelastwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takelastwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/skipuntilwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takelastwithtime.js) RxJS-4.1.0/doc/api/core/operators/takeuntil.md000066400000000000000000000042021266736161100211570ustar00rootroot00000000000000### `Rx.Observable.prototype.takeUntil(other)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takeuntil.js "View in source") Returns the values from the source observable sequence until the other observable sequence or Promise produces a value. #### Arguments 1. `other` *(`Observable` | `Promise`)*: Observable sequence or Promise that terminates propagation of elements of the source sequence. #### Returns *(`Observable`)*: An observable sequence containing the elements of the source sequence up to the point the other sequence or Promise interrupted further propagation. #### Example ```js var source = Rx.Observable.timer(0, 1000) .takeUntil(Rx.Observable.timer(5000)); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takeuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takeuntil.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/takeuntil.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takeuntil.js) RxJS-4.1.0/doc/api/core/operators/takeuntilwithtime.md000066400000000000000000000042571266736161100227440ustar00rootroot00000000000000### `Rx.Observable.prototype.takeUntilWithTime(endTime, [scheduler])` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takeuntil.js "View in source") Returns the values from the source observable sequence until the end time. #### Arguments 1. `endTime` *(`Date` | `Number`)*: Time to stop taking elements from the source sequence. If this value is less than or equal to the current time, the result stream will complete immediately. 2. [`scheduler`] *(`Scheduler`)*: Scheduler to run the timer on. #### Returns *(`Observable`)*: An observable sequence with the elements taken until the specified end time. #### Example ```js var source = Rx.Observable.timer(0, 1000) .takeUntilWithTime(5000); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Next: 3 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takeuntilwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takeuntilwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/takeuntilwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takeuntilwithtime.js) RxJS-4.1.0/doc/api/core/operators/takewhile.md000066400000000000000000000044361266736161100211450ustar00rootroot00000000000000### `Rx.Observable.prototype.takeWhile(predicate, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takewhile.js "View in source") Returns elements from an observable sequence as long as a specified condition is true. #### Arguments 1. `predicate` *(`Function`)*: A function to test each source element for a condition. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as this when executing callback. #### Returns *(`Observable`)*: An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes. #### Example ```js // With a predicate var source = Rx.Observable.range(1, 5) .takeWhile(function (x) { return x < 3; }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Completed ``` ### Location File: - [`/src/core/linq/observable/takewhile.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/takewhile.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/takewhile.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/takewhile.js) RxJS-4.1.0/doc/api/core/operators/thendo.md000066400000000000000000000043271266736161100204500ustar00rootroot00000000000000### `Rx.Observable.prototype.thenDo(selector)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/thendo.js "View in source") Matches when the observable sequence has an available value and projects the value. #### Arguments 1. `selector` *(`Function`)*: Selector that will be invoked for values in the source sequence. #### Returns *(`Plan`)*: Plan that produces the projected values, to be fed (with other plans) to the when operator. #### Example ```js var selector = function (x, y) { return x + ", " + y; }; var source = Rx.Observable.when( Rx.Observable.interval(250).and(Rx.Observable.of("A", "B", "C")).thenDo(selector), Rx.Observable.interval(300).and(Rx.Observable.of("a", "b")).thenDo(selector) ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0, A // => Next: 0, a // => Next: 1, B // => Next: 1, b // => Next: 2, C // => Completed ``` ### Location File: - [/src/core/linq/observable/thendo.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/thendo.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.joinpatterns.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.joinpatterns.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-JoinPatterns`](http://www.nuget.org/packages/RxJS-JoinPatterns) Unit Tests: - [/tests/observable/when.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/when.js) RxJS-4.1.0/doc/api/core/operators/throttle.md000066400000000000000000000051471266736161100210350ustar00rootroot00000000000000### `Rx.Observable.prototype.throttle(windowDuration, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/throttle.js "View in source") Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. #### Arguments 1. `windowDuration` *(`Number`)*: Time to wait before emitting another item after emitting the last item (specified as an integer denoting milliseconds). 2. `[scheduler]` *(`Scheduler`)*: The Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to the default scheduler. #### Returns *(`Observable`)*: An Observable that performs the throttle operation. #### Example ```js var times = [ { value: 0, time: 100 }, { value: 1, time: 600 }, { value: 2, time: 400 }, { value: 3, time: 900 }, { value: 4, time: 200 } ]; // Delay each item by time and project value; var source = Rx.Observable.from(times) .flatMap(function (item) { return Rx.Observable .of(item.value) .delay(item.time); }) .throttle(300 /* ms */); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 2 // => Next: 3 // => Completed ``` ### Location File: - [`/src/core/linq/observable/throttle.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/throttle.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/throttle.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/throttlefirst.js) RxJS-4.1.0/doc/api/core/operators/throw.md000066400000000000000000000051341266736161100203270ustar00rootroot00000000000000### `Rx.Observable.throw(exception, [scheduler])` ### `Rx.Observable.throwError(exception, [scheduler])` ### `Rx.Observable.throwException(exception, [scheduler])` ** DEPRECATED ** [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/throw.js "View in source") Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. ### Arguments 1. `dueTime` *(`Any`)*: Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. 2. `[scheduler=Rx.Scheduler.immediate]` *(`Scheduler`)*: Scheduler to send the exceptional termination call on. If not specified, defaults to the immediate scheduler. #### Returns *(`Observable`)*: The observable sequence that terminates exceptionally with the specified exception object. #### Example ```js var source = Rx.Observable.return(42) .selectMany(Rx.Observable.throw(new Error('error!'))); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Error: Error: error! ``` ### Location File: - [/src/core/linq/observable/throw.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/throw.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/throw.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/throw.js) RxJS-4.1.0/doc/api/core/operators/timeinterval.md000066400000000000000000000037451266736161100216750ustar00rootroot00000000000000### `Rx.Observable.prototype.timeInterval([scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timeinterval.js "View in source") Records the time interval between consecutive values in an observable sequence. #### Arguments 1. `[scheduler=Rx.Observable.timeout]` *(`Scheduler`)*: Scheduler used to compute time intervals. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence with time interval information on values. #### Example ```js var source = Rx.Observable.timer(0, 1000) .timeInterval() .map(function (x) { return x.value + ':' + x.interval; }) .take(5); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0:0 // => Next: 1:1000 // => Next: 2:1000 // => Next: 3:1000 // => Next: 4:1000 // => Completed ``` ### Location File: - [`/src/core/linq/observable/timeinterval.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timeinterval.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - If using `rx.time.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/timeinterval.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/timeinterval.js) RxJS-4.1.0/doc/api/core/operators/timeout.md000066400000000000000000000140751266736161100206560ustar00rootroot00000000000000### `Rx.Observable.prototype.timeout(dueTime, [other], [scheduler])` ### `Rx.Observable.prototype.timeout([firstTimeout], timeoutDurationSelector, [other])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timeout.js "View in source") Returns the source observable sequence or the other observable sequence if dueTime elapses. --OR-- Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. #### Arguments If using a relative or absolute time: 1. `dueTime` *(Date | Number)*: Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. 2. `[other]` *(`Observable` | `Promise` | `Error`)*: Observable sequence or Promise to return in case of a timeout. If a string is specified, then an error will be thrown with the given error message. If not specified, a timeout error throwing sequence will be used. 3. `[scheduler]` *(`Scheduler`)*: Scheduler to run the timeout timers on. If not specified, the default scheduler is used. If using a timeout duration selector: 1. `[firstTimeout]` *(`Observable`)*: Observable sequence that represents the timeout for the first element. If not provided, this defaults to `Rx.Observable.never()`. 2. `timeoutDurationSelector` *(`Function`)*: Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. 3. `[other]` *(`Scheduler`)*:Sequence to return in case of a timeout. If not provided, this is set to `Observable.throw` #### Returns *(`Observable`)*: An observable sequence with time interval information on values. #### Example ```js /* With no other */ var source = Rx.Observable .just(42) .delay(5000) .timeout(200); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Error: Error: Timeout /* With message */ var source = Rx.Observable .just(42) .delay(5000) .timeout(200, new Error('Timeout has occurred.')); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Error: Error: Timeout has occurred. /* With an observable */ var source = Rx.Observable .just(42) .delay(5000) .timeout(200, Rx.Observable.empty()); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Completed /* With a Promise */ var source = Rx.Observable .just(42) .delay(5000) .timeout(200, Promise.resolve(42)); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed /* without a first timeout */ var array = [ 200, 300, 350, 400 ]; var source = Rx.Observable .for(array, function (x) { return Rx.Observable.timer(x); }) .map(function (x, i) { return i; }) .timeout(function (x) { return Rx.Observable.timer(400); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Error: Error: Timeout /* With no other */ var array = [ 200, 300, 350, 400 ]; var source = Rx.Observable .for(array, function (x) { return Rx.Observable.timer(x); }) .map(function (x, i) { return i; }) .timeout( Rx.Observable.timer(250), function (x) { return Rx.Observable.timer(400); } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Error: Error: Timeout /* With other */ var array = [ 200, 300, 350, 400 ]; var source = Rx.Observable .for(array, function (x) { return Rx.Observable.timer(x); }) .map(function (x, i) { return i; }) .timeout( Rx.Observable.timer(250), function (x) { return Rx.Observable.timer(400); }, Rx.Observable.just(42) ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 1 // => Next: 2 // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/timeout.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timeout.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/timeout.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/timeout.js) RxJS-4.1.0/doc/api/core/operators/timer.md000066400000000000000000000057741266736161100203160ustar00rootroot00000000000000### `Rx.Observable.timer(dueTime, [period], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timer.js "View in source") Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. Note for `rx.lite.js`, only relative time is supported. ### Arguments 1. `dueTime` *(Date|Number)*: Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. 2. `[period|scheduler=Rx.Scheduler.timeout]` *(Number|Scheduler)*: Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the timer on. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence that produces a value after due time has elapsed and then each period. #### Example ```js var source = Rx.Observable.timer(200, 100) .timeInterval() .pluck('interval') .take(3); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 200 // => Next: 100 // => Next: 100 // => Completed ``` ### Location File: - [/src/core/linq/observable/timer.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timer.js) - [/src/core/linq/observable/timer-lite.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timer-lite.js) Dist: - [rx.all.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [rx.all.compat.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [rx.time.js](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).time.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | rx.lite.compat.js NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/timer.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/timer.js) - [/tests/observable/timer-lite.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/timer-lite.js) RxJS-4.1.0/doc/api/core/operators/timestamp.md000066400000000000000000000046151266736161100211720ustar00rootroot00000000000000### `Rx.Observable.prototype.timestamp([scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timestamp.js "View in source") Records the timestamp for each value in an observable sequence. #### Arguments 1. `[scheduler=Rx.Observable.timeout]` *(`Scheduler`)*: Scheduler used to compute timestamps. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence with timestamp information on values. #### Example ```js var source = Rx.Observable.timer(0, 1000) .timestamp() .map(function (x) { return x.value + ':' + x.timestamp; }) .take(5); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0:1378690776351 // => Next: 1:1378690777313 // => Next: 2:1378690778316 // => Next: 3:1378690779317 // => Next: 4:1378690780319 // => Completed ``` ### Location File: - [`/src/core/linq/observable/timestamp.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/timestamp.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/timestamp.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/timestamp.js) RxJS-4.1.0/doc/api/core/operators/toarray.md000066400000000000000000000034571266736161100206530ustar00rootroot00000000000000### `Rx.Observable.prototype.toArray()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/toarray.js "View in source") Creates a list from an observable sequence. #### Returns *(`Observable`)*: An observable sequence containing a single element with a list containing all the elements of the source sequence. #### Example ```js var source = Rx.Observable.timer(0, 1000) .take(5) .toArray(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: [0,1,2,3,4] // => Completed ``` ### Location File: - [`/src/core/linq/observable/toarray.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/toarray.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/toarray.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/toarray.js) RxJS-4.1.0/doc/api/core/operators/toasync.md000066400000000000000000000041641266736161100206460ustar00rootroot00000000000000### `Rx.Observable.toAsync(func, [context], [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/toasync.js "View in source") Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. ### Arguments 1. `func` *(`Function`)*: Function to convert to an asynchronous function. 2. `[context]` *(`Any`)*: The context for the func parameter to be executed. If not specified, defaults to undefined. 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. #### Returns *(`Function`)*: Asynchronous function. #### Example ```js var func = Rx.Observable.toAsync(function (x, y) { return x + y; }); // Execute function with 3 and 4 var source = func(3, 4); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 7 // => Completed ``` ### Location File: - [/src/core/linq/observable/toasync.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/toasync.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).async.js | rx.async.compat.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`rx`](https://www.npmjs.org/package/rx)JS-Binding Unit Tests: - [/tests/observable/toasync.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/toasync.js) RxJS-4.1.0/doc/api/core/operators/tomap.md000066400000000000000000000037361266736161100203120ustar00rootroot00000000000000### `Rx.Observable.prototype.toMap(keySelector, [elementSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/tomap.js "View in source") Converts the observable sequence to a Map if it exists. Note that this only works in an ES6 environment or polyfilled. #### Arguments 1. `keySelector` *(`Function`)*: A function which produces the key for the Map. 2. `[elementSelector]` *(`Function`)*: An optional function which produces the element for the Map. If not present, defaults to the value from the observable sequence. #### Returns *(`Observable`)*: An observable sequence with a single value of a Map containing the values from the observable sequence. #### Example ```js var source = Rx.Observable.timer(0, 1000) .take(5) .toMap(function (x) { return x * 2; }, function (x) { return x * 4; }); var subscription = source.subscribe( function (x) { var arr = []; x.forEach(function (value, key) { arr.push(value, key); }) console.log('Next: ' + arr); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: [0,0,2,4,4,8,6,12,8,16] // => Completed ``` ### Location File: - [`/src/core/linq/observable/tomap.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/tomap.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/tomap.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/tomap.js) RxJS-4.1.0/doc/api/core/operators/topromise.md000066400000000000000000000057111266736161100212060ustar00rootroot00000000000000### `Rx.Observable.toPromise([promiseCtor])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/topromise.js "View in source") Converts an Observable sequence to a ES2015 compliant promise. #### Arguments 1. `[promiseCtor]` *(Promise)*: An ES2015 compliant Promise that can be created. This is optional. If your runtime already supports ES2015 promises, you do not need to fill in this parameter. Alternatively you can specify an ES2015 complaint promise via `Rx.config.Promise` #### Returns *(`Promise`)*: An ES2015 compliant promise which contains the last value from the Observable sequence. If the Observable sequence is in error, then the Promise will be in the rejected stage. If the sequence is empty, the Promise will not resolve. #### Example ```es6 /* Using normal ES2015 */ let source = Rx.Observable .just(42) .toPromise(); source.then((value) => console.log('Value: %s', value)); // => Value: 42 /* Rejected Promise */ /* Using normal ES2015 */ let source = Rx.Observable .throw(new Error('woops')) .toPromise(); source .then((value) => console.log('Value: %s', value)) .catch((err) => console.log('Error: %s', err)); // => Error: Error: woops /* Setting via the config */ Rx.config.Promise = RSVP.Promise; let source = Rx.Observable .just(42) .toPromise(); source.then((value) => console.log('Value: %s', value)); // => Value: 42 /* Setting via the method */ let source = Rx.Observable .just(42) .toPromise(RSVP.Promise); source.then((value) => console.log('Value: %s', value)); // => Value: 42 ``` ### Location File: - [`/src/core/linq/observable/topromise.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/topromise.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/fromnodecallback.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/topromise.js) RxJS-4.1.0/doc/api/core/operators/toset.md000066400000000000000000000032171266736161100203220ustar00rootroot00000000000000### `Rx.Observable.prototype.toSet()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/toset.js "View in source") Creates an observable sequence with a single item of a Set created from the observable sequence. Note that this only works in an ES6 environment or polyfilled. #### Returns *(`Observable`)*: An observable sequence containing a single element with a Set containing all the elements of the source sequence. #### Example ```js var source = Rx.Observable.timer(0, 1000) .take(5) .toSet(); var subscription = source.subscribe( function (x) { var arr = []; x.forEach(function (i) { arr.push(i); }) console.log('Next: ' + arr); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: [0,1,2,3,4] // => Completed ``` ### Location File: - [`/src/core/linq/observable/toset.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/toset.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) Unit Tests: - [`/tests/observable/toset.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/toset.js) RxJS-4.1.0/doc/api/core/operators/transduce.md000066400000000000000000000056221266736161100211560ustar00rootroot00000000000000### `Rx.Observable.prototype.transduce(transducer)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/transduce.js "View in source") Executes a transducer to transform the observable sequence. Transducers are composable algorithmic transformations. They are independent from the context of their input and output sources and specify only the essence of the transformation in terms of an individual element. Because transducers are decoupled from input or output sources, they can be used in many different processes such as Observable sequences. Transducers compose directly, without awareness of input or creation of intermediate aggregates. Such examples of transducers libraries are [transducers-js](https://github.com/cognitect-labs/transducers-js) from Cognitect and [transducers.js](https://github.com/jlongster/transducers.js) from James Long. In order for this operator to work, the transducers library must follow the following contract: ```js return { '@@transducer/init': function() { // Return the item return observer; }, '@@transducer/step': function(obs, input) { // Process next item return obs.onNext(input); }, '@@transducer/result': function(obs) { // Mark completion return obs.onCompleted(); } }; ``` ### Arguments 1. `transducer` *(`Transducer`)*: A transducer to execute. #### Returns *(`Observable`)*: An observable sequence that results from the transducer execution. #### Example Below is an example using [transducers-js](https://github.com/cognitect-labs/transducers-js). ```js function even (x) { return x % 2 === 0; } function mul10(x) { return x * 10; } var t = transducers var source = Rx.Observable.range(1, 5) .transduce(t.comp(t.filter(even), t.map(mul10))); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 20 // => Next: 40 // => Completed ``` ### Location File: - [`/src/core/linq/observable/transduce.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/transduce.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/transduce.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/transduce.js) RxJS-4.1.0/doc/api/core/operators/using.md000066400000000000000000000044101266736161100203050ustar00rootroot00000000000000### `Rx.Observable.using(resourceFactory, observableFactory)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/using.js "View in source") Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. ### Arguments 1. `resourceFactory` *(`Function`)*: Factory function to obtain a resource object. 2. `observableFactory` *(`Function`)*: Factory function to obtain an observable sequence that depends on the obtained resource. #### Returns *(`Function`)*: An observable sequence whose lifetime controls the lifetime of the dependent resource object. #### Example ```js /* Using an AsyncSubject as a resource which supports the .dispose method */ function DisposableResource(value) { this.value = value; this.disposed = false; } DisposableResource.prototype.getValue = function () { if (this.disposed) { throw new Error('Object is disposed'); } return this.value; }; DisposableResource.prototype.dispose = function () { if (!this.disposed) { this.disposed = true; this.value = null; } console.log('Disposed'); }; var source = Rx.Observable.using( function () { return new DisposableResource(42); }, function (resource) { var subject = new Rx.AsyncSubject(); subject.onNext(resource.getValue()); subject.onCompleted(); return subject; } ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed subscription.dispose(); // => Disposed ``` ### Location File: - [`/src/core/linq/observable/using.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/using.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) Unit Tests: - [`/tests/observable/using.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/using.js) RxJS-4.1.0/doc/api/core/operators/when.md000066400000000000000000000061521266736161100201260ustar00rootroot00000000000000### `Rx.Observable.when(...args)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/when.js "View in source") A series of plans (specified as an Array or as a series of arguments) created by use of the Then operator on patterns. ### Arguments 1. `args` *(arguments|Array)*: A series of plans (specified as an Array of as a series of arguments) created by use of the then operator on patterns. #### Returns *(`Observable`)*: Observable sequence with the results form matching several patterns. #### Example ```js // Fire each plan when both are ready var source = Rx.Observable.when( Rx.Observable.timer(100).and(Rx.Observable.timer(500)).thenDo(function (x, y) { return 'first'; }), Rx.Observable.timer(400).and(Rx.Observable.timer(300)).thenDo(function (x, y) { return 'second'; }) ); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: second // => Next: first // => Completed ``` #### Example ```js var chopsticks = [new Rx.Subject(), new Rx.Subject(), new Rx.Subject()]; var hungry = [new Rx.Subject(), new Rx.Subject(), new Rx.Subject()]; var eat = i => { return () => { setTimeout(() => { console.log('Done'); chopsticks[i].onNext({}); chopsticks[(i+1) % 3].onNext({}); }, 1000); return 'philosopher ' + i + ' eating'; }; }; var dining = Rx.Observable.when( hungry[0].and(chopsticks[0]).and(chopsticks[1]).thenDo(eat(0)), hungry[1].and(chopsticks[1]).and(chopsticks[2]).thenDo(eat(1)), hungry[2].and(chopsticks[2]).and(chopsticks[0]).thenDo(eat(2)) ); dining.subscribe(console.log.bind(console)); chopsticks[0].onNext({}); chopsticks[1].onNext({}); chopsticks[2].onNext({}); for (var i = 0; i < 3; i++) { hungry[0].onNext({}); hungry[1].onNext({}); hungry[2].onNext({}); } ``` ### Location File: - [`/src/core/linq/observable/when.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/when.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.joinpatterns.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.joinpatterns.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).joinpatterns.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All) - [`RxJS-JoinPatterns`](http://www.nuget.org/packages/RxJS-JoinPatterns) Unit Tests: - [`/tests/observable/when.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/when.js) RxJS-4.1.0/doc/api/core/operators/where.md000066400000000000000000000043631266736161100203010ustar00rootroot00000000000000### `Rx.Observable.prototype.filter(predicate, [thisArg])` ### `Rx.Observable.prototype.where(predicate, [thisArg])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/where.js "View in source") Filters the elements of an observable sequence based on a predicate. #### Arguments 1. `predicate` *(`Function`)*: A function to test each source element for a condition. The callback is called with the following information: 1. the value of the element 2. the index of the element 3. the Observable object being subscribed 2. `[thisArg]` *(`Any`)*: Object to use as `this` when executing the predicate. #### Returns *(`Observable`)*: An observable sequence that contains elements from the input sequence that satisfy the condition. #### Example ```js var source = Rx.Observable.range(0, 5) .filter(function (x, idx, obs) { return x % 2 === 0; }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0 // => Next: 2 // => Next: 4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/where.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/where.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/where.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/where.js) RxJS-4.1.0/doc/api/core/operators/while.md000066400000000000000000000040411266736161100202700ustar00rootroot00000000000000### `Rx.Observable.while(condition, source)` ### `Rx.Observable.whileDo(condition, source)` *DEPRECATED* [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/while.js "View in source") Repeats source as long as condition holds emulating a while loop. There is an alias for this method called 'whileDo' for browsers Next: 42 // => Next: 42 // => Next: 42 // => Completed ``` ### Location File: - [`/src/core/linq/observable/while.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/while.js) Dist: - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental) Unit Tests: - [`/tests/observable/while.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/while.js) RxJS-4.1.0/doc/api/core/operators/window.md000066400000000000000000000137751266736161100205050ustar00rootroot00000000000000### `Rx.Observable.prototype.window()` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/window.js "View in source") The `window` method periodically subdivide items from an Observable into Observable windows and emit these windows rather than emitting the items one at a time. Window is similar to `buffer`, but rather than emitting packets of items from the original `Observable`, it emits Observables, each one of which emits a subset of items from the original `Observable` and then terminates with an `onCompleted` call. Like `buffer`, `window` has many varieties, each with its own way of subdividing the original `Observable` into the resulting `Observable` emissions, each one of which contains a "window" onto the original emitted items. In the terminology of the `window` method, when a window "opens," this means that a new `Observable` is emitted and that `Observable` will begin emitting items emitted by the source `Observable`. When a window "closes," this means that the emitted Observable stops emitting items from the source Observable and calls its Subscribers' `onCompleted` method and terminates. #### With window closing selector ```js Rx.Observable.prototype.window(windowClosingSelector); ``` This version of `window` opens its first window immediately. It closes the currently open window and immediately opens a new one each time it observes an object emitted by the `Observable` that is returned from `windowClosingSelector`. In this way, this version of `window` emits a series of non-overlapping windows whose collective `onNext` emissions correspond one-to-one with those of the source Observable. #### Arguments 1. `windowClosingSelector` *(`Function`)*: A function invoked to define the closing of each produced window. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js // With closings var source = Rx.Observable.timer(0, 50) .window(function () { return Rx.Observable.timer(125); }) .take(3) .flatMap(function (x) { return x.toArray(); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0,1,2 // => Next: 3,4,5 // => Next: 6,7 // => Completed ``` #### With window opening and window closing selector ```js Rx.Observable.prototype.window(windowOpenings, windowClosingSelector); ``` This version of `window` opens a window whenever it observes the `windowOpenings` `Observable` emit an Opening object and at the same time calls `windowClosingSelector` to generate a closing `Observable` associated with that window. When that closing `Observable` emits an object, `window` closes that window. Since the closing of currently open windows and the opening of new windows are activities that are regulated by independent Observables, this version of `window` may create windows that overlap (duplicating items from the source `Observable`) or that leave gaps (discarding items from the source Observable). #### Arguments 1. `windowOpenings` *(`Observable`)*: Observable sequence whose elements denote the creation of new windows 2. `windowClosingSelector` *(`Function`)*: A function invoked to define the closing of each produced window. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js /* Using Openings and Closing Selector */ var openings = Rx.Observable.interval(200); var source = Rx.Observable.interval(50) .window(openings, function (x) { return Rx.Observable.timer(x + 100); }) .take(3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 3,4 // => Next: 7,8 // => Next: 11,12 // => Completed ``` #### With boundaries ```js Rx.Observable.prototype.window(windowBoundaries); ``` This version of `window` returns an `Observable` that emits non-overlapping buffered items from the source `Observable` each time the specified boundary Observable emits an item. #### Arguments 1. `windowBoundaries` *(`Observable`)*: Sequence of window boundary markers. The current window is closed and a new window is opened upon receiving a boundary marker. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js /* With window boundaries */ var openings = Rx.Observable.interval(500); // Convert the window to an array var source = Rx.Observable.timer(0, 100) .window(openings) .take(3) .flatMap(function (x) { return x.toArray(); }); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0,1,2,3,4 // => Next: 5,6,7,8,9,10 // => Next: 11,12,13,14,15 // => Completed ``` ### Location File: - [`/src/core/linq/observable/window.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/window.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) Unit Tests: - [`/tests/observable/window.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/window.js) RxJS-4.1.0/doc/api/core/operators/windowwithcount.md000066400000000000000000000046051266736161100224420ustar00rootroot00000000000000### `Rx.Observable.prototype.windowWithCount(count, [skip])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/windowwithcount.js "View in source") Projects each element of an observable sequence into zero or more windows which are produced based on element count information. #### Arguments 1. `count` *(`Number`)*: Length of each buffer. 2. `[skip]` *(`Number`)*: Number of elements to skip between creation of consecutive windows. If not provided, defaults to the count. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js /* Without a skip */ var source = Rx.Observable.range(1, 6) .windowWithCount(2) .selectMany(function (x) { return x.toArray(); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1,2 // => Next: 3,4 // => Next: 5,6 // => Next: // => Completed /* Using a skip */ var source = Rx.Observable.range(1, 6) .windowWithCount(2, 1) .selectMany(function (x) { return x.toArray(); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 1,2 // => Next: 2,3 // => Next: 3,4 // => Next: 4,5 // => Next: 5,6 // => Next: 6 // => Next: // => Completed ``` ### Location File: - [`/src/core/linq/observable/windowwithcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/windowwithcount.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/windowwithcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/windowwithcount.js) RxJS-4.1.0/doc/api/core/operators/windowwithtime.md000066400000000000000000000067761266736161100222630ustar00rootroot00000000000000### `Rx.Observable.prototype.windowWithTime(timeSpan, [timeShift | scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/windowwithtime.js "View in source") Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. #### Arguments 1. `timeSpan` *(`Number`)*: Length of each buffer (specified as an integer denoting milliseconds). 2. `[timeShift]` *(`Number`)*: Interval between creation of consecutive buffers (specified as an integer denoting milliseconds). 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence of buffers. #### Example ```js /* Without a skip */ var source = Rx.Observable.interval(100) .windowWithTime(500) .take(3); var subscription = source.subscribe( function (child) { child.toArray().subscribe( function (x) { console.log('Child Next: ' + x.toString()); }, function (err) { console.log('Child Error: ' + err); }, function () { console.log('Child Completed'); } ); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Child Next: 0,1,2,3 // => Child Completed // => Completed // => Child Next: 4,5,6,7,8 // => Child Completed // => Child Next: 9,10,11,12,13 // => Child Completed /* Using a skip */ var source = Rx.Observable.interval(100) .windowWithTime(500, 100) .take(3); var subscription = source.subscribe( function (child) { child.toArray().subscribe( function (x) { console.log('Child Next: ' + x.toString()); }, function (err) { console.log('Child Error: ' + err); }, function () { console.log('Child Completed'); } ); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Completed // => Child Next: 0,1,2,3,4 // => Child Completed // => Child Next: 0,1,2,3,4,5 // => Child Completed // => Child Next: 1,2,3,4,5,6 // => Child Completed ``` ### Location File: - [`/src/core/linq/observable/windowwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/windowwithtime.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/windowwithtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/windowwithtime.js) RxJS-4.1.0/doc/api/core/operators/windowwithtimeorcount.md000066400000000000000000000045641266736161100236660ustar00rootroot00000000000000### `Rx.Observable.prototype.windowWithTimeOrCount(timeSpan, count, [scheduler])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/windowwithtimeorcount.js "View in source") Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. #### Arguments 1. `timeSpan` *(`Number`)*: Maximum time length of a window. 2. `count` *(`Number`)*: Maximum element count of a window. 3. `[scheduler=Rx.Scheduler.timeout]` *(`Scheduler`)*: Scheduler to run windows timers on. If not specified, the timeout scheduler is used. #### Returns *(`Observable`)*: An observable sequence of windows. #### Example ```js /* Hitting the count buffer first */ var source = Rx.Observable.interval(100) .windowWithTimeOrCount(500, 3) .take(3) .selectMany(function (x) { return x.toArray(); }); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 0,1,2 // => Next: 3,4,5 // => Next: 6,7,8 // => Completed ``` ### Location File: - [`/src/core/linq/observable/windowwithtimeorcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/windowwithtimeorcount.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) Unit Tests: - [`/tests/observable/windowwithtimeorcount.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/windowwithtimeorcount.js) RxJS-4.1.0/doc/api/core/operators/withlatestfrom.md000066400000000000000000000060441266736161100222410ustar00rootroot00000000000000### `Rx.Observable.prototype.withLatestFrom(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/withlatestfrom.js "View in source") Merges the specified observable sequences into one observable sequence by using the selector function only when the source observable sequence (the instance) produces an element. The other observables can be in the form of an argument list of observables or an array. If the result selector is omitted, a list with the elements will be yielded. #### Arguments 1. `args` *(arguments | Array)*: An array or arguments of Observable sequences. 1. `[resultSelector]` *(`Function`)*: Function to invoke when the instance source observable produces an element. If omitted, a list with the elements will be yielded. #### Returns *(`Observable`)*: An observable sequence containing the result of combining elements of the sources using the specified result selector function. #### Example ```js /* Have staggering intervals */ var source1 = Rx.Observable.interval(140) .map(function (i) { return 'First: ' + i; }); var source2 = Rx.Observable.interval(50) .map(function (i) { return 'Second: ' + i; }); // When source1 emits a value, combine it with the latest emission from source2. var source = source1.withLatestFrom( source2, function (s1, s2) { return s1 + ', ' + s2; } ).take(4); var subscription = source.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: First: 0, Second: 1 // => Next: First: 1, Second: 4 // => Next: First: 2, Second: 7 // => Next: First: 3, Second: 10 // => Completed ``` ### Location File: - [`/src/core/linq/observable/withlatestfrom.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/withlatestfrom.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/withlatestfrom.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/withlatestfrom.js) RxJS-4.1.0/doc/api/core/operators/wrap.md000066400000000000000000000040641266736161100201360ustar00rootroot00000000000000### `Rx.Observable.wrap(fn)` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/spawn.js "View in source") Wrap the given generator `fn` into a function that returns an Observable. #### Arguments 1. `fn` *(`Function`)*: A generator function to wrap. #### Returns *(`Function`)*: A function once executed, returns an Observable. #### Example ```js var Rx = require('rx'); var fn = Rx.Observable.wrap(function* (val) { return yield Rx.Observable.just(val); }); fn(42).subscribe( function (x) { console.log('next %s', x); }, function (e) { console.log('error %s', e); }, function () { console.log('completed'); } ); // => next 42 // => completed ``` ### Location File: - [/src/core/linq/observable/spawn.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/spawn.js) Dist: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) - [`rx.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) Prerequisites: - If using `rx.async.js` | `rx.async.compat.js` - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async) Unit Tests: - [``/tests/observable/spawn.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/spawn.js) RxJS-4.1.0/doc/api/core/operators/zip.md000066400000000000000000000072231266736161100177670ustar00rootroot00000000000000### `Rx.Observable.zip(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/zip.js "View in source") Merges the specified observable sequences or Promises into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. If the result selector function is omitted, a list with the elements of the observable sequences at corresponding indexes will be yielded. #### Arguments 1. `args` *(Array|arguments)*: Observable sources. 2. `[resultSelector]` *(Function)*: A function which takes the inputs at the specified index and combines them together. If omitted, a list with the elements of the observable sequences at corresponding indexes will be yielded. #### Returns *(`Observable`)*: An observable sequence containing the result of combining elements of the sources using the specified result selector function. #### Example ```js /* Without a result selector */ var range = Rx.Observable.range(0, 5); var source = Rx.Observable.zip( range, range.skip(1), range.skip(2) ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0,1,2 // => Next: 1,2,3 // => Next: 2,3,4 // => Completed /* With a result selector */ var range = Rx.Observable.range(0, 5); var source = Rx.Observable.zip( range, range.skip(1), range.skip(2), function (s1, s2, s3) { return s1 + ':' + s2 + ':' + s3; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0:1:2 // => Next: 1:2:3 // => Next: 2:3:4 // => Completed /* Using promises and Observables */ var range = Rx.Observable.range(0, 5); var source = Rx.Observable.zip( Promise.resolve(0), Promise.resolve(1), Rx.Observable.return(2), function (s1, s2, s3) { return s1 + ':' + s2 + ':' + s3; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0:1:2 // => Completed ``` ### Location File: - [/src/core/linq/observable/zip.js](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/zip.js) Dist: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - [`rx`](https://www.npmjs.org/package/rx).experimental.js - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [/tests/observable/zip.js](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/zip.js) RxJS-4.1.0/doc/api/core/operators/zipiterable.md000066400000000000000000000050431266736161100214750ustar00rootroot00000000000000### `Rx.Observable.prototype.zipIterable(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/zipiterable.js "View in source") Merges the current observable sequence with iterables such as `Map`, `Array`, `Set` into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. #### Arguments 1. `args` *(`Arguments`)*: Arguments of Arrays, Maps, Sets or other iterables. 2. `[resultSelector]` *(Function)*: A function which takes the inputs at the specified index and combines them together. If omitted, a list with the elements of the observable sequences at corresponding indexes will be yielded. #### Returns *(`Observable`)*: An observable sequence containing the result of combining elements of the sources using the specified result selector function. If omitted, a list with the elements of the observable sequences at corresponding indexes will be yielded. #### Example ```js var array = [3, 4, 5]; var source = Rx.Observable.range(0, 3) .zipIterable( array, function (s1, s2) { return s1 + ':' + s2; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0:3 // => Next: 1:4 // => Next: 2:5 // => Completed ``` ### Location File: - [`/src/core/linq/observable/zipiterable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/zipiterable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/zip.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/zip.js) RxJS-4.1.0/doc/api/core/operators/zipproto.md000066400000000000000000000055321266736161100210540ustar00rootroot00000000000000### `Rx.Observable.prototype.zip(...args, [resultSelector])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/zipproto.js "View in source") Merges the specified observable sequences or Promises into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. #### Arguments 1. `args` *(`Arguments` | `Array`)*: Arguments or an array of observable sequences. 2. `[resultSelector]` *(Function)*: A function which takes the inputs at the specified index and combines them together. If omitted, a list with the elements of the observable sequences at corresponding indexes will be yielded. #### Returns *(`Observable`)*: An observable sequence containing the result of combining elements of the sources using the specified result selector function. #### Example ```js /* Without a result selector */ var range = Rx.Observable.range(0, 5); var source = range.zip( range.skip(1), range.skip(2) ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0,1,2 // => Next: 1,2,3 // => Next: 2,3,4 // => Completed /* Using arguments */ var range = Rx.Observable.range(0, 5); var source = range.zip( range.skip(1), range.skip(2), function (s1, s2, s3) { return s1 + ':' + s2 + ':' + s3; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 0:1:2 // => Next: 1:2:3 // => Next: 2:3:4 // => Completed ``` ### Location File: - [`/src/core/linq/observable/zipproto.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/linq/observable/zipproto.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/observable/zip.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/zip.js) RxJS-4.1.0/doc/api/disposables/000077500000000000000000000000001266736161100162015ustar00rootroot00000000000000RxJS-4.1.0/doc/api/disposables/compositedisposable.md000066400000000000000000000136121266736161100225760ustar00rootroot00000000000000# `Rx.CompositeDisposable` class # Represents a group of disposable resources that are disposed together. ## Usage ## The follow example shows the basic usage of an Rx.CompositeDisposable. ```js var d1 = Rx.Disposable.create(function () { console.log('one'); }); var d2 = Rx.Disposable.create(function () { console.log('two'); }); // Initialize with two disposables var disposables = new Rx.CompositeDisposable(d1, d2); disposables.dispose(); // => one // => two ``` ### Location - rx.js ## `CompositeDisposable Constructor` ## - [`constructor`](#rxcompositedisposablergs) ## `CompositeDisposable Instance Methods` ## - [`add`](#rxcompositedisposableprototypeadditem) - [`dispose`](#rxcompositedisposableprototypedispose) - [`remove`](#rxcompositedisposableprototyperemoveitem) - [`toArray`](#rxcompositedisposableprototypetoarray) ## `CompositeDisposable Instance Properties` ## - [`isDisposed`](#isdisposed) - [`length`](#length) ## _CompositeDisposable Constructor_ ## ### `Rx.CompositeDisposable(...args)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L5-L9 "View in source") Initializes a new instance of the `Rx.CompositeDisposable` class from a group of disposables. #### Arguments 1. `args` *(Array|arguments)*: Disposables that will be disposed together. #### Example ```js var d1 = Rx.Disposable.create(function () { console.log('one'); }); var d2 = Rx.Disposable.create(function () { console.log('two'); }); // Initialize with two disposables var disposables = new Rx.CompositeDisposable(d1, d2); disposables.dispose(); // => one // => two ``` ### Location - rx.js * * * ## _CompositeDisposable Instance Methods_ ## ### `Rx.CompositeDisposable.prototype.add(item)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L17-L24 "View in source") Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. #### Arguments 1. `item` *(Disposable)*: Disposable to add. #### Example ```js var disposables = new Rx.CompositeDisposable(); var d1 = Rx.Disposable.create(function () { console.log('one'); }); disposables.add(d1); disposables.dispose(); // => one ``` ### Location - rx.js * * * ### `Rx.CompositeDisposable.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L49-L60 "View in source") Disposes all disposables in the group and removes them from the group. #### Example ```js var d1 = Rx.Disposable.create(function () { console.log('one'); }); var d2 = Rx.Disposable.create(function () { console.log('two'); }); var disposables = new Rx.CompositeDisposable(d1, d2); disposables.dispose(); // => one // => two console.log(disposables.length); // => 0 ``` ### Location - rx.js * * * ### `Rx.CompositeDisposable.prototype.remove(item)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L31-L44 "View in source") Removes and disposes the first occurrence of a disposable from the CompositeDisposable. #### Arguments 1. `item` *(Disposable)*: Disposable to remove. #### Returns *(Boolean)*: `true` if the disposable was found and disposed; otherwise, `false`. #### Example ```js var disposables = new Rx.CompositeDisposable(); var d1 = Rx.Disposable.create(function () { console.log('one'); }); disposables.add(d1); console.log(disposables.remove(d1)); // => true ``` ### Location - rx.js * * * ### `Rx.CompositeDisposable.prototype.toarray()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L87-L89 "View in source") Converts the existing CompositeDisposable to an array of disposables. Does not dispose the objects. #### Returns *(Array)*: An array of disposable objects. #### Example ```js var d1 = Rx.Disposable.create(function () { console.log('one'); }); var d2 = Rx.Disposable.create(function () { console.log('two'); }); var disposables = new Rx.CompositeDisposable(d1, d2); var array = disposables.toArray(); console.log(array.length); // => 2 ``` ### Location - rx.js * * * ## _CompositeDisposable Instance Properties_ ## ### `isDisposed` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L7 "View in source") Gets a value that indicates whether the object is disposed. #### Example ```js var disposables = new Rx.CompositeDisposable(); var d1 = Rx.Disposable.create(function () { console.log('disposed'); }); disposables.add(d1); console.log(disposables.isDisposed); // => false disposables.dispose(); // => disposed console.log(disposables.isDisposed); // => true ``` ### Location - rx.js * * * ### `length` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/compositedisposable.js#L8 "View in source") Gets the number of disposables in the CompositeDisposable. #### Example ```js var disposables = new Rx.CompositeDisposable(); var d1 = Rx.Disposable.create(function () { console.log('disposed'); }); disposables.add(d1); console.log(disposables.length); // => 1 disposables.dispose(); // => disposed console.log(disposables.length); // => 0 ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/disposables/disposable.md000066400000000000000000000165401266736161100206560ustar00rootroot00000000000000# `Rx.Disposable` class # Provides a set of static methods for creating Disposables, which defines a method to release allocated resources. ## Usage ## The follow example shows the basic usage of an `Rx.Disposable`. ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); disposable.dispose(); // => disposed ``` ## `Disposable Class Methods` ## - [`create`](#rxdisposablecreateaction) - [`isDisposable`](#rxdisposableisdisposabled) ## `Disposable Class Properties` ## - [`empty`](#rxdisposableempty) ## `Disposable Instance Methods` ## - [`dispose`](#rxdisposableprototypedispose) ## _Class Methods_ ## ### `Rx.Disposable.create(action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js"View in source") Creates a disposable object that invokes the specified action when disposed. #### Arguments 1. `action` *(Function)*: Function to run during the first call to `dispose`. The action is guaranteed to be run at most once. #### Returns *(Disposable)*: The disposable object that runs the given action upon disposal. #### Example ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); disposable.dispose(); // => disposed ``` ### Location File: - [`/src/core/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/disposables/disposable.js) * * * ### `Rx.Disposable.isDisposable(d)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js"View in source") Creates a disposable object that invokes the specified action when disposed. #### Arguments 1. `d` *(Object)*: Object to validate whether it has a dispose method. #### Returns *(Boolean)*: `true` if is a disposable object, else `false`. #### Example ```js var disposable = Rx.Disposable.empty; console.log(disposable.isDisposable(disposable)); // => true ``` ### Location File: - [`/src/core/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/disposables/disposable.js) * * * ## _Disposable Class Properties_ ## ### `Rx.Disposable.empty` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js#L130 "View in source") Gets the disposable that does nothing when disposed. #### Returns *(Disposable)*: The disposable that does nothing when disposed. #### Example ```js var disposable = Rx.Disposable.empty; disposable.dispose(); // Does nothing ``` ### Location File: - [`/src/core/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/disposables/disposable.js) * * * ## _Disposable Instance Methods_ ## ### `Rx.Disposable.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js#L13-L18 "View in source") Performs the task of cleaning up resources. #### Example ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); disposable.dispose(); // => disposed ``` ### Location ### Location File: - [`/src/core/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/disposable.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) Prerequisites: - None NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Complete`](http://www.nuget.org/packages/RxJS-Complete) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) Unit Tests: - [`/tests/disposables/disposable.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/disposables/disposable.js) * * * RxJS-4.1.0/doc/api/disposables/refcountdisposable.md000066400000000000000000000107461266736161100224260ustar00rootroot00000000000000# `Rx.RefCountDisposable` class # Represents a disposable resource that only disposes its underlying disposable resource when all `getDisposable` dependent disposable objects have been disposed. ## Usage ## The follow example shows the basic usage of an `Rx.RefCountDisposable`. ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); var refCountDisposable = new Rx.RefCountDisposable(disposable); var disposable1 = refCountDisposable.getDisposable(); var disposable2 = refCountDisposable.getDisposable(); disposable1.dispose(); console.log(disposable.isDisposed); // => false disposable2.dispose(); console.log(disposable.isDisposed); // => false refCountDisposable.dispose(); // => disposed console.log(refCountDisposable.isDisposed); // => true ``` ### Location - rx.js ## `RefCountDisposable Constructor` ## - [`constructor`](#rxrefcountdisposabledisposable) ## `RefCountDisposable Instance Methods` ## - [`dispose`](#rxrefcountdisposableprototypedispose) - [`getDisposable`](#rxrefcountdisposableprototypegetdisposable) ## `RefCountDisposable Instance Properties` ## - [`isDisposed`](#isdisposed) ## _RefCountDisposable Constructor_ ## ### `Rx.RefCountDisposable(disposable)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/rxrefcountdisposable.js#L7-L10 "View in source") Initializes a new instance of the `Rx.RefCountDisposable` class with the specified disposable #### Arguments 1. `disposable` *(Disposable)*: Underlying disposable. #### Example ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); var refCountDisposable = new Rx.RefCountDisposable(disposable); console.log(refCountDisposable.isDisposed); // => false ``` ### Location - rx.js * * * ## _RefCountDisposable Instance Methods_ ## ### `Rx.RefCountDisposable.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/rxrefcountdisposable.js#L30-L35 "View in source") Disposes the underlying disposable only when all dependent disposables have been disposed. #### Example ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); var refCountDisposable = new Rx.RefCountDisposable(disposable); var disposable1 = refCountDisposable.getDisposable(); var disposable2 = refCountDisposable.getDisposable(); disposable1.dispose(); console.log(disposable.isDisposed); // => false disposable2.dispose(); console.log(disposable.isDisposed); // => false refCountDisposable.dispose(); // => disposed console.log(refCountDisposable.isDisposed); // => true ``` ### Location - rx.js * * * ### `Rx.RefCountDisposable.prototype.getDisposable()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/rxrefcountdisposable.js#L18-L20 "View in source") Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. #### Returns *(Disposable)*: A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. #### Example ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); var refCountDisposable = new Rx.RefCountDisposable(disposable); var d = refCountDisposable.getDisposable(); console.log(d === disposable); // => false // Clean up disposables disposable.dispose(); d.dispose(); // Now try to dispose the main refCountDisposable.dispose(); console.log(refCountDisposable.isDisposed); // => true ``` ### Location - rx.js * * * ## _RefCountDisposable Instance Properties_ ## ### `isDisposed` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/rxrefcountdisposable.js#L8 "View in source") Gets a value that indicates whether the object is disposed. #### Example ```js var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); var refCountDisposable = new Rx.RefCountDisposable(disposable); disposable.dispose(); console.log(refCountDisposable.isDisposed); // => false refCountDisposable.dispose(); // => disposed console.log(refCountDisposable.isDisposed); // => true ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/disposables/serialdisposable.md000066400000000000000000000105511266736161100220520ustar00rootroot00000000000000# `Rx.SerialDisposable` class # Represents a disposable resource whose underlying disposable resource can be replaced by another disposable resource, causing automatic disposal of the previous underlying disposable resource. ## Usage ## The follow example shows the basic usage of an Rx.SerialDisposable. ```js var serialDisposable = new Rx.SerialDisposable(); var d1 = Rx.Disposable.create(function () { console.log('one'); }); serialDisposable.setDisposable(d1); var d2 = Rx.Disposable.create(function () { console.log('two'); }); serialDisposable.setDisposable(d2); // => one serialDisposable.dispose(); // = two ``` ### Location - rx.js ## `SerialDisposable Constructor` ## - [`constructor`](#rxserialdisposable) ## `SerialDisposable Instance Methods` ## - [`dispose`](#rxserialdisposableprototypedispose) - [`getDisposable`](#rxserialdisposableprototypegetdisposable) - [`setDisposable`](#rxserialdisposableprototypesetdisposable) ## `SerialDisposable Instance Properties` ## - [`isDisposed`](#isdisposed) ## _SerialDisposable Constructor_ ## ### `Rx.SerialDisposable()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/serialdisposable.js#L5-L8 "View in source") Initializes a new instance of the `Rx.SerialDisposable` class. #### Example ```js var serialDisposable = new Rx.SerialDisposable(); console.log(serialDisposable.isDisposed); // => false ``` ### Location - rx.js * * * ## _SerialDisposable Instance Methods_ ## ### `Rx.SerialDisposable.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/serialdisposable.js#L50-L60 "View in source") Disposes the underlying disposable as well as all future replacements. #### Example ```js var serialDisposable = new Rx.SerialDisposable(); var d1 = Rx.Disposable.create(function () { console.log('one'); }); serialDisposable.setDisposable(disposable); serialDisposable.dispose(); // => one var d2 = Rx.Disposable.create(function () { console.log('two'); }); // => two ``` ### Location - rx.js * * * ### `Rx.SerialDisposable.prototype.getDisposable()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/serialdisposable.js#L16-L18 "View in source") Gets the underlying disposable. #### Returns *(Disposable)*: The underlying disposable. #### Example ```js var serialDisposable = new Rx.SerialDisposable(); var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); serialDisposable.setDisposable(disposable); var d = serialDisposable.getDisposable(); console.log(d === disposable); ``` ### Location - rx.js * * * ### `Rx.SerialDisposable.prototype.setDisposable(value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/serialdisposable.js#L24-L36 "View in source") Sets the underlying disposable. #### Arguments 1. `value` *(Disposable)*: The new underlying disposable. #### Example ```js var serialDisposable = new Rx.SerialDisposable(); var d1 = Rx.Disposable.create(function () { console.log('one'); }); serialDisposable.setDisposable(d1); serialDisposable.dispose(); // => one var d2 = Rx.Disposable.create(function () { console.log('two'); }); serialDisposable.setDisposable(d2); // => two ``` ### Location - rx.js * * * ## _SerialDisposable Instance Properties_ ## ### `isDisposed` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/serialdisposable.js#L6 "View in source") Gets a value that indicates whether the object is disposed. #### Example ```js var serialDisposable = new Rx.SerialDisposable(); var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); serialDisposable.setDisposable(disposable); console.log(serialDisposable.isDisposed); // => false serialDisposable.dispose(); // => disposed console.log(serialDisposable.isDisposed); // => true ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/disposables/singleassignmentdisposable.md000066400000000000000000000114431266736161100241460ustar00rootroot00000000000000# `Rx.SingleAssignmentDisposable` class # Represents a disposable resource which only allows a single assignment of its underlying disposable resource. If an underlying disposable resource has already been set, future attempts to set the underlying disposable resource will throw an Error. ## Usage ## The follow example shows the basic usage of an Rx.SingleAssignmentDisposable. ```js var singleDisposable = new Rx.SingleAssignmentDisposable(); var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); singleDisposable.setDisposable(disposable); singleDisposable.dispose(); // => disposed ``` ### Location - rx.js ## `SingleAssignmentDisposable Constructor` ## - [`constructor`](#rxsingleassignmentdisposable) ## `SingleAssignmentDisposable Instance Methods` ## - [`dispose`](#rxsingleassignmentdisposableprototypedispose) - [`getDisposable`](#rxsingleassignmentdisposableprototypegetdisposable) - [`setDisposable`](#rxsingleassignmentdisposableprototypesetdisposable) ## `SingleAssignmentDisposable Instance Properties` ## - [`isDisposed`](#isdisposed) ## _SingleAssignmentDisposable Constructor_ ## ### `Rx.SingleAssignmentDisposable()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/singleassignmentdisposable.js#L7-L10 "View in source") Initializes a new instance of the `Rx.SingleAssignmentDisposable` class. #### Example ```js var singleDisposable = new Rx.SingleAssignmentDisposable(); console.log(singleDisposable.isDisposed); // => false ``` ### Location - rx.js * * * ## _SingleAssignmentDisposable Instance Methods_ ## ### `Rx.SingleAssignmentDisposable.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/singleassignmentdisposable.js#L47-L57 "View in source") Disposes the underlying disposable. #### Example ```js var singleDisposable = new Rx.SingleAssignmentDisposable(); var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); singleDisposable.setDisposable(disposable); console.log(singleDisposable.isDisposed); // => false singleDisposable.dispose(); // => disposed console.log(singleDisposable.isDisposed); // => true ``` ### Location - rx.js * * * ### `Rx.SingleAssignmentDisposable.prototype.getDisposable()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/singleassignmentdisposable.js#L18-L20 "View in source") Gets the underlying disposable. After disposal, the result of getting this method is undefined. #### Returns *(Disposable)*: The underlying disposable. #### Example ```js var singleDisposable = new Rx.SingleAssignmentDisposable(); var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); singleDisposable.setDisposable(disposable); var d = singleDisposable.getDisposable(); console.log(d === disposable); ``` ### Location - rx.js * * * ### `Rx.SingleAssignmentDisposable.prototype.setDisposable(value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/singleassignmentdisposable.js#L31-L42 "View in source") Sets the underlying disposable. #### Arguments 1. `value` *(Disposable)*: The new underlying disposable. #### Example ```js var singleDisposable = new Rx.SingleAssignmentDisposable(); var d1 = Rx.Disposable.create(function () { console.log('one'); }); singleDisposable.setDisposable(d1); var d2 = Rx.Disposable.create(function () { console.log('two'); }); try { singleDisposable.setDisposable(d2); } catch (e) { console.log(e.message); } // => Disposable has already been assigned ``` ### Location - rx.js * * * ## _SingleAssignmentDisposable Instance Properties_ ## ### `isDisposed` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/disposables/singleassignmentdisposable.js#L8 "View in source") Gets a value that indicates whether the object is disposed. #### Example ```js var singleDisposable = new Rx.SingleAssignmentDisposable(); var disposable = Rx.Disposable.create(function () { console.log('disposed'); }); singleDisposable.setDisposable(disposable); console.log(singleDisposable.isDisposed); // => false singleDisposable.dispose(); // => disposed console.log(singleDisposable.isDisposed); // => true ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/helpers/000077500000000000000000000000001266736161100153335ustar00rootroot00000000000000RxJS-4.1.0/doc/api/helpers/readme.md000066400000000000000000000077211266736161100171210ustar00rootroot00000000000000# Reactive Extensions Helpers # Helper functions for the Reactive Extensions for JavaScript ## Documentation ## - [`Rx.helpers.defaultComparer`](#rxhelpersdefaultcomparerx-y) - [`Rx.helpers.defaultSubComparer`](#rxhelpersdefaultsubscomparerx-y) - [`Rx.helpers.defaultError`](#rxhelpersdefaulterror) - [`Rx.helpers.identity`](#rxhelpersidentityx) - [`Rx.helpers.isPromise`](#rxhelpersispromisep) - [`Rx.helpers.noop`](#rxhelpersnoop) * * * ### `Rx.helpers.defaultComparer(x, y)` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] The default equality comparer, used when a comparer is not supplied to a function. Uses an internal deep equality check. #### Arguments 1. `x` *(Any)*: The first value to compare 2. `y` *(Any)*: The second value to compare #### Returns *(Boolean)*: `true` if equal; else `false`. #### Example ```js var comparer = Rx.helpers.defaultComparer; // Should return true var x = 42, y = 42 console.log(comparer(x, y)); // => true // Should return false var x = new Date(0), y = new Date(); console.log(comparer(x, y)); // => false ``` * * * ### `Rx.helpers.defaultSubcomparer(x, y)` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] The default comparer to determine whether one object is greater, less than or equal to another. #### Arguments 1. `x` *(Any)*: The first value to compare 2. `y` *(Any)*: The second value to compare #### Returns *(Number)*: Returns `1` if `x` is greater than `y`, `-1` if `y` is greater than `x`, and `0` if the objects are equal. #### Example ```js var comparer = Rx.helpers.defaultSubcomparer; // Should return 0 var x = 42, y = 42 console.log(comparer(x, y)); // => 0 // Should return -1 var x = new Date(0), y = new Date(); console.log(comparer(x, y)); // => -1 // Should return 1 var x = 43, y = 42; console.log(comparer(x, y)); // => 1 ``` * * * ### `Rx.helpers.defaultError(err)` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] Throws the specified error #### Arguments 1. `err` *(Any)*: The error to throw #### Example ```js var defaultError = Rx.helpers.defaultError; // Returns its value defaultError(new Error('woops')) // => Error: woops ``` * * * ### `Rx.helpers.identity(x)` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] A function which returns its value unmodified. #### Arguments 1. `x` *(Any)*: The value to return. #### Returns *(Any)*: The value given as the parameter. #### Example ```js var identity = Rx.helpers.identity; // Returns its value var x = identity(42); console.log(x); // => 42 ``` * * * ### `Rx.helpers.isPromise(p)` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] A function which determines whether the object is a `Promise`. #### Arguments 1. `p` *(Any)*: The object to determine whether it is a promise. #### Returns *(Boolean)*: `true` if the object is a `Promise` else `false` #### Example ```js var isPromise = Rx.helpers.isPromise; var p = RSVP.Promise(function (res) { res(42); }); console.log(isPromise(p)); // => true ``` * * * ### `Rx.helpers.noop()` #[Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/basicheader.js "View in source") [Ⓣ][1] A function which does nothing #### Example ```js var noop = Rx.helpers.noop; // This does nothing! noop(); ``` * * * RxJS-4.1.0/doc/api/schedulers/000077500000000000000000000000001266736161100160325ustar00rootroot00000000000000RxJS-4.1.0/doc/api/schedulers/historicalscheduler.md000066400000000000000000000065251266736161100224240ustar00rootroot00000000000000### `Rx.HistoricalScheduler` class [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/historicalscheduler.js "View in source") Provides a virtual time scheduler that uses a `Date` for absolute time and time spans for relative time. This inherits from the `Rx.VirtualTimeScheduler` class. ## Usage ## The following shows an example of using the `Rx.HistoricalScheduler`. This shows creating a minute's worth of data from January 1st, 1970. ```js // Initial data var initialDate = 0; var scheduler = new Rx.HistoricalScheduler(new Date(initialDate)); // Yield unto this subject var s = new Rx.Subject(); // Some random data function getData(time) { return Math.floor(Math.random() * (time + 1)); } // Enqueue 1 minute's worth of data while (initialDate <= 60000) { (function (i) { scheduler.scheduleFuture(new Date(i), function () { s.onNext({ value: getData(i), date: new Date(i) }); }); }(initialDate)); initialDate += 10000; } // Subscription set s.subscribe(function (x) { console.log('value: ', x.value); console.log('date: ', x.date.toGMTString()); }); // Run it scheduler.start(); // => value: 0 // => date: Thu, 1 Jan 1970 00:00:00 UTC // => value: 2013 // => date: Thu, 1 Jan 1970 00:00:10 UTC // => value: 5896 // => date: Thu, 1 Jan 1970 00:00:20 UTC // => value: 5415 // => date: Thu, 1 Jan 1970 00:00:30 UTC // => value: 13411 // => date: Thu, 1 Jan 1970 00:00:40 UTC // => value: 15518 // => date: Thu, 1 Jan 1970 00:00:50 UTC // => value: 51076 // => date: Thu, 1 Jan 1970 00:01:00 UTC ``` ### Location File: - [`/src/core/concurrency/historicalscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/historicalscheduler.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) - [`rx.virutaltime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.virutaltime.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-VirtualTime`](http://www.nuget.org/packages/RxJS-VirtualTime/) Unit Tests: - [`/tests/concurrency/historicalscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/tests/observable/historicalscheduler.js) ## `HistoricalScheduler Constructor` ## - [`constructor`](#rxhistoricalschedulerinitialclock-comparer) ## Inherited Classes ## - [`Rx.VirtualScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/virtualtimescheduler.md) ## _HistoricalScheduler Constructor_ ## ### `Rx.HistoricalScheduler([initialClock], [comparer])` [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/historicalscheduler.js "View in source") Creates a new historical scheduler with the specified initial clock value. #### Arguments 1. [`initialClock`] *(Function)*: Initial value for the clock. 2. [`comparer`] *(Function)*: Comparer to determine causality of events based on absolute time. #### Example ```js function comparer (x, y) { if (x > y) { return 1; } if (x < y) { return -1; } return 0; } var scheduler = new Rx.HistoricalScheduler( new Date(0), /* initial clock of 0 */ comparer /* comparer for determining order */ ); ``` RxJS-4.1.0/doc/api/schedulers/scheduler.md000066400000000000000000000343611266736161100203410ustar00rootroot00000000000000# `Rx.Scheduler` class # Provides a set of static methods to access commonly used schedulers and a base class for all schedulers. ## Usage ## The follow example shows the basic usage of an `Rx.Scheduler`. ```js var disposable = Rx.Scheduler.default.schedule( 'world', function (scheduler, x) { console.log('hello ' + x); } ); // => hello world ``` ### Location File: - [`scheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.js) - [`scheduler.periodic.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.periodic.js) - [`scheduler.recursive.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.recursive.js) - [`scheduler.wrappers.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.wrappers.js) - [`currentthreadscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/currentthreadscheduler.js) - [`defaultscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/defaultscheduler.js) - [`immediatescheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/immediatescheduler.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) ## `Scheduler Instance Methods` ## - [`catch`](#rxschedulerprototypecatchhandler) - [`now`](#rxschedulerprototypenow) ### Standard Scheduling ### - [`schedule`](#rxschedulerprototypeschedulestate-action) - [`scheduleFuture`](#rxschedulerprototypeschedulefuturestate-duetime-action) ### Recursive Scheduling ### - [`scheduleRecursive`](#rxschedulerprototypeschedulerecursivestate-action) - [`scheduleRecursiveFuture`](#rxschedulerprototypeschedulerecursivefuturestate-duetime-action) ### Periodic Scheduling ### - [`schedulePeriodic`](#rxschedulerscheduleperiodicstate-period-action) ## `Scheduler` Class Methods ## - [`normalize`](#rxschedulernormalizetimespan) - [`isScheduler`](#rxschedulerisschedulerobj) ## `Scheduler` Class Properties ## - [`currentThread`](#rxschedulercurrentthread) - [`immediate`](#rxschedulerimmediate) - [`default` | `async`](#rxschedulerdefault) ## _Scheduler Instance Methods_ ## ### `Rx.Scheduler.prototype.catch(handler)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.wrappers.js "View in source") Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. #### Arguments 1. `handler` `Function`: Handler that's run if an exception is caught. The error will be rethrown if the handler returns `false`. #### Returns `Scheduler`: Wrapper around the original scheduler, enforcing exception handling. #### Example ```js SchedulerError.prototype = Object.create(Error.prototype); function SchedulerError(message) { this.message = message; Error.call(this); } var scheduler = Rx.Scheduler.default; var catchScheduler = scheduler.catch(function (e) { return e instanceof SchedulerError; }); // Throws no exception var d1 = catchScheduler.schedule(function () { throw new SchedulerError('woops'); }); var d2 = catchScheduler.schedule(function () { throw new Error('woops'); }); // => Uncaught Error: woops ``` *** ### `Rx.Scheduler.prototype.now()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.js "View in source") Gets the current time according to the Scheduler implementation. #### Returns `Number`: The current time according to the Scheduler implementation. #### Example ```js var now = Rx.Scheduler.default.now(); console.log(now); // => 1381806323143 ``` ### Location - rx.js *** ### Standard Scheduling ### *** ### `Rx.Scheduler.prototype.schedule(state, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.js "View in source") Schedules an action to be executed with state. #### Arguments 1. `state`: Any: State passed to the action to be executed. 2. `action`: `Function`: Action to execute with the following arguments: 1. `scheduler`: `Scheduler` - The current Scheduler 2. `state`: `Any` - The current state #### Returns `Disposable`: The disposable object used to cancel the scheduled action (best effort). #### Example ```js var disposable = Rx.Scheduler.immediate.schedule('world', function (scheduler, x) { console.log('hello ' + x); }); // => hello world // Tries to cancel but too late since it is immediate disposable.dispose(); ``` *** ### `Rx.Scheduler.prototype.scheduleFuture(state, dueTime, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.js "View in source") Schedules an action to be executed at the specified relative due time. Note this only works with the built-in `Rx.Scheduler.default` scheduler, as the rest will throw an exception as the framework does not allow for blocking. #### Arguments 1. `state` `Any`: State passed to the action to be executed. 2. `dueTime` `Number` | `Date`: Relative or absolute time at which to execute the action. 3. `action`: `Function`: Action to execute with the following arguments: 1. `scheduler`: `Scheduler` - The current Scheduler 2. `state`: `Any` - The current state #### Returns `Disposable`: The disposable object used to cancel the scheduled action (best effort). #### Example ```js /* Relative schedule */ var disposable = Rx.Scheduler.default.scheduleFuture( 'world', 5000, /* 5 seconds in the future */ function (scheduler, x) { console.log('hello ' + x + ' after 5 seconds'); } ); // => hello world after 5 seconds /* Absolute schedule */ var disposable = Rx.Scheduler.default.scheduleFuture( 'world', new Date(Date.now() + 5000), /* 5 seconds in the future */ function (scheduler, x) { console.log('hello ' + x + ' after 5 seconds'); } ); // => hello world after 5 seconds ``` *** ### Recursive Scheduling ### ### `Rx.Scheduler.prototype.scheduleRecursive(state, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.recursive.js "View in source") Schedules an action to be executed with state. #### Arguments 1. `state` `Any`: State passed to the action to be executed. 2. `action`: `Function`: Action to execute with the following parameters: 1. `state`: `Any` - The state passed in 2. `recurse`: `Function` - The action to execute for recursive actions which takes the form of `recurse(newState)` where the new state is passed to be executed again. #### Returns `Disposable`: The disposable object used to cancel the scheduled action (best effort). #### Example ```js var disposable = Rx.Scheduler.default.scheduleRecursive( 0, function (i, recurse) { console.log(i); if (++i < 3) { recurse(i); } } ); // => 0 // => 1 // => 2 ``` *** ### `Rx.Scheduler.prototype.scheduleRecursiveFuture(state, dueTime, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.recursive.js#L114-118 "View in source") Schedules an action to be executed recursively at a specified absolute or relative due time. Note this only works with the built-in `Rx.Scheduler.timeout` scheduler, as the rest will throw an exception as the framework does not allow for blocking. #### Arguments 1. `state` `Any`: State passed to the action to be executed. 2. `dueTime` `Number`: Absolute time at which to execute the action for the first time. 2. `action`: `Function`: Action to execute with the following parameters: 1. `state`: `Any` - The state passed in 2. `recurse`: `Function` - The action to execute for recursive actions which takes the form of `recurse(newState, dueTime)`. #### Returns `Disposable`: The disposable object used to cancel the scheduled action (best effort). #### Example ```js /* Absolute recursive future */ var disposable = Rx.Scheduler.default.scheduleRecursiveFuture( 0, new Date(Date.now() + 5000), /* 5 seconds in the future */ function (i, self) { console.log(i); if (++i < 3) { // Schedule mutliplied by a second by position self(i, new Date(Date.now() + (i * 1000))); } } ); // => 0 // => 1 // => 2 /* Relative recursive future */ var disposable = Rx.Scheduler.default.scheduleRecursiveFuture( 0, 5000, /* 5 seconds in the future */ function (i, self) { console.log(i); if (++i < 3) { // Schedule mutliplied by a second by position self(i, i * 1000); } } ); // => 0 // => 1 // => 2 ``` *** ### Periodic Scheduling ### ### `Rx.Scheduler.prototype.schedulePeriodic(state, period, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.periodic.js#L20-31 "View in source") Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using `window.setInterval` for the base implementation. #### Arguments 1. `state` `Any`: State passed to the action to be executed. 2. `period` `Number`: Period for running the work periodically in ms. 3. `action`: `Function`: Action to execute with the following parameters. Note that the return value from this function becomes the state in the next execution of the action. 1. `state`: `Any` - The state passed in #### Returns `Disposable`: The disposable object used to cancel the scheduled action (best effort). #### Example ```js var disposable = Rx.Scheduler.default.schedulePeriodic( 0, 1000, /* 1 second */ function (i) { console.log(i); // After three times, dispose if (++i > 3) { disposable.dispose(); } return i; }); // => 0 // => 1 // => 2 // => 3 ``` *** ## _Scheduler Class Methods_ ## ### `Rx.Scheduler.normalize(timeSpan)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.js#L87-90 "View in source") Normalizes the specified time span value to a positive value. #### Arguments 1. `timeSpan` `Number`: The time span value to normalize. #### Returns `Number`: The specified time span value if it is zero or positive; otherwise, 0 #### Example ```js var r1 = Rx.Scheduler.normalize(-1); console.log(r1); // => 0 var r2 = Rx.Scheduler.normalize(255); console.log(r2); // => 255 ``` *** ### `Rx.Scheduler.isScheduler(obj)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/scheduler.js "View in source") Determines whether the given object is a `Scheduler` instance #### Arguments 1. `obj` `Any`: The object to determine whether it is a `Scheduler` instance #### Returns `Boolean`: Whether the given object is a Scheduler. #### Example ```js var isScheduler = Rx.Scheduler.isScheduler(Rx.Scheduler.default); console.log('Is scheduler? %s', isScheduler); // Is scheduler? true ``` *** ## _Scheduler Class Properties_ ## ### `Rx.Scheduler.currentThread` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/currentthreadscheduler.js "View in source") Gets a scheduler that schedules work as soon as possible on the current thread. This implementation does not support relative and absolute scheduling due to thread blocking required. #### Example ```js var scheduler = Rx.Scheduler.currentThread; var disposable = scheduler.schedule( 'world', function (scheduler, x) { console.log('hello ' + x); }); // => hello world ``` ### Location - rx.js *** ### `Rx.Scheduler.immediate` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/immediatescheduler.js "View in source") Gets a scheduler that schedules work immediately on the current thread. #### Example ```js var scheduler = Rx.Scheduler.immediate; var disposable = scheduler.scheduleRecursive( 0, function (x, self) { console.log(x); if (++x < 3) { self(x); } } ); // => 0 // => 1 // => 2 ``` ### Location - rx.js *** ### `Rx.Scheduler.default` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/defaultscheduler.js "View in source") Gets a scheduler that schedules work via a timed callback based upon platform. An alias exists as `Rx.Scheduler.async`. For all schedule calls, it defaults to: - Node.js: uses `setImmediate` for newer builds, and `process.nextTick` for older versions. - Browser: depending on platform may use `setImmediate`, `MessageChannel`, `window.postMessage` and for older versions of IE, it will default to `script.onreadystatechanged`, else falls back to `window.setTimeout`. For all relative and absolute scheduling, it defaults to using `window.setTimeout`. #### Example ```js var scheduler = Rx.Scheduler.default; var disposable = scheduler.schedule( 0, function (scheduler, x) { console.log(x); } ); // => 0 ``` *** RxJS-4.1.0/doc/api/schedulers/virtualtimescheduler.md000066400000000000000000000313561266736161100226300ustar00rootroot00000000000000# `Rx.VirtualTimeScheduler` class # Base class for providing scheduling in virtual time. This inherits from the `Rx.Scheduler` class. ## Usage ## The following shows an example of using the `Rx.VirtualTimeScheduler`. In order for this to work, you must implement the `add`, `toAbsoluteTime` and `toRelativeTime` methods as described below. ```js /* Comparer required for scheduling priority */ function comparer (x, y) { if (x > y) { return 1; } if (x < y) { return -1; } return 0; } var scheduler = new Rx.VirtualTimeScheduler(0, comparer); /** * Adds a relative time value to an absolute time value. * @param {Any} absolute Absolute virtual time value. * @param {Any} relative Relative virtual time value to add. * @return {Any} Resulting absolute virtual time sum value. */ scheduler.add = function (absolute, relative) { return absolute + relative; }; /** * Converts an absolute time to a number * @param {Number} The absolute time in ms * @returns {Number} The absolute time in ms */ scheduler.toAbsoluteTime = function (absolute) { return new Date(absolute); }; /** * Converts the time span number/Date to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ scheduler.toRelativeTime = function (timeSpan) { return timeSpan; }; // Schedule some time scheduler.scheduleAbsolute(null, new Date(1), function () { console.log('foo'); }); scheduler.scheduleAbsolute(null, new Date(2), function () { console.log('bar'); }); scheduler.scheduleAbsolute(null, new Date(3), function () { scheduler.stop(); }); // Start the scheduler scheduler.start(); // => foo // => bar // Check the clock once stopped console.log(scheduler.now()); // => 3 console.log(scheduler.clock); // => 3 ``` ### Location File: - [`virtualtimescheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js) Dist: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.virtualtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.virtualtime.js) ## `VirtualTimeScheduler Constructor` ## - [`constructor`](#rxvirtualtimeschedulerinitialclock-comparer) ## `VirtualTimeScheduler Instance Methods` ## - [`advanceBy`](#rxvirtualtimeschedulerprototypeadvancebytime) - [`advanceTo`](#rxvirtualtimeschedulerprototypeadvancetotime) - [`scheduleAbsolute`](#rxvirtualtimeschedulerprototypescheduleabsolutestate-duetime-action) - [`scheduleRelative`](#rxvirtualtimeschedulerprototypeschedulerelativestate-duetime-action) - [`sleep`](#rxvirtualtimeschedulerprototypesleeptime) - [`start`](#rxvritualtimeschedulerprototypestart) - [`stop`](#rxvritualtimeschedulerprototypestop) ## `VirtualTimeScheduler Instance Properties` ## - [`isEnabled`](#isenabled) ## `VirtualTimeScheduler Protected Abstract Methods` ## - [`add`](#rxvirtualtimeschedulerprototypeaddabsolute-relative) - [`toAbsoluteTime`](#rxvirtualtimeschedulerprototypetoabsolutetimeabsolute) - [`toRelativeTime`](#rxvirtualtimeschedulerprototypetorelativetimetimespan) ## `VirtualTimeScheduler Protected Methods` ## - [`getNext`](#rxvirtualtimeschedulerprototypegetnext) ## Inherited Classes ## - [`Rx.Scheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/scheduler.md) ## _VirtualTimeScheduler Constructor_ ## ### `Rx.VirtualTimeScheduler(initialClock, comparer)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js#L38-L44 "View in source") Creates a new virtual time scheduler with the specified initial clock value and absolute time comparer. #### Arguments 1. `initialClock` *(Function)*: Initial value for the clock. 2. `comparer` *(Function)*: Comparer to determine causality of events based on absolute time. #### Example ```js function comparer (x, y) { if (x > y) { return 1; } if (x < y) { return -1; } return 0; } var scheduler = new Rx.VirtualTimeScheduler( 0, /* initial clock of 0 */ comparer /* comparer for determining order */ ); ``` *** ## _VirtualTimeScheduler Instance Methods_ ## ### `Rx.VirtualTimeScheduler.prototype.advanceBy(time)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js#L166-L176 "View in source") Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. #### Arguments 1. `time` *(Any)*: Relative time to advance the scheduler's clock by. #### Example ```js var scheduler = new MyVirtualScheduler( 200 /* initial time */ ); scheduler.scheduleAbsolute(null, 250, function () { console.log('hello'); }); scheduler.advanceBy(300); // => hello console.log(scheduler.clock); // => 500 ``` *** ### `Rx.VirtualTimeScheduler.prototype.advanceTo(time)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js "View in source") Advances the scheduler's clock to the specified time, running all work till that point. #### Arguments 1. `time` *(Any)*: Absolute time to advance the scheduler's clock to. #### Example ```js var scheduler = new MyVirtualScheduler( 0 /* initial time */ ); scheduler.scheduleAbsolute(null, 100, function () { console.log('hello'); }); scheduler.scheduleAbsolute(null, 200, function () { console.log('world'); }); scheduler.advanceBy(300); // => hello // => world console.log(scheduler.clock); // => 300 ``` *** ### `Rx.VirtualTimeScheduler.prototype.scheduleAbsolute(state, dueTime, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js "View in source") Schedules an action to be executed at dueTime. #### Arguments 1. `state`: *(Any)*: State passed to the action to be executed. 2. `dueTime` *(Any)*: Absolute time at which to execute the action. 3. `action`: `Function`: Action to execute with the following arguments: 1. `scheduler`: `Scheduler` - The current Scheduler 2. `state`: `Any` - The current state #### Returns *(Disposable)*: The disposable object used to cancel the scheduled action (best effort). #### Example ```js var scheduler = new MyVirtualScheduler( 0 /* initial time */ ); scheduler.scheduleAbsolute('world', 100, function (scheduler, state) { console.log('hello ' + state); }); scheduler.scheduleAbsolute('moon', 200, function (scheduler, state) { console.log('goodnight ' + state); }); scheduler.start(); // => hello world // => goodnight moon console.log(scheduler.clock); // => 200 ``` *** ### `Rx.VirtualTimeScheduler.prototype.scheduleRelative(state, dueTime, action)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js#L89-L92 "View in source") Schedules an action to be executed at dueTime. #### Arguments 1. `state`: *(Any)*: State passed to the action to be executed. 2. `dueTime` *(Any)*: Relative time after which to execute the action. 3. `action`: `Function`: Action to execute with the following arguments: 1. `scheduler`: `Scheduler` - The current Scheduler 2. `state`: `Any` - The current state #### Returns *(Disposable)*: The disposable object used to cancel the scheduled action (best effort). #### Example ```js var scheduler = new MyVirtualScheduler( 0 /* initial time */ ); scheduler.scheduleRelative('world', 100, function (scheduler, state) { console.log('hello ' + state); }); scheduler.scheduleRelative('moon', 200, function (scheduler, state) { console.log('goodnight ' + state); }); scheduler.start(); // => hello world // => goodnight moon console.log(scheduler.clock); // => 300 ``` *** ### `Rx.VirtualTimeScheduler.prototype.sleep(time)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js#L182-L190 "View in source") Advances the scheduler's clock by the specified relative time. #### Arguments 1. `time` *(Any)*: Relative time to advance the scheduler's clock by. #### Example ```js var scheduler = new MyVirtualScheduler( 0 /* initial time */ ); scheduler.sleep(400); console.log(scheduler.clock); // => 400 ``` *** ### `Rx.VirtualTimeScheduler.prototype.start()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js#L107-L123 "View in source") Starts the virtual time scheduler. #### Example ```js var scheduler = new MyVirtualScheduler( 0 /* initial time */ ); scheduler.scheduleRelative('world', 100, function (scheduler, state) { console.log('hello ' + state); }); scheduler.scheduleRelative('moon', 200, function (scheduler, state) { console.log('goodnight ' + state); }); scheduler.start(); // => hello world // => goodnight moon console.log(scheduler.clock); // => 400 ``` *** ### `Rx.VirtualTimeScheduler.prototype.stop()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/concurrency/virtualtimescheduler.js#L128-L130 "View in source") Stops the virtual time scheduler. #### Example ```js var scheduler = new MyVirtualScheduler( 0 /* initial time */ ); scheduler.scheduleRelative('world', 100, function (scheduler, state) { console.log('hello ' + state); }); scheduler.scheduleRelative(null, 100, function (scheduler, state) { scheduler.stop(); }); scheduler.scheduleRelative(null, 100, function (scheduler, state) { console.log('goodbye cruel ' + state); }); scheduler.start(); // => hello world ``` *** ## _VirtualTimeScheduler Abstract Protected Methods_ ## ### `Rx.VirtualTimeScheduler.prototype.add(absolute, relative)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/asyncsubject.js#L54 "View in source") Adds a relative time value to an absolute time value. This method is used in several methods including `scheduleRelative`, `advanceBy` and `sleep`. ### Arguments 1. `absolute` *(Any)*: Absolute virtual time value. 2. `relative` *(Any)*: Relative virtual time value. #### Returns *(Any)*: Resulting absolute virtual time sum value. #### Example One possible implementation could be as simple as the following: ```js scheduler.add = function (absolute, relative) { return absolute + relative; }; ``` *** ### `Rx.VirtualTimeScheduler.prototype.toAbsoluteTime(absolute)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/asyncsubject.js#L61 "View in source") Converts an absolute time to a number. This is used directly in the `now` method on the `Rx.Scheduler` ### Arguments 1. `absolute` *(Any)*: The absolute time to convert. #### Returns *(Number)*: The absolute time in ms. #### Example One possible implementation could be as simple as the following: ```js // String -> Number scheduler.toAbsoluteTime = function (absolute) { return absolute.length; }; ``` *** ### `Rx.VirtualTimeScheduler.prototype.toRelativeTime(timeSpan)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/asyncsubject.js#L61 "View in source") Converts the time span number/Date to a relative virtual time value. ### Arguments 1. `timeSpan` *(Any)*: The time span number value to convert. This is used directly in `scheduleFuture`. #### Returns *(Number)*: Corresponding relative virtual time value. #### Example One possible implementation could be as simple as the following: ```js // Number -> Number scheduler.toRelativeTime = function (timeSpan) { return timeSpan; }; ``` *** RxJS-4.1.0/doc/api/subjects/000077500000000000000000000000001266736161100155135ustar00rootroot00000000000000RxJS-4.1.0/doc/api/subjects/asyncsubject.md000066400000000000000000000074261266736161100205430ustar00rootroot00000000000000# `Rx.AsyncSubject` class # Represents the result of an asynchronous operation. The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. This class inherits both from the `Rx.Observable` and `Rx.Observer` classes. ## Usage ## The following example shows caching on the last value produced when followed by an onCompleted notification which makes it available to all subscribers. ```js var subject = new Rx.AsyncSubject(); var i = 0; var handle = setInterval(function () { subject.onNext(i); if (++i > 3) { subject.onCompleted(); clearInterval(handle); } }, 500); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 3 // => Completed ``` ### Location - rx.js ## `AsyncSubject Constructor` ## - [`constructor`](#rxasyncsubject) ## `AsyncSubject Instance Methods` ## - [`dispose`](#rxasyncsubjectprototypedispose) - [`hasObservers`](#rxasyncsubjectprototypehasobservers) ## Inherited Classes ## - [`Rx.Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) - [`Rx.Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) ## _AsyncSubject Constructor_ ## ### `Rx.AsyncSubject()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/asyncsubject.js#L33-L41 "View in source") Creates a subject that can only receive one value and that value is cached for all future observations. #### Example ```js var subject = new Rx.AsyncSubject(); subject.onNext(42); subject.onCompleted(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 // => Completed ``` ### Location - rx.js * * * ## _AsyncSubject Instance Methods_ ## ### `Rx.AsyncSubject.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/asyncsubject.js#L108-L113 "View in source") Unsubscribe all observers and release resources. #### Example ```js var subject = new Rx.AsyncSubject(); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); subject.onCompleted(); // => Next: 42 // => Completed subject.dispose(); try { subject.onNext(56); } catch (e) { console.log(e.message); } // => Object has been disposed ``` ### Location - rx.js * * * ### `Rx.AsyncSubject.prototype.hasObservers()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/asyncsubject.js#L48-L51 "View in source") Indicates whether the subject has observers subscribed to it. #### Returns *(Boolean)*: Returns `true` if the AsyncSubject has observers, else `false`. #### Example ```js var subject = new Rx.AsyncSubject(); console.log(subject.hasObservers()); // => false var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); console.log(subject.hasObservers()); // => true ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/subjects/behaviorsubject.md000066400000000000000000000125271266736161100212230ustar00rootroot00000000000000# `Rx.BehaviorSubject` class # Represents a value that changes over time. Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. If you are looking for BehaviorSubject without initial value see [`Rx.ReplaySubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/replaysubject.md). This class inherits both from the `Rx.Observable` and `Rx.Observer` classes. ## Usage ## The follow example shows the basic usage of an `Rx.BehaviorSubject` class. ```js /* Initialize with initial value of 42 */ var subject = new Rx.BehaviorSubject(42); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 42 subject.onNext(56); // => Next: 56 subject.onCompleted(); // => Completed ``` ### Location - rx.binding.js ## `BehaviorSubject Constructor` ## - [`constructor`](#rxbehaviorsubjectintialvalue) ## `BehaviorSubject Instance Methods` ## - [`dispose`](#rxbehaviorsubjectprototypedispose) - [`getValue`] (#rxbehaviorsubjectprototypegetvalue) - [`hasObservers`](#rxbehaviorsubjectprototypehasobservers) ## Inherited Classes ## - [`Rx.Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) - [`Rx.Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) ## _BehaviorSubject Constructor_ ## ### `Rx.BehaviorSubject(initialValue)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/behaviorsubject.js#L27-L34 "View in source") Initializes a new instance of the `Rx.BehaviorSubject` class which creates a subject that caches its last value and starts with the specified value. #### Arguments 1. `initialValue` *(Any)*: Initial value sent to observers when no other value has been received by the subject yet. #### Example ```js var subject = new Rx.BehaviorSubject(56); subject.onCompleted(); var subscription = source.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: 56 subject.onNext(42); // => Next: 42 subject.onCompleted(); // => Completed ``` ### Location = rx.binding.js * * * ## _BehaviorSubject Instance Methods_ ## ### `Rx.BehaviorSubject.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/behaviorsubject.js#L101-L106 "View in source") Unsubscribe all observers and release resources. #### Example ```js var subject = new Rx.BehaviorSubject(); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); // => Next: 42 subject.onCompleted(); // => Completed subject.dispose(); try { subject.onNext(56); } catch (e) { console.log(e.message); } // => Object has been disposed ``` ### Location = rx.binding.js * * * ### `Rx.BehaviorSubject.prototype.getValue()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/behaviorsubject.js#L44-L50 "View in source") Gets the current value or throws an exception. Value is frozen after `onCompleted` is called. After `onError` is called always throws the specified exception. An exception is always thrown after `dispose` is called. #### Returns *(Mixed)*: The initial `value` passed to the constructor until `onNext` is called; after which, the last value passed to `onNext`. #### Example ```js var subject = new Rx.BehaviorSubject(56); console.log('Value is: ' + subject.getValue()); // => Value is: 56 subject.onNext(42); console.log('Value is: ' + subject.getValue()); // => Value is: 42 subject.onCompleted(); subject.onNext(100); console.log('Value is frozen: ' + subject.getValue()); // => Value is frozen: 42 subject.dispose(); try { subject.getValue(); } catch (e) { console.log(e.message); } // => Object has been disposed ``` ### Location = rx.binding.js * * * ### `Rx.BehaviorSubject.prototype.hasObservers()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/behaviorsubject.js#L55 "View in source") Indicates whether the subject has observers subscribed to it. #### Returns *(Boolean)*: Returns `true` if the Subject has observers, else `false`. #### Example ```js var subject = new Rx.BehaviorSubject(); console.log(subject.hasObservers()); // => false var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); console.log(subject.hasObservers()); // => true ``` ### Location = rx.binding.js * * * RxJS-4.1.0/doc/api/subjects/replaysubject.md000066400000000000000000000104631266736161100207150ustar00rootroot00000000000000# `Rx.ReplaySubject` class # Represents an object that is both an observable sequence as well as an observer. Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. This class inherits both from the `Rx.Observable` and `Rx.Observer` classes. ## Usage ## The follow example shows the basic usage of an `Rx.ReplaySubject` class. Note that this only holds the past two items in the cache. ```js var subject = new Rx.ReplaySubject(2 /* buffer size */); subject.onNext('a'); subject.onNext('b'); subject.onNext('c'); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: b // => Next: c subject.onNext('d'); // => Next: d ``` ### Location - rx.binding.js ## `ReplaySubject Constructor` ## - [`constructor`](#rx) ## `ReplaySubject Instance Methods` ## - [`dispose`](#rxreplaysubjectprototypedispose) - [`hasObservers`](#rxreplaysubjectprototypehasobservers) ## Inherited Classes ## - [`Rx.Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) - [`Rx.Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) ## _ReplaySubject Constructor_ ## ### `Rx.ReplaySubject([bufferSize], [windowSize], [scheduler])` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/replaysubject.js#L53-L64 "View in source") Initializes a new instance of the `Rx.ReplaySubject` class with the specified buffer size, window and scheduler. #### Arguments 1. `[bufferSize = Number.MAX_VALUE]` *(Number)*: Maximum element count of the replay buffer. 2. `[windowSize = NUMBER.MAX_VALUE]` *(Number)*: Maximum time length of the replay buffer. 3. `[scheduler = Rx.Scheduler.currentThread]` *(Scheduler)*: Scheduler the observers are invoked on. #### Example ```js var subject = new Rx.ReplaySubject( 2 /* buffer size */, null /* unlimited time buffer */, Rx.Scheduler.timeout); subject.onNext('a'); subject.onNext('b'); subject.onNext('c'); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); // => Next: b // => Next: c subject.onNext('d'); // => Next: d ``` ### Location - rx.binding.js * * * ## _ReplaySubject Instance Methods_ ## ### `Rx.ReplaySubject.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/replaysubject.js#L130-L133 "View in source") Unsubscribe all observers and release resources. #### Example ```js var subject = new Rx.ReplaySubject(); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); // => Next: 42 subject.onCompleted(); // => Completed subject.dispose(); try { subject.onNext(56); } catch (e) { console.log(e.message); } // => Object has been disposed ``` ### Location - rx.binding.js * * * ### `Rx.ReplaySubject.prototype.hasObservers()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/replaysubject.js#L61-L63 "View in source") Indicates whether the subject has observers subscribed to it. #### Returns *(Boolean)*: Returns `true` if the Subject has observers, else `false`. #### Example ```js var subject = new Rx.ReplaySubject(); console.log(subject.hasObservers()); // => false var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); console.log(subject.hasObservers()); // => true ``` ### Location - rx.binding.js * * * RxJS-4.1.0/doc/api/subjects/subject.md000066400000000000000000000121351266736161100174760ustar00rootroot00000000000000# `Rx.Subject` class # Represents an object that is both an observable sequence as well as an observer. Each notification is broadcasted to all subscribed observers. This class inherits both from the `Rx.Observable` and `Rx.Observer` classes. ## Usage ## The follow example shows the basic usage of an Rx.Subject. ```js var subject = new Rx.Subject(); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); // => Next: 42 subject.onNext(56); // => Next: 56 subject.onCompleted(); // => Completed ``` ### Location - rx.js ## `Subject Constructor` ## - [`constructor`](#rxsubject) ## `Subject Class Methods` ## - [`create`](#rxsubjectcreateobserver-observable) ## `Subject Instance Methods` ## - [`dispose`](#rxsubjectprototypedispose) - [`hasObservers`](#rxsubjectprototypehasobservers) ## Inherited Classes ## - [`Rx.Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) - [`Rx.Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) ## _Subject Constructor_ ## ### `Rx.Subject()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/subject.js#L26-L31 "View in source") Creates a subject. #### Example ```js var subject = new Rx.Subject(); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); // => Next: 42 subject.onCompleted(); // => Completed ``` ### Location - rx.js * * * ## _Subject Class Methods_ ## ### `Rx.Subject.create(observer, observable)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/subject.js#L101-L103 "View in source") Creates a subject from the specified observer and observable. #### Arguments 1. `observer` *(Observer)*: The observer used to send messages to the subject. 2. `observable` *(Observable)*: The observable used to subscribe to messages sent from the subject. #### Returns *(Subject)*: Subject implemented using the given observer and observable. #### Example ```js /* Using a Web Worker to send and receive data via an Rx.Subject */ /* worker.js */ self.onmessage = function(e) { self.postMessage(e.data); }; /* client.js */ var worker = new Worker('worker.js'); // Create observer to handle sending messages var observer = Rx.Observer.create( function (data) { worker.postMessage(data); }); // Create observable to handle the messages var observable = Rx.Observable.create(function (obs) { worker.onmessage = function (data) { obs.onNext(data); }; worker.onerror = function (err) { obs.onError(err); }; return function () { worker.close(); }; }); var subject = Rx.Subject.create(observer, observable); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); // => Next: 42 ``` ### Location - rx.js * * * ## _Subject Instance Methods_ ## ### `Rx.Subject.prototype.dispose()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/subject.js#L89-L92 "View in source") Unsubscribe all observers and release resources. #### Example ```js var subject = new Rx.Subject(); var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); subject.onNext(42); // => Next: 42 subject.onCompleted(); // => Completed subject.dispose(); try { subject.onNext(56); } catch (e) { console.log(e.message); } // => Object has been disposed ``` ### Location - rx.js * * * ### `Rx.Subject.prototype.hasObservers()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/subjects/subject.js#L38-L40 "View in source") Indicates whether the subject has observers subscribed to it. #### Returns *(Boolean)*: Returns `true` if the Subject has observers, else `false`. #### Example ```js var subject = new Rx.Subject(); console.log(subject.hasObservers()); // => false var subscription = subject.subscribe( function (x) { console.log('Next: ' + x.toString()); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); console.log(subject.hasObservers()); // => true ``` ### Location - rx.js * * * RxJS-4.1.0/doc/api/testing/000077500000000000000000000000001266736161100153465ustar00rootroot00000000000000RxJS-4.1.0/doc/api/testing/reactivetest.md000066400000000000000000000134751266736161100204040ustar00rootroot00000000000000# `Rx.ReactiveTest` class # This class contains test utility methods such as create notifications for testing purposes. ### Location - rx.testing.js ## `ReactiveTest Class Methods` ## - [`onCompleted`](#rxreactivetestoncompletedticks) - [`onError`](#rxreactivetestonerrorticksexception) - [`onNext`](#rxreactivetestonnextticksvalue) - [`subscribe`](#rxasyncsubjectprototypehasobservers) ## `ReactiveTest Class Fields` ## - [`created`](#rxreactivetestcreated) - [`disposed`](#rxreactivetestdisposed) - [`subscribed`](#rxreactivetestsubscribed) ## _ReactiveTest Class Methods_ ## ### `Rx.ReactiveTest.onCompleted(ticks)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/reactivetest.js#L89-L91 "View in source") Factory method for an OnCompleted notification record at a given time. #### Arguments 1. `ticks` *(Number)*: Recorded virtual time the OnCompleted notification occurs. #### Returns *(Recorded)*: OnCompleted notification. #### Example ```js var onCompleted = Rx.ReactiveTest.onCompleted; var scheduler = new Rx.TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(260) ); var res = scheduler.startScheduler(function () { return xs.map(function (x) { return x; }); }); // Write custom assertion collectionAssert.assertEqual(res.messages, [ onCompleted(260) ]); ``` ### Location - rx.testing.js * * * ### `Rx.ReactiveTest.onError(ticks, exception)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/reactivetest.js#L77-L82 "View in source") Factory method for an OnError notification record at a given time with a given error. #### Arguments 1. `ticks` *(Number)*: Recorded virtual time the OnError notification occurs. 2. `exception` *(Error | Function)*: Recorded exception stored in the OnError notification or a predicate #### Returns *(Recorded)*: Recorded OnError notification. #### Example ```js var ex = new Error('woops'); var onError = Rx.ReactiveTest.onError; var scheduler = new Rx.TestScheduler(); var xs = scheduler.createHotObservable( onError(201, ex) ); var res = scheduler.startScheduler(function () { return xs.map(function (x) { return x; }); }); // Write custom assertion collectionAssert.assertEqual(res.messages, [ // Using a predicate onError(201, function (e) { return e.message === 'woops'; }) ]); ``` ### Location - rx.testing.js * * * ### `Rx.ReactiveTest.onNext(ticks, value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/reactivetest.js#L61-L66 "View in source") Factory method for an OnNext notification record at a given time with a given error. #### Arguments 1. `ticks` *(Number)*: Recorded virtual time the OnNext notification occurs. 2. `value` *(Any | Function)*: Recorded exception stored in the OnNext notification or a predicate #### Returns *(Recorded)*: Recorded OnNext notification. #### Example ```js var onNext = Rx.ReactiveTest.onNext; var scheduler = new Rx.TestScheduler(); var xs = scheduler.createHotObservable( onNext(201, 42) ); var res = scheduler.startScheduler(function () { return xs.map(function (x) { return x; }); }); // Write custom assertion collectionAssert.assertEqual(res.messages, [ // Using a predicate onNext(201, function (x) { return x === 42; }) ]); ``` ### Location - rx.testing.js * * * ## _ReactiveTest Class Fields_ ## ### `Rx.ReactiveTest.created` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/reactivetest.js#L45 "View in source") Default virtual time used for creation of observable sequences in unit tests. This has a value of `100`. #### Example ```js var scheduler = new Rx.TestScheduler(); var xs = scheduler.createHotObservable( Rx.ReactiveTest.onNext(201, 42), Rx.ReactiveTest.onNext(202, 56), Rx.ReactiveTest.onCompleted(203) ); var res = scheduler.startScheduler( function () { return xs.map(function (x) { return x; })}, Rx.ReactiveTest.created, Rx.ReactiveTest.subscribed, Rx.ReactiveTest.disposed ); ``` ### Location - rx.testing.js * * * ### `Rx.ReactiveTest.disposed` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/reactivetest.js#L49 "View in source") Default virtual time used to dispose subscriptions in unit tests. This has a value of `1000`. #### Example ```js var scheduler = new Rx.TestScheduler(); var xs = scheduler.createHotObservable( Rx.ReactiveTest.onNext(201, 42), Rx.ReactiveTest.onNext(202, 56), Rx.ReactiveTest.onCompleted(203) ); var res = scheduler.startScheduler( function () { return xs.map(function (x) { return x; })}, { created: Rx.ReactiveTest.created, subscribed: Rx.ReactiveTest.subscribed, disposed: Rx.ReactiveTest.disposed } ); ``` ### Location - rx.testing.js * * * ### `Rx.ReactiveTest.subscribed` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/reactivetest.js#L47 "View in source") Default virtual time used to subscribe to observable sequences in unit tests. This has a value of `200`. #### Example ```js var scheduler = new Rx.TestScheduler(); var xs = scheduler.createHotObservable( Rx.ReactiveTest.onNext(201, 42), Rx.ReactiveTest.onNext(202, 56), Rx.ReactiveTest.onCompleted(203) ); var res = scheduler.startScheduler( function () { return xs.map(function (x) { return x; })} ); ``` ### Location - rx.testing.js * * * RxJS-4.1.0/doc/api/testing/recorded.md000066400000000000000000000063431266736161100174650ustar00rootroot00000000000000# `Rx.Recorded` class # Record of a value including the virtual time it was produced on. ### Location - rx.testing.js ## `Recorded Constructor` ## - [`constructor`](#rxrecordedtime-value-comparer) ## `Recorded Instance Methods` ## - [`equals`](#rxrecordedprototypeequalsother) - [`toString`](#rxrecordedprototypetostring) ## `Recorded Instance Properties` ## - [`time`](#time) - [`value`](#value) ## _Recorded Constructor_ ## ### `Rx.Recorded(time, value, [comparer])` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/recorded.js#L9-L13 "View in source") Creates a new object recording the production of the specified value at the given virtual time. #### Arguments 1. `time` *(Number)*: Virtual time the value was produced on. 2. `value` *(Any)*: Value that was produced 3. `[comparer]` *(Function)*: Optional comparer function. #### Example ```js var recorded = new Rx.Recorded(200, 'value'); console.log(recorded.time); // => 200 console.log(recorded.value); // => value ``` ### Location - rx.js * * * ## _Recorded Instance Methods_ ## ### `Rx.Recorded.prototype.equals(other)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/recorded.js#L21-L23 "View in source") Checks whether the given recorded object is equal to the current instance. #### Arguments 1. `other` *(Recorded)*: Recorded object to check for equality. #### Returns *(Boolean)*: Returns `true` if the Recorded equals the other, else `false`. #### Example ```js var r1 = new Recorded(201, 'foo'); var r2 = new Recorded(201, 'bar'); var r3 = new Recorded(201, 'foo'); console.log(r1.equals(r2)); // => false console.log(r1.equals(r3)); // => true ``` ### Location - rx.testing.js * * * ### `Rx.Recorded.prototype.toString()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/recorded.js#L30-L32 "View in source") Returns a string representation of the current Recorded value. #### Returns *(String)*: String representation of the current Recorded value. #### Example ```js var r1 = new Recorded(201, 'foo'); console.log(r1.toString()); // => foo@201 ``` ### Location - rx.testing.js * * * ## _Recorded Instance Properties_ ## ### `time` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/recorded.js#L10 "View in source") Gets the virtual time the value was produced on. #### Returns *(Number)*: The virtual time the value was produced on. #### Example ```js var r1 = new Recorded(201, 'foo'); console.log(r1.time); // => 201 ``` ### Location - rx.testing.js * * * ### `value` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/recorded.js#L11 "View in source") Gets the recorded value. #### Returns *(Number)*: The recorded value. #### Example ```js var r1 = new Recorded(201, 'foo'); console.log(r1.value); // => foo ``` ### Location - rx.testing.js * * * RxJS-4.1.0/doc/api/testing/subscription.md000066400000000000000000000070561266736161100204240ustar00rootroot00000000000000# `Rx.Subscription` class # Records information about subscriptions to and unsubscriptions from observable sequences. ### Location - rx.testing.js ## `Subscription Constructor` ## - [`constructor`](#rxsubscriptionsubscribe-unsubscribe) ## `Subscription Instance Methods` ## - [`equals`](#rxsubscriptionprototypeequalsother) - [`toString`](#rxsubscriptionprototypetostring) ## `Subscription Instance Properties` ## - [`subscribe`](#subscribe) - [`unsubscribe`](#unsubscribe) ## _Subscription Constructor_ ## ### `Rx.Subscription(subscribe, unsubscribe)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/subscription.js#L8-L11 "View in source") Creates a new subscription object with the given virtual subscription and unsubscription time. #### Arguments 1. `subscribe` *(Number)*: Virtual time at which the subscription occurred. 2. `[unsubscribe = Number.MAX_VALUE]` *(Number)*: Virtual time at which the unsubscription occurred. #### Example ```js var subscription = new Rx.Subscription(200, 1000); console.log(subscription.subscribe); // => 200 console.log(subscription.unsubscribe); // => 1000 ``` ### Location - rx.testing.js * * * ## _Subscription Instance Methods_ ## ### `Rx.Subscription.prototype.equals(other)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/subscription.js#L18-L20 "View in source") Checks whether the given subscription is equal to the current instance. #### Arguments 1. `other` *(Subscription)*: Subscription object to check for equality. #### Returns *(Boolean)*: Returns `true` if the Subscription equals the other, else `false`. #### Example ```js var s1 = new Subscription(201, 500); var s2 = new Subscription(201); var s3 = new Subscription(201, 500); console.log(s1.equals(s2)); // => false console.log(s1.equals(s3)); // => true ``` ### Location - rx.testing.js * * * ### `Rx.Subscription.prototype.toString()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/subscription.js#L30-L32 "View in source") Returns a string representation of the current Subscription value. #### Returns *(String)*: String representation of the current Subscription value. #### Example ```js var s1 = new Subscription(201); console.log(s1.toString()); // => (201, Infinite) var s2 = new Subscription(201, 1000); console.log(s2.toString()); // => (201, 1000) ``` ### Location - rx.testing.js * * * ## _Subscription Instance Properties_ ## ### `subscribe` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/subscription.js#L8 "View in source") Gets the subscription virtual time. #### Returns *(Number)*: The subscription virtual time. #### Example ```js var s1 = new Subscription(201); console.log(s1.subscribe); // => 201 ``` ### Location - rx.testing.js * * * ### `unsubscribe` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/subscription.js#L9 "View in source") Gets the unsubscription virtual time. #### Returns *(Number)*: The unsubscription virtual time. #### Example ```js var s1 = new Subscription(201, 500); console.log(s1.unsubscribe); // => 500 ``` ### Location - rx.testing.js * * * RxJS-4.1.0/doc/api/testing/testscheduler.md000066400000000000000000000452251266736161100205560ustar00rootroot00000000000000# `Rx.TestScheduler` class # Virtual time scheduler used for testing applications and libraries built using Reactive Extensions. This inherits from the `Rx.VirtualTimeScheduler` class. ## Usage ## The following shows an example of using the `Rx.TestScheduler`. In order to make the end comparisons work, you must implement a collection assert, for example here using QUnit. ```js function createMessage(expected, actual) { return 'Expected: [' + expected.toString() + ']\r\nActual: [' + actual.toString() + ']'; } // Using QUnit testing for assertions var collectionAssert = { assertEqual: function (actual, expected) { var comparer = Rx.internals.isEqual, isOk = true; if (expected.length !== actual.length) { ok(false, 'Not equal length. Expected: ' + expected.length + ' Actual: ' + actual.length); return; } for(var i = 0, len = expected.length; i < len; i++) { isOk = comparer(expected[i], actual[i]); if (!isOk) { break; } } ok(isOk, createMessage(expected, actual)); } }; var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted, subscribe = Rx.ReactiveTest.subscribe; var scheduler = new Rx.TestScheduler(); // Create hot observable which will start firing var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(230) ); // Note we'll start at 200 for subscribe, hence missing the 150 mark var res = scheduler.startScheduler(function () { return xs.map(function (x) { return x * x }); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onNext(210, 4), onNext(220, 9), onCompleted(230) ]); // Check for subscribe/unsubscribe collectionAssert.assertEqual(xs.subscriptions, [ subscribe(200, 230) ]); ``` ### Location - rx.testing.js ## `TestScheduler Constructor` ## - [`constructor`](#rxtestscheduler) ## `TestScheduler Instance Methods` ## - [`createColdObservable`](#rxtestschedulerprototypecreatecoldobservableargs) - [`createHotObservable`](#rxtestschedulerprototypecreatehotobservableargs) - [`createObserver`](#rxtestschedulerprototypecreateobserver) - [`createRejectedPromise`](#rxtestschedulerprototypecreaterejectedpromiseticks-reason) - [`createResolvedPromise`](#rxtestschedulerprototypecreateresolvedpromiseticks-value) - [`startScheduler`](#rxtestschedulerprototypestartschedulercreate-settings) ## Inherited Classes ## - [`Rx.VirtualTimeScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/virtualtimescheduler.md) ## **TestScheduler Constructor** ## ### `Rx.TestScheduler()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js "View in source") Creates a new virtual time test scheduler. #### Example ```js var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted, subscribe = Rx.ReactiveTest.subscribe; var scheduler = new Rx.TestScheduler(); // Create hot observable which will start firing var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(230) ); // Note we'll start at 200 for subscribe, hence missing the 150 mark var res = scheduler.startScheduler(function () { return xs.map(function (x) { return x * x }); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onNext(210, 4), onNext(220, 9), onCompleted(230) ]); // Check for subscribe/unsubscribe collectionAssert.assertEqual(xs.subscriptions, [ subscribe(200, 230) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * ## **TestScheduler Instance Methods** ## ### `Rx.TestScheduler.prototype.createColdObservable(...args)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js#L118-L121 "View in source") Creates a cold observable using the specified timestamped notification messages. ### Arguments 1. `args` *(Arguments)*: An arguments array of Recorded objects from `Rx.ReactiveTest.onNext`, `Rx.ReactiveTest.onError`, and `Rx.ReactiveTest.onCompleted` methods. #### Returns *(Observable)*: Cold observable sequence that can be used to assert the timing of subscriptions and notifications. #### Example ```js var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted subscribe = Rx.ReactiveTest.subscribe; var scheduler = new Rx.TestScheduler(); // Create cold observable with offset from subscribe time var xs = scheduler.createColdObservable( onNext(150, 1), onNext(200, 2), onNext(250, 3), onCompleted(300) ); // Note we'll start at 200 for subscribe var res = scheduler.startScheduler(function () { return xs.filter(function (x) { return x % 2 === 0; }); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onNext(400, 2), onCompleted(500) ]); // Check for subscribe/unsubscribe collectionAssert.assertEqual(xs.subscriptions, [ subscribe(200, 500) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * ### `Rx.TestScheduler.prototype.createHotObservable(...args)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js#L108-L111 "View in source") Creates a hot observable using the specified timestamped notification messages. ### Arguments 1. `args` *(Arguments)*: An arguments array of Recorded objects from `Rx.ReactiveTest.onNext`, `Rx.ReactiveTest.onError`, and `Rx.ReactiveTest.onCompleted` methods. #### Returns *(Observable)*: Hot observable sequence that can be used to assert the timing of subscriptions and notifications. #### Example ```js var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted; var scheduler = new Rx.TestScheduler(); // Create hot observable which will start firing var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(230) ); // Note we'll start at 200 for subscribe, hence missing the 150 mark var res = scheduler.startScheduler(function () { return xs.map(function (x) { return x * x }); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onNext(210, 4), onNext(220, 9), onCompleted(230) ]); // Check for subscribe/unsubscribe collectionAssert.assertEqual(xs.subscriptions, [ subscribe(200, 230) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * ### `Rx.TestScheduler.prototype.createObserver()` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js#L127-L129 "View in source") Creates an observer that records received notification messages and timestamps those. #### Returns `Observer`: Observer that can be used to assert the timing of received notifications. #### Example ```js var onNext = Rx.ReactiveTest.onNext; var scheduler = new Rx.TestScheduler(); var d = new Rx.SerialDisposable(); var xs = Rx.Observable.return(42, scheduler); var res = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { return d.setDisposable(xs.subscribe( function (x) { d.dispose(); res.onNext(x); }, res.onError.bind(res), res.onCompleted.bind(res) )); }); scheduler.start(); collectionAssert.assertEqual(res.messages, [ onNext(101, 42) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * ### `Rx.TestScheduler.prototype.createRejectedPromise(ticks, value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js "View in source") Creates a rejected promise with the given reason and ticks. ### Arguments 1. `ticks` *(Number)*: The absolute time of the resolution. 2. `reason` *(Any)*: The reason for rejection to yield at the given tick. #### Returns *(Promise)*: A mock Promise which rejects with the given reason. #### Example ```js var onNext = Rx.ReactiveTest.onNext, onError = Rx.ReactiveTest.onError, onCompleted = Rx.ReactiveTest.onCompleted; var scheduler = new Rx.TestScheduler(); // Create rejected promise var error = new Error(); var xs = scheduler.createRejectedPromise(201, error); // Note we'll start at 200 for subscribe, hence missing the 150 mark var res = scheduler.startScheduler(function () { // Need to pass test scheduler due to issue #976 return Rx.Observable.fromPromise(xs, scheduler); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onError(201, error) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * ### `Rx.TestScheduler.prototype.createResolvedPromise(ticks, value)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js "View in source") Creates a resolved promise with the given value and ticks. ### Arguments 1. `ticks` *(Number)*: The absolute time of the resolution. 2. `value` *(Any)*: The value to yield at the given tick. #### Returns *(Promise)*: A mock Promise which fulfills with the given value. #### Example ```js var onNext = Rx.ReactiveTest.onNext, onError = Rx.ReactiveTest.onError, onCompleted = Rx.ReactiveTest.onCompleted; var scheduler = new Rx.TestScheduler(); // Create resolved promise var xs = scheduler.createResolvedPromise(201, 1); // Note we'll start at 200 for subscribe, hence missing the 150 mark var res = scheduler.startScheduler(function () { // Need to pass test scheduler due to issue #976 return Rx.Observable.fromPromise(xs, scheduler); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onNext(201, 1), onCompleted(201) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * ### `Rx.TestScheduler.prototype.startScheduler(create, settings)` # [Ⓢ](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js "View in source") Starts the test scheduler and uses the specified settings for creation, subscription and disposal. If not specified, they will be set to their default timings. ### Arguments 1. `create` : `Function` - Factory method to create an observable sequence. 2. `settings`: `Object` - An object with the following properties: - `created`: `Number` - the time to create the Observable sequence. If not specified, will default to 100. - `subscribed`: `Number` - the time to subscribe to the Observable sequence. If not specified, will default to 200. - `disposed`: `Number` - the time to dispose the Observable sequence. If not specified, will default to 1000. #### Returns `Observer`: Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. #### Example ```js var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted; var scheduler = new Rx.TestScheduler(); // Create cold observable with offset from subscribe time var xs = scheduler.createColdObservable( onNext(150, 1), onNext(200, 2), onNext(250, 3), onCompleted(300) ); // Note we'll start at 200 for subscribe var res = scheduler.startScheduler(function () { return xs.filter(function (x) { return x % 2 === 0; }); }); // Implement collection assertion collectionAssert.assertEqual(res.messages, [ onNext(400, 2), onCompleted(500) ]); // Check for subscribe/unsubscribe collectionAssert.assertEqual(xs.subscriptions, [ subscribe(200, 500) ]); ``` ### Location File: - [`/src/core/testing/testscheduler.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/src/core/testing/testscheduler.js) Dist: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.texting.js) Prerequisites: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) | [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) * * * RxJS-4.1.0/doc/designguidelines/000077500000000000000000000000001266736161100164425ustar00rootroot00000000000000RxJS-4.1.0/doc/designguidelines/images/000077500000000000000000000000001266736161100177075ustar00rootroot00000000000000RxJS-4.1.0/doc/designguidelines/images/984368.png000066400000000000000000000753041266736161100212130ustar00rootroot00000000000000‰PNG  IHDRÈÈ­X®ž IDATxÚì½i×u&ú›YYYkWW¯hl  „@ˆ¢(Š¢)R’%YòȲ%lÙ Æ1ãp8l?Ç<Å‹ ‡ÃápL¼xožÞ ‡gÆ–í±G/²,kh™ÖBSÅ  ˆµÑh ÷êêêêêZ²2ïy?2«*óffƒ¸TeD¡Q{UÖ=÷œóï|èý£ôþÑ?úGÿèý£ôþÑ?úÇ qPÿ„f×ùIÔ?•}y RJˆ fN;uûn´ùÔpj- m‡Ÿ 0“À€ 2é_È Ó€¨‘EDvÿŒ¾5½ï-XPàºu—Sn¹Õ1Zi¦&¡ÔX©vø‰†ò&°5 6øNžÈžÃXfý9f>  ÉÌU!„ì/³¾¹ „”ònšmÜs«೫qz%OÓU+-Õ&°Öµ°B‘ûdpB™0œš»mlËVQ4Ÿ£½…3Ø;8Ë£ÉgˆhÀœ¢¿Úúróöüºp„ìߢ?D?¸RÀ³óàËë z` €_Õ)d!@©0–ö€;FÁ‡Gçxñ9š|y|ChâL¹õ ä¦8œS+‚Ûò0•¬ß¤Çæ?Nß<›å3Ë®§@ wá+'ªw{ÿ÷¼Ô½€|¸müÀ$ðî­KØ–üÞ?øe2¨LD DÔ»úrƒzŽÇ/ jã–íߦÇ>B_=™ÅJÍsšÏ"²kž0^2pxüþÉlÏw°+û#\è¶RqÀ(È·ƒt §—²û³`F| 7Ð":¸-'¦®¬eåC_´ß5‚fN{ʱ$ :ôl"é,@º%”Ð’šä–=í´ìº04ÉÌðŠ“n¡²ïúä‡ò‚™wczã‹ôg>‹?>jb¹ òyŽkçü*‹–ÿ3þëñ<Ž^Ùä-ÿ^BîOÌ9»×mÏÊVTÁ¨€PÃAúÌ `ïUÂ÷nÛ»Ãûw>_Õù‘„÷^€4‘ hIÝÔ‘H%aŽe‘›¬vW3û‡dòmõÖ0N%·eŸ‡ KñÇj}úKß@à|ûò½||å‹ôÈåÐ. j:èíÏ›ç6€u0–”<±æŠãy’Σ…g^¢ë67øÏ[ Å:~Ž"nï}öãš¶HèiFÖ@"o"½½ 3“ƒõ[Gª™;FìÖ|ÇÜ]¨!.øš¦i¥¾ ü˜ˆ”RÈÇ®ÞKÏ—^ù žº\¤õjÞL¶0j ”<ÃXñ® ™ß§„xœˆ–XBˆ> ù­j Ì,˜9Ïߟ½ Ϭ|Žž˜û={¥È¥Z„qôŽ&€ €E0}£å%ÕÜ5ö-|òýŸ•å)âï»#¡˜÷CèþÎКEBCª˜Ar4‹Äd¹ÛFªÚöô”ù¶ÁÓÉ}CeQH>©§õ'˜¹,„è#bo%af!¥¼‹OW?Lßœº¾{å \æåõÀ2òíºgWÁ˜÷ Ãõ=ߢ)Þ@\Ó‚ <ü<Õƒlf8Ñ÷‡s’øÇÃ3êž±xŸËÔ`g`Lddúà°>2n'÷ ž6ö <§šOk)ý1"*÷¡ã·€H)÷ðÜÆ8f_ÀSó¡¾0JGÀk-_ÚŒ UcÀ,€yÏ0¤/„þ«&ãñž"vùwxá “Ä¦ž%ÆÁ8S èyD•âUH 1Dr{æ¡dÞ1VO>Ú9ð(/hEó83OáǸ‚O7¡A"š`É£(·tÌÕ?S«{ñÌÂ=ôøå"Ÿ-M~~•ÐcÀ€)/¤Z÷¡X -°˜9à „ïz/@(§¾EbŸAúßÊ{¨ï‰˜0|ž"r‘ϨÌWˆ¤sg™;Æ‘=.ÕcÀ"€s.yÄy…:ò-tÿbçÐb¡$9˜´Ã't_[­Àg áœ#J‰ÐózÌ1¿Gò{„ÞO ³ÔPŒl=C’[0ú“û`Þ¿£‰]ɇ¡Âÿ¥íL.PJÌ‘Õ7×/©†”Ò`æa®;Ã4S5)›üUXr?–š:fkÀr}-Lˆ&t”š@ÝW› …pu˜Y·Z¡½Y°ÀXpÁ3Žï6Ýc`EyŒpÌ„²Ð„Ï;l–„‹P’­>C¨•PÂ<¿×Š7Í‘- Hê‡æ!ÀpCO†é©m¤ïÙŠ¡Ÿ¹í&£b"õ×ÚP꜖ÔJouC¡7Á8·¼Ühï¡¶üYYmÿ4[5ÄÔÆÎUMœ_–ê@µ!Pm€êÐr‡vÜ ` !T`\ð²—klx E‹Ì1Â5 (ኈX´jO¡\ÃoDQ¹š oŽvEÁ¿Eàxêýˆù7ø"ºž@ñÎIÉwZùOï]HlËþ¥H%þ§ÈSÐ`¿U«óo¨ð†%ØÁ(Zίɹڿ/,ðÏWN,ƒf×À-;>òxgÙAÙå„B1w«ß‹NxÙ §—Ï®n« tx!%¤¼¿ô‹½×кáSôb ±ƒV _¤~Æ lŒP¸Ueº/Ú@¨ëà{?ñŽ¡HºibàîíHýìn;yûð'n-üå§(«]}+Éf òtIP*±ò—ðRù?âo^1ðÔ¬ JìHôð?™0ŽhÞ»_‚ÑpŒã¦½Å,y»{Ô…‚eÁ(€0 èIne} =¦®ºÛ‹Ðÿ£Œ ËÒ¦Pïµ+ðQ´•Žo0i@Á3 ø¹Ì Ò‰ñÜee?qkUß_øTÔ¿¬¤§˜ù-åMÞȆ©QL­}/– zÒ¤é é€ÙC$ƒmHDÉîß*€—Àxуne Ï œ©¾ƒ»[ÚžaŒƒ±„qÏ{tÞ§ —z²F „ušÒôý1}o'Ž3ó`Jb ÷("™×Iüß‘U õ1cùêà§qyì0¬ù*Vÿî´!gÖ‹æ‡wþ¼~ßXANý€æúä:r.7&åK+¿ŒoÎü†ø›3i,”ARS<…Z‘ÂŒÛÞíŽWè{Œ³êÞctYRkDWz¡×8»AØ`€Ù É(°Ì{øŽ{Y÷Œ³âý]ó>ƒ °yUÎjPB½`xå)¢<‰ÿûrhñ‹ nÿb%™ï=B6ïœè c4+ß¿ÏøÌm üŽÂC"O_‚!¦ß ÅÅ×Ý@¤”»ùÌúçù;Wÿ­ø¯ÇÆqap‚Ñ/BÉ!ÇDÄîbxŒç=¤ª ?WŠ|¡bwáÛÍ `ìa/€Q/”Ò;ºêÑü’ €ôºuâ.ãwÀ»a˜ +¹Éf‹>Î0X„ÕÛ‚F"9 D ³‚Fu+Bg‚;]’¹$2‡¶Ú…Ý:güÄØ×Äáâf‰2è¦îAÑ_wïq¡º'VïÍÒ”k*"¶ZRþ¢»ƒ5¼Ƴ^ñO†jQ˜?^c€ƒ ìóykíþO£¡'÷ ƒ!`@\ä¬`ƒ uZÜÙ})°ü¿8(–bHŒáÛ‚EEÚ4ÿˆG²ÂÛ’ß@8Ð5ã‹N¥…Ús3ºSªMäÎìø”ñS;v$?¼ã%ÿÜF˾DÈ®ÚÆéÒA”l‹;å½C lâ¿H)Ë7cÈõú&é-»H‹­ÝJ3ëÃt¹*àHŸ’ˆ¿©éRÜ· `Œ½œcðŠ~þø:Œ©Æ’p+»=ãðç ª" ½–‹Ãk¢"D`r½‰k(ìŽûr‚\DL`Àrhh3Ñ€íxRÀG Uê’äÈPK„j'êJ VÕSeâ˜Ì$ˆÎî~2K†µR‡ýôŒàº3™¿:ù9û¶¼LtÇÃÌ|ÁS½ÿñ6"š€“x7ÖÛ{éêê5‚™`îÑ1”6 `〒—Üj¾Å‚MKòÕAØBJT¡¸ zÅ]ãÁ¦~Æ“ô!#,ºÏfŸA14"p ܃˜á´¶È08&ߢP‘7„ ƒºŸ ˜ãpÀK ˆ›‘‘ƒPÿuÙrP=vU·«ÉÄ•±/¤÷ŽÞ.÷‰ï"§=$¥\ºŒäu3f.À’{P·'x¥Ž°‚ЇO}Œ9σñe_}#¬H¢þPÁÅ«P"0±0bF‘&~îG/.g"01˜üÝþë½çu¼ mÕ“±RÈS)0q×ù‰}4â…È|FÝÎ8ŠEû7ô¼+lKÔÎ.‰ÄZ}2±­°#ûái_NpAÿ3/ÝèèÖ뙃H¬ÖA+@Óíô¹;¹¯èw ŒàÒÓu P?ˆBy€¤Wø ï¾ÑˆY¼?ê-réQ˜ xêÞ4Ϙ¨cTÞÿm€Û9axVÍ-*.R¬1¨""”{Püe‹·áüƒ7ÁÿÖü:J_~^ðJã@æ_íþ5qkN¶‡“Xú±MÒiÝW›@»íý¼aœ J\ïx Ç=Y  þ&Ÿ0Ö„PÜÞy¯¶÷›J]>ìA8b刚²¿7Ïï9‚Øš+\Ž`n…} œr¥¿>ªÙÓßõkÚÁAé¬Z‰B¢t£z’׿mIwæK_i J꽸 Æ ^cÙ3+m“ºB;¦Úmç¢KU¸BoÙœ">ST¶ÑË8"„ ]ˆ\±O¾Ú} …Â,édÛuG•[…Ì©!”?÷çþžôx:‚Èè_5¡Bw@@[‚¤ˆ©ÜÇm<ðÕ•:F²ÙF…:‘§e¡ôísº80Ò¿  Œ6‘Ñ¿&¥¼¡ `ý01RÇØŽƒñ]WßUÊh¸Óß ²e—¤©Á©[(ý¯Ó©· ¶nÿúûƲœ‘WhæÇ A…º·¤0¦<`ÞGÊóSÔ£z§)"ÞŒ¼¯ÈxÀØûâa@]œÑbÖ u©&2€jQ©RÃ,"8vÏ{„ýT¸µ6¼¯Sè|„s†1œ‘C?Xs~rô[ò=S¤“D­½-jLJêz|¸õ½i5+„å‰8LíÁ½¢k$é=ÔB0{9‰´¬~ï"ìÖð+ôƒÂqœ?&¢úàI^gÒ‹µ£¦j0%H< à"€¶窱¶jT o^„-‰ßEÑ(³F’’"K÷&kéúí?‡¥Æ¨õÜÍ!Ê ü¨ê¥ÝÕó'üETßw þª²ÞÆê—2úž±-wþ2ß¶ü7¸DŠ·p’ÎÜ=—QizÀc^€ÛK¡mÊ3* "‚æe‘õ—ôäEOp)±YfGûæÜK „ëËO”Zˆà؀훓@!J:)¸Z,ŒBÞ‚ð-ÐSHð–*½sè_D.1„°…RVÙ–ÿ [3µä-ßÅÅÕ {±3Tˆ•4›"@Üøs%º("¼s°ù­—% 8k-T›Òaê{ÒÖ¾¥ß>ügŽeÛšñæA{ý|XÅ’¼Ü°y½í –z»unëÙQ]¢®[6x†ƒºÆôrF˜Ò3ÛóV—љ塾§ éúq·ÎŠö† ewíÐMØï<»×A fÀ¶]ï‡u…Q'º†Ÿf4÷„ ×@°Ô]RÀrC½*½pBzù‡Àa†d‚dÀ‘Ûìvæºfå>Š)EAOp±y¦Ò² K:³öôÇ‚õ¤r+JS§–£¬‚Hµz¡ÚÕO•yR¬‘¸'°=Wߟ—-Nþ¿3sž™ß´däõò_£œJ|˜Òâ.TëD‚Qð €óÞ¢JDöR¨b~ +à$Gp´Ô›ûž³ÎÈÈ*¾3OPúbf§KgïÌ t‰†’]¹¡»•zéå$6÷®KÀ}¬ÓÉ=8Ô‹ã¾GœIq¨&"רxv¦¾üÓbwzFJù–Rîç¦<„yëg¬‹ËÎÊ„OÃX¥ÔsÄ{ô© ÞG!J%"9 Q¿.H[¢1S1ÊßžÚ½õЖ_´ÌŸ𠸽roI£%'Qocµ8½M/ÁZhÀíÆ£P~-Õ¦hœŒ"wÝðÞ,´@˜òŒcćDÁ£»´½p¬c"ñjïaIÀ¡žá9JÈM¼ŒbÞx¦ZX”!ü}Ãõ¹ÞFãÉSÿ‡Á#æGoù-' ˾ZµP–Ÿ££‹{Ûß»¼ß¾XÊrÓ†ä6þΨ߀=[>Îd*["¡û³*§a£zbNÏüí™m¹Á}ïÛ3OI)ßY¡×Å@˜ÙÆb]âJXivOŽåÁ¬O{ºU"«†içÑ·#R!"kÞÑFEžxõË`dBég/ô"ŸW鈛R§…–94+D(zXš"f' ^‘bøQªi¨Ê(J¥Ýa8—ÖPÿËS/lÜmŽü2…Ýfy|fÞ´Ÿ˜¯4bZ–£öŠXòþN‘8€]ý^P|V ‚]i`é‘WŒä­÷ŸÚýóÔâ¿z3Œä57)¥ö^LUÆq® T›èôƒW<žÕEï”h‘ž‚c½… aý¦è1˜ˆûwùU*ˆãXðëVù"Èk OzŠÊh8¦nÃ1žQíó È S¬ç´$Ú/—Àó5[†ï£„@{© ž­ ‚©‹å9jAá"áèx\j ÇÖ«Â~‡ ¾¸&Ê^Ú;þÎ-ŸGÑ8Á†¾àí³RŽÂí`( !Ê7“É¢ÜþΗã•’×%'P÷rŽc^="±ÉNÀ)&a Áaù´ÍÚT¡È’ú¹J#èÖ‹·E$Tåâ‰!›—Z)ÒPLƒlÈ 0C®4P_™ñy3òòŽèÖ µýö#CŸ,xž9ÂpÃ&UµRN›°rô²žùöÄdjpçôÉÌq)å‚BZMgÛ¸_0Uíºý„0Ź×c2ÖkŠ0³Á«Öa>Y¾G‡1½æ‰³¹ÒÏ1וúŒƒr£’pTÖ9°ër ú¥îâ™ÚªÒ£ÜÆ]4‡C;|T½x³°.î¶ ŒNÜhdÔýQ¿k^?¦æ«©p¬zñž¸ ^Åí=ð<úq@˜-!àlXX|èe½uºü)Yjí•¶ÉÌplÎ6ËòÁõåöÿ±^jÿ¢ãðè ëA<Ñà yWë¿Â_9‚gç@uW±j À)0N{è“d_«.Ž?`\K0.\ëíü…-  0(pYµaúýµ æh¯޽)æ C® `„òWw~üJòQ!bѵøß#ð"ò{°2;„úåUÑxtnBŒ§ïqÎ¥öšfFo®]²äâTu¼ÙjÜ9|«yØc×n(‘R†\oï‹Öß›ßÉc¦ç=æ‡+Û©‡âèpó#ªË‘2rˆh}Š2*™QÆð®:ŸL $Ùîõ„w²D ß ˜:Žõ¹8&÷â@"‹Ms˜ð}Äެ=”;H5ñ·Ó÷{Þ$¤˜âný3þ{8¶ƒÒ·ÎC{`ôד9ñœÙΖ(¡—´”=}åübe~º|ÏöÕ‚58–®3óãDÔ¼qˆùúïàï§ïç¿=™¥Keæ(qÒ#$ª-8×iÓÒÙæAîB—=dŠM'O ½ùçìËr4¦{Fb€aÞÅÕõ…¢’ßY·¹§ ¶c‚MG×Ê»‚ÆçOŒ£h‡*ŠäÇÅ$œ7Õí7óHQ†Ã¶DV“‹¬å 4¿?[HŽg>Ð^³N›£ÆéfÍú_Ã[ö^xvùžÓ+ó÷o™,˜©|òw<ò¦ç RJH)WÚ{ùJã‹â+ïÃÿx1K—Vé~i Œ«N¨y»ñµ9…Z—!´µ×hÝE  $<¥†°ZLì˜PöºŽhu.¦`Éãs-y×+`4ÁÝ¢żG8.ûîá’Z|ž§pä9 fs ÏPàZPx}H˜€ƒ˜L)z“àÈü-,²Î-mv`¨ΆóÙv©µGJ))}*3¢ŸÒS(_=µ¦Ÿ|dá`i®öéz¥©×+Í7Ï@¤”@©©c¡¾›Ÿ-ýø_úþü¹<®V\η·8ÖnîÁ&…±ð‰¾NpÅÒ2 ¤˜]‘‡`ל_ÇV„ZU©{{GV4JP¨ B .u~.§kŒËpÛz€/àMq­xCñïÞb‡!R¸›«»¶ŸqÜ»Pà¯Êëxc »~¶s0µGÌõxOH!S=¿çÌZÁдOØC„ÓfßÞ‘i;~ðÍÓé¾>sжø#‰TÂp,ß`‘RK ƒ/®Î~IüáÉ»ðð©4ÖZåØôÎy0`oV6A_ªW¨hû¨… uòÞ% F²ë¥8†@G1S¡8bNa¯§èØ1¶6U\ã’÷· w²®q£M7\¢ØÝõÚ;êÙ šàí IDAT#K&/_¶Á‘Þƒcý¸úšürþ|1øª¸‡¾·€µÑDûå5SÖìdSnB`Çm#úÎÛ‡õ––æÖŒWžœ?¼x¾þÛбåœB\÷ ‘À•õIœ.ÿ>=4{ž:oRÝAOæ~¡0Θ¨ñ^Ë{lNéœN „¬ç5 tZsýÌ\5à@§…ˆØÅ: ?¤ õ2"–&ŸÜ¨ðý MšÖAX…KcPð<[*ð'ÒSzu"¬Äù~ݘ îa,ç˜Ý›¼°Jåb±òùtÿµú¼iØ•w!€ðIé ~¦$RçVl™qSÆDR³·¦íÑí9È'%Ξ5_þ—…‰Ãf>ñ~Äž’ëò ̬;OÏïu^Zù¾:ý;ŸÇ†í Áé}å6\JÉ%tævp uäkÄÔq{yF1wúSäq¹8râkPSŠCÒ8ÁA™ÑŠ(ä~Õá™Á‡½÷pÀX÷BÌ‹`œcŒuŸQ‰Èp‚¢¥SDØÄ¡Öã—‘-s(Qµ»RòžJ‹ìøŒ© pˆ>‚HŸ§~O}ß@ À€µÜ€u¡¦·§Yf6ˆð¸Õ´ÿ.3h^(d°<[Á*\yqíg Sà ó Ìl8O/Æ©êo‰o\¾ÏL§É£‘¨Š2€3`ÌÂ/=]‹ˆ‡!ƒ·' xÓ÷^Ry]¡” £+x¼ŒSÌڰr­ˆ€:É÷ûã-¤(ƒPc@†gp+I‡ ‚ê9ìíëA_¢æoñ"`Xa/"CS•&9BdOU]Ä&ÜìèÎE÷=6VknÉIsKæÓRÊ9!Äñì1WM5Ítí¥U\)§Ÿß6rKö]RÊlj¨þÊf¿*"¥4«wâLõ7ÅÃ3¤§.¥i­éyŽ f#\ã‚—°ŠMÓC5šU{šÙóŒ# dº ´ªõlÒ!߸eµO›|Cv‚ÃmÂC4ƒ·‡ß#ZH:¸ä¥—‡-Aâlœ€…Ë‚ÐLƒ2X0$/ c¥‰+º‘‹#«× LjöÌ%X¹Ï¯PÏÝ¿Cûçîm*²•£°ò)ƒ9E náo¤Ö_:ß¿]·À+M¶Ü ODrhkÆ.Œ§‘Î lTxéÉ‹…Õ«­O˜dfýuó ÌœvJÖ]˜m~¾?÷AζŠ4Õ¼/•?Dß»X¤åõ®_€Òk,½°j îH2BT3¿ŠÕ©îÞ–ð§{ÆlÐ É`Oob¨BIaÕ¥Hv”<À©zTy÷]×Icø–¶Úb§†’sŃLJn)ØÅ‰,RM­sÃùÌáуµSKãë'aͬv€bÜ4%ë’ìöu„=³?ÊF^öË)i?òK(ÊöOCɵHÁ¿(ä«Äa¯»Ù}žžÈ $‘JA#‡%6ª-¼ø/Sú}¿°ÿÓbˆž@ %_-øµ1f6å©ÕC8ºø^ñÈÔ0fV¼}](ÎÜ=Qm¼â`Û«2Ç:âј„—„‘¦Å°°¤¯Sc¨ÀӃɡz ²LÕ½Zýá;ÆçßQ=ýÌœ‰üöFö1~pXŽì/–Fv}GêÎ˃;s§Š¦MÂ{ßíz>u ø™Ã#÷fN^¯Ÿ,¡=]…¬Z`é(Äq MÑ R*{g\šŸ:apPK",¤ æPöI…!a„õÁ”sç¿ µÔM.Z€"©u8€ H¦udr„ 8 [S§ÅÌË¥ýÛöd“ÉŒxMC,fjvsÍwÑ+¥;ñü  ˆUª¢ÎR²‹[Pà¤D±Œ ¸³þÆA@^ÿ Dw³ÇC¤ kRD12* ‹ò&è\héÁ “yŒÞ6,ÇŽ, ï+Ù?XÎŒ§gŒlâ/”ˆ¨ìO¥”ƒæis§ùtâPá=Ùéñ{¯”Ö_\ζN”t{~]X‹5pˆH‡TrƒHÅ¢†=á7Ä&êqè"u·ö%Ï*ê†W!´ŠC¹("xbä‹V$H×!ò†¤¤&}…À»íœÒM±-‘ÐMÛqjÕ&Nýà²>0~ëÝéÁÄ©Fÿw31äjý ]]¿ V‹\m&D©jè Æ¸ÄÄV`ñslµ”•ÜÀc„ ¸sÊÉ7VÙpHLßÉ¡°' ãçPàDéÊ‚]§b.4B¦˜AaçÆYï[½½8UÜ9ðTz,õ®Q“™#çôy±ñœ”rIË$žÒ'2ß3ý”ù®±‰ÖÓ‹rfãðÆÑ9³}e]wÊ ØkM°í(°Gpœâê å*Á†[1¦9”_Ä•4õz%׈”LŠ%`ª¡`d“À@¢Êħˆ¨3:áXi¶úϤã^ÃL˜õfË %ãÒñåô?=ùùF½ýP©òõ†Y›…XiÔ­ ¼~?)Åv@t®Û LAbn{ªvMB?yt=Ç0Û tã{ŠPÛ¥@ð¨Ê~Áx=‡…=Ã9 …ÆÄç&v‚)FjÀDq× ¶ßµµ¾õžñêðCg {¾—Lé8v=Meͦ÷:+Ï™/í¥3ë{/”P;·T°×…½Ú7lwšpä8mU!,þq [Fû^•*¢Ò^¢Ã(u½ph ‡¿1”bd· @›0çÚíö?%…8š¦Õe[V†BóE8Rbö\E”®nŒg ©,;,^K¨¶ ,×M”ê¡Î2VZ+K¦áJêpH¾3^Ú¸“ˆØîýõ'¿ê¾"º€”¤µ· Ê€o£P.!Ÿßøé7 Þ2‘Ð’Ãyl¿k{}ßÇö4·Ü7z,³=uŒýcÛ’O?¬œ?ÙÌl3sÀ£‰­Ùg;r÷ˉc+Â8»åýât­P=9ŸoM•ug¥¹Ñ[2"8"%÷P±?Šðᾆ¡ rÉÑnĬ%o욦!{`éÛŠMcÏ@ÝW%B$À ž7*M,_\ûî¿ßiËs*¯‰`³DñÑrt5,"ê»äLk+pa˜òàg뺯R€;y¶èC«¢408"•–PçY°oA‡›y‚N»óøàg ‡†ÁC"§c|ÿëŽOªÝ?z,kæT"›ø !Äñ×bŠk„aÕ< àa)¥ ÷Œÿ®É;rïçc+ÃëO_1×^œ5¬ÙU×[MÒŠLc“p+|cŠˆaJZõ‡T~!2gáÐk¢›øK¤dêc5}8ý¨–3®vÎEîÀ eY(_­§I£_·Zö×_3ñ:fÄz^qÐ¥€;]aèxý&ãÒ {@Ø‚àq,7IÄÖB¤’Àršåî€èPп‡Iˆ„@n0Û?õvkô'†ŸÛzßÄ·Ó#©¯Ñ"²ð^¾ò'RJÞžù8¥'R÷æoÏ,î»›¦6Æ7ž½j®½p5Ûžª@6, å@¶9 ú†Ø e‹÷û¬dxP†”rdÈÄèV|8&¯#!¡: ïÛnÑ6ó¿ØÒþƒ¤s@‰Ý& õl;6®ž]AµToj‰×ƒj"È·£E&TÁXò’sD8qµðÖ ÛA‡Û|$}©(¼^úYDhˆ‡ˆŒ=ô«g½.øØŽ‡’`P‚0rëˆ|Ç/ÞaMþÜäÊŠßÓSÚQUf~ÃE–‰Èð m,=!Æé Þ–Ÿ0Þž}÷ðÂÎÓùš±ñü¬^?6¯;—×á4,ÀíáéRl¢j#q0<+°†:È;ÏR¬‘Ä ž{éóÐÜmãøÔKß’þ¶VHªs %³-Õô‚@p¤De©ŽZ¥…DZí „™L(šàÁ$h©ZÊÁŒGN´#xWþ“ä•^B¾@Ê×Ŧ)’o„ñ*°tMT·"+\*÷§Kf l{ç6yËg÷œÛñàŽßMmI&AgH'ëÍ潯åýVÓfà‰ÔÀ7é–ü—‡‹£éGL®îÿ%û•U!•uûØ’hϬÃZÙ€´m”=Ùà±Dy Ô+‚loáËØä›CÛLÂLÁwîÀÖß8bgîû]mÐ8C†f+kU× #2˜”@}ÍÂò¥u ]J)®§¢¾i"†R[³‚†Sà¥u%Ýí‹óÞT('P)‰Ö«êÄÄcn…ËÈŠëÜ#B˜{œó§fŸš¦#D4g@y͉‘Íb÷÷Ø»>½{ªx°ø›Æ ñ%¨IDö2SÏË{<-;žsÇ+³® óq}0ù‰A3Oï™øU»Ú>ì\¨˜ú¥z¡}bE´/T`-®‹v¥Ù´ÀìÖˆiSØB¥ºólÒÍ]éq¹zÜ/Ò æ@cŸØ/þõÞjêÀÀ—´¼ñ—dh¥ˆÍüþ-·}þü³¥¢Õ´‚kƒÆFSØMßuxô‹Ìüûp§`üÈ!–íä+b8U¡±t‘N‡÷öŽ$ç\Z;G‚‰áÄ/Æ.ÖžÔg§“#oçcpHÅaT>/w5’¦‡R¹þ#?‘ÇO´oùäÞ3æNó÷2™ÇÔo¤a1ÆbI)-‘N4‰¨, ¦ÎõöòÉ‚–KŒê÷¿­Wvõ+ëÐ.­f/odéüºh_©¢Uª¡¹¼Ùh{ QX),JÄ I'LûQE9T£q CBÀ,æ0xÇÄ=E{ä3·Ö‡Íoˆ¬þç"©•b@QÁØa×Ýi;! ÛnÛ°[Òx?3§_«¤FIí!2ô[±cà³á‘—î"\òøWvÄüí(÷k˜°Ã“ÿqp­œQ¡RtñQt=”:‘•”Þ´¨¾`×aW)ñ“9B6¬cË1dÄ 0¦ˆTºe_®ãF*C»†°ï“·Y»?yëÑÜžÜRš¾õZë-½ ùJ' ³á Ûwh.KAÓ6µ¢aêmÜ)@@e²Ò‚¸¼ž.Ô[÷j–®óìxi²ÚB£´ŽæjÎFΆ n9à¶n·!aGÔ1¤ë C‡fhÐòId¶ÀÍ!±% 5Ë4a^Hß>²@ÅäTb8÷¢ŠbêZßϱfÍB½ÒK°ñT7ÐjØÒ¶åkV(3×9§Ÿå¢yAì(ìÁË !nÒ2«ð ;¬`Þ1€Þø3¿?¢˜$Mtà£~YG‘Ìû=‡T“ƒ \©Çà®"öþÜÛ¬Éï~.·?ÿG”¦o]/v~3Bˆ%oŸ3ëRÊ ž2@Ó†˜0ó¦®ýŒ.E¬¶€Š{©M¶ŽdHŸD]\i7l Ñ†\· ­¶oDv§F@y”I€rÚ)†®ëϘC™éÄDlŠ)+á<8X\PaðMh¯ê;HÇAsÝB­ÒôÖ¡)%í¦ )¯_ÄáZ¸WIy” Éç°d¿¼Ø¡-O¬À Ô8Âj~ Wid;€pÙºNˆR ¨ÒG+gE9Zø‡"ª"¬ WÁ ð‹ù‰Üòѽö¶ïznà@áË"#¾õz #߀ž¦£»àó0]eæ4QÆ=ƒóHØí»t#}YH£ÖZ6Ðr€ l9Á*;y’K€LHë°¨mI–ßKŒ¤/èEÌ\IÍý0¢o²Íh®·±QiAvµÊ8¨%óCâ)ú5vKZv‰wæK¼¯a&€¦L9Öá’ÄË»¡•Ûfz‹×ÛÀ4[µŠÍ!Þ!Ht£¼šŠâ³ñꘌus½Gz0íNÊ-l;:p`ðOE^XQÂù!„°ü!™Ïp¦‰¨À`N€ˆÀÌ òÑY¼ ³ÿ¾Îa¸µ£¹5t•RbálëË 4×­@Æ)|$VŠ¨Ð¿6…B]T¹hœÇxú¶îáó‹ÝIkp;£mÿ’Í€°Óƒv5ßãEäÇ%%½ëäJ¸ˆDM(ôLÿkJH覎ñwNXã÷m=–ÛÀ—Qã›}㸦á”áʼ©3ï¶jòíµR+ßXoôê#›®3ʺfFOD%ʈghüåÜÞÂC}㸩ŽÃDâ¾ÆZ{¸QmtêÚèöŽ\gíêÕˆÄDÊ¢}ƒn’ºWåt£áC½ƒ•X÷ƒä=XwÄ×Ùž³Á)¿‹$…¼ ÊõDiðÅ Ç©'Žá 3”Ážu ¹õþÉoåo/>Ú7Ž›.o2U+]]®‹vËöy_nJ€ñÊžÌ,¤”†”2­ª1¾ZLXòxÆâÃMÊpІ+µ%>Ö!ž÷ØBÒ‡f…ÕC(°Ë#æ¾ð¨ŽdŸ·¡Ðx¶€Æ•.0ù·4‡Þ3v,µ7÷‚žÖ+ý%wsí–mWæ7ìÊâl¯È¡FÒù$ C@×B9ŒØ(׋ŠuWkݹ—%g¯/q­t‰Sx–‡õ{h²¸ŸgWÑ€«žî7ëAµ9¸=C :E€¡1ó~µÂp‘Êsµc0ÈÛê¥ýÂÇV•ÄÞ1б÷m» é Ä#ÌÜ7›è`f£t¹jVæj¢Vn„pÑÎE×4ä‡ÓÐÍ„ ]S‚Þ¬µï–mç7‰t+‘5æ¾"„Xâ4?ƒ¢~ûÇ$C ‰ôX°Ô\Ë0—ŒÈPŤƒJè~u Zaðy¡öþÂï-¢«æ,€„a&°ç£o³ï;®O$Ÿš¨ÜÈ’þi ÚkxïúRcÇÚÒ:4o¨œPÂkM#¤² )4¸”f¿±ezñÒÆáK/¬>páÉÕͺ}÷u{®1å [3Zu§E¸…6µœ#Á(À¥“ ws ÌÈ Ò隃h§'Ô.* ¡™ª½matÿ™yïн˜üJr(µÐ_n7q@J¹ÛZs®Í׋Õåõ® m`ò:é¬)‘h/­¯4¾40–šòCÄÍõÖû«Ë?sìá+ÐIŒJèÌlhÑuª»›0œL -¸Ê‰¡îy„\ Ý´2VÆ1/ó Ž@³Âš¹~ãëå6нOÂÐu ¿{‹9P˜Ñ Æ9¸{ýãæ2@úÒåU±|u¶t³Þ»åb$’:²ƒÉúúrã ùëty®¶wqºº÷ü ¨×ë£ùüǘù.öÔØ_µЀœÇp綆ëÀ¿&ž÷Ð%9Žð£M"€:…g… ¨‚Ó2„$DP€€âî9øÀ–9fþ]-¥_í‡V7%zu¤Uq>Sž_;´0½ƒŽ‚fZGq"+ò£)»Cx”R‚™?Q¾j}òì3‹é™©e´6Ú&·õm^fp](–{h’¬ê‘–»”S ŒÂU'B’‚êZQ¢§K‘žADx š‚€ÜfB×1øŽ+½¯pTJΈ„°ûËí¦ô éõÙV¡|iݬ—êÐ}ÍÄþÖ.]hÝ‘Gf(…TÁô¿ÄøÊåÆm_Xš¸prQ´ÚmÔ«-”—ª.†ÓQm¼ž˜$- ÛaÔº}~6¬»øópÌ€é`¡p¤Q"p@®zVMr2Á0/ªqTÁH'‘¾s¤,ÛΗ´”¾t£4=õë;¬†Ýœ?]¶—¦+hÖÛJxÕËBuMÃÈŽ‘-$Ó©¬.|ëù¾ÒôÆýÓ/-—g*` ´6êëV—sýÄ’ÀºÛ’¨ùÆ'>Å/÷(ø&qgr°²ãÇ)¦Ã§¬Î‘ îAO¾Þ åÜçh:!³#»FÍDÁX2òFß{Ü„‡”²P[°Ž\=½4±|¹–ªXoÓMê†'ÓÍDR|ÇHéUÏ8&«‹Ö»Ï?7?yþø¼Þl¶!Ø3 –½”⺠¤Ö_©›m8¡ÿ 11eœ"èÔµú DýX5Ê4[€}á{žAi¦ŽÜ¢e§¾žÈÕþR»ióq§Š÷-OW&ËW×|auoCîˆvg )¶gêÍzû/4ÝefK)-Ÿo™zq©¸t¹ìnä HG±ƒ•ôWbÑT8»œ)Ãql4 …äÿF „AßÈ1 ëY· 4Dzot@P::Ø¿Á ™œª‹èþ›0ÈÞV´ôTâ+š¡W_ «þñÆëKæÌñÅÑ¥éÕts½å â €-ÃeìÈ£¸='!hŽˆl)åäú‚ýà™'¯ì:1o´ê64Hf4š6ÖZÝ”âUy)¥RŽsɾ‹_XÙÍ'æE„uÀ—ƒô¦ p£t_•"\ØC¬g» òs£HŠ×ž˜Ãi Ab0¹ åv?ÿ¸éB+0sze¶zÿ…çg&J—WîEþˆ†áò¯&ö›f&ñM3kT½¥¸îäÚ‘ÓOÏ<ï¡yÛw³m£QmB¬kz"Ê˲}?ÊÖçéØÂn¾Z†„@;<»…> ®thּšéAjˆP”1©¶ŸÚ¯ä‰SéñÞ;é9™Üš­QBèýåvS"WÂqœñÚBë§–/VvÔ–ê¾ä<<C×5l¿}¨©iâïI­ä8r¸|©ñà‰G/í™>µhXõ64h]–G‚tC»¾K6 ž®=H'Jw‹gá86:³žÔEï"Xnx%ºº»)/]5H2fb”Ÿÿø§Úö^Ù/IÊ`hI ™í…š“Àw˜Qýðê¦;šÕ¦pÚòƒK§+{VfªF»ÑS`PÅ… ¥±ëÈƲ•l!)×–.]~ÿËON–g«5ÅínÕˆ1 d †‚˜nZ9mg3õ{ÅÓóGÄ?ž×D÷ ³çªòpë Ù¯¡ò®Â}!BIÄý ˜L– s¯Âa\ﺞԑÛ9XI˜ô·íµR?ÿ¸ùŽD21Q[¬föÄò¶êb-4š•|Ú˜zR`×ÛG±uÿðRvд™yGéÂúÇŽkjbö\IHËéæ.€W04$Ó:ü”÷ÍTM ®ZÐ…µGO^9Â/\U¨†ê~Î0@È`¢×Ýç×›wŸó&bûÑÓ(ÄÔUýHØã¸¢!µ#s,­˜ì¯¶›1Ä’ôñÅ“•ms'—D«ÚŠÔ5ëÄ ©\î›´µŒóM&ZZ/YŸ›y©ôKgŸ»R\/Õ}Ò«=ÎÈÛ¦}¹©ëAV›Ã8W}ž¸zßY©AMV¿ƒË]ãðW3ý£–UºzxIû‡á„ûÎ妡™:è­#›OHæÓ0'2 DŸWr³õrëg/?[š(_­ ¶O½$ÜV-ã[‹ö{w-éÄWVjúÜ+åÏ>ûµ3Åå™ H¢Û6Þ%ÈHhH$õkç ̬sËù N-ßǯH*ÕE/hñŠn½—î.è€4Üù·UXš|Rüs¢f«É=”A9j •*†ìšˆH$Ç2HnÉ$úöq³í†€ Ç¿~ѾüìœlvõÙ‚k óÛ§rIÜúŽmµÄ j·œf{Cþòñ¯_.L›G»n{¨UðЙB¹¡ÔµC,"¨¶ßN³õ½t©*‚„{³ù­ËÙjy Öêþí>[ Å F' Dxb@´ÉèÏrV;Åã¨óµ…—oôF¥y‰Ž†Òå§£‡… PÕ)sˆˆ×R;…¢…åkГôAÓ•ÅìÉMq‘ÙÞpö®œ\¿ÿÔ·ÏVÍŠlëˆp¤ò&ß1fïýà„~ùÙ¥;Î?6÷À…—¦uEˆ!î÷.‚E(Œd069($³ñj Ä)íql1b߀„™ìæÂë9OmÅ Fu1EwµÓP(Iy¸ÃB•wC‚žL@Ë=¢ÜÐ3ëµùÆdéBå3Ǿz²XšYBª ½xFo)`ÿ¶›‚ÅÞS]zàü±éagà ”ÂîÆnf äÍj"K'xæšBD@Ö¨á`±†wŒILBÓ¬S^HE¾°+l½d>ü!Ñ.«>WQè¡WˆQRä`». úÆq“ÕźQ>·¶{þ™¥÷Ÿù— èÀºa!÷R˜Èb÷»'Ìéú _=“?ûÄôp£Ò€ÖÅYãà#;Bqk®fÒi":õªB,Æ2OóžÁ'ä‘QË•íñeÓpu¯:ÁWÊKÒýSœâ<…Ç|‰ ž®ˆ1¦ a¥±ÊûLŠºxÿ¸a½‡ÙX¨,+ýÂ+^/m@°­ “L'°õ¶aäÇ38ÿý«8ö÷g°¶¸Ý×%Bi\öG€FùbJmÏÕÍBbÙn;UŠû M‘K>Æãé,št¶r7¿0Ó]xi#¾A6&\©Q n/¹¢&IõüBp<¨Ÿ EÑ= «3§(T' x ¾‘ÜØÞc¶¶£U±¿°ôRùCÓÏ_ü¢Qz‚0°%‹L1……—K¸øÔ*W×=ù8 z’1&%ÉòÅt=UÐOi ñ"ÛhÚ¥,•årã ¾sâvY¶‰éršW6@БcDùþ0+\‰ãˆì7¢è‰³êäaj·!®sõóX_YO¯œ¬\>¹úÑË?˜óƈÊ*#a$`:V/­¡|uåÙu¥Ñ:¸îzÑM§N'‘Ê&QÜš«ç¶¤NÑsªÔµÕ݇Í2ïË=Íw ?ÅG¶×`j HOZ”‘ì⾺Ã5UÖÝ.¢ò "| ç"PÜ'…Ä ÂóYûIú 릛ó­#å—+?uþŸ.Î.A0)Rp˜‘)¡¶XÇüÉÖfkÞo.”µG‘k±³ÍŒd°õ¶!1¾¿9?ýÕtV˜ùQ¹;§óONŽR¹qˆ]†`"06àJZ¾pI­„“2¸K$ô Jû—~ÇÊ£ ƒ=ɦ_ Ì?÷=CJ°Ó«‰ô.ïHÛëòHsÁúBùLåSWŸ›O·[„×—Ú+S`¾ŒÝ°ÑnØÜÛ`¥o ÊÈè¥Ç¿Ò…ÀèιõmÅjv0¹õÙ^­º{Å©4O ³ý8ôÄš]M‹Åu 0a+Üv]é‰P³÷I —à³` ?=‘™º=%jÿ ßøOŠAîÖÄM \±úä=Úu{²5oýÂê™ê'.|w:]-W¡CŒ›fPÓů¸w¿ð…àPЉ±ù2Òù†wç¬ôXò¨–о™j¼Ú/Ayã*veþ'`ì)þÙÛ,‘OaŒž•IŸnŽ6m^ Cºa…DU«7,3Ú«‰[mÈ5Ë¿ëg$7VhåH³r®zàòw¯:ûçósgæŠ"Ö†_ă#BoµÈˆš£<¼=-·JCÉç…'~$P#ƒGFütÛ ¼w—¥etL€‘ T°j å€â„ãTV.EN˜ê1²Dö=—¶ -%·þª¼1Â*0³ÑXnÞµr|ågÏýóùƒž¸Øa^àáÜS (¶Þ42 @†wå¥YL<šI= V½Ú/$„4jÒ¨y”wfÝù×»Oã;­­cÂ{¡6z:£fûÍã&L•ßÃâÔQtƒèùSÝkm†³P—­©ŠlÍôõânvÓ¾séøòo]þÁÌ'.?=“·ZmhQR" µÿ<.á·Aàÿ¹!“ïÃÎ#ã¥D&±ð#H×HLÝ[³GÅþ¿ã_ØýÔľq¹Ãp]Ý*€z7oˆ¶æ0ï*ºx=”Ýñj¸ätQÉâ–ƒÖÊFZkë·£Ùa)ûí o2b¥;-ç¾¥—ïÒ×>rñÛSF½\G" £@‘ÅAŠ¡·ÛÚPHÀœìºk;î™.Nf.a“þ ë¦ !@yâmÙ3ô“;þ0ó¿½×žØ>ˆ”`8>¡‰ˆ¿jk®ª»ËäD ”÷@Àð²ic£T-èéÌÏQR?DD}Úû›{ܵ±XÿâÕïÍÞ}é‘i}}a]Ñf‡ÉcÙË1¢r•д[0Ò){ß¹[&G1R‰ï`“ù0?ÔB!"ÐXºN;ó'´?sçoÞÓܹ»ˆ–`4!»ˆCôàµVÁ¡zExŠ­:ˆóÕ%þ]cj9pj‹Õ,l§/÷&•‹•Ï_þ»ËwŸýêÙôʹ•@§_0§H•Ì G‰{DD/!±û[1º¯p";a>-t±Uÿø‘ Ä‹!mfž¦¼þ;#ÛöÈžûo©ÉÁ$>ÕDé§¥Gë[!¦Hèÿ¬ÌäH-U+ ÃY­CÎÖÜD½õ¾)ÇÊ++úÊé•NýÕÔ¡Óõrzål d³ÂÒUÇyÇ9t f¸ß|Ø«‹8Hg’8øà­Ø²oä¹DNûÿÛ{Óฮ+Mð;÷½|ùrA"‘X‰$îEQ”Lk¡(•,«ª$µ¼–ÚUeGÛ]ã¨pôxz3ŽŠ‡CíQ¸+:*j:ž·ìv”Çn»d—K.Ëò&ѲLÑEQ$ES$’ ˆ‰D"‘ë[î™™@¾-Aɵâ)‚€D.÷Ýïžs¾sÎw¬”þÞB@a@Áq­Kaëë‹á® Q—ø Þøô*Nòô¬{A@¾ç§€×q*Ê¢ klIØ e!—*k»õMIxàÞÉ_L~nô§£ÛÒÃiÕ.ÛZfµÑ߆,Ñ*i/VÇ6xc?ºw¦N4÷F~-B4¶šõøƒâ¤Ax²c[óѦÁö¼×`ûæ| Ê"Ió”ÏA Éuºhp€e Å‹™¤,™Ÿ‘P—”r-yƒ®Ü¥œš»˜Û?õ³©Ï]züÂ-3g¦fÑ"}ä†nu=â`€ØÃpÕ÷Kýùêy/ZÚ›°ëOѱ#yZKŠ3òW5è‡BHéŒõÝÜchm1ØžŒ1… s…+2›2`ÂÈ-!W²PžŠ%{?$¢k%'o [eÌ~sÁÜ?ñã±ÿã†÷MŸˆKe7v‰à#nêuC‹…ŽiPT·Æ3yˆ§Ð” {Œu»SGãúOH¥Q!®>~ïX‰¦”妿ÐĦ›;sæSɤ_0dMQ‘¤›“u j$õ’¯»Äí¬"0çýæåEa]^Š*×·ô³¤q)eym€ç5‡n—­¡âTáÓ“Oõýltÿôñq½R2j PçmypÚ †ª)ˆwÅŠ…PÌ”aU¬€»NþÑ|ÄèêkÃæ}Ó‘ÖÐ7µ¤r@öU€×c1@*ÀÁέM[w¶¡–°Ds@³”Ø»¿ù‰t(:'JUò6¨èe†\(¡ò»´fÍ¿”;ùz}þµËGàèÖ¢µ»x¹ôÙ©§'>9ú“ ÷LÓÍ’±¢¨î¯îöO6^Öí”Ð[Âè½iº÷tB‹†`UlH›°—õ½0Âá¶Ý¹ýïé<nÖžQeöj±ÇëfA–vGÌ¢q(´#5H]M½4[àz©!9˜l§ò•[mÑò;«yý#RüÅì¨è„‡ ä’ óDZ“ ƽ°ñ°Ð×ßk`9¢ÆLewq4ÿW³Çf>zæ'Åì©iH›k½N}3ryìÉz3¡x-ýMè¹± ‰þf¤ÏÎ#7¹cÉ${&ƒÀ·HÚ7¶Zý·tœNmLüSs|öµ|ž×u‡(ºúc¹9¾65wÑȼVUeä•JK¯ô¨pUéÚôîòxá*“gP–{P¤Ë,ºó¬T—m˜'ç`ç ®oígÉÓÊkÛúu‡eEË–v.ä?•>6ûйÇ~§ÍœšA8ÀQ'O¤CØÜ)ÊCDP¢!Ä»"XwCznéF|] —ž¾‚ñ£S(Ìé®àu*&,k7ÛH¶%°õÞõåæÁØW,i>ADù7 Dt ›bÇ1Ôº§æ:0’ñ°Ñ~á¸åë’W¾úOçpœåÅaO§!û<Òcm3Ìé%ð‹ó º¾å¯¹lŽ˜\ÛÚ;fÖå’lËžÊìZz9ó¡ì‹éŽüëy==:¥¦+"§¼ûßÚý&@ )ÇBÐSQÙ²#…¾½¢ÿ@/Œ‚‰³?ÆÙLJQÌ”@ÒYXtÏ«àS4ÁÛ×[;ïÛ0mÓŸJ­Oæ_ëç{½} !z’ßŦäšÿ—²‚l (q»·=\~¨tÉ?UÄÛŒ»l™Ü®•é°,ÈC“º¼·k/UÂq)%^m ^K0ªÌ,‰H¾Û™0)%ì’ÕeåÌ-fÚøÀâÉù.=v®kîèLtq> ¥¶½¤« ¼¾„B €Ak #ÞÕd%“ù–Z&ûß×M®OnÈœ[À©G_ƙLJQYZn¢"MãèEH }CJîüÀÀpû¶Ô—ã뢙F÷‹¹ª,4Téõ¶ RJ9"·$NÑæÔÍt*Ýé\€·Iž¹‚î'|ã×àê;$^#{xsgÇ¢OÿW2ʧf!Í"t{׬³Ç^›%gŠBΗ¬bâ¡<0ó»]çWµ+ÖgŒ©òÇg:Þ1úÏgõ©“ã(Kª¢Vu (’$BPB!¨ñ0¢-Q#ÞÝ$[¶·"±-™mŠÇ×7Ò[õï'Š÷O?7ýþ/GÔ‰¦`6”šØ-;ö y|€Á‚ÑқĿÞWÞtOß™ùI!D1ˆ† še™bÉšišãÌlišvÍ,ˆ¨(Ú#ÿ„í][x×âifITs:^‰Qw®Â¯™Ú˜Â¥@Që ‘SrÁ`€ •ù%ÿ]¶_¹«÷?rÙfæÑ«nt:,y ö— ÄE„•¿aUž@½‘ò]w “KÖ¹R[é•Ea–MïIˆ˜¨Ê¼2¡©hji2„¦JWnÑëK ¼.¥] 7 $Òñþ„Tbê "z6dúdzßÄ¡ÉOžÿ—óêøK“`P¡¸:ɳGVÀAŒX[7ü›å-èÕ[Âìp6¹Û*Û;, w’@Thô߈häZºX "HÓž–×/Ó™ä>ö"G}äN¾I}d›S¤.‹€ðPÃÅ rY*[&*G¦UåÎÞA¥9<ÄÍœÆU²ª2$ÚP±þV<·Ð…–x—ÜýKŽ‹qÃXšÔ´¦wkü!£ñçMKM´7õwu|tý ®êÝÒ’’%– KE–xFI†Œ¦¾ôŽ(”ˆ 笊õÍÒTḠA¨ ¶øOŠ“…ÏÍ=;»áÔ×Oê ã v•–€Þã”!¡5iØ~ûfãúm9îоH§½ŽŠ¬jôÚEù²‹+gŒD¼'rJÛÙàÚ¤zÚRZô„ŸÀ{ÖoÇTù£xü¤ æ§É-5í”öñÆniSöL à›]è!^É …‘=’À ­Ÿà¢9"¥^•¨ydÚ“™+_y)Ž îå}-»i(ž“Ræß G"’¤ˆo#DßK\ŸJ©ÍÚ>¡ˆ[ëÛVB¶ÏÏþ œ+—Õx¡¦DX©ºÒÅ·è0²FWe®òPöÌÂg†¿®ÿÌ_¥l ‚…cŸ8ñ‘gˆAm6Hsƒ·n,ßðñ­Ç“Û_!zÖyO¥”‚™Õò¢1P™«|öÂÁÉ^:4ÝÖÔIïøèÆg“ˆ>á%‡® @„’‹Æ4w_Dwt/u¶ b:[›âvzê'€[¨Á©Œâ¤x¥#4î4öki¹§‹T fiX(>u^ÄnnÝ¡„C{±14 ³ÊfÈÚà ߔŠ|~7$vqëöÏ#Í#‰£ïFº¸æ– f.K)àY®©XRu/©Ýí¹ XJgæ»Ï/Ü?óÔô-ÏNô^:2*Œ%£øFõ‰š5qˆ•Ð"!ôuY›ïßp:µ;ùeE‡IñMKx`òTúý—~1¹ïw?i E51p×ujÛ¦fU )Ƶf±'nhÛãÇ0³îËâÇ .ÑöqXuçË9€ -€ÀžîqonVËÁÃKBáü4¢‡ÓƒÜ{¯ ãÈjª€ŒªuÆ@*`œ¼ =¦ÜŒa¶¿Ä̇ˆ¨ø.ŽGdÍM}UTª”2Z˜.üûÊ+¥OŒÿËås?=]˜\Pí’tÌò ßaOÁ‘„„¦‡°nW—5pOïÑΛZ‰öGž±Ù.jÂ%Xž,gË/œ.Üûò?žï8õôp´´P×?°ÍHmj:ކ~ôFмγd±rí¡Ÿc0± ½mƒŸ ø&ä:óêär“œlEÐøgÿ¸g§|\¯—ía¤%‘ÿé9-Ú£Ýjî=)¥Ì˜mä.Q».Ȳ–x4ãðE=QöRyÃßÈŠü¯Ò²Ÿ âZ}WCP04³l~ŸÝ~æ§ç\øõX×ì…Œ(ËP¡ {gRë‡ÃÍÚYÿk "Ë6ÍÓ˜,ý„ßÛ¹[œœëÂØœ/SN7ˆ=_ƒç¢Ü:¾ä àÜ‹ë¤ÜÛŒò± -ô\ûˆ(ï±õ–£Aaf *Ãâqlmi£Æ2S„õ›ËQ•pY°˜Ie.$Šæ× QÍ5HS”'‹»¬ñÊg'žÿåhJq¹9K¸^kÃ=hßÒr,Ú>±ºhÃÖAƒ­9g>ƒ?ê=“ó{ñüeÀvÒËKœ»+¥òUæá(W‰-Á:85¡o!È;äÅÜa1˜tR™,ä4bü]ÜÞ?H¿¹œ¤\X1Ý ìÅ"ø¥ÉuE"ƒÊþŽnî‰XóR [ßA —”Ì<`—ì-2cÞaL÷e_šM.¼<7XYнŒB:‚€²ÂNÁÑ„íu{ƒâ†Qܘ¶‡v½úŽ'ÿMïÒ£€Þ¹áômå‰òís§æw_8tiÛäñäfó (ŽÃ°‘hcýÞîÙÎmmÏ5­B”ßaf({:ƹ-ÿ5ùM{èâ¼ ™¥jsƒàœíìã8‚ÍuÐÂ{Y®:& `\^ž¼Kì—aí’ÌZßѬhV–‹1óVŸÁ®ö?;:‡x*§¡h;ˆ²`¢rè"”Ù¥-\w7ÝÝ­%ZœÒ=%¥”oW˜™—÷K—U²ºòç³:Yø€\²î*Ÿ_êϽ”NÍ=?Ù3Ó(.äÁ „ ¬Œ-p·8°G`ÔKý3HѶ(Ú¶wý÷n¼8ðg›&£Ñ¯•—ʳÓG§ @:}bæ–é£3]s§æÕ‰sS°¥ µVÖ$]¦ŸA 0°·_¦67SÛ•#ÒWûÌo@„RJ™ã”v”ïꦓüãW4,µ3ß}gK8жÔÿ_úhcö$ýQ»ˆÅ†yiA¥C»Ðû´šÒ¥ØØômÇbJVh¢ß¡÷mùœ83Óm_Z€;O,ªZ\çfQùúñxx®t@ÜÛûˆ5ÿœ²½e\JYð–JÒjåàºYª ÉŒ¥Z–ýÇ\´ï.]Xl+ž^H-LÇÓǧ°8ºÓ0«âÐ+eé´R$}Ä ;\ªåø²Zp( bmqkÓ[÷oK½§íÛ²s‹§QÌ¿˜~)½gîH:1sbVK¥Q1L¨yª*–­‡D²­÷÷æ:¯o;žÜBo€Ô\-ábú‚|pËÃâBn/\ÔÉâ@FÊŸwÌàÅ'Ÿ%©û´ÒWÁ4µJ@Z*§'Á‚ŸÑîÛ ­¹âÿPÛ£ùZ°^D“rZÞÒ5F¿X—³].¨wÀ×^ErlåoˆêéÒ]òý]_IýH„N!$&™Ùz+ïËåßËïÉ.Yº,ZÒ´S\±{%ä—ÍÉŠž==-Ïh¹g±8’A)W„eÛµÕS|*¹ðÅ‹ìȃÁ„3 z³Ž¶íFÇÝÓ»?·7-IžÈœŸÏVÒÆgŠ#ùÝWžo›:6­.Lea˜&rÌq¿ÆJˆ¶Ø,;÷¶ ·©?!¢±W³&o4@ (+ÖâÆÃþð–ÿ¤L,îÁä‚ ‹]2a@ãIƒäêkvZàÇÕ9!´œÝˆråüWÀ¦„ybRPÙT*òoăëuk¦ôÿ0sQ!¥)ŠÝ1!oëþ]ÌìÁpZ‡e{ÞauÈÅ"Šß?¥«Wæäz€ZÂ?@Dù’Œ‡Æj…ŽòZ[fÖ‰¨LDRF½úÄvÅ(ËHìàŠvÁ€™3Ú¬‚ñc¡©¥$ÑÙ×.7Ýß›mÝÞ|$Þ› ª {Óâ8HÊÒ0Ñí1~ÃçˆJ³×¹Ò8ö @–Ëqx3ë^öŠ=µ>ì™dUM"çÓÀwNwÄÂêgñ@oŽ"Ú÷¤-‹ 8HïI½ŸÎ­ä…’.§á/Ê®¹n– óè8ää’ÐgßóÝÙiÐæÄóPÄÌ<öjoØk½ÌÅdÙŽ“BûÊã‹Ç /Í0ð ãl3`I°Åe;*+öTæ»í¹ *c‹(\ÈŠìË3zî•yQº’ƒi˜°- i×aÑø>x²>Ëí…QߨŒŽ[»Ñq{š66#s9ÏÌíŸúͤœ91¥å§ 0+¤dceºôùn’_‚¡ëaôßÚ[Ô×…ÿ_[µ¿ `üծߛ¡«e3à—òAñA1²a¿V‘w')°E—=…î¡Ñ䣌ý;¹â’ ,½cÑ ãüœÀ±K#˜gIDAT·Í/ˆl]à?ª(Ê‚ñSy1¿›Î&”Îë0íÙ\\Õ¿`]Z@þ‘gôø…ë?LŸÚõ ¶Å¶"D_0|¬v‚+ö½Ò¤‡eÁ|yž´>F†LP¶{¶k®ŒÊL‹—3Znt^+çQž^‚Y*CZ€´$XÖi ÅA›:)t·T†;§!@5ÅM÷z«±õÍHîlC¸YÇÂÉ4.ÿðæO§‘ŸÎ«–aÁ6eµ;±6\ÇIÙ’+6¥ABFmVÂèÞщÍ\ŸW£Êw‰0úZ£7Í–R‚ˆT9[¸Ÿû²øï¿Ûƒ“•lÇ8ÎàŽv-Cpg±‰„wø'<EƒÊæc°ÔîfÙô± þ_¶dD—ö0iôC¨”““Å¿£¹òãD›<9 ÉäVꤰ!A:!t]7ôOì*‹}q·þÖôS"%¬×Óå²*V/•ù¼l>”}ôi/V°ÎjVÑvÞ„™-Ã,U m¶Í6WÁ á‘‘v¯tlÔúX4XÏú¼Êúß×bƒHZ‹&B9W‚iš6CZ¨ÂûúÔàuâµu¶`#Ñ•Àÿëîüænz¸©'þu½IϾ–õ{Ó„¡j Ž%óÅ£ØÔô%¹Ý—)S¢‘Œ ›}‰C ̳:;@¼öÆ9ƒÝ¶yó"Ò‘¹ J^A2쩜XüÖQ=š[êPÿbÇgi{“¤õ‡Ôþ.¿·m€.öß%ÒEdz.Yvå¸,aœšþÁÒñbÇÊý›»Cûû~IDO8ýºY…2öwe¤I³K`»F"Ø€äú³¬bæTŽq®³CÇ=>ŽÁ­^WØ]¶ÎŽg“e¥ÙêØ%Û’+S÷ÝE@_*à/P•PÍw[6·üß"¤<І^óx±7B‘—3€ä¸µþQ|ÿò½â»¿‹âRu¼ |yÐOØç{#Z 8¦šŸJ¨MF” #¼o£Eïë }h`DY{ÙJVþjâ¯é‰Ë÷áÉ º^C]¹ÉÒ“Õ_îe€J f‘ûËêŸlJóMmO¨ƒ±op»~öõ¨å’R ÎQ™®ì±Îç¿’ÿ— Û&¾J«d +5íKÿúHŸÕ`—†t'Ø"³Ës»d^«Â -¹û½¿<ïÉaBß }¸õ?¿w:Öý³p‡~$Þ}ÍÕ oº´ XŸ‚•)å©ÿÀï[—’™Ò>ú±©ÓDÎU›ëµäQr…'@z y„îQÓȾ{ÞëòÍÉTPùÍ%U¹²0 åí^¾³'… MO;S_ÃX¡ˆ¹òƒâðXÂ^,‚jl~ A€-Ï—Qþíe]Lf»é¹ÖÅþ®!e÷a)åwPÕíJ/S¯¯•BHfÎCUŽªŠòŦOlùü†ÎØž¹¼¢e/ÌÂ6d-SŸ2zð:pƒÃʯpH,–û±¯fêpã#>¡ ©„ÎMrÇC[³©íÉ/«1õŒ–Ô¬ßg*oþýáÿòtešC˜…u¢„Nš-h(TVª¯‚4¿ý‹Eeô~¹!z•f”àV wþ” œ)’})«ŠE«“³ånNhÊÎÖ‹Ta•3F Íåã°åU uõùlœ/’œÊÇ1]ê Ö bŠëlD“¶@‚LŇ~øµ¯ïÃãáGþ³]Œ‹–ð•ðúæI¤¨¶¶²eÕ.ĺ{빇 ÀåÚbHp`eƒw® ’ÔàyV•ƒ‘€x{ÜÚôþ-Öß×÷?R;Z¾©FÔ!Äï5Þø-!N»’‘ò =Ä‚–,‹KÖ~<{)Ž…b­—ÝMÉE'´4½T\åk}î;y¢š»`1Ì‹ yS¯$÷…/¬ó½§ùŽ®¼‹IS?w°ª¹eöØD7ÑL`[‚çKǦ„œÊwY#Ù»ÕÛ{v©·öm³{µEWì ”ò 3gEyÍkÌÌyèêS2*FîèÞ^Ÿú·±m»2¿¾¨ç.ÌA6à›2ËÒ}ð1†X8(¼úC)Lþç¬ 7¤bØv÷¶|ÿ½}‡ƒMÿHD³ÈÞ|K©7 !òRʃl³Ù (o짮đ«.7€ Ú½‚K É—ÑuR†Þ؃fƒëÁ,Ú̓Š*2æn{bqƒúžÎY±µEǃÅ2ìS³ Šô oà•¢J¯^ Wl˜`NåUõÒB·<»p_hwûq`ãMè ÿ¶,몪Åßã *8(myÊÞfçc’wr‹²~«÷—ΤÕòlÁdSàwW pà]ðb+wC[p´ Ä5ÅŒp<Œ¾›z­ímÝ{6ÆþÐ=ù–“7Bä¤a<%çR@ÑÒ–ûéʼn(-UU=~’—òîÞDaÃåï*ñž^Á9“z6¸F&˜ ã•iXãÙdèb&iÝÜlˆC¹±”3À#Yít:(àLuÒš .™0NÌÀΨáýÖD¹;¼«umKŽS_ô¥-GHÐi"ʾv³´Ò©<ŽÎ–‘Pß=¡M‰”O¥‡rG'ÕüHæ|¹ÆnùUÌ„cÉ£¦Ôüæuo¥ç´Šû´ e±r õGBÓUtîè´Þ¿q´å¦–RÛÕë$õß¾¡i9iOÙ¶X Ør?ŸÔQ0œ“=¾i#…“à·Æ/Ô ÈjÁ‘”r ‰[ª rl|~b0 µ» j*E˃J–«Ç^IVo*´FM”ŽŽ£4’QcCë•÷vj7vtq>Šu±YEë…é¢"[³òUD@µ3-¥·7§²ñ:î\×6 ›Ì›•ñ%˜ •Z÷Ÿ(䳀ˊ4îD½NªWÀ[&äáÉ÷÷õ‰6JH 5²úö÷¶ßÒñÿ©ê×L¿Å oé67™ËÅå¯gïÂñùÿ(~1~ ŽOhTZζû8jv;;.& ƒ{NÐ0YoòaP4 Q¡.™•mT¿ÿ5%Áäòs xM»zÀ×· tóºI¬‹ADù¥ÚE«>j _df€õjÆŒ3'™¹ßÌ–TÆ–>T96ß_>‘îZ:6ƒòL^7²EX%–aWû@×…V¡kƒ(]/åëüŠsSÍR0}ÍVß]F×`ã÷ºïïûªFÚôëã-~±aDíg¦àØÜ?º´/Oi(šž–ÍÕò#îú«à>ÿ&wçH¼ù·% Îè²k3 ¨ hŽì{^£qf¸ž«ví ]ƒÞŸoKÊÐíEmw{múaÖÄ?‹=-4u2Ô»èXŠüÕhbfÖ™y@Vì»éâ¹gÇu¾RÜežÉ鹑Œ^ÎôR6/ìŠ i2¤¬ ‚W3ï¦ÚW¤t§eÃÏêýyp•ƒt<¬ñîºoïï¹·ÿ[¾ù+šöúãmišDT>?}ž›yDüëØ½pQ‡Á5C‹BtÁÂq«5cÁõ>5Ç 7‹}Ã}¨Aâ«j¿T4p­(Üý7»€Z\u“E…Ú…º±b(%iw«ÚÚœScáCjDû¾Òš4³…ƒJwܸÊd- €›-¶¤*-«ˆ>ƒœèÍüj´[,Y»r#é¶òd^s%˜K¬œ»`BZ’ÛfØe Ö’Q‰7Á”øã•v÷Á¼lè-QlýàNkã}›¿×tSòKZ§6 …ð®H- ­¸<³x€_˜ÿ‚òµ—÷àܘJòÅÞê_n»<À‹]¥^“ÏžvN¸¸¹ &Pµ$ŠãIW¶ÙÿA¿“.‹Æ`"¢@4…¡®O |]›Ôw¶ËЖ¨/nØ•Êߪ]ñI YР  @ÃGå¼´¬áòD~–„Ó¢jJß§„Ô¤mZq(ô>"ºÇ.šqc<ÊT¥‹‹(]^„1[Be®ˆòL•é"*3EØv=YÍÅòfñákdC‰…°õ;åÖwÝhòæ¶GET|]("ýzï½·•Ô›¦.§Ë»åÓ3_U¾}nÏ_Ô¨Ö¨äãØ“q@Ã캷Hš®â+;a'}þq=.’ð—«°ÃΩ`„V\®z¡ô€Cú¬’÷÷þ"À• "PS¡õ 4­ƒÚG¨;j‹€šÃ@2 DÕ*Hˆ` ;o™¥S\æg`3ì’•âˆòÑX,šŸÍ[3¥³ˆ+`ØIs¡s±c¾ 3]†‘.¡-÷Äaö¹ûuüÏÞø;H"‘Œcàƒ;Ñûç[Æõõñ¿Uâê/Þp¼mRË@YÚò 9Ž;{ör2ò)ù«‰=â·—5Nçk7H èm_mÿÖk½ñ »<{±qQ{Ê(då"—0EpQ:€m¹FS†ýÖ3(»ÔšæNÒ6RXöVYû›ï\b &‰¶ž6™º«7Óÿ©íÓú`Óß)1ågJD™½V1Ç; +§—"ŠNpÙ“-Qƒû’Ÿ–ƒ­{ég#Î΀؆sâÕEéü}'Þï—!à•Mõ‚„RCäó®|Ne®Å&Ë%¢Ä{é÷»õNö—tpÃ- ççÕØ·6ÞÕ!_ y”gœoP!iëSB„¶¾Ùwÿ¶ñðžæGÛâGB-Úq(ȾQàxGdequ%#¥|q–è ¹—›hýnT¨8¨`ø]p¹(PLÛÿ»å0RÌg—.·#(×ܘ‡oN+ÏCŽOÀ%Žn§®®ŽŽ€Ò¯èœáè£Ý+|lœ?ç(¼Öدs†• RXWÑz]—ì¾gp6u[ÏWÃ[›S¢ê˜ ùFï«w @j±IZJù$k©lv í/iÃìºLæ}iÁÕ†)x-KШ §s&¼ÝnîÍæµ_NM)ò«6êÅA  ÏÜ”úÆ÷޳£† ¡«:–AÖ‡À ²$A%õQ{õØ¥ºzZBGëÍ=²û¾M“Í{×}+~kÛ·kG㾫RÉ,€YiXÓØÐ\æ-©OóúÄnúÅ(ø\T6i!  Të€à«Ò~t Ø“KÜ€œéA?ñ‚ÏÿîéE’«zØWx±½íbÒ”á€5Eнn «m²zgZoí“÷Ž'onûvxcâQ"š|3÷Ó; +›QS§¥”sg¸Ì½ÑQ›>ȇ§¶áä4h,–쉸ahІ×›&—{ÔÿîÏ‘øËPÜ.{@R§š)@ ÉyÀµ¥ƒ!äýdArKÎȇV] iÃAîõÿ”hñ-2ys÷tÛ½Ž'îì9n ?Š× ð¶–ù=/fÖ¹lmàtå^úâà•üä|‚Ær@¶ ÈúV[=?4uÕ»‘½®ùFT;Eœ¥`Áe$7Ó¼ZÓ¯IUß¶²ÁûóæS¤Ã¦é_IW5(ªteÖ?¯Ak¢ùúu2µ¿w²y_çã‰[º¿(ȾĽÕw:@ˆ¨ à¬eYÓèÐ-JÞDâ÷ðÏ'â81ÇÄ‚ ²]¥Ü}ZN~ïžPœð¸dAÚMÞ‰‹"`pP°kâ¥pi¥3Ϲiƒ<ò9DÂó·ÁN#ùCý5nHc;óEҗéU G„;›Ðq`c±ãÁ-ÓÑÚþUí Mqö-µð.»,ËÒañÿŽ#™­â¥ôÝxr¤‹ÎL ÌÁ†? 6ê äÝž9€åðõ¿òZ–ú©Kžžw¶…2ÀJùæ¯ .¯÷+z›Éd`!§ßÂy_[Ö¬F¨EGrw7b·ve’ܤù=ë~à)!Ä™·Üûnˆmۀł*2ÅŸ§aãƒxr¤?‰Ò¹YÁ‹eéíg{ü5RhÈ÷À·y)°1 ð–~¸_CúÜ”Õd>áyŽà Û¸‹Ñv•Ú°/òÎoA@ ÅDz’èùãmùÔ‡‹¡-Mq‹ú5(8#„oÅ9Žï:€,_Ò²€$$>,çÊJç‹7Ó“#møÉˆŠ ó@ŪM¿ò3ZäKÇSÃì q½ƒd¼’¨µ6RÏïáÛ¬î„ `¹¸Áß8­•¿þÉm™lŸuƒ¯j j¨ê€—‚!´:ß·Ùêþ³!zoëãbþ¼‰'¡Òð›Eá®äÕ‚EÊn[äLéßÑhé.:x¥ OŽè8“ò•ª®»#‹Æ}°>Šëõàmëm¨#`ú ]V…ö„7~Žàï¥îÂL|oÒñ{¨%Fü†uèþø FhOüjO+Má'~/%–5€¼i4.XýT–[ä|ù#˜XzGg¢âW“'fÍi,ñIPmÖê³½ãùñX5>ðúú«YÿkÀÓÖ _S—ìk`ò7yšµA‡ÛÙÄý­ÈërÑÍ©C`þ¼ˆ©ãJL+¾•­Æ@E%"UæŒ.ö.ZŠ©â}øÍ„ªüv:Å/gAcó@¥‚ºèy¶?ô}Àgaܧ¯ hüÂç–wpëËÀ>z÷4(o¹¾ÿ÷âœe^JB(*ôÖ&Ć:»»ßÒîì΄6ÄŽCÅU›õQRhŒˆ¬·ÓÓ5€çN3ë\±“Å%ûŒ.ªÏS%P¦¤Ñ‚ÎU@KpEVó-¦ Ør9þñШÁZÀ5‚½–ƒÀT•ýšZŽ‹ª –(’šDkØRzš ô&r”õ5*ýMÒJ¨™PJÿ²Ì¢ZL(ßé÷t ×,*3'ˆ(.+ví?G¶¬a.\.Q¶oæ¢ìÇlIÅtÈ”œ¡QÙÔP´ f5›_6Á† H†´QÕÚi×ë +Õ¯ ¢£! ¦£ ”h¨ˆ¦EíQˆ¾&PGÄ’:•1qZéi’¢5–!]<­¦ôáÚç)Qæí’¿XÈÛË ¢XQd”­$ã:ä*:æ+ÀdÈ–»I(ÛÈDæËÀ’ ,V€‚Yµ.Y£ šÕîÜ2R"*ÐjàP– )–jç˜åa´Gr¢3 JéàˆZ&Aω°òL 3ßN9‹5€¼ó‚}á¤?™yPJy€-¹¦Y 6Ä\¶A£9p¶ "^¹sŒªzQ-c/«¢Üõ7u$@H…tˆ~Xë¾t½­·+{­.um Þœ«v2Kh† ÏU >ÑT•u‚ÄY°OÁóž˜k`X»Ö®µkíZ»Ö®µkíZ»Þ„ëÿdSÑ9È|ýIEND®B`‚RxJS-4.1.0/doc/designguidelines/images/throttleWithTimeout.png000066400000000000000000004601471266736161100245010ustar00rootroot00000000000000‰PNG  IHDRb˜o( AiCCPICC ProfileH –wTSهϽ7½Ð" %ôz Ò;HQ‰I€P†„&vDF)VdTÀG‡"cE ƒ‚b× òPÆÁQDEåÝŒk ï­5óÞšýÇYßÙç·×Ùgï}׺Pü‚ÂtX€4¡XîëÁ\ËÄ÷XÀáffGøDÔü½=™™¨HƳöî.€d»Û,¿P&sÖÿ‘"7C$ EÕ6<~&å”S³Å2ÿÊô•)2†12¡ ¢¬"ãįlö§æ+»É˜—&ä¡Yμ4žŒ»PÞš%ᣌ¡\˜%àg£|e½TIšå÷(ÓÓøœL0™_Ìç&¡l‰2Eî‰ò”Ä9¼r‹ù9hžx¦g䊉Ib¦טiåèÈfúñ³Sùb1+”ÃMáˆxLÏô´ Ž0€¯o–E%Ym™h‘í­ííYÖæhù¿Ùß~Sý=ÈzûUñ&ìÏžAŒžYßlì¬/½ö$Z›³¾•U´m@åá¬Oï ò´Þœó†l^’Äâ ' ‹ììlsŸk.+è7ûŸ‚oÊ¿†9÷™ËîûV;¦?#I3eE妧¦KDÌÌ —Ïdý÷ÿãÀ9iÍÉÃ,œŸÀñ…èUQè” „‰h»…Ø A1ØvƒjpÔzÐN‚6p\WÀ p €G@ †ÁK0Þi‚ð¢Aª¤™BÖZyCAP8ÅC‰’@ùÐ&¨*ƒª¡CP=ô#tº]ƒú Ð 4ý}„˜Óa ض€Ù°;GÂËàDxœÀÛáJ¸>·Âáð,…_“@ÈÑFXñDBX$!k‘"¤©Eš¤¹H‘q䇡a˜Æã‡YŒábVaÖbJ0Õ˜c˜VLæ6f3ù‚¥bÕ±¦X'¬?v 6›-ÄV``[°—±Øaì;ÇÀâp~¸\2n5®·׌»€ëà á&ñx¼*Þï‚Ásðb|!¾ ߯¿' Zk‚!– $l$Tçý„Â4Q¨Ot"†yÄ\b)±ŽØA¼I&N“I†$R$)™´TIj"]&=&½!“É:dGrY@^O®$Ÿ _%’?P”(&OJEBÙN9J¹@y@yC¥R ¨nÔXª˜ºZO½D}J}/G“3—ó—ãÉ­“«‘k•ë—{%O”×—w—_.Ÿ'_!Jþ¦ü¸QÁ@ÁS£°V¡Fá´Â=…IEš¢•bˆbšb‰bƒâ5ÅQ%¼’’·O©@é°Ò%¥!BÓ¥yÒ¸´M´:ÚeÚ0G7¤ûÓ“éÅôè½ô e%e[å(ååå³ÊRÂ0`ø3R¥Œ“Œ»Œó4æ¹ÏãÏÛ6¯i^ÿ¼)•ù*n*|•"•f••ªLUoÕÕªmªOÔ0j&jajÙjûÕ.«Ï§ÏwžÏ_4ÿäü‡ê°º‰z¸újõÃê=ꓚ¾U—4Æ5šnšÉšåšç4Ç´hZ µZåZçµ^0•™îÌTf%³‹9¡­®í§-Ñ>¤Ý«=­c¨³Xg£N³Î]’.[7A·\·SwBOK/X/_¯Qï¡>QŸ­Ÿ¤¿G¿[ÊÀÐ Ú`‹A›Á¨¡Š¡¿aža£ác#ª‘«Ñ*£Z£;Æ8c¶qŠñ>ã[&°‰I’IÉMSØÔÞT`ºÏ´Ï kæh&4«5»Ç¢°ÜYY¬FÖ 9Ã<È|£y›ù+ =‹X‹Ý_,í,S-ë,Y)YXm´ê°úÃÚÄšk]c}džjãc³Î¦Ýæµ­©-ßv¿í};š]°Ý»N»Ïöö"û&û1=‡x‡½÷Øtv(»„}Õëèá¸ÎñŒã'{'±ÓI§ßYÎ)ΠΣ ðÔ-rÑqá¸r‘.d.Œ_xp¡ÔUÛ•ãZëúÌM×çvÄmÄÝØ=Ùý¸û+K‘G‹Ç”§“çÏ ^ˆ—¯W‘W¯·’÷bïjï§>:>‰>>¾v¾«}/øaýývúÝó×ðçú×ûO8¬ è ¤FV> 2 uÃÁÁ»‚/Ò_$\ÔBüCv…< 5 ]ús.,4¬&ìy¸Ux~xw-bEDCÄ»HÈÒÈG‹KwFÉGÅEÕGME{E—EK—X,Y³äFŒZŒ ¦={$vr©÷ÒÝK‡ãìâ ãî.3\–³ìÚrµå©ËÏ®_ÁYq*ßÿ‰©åL®ô_¹wåד»‡û’çÆ+çñ]øeü‘—„²„ÑD—Ä]‰cI®IIãOAµàu²_òä©””£)3©Ñ©Íi„´ø´ÓB%aа+]3='½/Ã4£0CºÊiÕîU¢@Ñ‘L(sYf»˜ŽþLõHŒ$›%ƒY ³j²ÞgGeŸÊQÌæôäšänËÉóÉû~5f5wug¾vþ†üÁ5îk­…Ö®\Û¹Nw]Áºáõ¾ëm mHÙðËFËeßnŠÞÔQ Q°¾`h³ïæÆB¹BQá½-Î[lÅllíÝf³­jÛ—"^ÑõbËâŠâO%Ü’ëßY}WùÝÌö„í½¥ö¥ûwàvwÜÝéºóX™bY^ÙЮà]­åÌò¢ò·»Wì¾Va[q`id´2¨²½J¯jGÕ§ê¤êšæ½ê{·íÚÇÛ׿ßmÓÅ>¼È÷Pk­AmÅaÜá¬ÃÏë¢êº¿g_DíHñ‘ÏG…G¥ÇÂuÕ;Ô×7¨7”6’ƱãqÇoýàõC{«éP3£¹ø8!9ñâÇøïž <ÙyŠ}ªé'ýŸö¶ÐZŠZ¡ÖÜÖ‰¶¤6i{L{ßé€ÓÎ-?›ÿ|ôŒö™š³ÊgKϑΜ›9Ÿw~òBÆ…ñ‹‰‡:Wt>º´äÒ®°®ÞË—¯^ñ¹r©Û½ûüU—«g®9];}}½í†ýÖ»ž–_ì~iéµïm½ép³ý–ã­Ž¾}çú]û/Þöº}åŽÿ‹úî.¾{ÿ^Ü=é}ÞýÑ©^?Ìz8ýhýcìã¢' O*žª?­ýÕø×f©½ôì ×`ϳˆg†¸C/ÿ•ù¯OÃÏ©Ï+F´FêG­GÏŒùŒÝz±ôÅðËŒ—Óã…¿)þ¶÷•Ñ«Ÿ~wû½gbÉÄðkÑë™?JÞ¨¾9úÖömçdèäÓwi獵ŠÞ«¾?öý¡ûcôÇ‘éìOøO•Ÿ?w| üòx&mfæß÷„óû2:Y~ pHYs%%IR$ðÕiTXtXML:com.adobe.xmp 5 2 1 °ã2Ý@IDATxì ¸eEuïëöÝtC3C7ÝMw È$ƒÈ<8Ï‚SD ¨!Šcb0F5ÉsŽ™Õ(Æ!OóéÓÏ— &1‰fÇD$êKD‚"CÏ÷ý«ê¿o}Îi.66÷Þ®uïÚ«jÕªa¯]µöÚëÔ>'¥MMMMMMMMMMMMMMMMMMsVsöÌf÷‰».“³û´Úè›šššššššššššššššv¶Æšvö8v•þj}×é=ÿ~`°ŸßÑö[ý¦¦]GãlS³+»ÎØÑ3mshG5Øê7 4 ü¤höç'Õ\«×4Ð4Ð4Ð40ç50î&9çO|'œ`­Û:M×ΛּéÍã}Z×ß^Y-×ÒMMs_;bo¶§ÛËôóæ7:û5à9dzOœÑ¨ù2ŠwOôÕÚhh˜½¨íNÞÑ3êÛ›~~GÛoõ›ššššfŒîÉèŒ9©{q Ö§)CqêtŸO¨Ë3gûGœ£%í¸ôù”×e–o´i i`îi ¶%uš3­óNÏ»›*ØVɲ57{S)i&=7LëS€WóûùZvTÚsÆs™:ÝÏ÷ËFµÙxMMsG}ûRŸ™ËL)ûIïa¶-¦u?æ™Öe-Ý4Ð4Ð4Ð4Ð40+5PߘgêÁôóæßê¹PSÒuÞí™G¾N»¼Ñ¦¦Ù­ÛSÎÆihä«ù;rÖµ½¡ßÃú|ÊlwLá5hhhhh˜Uð tV z Öz3eH¤äí¨˜7Š"pyÎmÿhç£ï¨˜u-‘®ËH;Oy?¯AÓ@ÓÀÌ×@m?jg…´ËFÑ…*_Wp}¡«E— ÷¨§ãáíÂÛ„?~SxcÁ¯ºUÔ K¤ýÐä¼X]0ÐÎŒëPæ´)¼MM3KØÀ´N×A?—Ck´m¢`¹EJc–ÄÑvÇö‡4öÈPÛÛ ìmålƒj—¹ çýékÀó¡îÉóÂežÈP@¶\èÀ\ÙKȼaA¹Ï1_<‡<ú×Ü󥦞+¦u™šº_Y޲MM3W¶-¦ŒÔöÄöÅ´.C¾e]llƒ‹·AˆÝ±í¹UiÛÛ h-£¢¡2ËRôó™ÛŽMMMMM3PõÍwoÆ ©v6”ó5…Ïyµ“BzwáIÂÓ ž(ºDxOWÿ$ülÁÝ(´S‚#cg  hXÎü>ÍRíØ4Ð4pojÛôimk\V󜦮mÑ)J#\/\Wp…¨ë+9~ ’+üŠÒØø†ÚæÔNP^—‘64»cMüô(×·¾ÆÌÀsÄe–ƒ_Ë KPïx!÷°uBæÐZá*!÷À»>ĪçÏW•ÿ;á·…¾)ÙÍóLë2Ò£æy”7hh˜¨í #²1µ­¡Œ4|SË@±;§ (iò‡ §ãSo’Ü7…¶A7(ÿü%¡ïG¶5äI›*ÙÙ(ój[ã´)ò šššššf”¸‘6¯맦¤kÄ9±ƒbJ9i‚~[(ŸFî à“Î?~HøB§ÅŽ Ø^ °92YGíØ4poiÀöÆý“üiÛË:ƒ"ý á™Â .Þ“€øw!@ðBvZ¶9¤ë` í‘mŒí‘ó¦Ôk°c`ÔпWQæ¹C™>i>¼:Gxšðdát´%v·à›’fî äþõ}¡ç„çs¢Æº\E]i Í¡¬‡vl¸75`Ûâ18_Û!Êœ·ý±Üj•](ôè |ÃÕÞ?±AŸ~YØ·5ä±9¶+N×r*îÊ-¯AÓ@Ó@Ó@Ó@ÓÀŒÐ7×ð^jjGÄ´vPì´ð Múá¥Â‡ ÷Þ›p³:ÿ˜ðÂ/ í°ð î4p§Å<øvnH7hhØ9¨í=:_þj;Týe—ßã…î/Ü™p§:»Nȇ7ìJðlo €mO³;Y;rôýÊmø^Ÿ4à9djÞÑJ0økÌ[Ô×_ ™?Ü¿Ø5èyá 2yÏ—™š/‘îaœtƒ¦¦§ß³jjÛ5Úö@Íãžõáã„'¾ÈNv¶cþTø ¡m ´¶AʆmªËIæå\;6 4 4 4 4 Ì p£m0¨;p®ißQ!ïòó”~®]63þBƒú-áßk¦N3nò€°H× ùMM? Ø.÷©í ½Ú!€.^VpµèL€i"ümá·„¶+ØÒ Á¶¨~pªÓ–ktû`^xþ É|14à9dJùnÂK„Ï%œ @0™ ÷®/ ™ÌÏÏ'Ï—C>ÍÜvlhøiiÀ¶§¦¤k;ä|mHã??GxžÐ÷6%ïUø{õþ; k»S§`m{êû|Û!ä4 4 4 4 4 ÜkðÍù^À êØº¨ißYÁ©òÈSx™ðÞÞu¬!Œvu}XøV!? Á'í|m{jžDÚCJ¸ `nœö|Oº/cÎ0w˜C g*|Rcþ|Fè9SSߟà9m*VùMM? pO§¡Øçû6{ô0áUBÞ ™©ð5 Œ²ø@‹&l[¸‡‘öýÊöÇTEݽ«Ù´Ñ i i i ià^Ó€oÒ÷ÚfHÇvJŽÓPœÀ>;0 Ä#}„ð5Â3…w–/[–Ž;âˆtØ!‡¤ÃY™_±"´|yZºpaZ¶Û¢ x ·Ýv[ºíÇ·¥‹Þô?ßK_»é&áwÒ×¾ûÝôùÿúïôãüÞÇO®Z¯Þ(tðŠÓÚ¹©óbw|Ò ššv\¶Å5%í°7¶?Þ@ ܼXø³BvoýÄ@gûî»gZ¶lIZºt÷Àùó'dî üñïL7ß|{Ú¼±ÃÀNŠ_b{°/@?h»C™el“à5Ô—Ðó‡Ï(PçI3 Ÿ-|¾p‡ÇËö^–/[œv×üç/Z6Ü~gºSsgÃmÒí·hþlܬ®vø®®W?'ô<éS:1t=wH7hh¸ç4`ÛSSÛÛ&çM±Aç ¯âOïì¾ûºo-O»/^šï¾,-ÚmIÚ¸QöçÎÛ2Þñ#Q5íuu“jãû@èà6ÅiìŽíM»ã“nÐ4Ð4Ð4Ð4Ð4°Ó5àõNïxuhÇ„!‘Æ11ÏNŠ)Î Èkv}￾—núúMé;š?ÿï‹ÿ/Ýø·7¤ï|á;iÒ÷Âé„ùðÇBÎÁ?¹ã¹Ô§õÜi÷.)ªAÓÀ= ß«hÊil ôí¶h­ðჅw ,X˜Ž>úÄtü JkוV®8<­XyxÚk¯Üh»ÐvŸÉÿèG·¤oûké&áÿ÷WÓ_ÿlúÆþ]Ú²™ }wþY5^.ü¼%6¥oƒÌ³-’HçK“nÐ4Ð4Ð4Ð4Ð4°S5ÀzW;*èÀFæùaÉN Lðx=áw…«…w »-Z”rî¹éÉzTzøyç¥ÅÊ8à·UÏ*öRîm.@óòU Ðõ;ªºj‡Ý‚ùÒ—Óûþí‹éºÿ3mÞ†Ï1-¸ARÏ~Iˆ#CE°~˜" À÷ÃÔiÊ4 4 L_¶7Ôp;Øö˜Âùn¶× ON æÏ›—Î?ÿŒô˜Ç^”Î>ëätm&XÒ,÷‚]À/ó'ÂI ÞL„\ Jf2ä7kÀ¹ÞM7Ýœþúo¾–>ö±¯¤ä«é¶Û‘6ü—$QøgB:®íyÀöÈiÛÓÚẼçŠyPæŒù¤W_'|ˆpÚpü©Ç§‡=áa餳ONG{dÚ6o›®þV¡9ÀGÐokáð‹¼æOK>¸'Ľõ‡·¦¯æëé?þì«é+úrºóûwL{\¼EÈnœw ™/žCžGÌß³ €)é6‡ÐBƒ¦ŸL¾oQ›´mù}ÄNõ ùž¿Ý…Ó‚•+פG<ò‰é´ÓÎOÇzZ¸hIþœ\«°+íÏÑÜgÉÔÀ;õñ“å7lØ”¾ñN_û÷O¥/|þéûÿƒõqé ?2°¿ìP€—6TKW˜¼ÜE žìH˜Ê•†7‰(y¨†±c™ÍzÅêÎôÑ}5½÷}_R@ðÆ´u›Í„ªnÞ¡âW ‰þ`s¨uš|mƒ” ™iw@…9¾gy.yy>Õóˆ9t¾—ûLG‡yXzüÏ<>=æIMzpTÉ?.‰f…®wÞÛW‡•Ö\ñƒrÊ‹§órPPG·²Iímܲ1}ýS7¤¯¼ÿ‹é†ýGÚº!÷nÿðg*~žðf!•˜+¦ž;ž?äJFÚ i i`ú°Ý¡¶ÇvÇÔö‡2ìÏáï ù ý.aùò}Ò£ý¤ôØÇ=9Ýÿþ§éƒ(}äÄmH­‡»«4tœûÜ+¹.(Ë`·Úrwh í}û¿¿¾øù÷¦/á=úPý¿îrœEà?EŸ%ôn@lÍ(„ݱRrÀ‘oÐ4Ð40¥lÉt€uÕ i i`š˜îšfs³BÌç ­ÑNP;-8,¤÷þ–ðlávaýš5é%W=7]zÉÓnzå·{®À«ìi„ÇR¼’ð`ä@#-jÏdh'`‘qyõàí|´¡¼©øwÜqGzû¾”þ×õÿ–¾uû´vVü_”ï„ú!#ÖN TµC¯àPE;4 lW}„0vÆöÈöǶˆ<Ñ;vý=B¸] ‘G>êÁé¥/½*vêÉE–¥ÉRX¤·èµËL󿜎2öBVö¤ÈwÔ啎‚’™P(§“QúßøAzýþ%½ý_Q`~ïØzÁNä„ ûåÜ@mƒÄÞ%mç çÏýú—¾šîÜŠï±]øŠJŸ,üŽP…3ƒAÕ`"-ÒñÜåÍ袙M£5`‹uÛC{Úùˆû‰÷ájáváIOztzå+_’Ž¼Ï‘YŽ­@|¿š—®(ìüˢ%.~Ç“ý!ÏÎ>ñ&KÀo‚|˜€Bƒ_êÆ"Â'oÌùïÿÇéMoþ·ô†7êõλÞÑŧ/~DHåQ/(yÀ<ÛÓ\:·\½ra»{óžçsd$|—ð8áváAç=(½ìÕ/×kv§f¹jþä`jGùäJÐOó£ öi>„Añ7è<;ûrýr$ÀWêå’Ü‚wnšÜ¤6i7·}Çí·§¯¾ýËéË¿öoió]ä¯ GèùÃ= ¾©ç y§•l÷/”Рi`;°í}ï"O»cŠ/Íz|ºp»pȪCÓË_öj}UÅ“âûhÝ 7˜|çBk5×.r¸É’ñgæ–pŸU'^ý-uí>»®Û‹  naw↋nÜ<™¾ñõ§ý‡_J·üàsÛ=‡Rø Ñg obƒ°3¶=Ø!Nɶ Ôv(sÚ±i`×Ñ€—»i}æ£xu9k§æ™öË[¾i`—Ö» Ø€@Aœ§Ñy(¸HˆsŒð Ž…§<æ1éÿ\ûîôà .Ô¯ª*?}çVGI|âÐH:ÀW92ñÀ®:x3–¯ë ðñ't*x/ÛŠ|ÝOá-qöAû§§®<(}ë¶ÛÓW~|;£û«àáÂO Ù h@gÒךº¬Ñ¦¦A xí@ØÒ¶A~pâ¡ Þ…ï( Ç{Túàÿ0½àùW¦ýö;@-ª™ ìNT÷xæ(8):Á2BF<äõ]Û”BÎu°9ÛT#SÊÙ–EÆí‹.^S.ž|¸ËȤŒt´EZòÈ Ü69‘–.;"­=⊴hÑéûßû{¹ÚúÐ}<¬WÑÙÂ?òišZ @GyÒPº1U²AÓÀ.§²Â»å‰j^fÝjj™\2Xf^£MMEܸw°q€Ú€FF?x?Hé?Žý®¤}öÚ+½ï­oM¿ø¼«Ò²ez«!<5 %;Õyï¤0UÃñ>Bxº÷¤ „´¼q ð ø y7ÈYêµWCYçÍ(]Ú]® å%í—î³d·tÝ÷~ ÝÑI®?xäUG ÿQø]!úBØTÉ.m´AÓ@ÓÀ ¼. FÛ_(6 ûCDš Ø;„|—ÀHXºtIzãYNoH‡ºV2T¤I=¸ä¦Y¶ÅÁ Г A—.¨GZrØ (¨@LUŠÝ*£NÁ É€Q'xHÓ.uRp‡6"€¨~–/_.¹xezài{¦Ï|öûé–";å9ÂÝ…Ÿ¢õèë´Ø»pî>ôa„Gš‹Îü2‡N~@ÈÀ‘0þüôœW<'ýöû;wìýUqX·«šCš?98?wìû—G"ÊN@Bz9œ—yôšK>¾¿K»þ,C]Òì$™5!Ë„DË Tš?Kæ¥}v`Úçáû§ýëÓ¦›x¶ |ÏØa¿2­;%ÈšG}¹"ÞHÓÀ.­¯ (Ø·?¶=P>DßWȇWg ÇÂ9ç>,½ûÚ§‡=ìÑ ®-tŸÕîó|z`~Ìê6Թʹ8Åοڭv`0ÜkÕ±KL•qnu´‹¬ÚâDsPÆbr^Z¾ïÉiÕºËõFÍÒ­·\_zI°»þ¥ðV!MõíMÍë—I¼AÓÀœ×k48oj;=]ˆM¹ZÈzù'!üQõÅ~]¯AÓ@Ó€4ÀzW¨i?0ÁóC7:ÁȼGȧ—#áŒNHŸx÷»ÓN8^&FÕùˆÒž TŽLš¯æI;pç€ÔA7ìBFöÌ;øj‡4¯þâ•„÷"¯Äm†§SñÝí }‰†„|ps:FÁƒ‹Ø;}ö–¥ooÔ{£Aï3Çw·ü­è÷„èÍŽ èóÈ7hh˜Òk¢FÛ^¨{b‹ž*|SI‹ Ãñ÷?:}âºkÓƒ|žÌ MÈÖ`‹ºâMè9Œ§¦è¹Ø…Xr€/·É÷F/y² ”wÈ'Ÿ—|~Xd b_[!˜]‚Ñö„ÀÁÊ –€àúõKÒeO?8Ýxã­éK_Þî÷’>@•~RÈYä(ÑKgÎÜ>êâ@脋ϼçûعJ¿[8öû¶^upzûGß‘.¾ô’´û‚Ý»Ý~óÕ AÀóÓ¢2&u #P§ë]ðØ °Ó/ëâ/ó‘^æ"Ë˾æD€O¹­Ñ®rôC^¼þéàå`âVµÏß‚ƒwKû^zpÚtç¦tûßÿˆfÇïÂý3!“›ùcð\25Š^4 4 Li î"ÊBkûCûãûÁ¿Â Ž„… ¥_|ÅÒ¯üÊ›ÓÞ{/×}Bn³jÆgçj ÷™ÀØôdn"8§k××yL./€‹Û•W²þ¹ Y‚{}>åá>—ºÈáZ‡ë¬²yó–¤ýW<2í¾ô˜ôƒï^§¾6 2 ö“ïíý[á„èÎö ôyä4 ì `®{¾; Ŧ˜:}šx× ×ñk.âh~VX×%í5¦d¼MM•XXsjÃ`CÏLðxhòCÔ}•~‡/M /~ú¥é¯ÞsmZµG¦ÅöE”$ÞèÈÕ&‰48T.m”d´GÀÏAÃÜan dQ¾kÛ„ÔÔ!ÚšLë÷X’>ó€û¥g¯Øoªl8µT¬w × Ñžõe’§3Ï©1K¢AÓÀ®¥¯SÖ ÀZ"Íš! b‹#|ÐrJÂsŸóÔôw÷'éˆ#ÖåUg›`Ú·ƒÕ³-)6b"v j˜¦ÁfØçYä:ˆ3"üS†ÑŒI¸]oÏe ÓÞ{túƒß]—–,hµ_ù1^#´~¬¯ÚæÀó0LûíÌæ<ç@œ§çºpðïT¥ÿP8ö¬ós~úèç>–Nzà‰yÆt÷)5I«\oýse# «Ýƒïj¾¾T*!“3”‚"0%šSÝPB¸7‚"L[zMpÕëŽH}äÈ4±j g¨ä„ÜÓ}¯G_ž?¦õR±Ï€dƒ¦]Z^¦ÐÚþ°vX|ðlŸykæ½Â#„#aõêÃÓþäïÓÓŸ~Uç"Ç 3E:,…~‘ÆAA^ °)!ÈQ›äƒ_Ê0=CU(sêˆ*»BiÃåP´êqé¤s?—–.ÇäŽ}'Gèc¨ud}Aé¡¶AÊÖ£'Û i`NkÀ«Ìë|f}à.êiáùÊ{íÔu꺽*-Û4Ð4€X$s0£ƒÁ¹ƒ~ À°¬^+¹k‚†Þô¢¥ß|Á ô©$UåØP.ºê< Ióqaý-Ã/>FTp]}ö@¢í•Ý.yÚèÎB ÒQ®4päÃ`H¦È‘ïÚ¤¬ðý”¥ì"ËïÜgMzõü”±@„ð=B¢žèÏzáAŒª6ÄÊv£&Ý i`WÔë¢FÖàuc䃳Töz!u†`¡žlÞsí¯¥·¼å¥i·ÝÊg±¾%Êš&ËÜ]f›0E&Ö~ݼlRÔËAšÔÐF4%^4ÈP°W‚¨€@õ†;›TàþC*d¦äªb‰]~ùé3­@Ψ`,,~§·#á§œ—þ÷ÿ%}ôñ¹@·8,‚Ñ™ñcºí@½/L‚°¢ÔëL2Èffæ[ÎvÃýàZS(Mæ1(ƒl”©Ür®Ÿkäãâ%kÒ±§ÿMÚwåÓkv?Íwj¿GÈwùöïaµ>y€4Ø i`.j ?¿½jjƒ,oƒôa/1(«åÈ×m N£vXÖiMÑ}uYÞáÎ[;¦.Ò\O4ÎÏi¨ çŽÓBžJ¶ê_+ùeû‹ôàýÞk^ž÷ä'JDAñæÉÓØú×|Ukp:ÂñÐ/ÞÔ6*ÚU5/¼œ"|ZUðxªº°£ý\L¶{30*ïçêÕ¦ß_w@(¤“L¬Vö„]ôfýùAT¬ná3˜M»²¼ ½X3Ô7H¯!lÐqÂß’‚¥{,NûèÓSžüP•ѤlCå”vÔŠ4O@ 2¼š š%0èü”ý‰À ÐD6&ïC¶@ØŒèDŒ\jù,A™Oátíä|˜1ýÒkˆIôþÇï‘>û·ëÒá‡¡Ž±ð"•üŒ{c½‘FŸtjN .óU4kÁ÷h¨Ïê9Eèa•ðZ!?~1óôAÏ/þÞ/¥ËéŠr¹˜ùßó­qŠŸ_¹¥4Àš-÷¡ø%ßø…_ÊUÈ=)Ðâž?äP”¬o9!luÃYn XLi)¶Tž?%5yô?ÿEiÁ_®Oé4¾±b, ¯²¸h»¯_-Éc…è =ö‘®Ð³©’îˆdƒ¦]ByÉM­Ö‰íÔö—{؃…— GÂcûœôü¼YæAvDæ#P·öì"û唚ßw¥»Xïa ’tÉwå$( Lè· èM!bÑ @õ.º‰ :`ª,B!ùMÅ$’Þ{åóÒòµÜÎÇÂ9*y¶½¡Sôh}’W+žI•lÐ40'4Àœê¹N¾žÿ¶7¬Òã€2ËB½^\Ç}˜?®Æ¯tÔ´ö‘¬cv7×÷ˆQi_+—9ïëã¶ÜWtÜ÷¼¸s ÆM"O2ÎÙŽ?†…Oä^6N ¿ùÌ+ÒSÏ?_Åád1¼¼îövìÕØ[q¾Oi&ê/ù@xÐHäR¼–é»^Ȇ¼ù¥.•wý…Œ;+rnÃtó†hçÊ}wKWï·ÝéqZZ'¬uIë™Éo·•7h˜kðj‚Öë€46Ç×ÎóÅùÚÔnú5ñ|øÕé˜c×È,ÜãIC” Ì@0O|¯úv|Ë"ïo: mùB;;‚ýÀ¦ œƒ+a^Èat:¬¡ýlo¦6Y¬4àŒ²¼ö[~LmHÓ¦šÙkωôñí•Vó…£ï#e›ú3bg¬[%;‡1ZV¾îò™/› µ}%ïs…>ZøáHxá¼(òÐS¸ŠÝåÈa9B|y>ÄåSqìì‹Ð%úÓõ7Ln(yÉ#Wþ"@¨tnùŒÝwjD÷ôèúÀp¹$”³;0ïdÕÀ¨‘(U5Ð µƒÈÓP5” R ”x¿üГQÓHàÁû­B¾ÊÂóáiÍ÷®hYyS%4 Ìi x®CAÖÔv–<¶‡õsˆð×…#ᬳ/NϹêÍeg‘¼n;sÐ}Uvç>ëv„›l—×n48MpΙG¬.:µíÈ\ÐV¶$,cp Ò|dý•Ú.SQرr«#@ð/ê)GòË~nZ²âåY`ôñ…bŸ(ÄYµni’<p9׎MsGžã¶1PÏ}§Y#ã€2äëú^/n§®ëþj^K×€õUS늎­ç?Wú3Ÿê“Ø?Õ×Éò£¨¯¡Ûw»î[M6¸§4€rçx¢Ô”‰gC‚ÃÂyCyݎɑ۞ûˆ‡§=^›Ýb*êOº½û]< {,j${x.Å3 ïO¢B{,ð<†ÒÉC‰v+¯&Þm(uÃcÊUÂۧ,MÆÚõ—’BÄ^KœCpòÁüM5aôC#ÚRrÀÂô´‘?‡Å{èÈÇœè]¢_/p/âzñÒhnX‰MsTžç¦¬€µ`õš9]é+…C0OkñßóÒtÖÙÇiYà I/j½ˆ öD»µª4¼í!0¢¨9ó¾/Ckê9Ĺ×)}͸Sºì5ÏH>í¢˜;Ýü‘ÍGýìŒÀæLÐ ÎTÎ=S,xÞ-˜eâ;ýÔÚÔüQÃ’!Œ—ÿ"[õ—;üb¹Ÿ‹s¤0'Àˆcw æ`½ Üo¦HF úýc©ê#RÑðFÂZqEh=B™7 zhi4òíÐ40×5À|7öׂ×v—5}‹P÷a8ö¸sÓ‹_r­ìüü"Œn!{ªt¸ÏÜ¢ 8 iËF@Žº¸Ç…Ã>àÂv.42U{n·›Ê³©qYÝW,øÞª§ß¾h—1mâ6È8 ZihoéêפEû]æ!ô)zãÙ½º‡ÙîФm‘’ šæ”<ÏM±/Ìyß‹ëûò¸§®íR]ßkj×Fão_è°Mm›Ð;ßa~¼6Þ(¼Ax­ÝáÞí\ß7œ¦}-á¹hW¶ÁŽj…Î%`’ž4õ¤"mcÂddò]!\'‚“Ö¯K¯ú¥•¢;=^H4¯;>w~{á¹à™ OÄü:HO¢+³WCÛ¹Ùh;¼”ÌʆÒqf>Í"Ì?÷ÉxÂ)õè‡J]ÆYÁ¤õíÙ“ÉRéwJé(´5î'öÏÑ%È­¯²Ý¢%]C²AÓÀœÔ@·ÒtvNÛî`ƒêu¤ÿ%dÍ Á¯^óäô¸Çªõ,{áÀ[ød'œïÖ«dôEÞiQ˱5ÂX‘øô#!Ⱥ]ø¢6T?ó7x©mÚàÅÑ–~º“ìòYE9À);¤f6{÷¹ÏDúПH9hm4ü¸žR4”ùÕÞ,ç ¸šà§|'`̆U^ F¬v² –»þsKå.¤éšƒ‡ž‡y:»”Öù%bÚÐx­ÎTéÐÌÌ©"êꃬ¤y´¯¸Vrôï ¨ ñ£ ü¢z´Në9ƒ®iô,œêJÌMsPžã5µÝa°^ ¬>¼âoS·ª?Ð~•q÷œH;ðè y9À4ۙ̋ŠJRÇòÁ+2&÷ã¯ýý4±ôŒÒÀ9Dœ«…èDÇà8äáK¤AÓÀ¬Ö@.;eþC±/P¯ %G‚m“å n‡ nØ`ú¨uætMÑ­õýÔ^³øå~PøUá5Büõú:‘¶ÿÅõöµ‚‘1ß};¯¢?©Pâ\O ¨'iOO:;ú«TöÌQ'¿çâÅéý/z¡æ¥AMÕ;òðXÈÛ±g2DñŠÇà²ðrz|»ÈÔMÔíÕ‡2’Ež1`× @ä劄7Ò¹$¹,úÖƒ6A?vüQ¯ÈS—|¡l¤øÀÁÚæç¶£ÂÀá*åx%ý¢[/b뙚\¹4×t: š†4àU+H¥Ìyօ׀׆…³<i»1rOtݸ¸ä¦øNvåºÎ\jÀ'ž~zÍWóˆc®O©0†™Å\Šº°ÅÚ?äE<­Wâw2kÌñåâ³›ÝsÝJ=‡h~ƒ¦¹¨ÏmÏý¾ ò= û³JÈ«^C0þÂô‚¿?í¶Û^á¢Ö®³ÝàpŸUWÖåv«‘Ù ÛV-k™pa©ãz2añÁÚ%ßñ$A?QVpßî œ„ Jܾ u ±5 `eÁ€çëÀkBÉ‘àµu: ¯†~¾.kéñ@o5rŒÜ._5^&VðYá_¯úa_oÛ@ûòn»¦¾®eN+ÙàîhåÍ5`2PΓÉed‚½L8ò—.~÷—¥õ¼{Æ]ßÁ:¼·l~œ“W`ÁÔišÚ›qÞrP ã«-ú4ØÛðw>(A!ST <긟òö|HQy¡=)x[ ”sŒ–öñ^~±`C Eç^¬õ"eT`ƒ¦¹¤ÏkSÏ}ò¤¶AkÅ»l”<`Ïtí»NË‘Ë*à>‚~¤#¨§ê ]ôhÉe¢!«õA‘Rr£ å£møfØ>O9â £ÿh¿È–>'õ:oüàHÔG^Õr"ïèãÔ+PÑŸ@±æSß±?-¥W¼"¥³'‰ÿ(!úµý©í=ÕjûC~¦ã 3ÔsÇ”ód÷(vwì¶0=ç}W¥{,È»ûtͨ³0Á³Øù§²¼¿.ïÔ£œŸwþmÔüáÏ@CNó‚Úüq]Ù˜wý‰[ʺ…*ãWƒ³¼¤¶)¸§9ÄNÄ2ª ~üå럖5;2{“ú¡¯<3RºCmÜ.üá„æRÌ_F&覑|;âeÁuX)&_ÈO€®=‡¬k(àë‘síØ40÷4àÅe¾{ÎCëõà{Áó%Â!xÒ“_›;ìäìN²Zt.©n)vû<»Ãìü«wÿ_>)ò~-˜6-ïvÜn¸³˜ É ˜ñ(¸ÊlÔmÓ} ZÌÏT;U}Ú¦ªÃwB¨³hUšè;2cøHµW ñŸ­cô‹Îm‹bø…'Ò i`Nh€y ÔÔv¾×å¾Ãïƒ×‹åÜmà™o^£Ó×@­;ëÒ=_($ 7à5áß~QøNáC„lˆàÓ–¯»æ{nÔyJ¹óJ6¸+  °¹¾è¦ž(¦6P&ÕiB&ì<ô¸cÓ“H1 ;¼wã9€Fè<ÝéýÑdÍwÀ¯«'9êØC‰4^‚ú è&ÓÐi„"~ô_¼ó܆ûí‘’‹4òx1BÚOGmÖëd /Q~„ ßVèœM·œž¥o*9}÷ÌqäUªû Ñ/X/PÏ1(×§AÓÀ\×€ç¹odÌ}Ò¾¡±F~QˆÓ?ôÎg¦ä«òÍAÖ1ëû#Œ@Ý”¼©‚,þEÞ(£NÔÃÖ€®ÏúW>ÊKÛrÙvØ倊ä‚É5˜¡ÄYÇÁÜL£]µ»KÐÏ «É°OØ(Ò?çý#=?íEÈk4ü‚Øl±g|ð(G rtÃ÷×cóX=w˜?œŸçÐs•ÞoÔø.~í%iõ1k¤Öüc+è4q%ü!»2ò«¿zý[ $ÜP‚}Þù—CróŸƒuÝw–ùŸ Ÿå¸”\Ðnžh,q ¾ê2ß|²¹˜@˜/ÿ• ²ÏÙ’6– I:Ì’­ ´õ:±ÖWìÁäåÊ*d=¢ct]Ïò"|ÀƒÌ¹vl˜;ð܆Úþ@kûƒ“̃ÛÜ÷~¤ òÂpií&ÛÅe5àÚ:Ð.­ÊìîÚŵ[Üç»]Ö¼eÃÝõ*U'ð-íèdÙp¿é_è>\Ö­ìbO Ñ,2B’°iì ܨvÀŽO9rÁÝë‘ib¿g¼Çîìö{³=D«¥e¥4 Ì. xîzÛÆŒË³°=ãÀ¶©^3N×}Qßùqm5þx øú ÎÉ›À»Qxw{÷Há{…_þªðX¡}\_÷ú¾ãþ ÆúZ{Œ–“Xƒq@Is |ñ9§zr0A<©˜L|â?‹æÏOo~¢îõWRÜõöðF¸ó‡W£t”É Øp§dð2ЧAO#>Â4¿”¹­šF;jÏ<<Ò5tMŒ©Œ‹³f<®TAYÊ#)¯ëaœ×€Á-ÂðVªzYº;¾qÿ¬ÔŽ1•@×¼ ‚nk¤1ò^ŒnÜTE šf½<ŸM™ïØò¤Y¾Ia‡Îž%‚Ç?î„ôàëy ‚f¬}P6#¨Hô ^^Ä@ÎV-íüÚ­wîeyÉ•òN~R6Êm+`ÃîÂn‡¡Â7]?Jum Œ¡ŒÅýG;éŸàå=Ô˜_ý•H±UïˆS@63iŒ‰ ¶I.³W¬Ð—%½"§Gïg…µí±¾¡šLsnæ™'ãóØáy.Á3®Uú)Â!8ä¸UéìŸ?§ õå~>ë¼_O;ñt½â~Hã/ïÔË;÷È Ì»sª+§eÕV½Ë/ZÈíx@±×  $sð1§}„·Éíh ñ‘wÈ1Z vô•ËÙuZ¦ŽÝíÌBÑ^w…uOciÅ>%>s 8¯/ö篃[íZÝLã6 ÌZ Ôsœ´ç¾mý8øÜÃ^>êLçÏ_”žzéoåà~%7Ý^µ5Õí©suuËwÚeP¡ý ]WOmÔn²ùÐšß ¥œ¥m|XÜf:^¹çLÙ‘\F Ý}}t´³=˜wЫ¤Õ‘ŸÙPï³õWØÙöC2úœiǦ9¦ÛÏsl kÁ¶hÜéºÜ”v¼½†Üæ¸6´¬ÇšZ—Ö3ôãÂÓ…|¥Á„?ÞPt!bŸý„OKØQèëï¹À½Ç±úí#rÔc$Ý §”3Û¡¾ØN{Òp~N31˜8ÇOÁ‹.8?v€æ!žˆ=ú#JjسðG‹ÇQ<–N^môNÀŽ_<·ßo‡¾ÝLY¢Úë¡\4Ú«óJ»Múu€Ïã¥^œT:ÚÖùD@±dð€Â ²4¥¢-bÝWñúgðÂïh8WìõBômCiÝ^Œ9׎MsOžëÌ{æ;y°¾q]¡ü,Y¼0½þ7Ÿ× ·(„¢…­eYu ’ÄÓJØS±Êºñ˜ /r’ú´QÐõÈ+ðÒÕS˜EFƒÆ ­êHnX'>ˆ`‘ç?‰ 8õŽ\p$Ÿw|©Œâ¨¿ID?Òí ÌßH°°d±ž)­}tÎŽ8>E<¬º¶ý©õOK¶?1ågx\>kÏÆÍ91‡øÔô²’„‹ßôÄ41kÁçÏ<¥cq•óN½úG;º‰€ ^å%'ìš7ÈÄAÒüÅü™LÎ3’Ø©^ô[ÚŠëÞ͇|m»TŠëíSÎt`ç2°…1m‚2Ÿ¦xù»5÷ãGdDžª§TJç GîYŠÒ‹t\+´ÎÑw=ê¹C` šæ’˜Óõüöz€úv¦ÒG:éó.xAÚw¿#ºÀžÝT»–µ»Ìêq~À ÆEÖ­(°¸Õ]yqŸ£žÒ_·«puU/\]noe€CÔ)åÔƒ?XtÛð«v¢]n‡·é´íV-°$BN‡­ÊcË⃹ËÓ¼ƒ_EÕQÀö‹…¾w¡oÒ4e[TÛ øÑhƒ¦ÙªÏaÏgæxðwެ•Qkž¡îǼF·¯¾ÎœïëÚׇò¾Dx²¯¨ù;!ÁÞ¸¿„_+dWà;…ò!­¯3ä~d{é1@-7jœŒÑç¡ä® (h®€/lM=˜$ž,?;ê„Xº4½âÂó³GÁ]=<IvžHñ0¨L ­óЧRßjÏ%¼ê9ç]ß”QGò>ðNp$"ÐG½Ò7´ƒð,Ja'«´y£¨²Cœƒ`of›vàlÓÃËVE81†W죟œd¬ÃÀ\z†]­ÊHS“4Ô¨dƒ¦Y«ÏcSN„ùÏ|7:åUùS…Cð²—^V¯Ñ{®éºbz•R!P«Q(Ú•Ë>DàŽ²š\‘z.G¦’ ;GÈê軫§d®uâãÒÞAè1˜²þœÏ»óAÊ„úѰq~2,Ú Ñwe{Hÿúk`Ž^æÊvÞ:§eÛ(o&A=.Õãg‘vž-$5øŸ|RZ{Æºî»øP]<|êHÀްœ¼u”ç=v¹,vÀ#È'¤NÔƒ(9ÍËåÝ}!mG0z’Í·Pÿʰwôå~b÷Ÿdò­‡‘å Þ¿@Èo5š š?wj·©¿ÿïfvžºB4MæCVÂãהĕô|™«ç<_z}­”lÐ40'4à¹]SÛæ{mH_>ê¬÷Z¾2=äá¿”óE÷6ÜWÝV¸‘‡ï2Ý*‚tÎS‡ô8t}QV&m8 Ȳ÷@<ÀI†û›MMÇ#áÛQ0Gª*]ÔÙ¬¾å3óãñ]€¢ÈG_¢¡Ü}Ÿ¦où»Mô¦Â°NØkRÕvÇöH¬MsRžïÌu#ë`ÄÒR!²È¹Ž)å€iεãÝÑ€ug]›Ö:®uµý¨ð2áy·¿)¼;€/öá{„¯'¬ý3ß›Ìc<ŒÍã‚z\³Ë¡»4 œÙõE%í‹í OÞ¸FésGðUg‘ö˜¯*È…'¡9ÌÏÁÁ¹:GCö8:/¯O¤Ôéäû|瑺_äéÔõáãAøÁ¦óžÔ>²ÈÙ{ê<ñ=žn' xuÔ¥lKA¾ÿÜ¢àç TËñÁ}¤ÉKÇï|¸jñ:ž¯”JK\úZ)Û i`Ni€ùîUã9ïµ`§þgGñþûí‘^ü¢sÊÚc½k]G0NT¡•Ü*i­Û@Z)2ÈEP¯ÈŸ2¿šKRæ^.3h @IDATùT¯£¥ÝÈJx®‡mð’Sä‡Á¯þÚ|e ›ålXÜnPøzz’Ø6L&’ü(oâ¼Üʈ#P8 ØônJfª²R õI{üœÛS…C߯:O÷®¿úá å ZÙãÁ:¾ŸÀ*?àAn*\')ñ‚A=‚sÈä}ªÓµ`Ÿùšìü³\Þý§ªú£eÿÑ_È©ÝÜß3È©å)Îe,G€¯{%8ZÉõüêo–ÎG·Sóº{–çO]XOó•*ø™ºp ýHå°zîxþÔ×€ ¾FNC4 Ìv x^CÌ}Ïîa<€=@8\tuš?i¸™á’²î,I»³ØrÀåßnl¸®ª;§\¸AŸu|Ë@K¹ÛwúÑ'6‡ò.0XÕgŒ¶J›ñÚ¯nui^&à·Iå–8`zÐ^*¡óüŸæ­xUWÒK¬Pž=ʶ÷ØÐú‡OË}«AÓÀ¬Òs€ÚÆÔó: K¹ùæõ©× íXÚàžÕ€uK«NûÚq ¬ÿ¾ßô}•½]ø(áe oÞàá+…%ü„ð™Â„î‹þIû9ËvÓã3íÛPy—œ/œül_4OFSÎË€ îIÁU€¥‹¥+Oõ[ÁºYGpŒ»¾ÐEx•'àÀ_Õð*y{x –ë<’"7”—/ÂÞm²ÎÜw´[êsœ-òâ¡<2™ßñŠbÈ÷ùö\ÂA ,SD!5ð*ð3D¡#€T¢¬ot͵0õb3u‡iÐ40+5À6rÌuÏw(vȶè¥ÏÁUÏ}`Z¼„e¡õMÀ¥k »¨_?U@”±È²Úm¥zà[Ân//’%HÂÒ>=µ9USÈu¢ïHÓžûÏKuJ>×÷NÄà3–'e¹.¿d ŸW}Ù­Åî¿øÕV¾Ó×~õÁC¼º¬´¾ûo2Ý.U)æL)•Ç1xWý|I“ƒÄâuëÛ×Á׃€[̹{ïèq@m¡ŒÝóÇ”Àß%Â!8æ’ãÒžkd˜cΠ¦É Ôõà \ ¹¸Nìéd§yÊò_–ÖQ¼@ÉD° Ÿ0vü©¾åÈ×BÚâºe9ÚåÚgˆ$eâoÖ|˜ ü1_¦.¸w.æg©F÷'nQeòn\{µïF¨¹ß!IZ¥ p™!À~Ÿ"äþå¹ãkÁõȃ šæŠ˜Û5zÎC}ÿ²=ºtÔI/]z`:ù”\d77:\WL€Z'p®mÅwyç>K&‚|ÈÔrâGàÏ|òj·«§4y–wç>Ó¯ ú°¢¾ç¡xÑ–Ò–g\ÌQ÷7Šv^–ÆMT¢â à©Ø³¡$~ýW;·ñžEyýܬ%º¥,Óƒ¤ÉÇ-Íå#Ž|‚i££ƒ1R}Ìà(jÐ40£5PÏ]æ¹ó¶=æ±pêÙÎoöX²0]yåiâi š°‹&•&h#¨…,2ùö¹>AɃÑõAøE†öT>XOmY¹è*ÑÜÕòÔò)s S<°ņdV‘t)z¥ äØÝ-æ‚hž¤Ð(D8?ªÞhàF—ÕÀU5ϵ¢YêøéO‚zÎSVžN€øx+ —:ˆAI@#]xþ(TÙàSqÁ‡Öý©è_moÒÃQȉ"»ÕõàWÈë¿®ËX* ëÓ‰ÓWþéÚlòþÑ›xï£âõÂÿr²FªzÑE“Ê7h˜Íðr€ØÛæºmþEÂ!¸âòÓ>{ëþ¤õ——ž‚ye fέ?lÝÐiCt¶´0•Íå]»Ñ¥pÜfiOAž¼‹žà‘rà/ä=Ž(ð®Ã*øH ºñÃÅ6uç¥ï2´!¡YÚp¾ØžØý'߀ó÷ë¿<b6M©rå³µ‘K8x=×¾#ä$Ð;6ˆë¡ù´ržóJîT oÀã2õ<‚rÁ=Fþ„Åú‹KÜOß¼ ³ ÐÆÉL––¨*< X:”kðº‡Ò"ŸïV;q]”W£ïºë%VäÕAAär>a ;^ô; 5o–QLí ‰ŠÁ> ƨ ó¿ÌÒÌŸª¯X7î¨V.,Yº’ñr¥?$†•b/ü!µ|Ï2õ\ 5«`½NƒßM3]ÌÝ™çØSlOðÎ}ƒæ¢EKÓ 'ÿ\ç*{!„û¬Tç±ãØïʬ¨É<¨ù¸¿Ô7À‡G]Cí"ÓGwšiçP¬{ÑžÚ¶Ë`C!eœôìª,¡<î85rȹL8æT{>É=õ9âCåŸCåCÀ‡7mkl{ 1´ŠÒ8¼Ü‰ šf‘ò‚È®ç6œºl{§Äº  dùšŽJo¯­V6^Öå8 Êk´ÝâÞŸ<`™œK‰W„ÿ¨ <Þâ9O8~›‘ {€Ïÿs?/ú!Þ„Ì ì#ýCǾÚnB¦ÜÀXÍ7uÙ¬§Õ-vÖž Õ“Ëʤãü@Ò#ž°â ´~ÏeÙCX(Q<îÔ´h í¼½._„òÝ]Í‘(ë xê8H;WBŸªJ`9Á?¼~þD)3ÀïPüøÁ#ÀWÉyH®GgöZº2%H—ñ’ŒSc¸­ØûZ©ë?ÕÍ@×_¢w#ׅŵᄢiQ ô–3íØ40 4Àü5ôÓ¶?ðm‡wŽ>ã²c”Î )‡7´TJ°¤n8–ŒŸ. Tß /%Úã¹-çs@OYËÅ@gË"VŸ¹l†ÇÕre!ý“ΘÛE¾ôßÙA„•)8QvF^»¶xõWO?â0Ô‡¼,êÀg4§&ÃûÔ$as¥lOûì“ÒÍ7‹9Ø­ï¢löʵ@!µRö^ŸYMIƒ¾—yþ,ïôQ#½ïeÇêuZ®Ç„NXÁb¥ƹхâ:8·`r´¾9-ì[ä»üúÔ‹|é=|r«uÀ/Ú›@w :Bæ×ËÎBµ;©D³%j‰ì&µ’wþ)­ùãaà*¹M»ÿbþ0wòüɯÿ2§t™¹Ò\yÀÊ€²q5q‡û%Ì%抑V¸<·Œvh˜e¨ç¯ÓPÐöÇ÷2léƒGß}Ž~lZ²󤵟—}·0ªVýªŠØp»Ú,EÀçÜð‘€`9ê¹/(ü:,yú¶ËM¾R‡û‹y]PPrµ¬ù]ç4΄AtˆqéàûoËäÝ ‚úPdr›—m›§š“Ë—&¿÷zå‡àBq~Kˆýñ= {CC¾‡•ˆÓ i`ök –Pï4°=ðm‹zÅCYdkD`T»Cc»ÀÖX¤ÚþôÓYbðèúØ/_#$H»>6ŽûÀ÷zƒðl!†œ$dLðìÀW ¯ ü¤ÇÐ~}Ò&yÒ¦JŒ‰2ƒÇJ¾æ»|ÖQn0³êIÄ9p1á1ÁHC9?Ó³”‚'u¤<€òµU¥ÞU×íTUÒáÍHÐO¢Üñ ÜÍ/ª¤ ¼çÝ£ùž6什ÉbPv¡Ô¼ðR$GêÒe–‰À`9 ¸¯ø±•…ŒÖ@÷ãÔ׃¸äõ_Q–‚€WôÃóÂÁ”Ì#öÐOûü(ØýÃÙb°¥¥p2\šàº0*(àEç3ÊÜvl˜=`îÚÞØögî×8òáé~÷Ý/s ße«µØ­-‘Iü~Ö3ˤpŠ`&"[Ø ›(6(éÈ÷æ ëv"`$N”Ó7ZªQ% Œ¡JS/v r/íF¥yäFÀO¾’ïúïÆCBP¹@N¤¤)ïèÄ{ˆÂ|ü¾ZÎä¦o›cûS:µ2ƒÂ£‡{ èŸùbd¬FÏòç wÀ¢e‹Òú‡.Í—€_ÑçBÍi±ƒ±ƒ.'•é²²Þa²*wÐ.ª”6¬©¼›/•\îý‘  Šý}T¾døC.`"úñë¾ÈDð/{ÑsÈuÝÇ8ëyWΣÈuâHQ)î(ȸptð|•ðd΄ëkSîŽâf ¬ÏsY£M³AžßPl©ít_¡¾|aŽ<úÉD£Ä»öpWkèÌ kÏkUI/OdI»ˆtÝFÍG–|ç>«/î/ñ9¹*Ròp™Ë8p“ë<㉼îQ¦[VÔSEêÒ?2PåõkÀñ# …¯ýª­øõß® ”FD±yq ¶Ò{>r\p…úäö_…œ¯×[à Nw½º Ñ¦Yªæ4sðü6ÍÜÁ£ËLëzƒ’-·#°1¥-§û;åkè>G]x õ‘7åAâ:០ÙÝÇ®@‚«…Ó^ÆËÿGøA!Ï_2>‘>Aó |À297\nþ¬¢ÜØg#x"yò@™\·õ1@¶Tî%d€¶;Pßà¹FœÈAÒ;¬Súf\䡞G\x¢Á#çÏÚG–&w×àu}âõÙh­jR‚?Ÿœ¯ÇTø­ÈºŠÕa@Wœ“eç wîÑ^ûT/ï,yUŽPŸ¾G‚‰Ò.¾àŠlŒ3æ™Ó¸ùÞ?ïô÷ÿ±ûïváÍ ò­€9ðÌüÑ.Òþ0­¹âPùSSöÙ¼FØ?çì8Z%Ÿ2o¸õÜñµ;Z„¢ á–(iÐ4035Àœ-+<è¼í”¹ž!d- Àâ%û§CןÁ³º >7g½©Eïö£<ÒXåÞJqÇ=öÔà<Ê"éÜär_ˆ¼äbÇŸÂ=f½ êà_ðU§.wG|cN´,}x\ý4c§ 0͹Ypä¦2›Á‡ÉBš›¥)i;/'*=ǰ_:xw==$‹ _ñ$¸ŒÞùG­.MÍÂSn<°(o ðk»Ô¥}ó-G;xðù( jìÒ+yÒ”;˜‡Lx$âS‡4àÝ®‹¼§bô§ŒóÝî?y:[…£vÿI–Ìî?Sï4þj=–®Öé}« ƒ¡àLŽ~Rèë@•ú:±¸ a0Ú¡i`kÀó–!zNÃ#Í|÷œ'ŒZ/‚'^›ä&1Yù{ÜXåµÈ.`ãUb{âƒOàÍí”ÛóK>§ 2ÈÓ¿ ØíÈ~G)%È7¼1®©W‰Ég|Û¿îá)Dã€ù;É‹-È£Ô±nI”ò#]ç©è¼’'ɪ¨u¾û] Ÿ üK!väš0`_xtÚ@é îÛý3.ÒŒ³FwäÏž¬}Âaún=® QÂ…ñÃYE“Êi`|ãdâÕߨÑçÞ$Ÿ¡04/¨×/î¦O‘¶úy͈ÛjUA= ú)yïÌÁ?æI ` DÓ{ì?¿þ«ðžÊn`i`Ñ·=‰éð£0W€o„]˱ñ–—Kþ‰‚! „OŠ=||Ü3¬[V¶AÓÀŒÖ@þ’÷Üæ&däy=‚Ãîóx}X³ Í—”ÝÑ¡… ƯôN\d`H&³GÝWØŸlŠÂåÆ^¹Œ€ÝÔ;ÊU§Þ1h™ø IeüÈÀ˜Æ¥ »ùáØXÑØ(¯y¯È°S>¾ ªJq/UÑø°ƒãžÕg#€Ø{>øQ…}-|T§Èi “‚M» ŠeÙÏüž?elŠmKm_xv°C~Ž7EŽ´e”Œ8 yÁHëÛ#ïëuÚýSN[øE!“W„ϲ»og¿"ÌXjT6Àº"CùŒ‡rëñãì°ž$”Õ7F§íÀpŽ£†à¬ƒÒ]\\+<‡:hi?8“´¯»†@ÒSu”<<‚q5¸=‚u†ZÆÞ‹=•ðpŠ×‚|ä#o9£} ÊßÿGÛÞXÿâ4tà¼ã)ªö|>¤{àÓ"“ôRÚˆ 5 ºþ¥Ð×ÁN y ziÍTÉM³Bž¿ÌiÛSì<ˆý?‡®Y–Ö­ÛSò™õƒG0ÐBäýê/¢ôÏX¥z!j-Œ¶Œ–u?ÄZ¨LìqZ—ΜîÈd^aã…kcûeôµíQÖZ$Ù i ià.4À‚ô2¼ Ñ]¶Øæ°¯ë­ö}œ.–5ªpÿ08-‹Úi;fè÷GÞ<ú¬Ó8‰Ÿ^'<@È+ÂàjátûJü¾ðƒÂ÷ ïêaÆRë@ÙÈ›Gž±Örðfø¢Ì¸Mc@žP&‘)i¥‘m£Cp抃u÷ghB0ä}è:Æ¥Ô!näY,3KšòQPšì¦‹eð: £Òá¥^ìü+c¥¡ÅÁè~õ·ü Œ¹tÊî¿@=<Åwÿág´ŒYÁÞñW§»Ý:W—Ÿ %ô§·GÍþ3¿jÇÅ΋¯FƒkmÐ40[4ÀüõÊö˜mwL=Ç™ó£?€8“o%`/Ôò…ºÉô£21ÅÀX¤d7j#^®šòÚ°i’h§þòE»Å¾0¶È‹Æs"=•ϯø§zþî¶xU>mÁ‡bc@jâG?4ˆ²ÃÑÃÉvV"‚rŠ+N¡Ì2'êc†1@tŽý1cPÉõÀÞÐRÝ¥Š~ªà³¨©Çâùc:vþìs‚b‚ú*æÝwJé Ø ˜ƒkNë´}ý'ðyF!:v ØTʪÉ»ºúfš9à·¹—c *€ú•áØõ'I/^óÕÜàGLØù—ǩ݀š7¼ö»IüøáÉðêo7)<@«»”bÀëøÕHṞÙ#÷5E!÷//DÏ!®sÈׯ÷/;½´>ªg±4 Ì( 0WëÕ@šymê9ÝO¸Z8+93‚c`h…àŽÜA¼DÃʘ&Ë » ·ªb÷ž„©;Ò}V_æC©ŽKì~®çÀÝ€Á>Õ‹   E= ÎÕ;cçŸ 63aÞý'“v0Óøñå't+Š]ÜùQEk¥u}¸íVõ>jlÐ? mÐ èkÃÈHc‡yhƒ¦™¬æ)5ã>¸mSšwº­“í+Ûz²Î,m;ã<žÑ>¿ˆvœV2†Mó5À†ê~áY¦Ï§ŽËxEøÝÂw ±™Ï.N¸Ç=» ; ù®À i›ñû¼è“´©’ä=ž:͸k~–ž!ÇìíÏŒÁ ¨Q0Š ┓‡’çœpÜ¡àb¡"}ƒ@…í·ŽJÙSà2ñ$ùðfHWÞ MP±2åÚâYø]†(÷5¨Pɳ€Ò¿ÐüQeúQ;áÁêñÀs0. ŒÀŸÆ;©N½’gWàf=|w?üÁΉ ,§Äé“ôé‘€(Ô6?½A=Öˆïkåd 6\/®›G dƒ¦­f?h›SSæ8yÏ}lÑ1Â!8óL¾–"ۗɼèWqËºŠæI³*j(³¼8%Õ•wCÚ;§º`¥ÌçA¤@tÈ+Jäy•”-ÕÂÏ,]€2fäø36|v4è£=d•†­>rÿìt¤Cúá!íÞš,[#Â\É* ìøSóaîć:Ìñ#÷¥¨É”Žb€ï\lŽóõM‚; HŸÌcþÇ©‚ýÎ<@'ǵœÐd˿ØqBÃ:tóÉþ)æ|ŸÛÕ먙ÞÅu΃'ðÇu]ⳓ¾3?Ë;à—€yþÀ‹¿ç‘;ð·Qó‡Àßa ±ûyã€ì"ïþ+÷2ß]L™š`8/ð(!?­¢&{ §ò´VøÂz}“¦ujsýê9¤lð¡ šf²<m‡<Ç}ß"ïôH+»×ÞG¥…‹¸‡i÷ÖX1QfËèpaÉ;› §Žµ8ö¿ò®ç2ï‡octàÐ@ÚG÷Ñýð‡dòúoÈqßò0œìçßV¸>¿|£E">ûš71/m]¢O!nû+wWSü†úÚ@Aßøvt`ªd³?(¡ÁŒÖ«9 í£íQŸ–4ò¼Ü–ëôÛtžrß»ÍÙ`c†¬sô8o ûctÞ:†ï´)2€¬iÜ_àîƒtÝ>|ç¡ý¾È».m}YÈkÂož-$xw_ÆßYøI!»¡<Ôøœ<ú$M†.3ÍÜ|µŒù÷åo€/(}×i¥Ï•碃¾)ÚYƒòð½Zè ¢d†•K§}ô U¼*ëW¹k»'SßÙ]V_Ò¸™Á ¾¶ôÑ5Pz4)|LJ»Ôëñí©8°g9×s fI;ïÀ_Èk¾FTHð/ÎÃcS]ÿòožù—Ùì]~ÝοþÒô5wG}ê¹-¾þÕ„\ ;.¤®<À )çÚ±i`æj€dÛc{c›åÓ{#凇àŒÓÙ¹ž,˼D|QuíÜá'‘²Î¦|Ô«! øUήÄÑ‘–£×kÙ­•û7_cŠ@#¯#H‰% 0^ÿØøâÅøá3~ƒ©¼ l&Ê+À“åÕ߉øñl–B +PCgßTA˜e•­:D¿6¤Ïqn¾yª¬¤¸Øþ¯ ±1ÆîÌÅ«{c°.Sò§ ô27úóöÑó‡ô*á,?m_y$\À™¨‡©ùSdº3Ì p|W`¾~òp´3…|þLµ“_ñíæŸú ¨Gý©W|5_ ŸzôA{ŒÕ;y…7ò±CÏŠ€Úõ§þ7*…|þ#<¬þ|ÿºWÈ«¯8µ˜ åä >OS_}¦kh÷Háç…ðV¬…HÑóÅ­»eÏ!ñÀ|R¶AÓÀŒÕóY#¶‡<ÔöºF8ûxFÍX4KP´Þí7_­á²R>@–W‡ÝV¹muUáã›O»îàÛ5F¸ ú©=Ò®gû…G›5vøƒ»ýJ;16[Ém”`÷±>ïþ‹ïÌe‡÷רù'¡.¿Urê4Êô#I»—&Gרyléî_¶7©D:ÛDºAÓÀLÕË ¿§FÛ¡š×O;Ÿ¾m±.X+ý2ò”5¯®O äÍC·Î›ç|_¯¶M¾ÈYÿðð©ú×J¬¸>nÓ¾ÓÐܾÛr¿%¡O ù”ê"!ÁÀUÂé÷>ꀼ"ÌŽÀ÷ ¿"dìž_ôÇy‘÷X @ß^gîÔÑrSœ˜âF¿³ ¾h£Ò¾¸õx¶'‡Â¹àÜ MI÷qxCpø2íµ—Ð]]¦š†FxU#cÞü¢Â𠆺)õÄ¯Ë Êy=Ñn÷˜‚Wú0O…~ÃcQßÁWýÈãÅ”v#ØGž ä Rp‹ž¶Š:øç)j1h}ªœ¾d*V7|˜«¤‚§ëaX#Öw„\ ÔÍ@AÎ(´Y•)Ù i`Æj€ùjûƒíéÛó0Ë…üÈ,\0‘Ö¦y¬-Zì`*3KFÞùWd¦$x6 sXˆZf^eE¾+.¿©|Y¸GÐ&@€ ²¹lðÇ>ÄŽ2äK{–/¿îG@ä“Z~³qá»ÿb矺À´ñPÖíT³äƒ¯2ó¡kV ÒÍ¡Âo ´ZÞ µâ±M¾+ùSú™'ôˬçP=ëJá,=j¯ò]xR¢¶‚òê/»îhxðAÄ=w„ Ûó“´[»”ÇÅÌ (BèÁëz¸¥^äÍW>~¥>¯üº¾€¤ üñÃÔN÷«¿øScå<ò( ²ƒT÷2:äÊr%A®¸ÓPêuu•fü>ÑC•\£œ@·ìVh±òȸꬥ›f¢˜«¶3Plˆ½]oµp–îydìˆcéñâ »ãÂ^вWJ©U¬ÆPfÔæ¨^D4˜gW8ss7æE °¸?8`XËù>BûÈ:HòFÎ  0jÓ?ø±‘´áÃð e¤ä¥ ßç&c' Ì\ŽszrÑ¡J„•âb°/ 6†F \#Ás¹ù6 ÌD 0_ûþ³í)å}w.}9Úð:©)iÈ 1§Ûqûðõ‚ö]£ÿqú´þ}M°c¤±UÔº>²ðL•ìÚµLÍ#m Mƒ¯1msÿú‘ðýB‚wG "gòx5šïóõ˜Íß)åì à$AƒÓ5¿N×r–…g&ÈEçŒÜ,¹1B^¥ô¾t‰xÒ9Á3 ^ý%­.H›OY}iÂSa…Ù•Ñ–‚mì&ìÑ É©ÌžHRO‡ÏÒeðäCö(ë^Š’ ¼CT¯þ†YPs4ïS5+†eaZ‘÷9¯’…¿þsQÜ?`¸GpM°?Ø!®“ÁvÛ(—ý4)§Ñ¿1.æQ=à@`b¾^û=4ßkšÍ È f²Èó¼È:/ -bW ç#¤lì2#»€ "Íõ'¸Ç|³¼e æy “à_~å7Ï‚ñú¯v²ó/@Çs.¨ƒÕ½,K9õ¸‰r•AT…¿R8%#ŵð¢Ek†ëH¹Ë”lÐ40£5ÀÜ™»Ó¹‡±†`é²ÃÃu¥Àîn4¬ƒm³WÉP¾´†<­Sî-.xð]³ƒ®³x±´‹ù³ëŒ¨Ýw{@¸Ìj—þH;°ç•ìüÙý¦‚wÿuÁ?ê³ÚôïsÛ êƒ6vÿåïü›â± 0ïü+åÈ,\Ñ?mV€eBœ!Ô6¦ô§Ã)q9S°§1q4 Ì, xÎöŸßÉm—œ‡Žʼ&‰eYñúk‚þkyê4Öz uÚ<ôû%ï´’õȸÈû:™º¼O‘5RFÚý®¡¾Ön×<è ·[x†ð"á BÚ›.ðÕ à/ ?!$¸ø)!vÌÜ¢=úsc…×Çú(ÛiÀ"ûi'ç4µ²ûeäûe®ãqR2Ù@nŒ¦~€‚òÎ7íÁáz¸óêBýÄ >aÜÜ ¨µš•Ä(×ÑžQÉNæ*¹øÞ? „×QíÍtTs ¯†j Ä©(éà«À?ÿ"¯(v:øçn½û/·’ƒ{êzê“Ì\ÃgHÂYJ%ÚR~åøYt$xpb°,/Zñ‚P2ø´¯AÓÀLÖó´ý±£e®;øG´J8‡Î ˜ÐRˆqïÐrõ]€ÁÏ Ïæ$„»µh¨ãäº/ì‰ØQlFÍ¿îëj äE2rò²…A€Æ[ìN¼ºYÒ Íäû mÎCØíüƒ§Ñůµ*€?þÁ®-pjÔì0öÃX|µ©,Ô;80ƒ.'퀤W¢¦F%\ÛìK>ÅAyÊèβ?õ=¬ž?Œ•9SÏ£ÕÊÁnk§- ¶EðlªP§ÿ:”Ë<•(§í¤¥Ü¯òº Ï/~È£~8%Uê¹yÿðÓ#‚{J8È—s@0v÷©"” !WŸ×}ó}ä9G¼Ã? è¤"O0  ‚~@œ:çÊq5†•Œ«*\Þøù³R¥\ ZpJ¸•¼psyݪåm˜i`žÚÕöÇ>3sÞ6Þÿgï̓~I¯ú¾ß;3šÑ2B`6"hA 0oØÆ¦lcìØ8^âªTªRq‡*§R)§b’`§’J;ö?q¼ 2Pfßl 6‹4-ˆUÐ2ÒH3šÑhÍrgyo¾ŸÓϧßóë_ÿîŒÆóÞyï¨Ï½ç=ç9çiƒUÿh„þ–s¨GdÂø‹ßª³[Ú­ã_hÙå§á88ý|ZŸL Êÿ`ÐFKª[àÁ^K’l=páz€yê=¼þ‡ëiyèòúšô1@缇ºF”™6?õ/eê6ºßô•ïØÉK=Ÿô4ùLËC¯Œy:ô4õ†¦§ÔôW{Ç_s ¾.øÚ`¾¦W ùºÐç+pnäñ`G„ÙøýAÞCÈi¤-Ô/EÆüS'QvWXhç  È›vI»¸LmÖ(6ØCx.V–/ÊV·y~ïÿ#@ö´˜yeÀî=î:¹ Ú;cg<[v¯læ;§\QøóålÔzæ3XGþâG%Õ¦äSOZ=”ö@9 ®j’~¤º üEOðO¨Çsó}ÓnL5j¥ P‚€"³¶øÐy`Ó£ûÔÑä˜,¾g\ò¬cÕ¤Ó¥Vr¥‘E«šaƒnƒ­.j0oA/VôCødÌw4ÈÉå^˜€SŒéþC72?ò;ÖÖÉüµ!%N‹e%Xúø²±šæw¸UÓ§*§"X‚‚;¹ß #Ц¥G€†pú©Ýá+ЇOBN[á/¥4vj=@ ;¶(ÿ´jáÞÉ€ž4J›;I‘ î“ ŸÍÏ ëÀ càU–¤íD(㇞ó~èjuRè`è¬89ò¿ ÒÖ8£¬óž–Ÿvþigà/é²çÑ_üÏ¥$ ÖDXò<þKÔ/€q7†¾†–Ì»ÿÒ$\Hp²åÁ›Wâ©âÿ@þþëâžb®Î éQgS—N}—ž;ú¨î.:q¦K‰<†7ÔüC:åôQáD{&g8îhF:Ùk§ß¨ÒTDà˜z̊貓T9þÎÁ¿È?ŒåP&g{Â|Jð¯ä©¬_6aB“¿5øõÁ« 7Ÿ¤ïÝI·¬y>k¦ÎÛõ'–]–$WûÌ£eõ…á>î“xþk€|u52 Rn9ó•Jn²Ñq5£Žt½ã/:.2|äׯþ.?úaå©jþQ=òQ=^`]Æ„¢«€t›ü WÆbƒ­¶XöÀÍ7³ày4ˆ5ë˧5‡-Úé=~û¾Ã€Œ7H˜gòʉ¤äS€°Øñg’O5Lf¢˜nD|Ô7»ªë>£S=}Çí§6(ïp¶#pCاêªòܰ™!NÄfr ÄÏÄÑ€¸4‚¸;}±í™lñKfGw{T>ÙàÙ×Õ˜¹ ðé'7¦§Óy¯ýá¾ÑcΓ¹‡½â¹g—åX^“»³ãaš/ ;?«M¥›Ô_Âd€Ò~`/øÍÙοIO¸°ýwþU¶é'$NT <´ƒ†öwø«uÔÛ³ñ[\Ã=pý Ï®¾¸|NÖKŒ/÷` îÂåw쫜(õ³[dìvê–iËïÁ/ùE‡-rvúQû‘޾vûÅ·¸ó<×ÎÓWc8P/òÀçÀàäœ.ó*vý±;0tÞ xÂC2l=°õÀÖ×llWRûCÇÎ 6¶ þpð{ƒìÆÐÞ¹g=Ï"Ú>áôj ˜Cãå þñhsÕáæëÓvÊÑÅð ¸õ–ÔÕ4;Ô«²ñPP‡WçŒi¯<¼"X©A<ò? ̧ÞöÍ4mWW¿\XÐÎâ£#øÔοðd×@™vuI²h—2}`ýȇÈawšä3m°õÀÖ¹ž}sQ‚dgºi{ÔW÷¡{™âYu‡ùX¤À±Å‰Þ@vøX—ùÄ++Zþ,²júz`òÕ;#/ü*þ'Xf×VnFð2R=_ý%ØW?(Î'ù)¢²M•ÕÍîpÆakúFÞœ÷I§ÏÊ>¸<ãÐçy4úlêÅIS]3O‡‰!XwãüXpYìý™Í§NÉ™™Á=$Ôoš÷û îîã~ìø 4ziÌŸû3xäÅücþLéšGµ“ÔÇ~)%íáÒ‰“˜ˆØã‡ÖÉlAµµ‰Øåiü ¶Øzà±÷Àu×ß<ú’ÅsKI/1Ë\C1ëGUÚ„«G‚öóz6ck¢A>D”Ãù@3x@J€0tÉSµrû%èçãÀU@þøÕß)ø‡C!çÔðiç2ÃG¾ÂN ÀOòÂŽa2ò^—w’o°õÀÖ[l=ðTì¼ãa÷ßüÕÐï þó W±ÓÉ#LÀSØ”:ç¿çgµj½¼IðÞç¹Ïù׋¸vÍå 5uƒ›¾§û‹·¹¤‡MH]ip§ÊO@ W7(Aæ7]Öûò à ;ê4 ‡©>e3MÝê ö™¾ä¹q"èWWDð¹iâ±_úȰ¬'3ª^ Í¸ª—4ó½V·¿„Ñ[l=ð˜{àψ߯àÛ×rs0ÖдëÆ¬Ëi­N;¶ÎvžUÀ ÅÓ&Wnz—È£ ï¬Fw~ùgÕyVXòM7(SýìàÂ/¹#Ðò'›)oêIžËùSý<òKý lVûSFnøÚ/?@œFŽõaðã'§A½ ÆÕõ4y «„éynü$Üøð3.çAØÌú„® #ŠLÌH–¤£ß jåtáQ\>ú!œÙÍOÅŒ4ا½õÒŽÒúØ P>¢zìwÌ«˜÷ÉÀc¿üKjþùx|’yì·ý€E%ÿÆé°Ž¾Ÿ¨H«ë9 ¶ ëiÜ8Ô¡ÝÈÖ[é“ë°Êš!`ÆÒ!xGÐLb¶eZÿÏRëË2:˜î6]oÝðØyÉLº÷zÚ€ ú ò%cñã‚H;¡ìþ©À~pí;}ñ7F4”]~§m7¿ÙñÐ20†ØE^_ŽýüÈ0òìàÞ`ë­¶Øzà)Ý¿–£ãC!?6ŽÒ÷ÿq’êŒ2±çÿ÷ìŠÿ|êâ`xƒ~R¶„üTðÏjtµèÇÌMÅË“.gýq®®vôÖÛ0‡IJ‚s|L¤@…™Gz9WFõ*_ä=-/?ö1‚xÈ+˜Ìÿ ÅSǬà_lN£m8” ™þaq T?øÕå ÍXÍmîå5ÑÆn=°õÀzàÞû–±pÀ`&¢4a˜bMk|F½¡š%GL—vÓ£Ç9Û¨;±¦ìܨ'¾°îèÂ#O椾ŠOšüÒôÈ/_`ŽÎó–çÊ:•g—åüÃÎàŸ:ƒ\/O?’Á¤ÐÚÝGá㽩˜câ¼8=ޛµ‰ýôA³öÙÓŽyjÞ`ë­¶Øzà)Ô|!˜w‘ø{sH ¨SÆÄîÕ ÕOÎ;H‹9·zÞ–—²ðo?üÓA¾ÚxUàžú¹0Íð ¹¶°jÏxÔ×§›ÚƒŸ5{ ÷ò¡PÀ˜^ ¨;W*šqŲ÷ætã4÷ ÎÁiçM•Á1PN=î;Ú<ÿ¢pç_L¸€ uÿÊL´ÕäúÕ€Í&Oîçi!åÜ{voÉ[l=ðh=pï½AÚú¯ ù¡=ÖyVF™0êÁÎÀ2Iyù l‡Ãh[`Ï;Û4ÀW… Tüð+¨q§ïü£AøŸájçV‚6Õž¶ó¯ÊÈïq:û¼¬@^Ò>\ÙÆáä›)vqV¤1f»û à|’Áéǧd跥ܜ>=÷ún½éfõ¬¯æ;ãçôàYƌ⃻ç(£wídï¨Sþ´Ãodógú q!iƒ} eNtšK<òKÎû2Ï `Â(túØG5Æù¬‚Fw)'qç9q‰Ê#ª‰‘¹2ë°1^ðØŒU+ßèÖ[\±yäžz4¶–ë(9†;8È;›4·­ne™o¶—ù,ØÌ×Óö°•_ÒKãÔV÷âýH|üƒ ¾Äà×½õØ/µËG|cô‡´Ëìì‹ã9 þC9”:^Ë€§ú9 ß`ë­¶¸æzgÇ…_¾7 u ï]2þ¬É—²ž~4~MÿXes£Âû¬.x<'‚[ƒ?|U«Ld´‡ÀØÏnÈëÑäaÏÎ+h§wê®?d i‚ßü_†œ6ÙAšÇ÷brÇ e È¡@Þª þ§Á¯ îÁÇÌMF}$ñh&ÝOூlCV„?cl†˜\û0^‘Ìv33Ìǘ÷`Ó˜ìCnÀo¦c]ìú‹->ùüÚæ»ó ÝCÁ RßH3;¹þAÎÅNAô‹F(­üI_aàk¢æ+ŠL~(ÈAà,¦«¥‰÷ºÁÖ±X- >HÔÿ@ñ;ú ýï8ýÚàÜóñÓÜ$<0ßíj']L(]4S– Åe¿mž‰Sæ$÷†Ä¬Ê:ÿéöNåÍçëÊàM‹4Ç£œ“êÉ2Æž åxdór½ëïþè)7;ÿøØÒvþèCà <Òõ03hЯôäI&ò ³>eÜË>òu¸=âoê{ øQÿ#å pç žÓ˜?œ·  .ØÏaÌ^ Źë? îÃÇÎA\JðlÀ˜L#ú~$‹ÇbÚ©yÖ‡êÍ>ODNœÑéö=êÚí·8Ï]óƒlýñ`w>0ôµë/eÔ®¿ìG95Ô#ã´ŠÓç2†*ÀDϤ1FË£q¦ÑËÛøˆæ|=ÿñùó‘äø;Aâܲ0–sˆÚh!h/†Ý`ë Õ¬|~Ú¯£»ÿñšodÿƒàœ>üñ ’Ý”Ü4ëk,–º½LIà÷ùj0 D¾lF~d(ì[\È`Ö/¯ƒðCýš¨§åÿÅ‘£ùÏ#wþE¶·&Ô¹N¶5r¤#b½ÓB¼š\³í2y)…ÀwdNÂcÓ)óD™ç1õÌx]×/uæ‘>/ö¿7øÁÇ øêŸ þDðƒAüsÎužeÞÑÒPÒÔ ÀsL›s:ä‰bY.r‘ƒ t.ttÈA@[¨6RnœàEo¦LsÒ<€w_ŠxÞ·Òäù #ºŠü.M&‚vócÀÕ zÀ­>*Y Îõ`>5ûYÎñŒ‹ˆücZ¥Èq92ó*cÎ;V©jÈÕE4Aò³ð®üŒÒ÷Ž”ÖŒ•QïMäŒ/tƒ­.b0_õEú-ý7OÝ÷È»8û(;¡ˆ!Œ%àJ`á|ÌÈ@ÞØ›Ô#ESM`ä›ß8I#Ÿ“dì0<»Á¢âdÁ¢Ì³Ã¯¬è†ó»þ Ž€“a–yÕC@”2ýÚ羽Úsà/~ƒ_uA²Ô“–ñøƒ»4_Ñ”Uy£¿BÐÒÅ1Fú J¶×áõ=ÐóÊwî@ñ‹Î•N‘£_÷®å0:ãóá¤>-ñç{÷vÒùÓ!ºÐy‚˜@Ý—Çü‰%ð`¹7Vr Ü öTôM9NrWšù3z’ià®?¾ì«büö}8õåR¥™?”æ=.<17N@”Ž vð^Ò£¦ ÓP¨2CI3̧-ù°ùxp8Ï_t%—ç)Æ“’+äÖvƒ­.T0W»ÒÿH—>ˆÆ3§÷ü"?^]Êuêɼc³c¸–§!±Èñï> ¬öòfùP >zÖçŽ>6-%àÇc¾d,šò õÞ¿ˆÏ>øáQø„Uõx¼·‚{áë+¿ÉW–] u§ ªé¼šÀáiv§G­cLbTL?DQv/M#ÆJßvƒ­.\8WõC^£^ ;ô€ëÀò;íºmLýu^éë%,ežOì;D¶¤íÌÇüÑÞ2 Ì(ò®ûÔ¤ÏÀÏ}<À&¶×_¼-ÈÕ&׎ԃÿ¦n|5iæží¥=݇'9§áÏ\8çQ‘yŒrðèè(mq`,åÚjï@bב“#etühÒpûýŸ‡FÀŒ«…òƒ§Á´nMBýš7Æ‹;R¾\MÇ r‚xË  W"½ŒàS®Œ:æ``”óN?æTÀ6¼œiŽ…Àí=õ†*|šÅ àÁ÷ôZpÏ+ (8"iSú÷Z Ú5à|@IDAT¶ûÀ ÆÂ±•g¤”© ºÁÖ±X]øžcþG¿ƒcpÎÉ8€;îàü5[þá¦,|ÑÙÇ>¦W®9Ÿç9[5%veëÂ|Z^ÓWz#°HW]Yð‹º*Jp²ôÃç­~8‚2nª<Žƒ‚8Ôq¸cç‡w9+ÚG´ÜÑÇ ›7mòµ°ùäØKᩦª¢º0èÞ÷>«ÀsUúœ>6cQ5ëƒV {‚„ΩsÅù²<Ÿ­?v'csæç/¥3æÝ€Í82çî|>öD•:;ïœÅaìVÞ€e¢ç`Æ{XÿÈvgïd>y¡ÕžÌ¡šg£vF¥ND¡Œ’¶äèD‡4vÊá;P´6ïïŠ=ž½ŽÖÎ%Zv jG>ÞÕ¿õÀ…è樾Çù õÚY?¤Ž4뀀{pß½wìN®{IÉ–—¹³áX.Ëcv.íô¹SвܵgºS|ø› ¥y<ÿ@TN :yÌ”'ðp­{öدc8“ øE6‚SŽ”0þ°‹>"Ê|ô÷2rìBk×ü#³÷.»ö‡ Ç‚A} c#PˆÜ`ë‹ÚÌS|КÒÿ,)kà Ó…`#¿¤Û9ÖƒÇåôÙ£Ác±Y+Ã|Rlà™P1ì ê0î¦×¨zæzç7G_d·ß‹‚è>QÀ¿9øºà/¹NçÆ‹:ð¿” ÒÒ8{ePæ¦Ç'u¾’V¯,¢'hìy#ÀÛ òPjÉÓ>ìµÅND']¦Õ„:€Ûùéïn>Ò¿”îÊli¿£ äêeÏN›èöädFþ* ²ÜÃÄ"ºÜ` z€ËÀŸÁËc»þ¨6e3ó˜©4Ý}IœY ¥ùs`/¶È ÏN¿ÒG¨zÊ}ÿl\9úúžqÁJUŽKrN½ ÐTZ Ý`ë‹ØÌOý—>‡y­ïé?z|à¾ÛwO{ætù{¤ @A ñû& Ü{ä× e£õ¬Ÿr}¸ûÚÕ~`ÞùÇJnr÷­G~S@þM? Å˜‚ÙíW΃œðÍ‰Ð€Ú ˜*:*¬|g;O’§‚õ®@òäÿC¿·ql DáXP(cƒ ¤tJ @ua7ØzàBöóÔý>GŸ´F ¶®m¨èÜÖ=s±€¹8FG† HåÍ£ óaÉ#û‚àWwWì<àçb~?äÚ<¿æS÷ËÔMÚí£~æ€Ôö£[ºåÜ^Ú<î4¼ÀA¬®ÞAÃV]ç{žÎ¯•lõ§µÛ9Ë?’Öëóš%>˜±ìâ³;â³r ÆÝ@ð8`‹§ÔÙ_‚wesP`êá†hÈçò“µË)Ø ¥ú‘i-#g—ÀM `Új3Õêe¤çË•‘6ˆ‡à='È´ãðêò¹<†ÍŒîàœÖêÎèjߟ©7në§|¬®;<@Öéîú¦õ;^²PÇRþ%†¿¨dïª!˜í».¼œY?ìåñIUMr`ÞéW©35=®¡;O&ÿsRÀ±I]S1;Þ÷ð£úâsºt7†;þä ð¡‚?ƒ~èt¡ï?¾ƒ‹¾G>S‹¼Vh¡và–ŒÛî»´{É3YŒéA¹á¡ÞmÎj䥘$fGDÐ4ÁÀ ðŒÊ±zÀÊ*ÿ0\îü#X ¼N¹? X^Ž‹ÙEn¨3Í€‡!Ï,ÆÎÀ_ÙŽr* 8tè=ó0¼==ë½Z¬:°hhÜ8¢ð{9¿õÀEéå\¦]WšÏèY,ÖÙÓ ä¦åöwÜ·{ÉOENî%|ù”³7?«ÿ˜Y^ÅÇÇŒ–Írí© ëzr&טì#ÿ)–NwþMþç¤ &/€5ü¼«ÀŽ% DGÑý~ä6èg€Ïö”ùÒ_=PHóµ}/§äup÷%G·DrxÔêº þ<Àº¤ÔÑyëì2n÷€X½-ðâñÖá—J6 >\|ÄC/â)Oûkÿ[œå84°8¿spdøPÛA:ýF cGê<¿æ}ŒöWðoØ2•h˜—Y´ žy4M³32 j‡ÌüÊÐSØuïIzèw»*µé.SÝ`ë‹ØÎ[ÛfúØ*˜ÿQ ¯†ÁÕrÀý —i.éAI[í¼ ?äpyóBEòÂ[Ÿ¥þ¼à¼&÷/yº»Têç)†›¯$æC‰ŒÇvÝhö%5€wpE£aêëüRïõ³>ßñ׿îKÖeào4›YK.¥ÔŒ¥˜þèïCél@lüÂYùFƒ|Ìx›ÝeÞOÑÔ·Z]‡ßˆ˜V9Re¤áz‰›të'·X2ø)æmç׿1óܹΠÔ^0éÝϾár€˜$VáORRt¥Gr¨ Uml¨¼@?1’³|¤g?Rå* ÕÐ}ªæ@ ‚KSsæw"›~€89?@íP»þÒî½~åD&™;þ07ào êÎ>ee9ݬÀbäïɽÓGyï!аß’íØø ïzùˆÏì}¨uÚÒÊä™?Ï;hÑÏÆù~}:Àr 5¶y·màÒ¬?™îæmA“OÙ‡`–OÒ³ùbz*`ø ûy§_¥Û¹uø)ë¿”9½tr:1qr8´qxsp¹'°¥¶—y¡ØÑ°ç…§w×ÁùCεñq^Yz·[/q“n=ðäö€+ê|]›Ç}N³à‘¿nþR.%‘ÁÂkä˜ôüøÅûýò4äkÂé=O_ê­Ç€£y|l¸ÊÍúÖîXÀÏÀ×È€»þê´J/P_ûÍü#x¦Q{;ÿÊ8v-ø7·Û}ÌN-e Lñòo­zVþ\ÉÿÐb}’ã×éJq›hë Ñ,Ë~mÚ9Mš¹Ü)ü1p¿c_kü±ò6ùùõ@ÇÎ;n]F+HÓ¡G@_ü£Á?<¸ßŠì±ïc`·ÈMŽó†«Exꇪ ;óÚ¨ëéÞVò,ÓÈ– ÍRþ„¤¯FІr  ”Žapq¦‘ ´ÍÎCÏ3ÔÈLgé©,l üÝÁƒà­Þo`ƒh7&#YïWÊãÁ©žó]Á &'«3;3臡BËõQߊÜÝ~˜.õí=…z¤í è2¨G1È ¥ãç ^ÚFõszèB¦Ë•èÕUÆÈ9doaÓ:Ð玅ã%dXÍzyŽÀq »ÁÖ®ôWú¬Þ@dÎ÷N™×ï >¯Ãßzën÷_þpÙq©óÍÄM+, Ìg†ô#ú •ÎG<.O¯&0÷´Â)“•š¿qù–ŒÍ‰ó¿Y£$CüOÕO”Ävš#&hG1Ðò'È艀=xe?tË€ 7rûæèîÕ6'põЃÜÝð´Ïœ| 3€›&GÐJõ¦—åÚM¹ÿÔÞä+ÝPÌøŽ6ºókXàìC,c`,çø?‚}õµ^å#0Øñ­ŸäJ>¹‡úêoìÝ)¨mï€9xøàmUòÊü¾~Eªÿ"3­ž#l#‘Ô[\¬`Uâg–~¨/w—´ôJGà:p ôµ±Ô‘ÞÖÈ•zó|uŽg§ð"sdnŒ•¼:dØ“þ´àø¹¡xZñMÁ$(ôúœ7Ì-êçªJZ¾Ï?t¦Í‹¬—IºËÐK:IÏáïyi¼ƒãÐtx¶4r;°MØs!ÂàcC'’Fo¹Pô” e0°ÑÞŽ¿;²¯ îÁ«Ç½l -ÑwìQâ N³|0Ø_Ÿ÷IÎò‘ɧÕö¹à•´ÑñÅÄ _ñýfê,¿¿\r €Ô€ÍBæ…|å‰B/Y7ë©Þdîíí-tØwD¦^92ÊVþ«ðžH±Z›/ʤ–¦ý^¯¬–¾ ·xrz€Õç'iüsÚç4<ˆ—a7Ú§÷à‘{nÝüŽ¿2•Ë^0†å&B÷ÜB+A{ͽ ï72hpùlÞØüCd9³ =-ࣿý:ÕaàGbÿ‘ß©{"¯Ý}Ùå;ýƒÑUà/t: Êš\ƒAÊ­2â¨*°xéŽÔÅýçpSÉË-8Š©3ïHºËÕ+oGË ¶¸X=PË'MrÙÒºiɬStê±]óýÑp[#Ë^»:écã¦\ʹô<ÔyZ«œ›Ÿ¯ þ©àW yÈ'̇·ß|{¹Hùi°Ï+:¾™ü\Ì:¯”‘ÆŽ´y‘Ák oùPÀô”ºJ ¶=ÑÕq0 ^§ÖáÒ tmjÃ¥vØ0(bØ’“¶íÐ9œ8”à ½+hYa'x_†ãõ¹/ùCÙè‡a9¬÷v0PM`ogà$šŽrdœ¯\†®š~)§8¿à[¦#ÿéØ!QG•*aToÒÀ_ì¡ãk½E'R« ”ô¯úV::g7]\(¬ äù•¿)={d+@Ÿ¿;È"]èDš£žÖ#·ÁÖ«X¤ú"\†óÕ9‹^ÄæÿAV ºîº+g ·ïv_ü∢!8¤¸ZW÷„R 0ÚâŽhHçK°…[égö«JîÉr Rž;±àUn¾æ;¥F9qŽ•ÍÃÃn2˜¬ÞÀ¼9é¾ësxe—UÞwþÔ£zxwRm¥)o ù«¼¤ òæ„7½é*Üi¬ ñ7ú¡%ÕFÿ=Op^@=ÿr¸ÕÓ£bt´‹vcóÁàê ?-½%øç‚t Q^hâ ¹TÆÛí]®Ae$Ç>¨Þ—¦\ÏM¿üÈ:K­-²aï”â({½§•A»\*R=<¶æS·ÌOšY€þMÁu¸+bKXÎÆÅ9¥5sdvÊzÉ›të'¯X)œ—˜¯øæ«vò$¡ž»ð?¼?›õp¼ü±—ïN?í/'ß·Í_Jôà[ XÑ õá ºåéKû¥|ôUáSÙ°ÖKuµp`àkWà,ðÇòèŽ4k|äƒà\ä·VtíðvõÑì ,Ç5¹ùÑà½G~«è®«à‚¸”ˆ.=ñi"|Œ™Ö|2lh´e’l=páz€U‰ïñ3øV¦çÎ%U“U`¸\®ÓPùm¬vã&ÔmS ¼ãNdl¡Œ Ôstxëp¼$äkƒ,xøNìÉæÑþò£Ê/ üqQÌü³-a÷ ÏCçs Þ9Ç<óZÐëÂn«OF漓F4Y`¯X‚óþã Èy×ÃA9ÈÔ@é@ ¯}w È,‘4ù™(v8Þ´”»cN¨Ï îÁ÷çû+ÇfdžVìò³Å“dÿïZPpÎ`!f± Èû?Õ~Í—ô2kDËÀ_Ý8ÇÎ :°3yç_éR-2õЙùµƒRPÞŽôB ùëú}‚3xwXj¤ðes–²Ô¶ÁÖ²X¼Ìåî&郘Ëkþ‡íOÒç ÔŽÑ®ª8<çõÓ–Þ.ø»ƒ_܇IòÏ ‘³ò:ŠŽ;é²Ã?ó"£˜å–5Eb§ØjŠ2¯ôzgá4˜ØËcšÍiå=Yé êµWའÃNz0¿imúesçö²^ûsç(…h¥%:wLKµCß8© ¶¸8=ÀJ`~âo¸¾fþ"[úæ3?(ø®àï îÁåüèîòçÿ£”pC ¯¬¸<Ÿ0š¹k="väñÑ*ØÝH+®¤‘Vl o2ž¨ü×ûýFþº¶ìÔó^}½«Ñ(Ó# §ƒšá­ŠÓ ³]Û‡ºó'ydtõ·ÀßÄO‡Wyî{CeYùƒ¿glè{(HcAÓ]'¯MÌ6ØzàBö˦VF(<ó¹–Ò ðÌci×G|Îy×tM¦^ÝAA›àqõ€cgæe¹2(c¹j^:ܯ ?:ôûÓÁÏ>H”§‚~8[â@ÔÉ™ÆsžmÔÍ }Þàg;ú# W–Kž|Øö«UçžuHcV@úªÁy9˜~@¦é:ÛNv ÐôCOê`õüæµCc6O(˜N§,ë-áŸ܃Î}õßË{:5,àzkïòjAnnœ*³p ˜ÄË¿úz¶*»’Å;/ds`ô ”ëššmÚ¡ 8séɲ‡Þ²LSWí L¾¥®lFÙÙù÷ËL÷uøõˆ© šÀX,q©§ô:”Ð ¶¸ˆ=À²õ9б*ææê«ºïa Ü< þðn÷?}ãT(³Žoh^¹ž‹Î#ƒŸ¿¾;gr'ÊcãF§O"…—ÑFÚû¡“ð›ÓÓ ú {Ñ|D— 0SŽ4PÁ;yil à•>2Êà+¿¦)ƒj¡ä7(HÕÈ c_ÁžßñÖáÝs ÉU~Š/ò ¥f-Óóç‡sˆ›l±#ç/ÚÈL°]oü·‘öG,:°ÍŸÁ@Jß{D—ÝMS‡£šgV‚xìlã_jÿ\FßAC*¸BÐ¯ê ½ pT€ii—Ëw:æKå'Õ£‡· ùž^ÚÄ|Çå Í'}ôè{‚–ä<ésƹ„ÌÒS[vƒ­.\°õAÌþ~C§žy'ÑÝ>l÷¯”ù­»Ožóuc-M êt8¡‡«ª©P‚vóù…ZZÍ.CÞÕwSj0Yä=Ð×Ëë?òx ïø;÷JЖ©¼Èk_¨;û&[*®à_˜ èMK¾êOºv¦± çüØ–ýDë9íνèCwÒš5Àßë[ "~GŠ‚Ò ‘Ön°õÀEí} ¾„¹ª'pÞBEŽA9üxž†N óìÜÝÓ®(unðÄõ€®zîŸ3¦ñTÆXÈ“—±Î…i}̃Ÿ¶P}ØÇ ̾àûº ñÊåºÚ:  eCç”9":wœk¤»ÿÕ'£ÇG«ïùä¡–K=Àr>ÚŽI{N9¹Ÿ7p t0Hg{`¤•Ó!2 Ï`™=¶ rÚÝ; {:<ˆƒE™L‚?D7ÃRò+rO󺡔ÔDe^`T0°Gþ<œ1ß+ùˆb{žJ€.›$u€ÖïŌԘ²+ìèè(@»J§ÒʪSÈ0ìHÓŒzìwÈTž‘vçŸåüRîõeĤÅl¥jû_ŠÌEÓeð”& »ÁÖ®X& sU¤‘¬|äPý“óÛÛ¢ûêàÜvÛn÷«¿ºÛ}Ù—ElÉ¡°2ñvgGã=Í\‹eOZ7œ‘;1Ê‘4—9ì-~3×ëÈkÇÞ0è;üÔA—ò ÖeµS¾;þÜÑWöéò”ƒˆN;(€®vþ¥'á)óRüÏ/þR©×þø%ˆK´LÓ9ÈZ'­ýï-c`À½¥rhèh³ç/çÏ›#ûú!@¨ê'ƒ!HnJ…®ÁÀÒaØv=r®Á–U­=fÝ8œAæ£#M¯*‡Òvæ—Gî¨Ê££­ž]Lc¯<ìœ÷çI¬ç/kZ‚”RÕÉ;‡V Ý„[\€`•èƒh+Y—¯ÃøÖúÁ/ îÁågû§üÉ”"¼`çÓ±#j.Wµ#+µ®yÚÈÝÝw£­Y”WR2t…×Áˆ øUs*7 ÝÁ7; ä,ß@éXÒð=öû;üÚ£¿±+]{òT¾«+tgü–~ØìîýÙ©®Ã¿Žèî`÷\ú ÕAµÓÿ,{ç°†M²õÀ“×Ý×Ð æ+²¦—´ÛÈ»6 k¼kF=tÍûXÞF×{À±P{,­ :¾ðœ{º,É~g¸?$Nsó,ýĘ»b~kçÊ&ÎeÔØÚ ï:ô"ó^Ÿ e9¿œSâ‹»?Æ–t/™åJ#šëEvÕ€›Œó¢w.õ(§C¨w i;ÆBFö‰DZ[(öDa¡#È?w_܃Í×>sQÀýÌ|íR‚O³%:gÐ|DÔÚŠ4`SêìL«¥fûä7`‡¸tú®?tÚU'¦œš¥£\uðêñáQ®òš½Í¶‚€IsüÌ\wZO•ÄË–A0˜àöž¿TB;RD×Ñld´Bvƒ­.d°ô™³úæ­«ŠDúÕ{à øYÁ=øß½Ûýß7¢”Da½@裡ák!w| AlUÚ»£OƒÙn6œò™Ñwú éÐ#ê†âØÎ?å}GY*pǪ¼Óº ðiÓƒÅÇU€‘¶‘üû8Á¯CÀ ó˵– tÉ“V†-ù×îÅ“|£`^XW¯oá<8oaKûî Þü’à>dþÔe“ƒÜµÊ("ß –¶ýáqà€ù§Ôñ¿MÓä—G/ÏRåŒ`½6PÚ¿”ak¾¥Î4À¼k`È ü»ÈœÐ%ïù«Ë)Õ9´Rä&ÚzàÂô€ç'æëò€ÖÏaè9‡1×ùaå ƒ{pù£?¾;}èïí®»áÓgw1ÿ>åY¸§ ¦\7UÇyŠ{×@á^#á5êšn)›ßé§bô¥’™GÉ2 Œß¼#¯ÚA0oÒíä°cŽ}Ð~œŒü8#vÿÕ›:† vS´ÞH@0ÝZy&tÊÇÿî;äÇB=W÷1òøŸ¥ž´þ§ªOzƒ­.bèc¸¶©7éµóŠ­éav@\ ,.y)2ÖºižÿuÞA#ŸBƀʛæÜ¡Üñ#èc ÏýП òãö|<ðÑdz]ðÕÁ÷ÛÁxË;¿-¶€ØHáA猴Ï-xä}Ž)ëÔr,Sš¬ž”öúù¹Ãt6>ßjèL€IÀA»èá;l¤È@€vRA)´L(5zô†Ã÷àÕ fýrîw¾‚M–´gñ8 fÙq]=ehh9I×A,ÊQí»ýÌf}¿’§,€ d\_Ì:d“z¦Ø/eØÏ²QõÒüš¹áíxwòNÁÛңﲣžF²ŸiîwŠ¡ÿ¡¢i(¥@™ è¡©uƒ­.là_ú ‡ç‚@‡ßÁ=0¯¡è ø n þdp¾û»w»ÿñoìvŸñ™“¸îE´ t`±*D»žÚóÃnNOê9ÿ,oå¹{OS¨Á9ŽÔ r‚o€z©eh«Yù©ðå§B{ ާl±_¦‡¯AÏ#ÈúeÕŒµ?ïŒÝ*±:ðCŒ‰èMijñ?ày‡JcäöªBF»¡´‹yÓç¾õ0xK¤Ì¬/ ¹ÖÀq¯ [AP?¥ÿ®ÙQß8 ¡ë•/©6Rõ¤©ÓQ¢Ltê;­iY/Sý+"_wß`I­k¸ÔY ãjmë¥oÒ­žüà<Å\í«žU³¼~îþ/óçƒûÞ…¯ØþÖKw»ç~c}`8 ‚o':™T¸ð®§Ãù.[ßY;çŸ Ëß©©‡vÃ`/ȇŒ%*œ-I?¾a€o²ˆžc•A=GžAÙ X²:¬³ßÔ£”áXZ`™)»çŒ\zcªûàTýá_üü(°èÒÑ8dœÃ Ø"Óÿôqxƒ­.Tèg˜§Ë¹:‡d¦W:æþ1tm¸ž´[x¢+ÿI­s<è„Λî2ÎŒ'2´à8CyaÍ×ynå»]’ Ï_¾*ø+AÆÓr8á8¾Èà{;á{{Гå¡}®tŸkšv`Ûç—2lä¥ÔÜzz;Öø˜žìŸÈŸøz8 ;›f08x2^™yБ·c’ó Ã3Ú“æ„H”…΋xnÀùeÿkƒc¿_¸ÿ(»_úÙ­Ôº·Ó†ÒÞ8{s~`7™Õ .A´ú%12Ê207LŠpPÀ(¾:¥ÒC@'$ÍÌ”ˆh²½@ ò $iµ£:hrxè@’g]„óÎÀäûɱ9„| H/îÞ¤¿)Ò Ò¢2š­<ÈQ…Û`ë‹×,]| óTÄ·(G×}:Ös û¯ ¢Ÿá¾üñÒïÈ»ÿf \Îþ–&v¥´kê’Ó`–˨˜ÔÕXí*7ô”kPo˜Î»Ën ÂË€ß2MíºNÞ‚T­åÂÒkCWéx‰·¾%¸îšä+¹ VýLçõAÈ:â{HÓ[ó†;àPAê©IyŸ?œÇ8‡ÙÖyí<8í¾9šÿ/H‰zšRŽñµ£€é)5µN¾Sìè½ÔӴ媓š÷XºËå¡Kžò»Ü3ËÒŽô‡‚¿\‡þV/…œ}þtž£Ï{þ¬·z“n=ðØ{€ÕÒ¯·]íúÏ_^?3÷™ß‰ôíÞü]Á=8ý­oÛ|æ_Ï:Ÿ^Fêur=Š›_Ç]þžù<)7=Ú¢ÙM–³Ý\{ ÒÍŽŒ#W©9(‡â0’e|í·ê‹^;vøU Ïüãiïø›ª#P89Ê•Ÿ‚}‘W¹´oâ¡•/ôôžŸªv¬üyd¿Ä¿ðÎýL§ýÜFÀîF'DºÁÖ¯XJøæ©sUWÐ)¼ö(8ÿ;u]tÊÑf;OíÎ+*úxÈ3–ðô©²N)qþÝÁ¿üÓÁg¼3™~&xkg€¬»×Ï8“œ_k¼sŠù ¤áAuÎåǨy±·Lyu–i]PðªÃ±Û'¢!ƒ@y,2:à‘Ù\˜˜OÑžŒv“Ï%¯ùÍ¥ÊóF*·Ú»Ÿ þ‰àü›\ÚüzN·_rãhÌ(Íë ‚a´–…ÞÂü…Ó|}'Ÿ6P/d´3ئiô= ÈAÌ(€‡Ú¢£~ÒäÃF»ž¯dØ¡Çå ƒNÃv–ÃDù¶½Ãux}Ä„±à"Å .dDåPªÂ–q¤è[\ä`‰èW˜¯ «D׿üÇ_<LçË‚{ðíß±ÛýõoÈçÚ!8V_Ž…c™fÛa8û•)Û™½éQ创+H9îæ#‹zÊ­Àà¨Ç ¡¶¦ à™Oj@2ág»ðæEÞy~=²—½É*ðý¾Ô}Ž~(%•ï‚ø"ºå¼}=Ró£Ïê=<Ÿ·h»ó‡cùùà×÷áß$ùÁÏß×QQ‹`éóˆ¢ëµ[Òe>õô`yØ)+Eþx„ô²åÀÚš–*—"‡§m òŒ4<å+_KG½{yp}”)…çòú|§ß™7K¹µR­£Ôõ’£Ø`ë Ò¬V½þÇÚ›Ç9Îós_ûׄ?îò1Ó}ïîúOÿ«½Œ±Ü]ôQùKº'ªZ6)z˜Ì×Ï–2g•ŽFSvY~®:.| ¸ ˜réD"œuÆrÆ.?(Kyó£¾³ƒšÊ¨}ÄÁT;«¬©ƒÓq ¦òé‚ûÁÁËä ߇î-< \CãWð5Ò¥ï1MEÝéöz'6l=p‘z€e©oáÚFÿÏÜ…µ:-áÊŸ¾X¨}M¨CÂë1Ânp¤&÷9yç%ßÓô%ã)2nž[>;ü_øüÐÇ<•qKð•Áw©‡úAê¤Ê'éôW]§Î¹NáEçÈ•(:9EÙ¦;oùè›^ò¤¨| Îó í¼êèÒ‹úè€Áè yDõÈ)L`Á#ÇÖ dŸ žjÂ{õí¿¯|ÈTú¿þön÷ÏMïVÛÛ ¨q¨»y¨ìÍfŽòkæ …$E¯mÑÔoy]N'³L>öÈÐÓtwúÍvÑÑ‘ÔÃK˜¿Ÿß€×ᾈÙWAQ^¼À“”§y"2– ¶¸Ð=À2Y›§øæ0zý>Èùþ5Áƒà‡²+éŸ~Ën÷?ü÷Ñf”ׯxi*ª!½5{ŠÉ¦þ.å#mÀMKŠ"È&¨W®ß3ð§­Ô€Ÿ¾Yž2áçrF=UNÚ£½]ošÞDNyз½=TB¨ë@ð†`M,g¿ƒo±ÿ¡úeØ*ƒ^ `~Ë‘ãÜE»Ð;‡ÜAŠO…ç¿zð!hù?þÑî%w~¨÷H×/牆Çäk=F KÞŗ^zL®Úyí¡ ÇÒme(ð›An±×Ý£ Z”œ”¬ ÞR» ž¹Ö{3É ¶¸p=à*ìs™>‡ùݯ£ñ;Îù»Ãß|ap.àÿÙ>ç/æ‰ßg­‚”JÁó£½'×nX\?³“nºœ÷ßùh =ñxbœkf9žÁe¾^U½)#åMïïÓ†eš6 _íPÔ¾z ý ÁBwõùÎ?ÓH$PH»°Ã=p ì,äQß* é©Nä§§éÆþhµaåOÿ‹Lú)2Æ´È’*£2ù> ð)hÃäàŠ APÊÃÎÎÄ (7‡¼ê—ƒ_܃7DûãÙTún>÷†ÀÏש‰3ñÓ†ÚÏv“øŠ ¶Uþ@º—×õè€yg!ö"‡²#°:c¤KÊ:d´S^ýl‹nØ¢{mnAßÝGá°X ò뤿PÒß 7¯Êé6Ò`Ê‚€­ ·ÁÖ³Xâ ¾ŸÂŠ`þ"Ó±ã—@dØpÅ:€¿;øÎà‹‚{ðÍy„ó/eƒüó>/br W6(÷Ý| ¦óB’QÑòP[‚ìf]xó*[¦ *—"ïº($èÇñ`;áR×ýвÅsš ŽÅzö5øúŸ£ÿbƒ9<üÝåüÃÝÉs¿iö?'µã¯¬-[vÎ!ênEÂt£¬}Í8ê³ádn M‡3é È Hes@/"íçwüa6è²|«ú8*`8|= g9%Ÿò_öQárÓãÂS¹”EÐÈNÀû^_uw¥Vþ¼>2üç«~íÜ}¾GJCõ|󡯔¿‰¶¸=ÀrÀ¯èô9Ì]°§“,Ù•æ5óßóð’_K³V¨cƒõèNXžñ‚é?xÆP›ßž+Ðÿ(ø)ÁÇ·'ÓO_¼'H½Ô:I3¬—´×^}žÈ;ŸÖ¨2òcïÜ@.vÙ’'O·#Ýe–qÙ©—"‡¤Sê*ü]Þ œW•W:0u¦Ô_k:ò1ùXà gÀ±!9Q(DwKð÷o îÁßÍfÓ¯yFBØ‹Ú ”Õ…ËhÝA€ÏV3Ü ¸¡´7=IÓÐqôf¯GxU†"' 7Ìê`P¤CQ| •ÍÃb'uÝ,‹žv¹ûÏ6a«ÍGÒ‹?~?¥­¿×uÂö9Ùá¡èä¡òôú¾P’Ü`ë Ù,ÉZ–¡,Kxæ2ó[žù r³„„G†/º5ø¢à\Ê¥ÿßù¿v»oþ'{âJè?†ÝÏfz¶bjHéhQ@û‘<{Ìw‘ \‡4ˆ‡^^j ЀžA¾%ÅÞŧ ÝÆ2_uËn÷~ÞŽ´ü‡¢9 ¨¼7JŒ~½>Hм`¯Ó>º º!”³í±íòž¿h7øÚ a>Îuûð&Ik Öhm¦µ£¦ÃÒ¦–a³´GFå” ÐºØ• /]Ú-åË4öÖÎüÔ¯-T¤|ÂàÍÁuÈsyõˆ¾9:µß‘QSבvî\­ù“*7Øzàq÷«Õ•K!¤™ÓP|Ðr~3ÿ91¿ñEo ¾/ø¹Á=¸üÛß±»ü©ÿq^øâ’OoÿKU£6xžÎä©òä†éÑÚäô:Y·27vfb4‚rT4Û¡oò³@_%–³Íþ#¿Õ®èÊ Z 9{„·vúQ¡]4ê+»Ø×GF,»Ê¡+Suvþ]~${îá] «À5ô/í{=iýÓ}i}Pn°õÀ…ë—+Ôy+­µ"G Ì+½RÚ\©¼cõ|²É'Ž›þ"-zµˆÿÿï‚;øx Ï?í^ü©àAêà<e,¥ò•ž4àxwžöª—ï¾#¶¤9íä»]çɃ¶~(y,+쬳Lt‚¼TùU£W+èõ…g`—  ¶íÑ1é´…ŠØ€è;òË“Šcf«ý-Á?܃ßÈðýo™Žÿ3†Ø’d×ݲÃJFmÃn6—Ô ßqBéÌÁ "ìjweÉoÐŽät9qFgv$:¥î”c~èÜÃ6@]]OÕ”5×Ù÷fͽ¡Gàe‘gïd]ÒÏÞpC—id ÅsAÃXÂSúñ¢Ü`ë ÒžœtêÝW©Ó÷pãÄ|'û ý¶_º/ÏiðU·äSÁbëöŒVà º‚\Hº³(7`7ˇB¹ù Äa×yí¤ê ø´3­^9iz°1ðHÀ±ïþ«€`ô‰Çþ)~\vu§×ÊŸtI EvU˜F‡&MôqLò܀æ.æ„õBívæȈŠÎ!æŸ|Cð«ƒûÀÌú®à5Ä”ú‰Àcµï'/Ê7ßRNÏ ð¡vÒ¥y)_£Èj…2’€yË#gèÑ'ï*÷ËbA/ç2缈L9cÉ‘\­ù“ª6Øzàß«ð/ÌWÕëÜeå€è=g1Ï™÷ú"|п ~CpyÌõýÿûîúçWÏ ¨ù%àËüŠ^5Š¢âá8Jž%4¾<_'Ó’gçÃÉ!Ô»ú¢Ÿw Ž«j³¹s¯ÑG{«¼)?Õ×ÁÊ€_Òä©Vȃ•n| Iø##ä)«êbç |º¼÷üX(q¾Uxe¤ü€…ÿ)˜>‡×Ï8ê•ã{ô?Õô¤7Øzà¢ö+ÿÒçªK¶Sí Ê׎Éù/eí\ ]+kem²©ìoÆ p  ÈèC(ȹã'ƒ;øXñy]ð'‚<âK”e=agèóDÞóiedð<¦žv¤;’Ç4Fc>·›'¦³ð“×ŒÞ ·ENBÓÚt9ÉIÏ1A99ƒœH¹ha üëÃÿ¾àg÷à_åýŸ¾Ûýùþ*k-è !hæ»»¼ê…K/Æ`[Ù _éíпö‹½pÀ'ÉbS”4ƦÃüs5˜Úí{€9í¾%—¿No®Ã{#æÝô+Vâ2Ms@šÐ±/°¨6ØzàÂ÷@VÅ|²b.³z™÷œÀ˜÷⸑Ò÷@ñEœ0_D¿ßô·v»K°â3ã™f¿1üƒéù42ä@@m~¸É«pZ0`7’“püEgùf7pW?L4½rwè3ÀgZ»YNo«+~ÈJ/’¦>‚‚¤Oã!þÅw%rGèn âÁ¿0Rxˆ¿‘§VP´Ö-Q?á@÷öºH3ghWŸ;Î¥~óx~&¶_|vpþß$ÿ@ð%Aj¡Tf`ú`ÖE‡Àlu” l-ríÔuªÎü==ƸÌ9 @™vÈàÉÎúÔw{eÚC•Q>¼õüËð¿\‡×ELPÕÈEß÷´%"£Rç=¿ÁÖ×B¸¢i+«Ì•†ÿñ"ƒ9ϺàöŽ {jWpî{Ãîôƒß²»î3¾!ncª†Â;(W6'¸¥å#Çh¥öðK0Í´ù,ßGq•›ž…i¾å%ðÇáÕù/²yç_eùÊvÊwVn\öd[ðëÂó»ÿ(|üJÂ{üf³ ï‹”›àîcègÓPyÐý¼ÈQŒ# ·ÁÖ³\®P¯½ =v4%ïšÍ±ò6ùt> ð'ŒÈy /ữ¹=é7y²òJp[”üxôò ?Ü{µiÙΨöÊ_ómʤŽ1yá‘+ëüš j9ð=?ò®ï:ù˜Ìù•‘O—*RéÚmÀ“Ú EåÇ:‹I‚®#x2$ÍɲŸ09©r+ÄÉž›ð¿<€ÿ#»¿4–/âR°t§§t´Jö¾\™¦Âj>ÄÕ¨âGþ:’(§`È9ÓíHw;å3Å ùMÔ«xääµËpðôöØ‘6ï]iÀñ»ä:IJ3ýISík/Vè5Ð1Áž´4ì<†òÐ ¶¸È=ÀrfPyæ9>ÕyïÓè°›õA±©Þý7d´­Ùù÷Î;ȵ wEš»«êWjé¨OBæ˜H©$ ˜žRçÿw9‡l—íéé~ÏWÿòAS™i3øýÁ¼Îbø=aÊk@’^»2 f¡Û+Cßå´Z°\õê,Ó´väCfZ}·§,Ï4Ø£SE‡ ÖñÕ:ð4À­As“‹Ú@ePÒŒ -êÔñBH§Ôöwë‹Ù¬ ç*TdžËw䊺)zÖˆ?b}qx¯’ÃNpùƒÿxwù™¿wòŒ/W4(Õ>ðÈmlòHðY“/4Äû0IêïÞ¿ÉÊ÷ÿMzu¸'EVP/ '>ò€öSOĶš=å™~tSÌù¨‡e„Öù“v"/ÿH~[øèŒô¡*vÁP €Ç|ãAžîƒª¹‘AåÃn°õÀ…ìÇâœËÒ+ˆs^zÌv©_¦åûd”Ó7Ž<:|»%`ò†îµàoGN¬…÷ܤ,ì)KÞ2"šë…ïc/êÿLC•-ÏaèºL^ªÞüÒ®·|têî¶9@@:¥.ÐßµÁ¼@Í{Ô¦8i }"ÁslN0y®(”ÁþÁç÷€3ð/<°Û}mn nJéŽz]ÎÒÒ²òºžˆŒ™ä¬y¼#M¾’{oê =]¼vQZ?m‚§Í!SžØ)§nÛg™–»·ãrF~äMâŸe7äýý¹˜s{E05½µG‘4 ¤9bU“4Í…‡n°õÀµÒY]óI ^ߣoÑß “Çß,Óïìw³ßxÞóÞdLÎß-;àhù“±Z*,øH´HÐ$'ª;F±ï:òQ²³‚ñ1õŽÒÈ­ z}PÓØ²;F¦ž2±ƒú¨§·Ýí·ïv?øÃ“íÊß”´û¾`~®™ÝÄçðˆOMø1­*Ÿ#MÍå W è€y@Å>‡º¬Ÿ»°!Í…Õ‹ƒÏ îŸ avý± ½@9Êe™½$ Ò{¢ºct­ m—uP&º%U†}×%¹×Ž®[ãmä„Ù¿3HÛÖ!ÏåíÞtÞH=ŸY’sÉ^éGFkIo°õÀµÒú (ˆ¯êHÃ+Ã߀ÊáY ؼ0¸€Ó|ðâ »“OùúňRŒË$K¥‚f¤'Ùå*ê4VÃæd8‚ Ê¥šÚˆ¬•‘%w¹–ÝÈG™•ò£»ü`Ê#ÏÀ ÐM|íÔ‹ @l.sb«6M”vTð9ޤÊ{(²Ô]=ÖkŽÙTÖ¤OšrOsúÈKÓSG·ÿj ¹ŽÖßpÞÂç–§0dú"ú¤q vƒ­®‰Ðß@õ)ò=­?‚þµ#G–6¯×Ô5"íº#EmâEà¸èûxÁßdŒ87à«^äy”¿d³ñ–~N!O/3Éëį}Ü–¼¾)ïxw¼Øí´¡\ä¦-£ÛÂÓ&±·Å¶.iÌ/.0×"ôIÃ$œLP†ôø(O¹½³ê­«þ´-à#Ãý ~,o yé·gãÖñ[©u÷¯‚ï âs–~§§õAåúb‹/"?¾ ø¢'˜ ™GÎ%ç i犼vÞˆ“~wð‹ƒyaÅ8º×¿ ø¼ G¥g€.ûDyÊXæYÊz££M #Òíå¯DÕõü)®¦ûÞÐÛI…WDó– ó£Ï¡åÜñDÃ|JÔ3 gzÞ¹W·)ÀGžy§ßØÙ7 òa;—ËòM½îð¡«Gw)'z|`Ì/»¼ó/iwôA§úšœZÃp ÿî}u‚?‘òÂ;£ùé ×Êø}Mç•áå8PÿÏAlþ'°Á5Õúü‡¸ô+úõÐcÀ—Fw¶Ø'Þõ±”okæ±O•>NòÐ>&Ž“ãgZíÍoíú-©ãD^§\ª/ì6ÈzZ?i=m9øQ䦭WÚå1+?Û)ü5 Úµ L*ÀɵœlNB)zŽYª\zWtŸÌ^›Cxw¦ËsJf'àÓ(!à,ù÷¡{ú¶2ëLŸéHÙè<öÎR‚ò^8¬i'éZ¡”åÌ×Êû_šàß»18¼oëeA.Lú…м,ÜXTå‚u‘RM¦IPpƒ­®µ š-/ÅŸÀCý Ô%7NÚ g=ÔúÒà_¾”•õŠWf#׋ò ÅçfÑdT‹}nL&4øf O;åu_3ò"3·ÔØCNPÏòH¯µ—–]V|ý0/0§G~í¤?”}lÿì[w»~#: ? ;'ð/úüØeøüˆœþMíEå“|R}ó¥Sxç…¼´Ÿ»à{?zgð%ÁüLµŽüÖà§¿0ˆµHéè×P›52zº´£‡•A»÷gD‘O;d–ãèh×ÓØ(‡šÊãâß¼3x~>ª×+}ÉK)µÏ#["å(¨| ¶?[\=ÀÊô/Rdž³”™–êLCï >7¸zý¼»”wá=˜Åù¬¯Ú]7žÙe9g=ƒwîø›œC?'0…'²ìþ«|.Á¡÷Ý|s¾è›òê4t&©7'Ðé‹Á”½|ä—ö ôU½V[؈,_/¾'ÇÜ÷3±? ¿Íyõ@÷AøÏaÈÁî{àGCfÚýÎæÒA\=p%Ÿ‚Á·t¿"ÿ GŽî¥‘Ç0_˜fÍÈKûº9Rä&N8NRÇ´ü1j¨@¿“¶ÿ;ulpÎ}Ìà•A±ë²µ|æ×ê2¯ú^¿2mc>_Óa÷”ÚS˜„N4xÀcS×'ªFJ^xèÁÏ<ŽÙ¯ÍiúËž¶Û={ÔÄŒy4tv9 »}ÍÒ(igÀÏ4”¼ ¼rƒxä•7ðWvÉ`ù%]•­}ŽøŽ|G‚¿EáÇáQùÎ-/\¸`½xñÆÉ‹.Zú…K_4yƒ­®åÀ_€€¼þ†t÷9òKŸÓå¬%v"ÄA¾Ënyõn÷YŸµÛ½àùñYAîÈ£2ÓPïà—re}·^ð!'¿ù¨×ò4Ö£½Ñ÷üò|·_þâ€ø¨ˆ»g¼@ Þ žzîºkÚùÇÀ+Àk£û¹ þ¦û!x}‘~Hÿ“ê† —§“^ÙëÅð*Ãב±7í|YRç vðèéÙ÷™?9C-€#¥÷ ¿3H€c<ætï{L[ò‚¤éqÓݹöÚ™Æ[í©T;ePì¡K¹6¿#øÁãðæ¨~:Èü¸Òr^A©aÙZIK à[\«=€ÿ:Õ· ×·(3­ßQ®º3y¾ ø)d>€‡Þ/ßožùUQå70O,U{–ÒH/wü-åS:ËÓ|–ã’œƒu£ÌÙ™°\³œ‡ýåñáwþõ€g;þ°J™ÚMù#¯ú0|$§žýHŽßŽ»$ xOPÿÅÏôs2åœÃRQy@xÔÿ@Á ¶¸Vz€Õ¾ôú‘Nõ)ÊþëäƒïÀZø¶`¿ªðêµE¶­™tÂ'Ž“Ô¾‡vYKyª‘ï>Ê1èc£sÜKåØÊKÓcéeY–i[–í ,é$}Šþe]Ëà$ìÇà¤C&ï„…vìzmÝ|AG‚àžL‘—å÷»g%Çå6«frr®hruʬ} òèS^;ybǬ&¿ù î1‹åÑÏ|ê¯<É%_ôU¾!¯ƒ‡RÀ«s™ñC9®>®ÜTþËàòWË+]´,/\hÍ€Ú5ðà[\Ë=€ÏÐ@}«i豑SÈ>&n^<Ò!g€xýë³c7·_þåɘÜËð~=r{doIÑ#óÑ_õæƒöÇ—ió!7 GòÒ ÆìéH§ýØøÈ/ÿü/ä®(¯Cg—ãàW¢»%è7Mø#|P¿‚×÷@I—k ¥—İÂ÷0æ€sÃ4”¹'ÊûüQG{Iý!°ûA^ÛŸ{ðòÆcþìyæŒëœ–Ç[ÃÓ«Ê ÈÕÑÛ¦¡”m¾ëûÈôü”©®SlL3ºô a½ï^9x|g,þu–3‡:ö9„Þ9ã<¢Fkå<ò°udÐ ¶¸–{@ÿÁŠ‚g¥égºÿA×¢ùîˆìEÁgáḧߚïE~Éîäz^]:-v>R'°yy¹ÌB9áD>=>œ¦ù?äà^ 0Ë×4e]‚UOÙg)=_ æ1ãú‚/åý$sɇÎrv ’ŽAÆËç7»~WÎ:o?<Ö3I~b¯~ôÅ÷€Ýáô=P¿Ó1Þ|Oú`ƒk¯º?×@ñ!ȤÝö«"n°ëê;ƒ¬‘u‚ÿ‚*“"Ãnp…°ï1YŽ ããAnŒ~БvŽQ}zý²žFŽsVßÓ–«Þ´uK»ìÐTOš³Ù6j »šÙaªüF±©¯ÿYbkÈ?ü¾|ìãÒþ°W‚wDù£A-Më,ýÂÈ‚]¤4ÛâÊG©6l=p±{?¢¯a>ËãSÒúyh¿iÂni“‡a+¸õ‚Pìàí·çEœ?—ÈÙÉus~¦8¶pà#M¯îgÂw½:eÒ9¨{6€‡Ïî¿ËÙ¬:—Ë€O¨ó‡²iâu¯›Ê88È3Á›Â¾,;û}O÷Gøl@ýOZ°çR§%Fô¤ÁÚø"ës¨_ËK±Ó ƳïØGyýÿÞh^|Qöè%<4¹éO\È—H/ÛƒêHãS&힟Q±ünÛmä±¥ ÓKÊ(ÿTð'‡Mȸ;r‚ŒCÐ>‡zÚyD ç0¨}ÔuDÐ ¶¸Öz@ŸÑÛL¿‚?¢­é¥Ì<¬;ƒ/>3x§qþ÷¼"%߸;yúeeiPc¹Q‹'(©N…4Á?|¤ÕAË>eŒ|󎾑Nô®ê˜ä©óì«À{»§vöU9É¥½—/ýêü;%®w¸vætv÷ëð1ýÜ…¼#zâôœp÷?òo°õÀ5Ñú(>c »Nžë™ßµr„ßkiá VÓ®èWî>NòäÐÏ#Ô£è_dÐî³zÿÃãÛôq^u®É´¡,í&ç}V¾:õ½.e¶%ÅÌ×mØ}RÂúÍÁµ×N>[NÚ‰(¯é¥ÓQ®“âÁßäiÞ“iõS¹­¸1¹^˜Ûznt{ ÐȬëx)‰ºyN¾.ÇÞ@rzË/׬§lG¹ó{#'Àg9E‡ ¶—"¸5—?[Ä¢¼2pãýAo”úŠ2/dÐyѲ¼pñ©Q>ì¼á7ØzàZìü]žM3ïå¥ä7M~Ë@ö[Á_$}‰ö?“yãÛ ž?© ²°£ ïy øÙEGÚG~µ1m€ÏàßCÉSù)#؃ÔUþŽòâ+È—Ûój‹™ùm·ívßõ=yçè»§v_áoöî^Ô¿èwôE¤ñ7êá¹YJ-3Mí{z>iÔO*0\ãìX#ëØõȱëT½2v‘¾'ø…A~Ÿ:Âa·é1.­)Ñž [žšÑe,+ ¥WÕ™VN½:GA#´ä±EN¹kÔ2˜7ß|kðÊð¶¨<ÈÑ:Wà/ÈœSôÄÚü¡%´Ì#ñ¨¡l=p­÷>Ч^ÊÐë[ºüZš5s{ðó‚ë³øïc‚h·å­¥_”Ý€ÏÌ9$K,5¾|憓¨|ëG;À«€^ôžÈjùûØÍïD_Î&KvìÜ#mÊ®?ë/Tí ߤӖü—O³Ýøž¼ç¾WF[8 œÃ8È2úŸîsðCKÿƒâ@ñ¸z]ýÏÒÅdƒ­®©пHõ!FÿRŽò…‹#%†ñú W®;”s4]?ooçîtÈ£€ã#Å\~I;€~Eg_Ã},úøÈ;vø=}ôXºÛ˜j½P˶îˆJß)ü'-°xž à„c.y'&rxmLC;j/½3ú§Ÿ\ÎÐoÌ)û 9N‚€Ÿ•^uv:Èç`]x|5cóо¹q'myØT€oäÓÖÝ~èY1Ô»§‹â-iè÷$ð÷¦PÞ£7Þ·¹@û…Kç½qZ»y¢*›ïB¤™à[<zÿÑ´~¹i}JOÃã‡ÑAI«çæ!ÏKÕ>­x–C ¨öÆ_É«Ýòê¡ÏýÜÝî3òS÷: ¶‰æ:5¸Wy²z òî>ìx´¸ìM§¼JgõRwꕽzÚÓe´ãƒ kþHöBüÌ«r׃9ø‡[ƒoâbõAÞ0‘»Ëô=P0µ•ß!oZ:_€è{¤Q=éà˜ÛÓ:7°Aîü’ª7 ®w_L˜xè‚h·?5øyAdôÞ3¦{—T¤±•ÂÓÛÝŽ‘èiÊ4ÝyóA)‡Sß)ù²ãïß³‰èQàßEÿò ó„–ôùßÚÐÐ9DíàòHIÒ)µýÝzàÚì}­ï>~¥ûõÊ;µ,Vú;‚ŸäYßuxøý ¦½,ç­K»“›¾0A½UíȲ«`K0ÅU€p üí}Mx8•˧YºœÌ– _æ%Íø:0ÓýÚp=›ƒwüU9ÿ?{ïoïUÖwîܯäB¸$$@T°@©`?A{ÁOiÇRœÚ‹céÔvjí8¥ý /Ó‰­:öbjÕbK‹`T @!H!‘r¿1ÏwŸó;Yÿ÷ÿîsÎ>û¾÷w}>ÏyÖzÖz×åû®õ¼ï»Î»÷NlüU_î­ý†¯¾­¼ÿ_Ù5|©r³„×ûüOî¡“‡ŽïIOˆm{C_Tfý +Eÿ@h}Fo‰¡,ñW•<…D'¼»Òו°Vr¯—õk¦+e2ìB ËŸ¢œ'y4\ ±‘Ž=çñ蜗hòGãôûÒ©/ùI§ÞèÖ^Uíô‘|Ã6Ö%0á2Oº´É‹ -mœ<®ôw–<¹d$³;kj½¿.éT'ÕQgV-ÝÙÈU}83+cGW<3}çJŸüª‡™N=ÈðÍÁÔQ:›|ÑÓ_…©ë¡j䊊üûzÔù@ižxöÜ”üNIm+Œ|pâa©†•š6]š®3L†Gy+º³ ·“* ¬,|ï Ä_BÁÄ–xÒ•5 í±||膒óJú7q*ãÎòN↓þ ZžêIgm},¸Ý¸Ækõ ß:Fw¥V(t;ùøŸ’¡-ÇáS(Siž‹†onÇS.š2‰³øµzí¿¾·>U›{üÊofè?ðAW–àgðIøâÙ´ÉöHü~'‚ï©Þì¸ØÅ0Do'—Fe.02¢Éë“”f09&וœ]R Ê÷ײ„ÇuÞ{‡äZÁÖg§ -µe‰sZ[›î‹çlåXÒ”£(á]šKvÍ[HæDæQ4ó'ñÌ4×.Ž¡U„D¨7Ð ¬ üs:þ‡qŇ`#&žëiâ±§|«©óº> üÄ’¡–¿|÷eU[=æIµWbÃ2܈Ë]U¹½øè^•©Í½áÆ^ ƒïòÛú¿-§DüÐïõ£Bý+vø]Ilxæ†$º{³’(òsÓ‚ÎBæAŠV³XBØ_o¶ÊúW«@ >ƒ¾Æ—DǤL|Lò3¾¤£SkìêÞÑbkfd¸©Vî»·Õuåwê‹Ó«ôПԊêZ‡mþ•íZ­ÃüZ­m~6ñx3°ýÕßlð ߬¼¼ ˜·þ’ÿåzãïÝ奔ߪWÑ>¿ÕÆÈÎoeðÑç*=ÜôÄÇàSâƒZ=>(þŸƒÿ‰Æ÷®}~§•J.MhÏ9J:º;‡bïêáqMɱ%<„sLàƒj—•|¼$ìƒ`+¡g ñV‡~lI·g†¼Ø£cãƒÌô‡oÐúÌv¹R»ŽàýÀÚM9wÚy”8# õÌÄé)’G—Éë kC ¾$Jky±ÇFš;ñä'ÜXÂ=ô“KŽ.é_¯Ö{?Rï¯üZvÇœS›tG=º¡7\r8‡­e˜¾C¿»ü-ÉÇvý“•7ÜØ«%¾½±8|Óph'¯\ÀÐ^oüáîûhmüÕø…߯óÿ¸]¾‚U\VÒ^ŸâgFé\ÃâwZ?”Å÷&6H`ÕÄOà#â'¢ÉkíŒ á{KÎ#Ò \ï?[ÂÚaý±>XY7ÑY?ÑUİœ«œŠs~`ˆ&´yØI‡1þ9/m[k'/ç0ö”‰îÖÛžÛ:|Ç'RΰuÚd¨™ˆè6ÞÍËÄE§l4e íñ™L\”y áAê M™ŠØtûXñ®º§¹¶¦53›'x ç¡œ¿áЍ²T$¿œYM¾¬†lôµoúQ–º¿V‘+ê6â?×mǪیkê î@ö¨âKÞ]ÂN{“B¹‘‰47,IÃ%7,Ñé]‡épŒ.“AkA õÄ™ãèÖÞú›6Ÿ2É‹.ÓΖ8áºÖÞ9%”n©ÿ·ß+ð±Z¤u›Ç–×ÊFÏ7þê:w­MÁW™lkÒíÆ eøhïÇëݽß)oòÎú¸æÍ_ØjcdgÍøDEùo.›8]C‰ÏI?„àwÈ‹ÿAW/‡ç¡ï桲–6tÏmÒ™O™S ¶ÄÛù“rhæÛÍ%l°ž[rLÉèð•ÊâÀú¡™ááÔÒ'”@´OZÚÉç¬$ŽæìÐ âhÎJò¹€§äÓ%ï-ù%×—¿wø\á­ÆHëíÊüɼ¡7‰ÓbæšÖ¶‡é)=G X7ññ7Œ¯õ!¤ã_Z;ñVR&åÑ„;J®+9³ää’ÑÀûê"r×ïÖÞÜ­Õj½ü~TÝ=ïlØÕr¬88>><ÌÛþNÀ¼ñ·ó‘àŽ£ÙúnÀZâÔ7Ìc¹Sg-y¾ã÷ÞSЯÕÿ¢î¯ÿ†|ýžÑ}}4§ÞÃþóášÒø|L+ñA±ÅÿP¶õ?ø#|_C'[_TI} +K õm¼õ= Žtü o>c'p—pmI»VX/¹V³~’Ú°7œJvã±Á’ ðχ—•œY²¯ÀÇ©žñŒÁà¹Ï .zz¸}$棼hBfìü°ãÙÜKšxB>âû¹ë뵫zïêêOWx€ý6üðA×–p$¾%~…8LèH=f‹ïB#ô0’FƒÌSÖ3ÝëWæó†8s(×®hæK®W}s'ùíb;ïe%ç•ì?œWEŸ[Róg¸…˜Þ6sá „}{þ 'X›®¬áYÊÄûj¥?_RsgøîgxÿyqyIí ç s[4ñÝæyåw›?^à am °#¬îöúÿ“k>ÿ2Ê÷ÄŽÿÉõýü’o.¡¾ý…£[w䢾'ð_?æiƒ#ެª‡ŸæG:¶Â×·/PÃ~÷ß–½›:¦áG}·{¤\ă7•|¶·eÛ*9Ö_nÊêÅA}ÆjÇÏà7ð'ñ1­Š?juÊGS'ÒúÜ(¾?´Ì>ÚæRæó…t®9Ñ™™/¤#±1‡8«ØÑØÑÔy^É‹Kx1}¼@mO+9·„íèš;Ãï¤5”9 màŒ`ç=™š?ƒš?Ã;}~;]jÌ@mW—üAÉ]%¹EgžŒšCØ3×r ½D˜3Œ ×®Ì4¶ X7¹†¡|¾¢{ ÃáKâñ;Ñ­ÿI¹hüÇÔŽÞÐÿœWzÌP];¦œÏ±u;ªÐÑu;êñƒ#ŽæXlðÑ{°í ¿¯?rw­îr>Õÿ¼®ïh8º²$°ªZÿß‚­/޼KK^QÒ o(ûKXÝëv{ o×e û#€'Es.èØ'ÍùJH~Ò-w⹯JœrÄû$y­&n8 îÉ9`5KucŠ0)#ÜÄçÆƒ8ÉC7'Ĺ!ÞÕ¹yAç¸ÜÈ`{vɳJN*YæÀÆ_ý‹sç= dnX¢sÃÒên<7.èܰ´N8[qœnEw5qƒÖ@üNt.Šø.Šèøžøü þ$>§ëw’N>ÇE¨‹-—ç•|CI{á­äøáĪí¸jñØêѱÕ"o&ß_^áþZåïå#ÀüÂçK>PÂÇÂðø4GÄñ+Ä£‰·iìñW)?D‰ã{â‡h37]ÚÀœ!äºÅ\"ž¹Ó?ÌæF+Ì™Hì¤)͜˼ûƊ׻¡ÃüRj§Åv†æìäLrF&·TÌtÎ{æCæPßœÉÛ£ôaÎe.§®Ìtæ !0— XG¹vÅïD·×/|+ÿΊGÇ ÛxüPtާ®óJ^XrzÉ„¡º4|3°š9¢š@†ßéWK¼~õwðõr èÉCí">\òé’øøüI¤½f%Þý'zëƒâËð5ñC­Â÷è ‚a¥ įpoƒo!FFÙ~¼òþjI7¼¸ ×—dͰ>ò܉­w ”1çIȹ#͹J^Ê%ò}:ç õeœ+Bü]›—xôVIÿND€‹ïº& ’I•Ç.ªíDM݉›É–º¢3AÑuóz|éé%lNáf¦j™^à}‹•\[’› n<n\r éܬ Ûtòsc§>ÑÝYÈÄÃŽ¸AëH þ"cc=pCƒÆ·Äµ>§ÌÃÀ…´R_»v¨#>‡‡)âÿ½äŠ6ržQ‚ý@ážz4Afèëu%ø¡zõbèsð#ø üL|P×ßÿC™Vâ‡Â&œÂ.,ë°¥ôŸ¹€&d^d\}s‡r£ì?e¨ƒ4lZ>­ô§JØD¾¸äàÿÄÊ™ªJfèûM%ÌŸ›K2w˜íÜÉÃ7º7‰Sž¼“z˜‡aƒ»p+“AkM€9ŸÀ¼Çÿ´ë€5‚¯aÍtC|UkO}©_Æc#ðs%7”œ_òM%¼S|ÀPÝz„®ñî™þaÅ}þ§Kh¨|J®I£|>(þ§õ[ÔÜ?Ç…Ì X'íÜŽï`Þ'Ä÷¦ì¿(ùKÎ*Iø×¹®„|Žm5kÁ]QØàGÀï“4\ 9)»eÝý/eS>ç'iŽLXry _lÒ½éàF¥+yPêÞÄäæ&70ܬ䈱çæ&¤ÛEfe6H`m à3â[F 2ù)›µAº/žzÈëæÇ÷°¿P‚ïa}òY(®–!àG>SòÞ6š¾ZBãG¢ã‡ZÿÓõA)ƒ¯!ŽŽÀ"~¨¢;~9ÜÂŽ¼e™mckuOÙØ’nu8¤LÒh¸qÍâüð=Võ!ñáÛ¥¥8¿×•\VÂÛëõ!ôëNæsé›;±“—¹–ëiêϼÉu‹¹>ÝYwØ Xgø‡øˆèŒ7é®&Ÿµ‘‡öäç¸èîúi×›kŸ)¹¥„·¹wUOeÍ-ÐG|ã‡J>°Çot¯añ-ñAÑñQm:~':þ'×0Ò„–OßÊõ¯V“ë:Ââ7¢Éc¾Gçyöß•°»ÏýÀ¥%?_ši…²íu¼’‡\¿É7œç„Ðr$žtâ£tÎùm¼­3ua3̈@N䌪_hµŒ-‚SIœÍ86>±ñ€LðM'éæ“Î±ÔÅÇ"¢iƒô9%畜UƒÕ,×Ü@}®ä¦nXdh„›–Vs‚psB7+¤Ñ¹aií)OÄSoÚÈ‚Ž®"CÇà‚†„aÄ×0V|@ü~‰_ˆß@ã'âcˆó?ÔÆS&þ)up ñíœYr~ÉSJN(™gÀ/ÜX‚ú|I|Etâ?°Ç¿Dãw°·N¤ò86šcâƒÐñ;´ƒÏ!FV)0GÌ%Î%Íù%8缕\›˜#íÊœÉ|Jš2íõ+sMý|³ßÓJžZÂÃø<çí‹%Ÿ-¹¾„óÝΜ÷Ì‹è\¿2‡ºšr”É\kçNêÏÊÜAVmmõÚ¿Ÿ@{ Ã$ßÐw Ë5‰ë¾?C{t|O|U뿈·>èÄJŸ_‚z| }˜gà ×mË¥ññÄñ!H|Ot®[}ºëâÇ⇨éú U¼†Õ0 Išîjü !~'ù)»•ûè}k#×j⬟hÊ&ëx4y†ñ´>¸SK7ÝW3ç¥Z[ï–3=e\l×5´‰'‚3HàâK࢜ãZ‡‚ Á–‹s4nn\HóմIþgK>_Bš À³JÎ,9½„+nŠx¸á¿!¼ux˶ðeèôþÒ6q$7¹áÈKtnVr“ÚH4å¨üÔ êG·RÉa?”´AëN ó bükŸõ’ÀZ"¿õ=Éc rl4Ç“Gš8‚ïÁF¼}x"~SÉKxsá‰%goë3Jç&«¢S ô‰78xS_tcI|E|cŽbÜÄÑØ³QCšãб%昶^ÒaÑr"ެjàœ2g2¦vþpn £n¸Ú±g¾dŽ #á–9Ô?œGÞÿH óçI%g–°1È1Ó\Ë2n¨8ÿñçüÒßœgæJæQâ™3Ì lèVÈOtŽËøSw¸ Ãp•çP à ȼÇǰð?ÖJëhœkë­]cijö²[Doü^UrJÉ9%ø|›ƒÓøŒ[Kð{7—p_~E3fúB<þ…ëvꉿÉ5,éø4ur|t—M|P1H`íÄÇt5ë!÷;øòÑØR¶¢;qÖ öV'Do¥=&iõxZþã¹Uº{|7}:=æ€ò qÀÃWæ0&‚3ˆcévž 2¡9†ãÜ´š¡\ĉ“ÇÃ5qÚŠ¦ iÚΈŸÞNãØØä#{lRþ%”míó Ïñ<(ñ¦7ØÓOtú†=ýÂÆ šã±çF%72Ô…ÄN9å“α©3ítûQ‡ ûÕòÄfÀ&èÎ{Ö~uÚ'°Ö¬­„uE:q4oP ©5IßOGc£=„ø %7•ïYb#+üš‡ªô­¢#5øŸø!Þ”`ㆠúI{èô 0^òÆÜúžøšøüNlñKñM©‹tÚ Ò´Ý•2­\`L\ÐâáËy„cßù¢ ãÚxÒh$좙CÔ‹äºEœvo.a3™86æoå´ó‡ï$¯ÀyÍÜA3xèæ£ÇmßèéÌÒ™3íjçLæMlíxŽ%/uf¥4Ì¢Ã/º² Øíœg=°¶ñ7¬ÃÖ5•ãЭdM¡ê‰d=Žº†Ñÿ`úd ×/ü×°ÓJrýBã›ö ´É?Ês ã~œ?üPÛ·¶ôãèqt$¾&¾';ñ6ͱ¤©‹üÔÙ¶EnhBn¥ü+õ#ùžûÖq$qÊ´÷;¤ Y/Ä)Ûµ§nò Ó#Ω±›Ž]½¤ös±\Ò®ï«[™8 œÎ$GÑ \¹!p,Dè8މ`ãbNyÊ%žÒyøFGè ñ87ÒÜpCByaI7Pžÿ„ÒŸVèG{·ô[n\HÓqt{Ó¦ÛrÝzhºåÔö¯² Øh¬ë„uÌšêú^Ö!e¯8›¬/lè¬5Ž'ŽæŸÔÕcÃÏ$8¾…4ú†’Kâ‡*:ŒãË^Vr†N¸¬Ò×]ï¤cKÓß¶¯Äñ-‘øœø|QlñQ0à¸ØSG[/m§ÝðCG*ºò±0NB;‡`× ]-ŸÄᇴ×.v¯_Ì—Ì¡ÌæÒJØd.ÅNœãŸ[rQI7üQx€OŸ3¦hú–þ¡é_tú›¹y’¹ƒ&/éÄ9¾CŒ•¼ÌòéGúRÑa¼ÕÄ ØDíÚ`½³nºõE lBÖS»®9ÉšÆ±ÑØãoй†¡ãgˆÓÖmÛ¶ø 4Ç<©äÛKºRý×ÚJéÒö3}M?۾Ơã[Љò?)C¿‰s<õoÛ£‘Š'mÀº`þ³¶³‰³–³.Iß-°–8>4¡µµëj+׿Ø`\,×=Äġę ã$`@9^â$¢qæÆ‚tâÜtP®Õ䑎ä…òH·ql±§M4B_h/}HËdÀÆÈeMgƒµÎZêú_Ö"þ"ü¬¥¬3t”Øü£ž¤S'iŽEâ{âs(CHÇïÄçЯ<ÀTô°À~yËÌô‰>&ŽÆ üH4m#Œ3:þŸ2ÑØ‰#Ô‰NÛñ=e:Ä‘^åÀ¸8/Œ“@šÐÎ!¸´!sMùVr^Â0ç†9ƒùǼ‰ÎÊü‰¦ýHE‡q4óé ØïÞΠOégÛ?âô >2¾ôéÌ¡Ì×vµñ¶|æOêJ;è°BhŸôVÊ¿Ø,™ÿ\#X¬ùhÖM7°ör ãXâhމp\Övâ”#Î%Žt¯a´Ýçè[+ñ1e>$P?yô'BŸºýÃFÙH×ÿÐwƉÙÍ¥ ÇP±“×2IŸººŠ$°v˜ç„Ö·d-bg½X‡ÊÅ64ÔŸ¬ß¤ÛãS?e @‡ØMq­£Á)àLâ\àÀ™²‘8—èܦ,MĹ Ã’|nP¸y!"Ú¢ :ñÖ¡qÛ¨ÐݤíVèwn.èKn6¢éq4ý"ŽN{nRˆ·å3æ0@c£Íô!ÜÊd€Šk‚ÀºÎZ!`ýÅ“‡¿ÈŠ.ÓЯd­q ñ¬CŽÉZ'ްnÑÔà[â{ò…Žÿ‰.ÓÐF}}zû|}å˜è¶Ä[?’46üNWÇuýåh#:í¥­ð 'Òëó%c"Mhç\bÊ$ŽŽÀ.¿vQOæPæiæKæí¶qæO+ÔÙ°3écJ¿Ðô óЦOèÄIG2OºiÊ&¯=–ú)›6ÓévUr‡7qƒ6•@ükœuÂúfý$P_‘uÔê¬74Çdݱ69&ÿÌ"žµËý5mÅÿäÖç°Ñ?÷°}þ´×/úBhûÖö/ý¤?øŒVw¯Säckuϱԉ=ã§=òŠtâhƒÖó¼õ-™÷¬BÖ6vÖM7tË'M¹Ô­µwë0-#ÀuSBëhp8.À m<Î#knD‡q„xÞ Hœz±ñ Ä?Lä“—tœýŠT´7äí›83ú‡Ðlé¶Üd0žVrãB~Ç’N<º­‡z©+íÒf¯ä0„uÒj l2¬ÖwÖ <â{ð ÖZÊf]±.ñ#l”EgMóàDÖ+åðQ”!Ÿ‰ŽÏ‰­²†ùèÖQ__ Ý(úKùô7}Ö>FsÒ„îÂF^xG˜±Á4ç'ó„rpÎɼiçǤ,u!¤Ã„ü0A'^Qƒ$Ð`mXç¬Öz4ë*õÕ®¥¬5tÖWÖ"ë“4þ„ëu´×°¤i{|Oüii> /Ї¾ëWúH?è#š¾EÐâèÖçŽ`oË¥<í`§^âh¤å•x™ X{Ì÷ÜÇ· ck%!y¤»k…tB{LkO¾ZO€‹é&…8‚8šö&†‹4!N¥Õp¡`ËÅqŽ#Žæ„nx€âbOíF'M¼•86ô¨À—¤Ú¾¤Ÿ´Ÿ¾%Nš>Pž>%ÝwsÂ1±'žñµõ¦í®¦„è­”% d]°¾‰³~øÖ[^ˆ'䘔Çw ›µIy|þ[|OÊb§î®ÐÊ éCüqêé ÔÍ?!²öéBb#Îñé¿MeÒë/ç'ã#MàÜÁ…óÙ ” ˜!™Cƒ0G˜CØSñ®Ð66t„yEœM}sœb¥ïèô‹~&ަ4ÇE·s'ñÌÊÇ–8:õPG·=Òa„Nh㱩%°É²&ð7¬Ö{4k,¡çÊ!øÖa$ë”k>Ä›|hÒ×^úþ‡>Ev{°ïúE¿è}M<{|Otü ¾†|Ò‰'nm‹z‰GÓfÚ «2 mhƒÖóžµÛê¬ìmˆ½µ%N^›?*žòj l4.ª›âp,\„ã`Ð\ ¹ÉH.Ô0¢;ù¤)›|òHGS&ÞØnJÐܸD§ÝÜÌG¨—:Ú€­ýþú@ÜX`£\Òé#7"Ø[M^›nós\tÛqʦíè2 mhƒ$p8Ö 5NœõJ`ý³¦)C~‚4št+”Çžu›(4ëš<â<œàKlhÚCÓèø¢2 ýºðaü‚>¥ÿmŸâ/°%C!ݧcKùh쌑:Ѥ Ä éš½•Z¿¿pà\eœI‡9瓼vâí Olð {æKæM4õ!¤GÓ‡V˜K¤ œ»¾€=ó‡üôƒþd,9÷m)C=Hkï¦S.uµuŸhÊ%`3H@‡ÈÚ`½³fXóѬGB»¦ÇP.’õˆ8שü¢½†Qgü vÚã˜Ö÷$NŸ6ùúmçûÓ/ÚÆNš8í‘NoÁF“¦\|NŸN94ÒÖKšö¨“ö±¢·Rþ•Àúè›ó¬eìÉ#Ý’Ÿ¼6ÝÆ“¯–€ŠÒM q q0\€¹‰ äâLn<¸pG(—nF(‹¦ e‰s“Ðêܰä&&7/I“O?Äo¬øy%mÀÆÃSnÈ£}ÒÒ±Ñ'âh„2ܨ`kuìÑ9͘Ñä¡ ±c#„ÍVÊ¿ÀnX/„Ö÷`cígm‘ÆOàKФ“‡ÎzŒ—`g]c#Íññ9hòÚCÇ÷'`ÏCÒÐÐü¹³âñAô¡oéOúÿB‰j5eÚto#ž¶(CÀF»„ôxlÄ×90fÎã͘3wìè°Csޱ…)<Û9Dš2™;Ñí¼!?B›¹nG_ÛR‡ýýjY2·rsþh;}%tWcke·9D])ÛŽ9í†M¶‹&`7H@£ d°öYghš5?ƒ|ü:vÖ itëHS&~'šã‘ýþýŽ*Ûð=ùD|:ñô‹¾á[ÐŒ{|I«wó?“ãÐmÄ©;mG—IÿÃÆ`-Œ äÅפL_ù>[Ê«% m\T75ÄIàPˆsA&Cš@ÂE<72<èÏÍ v4yÄÉËM7äa#4š¶°!‰Wtð¯JþV ߇BàÆç_–p“‡®¦m{nZÆN¼ïæ¦=–29&l¢±' ü# ìI k†5Ÿ8ë ?µG%¤Y³”Á_DS†4k¿‚PÍÚn5åú„¶)×ú┽¢äù%m¸«W—ä#TäÅÄ÷п®ï!>¥ ù­`'M])—:¨üÔ‹N›Ä[©äF80?Ä ¤Ã+¶–QØ¥çŸòhîœÿveîÏqÑÄòф̥?ªø÷n§±¨ûc%\ú}¢ô !ž4Çd.´:ö胦ïÔ“ò´•zÑi»—yhG$ ½ °Ž¬ù¬±ø¬_ìøÖb»Þ°Q_ÿƒnýOü :¾(>§õ?ôƒ€íº’¯”<¶¤ ñ?é yÄ‘ô™xú‹-~¤õ+ØZI9Ž¥éØÂ&õVÖ lÊ  HàQ}k¢ÏöèÆ$ }ÈEs߬aÁ0ˆæ‚x„› â­Î :ñü·’ã»7-íJò©3mµºÌÃöÎ,ý">PòÅaìÑ›…Ü4p£Á‚-7¹á =72­=¶n~êãXBêH›ØÚ8iƒ$0øŽ"NÀ „ø4¿‚P6DÑ”éÆISy‘¤Óu¥þè2 þ|ÉŸ,!Ÿ7·~®äÊ’¬{tüþ‚tüIëcˆSÉCSÒѱ·u¤~ÊO‰—i§/Ä75d®0þÄÑœ74çÉ<@g~ »s'åÚ2Ý:ÒFì¤Â÷”ü¹ŽçX¿\rY çÀùl¥=ߨ3—8ÿÝtæK×NÙy9–xæ º•Jîô‰¸AØ?vÍ'ŽÆ'â?HcŸ!x|Q«»ñø#Ž#¶R?špaÉ_+y‰ ï/¹´¤]ûø…Hü¾%¾£Ç¯Ä/Ewí›ãROÛFÚAÒŸ­”%  H@s ÀÅÓ°Eá‘› rrC‘›ÒH›noNrSCm<åÑ©Ÿz¯è°^ÒH7䆛 Bn$H·ñÜt`ËMÊ~ãݦÔv[MÜ  Œ@Öz«ãâ â;boýJâ”!ßÔÆÉ‹ßIœ¡Óâ›2Oà8ç•€Frþ'ÝÆI·s‰¼Ì¡hl9&q4!é´í„’'•ÜT¯o&äür‰gN$¹ÄùO^×F¶H·uå˜ÌÊ’N|hô$p ¬yB4¾ ~ßÐú Ö§$ŽNœ²]I=hʥüÊæqü¹%|$aݲþñÄÑñIǯD'?éèø!ŽK¼­!¶´­“6H@€æB€ §áQ¹‘ˆ…ŠØÐ¹ÁˆÍMFkÏM å»ñ”këJ@96noo&Ú87%”i5qÊ ÝxÊ%c‰’‡-í¶ña!ÿH@S!ÀZH_ßOÁ¿Ó¦»O3Ê¥¾*2,ƒN»i[B|þ!~ [=h|H€Ð{ÅãsR®¯-ê%Do¥ü ö¼ÏùÌ<Ê9ou;°šC9&åÛ:ÓNú@ÙnÈùBç¼R¦79ÿ؈#‰G·¶n<>šüô['m€N õñÔß_‚nmÄ[I~[&6tÚˆ.Ó!6ÒmÈzÇoâðı£ã?¢c纴Wœcr\êÆN MˆÞJùW€$0'\8 ‡€KØ$Þjn>Ú¤Ñܬr#“r¹‰I=9&éè­£}xëÞ$äf"š›Š6ž”܈´š¼¤9†x[¾’Ã4š<ʺzËê_ H`šú|@üy„î›ñ+hÊÄï$Ÿ”t4uål”K ÉÚ'x+Øâ?°'dC¨Ì;×°”ÁÖ¶KÚ  H@XöB¹°N,yÃaÔjâ]ÉH4ùÄ“ŽŽ=šá§®Ä[M<7Ärs‘ìØíTnRÈË1Ñ)‹N¹´ÕÕ”1H@ó!€O tuëGÈÏÃR’°§š@‰§<¶¶®¤)߆´ßúƒø Êů´qòãc’ŸÔæµ¶Ô‰&p!ö­”Ç!À¹Ëùã8Î7¡ÕägîÏœ@wím^ÊV±c°! ‰çœÆžsÛênœtÎ}°IcO^§nÒ„è­Ûl H`v²þ[M¼+ñ3ñ/äÇÿ  èäçZ–tʧ:&=m”’O^âñ7I縔iÓÝxüC«óPÍ1ä#ñEy`н=žò)×µ“g˜œ÷ÔÆù'D'?{òútl”'tõ–õð¿9×ÉéÎ6Ÿ8’¹”ùÑ-C]ä%?i´AX<®ˆŸi5½$oiu[&ñ”!¼¤ûtŸŸÈ½q|Mü:6tüN[Gâí1´›4qƒ$09_¬*þ§íj(ýc%—n§UÀÚ ç‡Y´„]4Pró[ÒݼQù”KH™¤»7}7±å˜Ü¸N^[OâÑ9N- ,'ø…®n7c’ǰ'o·¦=jôñ#ä·~£û`ßÓ–oËp|Òm]mØ Ó'À9nÏsæGkoãÝ9DÚ|Ò©#yèQ¡{ÞsÎ3W¢Û9D]±Oí±Ø ±m¥ü+ ,øžV·þ¤/Þ^»ºùŒ­Ï6jÌ­‰¯èÚZß_C}‰§|Ž'/ñhl H`:þTUóª¬ôÓK®ïØMJ@{È÷AíQÌì¹È£¹ùHˆ=¶¾“6ãºéÖÖ­—tÚˆN™Ü´$M~¤µï›|µ$°¼F­[Þ`ˆÉf i|BZUû •4:Ç'tÓÝv[¿B¼õ=)Û-C½m_ÚräæC ç…sœ9’–Û¹“9@ù¾ùÕ–mÏkêÊñIç|“N<Ç¥OIç˜6xŽnëËqj H`9 ´ë6=Œ->)¾#é¬ý¤»šzrLêì¦ÓFòIG°ÑF›ÆÖ¦G'$»Z˜.—öTwLÙ^Tr}Ož& H`nîgŒ¬\üѹéH9ÇÑíüˆ­Ûë¶LoËõÛµí•në3. ¬Ö?I¼ÍÏèSfT:öî±Ý4åZ[Oj H`þF­ÅîÚŸÏlQ+HÀ ÀÅ´QÎl”}q=µe H`U ´þ¤·7M}öÖÖŽ½ÏÞgk1¾Úr~£3š¾9„­[.åÑ£òFÙÛcK@›G õ m¼Ïÿ@ç >¨­wó;b H@Ø(nnÔév°€†F=ðŒ²‹M]}s¥ÏÖ=δ$ I Œò5£ì“¶çñÀâŒZ×í?×;[–ÀŠȗïX·í®$  H@€$  H@kLà¡ck¿;xDÍ@—€€]"¦%  H@€$  H@X4«Ft`”}DqÍ€$  H@€$  H@À28¡:õ‰> yÇ2vÔ>I`øÙùå=K§W×¾s»{ï)}ÇòvÕžI@€$  H@€¦Nपñ/—\Xòá’_-y¸Ä  H`-<»FñÅ’ü—ƒ86ƒ$ y8³ù§%ÿ±ä'Køï«Aû%prü©æÏ?)y\‰AÀ¼¼¾ú’ÿ·äyójÔv$  H@ÀA¼¯Êæ_46ƒ$ Yxl5psI|ú²¿3¶ ö$pt•øHI;>[éÇìy¤$  LNàV­ÿá¾uòj­A€$  ̆À½Um{óB›AÀ¬ üÍj ëH¿tÖ [ÿZø¾EßüùKk1:! ,3c«s÷—t}Ðo/s§í›$  H`^|£c^¤Çkçøžâ}¶žbš$  LDà‚G?}„]³Z|?O_pþôQÑ& L“À“«26»AÿÓ%bZ€6’€€yÚ´$ ‘Fý8ÔQ#0C5¼ßx”‘1 H`¾¼~Í—·­I@À’ð†|IOŒÝ’€$° |tª/ŒÚØé+«ms 86÷Ü;r ,+¯_Ëzfì—$  Ì•€€sÅmc€–ž€8KŠ–ºƒÎŸ¥>=vNkM`”ÿYëA;8 H@À~ ¸¸_R–“€$  H`/£À}g/ræK@“ÐÿLJÐã%  H`­ ¸¸œ§÷¡žnõÙzŠi’€$0 &·ñ;6~ @ # ÿYz–€$ U ààrž¥+zºÕgë)¦IÀDîqôWGØ5K %àüii—€æI@ÿ3OÚ¶% H@ÀT¼¬j¹»„ÿd"Ä_Zb€$0køŸøžè{ËöäY7lýkAà¼Å}%™;Ñ/Y‹Ñ9 H`Ù |¸:¿ý–eï´ý“€$  H`³ œ_Ãÿ‰m!n€$0/o®†,áá‰7ÿ^[bÀ~ ü`dÞ0(áZf€$0ϨF>Y’Ϳ߮øIóhØ6$  H@€$  ¬"ÓªÓÏ)9q;oŸN€næÏ© 6ÀQ5ào(ñÍõM;óŽW€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@ÀàKr €$  H@€$  H` <­:õ­%–ܱŒ´O€$  H@€$  H@ÀÁüTöHÉ×K.ù{% H@€$  H@€$  H` \Rc`ã¯+Ï[ƒ±9 ÌÀ‘soÑ%  H@€$  H@Àî^:"{”}DqÍÜtH@€$  H@€$°lNÑ¡“GØ5K@»pp8fI@€$  H@€$°|ô·/ÑgÔ& ìNÀ ÀÝù˜+ H@€$  H@€$ •&ààJŸ>;/ H@€$  H@XK¾¸–§ÕA-Š€€‹"o»€$  H@€$  Œ"àà(2Ú%pnš‡H@€$  H@€$0S¨ý‘vÍÀ.ÜÜŽY€$  H@€$  ,„ÀU#ZeQ\³$  H@€$  H@€$°ŒŽªN]VÂG#¬øÑ% H`Lþ|ö˜ÀæXüôjë;·Û{Oé;æØ¶MI@€$  H@€MàØêÀ_,ùÆ’O”ü‹’ûK €Ö‚À³k_,É9ˆc3H@˜S«‘Ÿ)ùO%ÿGÉi% ì—7ê?QòÛ%?_òäƒ$ yxM5ôö’S’¦Ï«mÛ‘€$  H@cx_•Îæ_46ƒ$ Y8®à¿«ñ=èO–œPbÀ~¼³ µóçË•>k?ZFÀ„ÞXÇ·þ‡øŸž°N—€$  H@3#poÕܽyÁf€$0k¯­ºþ‡ôͺaë_ Ï©QôÍŸŸZ‹Ñ9 H`Ù ÜTìú ?\öNÛ? H@À<ø+Àó <~Ç÷Ògë)¦IÀD.qôÓGØ5K %pA›hâ£æUSĨ$ ‰p¯|vO ^¿z h’€$ Í#ààæsG, H`7£~ÊëÅnÔÌ Qó‡_ñ3H@˜%QþÇë×,©[·$  ¬ /ˆ+sªì¨$ ¹à£S}aÔƒU_Ym›KÀù³¹çÞ‘K`Ñô?‹>¶/ H@KMÀ À¥>=vNÀÜ ø5wäkÕ óg­N§ƒ‘ÀJÐÿ¬Ôé²³€$0onΛ¸íI@Xn>@-÷ù±w€$ÐOÀëW?­€$ !7—s"<ÔÓ­>[O1M€&"àÔDø6þ`çÏÆOH`aô? CoÀ$° Ü\γtEO·úl=Å4I@˜ˆÀ#ŽeQ\ó†5O¾º¡<¶$0?ü³üžžæFù¥ž¢š$  H@À| ¼¬š»»„ÿd"Ä_Zb€$0kϨ,‰ÿA?\ò-% ìEàÔ*p[I;ˆ¿v¯Í—€$0¿UutýϯM¡^«€$  H@3#p~ÕüÛBÜ  H`^þB5”BÜWñWö³¾»Fqk á”üŸ% H@ó ð¤jäC%Ùü½Š?a Û†$  H@€$ U$pruú¹%§¬bçíó W=øæ’Ç-¼'v@Ø4GÔ€Ÿ^rÁ¦ ÜñJ@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@€$  H@Àâ µø.Ø H@€$  H@€$ÐKàœ²¾´äÈ’/÷–Ð( H@€$  H@€$  ¬$7U¯(ùú¶ü³•…–À8b ú°.]8¾ò}+2˜ßª~>¼"}µ›Àþ<µŠ!ñë轄šw+3|þSÛ¶ñéJ_Fņ¥"ðÄêÍÅÛ=jÏר8EGåa'L#¿;¾Tõ¾cX»$ u!pt ä%%Óð£ê€Õ¨<ì„n~×ÿÿ«%÷—$ Ý œWÙçoé®­¤ÉN<ºk;³ ¿PÒýäâ?.ÛGKr\t™³‘G@w×õgËö^2 €Æ%puÿL,«þиƒ²¼$°^Q½\V¿ÓöëϬÍÍëäSkȬÀú©Í;5ŽXAàÊe{­XÆømÄ™p˜—U5Ë¸Ž»}ú Ó®µH@›HàÍ5è®SY¶ô7ñÄ8f lþ£ycɲùœ¶?_­þ¸çbU‡ø¾%Ÿ?Ì¥¼M°ªŒí·$ÐOào”¹½^,cü¯õw]«$ÐC€·íx»n×rútwõï1=}×$ H`_ήR|´6NeÙô}Õ·Ó÷5 I@«Hà¯N/›ßiûóË«uƒúüç—|þüþ ‡*M#ð„ðƒ%í5c™âô>$ ýø»Ut™Öq·/ÿfÿC±¤$ ~ï*s×¹,Kúíý]Ö* ¬ jËâoúúÁ¯·–—ogò–fß¹[Û_\^töL˜ÿPu,ƒ¯éëÃoOa|V!M#ð”ð2¿ó]›vB¯$0}¯«*ûn–ÁöÊé×% %#pYõgüM·Ÿ­~ñqÃrøçÕ½î¹[†ô=Õ¯S–½“€&$ð?ÔñËàoúúð§&›‡K`S ¼»Þ·¦mãksøúƒ$ ‰ðkÀw”,Ú©uÛÿBõ©ûëI Ôƒ% ¥$ðÃÕ«îú_†ôÿ¶”´ìT—À —tþüÛnGMK@kGàèÑ-%ËpÍjûp[õ騵£í€$0?XÍ´ëiYâ?3ŸáÛŠ$° .­A.‹sK?Þ² à£$08¹|­$k4¿.û4ÏÍÊøô’Íæ0¿rm€ÖŸÀ?©!.Ãu«íÃ/¬?vG(™XÖ—cž1³[±$°q.©·7ËæÆ,Í%ð+5ôeð;éK6¬¿U]͹[}sõÇ7ØWgþØS LBàâ:xüNÛ‡çM2 •€ÿO1h×Ô¢ãà9‘€$0mWW…‹vniÿCÓœõI@KMà%Õ»¬ÿeÐa©iÙ¹.'•á¡’e˜;ôÁ7Ø»gÈ´Ö›÷­Ëâ>¹Þ¨æBàùÕʲ¬iúñƹŒÚF$ "ðæí²8:ÜFM=+!këï2ø ¼a5'ä;—dþ0‡y#È  l¿\C]†ë}àhƒ$096Ó—a]ß_ýxìäñ H@‡8»’Ëð³ç÷U?N?´k¦$ ðwjŒËp£õo6€õ:ñO/Éüùð:ÂuLÀ®N«Ü{K} ã>žûyƒ$09¯*½¦iÿ×'Š5H@è'ð®2/Úѽ½¿kZ% 5'pnoþ ñ]kÎy]‡w\ Œ_¾\ô5ìG×°ã’€v%À//Úÿüή=4S‡À™UøÁ’E¯ëï§Ó–•€$0×UáE;¹WŽÓaËJ@kE€‡—Eú ›ªý#׊èf æç<¨öÏØ,äŽVØ&À?yý¢íòlH@S%ðÛUÛ"×õ—ªý£§:"+“€$ÐXôÏž¡úâ/'6'Ĩ6ŒÀ¢ÿ ñ6Œ÷º ÷95 EÞ¨ÿæºu<À¾ ðÏ£J僾ZmŸ¸ïÞZPØï¯B‹ZÓ´ûÖýtÒ2€&!pi¼(G÷–I:î±ÀÊàŸ·—,Ê=så :€-pþ¼ZüÀFøéý¢®_¿¼Ñä¼fCà˜ªöKµ®¿i6òV H@¸¤¢‹rr>|?zŒI`S ü³ø"|Ðå› |ÍÆýc š?< ð `€6—À5ôE\¿h󥛋ݑK`¦þiÕ¾ˆuÍ?4 €æBàêjeÞŽîCs™H@ËNàyÕÁyûÚ{Ó²ƒ±û"ðø*ÅwñÍ{ýì¾zg! H`Ý \Vœ·ÿ¹®Ú ,ˆoáÍ{MÓÞ__ÐxmVØ@o®1ÏÛѽq9;d H ŸÀ'ÊK@S'ðÃUã<¯_´õ÷K Àì|´ªžçºæ×‡Ÿ8»áX³$ C œ]ɇKæåèî«¶N?´ ¦$ &ð7kìóò?´Ã†‘a}|_ ežó‡ kƒ$ œ\òµ’yù Gª­§•$ ÙøÑªz^kšvþãì†bÍ€ú ¼«Ìórtoïï‚V H`C ð_Oþû9/ôª å¼®Ã>ºvËçÏÿ²® —$p ¿RGÍëúõßÔC’€Æ!À§Dø´È¼ÖõŸ§s–•€$0 ¯«Jæåä^9[‡$°VÞQ£™‡ºµÚñÇÖjê óç4ªvÎZ?|ŽH˜€ÀKêØy\¿hã ôÓC% ýøõ*:uý•jç¸ýwË’€¦CàøªæŽ’Y;º/TGM§ËÖ" ¬×ÔXfí¨ÿÿZ#fåQßPÑyÌŸÿòh“Æ$  츶b³öA÷T§ì´hD˜%?Y•ÏzMSÿ?›å ¬[Àn.­ÌY;º·ìÖó$ %À[y¼7kôœ%¼þÿƒ9ÌÞ–7H@èø;e˜õõë׺š–€fF€VxqeÖëú3K@؃À%•?k'÷Ì=ú`¶$°¹ÞZCŸ¥ºrsÑnÄÈdÆó‡·äy[Þ  H KàÜ2Ìúõ¾»Û¨i H`¦þQÕ>ËûÒ«gÚ{+—€$°8¢Y9ºí£}‹H@›KàÙ5ôYùêý››‹v#F~jòÞ’YÍ¡¾¤$pP¿SÎÊÿÜ\uyÐŽyœ$p Ϩ£fµ¦©÷o¨W$ H`ŠÞ\uÍÊѽqŠý´* H`= |¤†5 Ä7œ¹žÈUC€ÈÍbþPç‹›vŒJ@èx]fåxÉ  ÌŸÀªÉY¬kÞæÍaƒ$ …8»ZŸÅGî«zO_èÈl\XoªNÎâFë«0xû81ïœÑüá þ €v#ÀWÜ^2‹k?td€æOà/U“³XÓï™ÿPlQ@?w•yÚŽîíýMi•€$pÇVŠLÛýÀ!­˜XW|Dîó%Óž?w]9. H`ªøEÏiûŸË§ÚC+“€Æ!À/oó ÜÓ^×vœNXVÀ, Ìâ# ¯œe‡­[X+üÃ`š7Z¼‘Á›†Í ðj˜Óœ?T}çm:G) LHàyuü4ýuñf¼AX]MOs]­ê;qqñe H@‡àA™_;œ–£ã'Ôù)uƒ$ ýøž*4-ÿC=¿¸ŸF-³6ί‘°i7­9ô¾µ!ã@$ yøD52-ÿsÕuÆ<:mÀHßQ9ÓZÓÔó+#[2CÀ‚\ZíNËѽeAc°Y H`5 ðƒ›J¦åƒ^´šìõÞ_ÇNkþüðýðP H`óð‹óÓò?¿¹yø±–ŽÀÕ£ëK¦µ®_¶t#´CÀƸ¤LËÉ=sãi @—ÀÏÔÓðAŸ·a˯×OiþÜ]õœ¼D„$0/O¬†,™Æ5ìÕóê´íH@»øû•;5ý¹ª‡ Eƒ$ ¥#puõhRG÷¡¥•’€VÀÓ«““úŽÿÉU¬}œ:“ªF¾cgÒ9ô¯¦Þ3+”€6À;j“úŸ?®:ŽÙXŽQ+@à©ÕÇi|½ÈO­ÀXí¢$°¡Þ\ãžôæåÊÎaK@“øýªbÄÚS&ï†5¬(_®~O28öå+:v»- ,–ÀkªùIýÏÏ.v¶. t¼·Ò“®k¾§Ø  H`) œ]½z¸ä Žî¾:öô¥™’€VÀª“õ?Çšas |k }’ùsCäæâsäÀxsïÖ’I|Ðs'hßC% éøsUå$kú÷¦ß%k”€$0]ïªêêèÞ>Ý®X›$°aSãå;Øêƒ^¿a¼îá®™`þð=” H@%ðÖ:ð ×¯+Ú¨ÇI@3#pbÕüÕ’ƒ®ë¿8³žY±$ )x]ÕsP'÷Ê)õÁj$ Í%ð/kèñAwÕqþxÃæÎ›Œü=àüaÎ]”JÔ€@àÙuÌA®_óãhÏC$ Ùø¥jâ ëúž:îÔÙwÏ$  LFàø:üŽ’qÝ꘣&kÚ£%  ¾­Œë(ÏÆ¡A炃|•ňNÀ|¤ê÷öPsÖÚ¶ H`ú^\UŽ»¦)ÿo§ßk”€$0—Vµã:º·Ì¦+Ö* l#j¼×•Œëƒ¾cÃ89ÜÑòUþ€ÕhžæH@û'ð¦*:îõë?ï¿zKJ@ ðéjsÜuýŠôÓ&%  ˆÀ%uÔ¸Nî™jɃ$  Nàï•iôù*ÏÆ¡AxmÉ8óç¾*ïXAÎ  LJ_‚OÇá³ ÀòøÛÕµqÖôÍUÞOÆ-ïù´g@«Ë¶_G÷¡žã5I@8(§Ô”ì×ýÃ6äqkIà¸ÕWJö;~}-)8( H`QÞ^ ï×ÿðµ;|ýŽAX^gWׯùz‘·,ïPì™$ ~o.ó~o^ÞØ_…V H@&ð»uä~}ÐÓÜŠ®+ÿ{Œùó}ë ÁqI@ !ð=Õê~¯_¿¸Ú¨$0.ÿRìw]_µ›â äÓV{ˆö~†þFÕ½Ûü!ï›fؾUK@›K€¯¦ØËÿüäæâqäXI¿P½Þm]?Pùg¬äÈì´$ "À—ïöÎ*ß_8rªH@³"pIU¼ÛÖ¿›UÃÖ»žP£x°dÔºb-Fé $ e%ðûÕ±Qþ‡ºzʲvÜ~I@½¾¥¬£Ö4ößì=J£$ "piõu”£{Ë Ã®J@«Ià“ÕíQ>è{WsHözŽþÃ.óç¯Ï±6% l7ÔG]¿Þ·y8±Ö‚ÀÇk£Öõ«×b„BØh»½óÌ&ãà% yø‰j¤ïFë–²ûã ó8«Ý7ã}ó‡7Ÿ¸ÚC³÷À’xLõïî’>ôÃKÞw»' ôàŸ‡}kúË~Lÿ!Z% QŽ•±öeîÛ¬ñ|ª¸¨ÓÈå•fsÐ  H`–άÊo,é~Ý?Þðã³lغׂ›Äü'nêīZƒq H@3 ð«UçŸïÔ˦ ×6´AX-¯îr_ÑÝìû¹²ýµÕнÝ@l^/UXôÛí&_W~ß1«jû—Õq~ͬ ØŽl Æ%  Ì€À­Uç)ù¾NÝÿºÒú “‡à{¶~­¤ûq_çÏa¨4H@3 Àýrwð·Êvo‰×°·J ̘ÀmUÿ;K^ÓiÇûŠ“KA »á×ÝÃêæwÓ3D·C³n°m¯/[t_vËë+¿Š¶'U§?[’•û+þä’;J €fM€›¬·7|¬âÏoÒF%°o¨Ì?j Ü^q®aüZŸAÀ¬ ðIš§5|OÅßפJ@«E€JÿFÓå«*þÜ&mT‹&°ÛF^òº:}eOþTõ¼Þ̦]4ƒ É Út[6åS®/Ýæ­zœ7pþkÉwm„NÝU2¯óµÝ¬JØP¿SãþrÉã¶ÇÏ]úŸmª= |¦JüaInÎÿ}Åy3Ð9T ÀÌ üÛjá'·[¹©ôï—趨$°‚ÞS}æù8_/â}é žÄ5ír6ï2¼Qiìm^Òèî¾W[.õNMÏúb˜ÁDÓqâ}ÒÍ#MHÙÄ‡Æ øó¶c6¹‘™õ¹Ú¤QØ'.<¿^òÆ’‡Jø¯«>¨ öM€›ólþwþì% àsþN ÏÄ»ßi[&ƒ$°bødÊÿ\òp ÿXô¾¢ –Š@6îú4¶Öžt«¹fµ!å[ÛÄñn#WØTº[M¼OòQWt_yªmí¤×=Wä# ÷”|c oO$  Ì‹ÀÅÕÐe%ï*ù³ójÔvÖ†À©5’O–ÜPòµ•‘€V…ÿ¸zYÉ JøZƒ$°ÚøÌÿ^ò»%¯[í¡Øû5$ͺVïKcco'ù] žö8ÒS ÙT›Z…Û¥Þèvc/ñVo÷·KžYrÌv* H@€$  H@€$  ¬*>Qõ¹’Ÿ-ùW%ÙŒn7óâ×L6³AW}˜j ÞÔ>Ò‰·ú­eÃT[·2 H@€$  H@€$  ,¾kýJØàc³/›€Ñ±WÖÎ[‚ħfñûÙü£]äÕ%ÿ`*#± H@€$  H@€$  ,' ª[·”\Y’—æ¢ÓcÒlvíÉ?°æM¼Y:¡$ѯŸUãÖ+ H@€$  H@€$ %"ðW«/üMöŲ_†ÎÚÔ7ÿÿ´='¥ît8ƒÈ 2Hô7SÐ  H@€$  H@€$ 5'p^ý°Q_»f?­} øÄaÚ€éP6wÛü£íÇæµ$  H@€$  H@€Ö˜›üøm^šËP³áÇ>ß ˜MÀäO¬g½H‡é|ûÖ_ÛÛöG1xäÆj€$  H@€$  H@Àê`kDèÝÛ.›À¥ß¤ƒ­´of"ìx$  H@€$  H@€$°)Žmš÷¢[ÉÞES¦9lüèn»ŽãÖFç­&Î&`$oÿ±ùç`A0H@€$  H@€$  l öò©ÍGaóÑßv_|Ò)Wу…in¶=è¾ùGšÍ?Ú‹v°%f\€$  H@€$  H`Ý °– ¿èì›±Ñ!oja€ìLæÍ¿ÄóñßvóÏ À©F+’€$  H@€$  H@XìÅeã;ÄÑÙGCO5L{°ÛÁ|ô7:€h7§z*­L€$  H@€$  H`É ð€lö=¼­Ù##ž½3òØg›øã¿TFåÓ ÙüC#ÔMœEØü›öæcUi€$  H@€$  H@ÀÒ`?,Â>Y6þ²–}54!z+uÀ¿T>ÍNµ%žÁdí€Ó$o]€$  H@€$  H@ËN ›Ù+‹îî¥%=•ñÌâ-¼¶ƒD«ÙüË`§2ˆM¬äÖ[okØOxÂÆ*oý»ã’ÏtøŒ;/woÕÜEp]ì~äs(Ÿqyzô`°—ÿ8hý{Õ›~Œ[ÿ~ëµþØ]/ ÿqÏëî£2wÞ–eeÜãÎ'ûrýzSøŒ;oúii•€æL€=±¼ Ç~ñvߌÖÒ}˜¦ÚÍ¿t6¶ *ƒD$  H@€$  H@€$°)Ú}1âÙ7Ë>ZöêbŸ —T:•Ê:•¤£hÚ銀`&%  H@€$  H@€Öš@6»ûdÙG›Éàgµ˜N÷é Ð À™œR+•€$  H@€$  H@XRì‡eo¬Ý7ÃÖ¦§ÚýYnÒѶã\«§:+“€$  H@€$  H@ÀÈF_»?Æþ¡«·¬SøKc³ m§Û@âÙíœUÛÖ+ H@€$  H@€$ e#À^ûbݽ²v>'M|â0ÍÊ2~Íä˜ô±%ÇmËñ¥‘·å¤Òÿ®äpÄG yä‘Cl&$ Õ&0êWØüÕ²Õ>¯ö^«L@¿´Êgoþ}w¾ÌŸ¹-J@‡ÐÊÔVû[#”ýî’{JîÝ–ûJß¿-”~¨äÁmýpi~x¢_f“nV¡;RÒ±µñYµo½8ŒÀí·ß>øâ¿8àz×]w |ðÁá†ó‘G98æ˜c'Ÿ|ò€M©³Î:kpúé§v¼ H@Ó& _š6Ñõ®Ïù²Þç×ÑI`è‡Vá,ÙG H`É t÷IJWF·»ySÊ,7ÛŽ÷ ¦µMm@V$>×\sÍàꫯÜsÏ=ƒSO=upÚi§ N:é¤;òÈ׿þõ¡<üðÃn¸apå•WN<ñÄÁ3žñŒÁ…^ØW¥6 H@Ð/M„oãv¾lÜ)wÀX:ú¡¥;%vHX]Ùä‹f$m|&#›õ`·Ó퀈$0S7ß|óàÃþððM¿óÎ;oØoýŽ>úèÁ±Ç;8ꨣlü=ðÀC}Ê)§ Î8ãŒa™+®¸bpÕUW ž÷¼ç Î>ûì¡Í?€&! _š„Þæë|Ù¼sîˆ%°lôCËvFì$°²=—!Í{p.ƒZ‡FüއÉÏâå—_>øÌg>³ó›|üã‡ñ壾}ŸÇçM@> ÿ?þã?<ùÉOvä}ï{ßàéOúàùÏþä³ ¬(ýÒä'n“ü’óÅù29kÀdôC“ñãèMºnMNË$  ,77—ûüØ»`ïÝï~÷à«_ýêà™Ï|æà¾ûî¾½wî¹çßök«äÆð _øÂàYÏzÖð@6ó˜Ç …7o¼ñÆÿõ¤žë®»nÀwž|÷wwïæa[¯q H@-ýRKÃø^œ/{2_˜5ýЬ [¿$ ù˜Öë†Ôï#l*ò+ÀH÷W€O([~øäŠ¿­äÀŒ¿<¾v˜í„¿šÚGåPÛ»Þõ®M?æ›w|ß72H?üñž÷¼gðÙÏ~vðªW½jð¤'=é¹Ç±ÈÝwß=øÔ§>5<–ÍÀN8aðŠW¼"Õ¨%°1|“âà§zý’óÅùrp)éМã&^·NË#%  ô`?aDøÁ²ßU¯痀»¿œ_æ×€ùàGJÝШĸ »iF—¶ñi¶a]IàƒüààŽ;înæñßüÍß<ü1>þËÆr6³ˆE™Mç6Çñc ÔC}lò í$  쇀~i?”,ΗPK@‹" ZyÛ•€6Œ@öÌZ ‚¤§ŽcÚ€£:˜´zTYí8ÞÎûÄ'>18ÿüó‡õ½øâ‹‡›{lâµ{‰ÓÈC=4üñîæ`Ê 9žMBêãC¨ŸvhÏ  H`7ú¥Ýè˜×%à|é1- Ì›€~hÞÄmOÀ¾ °Ÿ6Q˜×àDô` ìE€º÷¿ÿýƒ‹.ºh¸aÇv°i—7ÿØàëòùõß¾¼Ö–M@ê%N;´G» H@}ôK}T´"à|EF»$0/ú¡y‘¶ H@‹!ààb¸Ûê” |úÓŸnäwÜqÃéò=}làq#3JèBÞU¦µSõò1`Úaãv €úè—ú¨hEÀù2ŠŒv H`^ôCó"m;€CÀ ÀÅp·Õ)øÃ?üÃÁSŸúÔÁ1Ç3à‡RxK¯Ý¼gðþûïßs³0ÇS/õÓíÑ®A@ýRm£8_F‘Ñ. Ì‹€~h^¤mGÀb¸¸î¶:E·ÝvÛ9þøãgœqÆð{úذÛOÈ€¼Ý·Ÿ@½| íÐÞW¾ò•¡ìçXËH@›C@¿´9çz#u¾Lƒ¢uH@“ÐMBÏc%  ¬7Wã<ÙË]\wÝuƒÓO?}pä‘GN9å”áÛ|»?$+o²±·ËOtr ›…´C{§vÚ€ö €Zú¥–†ñ½8_ö"d¾$0kú¡Y¶~ H@‹'ààâÏ=˜À7Þ8Üäc¹¼ÇwóeCM½Ý¤»¸[Yò¨—úi‡öØx¼é¦›&‡K@ëF@¿´ngt¶ãq¾Ì–¯µK@{ÐíÍÈ€VÀÑ«>û/>†Ë÷ñ{ì±Ã :¾§a“îè£ê>J¼Á÷àƒî½÷ÞaʳÉ× ÔÅF!BœM@Ž¥=>ü¥/}©{ˆi H`à è—6|Œ9|ç˘À,. L€~hêH­PÀÒppéNÉV‡ø¡ ÃþÜwß};}|<7ßçÇf|lÖe#°»É‡ýì³Ï|üã|îsŸnîµ­²ÙwÑE N=õÔz“Ÿ FÚ7H`è—ö–õKƒá&íŸØf—t¾löùwô³#àukÿlõCûgeI H@«JÀ ÀU=sö{‡›|¼¹ÇF_»˜Ù$MʲyÇ|'žxâð;~ô£‡mþQžº;î¸Á7}Ó7¶˜º(c€$ÐÐ/µ4ŒïEÀù²!ó% YÐÍš°õK@X<7ìÁ„xK/ÓíÛl«ÏÛ|ßý÷ß?xá _88ÿüó{?úËqlžuÖYÃïýkë!žwí¦'pë­·n,‹ÿ™ïÅ¢q è—–ÿ$.“_r¾8_–Ÿ€=\wú¡å?ÃËtÝZ~ZöPè#à`m+E€ñ²™Ç& ’M¾½A9Þî;ï¼óv-šzÛB¹I¢]Þ$4H@h è—ZÆ÷"à|Ù‹ùÀ¬ è‡fMØú%  ,ž€€‹?ö`B§œrÊà®»î~\—Í:6çú~Ì£¯ÊîwÃ0Çs ÂG%h—ï4H@h è—ZÆ÷"à|Ù‹ùÀ¬ è‡fMØú%  ,ž€€‹?ö`BçœsÎàꫯ<ùÉO~T—íÎ:°ÑÈG€o¹å–á÷κ=ë—€V‹€~iµÎ×¢{ë|Yô°} H@?ä€$°þŽ\ÿ!:Âu'pá…¾øÅ/?|Ï=÷ ‡Ë[}³ >þû¥/}ipÁ¬;bÇ' ŒI@¿4&° /î|Ùð àð%°ôCKpì‚$ ð À¶úÙ8÷Üs'Ÿ|òàË_þòðW}O8á„™6ÊÆâ}÷Ý7lï´ÓNþHÈL´r H`åè—Vî”-´ÃΗ…â·q H 臜€ÖŸ€o®ÿ9^ûy䑃K.¹dð±}løà»ï¾{ø}³xïþ£~~EøãÿøàE/zÑÚóu€ÀøôKã3Ûä#œ/›|ö»–ƒ€~h9΃½€$0KnÎ’®uÏÀ _øÂáwòÝtÓMÃ·óØ ›Å õòöíðC#Ï{Þóæ6F’€V‹€~iµÎ×¢{ë|Yô°} H@?ä€$°ÞÜ\ïó»1£;þøã¯zÕ«øÀ†¿ÌË[züP›€èI%õPï×¾öµa;ßÿýß?8úh?E¿1“ÌJ`Lú¥1mxqçˆO‡/%  Z‚“`$  Ì€€3„kÕó%ðüç?ð¬g=kð¾÷½oøÝ»îºk¸ñÇÇv'6©7ßÿþ÷ßü{ö³Ÿ=ßÚš$°rôK+wÊÚaçËBñÛ¸$PôCN H@ëKàˆ) zØL<ª„W¢c9¾â¿Îpâ¶œTúm%‡>VÉÛV›n½õÖ^OxÂzí·ðñÜ·¾õ­ÃÄ·}Û· Ž9æ˜Á±Ç;|SMÀqóñ¡‡nü=øàƒÃÍ¿ãŽ;nðc?öc¾ý7Lçó°–¸¨çñ`'gSýҲϗeíߦΗƒ­®ùµ¬óe~V³%ÏÛÁΛ~è`Üf}”óyÖ„­_Ó'À~ˆðƒe¿»äžm¹·ô}Ûò@éÈCG.aCc¢Í2ß,‚†õ!ÀGÞô¦7 7‘ßùÎwßÚcïÞ{ïÝyp?ß Èf!oýqÇóöõñ‘ß7¾ñnþ­Ï”q$˜9ýÒ̯UΗµ:F+I@?´’§ÍNK@Ø“ÀÈíÈ=<´€oÊcâ”ÿá™ !ßÕ÷«¿ú«ƒ«®ºjð’—¼dpÁ øu36ÿŽ:ê¨aœÝøvG>Î÷ý¥üµ×^;ø½ßû½ÁsžóœÁë_ÿúá…“õΣ%°šôK“·MóKÎçËdôK§vÚp ü0ùú¥™ŸÒ™60­ùâul¦§ÉÊ%°ÖôCk}zœ$ nî 0²ªòð‹æ­6ôøåßl ¢‘“O>yðÔ§>u¸ÙÇG|ù^~匇ì;ï¼søÑ`6ùåàÜqñ¶ 8±h€$0Š@ë3ê—î¸ãŽ¿„OÓ/¢½úöi̯c«?I@?´Hú¶- H`>ÜŘç±[á­6¦ ãà&Òw4ãlà±Ù—0î+ÿ9N-M" _:øÙŽOÊV·&ýR—Èf§/›}þýôxÝ:8KýÐÁÙy¤$ e%°õ‹ËÚ» î×ñÇ¿Á£wèÀ2Ð/-ãY±O€$0Š€×­Qd´K@À&ð À%=ëy;-Q]ÒnÚ- H`ƒè—6èd;T H@k@ÀëÖœD‡  H@S#pÄ”j¢Þ&<ª„MEäØFx 9¡äÄmáó—o+9$𺹿|€$  H@€$  H@+D`Ô×ÿÔò+À~x…&]•€$  H@€$  H@À¸Ü—˜å%  H@€$  H@€$°BÜ\¡“eW%  H@€$  H@€$0.7Ç%fy H@€$  H@€$  ¬7WèdÙU H@€$  H@€$  ŒKÀ Àq‰Y^€$  H@€$  H@+DÀ À:YvU€$  H@€$  H@ãpp\b–—€$  H@€$  H@À pp…N–]•€$  H@€$  H@À¸Ü—˜å%  H@€$  H@€$°BÜ\¡“eW%  H@€$  H@€$0.7Ç%fy H@€$  H@€$  ¬7WèdÙU H@€$  H@€$  ŒKÀ Àq‰Y^€$  H@€$  H@+DÀ À:YvU€$  H@€$  H@ãpp\b–—€$  H@€$  H@À pp…N–]•€$  H@€$  H@À¸Ü—˜å%  H@€$  H@€$°BÜ\¡“eW%  H@€$  H@€$0.7Ç%fy H@€$  H@€$  ¬7WèdÙU H@€$  H@€$  ŒKàèq°¼$  H@€$°yŽùãùÁŒWÞúwç%Ÿéðw^îÞª¹€V‡€o®Î¹²§€$  H@€$  H@›€€c#ó H@€$  H@€$  ¬7Wç\ÙS H@€$  H@€$  ŒMÀï™H@€$  H`y Üzë­ƒxà>þñwÜq‡ØLH@¸çž{_ùÊW5Tì„NœqƇØLH@XUn®ê™³ßÀX~í×~mpÛm·vÌã÷¸ÁýÐf×°x¿ø‹¿8¸æškë7ã?ýÓ?}˜}†n¸aðs?÷s#›zÍk^3øÖoýÖ‘ùɸþúë¿ð ¿äaú¯xÅ໾뻳÷~ögvpã7öe ^þò—^ùÊWîäýÈüÈàSŸúÔN:‘£>zðÞ÷¾7É©êy®½ÏþóƒŸÿùŸŸjÿw«ìiO{Úà¯ü•¿2,²¶»õͼÍ%på•W¾å[¾eðàƒî@8óÌ3×^{­€;DŒHàpwÞyçࢋ.°˜pê©§®ºêªÁÙgŸ“ZÀÊ8bJ=§>N|T ›ŠÈ±_qä„’·å¤Òo+9$qăGyä› H@“¸øâ‹Ÿüä'«æ¿ñûØÇ³kX<6¯ú6¥N;í´Áí·ß¾Þ{ï½Ã7Ð}á oxÃà—~é—ú²±ýʯüÊ€²£Âë^÷ºÁÛÞvØ%ò°â<àã}Xi ½ãï¼êU¯Ú1½à/\~ùå;éDØl7 bŸ†žçÚûà?8xÑ‹^4n龜—¾ô¥ƒË.»lXvl÷ÕI m‡~xpÉ%— >ò‘C~÷ÒK/üÿì Uµ¿wHB*Š”@¡„ªT©RA@E@ù[(âSP,€ðDyXá ÒE@Q±PiÊST¤é( !îýæœu²ïœ™SîisÎý¬ì:»|çÎÞ{Ö왑‘Àh"÷ÕäZ_>æ˜c¾ð…a˜vÛm·ðóŸÿ|X@}+Gö±øçMuÇAª‹‹yeÕ~×WÌ/]`:dÚ’±Œ€FúƒÀi§^zé¥Óü@IDATªÆÎž=;ì²Ë.UñD´N Uæ­ßzÚ[‚vn·ÝváW¿úUfÁ×_}f|:ò/ùK:jXøOúÓ°p^àoû[®ñoÑE ozÓ›òm*~Ð~Ǧ:Oft@»Ï­“N:©Êø·ÆkÔ¼áÐÁîQt™€v–é±l=‰ 6ºá¢ ‹,²H?~|˜ö±…7¿ùÍAïÒD ô+¾ܯ¿í† žˆß©—n€.æn¸á†tô°°Ñkä±óô#|à )je¨D ÑCàÀ óæéé¡…¢÷Üî»ï¾ #ðu…Àã?.¿üò ]Úº£ßaâĉ‰ÑO®â_|ñÄã•Oi:NÇ«¤û>úÑV½/óÉ'Ÿ ÿøÇ»ßj„ ÐFÛ“¢ @`ð èq:}ü!OjåtŒv æ½³/.³‘Ç€kÕ…0¦‰ƒM@(^sÍ5UÔGjôê‚FEïLËÒF'_Hnð\wÝuÉn?íÓN?¹k¯½vØ`ƒ ‚Þ‹ªMh—Ÿ\…¯ô8¿v ªœFnÁ½½ôÑœ÷¼ç=U…êݼõvðWD ày€ý4€úƒ€v~ó›ßÌll-£œhôâ!ëcq…÷ßxì±Ç⨊úôéA¸IË‘Gþýï§£“ ÔªÈ>ŒÐE›ÓjDÎ=÷ÜÜÉl»í¶aýõׯ[Ìj«­VÉ3èl+ÅS8Úy|ì±ÇVµK;Ë>ò‘TÅÑú®½öÚ b+­´RòŽ?IR½“uìØ±•±VyôN@½ÃXï”L˜0!yÿŸ¾6«R•£WBè‚[o½uåøÎô€Rc‡vX8óÌ3“G´ãxk2¸#€ú‘À~üÕh3 ô”€v×åõèîüùó“ ¾¬F6j¬÷p-CcÞî¿=öØ#«I7kÖ¬pÊ)§4Ô=^—÷5é½öÚ«iÃÉ ³m*™zBà§?ýiøë_ÿZU÷ûÞ÷¾ J Ý! ˜Ï<óLXa…’w.êÞ''Ã_ü®?}øã¶Ûn ÷Ýw_òáå–[.1ª•JÓŽÍ•W^9,¹ä’‰ñOåÉX(㢾<Ž4N Ö×~땲Î:ëÍ¥é~ý⿺A·é¦›Ö+‚t@…#€°p? ‚Š@@œG}4<ÿüóÉ”>ê …y§E»³^|ñÅdñßL]º8xä‘G’Ý]O?ýtrÑ¡G‰´ó@HH.ÀôF±ÒפÅFǺ8kVÞøÆ7&»5²¾J­wpÝtÓMa‹-¶È,6˨GÁô¢øXô÷§ßT»A²d$À¬rŠ׫s¯hòÚ£!iÇP3uª, 46èÃ2z$±¢²Ûun5Ò.Æ»…”Äþ¸ãŽ[ùöÛo¿(„·“4®?ñÄÉŽ=í¼Ô£½rõûèk¿iÑ<¡ùC_–(Ÿ‹ü:Gõ5`¡ôÚÍç?üp²ƒ|£6ò¬¸& s(mT•úØÎ¯ýë×Nñ€ÚO`û™R" Ð&wÜqGºøBÙÃîÊHrÉ%—x0Y4Ë@Ó¬h1þ½ï}/\pÁɇâ¹ÞųÃ;}qøÝï~wCÐG}t²ÀO·ãïxGÐZ%ªã¢‹. ÿû¿ÿ›|ýOù̘1#<øàƒéêÂÿøÇ?ÂÙgŸ,Nÿþ÷¿W¥{„ €zdUíÞn»í<:Óm•y«Çg6ª…H“Î?ÿüäq+¯¼²ê+Ò2þ­µÖZáï|gЮ¯õÖ[¯¡Úô÷ W\qEf~½·)˨ß;o§NÖ#|z`³@õI_*Ì’SO=5óoKÇ|éK_ªÒíß±Ýç^¥#]ô4Ê6nRžáFã—C–è†Ài§–ŒKÚ1$C›DÆk½3Lxj÷a–![?zÔù²Ë.KŒ:dTØpÃ ÃÆoö³‹ÛFÿæ“J£:unEU óvb¼ó Äø˜cŽñà0W_bÕêÉ׿þõ ¯¸¦E7޾üå/W¢Û}ni Êÿ§M›6Ûl³J½x:G@†¿[n¹%yœWñê=±r³ Þ } ê•W^Iòh^ˆ×žGq^žŒ€zXõhNЮA¤ó4—êNÿ–¿ùÍo‚Æ$h@£‘€n%k Å¢¦“M7]Ætºé*¦k™n`ªíÛ›îfúnSÝî¦vÇËæ;€ÀÐÝa6>¤Ç‹¼°½L» Ÿ-Ò2˲÷¤%ymÇÖP^žt=öØÇЭ·ÞZUG:¾ä—Yç7¾ñ$«íðRYéò͘.jXØv tÐACvÁ_ulº¬tø­o}ë]€+/´Ê¼Õãã¶¼éMoÊìŸ]ØÆÙrýö²î!{$4³Œ4¿ë]ï²ÝE¹eÆ _ûÚ×rËÞ}÷Ýã¬ÿÝwßyŒþžlGWUÚ§?ýéʱ±Ç]Ò|éíŽÝ-·Ü2Î:ÌŸõ÷¦cÇ7,_;Ǽóª“çÞ°ÎäÌð›ÉO<üÍ943ºQ¶ñÁñïû?þø$›=j6d;UsÛéǨnÛQT)Úv.™q¯îqC?üð!»¸­Ûˆ§ÓçV܆NŽw^íŒÌeUë|òãån¾ùæ™e˜ñ ÎÖÖyMðƒ̬׌ÂÃêm40nã¡¡,môøÑ–OçÎ~ô£!»Á4ôÇ?þqÈ ôCf²›¹jÆ¿¡ŸýìgCšCxà!3ææU9*Oåª|Õ£úš=gGÛïÒÎþæíŸûÜçÚY eAJÀ×j®ìa²‹É>&;™ìe²›­b*;šìi²«É¾&;›ìm-?ŽÖrÖ€@_лx´3Nws½ûE;tn¿ýöF²gæÑN¿·¼å-É{d23äDÚÅBòÞíÒ‚fE;6Ùd“ðûßÿ¾ÙCû&¿¸rÈ!aŸ}ö úPF3rá…&_düío[÷0íªÌ“n¸!3)ëñ_=Ê©]ˆY;±ò¾ü‡?ü!sLj*Í{ÿ_fƒzÙ‹s¯Ç]n¸zíìÒÎ>} žhL:ꨣ’lú´>pÖYgÕ;,C¾úÕ¯3"ÕÍ« Ý:·¼1ŒwN"ÛÕïï~si~A:O@»rçÎ[ùâ¯Þù§Ýbv›«j•~;í¢­—Wå(ÊÕcÀÚ}®úT/ÒyçÒO~ò“î4€Z ´‘À6¤(@ ÿÈ·Ûn»…9sæ4Õx½«o×]w zÏHD_*Ízl«VYz¼L6kÔJ—©‹‡]vÙ%\}õÕ餿÷½ï ¶ƒkÄ}Ño+ÃK=ƒ°¿Ì{¿¢Ê¸ë®»ªÚe\wÝu“Ç7³¾:›÷!Axÿ_¯Î½ª¥€zÇ>à A£¢×è±4=œõwV«œïÿû¡£w·Î-µ•ñ®Ö/VJÓ«4ÖdÉŽ;î˜M\› è•z4W_ùÕ{ee¬«'2êé•&zõë£|*_õ¨¾¬WIÔ+ƒô‘È;—n¾ùæªw÷ެŽ‚ Ð=»Çšš ÐEæH jº¯÷>5+?ÿùÏÃ9çœÓÔaº`xÿûßz衦ŽËˬ]BïyÏ{r¿‚šw\ÑãeøÓ;[§dàÕGjI­]€YFº,ÃŒþÜëÓWjÓQzVÙŠ_f™e’w»É_téŹWt&Þ¾oûÛÉ<܈«1Bï²ldç_Vy'Ÿ|rVt%®›çã]{MÏÅ_œ™>{öì w"% /þÊX¯]yz碽J!©P¿µT™´Ð € ×ʯ4‰ÊW=ªO†_ÍSHç ØãýañÅõ^µ° °š 1€@± ðbÿ>´£š€eÔb×E¸iÁœNöÝwßJ´“‰è}èC/È_rÉ%“/¹^~ùåÉ—XóÊ“±éSŸúT^rf¼Ê¬%Y_èüæ7¿®¹æšÜÃô¢pÝ¥Ö‹ýõRj'õ%ZÕ•w‘ ¯Ì~ò“Ÿf0h•y«Ççv°”;ì°ÜœöNÆÄˆjïžKþ®ôø©ïr³D†a}#þ8F:Ÿúûï|'„e¤Ûÿý‡¥5kÔÁz X_ vÑÎ=ò™%úhÇת»ý;vëÜËbVÄ8}ÀEl콦A¿ö°šF{}µ<}ñWë«Á:V_ͽ@»VeâuÆî +¬0dåÙcCpÀ°âôrûâ_nt¬½nØ1°Ýc5?n¢IØE¿g¯r[a®ÂZ9¾Ù€z衹ŒÌH<¤p¤E/W·¯ïægw5? òÜsÏ ™q%óx}d"3¢dæ3Ca’Meéï)þ»ßŒ´q1Cfü«ÊãÇØÎÒayÓ¼—™§?’>®•ß±ç^ºýYá"D¿§~ûÊ÷°—ýÛc€Cö¨oîïïrO?ýôaÇŠA­¿uc_«ÍB5ÔÍs«ã]7?’<ÒsK®ŠïدƒŒT²>¢8¤š€½qÈvô™ahÈvÙ«D†lwý}Uº¦Úî¿¡3Î8cȾ.|”KkˆzǨ\•¯zTŸê•"Ý!`»ý3Ï7­¡ì=­Ýiµ@}I žŸS~>b@@]'``É/f\ ßýîwsÛ¤÷ò佃)÷ r‚}3y„ø±Ç Ú§8z4XïãŠÅ¾¸™û8àK,‘ìÓ#*Y²Új«%;²ú¦ü6“†SN9%ëоŠÓ#ÍfðÈl³Þ™¤šñ.:ϨQÇw\ØsÏ==j˜«Ugžyæ°¸8 ÝY[mµUUñÛ×–ƒ}¹±ÎÚ= Úq*QYY;wÒÉ{üW»Hò^V^iDÁ<½:÷ †!³9úÐûwÉÿñ<xà™Çxä1Ç>ð ;Viú[×´<ÉÚ!Øís‹ñ.ï×ï½÷ˆBË.»lÂÛ)ßõ'Í#íÜÕ®>ßÁ«yª|fôKÞÿªµ€æ©´*>«\Õ§zãù%ÉÈ?#wNi ÅY:†‚!à€€J‘€@8øàƒƒ•Ë}5×âYyò±ÍÊëqZÀŸþùÁv$/ööø,÷¼óÎËŠNâÔöW\17] 2,y䑹yÔ2ûYôx£í Ë삾pšeX‹3×2‚Öû8B£ïÌ2ê ºsyýë_ïÞŠ«ãô¾(—<  ‰y)~lÑÜ^œ{EcÕž‰'&ïèÌJSÜ^{í•—”ÄËH˜'úPžd} ©Ûçã]Þ¯3<þ‘G…lÇxjÎûòŸCÈÒæJ¹õ0ÝđʤqÚ€2î)]úúü*¾ôuŒ~'Ý(ºöÚkƒ>è«âžx≤ 7*ª|Õãuª|¤;jSµÎÅî´ŽZ 4N`ã¬È  ({ä¶fÏôŽjòD üf峟ýl°G—릲íñÞÌ|2ÔºÐÒ×;§OŸGUüúÐD³_$®\OžQLÍÓë‰ØÌš5+3›ÊöYZ1¦ ~é°êÓ¬ø‹Äy}­µ³+«ÝEˆëŹW„~×kƒ¾ò†ÓùóþV•O7–^zéô!•p­w†e½c5ïïM¶ûÜb¼«üLu=Y»5ý ZÆ ÏƒÛ:/Úá'£žŒs2ôIݨtçδ›\ê†Aß2æé]½¿ûÝïÂÕW_=L¯ºêªðÀT ‹qÙªOõf¯­÷Š²Ôº¹Vë\Ì*‹8@½$0®—•S7 ^ÐBzæÌ™u›¡GÜrË-™ùFbÌ{ä4]Á_ÿú×Ä”ŽWxíµ×Nvd¥¥ãôhÑ–[n~üã§“’°.ò³¾B›™¹€‘Y»ë¼™ÚE‘×oÏ#WF“¬/BëâMbYë¸×¾öµ‰Ñ%k@l<Éj£v—Æ’{šV=jŸÏ’~3öêÜËbW´¸Z;’ÕV=úŸ'«j‰»Î$Ò’õwëyÚ}n1Þ9ÙúnÖxãGÕ2VxÜÖ è|qÜ»y¥Ê((Ѹ'Ã>Ø¥O g‰ |+¯¼ròHq:½^]éü£9<~ø[A¡]®ÍH-£z­s±™:È @ 0vƒ2u@…%°üòË'ïÝ©×@ÐòD‹ñfDïõIõòj-,uqЌ̘1#7{­zr*P“O>™Ûšz»ÌrŒþõ¯å•MÆ·ô»¯ÝÚ=¨÷DfîÒ;þd„Õãái£òŸÿüç ~Üpà *¶Jô7µÅ[TÅ9¢ç^‘yÄmÓ#~µÄß9–•§–q0+½¸nž[µÆ!Æ»á¿T-VµŒÃK!Ô §2æiŒoÔ('£¡Œ~z5‡´–(_ÖúBõ©ÞZã@­rIkž@­sªÖ¹Ø|M@ ³x¸³|)(8e–Y¦ë-¬õx^º1µ.¾kôÒå(\ëºß_&n_ñÌêrÛâê½ç1o÷ÞÑd_ûÛߪڢG¸µ«/–¬8¥û.,³dûí·OÞ ••VÔ¸^œ{EeQ”veíFêæ¹Åx×ø_B­ÇÙØ8ÇVrN:5y¼W9iü°Ó®ïÌÚm›nKúX´Xuigz»ýéú /$P뜪u.., bÀXŒßV@="uÁÛé¦Ô{¼/®_ï Ê“fÿµýÓ{æúYt1ÔIÉÚ…×÷æ7¿9×§GÇo¾ùæ8{â÷Ý~é„ô®@¥ëºøÓŽÂ,É3@få-J\/ν¢ô½¨íÈúMºyn1Þ5þ—á”fQk¬ÏÊOÜÈè}›Ú®ÛRÍú]U7æ¹érT¾×¥zóÞë;²ÞpT-µÎ©Zçb­2Iƒ Ð {A:!QM ÖãÄi0µŒ…ÍÞu®•¿V=é61\kqÞŽöÖ[àO›6-l¾ùæ™Uɘµ0ËЧ²âe ½ýöÛƒÞ‘–%ýhÌêqÅ#ÐÍs«Ö8TküÊ¢V+­z²Êj$NFœnJ­@ú°Òy«­¶ZxüñÇ“÷ôùM4íì딪GªG_Öû7U?ҵΩZçbwZG-€'Pû%3—CN@èZ ?øàƒMÕøÐC忝UOîAJÈ» WüwÞÙrK1‚èkÀ×]w]U]2ê1à´ä}ð#/þ /LûJ—£/T7û8xº ¬€Ý<·jC½ïyTSìò•nôx•ьԓôJ‡Z,6Syó 赺¡§ß~òäÉÉ—»;õ{«:?õZ Õ7eÊ”äãSù­#¥j½&¥Ö¹ØÎ6P vÀØŠ”@ Cô¥ß<¹ï¾ûò’2ãkå¯UOfa‹Ì3èBéùçŸoèKÏ­vIÀ£>ºª}ÁWIKÖN?å‘AoÒ¤I!ý8ä™gž™." ³û/ ‘# eìæ¹Ukª5~euµVþt=2¦ä‰Æz¢G3õHf7%ïwQj½K±›môºdüÓ ½šAWý­hìî„Pç¦ïþ»í¶Û–[nÆŽ;èˆ Ó¿ZçT­s±0 !€Êx˜?@&°Ê*«äîîúç?ÿ®¼òʆZï½÷†«¯¾:7ïÖ[o›Ö m´Qn3ó>œ‘{À6Ø`ƒõ¥@=ª•~‡ ¾þ˜÷%h}Yrà 7¬jEÞ—1V¡"¢ºynõj¼“!GtÈ’¼}q^€:ý®Ä¸>ùÓFÌ8½Ön¥8þÖ l¶Ùf‰aîÑGMvçù»5æ·SU®vÿ©ù7ÞxãÖO ¨uNÕ:®€Œ€ºD€€]M5€FJ`‡vgœqFæá_üâƒ>@QO¾ò•¯T¡ü˜×½îu™†+Oïw»í¶ËmæE]ÞùÎwæ¦+AïT#]X¥EƺÃ;,]Ö ãÎ>û쪴t„Œ*‹,’N»o¸á†ôaUa=vÖïÆÛªNÑ3Y;»}nõj¼Ó£ÎYF<½KPºÒJ+åþ.ßüæ7sÓ:•°Þzëå]ËX‘{ #" ÷¿iþÍo~´Lçv”ÊmÇN@/G» õ÷©å»ï¾{®ÁzDà ºjí¬u.Ö-˜ €ºL`—S Ð~Ymí¯¥w%|ðÁ¹À«®º*œtÒIáÐCÍmàÅ_Î:ë¬Üt•߬´Ê¼ÕãÓíÝtÓMƒ.Äž}öÙtRP»4j1úÌg>“«¶ˆ=÷Ü3+:3®Q`Þã¿^h½tÏ÷Æ7¾1L˜0Áƒ]wÛý;v½T8Œ@–°ÛçV¯Æ»×¼æ5!ï=ƒz´_chÝ„iÄè? tzç–^'µŒyÇ?2ú›Ðã¸úHÓõ×_4&Ëð§G³þ^š­Eeéuº9¥›B³gÏf÷_³Û¿–Q½Ö¹Ø†ª)€@[ äo?hk5@ sn½õÖdWçjèmÉzÔ§Ö./íNÛo¿ýÂ<0¬¡=öX8æ˜cÂ^{í^zé¥aiXf™eÂûÞ÷>6ì¶Ê¼ÕãÓ Õ#|ŸøÄ'ÒÑ•ðGN=õÔäªJ¤yôHÕñǾúÕ¯ÆÑÃüõvÆ™µ{©ÖÎ>Ï[ÏÀ—÷!?ÞÝ^?þÛîßÑû…[Ý>·z5Þm³Í6¹ÐÏ9çœðÁ~0üñLÆR~ö³Ÿ…C9$|úÓŸÎ=®•„zç–viwr–¤ç‚¬}zØj«­’G0?ô¡eeëë¸o|ã5ýÚ2kÖ¬ ƒžŒ…+®¸bÂä _øBÍÇN>ùääë…ypò^Žß(óVÏkWVü'?ùɰä’Kf%… „üãÉÇ@vÙe—äb^íXÅÞ±xì±Çæ2ÚvÛmƒ_ØeœŠÔ#`Ú1UOêø´ËC;ëI· €Ýüëõ™ôÎÈÛ±Ôís«ãÝ®»îZì÷¿ÿý°Å[$F7]ð¿ýíoj§ 5­ÈHÏ-¶ß~û̪ÿûßgÆÙ9z„ü½ï}ob°ÓÎ|=²«yG7™ä6jT¾ø8•£ò^y啤üFæ…Îõrt–,îu×]—ÙùnÍÁéÊõ«_½¾Eã‡Æí@E 4B€G€¡D@ V]uÕ ]mY¢þδõ×_?+K_Çi¡'C•U­%â·PM§ X]°Ô’V™·z|­¶¥ÓtatÁ]Èg½ËOùõ¥N-œ‘iÓ¦íüidG_\ž ‹Ú)”'2ŠK-‘!F;¡~ûÛßæf[mµÕ‚vtCºù;v£?Ô‘M ÏØís«ãß8ÉûØŽËΜôa¦f¥•sKƇK.¹¤ªJ4ÖéË´HwèÜ™1cFØÿýÃüãð‹_ü"yõ„þ.dÐÓß¾ÚëóI|®¹Y†&åUùõ÷tã7&ó…^E¡|Hs^þssù³rß|óÍá™gžÉJJn:g&t0òïÿ{òH‹´NÐX ¯Cç}̨ƒÍ¡h@ Ï°°Ï~0š ÑL o·Ãha¢GÍ>ò‘´¥»zOÑyçW·¬V™·z|ݦ2ì¸ãŽÉû¸&Nœ˜Ji.(ƒ‡.¬W^yåæ´ÜõvÔÛýçÖ{L¸^=^N;ÜnÿŽíh3e´—@·Ï­nwÚQ§]~#½&`ß}÷Í<46ôdehåÜÒ͆¼òÙ˜E»³qú-VXa…äoA»Ee¼»ì²ËCžvðùî>ùe¼‰]ß%¨8þtœ¾`¯ðè5$ÀÀ>üÑh2F+½ÇMt¸ãŽ;F%]\è‘3=jtâ‰'&#¡GZõÈp#F²V™·züHú·Ï>û„Í7ß<ùèGÖî˜zejdžÞï5Ò¤2ði§FÞ‹øëö¼}õòuÓØ‹ßÑ9àv@ž1É[ÐÍs«ãÝ[Þò–ä£Jú{—!¦9à€‚¾ü¥/}©‘ìUyZ9·tƒB¢ßýîwUåʨ÷¿¶Kô^@I³;ªü¸ÒÑõÿí—ò}×^©Gz \újxþ†W“wõ½éMo «Ø+&´Ü 3Ú!(¡n0iþÕŽ@ÜW°Òwßóp¸ý1áî'ÖO¿¼EøÚof†¡1c­l{ï˜E¼Ç$;ý\u·ÔŽê•uOK1Íþýä•ÇçÓu~Mž<9ÎÚÞ“0>úhWê§@ ¿ °°¿?ZQE@ï:¹å–[Âi§–¼ßnTu>ê¬>Z¡G@Þö¶·U'Š’s½2(éBQw1þ© V™·z|ngê$è}ˆ?ýéOÃå—_Ö^{í:¹KÉz .âe`©ñO%éñ-ò¤žaÏ«•O_þíæÎƒ^ýŽÎ·;êÔŠnŸ[ÝïÔ?½ïP㤠kþ¸¦âÓ²ÖZk%7¤´k°Ññ4]†Â­ž[ú8I–äíZÊÊK\óªÏÍ hïð“ʸ§se÷ÝwOvð馔âõq½ÓïÒK/ ?ùÉOÂ)§]N:íªpÒ÷n _¿`Løáµ[†~xâåÝÂü1+™YqŒJ-«j@ºI@¿Ù5×\“Yå˜ßéÈ꿽N×Hù€À ЬÒQ92&ê•vJTÏbI'™êV‰tŠéM‡‰5½÷ P‹€îšk‡Õ¿ÿýïDõî;-¸õH†•ÑûÓFƒˆŒ\zÌÃ?œ0yúé§+/ª_n¹åÂÞð†ä±T]Œ´"­2oõø‘¶]õʨ§ /©Þ“sß}÷%»0ôެ5ÖX#1Øm¹å–5?´2Òúí¸^ýŽƒÆqúÓís«›ã~©Ú½¥7z§ÞòË/Ö\sÍ ôh<­e Éï;’sK_x×G°4îÇ¢õ´Þg¨gÍH½cÍî°ªW^ºmý\¾ŒEj¿_Ç(,UX;Jõ[髾sçÎM>¢´­ö[ÄvøM ¯ŽYÌöš;d—Ocì2ÊvûÙ?e%…Cx妿.ÝFñiöïGÇÔ=†u3Nã@¯žF‘á1ëu§Ÿ~zøÀ>P«;¤A= PÃh¿5çyÓÊú¢¹óÊ:ß\W=’ ]`ZÚnnž‘Js³H~-*`>R @€ ÐvGydøò—¿\Uîç?ÿùºŽJ´òN!<öd:va¸Y ¨…ìäs£ »7s#ߘÜ÷9Æ%À?¦Qío–Ou Ãc>üá‡ï|ç;Ã#-tê©§†C9¤*¾»A™: Ð>E3–n'µ¯”@€ t‰Àᇞù.²ï~÷»É;æšiÆûvm&7y›%  AíÕ ãÆ3£ßXÓE2þ5[ù[#ðÜsÏ…üàU…hWmÞ£÷U™»!£2@  €õ‘@€ ‚Ðk/>øàªÖ=ôÐCÉ»æªjD÷áŽØ/„–©‘‰$ŒçœsNò¸vº«ÚqÛÊ{?Óå5®±›¨Ù¢ÈŒB<< tº @€ 08ôŽB½—ð…ô*¡…²ýöÛ‡+¯¼ra>@ .í¦[guªÞó§Ý÷Þ{oò¾éº…t(ñÇôq¤´üò—¿ ;ï¼s:š0 Ðc5Œö=y ;{üAõ€ @h…€>h”eÐg¯»îºVŠæXŒ:^xa•ñON>ùäžÿÔ†w¿ûÝa„ òVd•UV Ûl³M%Œ€@ €ydˆ‡ @€@ŸøÄ'>6ÝtÓªÖ~æ3Ÿ©Š#È& ¯qk—]Zvß}÷ð®w½+ÝõðÚk¯.»ì²°É&›„iÓ¦…vÚ)\~ùåaÊ”)]o BýG€G€ûï7£Å€ @¨"pÛm·%†yóæ K“`‡vG¨&pæ™g†8`XÂÒK/n¹å–0}úôañ Ô#À#Àõ‘@€ 4M`Ýu× 'tRÕqì¬BBªÌŸ??óQz1þUá"èCãú°Í4€ @È pÐA…ûï¿?ùXAœ|×]w…Ù³gÇQø!ˆÀM7Ý6Úh£D=ZÕï¶ÛnÄ… Ð×x¸¯>@€ @€ P4<\´_„ö@€ @€ @`€ ðàþqé @€ @€0ò7@€ @€ &€p€\º@€ @€  €ü @€ @€ @`€ `à—®A€ @€ @ € @€ @`Ý2ô0Vº@€ @€ Li™Âµ¤^z­c“´v½*<ö×m @€ @€ 0РĶ´–~1ÇvãÆå㇠@€ @€š'Ð6{[» €Íw# @€ @€ ŽÀØqÄT@€ @€ Þè…Пav·w½§f@€ @€ O`Μ9ᥗ^*|;i  Ð{ظÖj–øye÷»[UöÐÐP3fLU<€ @€ @èc¯ZÛÝ&殺û;Ò½NîL7^aO{Ê#p!@€ @€ 0Àžµ¾¹MÌídîªÛžÖv0Æu¿»±¥SþûÛÞ# „ @€ @€@ñüËš”¶¹ÍÌ]µ:ö·¥0zÃÔX‰7Ú]uÔ;ûSó/P&€ @€ @Làë›ìc±mÌíer%î–Bmú·S@olìÊï”+Ãߦ百bŠ@€ @€ @`ÐÈ&ö3Ó[Lesû˜â]Í[ŵUƶ±4}¹CEiìWXõHõÑ‘´û¨ÅÝi:Ñt ÓEM@€ @€ ô3}ºú6Ó™^m:ßTq/§Tã¤n”ë†Á¶;ùมnÙtW‰õ~ k' Œ€Le”Ž/»n4tc¢ Œþ©`w-  B`KkǬŒ¶\oqdÄ@(2]­qºQ–K-â¹t$a@"°‰•»fFÙ²¸»2â!J6€}2:"{ÂñDA ÓÜç6/ý-ÊÖåÆ;ödä“+CŸtžé‹¦±Ìýn'“«2Ý5o{¥Ý@ V¦¡(ìt×-žj‡ü2ôÅÆ= &å(]Ç(Ýw¦óY„€Î×,Ñ ¨ ô-ƳÄ÷YiÄAh7ѸÆÎÛð£x®+ÚýFypÛ—\­ÜÆ%×í\2º!Pqºv7Îï?/Ó²UÙÓײ´Û¨ÅVG\ÕÁ4Å97îYT"^ŽƒQºÝXΊŒ€Îë,Q¼î~ € ~" 5l–haϼ–E†8@ tmœ%2*ŒÆ±h4ö9ë÷'®7ÜfÛ¹t½«ó46üÅ~¥{åKÛË<ìe[–Š(®%i·Ðäu×;á®:¬AJõ»a/mÔÓ±¢Ç€åºÐóåÝ °¬ Ðc:g³d´.N²X@ýC o^ÃØ?¿!-…À È‹}­W-,žúçX` Á®HÛ»t~ºO®Ö±ê<Êïê¶2/3íZÖÖ¥@5PF9o¨: ¿wD®wΡ€Í›ˆ£¼±ñ/6ʈ@Å%ðLNÓž¶x½û ô'­±Ë¦¬5ëã¦ZÏ"€ºAà?9•(~רzÇáö©¾ÿ߀÷9Õ]‚%àv/·uÉõ o±P«»ñ/¶‡ùq^Ž»nW“Û6i§PJ7NwõŽ©³2æ¹ñÏwôYT"*#ΛµK0}LùP@  þbíØÌ4cž²ð]¦@€@?¸Ú«ïk ërƒyøˆÓÀ…ºAà¯VÉLµQÆEãÐí¦ƒü>¼ßYÿæšn`*ù›©Œ‚zI@¶+7ØÉíX±‘/Þè~ÙÔ_ùäúñq™ˆâ¤-K;£UYRç|·ž.þÝ€§¯úÊï_ø•«/þJã8 fÒøX•'õò½.‹Jâä"€@±̶æè«‰K™>`úSS@€@?˜nÞÚt²é?Lo4E t›ÀªVán¦Ú•ü ©ÖØÿ2E îpcœæÜè@7ìɸ'CŸ«ïL»ž.× ‡^VlôzGÜKÒÚ%n”“ÐÕ w2æ¹QO® ~î¦q^?^®—éõxÛݵ, @€ @€:FÀîÊPçÆ:7Þ¹Ð]ßý'WÆ>dž?ùýx/S®×cÞ‘‹Œmí5HÆ8oXì:Õå<÷ËU^·’ªMê´Œ~ò»áOa«°ýܵ(€ @€ @% –Äí^n¬“]Ëí_¾›Ï €îºñ/6ö¹ÑÏË‹]¯GnKÒN ’Á ~êÄÃ¥P ŽR7üù®?wݨãä—`,qà_@€ @€ ÎpÛ—lY¹Š‹ €òËèç®eø“zØó¨ רèuYrkÒn ·&n¬ñ4w=O J—ÁÏU†>ùeèónü³( €‚€@€ @€ t…@l”s›–âäw# ûÝÀç†@ßùç@ÅÇǸ­,®£-ê†Ð¯Î§ÅÓä¦~2ô¹ÆÀôÂt™„!@€ @€ ÐI±MË rcuŸÓnœ7.Oþ¶J» €Þ@é¼áêLžÄydtƒŸÜ¼óh@€ @€ Ð nÓR]²})ìn¼«Oq±!0ö+-Ö¸ÌØoÙZ“vãÖÄ Ug²Äá¨ói Œ€nì“_âa¹ @€ @€zAÀí^r%²}y\lÔslŒýžîÇzyI¡íú§@o¨Œtê„ïä—ÄRš«çÕqŠs×¼Ãü–+ÁXâÀ¿€ @€ @#à6/Õö»ÝK®ÒbWþ´zϧ°—û-ºué”ñÌËu× z »z\úQßtºzéqrkI½ôZÇ’@€ @€ ˜€åâ¸ØïÆ:Ï'WF=‰÷bWþtz\F\NRH;þé¤ÁÌËŽ]ý$Šs¿³â¦"=.íW @€ @€@· ¸ÁÎëuŸÇÇáØ¯üYa÷ò򾮠µ¶šQדåÆqò{XŸßÝ8N~€ @€ @½ à†>Õí~w=Î }qØýr%qžRL›ÿ km.:³8¯Ï]Ϥ°Ç¹§¹_n:=NÃ@€ @€ nˆ}ª//ìñîÆy㸎µ¹—Æ´¸îØw6ŸÇyñC€ @€ @ ›² xõâ²Ò;Úæ¢Ôjµ§VZG!Q8 @€ @€rÔ2èÕJË)Žh@€ @€ @€ @€ @D`¬õe©ê] @€ Ѕ熦“ Ø6š@` a›cªG)o6]ß @ Þ`mø“é ¦7˜nbŠ@€ú•À Öð¦ºø|Êt7S€@· lgÞdª5öµ¦˜º¼Ý:¨±7Öû-@€@û|>s÷9‹[&#/Q€:E`U+øyS‡ä>aº´é ËYÖ¹¸Ïîß|;Mß Ðn‹´»@ʃ `t—njŠ„&;§âB€úÀ[2¹˜Åm™O NØÃ žœ*\7ØwLÅ Z0ッ´ŽÒt’ÀNÒ¥lŒ^+ät=/>';Ñ€ B±/K¦eE@ CòÖÒyñjF׋Õë²DA  `lÙ ¦h[~–ŒÉŠ$€ Pp¯æ´µt¢!´‘À6¤¨ÑK€EËèýíé9:I`'éR6 t›óZ·‰S Ð A¿Éް™¿òB ‡À0DC-àB©%| @#ÀÀ‚ý 4£”@Þ{ÐqäÇ zÇéÚI`;iR àò'ƒ~wÒû @ƒEà`ýžôè/¯ä4{F¢!E€&‹ q€@«0¶Jã!@ HòvŸ©´€À ¸?§cÿ̉'È €0 Q€@ËÉ)áÑœx¢!@E&pWNãîΉ'€@'ŒÖ5öÙsn è_,ü‡TA@€ºL`«ïiSít}ÊüË™"€ ~#°¤5øaSŸÓä^kÊÍtƒ€@]#0ÓjšcE[x©®µ w­oUÿÔôo¦§™.mŠ@€ P›X®1ýéïM72E @ýJ`ykøI¦—šc:É Ðm[Z…7˜j}•ékM@€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€ @€@¯ŒéUÅÔ ’À¦ÖªÍM56IIµçw¾È Ô"°‘%®kêóˆÜ,Õœ—Žo4.¯ìZÇMÕw‰…/4E Á$ðë–ÖÙ\b¿âzöº¯°v\å Ä… @`p la]êÝqpz@m$°³•Õóš  0¸úe,zýàþô € 4;,¢ÈK[û´Û Ô# vš7Š<¯iÞE Á& ±èQÓ"E· öO@ï .¢ù€ÒÎLG,|žµçÕ‚µ‰æ@€@1 ,°f]̦UZunŇT‹Š~®}¬Ô¿ ú@è¬æWL‹z‡ríž‘¡b@èG«[£u㨈óšÚµr?B¥Í€@Ó´†-â8¤6ií¯k€ QFàRëo(7޲ßîB€@{üÖŠ)⼦v!€Àè!pƒuµˆcÑ/ûè'XÚÚÊ“Œ}ôƒÑÔâàÄ)ÎoAK P$g©1Q[x4!‚€&pFÃ9»›ñœîVGm€@ œÕãúóª/j»âönb˜>iúŒéÇL@€Z$°¨ÿoÓ"Ý¡|ÉÚ£;~ @ Y“í€gM‹4¯=oíY¬ÙŽèkKXë_4-ÒXôkÏ„‚Sbí{$ƒÛŽo7̓@¡°°P?@aÌ·–ècE’_Xcž*Rƒh  ô ¬¥?,Xkjí™S°6Ñ@ ³t#Bç~‘äkŒn´Y6µÆMÏhà;2∂r`ÌC4 Î*ÿ-ØBs ô¢=\ô/‚öÙÏKs!Ð7Šöª³ú€ÜR9m|MN<Ñ€ 4Ià&Ë_„GþeíßdÛÉ@H¸Í"Š0¯=jí›na@`TÐ&œ‡L‹0ÝÞ'ÄßžÃë’>i?Í„@!°°?€@a ååùFèåÂR¢a€ Ð/¾_†þÀÚ±  m¡€@w ¼jÕÓÝ*sk;+7¥X yã%7RŠõ;Ñ@ècúè†Þ Òë;”õ1Cš@Å!°¬5Eï¹íõ¼öÚâ ¡%€@̶:{=ɨ¶bú>’*wÎáõË‘Æ1­Ø8Zyú Æè£?k,kÇrÝj%ÿ¥c¥S0 Œ&z¥„>*ÕKù›Uþ÷^6€º!ž¸ËZp}[q…ÕÿHÛÐhõ­ì”ÍC¯šhª¯ /nªMº!¤‹Ì(»æ lã»{ôh=¼WÊi|üc¤ä8€²èc ½ürdQýËbC Ð=gYU[u¯ºªšT§e]«à0S=ª›VÙ"Òqq8N—Ñ.K¶µÈ'LããÜïÇg—ŽÓ¸¼o:’0 @`´Ð$ª»ƒ½xLá«w…ÑœþB€@G è¢ð1Ó^ÍkËu´wô µ^0íÅXôŒÕ«qÕñ´i/úØL;tåC x¸¿m€@± hË}¯vá]nuë"  ´‹€n.õj^ûÕ­Ý* ç ÁOz„áB«w^êV?èB=­T¡¯²_ÕJ @$kZgš¹‹Ö®¼ï$ˆô€ C WóÚ» C€†@E °½5¢]ëæfÊÙ¢‹_¿G}l”ÇW»È‚ª @}Aà:ke£i;òuëÑ„¾€O#!@ í®µÛ1_5ZƳVߤ¶÷‚!~& 'ò4mtiG¾;{ìO]îc3œd D 0*ðð¨ø™é$ÚBà̶”Òx!YÖn<šÐx‹È @ƒD@é¦üÈ*{±›R Px¯Z »ýJ‚n×§áô‚þ·Z»n.hÛh @ g³šŸ7mæŽZ+y{ùU´žA¦b@è©VÓ\ÓVæªfŽÝ¦k=£"@ Ÿ¬nmf,i%¯Þí=£pôÁ“n^G4Ê舰 J@€@_ÐÃF'ÔVòÝÓ4h$ ô;ï[Z™¯=ö~«gL¿Ã¢ý€@Ç\c%7:ž´’õ ~Águ©ò‘1t¥úÍ&‡ÎoIO Ð gv£«£&t©kT@"Эǀϵ>ë¢ EବÈÄu«ž¬¦í1à«­‘g5”8@€J»î3ÞYI>½ e`C€ºD@/ÄÉ|ÕÌ1kt©/Tô'n¼jG"šÜc<Ýo›÷ï1 ª‡@× °°ëÈ©}M@ê™îx ÃuP< @À tzଢ»½2\@æXÜÅñíŒÒ‡ˆ^hg#(«(»õ¡ÁNó ‹ÀLkŽvé5zw­Ù|Ü+ÖïMk  :¬ƒ¯˜6;_5šÿ AHÿ ¶x£•Òè¸2’|ohK+[+d9;üå÷³6´Ö ކ Œzp#“k³yôu0=@€ºIàR«¬Ù9«‘ü/Y¹Ku³#Ôô-1ÖòL[šÍsO¨ü¤C}l†É®âAS Ð5<Ü5ÔT"pf‡z£@ @Ý$Щǀaxº›¡.@ o È€uv‡ZV‡ÊI±½~ øIkôoFÒpŽ ŒF“¬ÓϘ6s§­‘¼;ŒF˜ô€zN`¼µà_¦ÌUÍäÙ½ç=£€@?XÕÛîWí¨¼™‚0Ödæ0L@IDATÚ¢¯ï63–¶3ï× Ä‚¦@€ú‚À·­•휌µ`Wr_üô4€À@øšõªóšv™È°ˆ@h†ÀÕ–¹cÑUÍTÞ¥¼Ÿos›áµY—úH5€ ! É³™É¶^Þ†  ~$°®5ºÞ\ÕL:»Lúñ¯€6C ÷ö³&43ÖÔËû¾Þw©ª³,¦Ý;ëqPú]U-!€ †üÃr52Ù6’gí†j$ @ sn´¢™³ÉóúÎ5“’!&0Õú6×´‘q¦^½[{JAY]Ù¦>Öc§¶ ,h @ ð·Æ“êHýºàB @½&ð!kÀHç²ø¸Û{Ýê‡úšÀYÖúxL©ÿŒSxw›úØ ›Õ ̃¦A€ M`ykÝ˦ÍL¼Yy.t/i ŒKXG_0Íš«š‰ûôhF?!ŽØÖJmfÌÉË»MGZמB'X1Oµ©Ÿyýã¯oO³)€ 0z üܺO®Íú_²ã—½øè9 ŒÀ9Öžfç²8¿ÞkµrÁúDs þ"0Æš{Ÿi<¶4ë×ñ*§ÈrŠ5®Ù~4ÿAEAÛ @ý@àÖÈ‘NÄ:îâ~è$m„ QC`;ëi+óÚoG ): t’À±Vx+c‘Ž/º¼ÎØJ=v¾Õ³tÑaÐ>@€@Ñ Œ·þË´Ñ 8ïmEï íƒ QE@;fî5MÏW†÷U´è, Ð)«XÁ¯š6:öÄùtœ¾´ÛÒÎ/Å bÿ%ý‚6B€úÀÉÖÈx’mÔ/á ˆ @ H>cit.‹ó=oÇ-V¤ŽÐ@ ¯ hGq<Æ4꿺zý_#ìc£,”oÏ>âAS!@…&0Òíûÿ[è^Ñ8@­fXǘ6s©¼çV`ôè÷[©ÍŽCÊ¿_GZÓ™B·buód$ýlä˜g¬l}p @ Mn²r™„ã<µ©nŠ ´›À¯­ÀxÎjÄ¿c»Ay€À¨&0Åz?Ç´‘ñÇó̵üSûŒÚ™MöÑûÚˆû½>cAs!@…'ðka#“°çù{á{D!@`4ØÛ:ïsV#î#–ìhFß!Ž8ÃJmd òúÑc@è#zdì)ÓF絯ôQßh* Ð?¶¶¦6:)ßû§kÃZz{“ýl„É?­Ì1Ãj!@€@[\h¥42¿bùVhK@èS­èFæ5åymçšAÉ€À('põ¿‘±èËׯ/mh¤Íäù+ @ v²2™”Ùº)€ ÐnXÌkmwÅ”@ "pŒù‹>ÓoÞe­Áóìg#,”g~ƒ@{!@ýB`kèæõ&åw÷K‡h' Œz1õæµOŽzJ€:I`¦þªi½±hµN6¢ eÿ¸>Öcàéú@!@€@ h«½O¼Yî3–>±ƒõS4 @ >j…eÍg§×Z,×Î ) €@+-ÎÇ,÷šŒcú-jç:}Ìêw^7fúí×§½€ ÐwÖ°çMÄŠÿnßõˆC€Àh&°¤u¾ÖG®.Ípè; Ð5ﵚj­±èZK:W‘ž&z¨N?k1ð4ݘY¾sͤd@€œÀuæñ 8ínå™p!@}Bàkgz>óð»ú¤4èo“­ùÏ™úØ»Ï[übýݽJëÏécÜßzþ_WJÃ@€@G èdÖÄ|OGk¥p@€@gìhÅfÍkÏZ<¯µè sJ…ª œnQYcѹÕYû6fky#ï;ÌâàqÚ-‰@€ к9×Ô'awõ3€ ÐoôXÚ?M}>s÷{ýÖÚ ô5=IããOìnß×½ªnüå9ýŒûœç×5È”ê"‰ @ Sβ‚ã‰YwòV1E @ýHàsÖèx^“›~ìm†úšÀ]Öúx,zкI1H¢W+Ä}lÆ?H»!é7¥/€ 0À¶µ¾Å“õÕÜWº@ƒO`–u1~,í> ünÓC@ `>mí‰×Ø_(XûÚÑœ VÈ“©~Æ}®åK;@€ 4N@E÷šú½¿ù¹Pjœ9!@ x®²&ù¼v¼ù5¯1·ïw¢Ed3¬s L},ZÃüƒ8õÑûZÏ}ÌŽkŠ@€ Ð~±#WÔÒc,]µ¾L¶x¼q¹ƒ¸ˆ±î#€ PP>ÕšÓ”¦Ëûèló×ÊïeÆnA»O³ ˆÇŠZc‹Òüy×›¿^Þ¸\ùûEÖ³†úxÛ¨{R¿tŽvB€ŠF ^0¤º»&颿u5 ëåRñžÇõ²Òu(ìm0/@h™€Ï+YsNz^oµùœ%W7³ž1ýC*Þó(¿æ6Ÿ×ä¦ëñúå"€Àè$é1ÂÇ_'Ëõ1ÆÝ÷YœŒbÎHS?ÖËJס°·Á¼…•?ZË5þ)߆…í ƒ@h`@ Äü‚Ä]¥¹_® .¯pì÷ôGÌó;ÓóLãã<=ŽÓ{•\ܯ‰ÜÅË÷8w=€ G@sˆÏ#žÇãÜMÇ{8vç[à"Ó[Lã9,Î#¿ÏQ±+¿Tõy|ì·èJ¼ü 0Xt¾KÜýŠ‹ÇÏã®òÆr©7½Ø4>Îóxœ;ßokìï[Ã7óÆ×qÿaé­“‡dŒjyʨ†Bç!0 øXà®È/õ„§¹çñ¼'×ekó\oê Åû…O¼(‰ýÊ#ñc<ÍÝRêðr<€ ñÜäD4§Åñ>Çyº\sWqñÜ÷: ?dú%DÏQi¿²)N§Åóœ§%™ÊùÜ ô';ÜU/| ò1ÆÃq=Î]?.γ­®1õ±EiîÇ™ØïyÒù²òx^¹½’Ŭb½×oJ ÐÇQNl Y 0j h@A ÑIÀÏwEÁY O“«të8‰Â’eM5Yk¢–ʯEÅܲê}€sLÿmê⋎´ëFžOátOóxãB€Àè#ž›D ž³Òé>ßÉu:û]ÒtjY5·éQ_Íg±>aáWL5¹ø<»žînœ¦ã<>íz™¸€@± øšØ]µÖÇgÜÓ”Gñž×Óäê±ÞåL}}-w’éK¦>i}ýt9lΰ±DãI¬>îx¾8ÍýJ“¤Ã¥Øîý«]€Ô©Nm\ÅôÁ:ùH†À¨& ÁF?ïcWþ´ŠŠ/BÜõc^Át+S½ wÕ²®bîdÓFD‹•ûLï7½×ôï¦7˜êÊE‹©&uw³Ò”îâ~w=€—€ÏaÞCÍS’ôüåùçQ^øô¨ÙƦ«Fº´ùÿ4½ßTóÛ¦š×î4ÕœäóR<·y|:ͲWò{Z'?‹€¯“c×ǹ>æ¨Õò{\œGïìÓ.ãÍM×0õ±hEóÇÇ[0W´–Ö$½ÇôÿLo2•±PâãŽÆ"ùÝÍJËâ8ÓiÙÒ*ÐÓDµä÷–¸]­ ¤A¥A€Àè à‹ ï­‡}¢xÅyX®T"w Ó]Leô“Î4í„Ȩ ¦ëLeª»™-N|â®âã…‹ü¾(I»Ê‹@€À`ðyÊ{¥p<¿)>+ÝÑ.¾mM·3Õ¦.ºuñÝnyÊ ÔGC¤—™>hªyLÏm>‡ÉÓ•ÏÓä—(Œ@Å àcŒ·ÆÃkܯ4Ëu¿Ò×1ÝÉt SÝ„Ð͈vË<+ð/¦‡®2M\Ã×ÖîZ–ʺÛÇwÒ®òvZô~¿µkTòAK;½F:I€€Ѐƒ@ƒMÀÏóØ•ßê½/DÜõ8=Z°³éž¦o2ÕãÝ-V®0ý±éoLýÎ¥' Lµñ‹$÷Ëu5ï0¿Â ô?Íc>¯©7>§ùüæq>¯Éõ8]`ïeº›é2Šì²üÙê»Øô'¦z†Ïcñ¼æó˜§¹ëñvF@A@ ÐC>Å®Ar]ãqÈãfZºÖ×ï4]Ë´Û¢÷˜þÔTcÑßM}l‘E¬iTþnÈaVÉWs*ÒõÂò¦Ïæ¤ ” hB Á$àçwìÊïIêu¼ ñ‹#í~˜eúÓ½MõŽ‘"ÈsÖˆóM¿eú°©/Tü}K~qdIU Åy~ù@èOšÇ|^S|NóùÍãâùMi‹™îkª]"3L‹ ºÈÖM®o˜jWŽæ)ÍeñÅ·Ï]î*]~IÚ-Åò/ Ði>Å®Ar]Ó㺱þQÓÍM‹"Ú]wš©n¸ëf»Æ–ôXdQ•xOWœDa’ˆüó+óSíÜN‹Ú­›: P‡€Zu²‘ ô_x¨Ùî—«…‡Ä$2öyºüzüéÓ·™*\DyÙ¥]º`ºÍÔŠ$îçbÉÀ €€€ÏaêŠû}>ó8Ÿ×<~YKø/ÓýM§)SAEïèúº©^}¡y+­šÓ|^s¿»–”ˆÂ ÐY¾nV-î—«1ÇÃòÇc‘ž ‘J†¿5M‹*2°}Çô\Sí¦ó1&}³Ý×ÖîZÖÊz¼“ãЬíšLËîñót$a@ š€)~NÇ®_©—îwWùÆ™Î2=ÞTïiIŸ<9,·Ô’aêĉ‰.fîЫCaî‹/„9/¼æÎ{1<þ̳aîKþ4Óãg¦Ç™>hê Ž´!Ð/¢|cY+ ù@(6ÍU>¯©¥>‡É•Äaùuá­ÝëŸ0ý°©^g1b7~\Xzú2aòâ“ÂÄ©ÃÓ±‹Ž óæÎ /Î}Át^˜ûÔœ0çÉ9#®#:P7¶Ž6Õ{p}þJ»Êîqò§ç7Å!€@{ ø»>öøåaw5½ÝôXÓ•ZkΘ°ôÒ+„©S§…‰“¦†‰§†E^zÉÆ¡ç&úÂóφÿüçÑ04¤MÄ-Éì诘ža:ßÔǘØèq‹ÜoÞa~…Û)o±Â~*ð) ¯`ªõ?Ô!àXl$C}@Àjªûµ‰ýZˆ(N"ÃßTÓ™l:Ñ´aQ¡¯=;l»É&aÃ5g‡5V\)¬1}…°Ü‹[Š¥¾bk„¦rµyùå²ßâ{òÉp÷#†»{4Ütïýáš{î ÿxâ‰dÕÐp#J_0çMõèÂ󦾱ʒ $…%Z ù"EaÏ'?@Å$às–Zçsš»šŠä÷¹MaÍmÚ rœéЦMÉr+.6Þfã°Þf¯ +Î^)¬¼úJa™™¯ CVÃ+úoŒéÐ+v¥©ÐËáeóûÏ=7'ìq¢éV¦MÉäÉSÆnÖßà aµÕÖ Ó§¯–Ÿ¾z?nRiIm#Aeym«]_^+nÞ¼ùá±Çî =zwxôÑ;ý÷\î»çÚ𠲓5-z4øhÓëMµ®ÖØ¢1'‹<ÎÇ"KîØ[œï7]Y•”Eë]Ç €@| k +Y ðňš(zQâ ¥iQ¢ ¤M¿hÚðÒ´ÅïÜi§ð¶v[o¼QXÒvû%² Z‰Èè÷òË¥•‰Ç [Ze¥RÎ÷JÉ}Òv^s÷=ág·Þ~ú;œùºéذhAð)ÓkL}‘¢Š/RÌ[¹ˆÒbÅUñò#€ P,š»\|^ó8¹nøsÿ,‹;Éô ~P=wìØ±a«7ovÙó­áõo|}˜1kFÙ · qKÿš©oÈŒ}³ÀþKL³ d ,‡“\2ޱܿ¾ðÒ‹áwýæöpÛE·†çþÙÔ;êuƒë«¦ß2Õ¼æó™_€kîò‹n¹wågn­È[c{¼?r¥Ú}|´éLµÞnHÖ\óµa··½;l¹åau6²“wlé>ºÎz“Øà÷ŠÅ)þèÐxüICJÓ8´–©Þ¡·¶i]Y~ùÃÞ{ïÞñŽ}Âêk¬—ä×ÒxŒ•.× zyËëŠ!ÐòúrÛQš=Ÿ½‰'É÷ä“„[o¹ ÜvóÙá?OßQ·å ™«qèS_Wk-‹|LŠÇ ÷[ö–e¦•pŸ©˜ßkºº)4H@ƒô'?åºúâDa]Iݯ…Éj¦Z˜¼Ö´¦L™4)|ðýï‡tP˜±âŠå¼6'F;Íõ&à y¶ð•UHÙ¨çñ¾ñãÜ ˜”)C`d,ï æÞûï'Ã×þïÏáLÛ8oÖuåÏ–ãæ™Z¡‰¡/^¬XÔ°‹ÂZœ´s¢2@hŽ€Ïg:Êç4w•¦¹La©æ8½ÊâÓÿgZWvxëŽá# ›¿aórÞ¡d§ž®¸µcoØ Û¿tœïLâË;ÿ’Gƒ-§ïôc^z!1&ÆBùìbÿüœçí§ßn=åæðâ#ÚèWWž´zeÇU¦š„¥ñÅ·üšÃÜç4æ6ƒ@  k$>ÉõqGñ{¤§q齦_0­ûÎÑÙ³× =äSaÏw¾'Œ?¾´HµUª*qc\%$Kjóûò;q-¯‡+»ü,Î …ZN˨°ÜŠQ°ì×1Š›?(Ü}çÏÃ_þôåð¯Çd׫+jÕɦÚim%$š7ùXdÙ’.¶:ùo¢ò~mª'™Ž7=Î4–Vë‰ËÂ#ŸH×9:&àç®\W-Bä# kןâÞjzª©MÈ•IöÑŽÃ?ò‘ð‰}(,µÌ2¥|º™Hy%¢U‰¯2Ÿ¬Nlà«7Þ¹áÏW+nàs`o)­fÊ«•áùËåýëÙgÃWÿrs8åVÛ9a©#zÎêC¦W›Êè -X´€‘ÈUAJ“È_·à$'ÿ@€@» ø|¦rã9Íç6¿è–« çšÎ6­);¿c—pÔñG…õÖ]·”Ïç5Û]^2Ö•¦…’¹¯lô3`ÅØç;e´øyöŸŽÓÎ>7ö%® |åãâ]€òkg vÊ_җü—煻ϻ#ÜzÜß¼Çl¬-šŸN1ý’©ÏeñÅ·ÏiÊçsžÏiîZÔ à‹^|ü‰Ç$? Ëh*ƒXÖ×i-z¡ÈðwÌ1'†]Þº›Ýs“,Ú•ª“SKbUäÀôZé‰QÏÎòdùì®âm•«8ó¢÷¼ ÷c“ãÊå(íEûŸ–Øó-îᇮ 7ýá¨ðïǯS“ê‰Þ øS},ÄŽNÆ‹|ò1H®DÝlfòß!9Øþ‰Ãb}¡éš¦÷˜Æ’®#Žóâ‡À¨# ôŸåJµÑ¹,¿\©$ /jªôýLõ¡ =þ›+{Ø£¾—ž{NxÇ®»†ISmS…=þôÈïXS¹cT”‰_8É?dóú«e­Ä[Õòë±]­6äz¹~ŒV*¯²”W†½WËñÃŽ[¦X;vXa¹ðî™3Â=Ï<o~äŠdzüC¦w•si >r¥å™¯3€ºO@ã¯Á›¥¯Ý•_ªùMªì?6]Ù4WV_kõð­óO ‡õɰü²ËÛã¬@ûÏæ3ý7ÆT¢KñWõŸÍOñC6U YÌÐsM_µ¯k.°°òkQƒeø{uLé(¥*=ùÏò¾ªcô_òUÎ!3üyjÉ]°È«añ ¦…\Õ¦ÀW³~Úæ@µ(ST¶.Î0ý­©šàâì {>\@`!?äJ}ü‘ë~?òëûâ¦çšîdš+S§.>}ô‰áëß8ÓÞï·vbüg£Ù"R+i‘rmZû›vâÂôð‹–ÇÖÅå8_F'éçH–ÔÊSÖÊÒÛã¬<å•QQy&M^9Ìš}@˜¼g•a£)“Â5O>æ$ÏI ïS9¤þïlªÅÉ_LÅÀ ª,JÌ›°”+±Š‡…“Hþ Žð9M•hœvU¼üºàÖx.WÝo0=ßt)ÓLYtÑEÃ'¾~Ö×Ãì5f'†¿±ö¯¦¤qcÌ’éOÿ- ú~Ë[b®Þý÷jÅ`W6ä• nÆ“O;y´+°dö+ m:)+9-½”WIJN „VƒâcÂ’o~MXf¯åÜ[Ÿ /ý³ænÀõ¬Ó¯3½ÂÔ.ß«æ-õ"k>S<dðóC®4=ù$WkìåM/2}½i®¼ímû„³Ï¹,l·Ý›mYmcŽ•êKlÝWWX÷Ù%†’%p¼ 6¿Nf‰¥%o¼ìN–äÊS^&û’YùuŸ=kÙ,Ñ-¿ÒUfb,׹شׅ«}Èv¾žyê*&Oô˜ž.ºÆT;U”š*×%ŽK§yžØU~W÷°(É/We]eªÒÓݵ¨ª6( Œ€0è>¹ÉÕ(•ø¢Da¿@’ûES=›+{í¼s¸ì,»#¹æZVšë+¹É*ÅŠoëœøâHÓ®Äãü6c²Ê°DßÁò4ëÑ_­:’ÕIƪDñ/Oå(.1š›¬rt¼â„5'OûN_.üãÙ9án½Ù8[Äj[S=ú|­©©"¹•ž˜ßEq: îÐx,‘ëªq8žÛdøÓ¼¶«é馓M3e•Ù³Â9¿>'¼u]ÃøElÇ_y·ßX+ZFÀqcÆš½­4¯ içžÔæ™Ø€§°D;ýC ŒuÉ%C`Ùh“H)Vyõ¸°Œ|ŠI |r“r-íÔã¿Iž$n¨b ÔÞÁE––zïòA;ç\k×Ô>K©‚Ც·2ý•©Ý9–Óç1w-¹"Ìox 0Œ€Î ×x’_cÆ#©Œ«˜þÄt¶i¦Lš4%|á„ï†Ã?õù°ØbSí] Úý§{í2üùC6Þ =i£Â’|™¬epùžø°{æÉòÚòyš–<6ÅyZ²¼¶r–hé,¯-<ÆÆÇ¥—{K˜:m‹ðäWز>÷‰í€ÔÓ67š>a*~>îÈ•¤ãÎÅÇiò‹}–{ˆÅßô}¦™ÞkêǦ]KJÄã=Œ QI@'ôM\®:wýüÕ¢Dª4¿@’{Œ©&ÆL™4aBøÎñŸ }ýëa‰ÅmþN¦ÅäËo®¼cË+7ô©$ŸÖÝïÓ»ÂÑÁå2ÊÞ¤¼dã(AÙÊù9,¿Ä³&—ó—RJÿZyËØnÀK7Y/|möL» Ëȳ0ÿAæ=ÔÔoÊ,Nñâ"æªôšZ:@­ð¹ÌÇ_“ã nŸÛ¶³ª¾ašû:‹Ý÷Ý=ü즟…u6X§4€WæΓÝ&û_†½¼^SUEü°d®*ÊʲÌÒ’”Ê%+TŠ)ù*MI2§ZPΜ”e§½j˜~źa‘Õõ\ÙØRÎ2•1T5¿¹ªDùå:Sù%î–Bü èœpõ±HaC‹'WçÙ²¦?4iš)k®¹~¸ø'7…=÷ܯr¯\ýÄKF ûÇw*MFAi">¤(à™ëÃŽ«´Ö¼‚ªÑq~Œy]’â”ÙH"<µäzò2+ì^ÿ¦›ÃËì0<ÃðÐ’<ÇÔvT9/¹ª!‹,·^ÁܰŽuõ²ôdÓ×Lg˜®oz‰©žöQ>Ïãq–\)K~£’€N(>ŸÈ|rós×/¯;’š`åj×_îο×L›®9çìð_{ïmÙlš÷™ÞBÉÜè+‰òN»äíÂI\¼ZP•&ÚÕ§ùT«Ï#7.×ãuH¢Ê_ʲpÕâe[¼¯J’•N9\)SùÊÇ+]!Û¹xè*Óì¦ùsIJÕ?‡[Ì{MÅIâ¨Åœ/亚·ÔZy@h;·wåj`÷ nÕ£ÞÀô»¦šã2åS'>Æ aüdûª¦MÉ´‘äÔûúd¨³ÂmÞj·^)®?l¸×“¨gé¿Jš‚,ÿ§ŒžWnI”I‡˜«8©Ê1UÝ%)— <ÒrÆRYªL˜´õâa™í}aM*“élf±ß4±’Š›T•¹ël½îZ£š€ÎW‹öóHq>-aþsMg™fÊvoÜ=œÿÃ?†UW]39µ“ÓÛrjIŒ åaAaíÎsõxÉ¡ÚM’ñÀ\çC…\å-E–â=_âÚ±^>ôáõ—‹,¥Y@y“4Ëìùüx+½"&.ÖÝì×aÙ™«Äexd<Ït%S×~Mâc¹ªÇ" V˜ËKüè¸xìRÚý‹Ò?gêåÇÇ(ŸÂ® #Õt €@± ø¤å®Ÿ·šè|²ÓD«xµö0=Ú4SfM_!\æ÷Ã&k­YZ(—J–¤]ÿZ¯åjÕ‘¬RÊ®¯2´Šð•ƒ\/L^?Þã”WÇ%ÙâJÍŸ¬j<Îò$å/,Î|%ñÕŠBåÕÍ6K.®Yµ0}¼°äÊÿXŠî*“sÓÂNüT±\÷›·ÔJy@h³oÝÕØ,¿\¿è^Íüg›ÚשªeÜøqá„óÿ'ìó±}ʶÛ-ý§ïùƺ0¾ô¹¥*=9PE—ç§äK¾É~mÞSbe~+Õ_Ú¿çs•-oy**åW¶x.L“|58ñ–ÿI²(k9œToÿ$ÆC›ÿyÍø0îŠY!¼9÷‰g¹“鉦nüsW U´»ò»š·R­üF#?ÜõqÈÇ ¹~>é$üžéëò@½ý _ûÚÅa„‰™Y’eµ–ÒVLN‚•},) OZ5RKêDÊ-ö1Dqž¿”!ú×{E%ËpÅKÜ-…†ý›ä³WÍ\ç”°ìªZBçÊtK9×Ô^&^¿5öd½Fo™‡¿V™”¦r¤J×»Ó¢Bùo¦|^®—çaûFš'à cW¬cÓbóµqD[ èGB âðS-Œý>¡*N Ë2þi'ÀWL_%믾Z¸áôï…5Vžii–E+…Ø §Ûú‡V&Za$ᲡÏ~IÉv\²"(SUQ’X.[eøŠ$qËǨ÷ܨ—ÔQnŸÒT—T¢´—ç'ÞÒÅUÉëÿ¾vÊÄpÃz+‡5'h½‘)b§GÈ´€“?m´¨Ê–´D ´€¯?}ŒUX~ɮĥþxYÖEŸ}±~RøÚ/N ;¾kG+ ¼Ó¯2a”§™$lÅÛ•²>ÖQ2î•ÜÄøg•¼’ûÌ<8ÆbÆØ¼U5*i¤ÏWå¹Èwê8ÿ”©t!^Jñãݧ}¥rKø”–ä³4¥‰Ne(ï¼°pž[d1CrÉŠ!¼K¯²Í•ÿg)›º±Â]ñôn8ç¤K¹%‘ÑAÀÏ õÖýruž¸ÑJ®Î!­eýÚÚ4SöÛÿ˜ðßG}×Îâ±¥³Y§t|¦•Ãñ½ôx ®¥·/»“<NÒåº.š®Ëƒ‰W§*uœÊªˆ%j“TšTޫ䳿â¹)Í'VM´úâ)å8s†ËZ+¯®:õÔ°üÒ™×P¥ÌÉ0mÿ$FÀÒMéö¤­<*«‘²_·,}¥’µ:±8_­(¿ÄËL®jÊá$!ú'9¦\ŸòUV :ØÄËGyËÑ¥|žÁÜòâfæÄEÃo×Z>Ìï•g˜èÖ¬™Ò£â)ŽÊì<Í;Œ³Òr Sf€"àc©«>§i~ó9N‹¥ÚÙ¶Ši•Œ_t|8á’ÿ n¿‘=Ðk½ò®¿…{ÿlŸó’=€2ð%F¾ÒŽ¿f蓦÷–®Ü½*7(Z¸d™KJ%–v›ÊsУu˜uÓþŸ?4ߦ,eP·õoé¿’¯#¿²Ì³¼žOÉaã ÍY6³H%˜fª/’ú\&¶±ªr1v×¼‰_.ÑF t2.<'Òc‘Æ!©Œzºæ]¦™òž÷~:øÁã+i•¥°–ÅÑÚïsûN@-•ÓZ)¤<\$”áðQÉ’œ½å^ÈQ½ƒž…½ƒ:@þ¤ý#±µMñ5O² O2”žoå&Õ›‰å÷K®þ=Ï‘ånn‘Ÿ071uãŸ\…UÆ!‹–¸«xIú÷ðcJ©ÕÿzyžOå© ‰—vK©ü[‹€˜å©³Îû­ïêyU–ÿVi­vÖ&‚@Å$ AQ⃮œr5˜úDª Vq_5]Á´J¦/µTøõO KO±§ãžV$¦¾êHV*å8­¯UÁ¼—JùÜ èùÜðWi¡{¼j[&$ ¹‰§” ¯«×?û ¼I~+/)2>ÖüjG’Çë)çóêݵ<Óí¢ï7³¦†eD*[fYô ¦ºPòžJð 'ó&œ½T¹îW@ÍðqT®Fh¹>¯ùܦ1Yº©¾ú[%2¬ý÷¹G…õ·ÛÀ¦Í¥, k¥ˆdJÑôQ1ö•̃‰101zØæ>å+ÿ—ó`É`¨ƒÉîAw U§’òUu©ºÄà§6x”v–vzl’”PÚõW>Ô zÉ óÇØÏ¤]ÿäº*—á¿‹‡- éAF âðP®”j¥ü>`Æê¿½2¤eÚ”)á×'žf.¿œMuVœtØtoAÅ%F?›åÝ '7Ñò*ÅWr=Ç%+­>´Â‘Ú1Êã«Ï—oš¬:Ê+‰¤ÑÞ6µGúÇTåy¹~¥•ôAyÊâñr_6£åÛ=ayÖœ06übÆø0%)Ï3sßn¡=M}a"W¹}aÞaüF @`d|ÝéóZy ¯Ìm~'wMÓcòª9èÔƒÃÖïÜÆ†z3¬%s‚æ“¡ÊNÀd^bô+™ôJûõ*æ½Ä˜çF=¹Ú)XÚ-XÊ“¼ÓÏæ)íÚKvî•[êFoøÂúK3kbð‹ö"zû•?™k˺ˆ–ȨÝó­~ïF_®·T¿b’ìÁ:Cw±-t©•-+YôMc–Z7øÚ!þ Ê…fD,”@åôµþùX¤®Êïç‰Öƒ:‡´åö¦™Ïß¿~Ó]Ã!ÿnæýôd¹\^ÛñÉÒ7^û²[ù*÷Û•ß´²L¶ã´´•&Ka-Ÿ3Dcǰ“YŒi_NS™Rÿ’¼Ã(ÕáùU…òÍ·%¸Êñ6è?vÊJG…E—Ëý0ˆ8ždªÇŽÄRañŒ{qŠóÖÈõ°ÿŠ“ßÕ¼™âéª']¶Ò$_ ño-b%‰]ç'×Ky¿mz“éu¦6Õïî¿Gž«ã]•']¶‡- i'AG âР'qW~Mh>©ù®? ˜k˜iZ%:ø‡‡^;cFyÖwcšVRëÊqšÝ}Õá«wÿ’ÕÜ(Ç+MZY5”›¬Å‡V ‰Êo’¬ ÌUå¯H”OщAÑê“+IòZBå¤ðrX‘¦z/ ú¢ ¯TÌ»ÙäE™û"-±$Ç™³¢©3uÆ>ùäT®ha+J‡ó/ 4@@c¨$våטëî×x¬‹ÇÌÏßîtÐÎá-¦2Õù»Ò»ûl.ÒøoóŽþSZé_Ïç@ûÌ$u”Þ ¨¸’AQÑûËíÔ„ý‘ã…õ—Ê.ÏNÖŒØpXz´71$Z=Ke”ç­RtBÇë/åó•l7¸ìí€aqÃv‰yµÏ/[v²h=²èF ñç2ŸßÄ߯üw±(MÀÿÖcWç„Æ:oä*üqÓõL«d¥•ÖGua;Ö- ;Ãò$Æ6;½eHóer²¼µ°ÒæÙ©ìKh_V»ëñ¾ìö°Ò³Ä«W‡¼ Õ«údÄóã*ã“bT–ãe:Æó'£µâËù¼ž¤¿=i哨ÅvðÒÒ®íc*•¾ûÛÂNk,vñ"Ëa­(’Ýzæ&~[-¸ë+­PyEàñrµJH.¶¬¼Jžr¾dÕR.7©Î—åºe¬ó•M\¦ü’dEbÇ$«Ê’£”æEÉýÿì½ ôgÙU×û«ê®ÒÁL’™ „ĆDb1 <AyŠÓrd=YŠ¢¼Ççï¡,ßs=×z*,@‘å,š!„¨ 2†L$È † $=UwWýß÷³ÏùÜÿùÝßýWW5]ÝU]gWíßÞgŸ}ö9wß{÷9¿ý?÷þØñw/;þ¨ŠmëPý¼Gív˜·ýmÕ%Ê„„™€œœŒ‘N>©ZÎ ü„éééé‹ó@Eé¨BÇ…¾sœ_ ˆÃ_|Aðžþ¢§ïþÀÿñ‡JÞ¦‚¶'ÏÝ|íÑÝön?ºjŸý_ywÝUɾ;CG9¼ ½¥IÄ P;þê´T]g—úÌC~±æ€“†Ùí—Ÿ} F% ›ˆDaµEÑÝ•øC?€1ð)ùøœ!5™ýj>¿|ã{­8ÇQ¤­4?§~ð÷XÇ"×Ä¡g¿|ËgÎÜ´ûÓî﮿þmùËr:Ë×iG',uëoî¡.»Õc‰]Ëì¾G^Kë´+.g©m´åÚ‘’ô+HÇcüéÒc‚= vj{’…]¬™Ö½p‹óÂÜ}>c=:½»þ™ßœ(óĦwøùºˆ^įÄ!ý«ß#ÚKúŸˆMt§>em„ÝêAÚi_;R¢NØöÀèy©¾”~ñ† îŸßü§Á·ÿZ}ëž#Îêª_+V ,:TÿØëÈ …ê®§úBÃ`KÀP‡-ÇKâO¨v裗e1‹”oÌߦ>éh~WÄ¿%¨]@ø¥‰Vžø ÓÓÓÓïâ'`%²Ã»ð—{Ù×ö§ƒpÃ#nÜý±oû“»S7f÷\OÌ™¨SÙ^ûÁãz&úÜùw6Iµþv¿J.‰Ãe§_kQ»ñ2¯´ÉÀöc#­ŸèÔÁ&ãóžóIîå‘^ú¯_Žu~ ˜”Ö3_Ó}±s¸#6n~øTæ9æ5êRÉû.xÓÖ6ðüO™ÇðõúË>¨:(Ùü˜x8z€ë\¼P,â^¿:ÈÚà÷éßÚ=ýé¿©-7Û-»ÜE.YêÂk™Ëh©õUΚ•òØ~­§ÝZî¦ÿ:¨á.VÞz?þdù\ËèžX´¡‡¡ãpãq¥Ž„ù³iÇ;¡@µ9ówב<þRªðãçIøÙD=݌呧žòI@:ØÄŽýÁ¯1¢ éÑwž(È.Ï×Þ‡æ¢?|[ð»ƒ8ˆŒóÃüäýõœAíJykÈ&\¢pè„éé+Ïc@3Ic!ãѨ¿¸5ôGÜpÃîÛþÄÛ¹žXÊÊ æ@WõçÈÌà¬(–÷ôÁG¶…•À˪a½YÊ©cUÁbÕ„r“u&þj…®h/Œ²JðÅŽí«ÿ| blã! í•9\7ü¹;v»óI^Fíæxì[?¦Í2©Ù‚¿!>u‚2*''"dbØ ÓÓÓÓáâ&`ütN#Æoý"ðgÂ?&x_ø7¿h÷äç>9ažryD7É·JÄ%Áf‚9¡’rÃÞ¿–$lŸ•”«$^Kéµwb§%ñ°K2°vý¥äõŽÀJžëé¹Ö%£Ã´³@Ž®äýh=ØVß…±â?ÜÁûÿØx–ÏðgûЦlöÇŽà¿6øüE¸f¾$‚çY78·s™óC8ÈVšŸÓ?x{ÝspýqèÓR~uð^ü‰¯ß}úoÿ£›Ë]–ÔB-µ]f³¼ïrØ¥6KæZ6‡º4§Îe4G]–ÆKô ;ê•–âôÓÛËÛå±}fEpD-§‰5ÁrP>ˆ?ì <›¶à"Zé• òG¾fwê‰üðï&ƒ~8DœÇßú¿cßQ½“€:ô±AÀ2TTpaà3A^?âçÏ^èœØVú‰a¾!øSÁ$yhr;œ·5õZ‘Ò¯c€Žå'Ü—pØ„éé+Ãc03 ì(3irÏ‚L¢L¦O ÀÿòÙ¿c÷¬ÇeÅ2ë³*V´`¥a‚2+ƒJ´Eo½Bq%b}ÙìÕª¢ÛpÅ¡ŒÅ„Pu½ÝØ¿rÞãçóÕF—¤ËjÃoZ~+¾ü½ìT$Q ®à…™bþøæ×ÊR|^>Ù®ŽŸ|ô?Ôósz`z`z`zà‚p­Iü4¦:—Qñ9)gëú!<ã¥ÏܽüË_1¤ú2—,ßTòû?‚Ì ÷&‘Æ¿ã­Lð8!؈is×Ñm×^µiÉÀã´bæÇUCRÝ~ìò ×´{›Èîîò{HìñUn Gô¶¶Ô3^¦±†Ç ÅqúÜŸ}˜ßR›BµøŽî€2ŸýÙ sš¨¿9Îi5ææ»Ð„ —ÄËò=ä]ßåö²\Ú 7ÊéT{ÖI—õ£$–ˆ(.2ë¨è@Ëov÷­•nVõMzú7þÅD™ü¥}Ø«üÈ qhô7>§ ç…° O±Jžú- »ÚRßöÒñpà'\ØúK¿Jñç¿ ~]ðÝ6qPË÷Ø×¿-ø“Á¿ä]›Ü{^#žO¨çRJßò[ãKõ„“<€ó&LL\Y0°2*y'JÿzƯ’ñ—ýxÖã¿ûó¯ýÌ6Ó13®HXQ°0±çŠÂrý«’u`_‘X¿^¹,ò®×¾ÅtûÈ\ñt[UÏЗ¶ñP.Q§ ²V,ƒÍ–qa/_žÎõqRgßu€öá«“ý¦Œmø²ˆñ5N@t®ÿá·O˜˜˜˜8Áq(@Œ‰§ÄWýÌo(ˆ|ØQ÷ùßø%ÃÀ˜Ês‡S‰µz¬·vðE+‰ºeG`%~K"ݱÝÚ ØS…t\é»$òÚƒ0,„žFiW;K„ÌCntÜù‡ŠÓ »oöwör{W`~y_aáîÎjf»*¼"Ÿüùj^ñs‚úÜùÌò8§Áº•æçôÀÃÇ\Ûãuî}%¯ >;xŸùY_µ{ôcž±,‹]Þºôt¹Œœ»ÈòÞ2y\^×zÊ})½'ï²%‘Hhë£#n,m²F{´ˆ”Ky׳z€6åKD²ÂΠwwøsAbÚŽX{Ý­»ÓOþë4ÝÞGú…Aâ>‡Ç”s‚\êP Èl繋èF]ô@dÊi?á¾= Ÿ¶èè×_‰©¿|eðs‚ßüHðRà Q&AüÖà›ƒ_äaÎù½v¼V<Ï”«8Ž1â £p΄éé‡Þ,)#2èqŸØX”À#çÍ?›fû?ßïÙÝx:jÌþ5ÃgR&aÖ¿œÔì¿üÉÑ@(:Ê—«ÝNÕõ²+©í]ÉØ¿}g£=Û.}Æ6;×ò±¬J¦À‚¤>â>W+ÐX¤Ü¼9â¿ú¸¡bŸ}VŠŸÄ×ø¿Cx€s°o¼Äócz`z`z`z`åâ%@Ì4v[¯–y—ïc=€—þÁOÝ=åSžZ‰:q„|¾t¶=tî¿KÒ.ruESjÉB’áÁžì£¦j•÷G}Õ[?Zlby}Ù§Úv;cÇ_zÓC›’YMT{“GýHtςѽ+ß™¾ÿïƒìt¶)CƒkšŽ_öÇÅ×I°Žs›çƒzÐsvÂôÀÃÊ^ã#5þp݃ŒCÐ/ß:úÇ>î»×¾î«êž¦ž¥,KÓZÒöå²òqI»Ô÷¥óR—×½nùÝ=ÊÚå‚Üþ$íÆ1ŒI¼Z·Ã–0b¢²„C“ö÷÷hsOÆZ˜]ÇüøÇòÀب¾z§›'BoyÙ†å}q>yÕq䀜ã<Ôº°uœ?ÎÏI@ÝØ}Ëž{ÚÂO8Ùúg¤ðø*¯o¡œ« ~u àÏßdŸú¥À‹£üõAvþƒ ¿"<ŽHà„M˜˜¸r<`P5À22'@îWðpkÈ/{ÆÓw¯QvP;ÃW".+ÿhbÎUFX=,ò¾š¨¤_f{zËJ¦¯p¹etƒ¬„è[}ô8’ê?uާV?¬hu¤ùØKØ!¤®*ûêb\–T% 0Â×*%»$î͉{ûûÿhÖ›¶/byaÅ­»ÝóXzl×EŒÏYH€ð#¦¸7 Žƒ nÂôÀôÀôÀôÀ±z _¾4XöKñ•¹íK;=nîº3×í^û5¯Kj¬%Öú¿¶»/±½vê‘Ô£¾Òq-å·ÈMìÕn>ôú¿$Ý*Ù§œ‚}—`ëÝì\ýÃnéÅnë¯ÙdÐL5Neè$—G‚ËVk磿´ÒBö˜öù«ŒË[›i7ClÈ~‰?܆ώ˜?âëqnÏ-€ß 6ƒÊ„é«Ö^ßP‘ëÝû€•áK‚$!à3?ëk"»©%ý¸ïúÂwY¯–Ñ.§—¤_ê׿ú[uëv”ÓǂևöGß´ˆ=ðʤÊ(/2l§\ýf9>ÖÁó0 ¿»ƒÐúZ‘>–Ô½:FJçÈ¢xÝ“þr~¥ø#kjcþw½íù€bDßs= lK›‘G m¥ùy_ý?¢>–z^sõìþmð_ä™ù÷/Xp­|kdà_ÎG„ã„8a¦¦zŒ•ÑD¹GáY”8¾2üÇà«>ýUmF7ÁW3v&ffùžt«™Þ„³;3=È* ¨¾rW ¬8Î&Á¦ž+J¼mØc¥€ í1®‚TP瘴W4;L ÖNÀ¡¼'Ï#Q<þ Þäý,BìJ?ð'O~à‹¢þ)A#ó\„­2΋!Ÿ0=0=0=0=°ïcä3Óˆ«~ჲwís÷›·Ò‹¿ø“v·<ù–úb‰„• ì‰<’p…$äHêõ„ÞúÇ>HûÝ•<\8$þ»k¯§›­Ø#ÔW"0í˜OšžÉ?ç4å- yO~Äã8ñ‡ÎñDTËQ®/ÌqM(,?lÒ~ܤUÑ‚ŸɤÛ1so=þK9µë}4øò _›5Äǵ„çÂóDœ0=ðpó×øˆ^ûPⱈ¸ô¥ÁxÔ£?v÷É/ù¢’³t­¥rnmxÀe2K^–Ä˲7eõ«M–Ü¥KÛÞ¾t×rʽŸj§d¶Þ»ÍAŽŽ@h`L†ä” a¨„¬ô zAWå.¯úâ3Ø£†GÄÉ›?9<ê&|I¤D)|nÌÁïtAº.Û½õQÙ„Ñ<@aÝ^ë'Ýö€þ§VãË5rÞDï©DöÿwðKƒßühðR€G„¿2øÖà›ƒ_$™ì½;Rû‡Žã£ìqx –SumŽ™0=0=ðÐz€¬e'HxîLš¼4õžÿ„'ì^ÿ‚Oˆ<ª®<*A—I™ÖðµjW‘¡k"olG¢Ï„Ûº~YéÄ+“u=eû´®¾ádãJÆþ Õ ä€"¸Y˜´̺®ëwÂ#À÷ä Ó½Áxd÷9ù>ùd¦ƒmàk|?.R(;¡ÐŠøy¡2az`z`zàšõ€ñQjÌ„K‰«Ìm¯ foö!¼ìϾ¼í›«Ýy-=ÇN9¸–øË”o¨&î° ­¤ß qG_íâÃ& Áú·¿ã¯=*lÝ@Óæ\°Á©[K<6åí‹u›€Z’²%}ì—Rñ•æóà{êñßÛòèï‡"¯)Fïõ7I̓©á!êß·©ðwñ»>‡z.<Õ¼†|ÂôÀÃÁí&<¾®½£¼ö¡ qˆļ2x/åŸNîëL-™©äþ®¥_u~@IDATpBKX’dËò6‹Ìqy ¿÷LoS:èvý½}©¾÷€Nô|-«áC·Eß àZ'‡~Xdi[»þb]Ë‚À˜54ûþ¿ó8Ê0œÚ~Âïüù¸HøÝò1Dä‚1IÊ9òÐÂn‚çr¤(bƒ¶ÂÈ+›ôÐk?m•‘áoÏt 9¯?üß‚<ÖûÕÁ æjº$˜_’»¶•9¦¦ZºU×)mÑg||,+§èª>;IFún@ô£äÔu¼'IËsàA¾<5Óí%ÅÇÃæ°oˆw¿üÑ»Ý×~°´Ö¯‰à‚9¨ebc’¢)çEž2G ;az`z`zàš÷10fJß ™\ áINÀs×óv{îãÛ‘„Áö¨[¾>MI¢%ÊÇø­_Fy ·4ú<Æ/óžI[ëë‡BÊH7žTmØù‡eûº7;](1–J’D¬„`k_;»>mLþ™ø«ñdLµ0¶ë˜òY 3€Ã±\¡À™¡¤ðà—ù]ÅCø˜ˆØ–óCAZ¹Æ:ßµ!E!À(†NK6?¦®&p ÈõNÌ‘‡\cfçCŽáƽ{ñ§|E-M—ekªk©;ɤ–Ù¹‹9=ÜTõ PÎò}92—×È)K±1–åIàÁ[®ewÆ0&öª.(Û}°å>Î嘆:¼è¥ÿÒ‹ŽÇÐÔùl\;-"yägäÍmÏÎæwUyõñº”ßc*4Æ”óSÝÔXÑ&PÏúªí6 }[4V?áÂð< %/Ï“ç‡:ù±9À¹ùîà›ƒ™àw\l¼xzðb <" ¾?øÁoþtkäZ¢y(`P`Œk™u:„ž‡Í1Í™¸š<`0dÌòR(”áY ¼:xspqæúÝç?ÿym€6èÊ‚™¿d|ô·„ºUyYy¨6µr8A†`?$öXð& ©÷yê\íTboHöU( ÀÐ…‘/YÆæªd© ߇ ;.|TCö›|]€}´öý Á—¿7ˆß™,Pc"á\8y8±D4az`z`z`z {Àh<Ò Å©'nKY‡æ·ÙwŸ<€üíHØÐIÚa€dœFÏDÚ’u©H`'äŸ9Õx`I .ò¶{bk«~³JO¨úˆIôa‡d^kƒ”26ƒ-ñ×d%Õf{Ö’y¨íúë»ÿò¨°?€ܙÚÛ‚ìþ«w<þ˶2^†Ü†{L‘Ï æ ¼Ý/ZÔàwæ1kÌm2­—`~L\¥¯cy(h2±ÖcgÒ<ÿ…oØÝtã#KîUcgÒjü{:J¬1t:»yCi ݵeë¡ØË´¡ìAËcB6µö ƒî’ oYZuãb˜‹ä[|`ïž”ùQ½¶ûFóÇ‘£ó1žèx:aäè1Ÿ»;ú•¯§åH´ò^8ãæEœÊ[q7èа­üH×<å ¿~Œ¾÷®éx^è‘Ë‹mßüGÁI¾&Øn¸0>"ü•Ñý¯Aßü@>¸¶FÊ8(˜béAuàÑ{X7Þ„éé‡ÞIà e ÷)ˆüµÁxýsž½»å†ü1„pÅl^!mŒWá)’tg`Yuz[tjŲ«˜ÒÍö›™Ü£L¿öOR@V´'øLšt§Ÿýa˜>iºãÏÝK²0_‚–ÝØÎ;‘Às`~ä|(á>à¯ÿ²Xa‰"…TÆûò›v»ï˦Á `GÊ÷9ÎþÇ*M)CµWšt~NLL\Û 6:—Cã˜Ó@ÊŸd®Ûƒsãî)¯}Z%Ü*ÈŽóQ’yµƒ¯G_R7Ä{óæ-¦•ük;©Ž `ânÁÛn¾(D„] £Ýq0uIðY_òèðwÿ5h·iºwW}’{i 0’~5ì±ÜjGZt@¤ð£ÌW¨«#ú† óšs›ç¦ÏšK#äkÙR9™é«È\Ë"1ÇkÞ8åúO ÀÇÂTòŒ –È.mGÅ%+ÕªKÈ©viH[ì¢a| ¸~$6‘Õc¿±å¯ÿ¶6èFB‰‘µœ/qøGýΓ€øš?Sü§ kiãŒC‹¨€òˆ]|"A—s‹M(e`M›t~Þ—¸<ð.Ä7ýOÚƒžñ\hKÛìÞã1á¿|U™ì¥AÚ^,üæ(‚5øÆ ûáßdÒÅך4l•c“wLè(‡唯J àM˜˜xè<@Py(”] $UU¦º ý‚ï»ÿÔã½™­™…ÁZ­d.¬Y¹7‘gâ,ŸÛ£A^  +˜L¤ý²RIŒ¥L²nY™¤xšWÒ/|Õ•uýZ©$ÁG=`—5Æ–2•Ç@]Éxo׋[Õ´¦ÍëóPõ @v¤pD΋ ÊXvB‚GΆ¤4az`z`zàÚó@Eã¶/)CAâ(1•ÄßË‚ð¬ßûœÝu7´Gu+aVÖÚN@nÄ}þtÝéG²°\½"Pè£Sï¨ït òÚí—vìè£AÛýG9ÿòËÃèÚ3XvóQ²jÕR†|¶ÄcŒÕ\v¼îþ»=©ÁæýíÇ?Øí—?fñªüa«v¦=__˜q¤ðqGɤì¯ùë]2?õ‚ éAÏ–üR义¨,BñÔÚ{È'L\éàÚíwz Õ²qêûåá)ïÁ-·>i÷´g~Z%ϬØKÆbÂY–»ÕwËêŽ±ã•øxpÕð¸É:aYJ#‹»þ°ÜnÖÉÀªëõµTïöïæïç]¾è¤ŒL¬~c¿–×zÛ;ür‰€‰gIõ•¬þȲÔå'g’ç»99Õ;¤L®>ð·qˆø£eyÔ‰QÈA€ó#_‚Õ‡uRªáÇòªÉ,^¤8³ËÙí¼²‘:—œdÖsáyÑ&”+üÍÁ7=“@ç#Âq½ ÓÓÖA²“› s(2EûÁ㿺áÌö”¬ø‚Ä «f|fodÄTøMp(è4¥¶VÔªÞ•rW(c"PY­2z¡Êù"d"°ƒýê Rêj—_d ¥-«„y×»ÿÖs<}9þN=|¨;_ýˆ,Þ²I¼÷œF ðð³ƒ?d29PŽ˜sâB…²½…0=0=0=pÍz€x(â„q^#†ŠÎmüµþžù†g'ÉvOâQ_vÒµ Ë«øóþ¿Ôv¯?êï¤Ç=è‚|Ú­«”ÀyïPÓ™µTTÂ12{–Ý)裿<æK}{,8)þÞk÷`vÖ@Ò{©#©yW>XõíZïÇÞ“Wek€\D<êñP5û&~€Š`çÍ×<ž']GË)N˜¸*<°¾Ž){óýw‡>q먞ýÜÏMÂíô^’bLúq‡x“Ôò;ac 8VDD‚ú‹½er I{¯ÚÆö8(wõ5 ‚Zr§;K7¡ =d ?ò0¼aˆU¨Ñ©€­]€Yõ¶ÇÃäÕGüúoý#Æù`ÂJe‰ÁSzÝîh;ˆ¿ùëh ôÆsXk ¨ѹîI6¦üМ }é%3RΡÈ=¯~Øâ=Ÿ£­ñ\i}xì@ŠG„=Ç,Ã3öQŽìª‹ CWÍñÌN\0²!è@‘Á39Š›&¼âIOÚÝp]T C$Æê[M ìtÁKJŠÇì`ùF´ÒSnÓúfÄdßcŸýP?®@ªÌŠƒEAlÖw„¯?G¢K]æ|h%ý"£Ž$¢‰A)¶Œµî¸þñTÕ²„ªð&üäiй[cë…yzúG㺠Àçï z^¤`ɉ£–ÙÐ ÓÓÓ׺ˆ—¢óš_ºY2·='È[öàô™Ó»ÇþÖÇW¢¬h ­7œâ}™z”e÷]sÇž…ãíIàÑpÚZ -ªÍ^Ûí×ôÜHbÝ-•ÌNÁÚ˜O€„Ÿ?R;ÿòå·…_•ùL²’1´GÙ5ƒýv weÇß©½ýTvÿEcy÷ߨb÷ßAøM˜Ä¶áÔ ÏÏ}l'ùâýƒã¹‘‡òåMŠSæ¼'L¸j=À5<^ßc,26€OzÊo_þž¾—ôÜQ!(w  ö»Èpu‡lÑio貚fò[{ÈY6ÃW2e5± @z“„Ý|Ór’֣´§Æ*";†X£Óüñ£½b!»‰~¸»S·¼lá[Íò™G—v<Ù”Þëüp^LÑœ¡Ša÷ÜKyÂåó€þ‡z*é­ŸÝå¼p~¸Ò ÔýÊ ×€:ûp´‡Üz¨üدsºÖ#ÂôïX8&dz¦Œ @—:@ÚJWèçL^¡'fëšðÀì8`ËãBe&F~úü^õ¤l±7¡6&ýFM¬ËŠ£}jÂÕ'+…õŸ(×+–ZedÎÖ®«LÉC ƒ&øªŽUíÒÐÄžcWvîø£Múìô£=´#»ÿ ó%‰wÿ1 Æd¸n÷>qÝ/ïƒOíKn<1È‚ð;ƒÄJ&µ ®+œŽŽÞ@Α“àUü3Þ ÓÓÓ´ˆ‡ÀHÇ89Îo'Îk{Év×ßÜ~ô£í¾‹‰YÇ[¼óÚ©ü%gvàéI¿÷†ìxˆZl »ÁD%íjºªÐŸà_;\˜Ú"ü«áÿIðÛƒ$éƒ~¡öIyDêe­ÔŽ}-³îŠ¡WrЋàŠqÖÈôÀeð×¹H‡roBY”ƒ”?!x¿í‰‰}5³§)!G`ö.¦`ýAÝ Ó[]ˆ+èí\…ÐÁ˜àãpÜ͇¾+¨ ?Æb¯V"©s8ÈK—„_ä”V6#6iúÊ.‰~Œ®" ìþq‘QüÄ$w ]ãÿñÜPÆ€œIÀ#yʦ¦¦®%ƒÄHÑX IFÀã^ù„J¦±Ë¯íl*õ«¿Iœ!_ý5è/]vsõW4WÐ爃ŠÈMìÑ‚vìíc§^í Ì\ÅN>,6yÓ¯6Ñ=Nþ;ÿ˜a˜ø;›$þî ®¡Þý—ú¶ãÏwÿAÌ4ÌfÜ‹ðRxþ:!>6ü£‚{pãéÓ»OyÂã2Ëó…¡Ç—ÚØ¿XÔ£¿á™¹õ]¤Ü¶M+öÒ¦V( šFý¹¶ÛuU‚ˆ·c¬XU F™d Pɼ”GY 0ʬb*)}WZ+2ßýWþf÷¿ü+ôa-Å^ÆLQ/×á‡1 Àmà¯ÂyK`}Íbìí…2À9C¦Ù„ééékÉ„X¹Œ¹mœ×±ýÜy þ©ÁxÌË×—E™GûÜ&6=–éa‰¼2í{ÐÏZvfXíQµjZÚáG=¿ÀúŽ?ú:~Ä7ÉÇ”IöµG‹Û£Á<ÚËŽÃzÄ7ÝW9ÉB ½÷/»þR6%vþñå˜ÑÝ‘òíIøÕ£¿yíö£´ìPØ âáIûaª^õÔáíçt©™g¥ð® ç`=¯iÙ¹äÃN˜¸*<ÀuKüÑ56Ô8}zðÿ_^KX–Ã,s5”YÚ¬#ÁõmØj?½¹´UëÐA 9Kl娥¯’÷>Q¯etÊè9¶Jøµ°Sm£‰AÊʰKÂOY%ÿR¦Ÿu°aÙýG®ï<Ïøfg)Ê.ÀÚù×åU>½ ¤ó§n~Ñîh;øô˜æ\Œñ…yƒžAÁ¹Äs©|MÕ£-6GJœ£½rí[NÕ„x€KâSxP>ì"ƒôµºRåM«}z(asÚ¶—÷|Q†±3ÚçZ?üÆào ’ äeë>":øcøW‚o ’ „æB¯kÇëEÊ8Ïš¦ª@ è<äÀM÷`‚'•>·ø-ÙÖøF½­ú)›¸<ÀuLð"0AAã"÷'2è3‚ðq¼uwýùÄ $—ÝuZ‰ô…Á~j–YV$ ï2äJÔ­Y]&J]Ú‘üS&üÐÓ&´’Ö§)¡’¤_%Cëñß$ûîͶ†?nìÐÃ*³ü¹ðµë¾ã=qÜ:ä”oŒ‰'Ä…ï'œïçæiÁwQ§^‡Yf X °ì¼… éeÊÔkq¬›üôÀ•ì®Y×Ö®¥¹ù·b÷ÃÜú¨¯Gf¹çY"óølÅ ,s·t9÷^߆kccXª%w CËmï æÒÙöt£Œdz&òèÛ„á¨ÒÝJ†&ý É?ƇíJƦ?øq>FXOWòÏ`8Î8~÷_ "l#lâhüÑ™gD¾ O‰”8 ÌyJKÂ(ëpÀ9År“îR'¢O{ã[÷øR¦ _ùÌòI;yÍ?𠾕â&åðkÀ§úŸ:tG¶¬‡Ð´{R¹iÛ£¬mé÷Fö=Áì’Ù}VðuÁÍû<ò-àº$þj$*è5Ã.r ™ãùCÞ —{ã ´/O.åuýX7êËKmgyÒé«Å^ã=&)$PŽ‹xö¦›Aë9·fsÚ¸ûÏ;âLšºHãjåBIEãOʈ,¢B"n4Gý&ð02&öèÏq¨ƒ’E·’z”ƒ@%ÿHòõ2tLþÝÓwùa—±òÞ¿B¾$•…Jî±z`ÓEU±zSkÇKØîðÔDÃ÷§ë xzdï r>hAÜ„Çc”î8ën#š0=0=0=pÍx€xè¼F¬4^B™Ûœ× ›;ÛO]ŸÇ{ŸŽj¾xÖ×jLn1Òõ·4øh‘ÞDÞø«I>ÖÁ_SÒÔ›Ð[L†Y‚éž/´÷$¹ÇAõÕ*ãG±=_¼q2sÔ/ÝXÔ3œGê™÷¨Ÿ0=pµx€kä6AYO±ÈxÄýp·>ò9Ç;æú]Q†ó±„•._—YÎò@N¯ÞK鉄 /í"#!§¾ƒY–Ý©p9Mòõ®?Ú£Gb ¾ÊÜɽä2ÏÒŒ~Ѿ>& ±¬GÅìî;ª¼óCM¶¼ÐztÎÊÛ„w¹?äa¹·^ÚiÞÇŽ™K*¹Æ$_Kü‘l ÁÚÝ—†P’„$ yÜ·ýØGKƒw$ñÇÎ?ô!´*ÈäÓ“ Ž';ó8aÕdu'6Ë(c{ÊOåc>6RέíAE­ô‰ºêG«êM:=p¥z€ëÕX4Æ¡­XÄûÉ[rÓ-Ï®%ª±bÙåå†è q¢ —‹tže²ïý뢺UYöŽeÚ[nƲNåí0.·•—,°b™õþè&‹5ÞŒ¹~õ7r“ÕïþãÑß ýÑß%ñ§Ô.¿ÔCµ×‡Zã(3©?J°}Õ¦)>&äÑÁQ9oĤ´,€*÷;S¯: &i£Ñ¼ecW=ÊŽ=€o¨<þ·,/E.vi/Œþ‡§Íx>Ô“Ú×IT½5µm{ŽßÅ¿ü»ÁW_üä ã¾Xà½Åà×ß$ø¦ wýØ;ýS”cã¸Çjù²RáåO˜}PÖÉ#ï£>X—›tû¢²nÒé«Á^ÿLV܇&Yˆ(CN™E:“ä<ó$ùâ tÔ*%¦]­TEÿØû…à~‹-+–QñùZqô6¾ãb­>2(W8êA—¤_Æ^ ÂèW¢/«n{’|UF·_íŒüÞ!ùG?@§DW"®è,98|Cm§ë²!U+`qÂVÍÚMïu™ä¨Ç²Á>ì„ééékʬ爦Îi#eNç;vÀ™gÜ”GdïNˆ>Jà=SïÌ#´Þ˜_ô5)G#ßÝÇ ç5u7ô_>HöØïT°Ì ÝZKòÑsßÈÔÔ~ÖU9 [™yô·ïìk ¿ìüË| çÑÙ<ÔËw„L¹ý5ñWÓGêŽú£¿ ÈÙ†©Ñfp7$q†BW|¢•”yµ…–é D6ö€S±Ìyå)N˜¸b=ÀuË5k¼1ö¸Æ†*ãš?xÇvd»37=³.zwÓ¹´†ŽïD×»C–×›Klï"F8€º¶·Ê¥3r—ÎÔ)¯ åÜÉ zØSVú½Þc!ñÇn?tHþ¤ I?äëG+ÉWc†KÂï|bYÞÈj–€„“úà.cg ;cüèú'äþ{ïh°»êŽ.A•óFÌ ”«çPç–°›À9𲞖Ë¥”ì÷¬S~­RýÌñ¼edkôü¬éØ~ü½¶¿%Sgì“~ûƒõ(çSÞóLþmÁ·Y‡¼&ø™Á§/ˆåõIC–ßß}}g¬7ƒ‘O˜˜ØðÀ£Os M¢‘ä«„ ±&Õ%c¢Fý @Lò]`½±Üj÷íŒ+Ç«W"t¾.¯wû•è)‡:\‚$þLþYÁôC%Â’ð[Cà—Ô‹&¥Èo2:­ ìv¿;"pÂôÀôÀôÀôÀeöÀu¼Ž}q5}0´é'Á½~Õw ùΡm¢X¦‹$Ùxgà2ݹ3°O>*|ì ê‹ó¨ãp+Á—!ÔN¿ô×vU™ŽHü$ôHöŸÇ|•óè¯É¿Û#ÿšIÒ¢AFª?ú[òtÆWƒ˜ßœÄ t)ŽeÛà[,ЧDòϤS0=0=P8}úæÝ¹óg*A¦KÖKaå¢K2@q”/6{ýJmÙɇÞÞr»…œe|Ô¹ëå6ÝܳÉ@(àÎ?ýêÑßÄœJþAû8[-;ü¢(&ª`dò-Fîè‡ ß¸;}b0bGÖo|  M;—ä&2’`?üµ ƒ„åTíÕ$õ.–G°ÏV:þ¯hy¨øÃáID?ï¸ÉEs[GZã€>³º4låÅÆ™ž:ÇFýeƒË™dО¨_¯ÍØJÿ^ê~'ʦ¦.Í·rg‘(ce°¬"V6{'Ê\H·š/ ö)6<-ýw5~ žq•ø ­r8^vô-+“ðèÑð`ç_¾$ñ‹¿<ö[+¦Ø8—mò¾úxj8t•pÊšfLðP‡ßÛX¾™Æ¦¦¦¦Z<êôîl’dÄuvùñ²Âó³k€=!è·$ôŒå]ß‚ê9_ä`ß}è`Î2¿$Ì4D"0!¥ÿ*§ž$ »“õØoÊŒ¼íükõË£¿ãοj™&2“~òÐÆãåÆd`ÿ›Þ¨>ùééûöÀu×ßZ 4Ö‹7äÛ2‰3n5vþ±‹Îe´aÃÛð$Ë´á&þ–8´j¨]ôès]ƾI¼‘w9M?ÖC味ӯâWh=òK9Fj·_â†;ÿ° ðºœö«¿Q쨎—Ayà(Vb°ž£þë¿§Øù’8"üWÒêÁo þ»`îÀ~äÀLüq r7IÃ^~¸Ü @Ž€y) °óoÂôÀôÀýðÀ­ÄŒúaŒÜRuWñÑ—•ÔŠ@Y¨+ gnê×?ôaû=ªqÆB%íE¦Ÿ%áÇÂ!P‰¿N)Ó¶tºŒ.”ùد;ÿHr€÷öýX%ÿjÙ‘.¥ôHÂ…NÜa3,õÐg|'LLLL<´8Ÿ"L!wõõòMy*µvÕU0gl2߇„ »Ñ&)wÃò˜p[i7+ÚÑÒ´Ún¿Vâý~@KÂåñÞ$ôÜõÅ*´’˜áïÌâöÎ?“}ç_uþÈý@Þ¯Lh"Ý:\è8yɺðèåwÂ&LL\ºN_ÿÈ–èKS“vÜRF‹Eæ}Ù+–úÞ¥zÄ´R]é/÷µ ‡¡š¼C„–쨙ìC.O‚“~¶WF×ò>öKÒÏÇË@>ö~õ·éR?¶óÃ`øð…mõx0Õ³Åâ²£rÂôÀ5äþüFŽ |ðŸ¿%Ȉ0Ãs‡p;÷;å€OÕåƒË•ä`< FoÙ]P‘ú ÓÓ÷Ã7ÏÄK­~õ÷ø Ëq¢/F×I?úqERñfXu€«Ÿ%ëƒQo±±’›Àóv¯Ç»Žu& -/”o-ê+‰žºJþeLت¡ô_?ú‘• ¬–õÁ2D$¹7B½¼SÁ1ñ‡~šIý cÄL~z`z`z`zàAóÀ½7åqÙÄýÄä Ë=®»“¯3žÎõØmÒ¯I£mµóX?‚c½®°Ò“4i»õZwU—þŠövw×£¾mþEÎNÀ–¼ä8ZòïƒOôIîN…êQ_’¾þª„í«“TŸ"—iZ™”zuº°PÀبƒR×ÇnÂôÀôÀExàÔéìX˽C¬n¡~W4±.nPo»õ-jyÔÑ&Ôäz&øÆº‘WŸ„ mÜáÇ ¨#Ñ(gœðìþÑóG?X/ŸçÀHì9€¼óoÙ͇| >Ñ«#";#'Ixt>¼ Có× ÓרòÌÝ ~E×ÞýïAnï®°U†>(p¹€ãà=8©I@Ê·¿+È 'LL\¢î q6&ÝöÚçó®C^«âÍ(]Á¸rYâ6Ú‘¬³&ýS$í—D_ûb´”/”þêQ`u"3%é,¿øK›”N°~Í·SÔ.&û–úÈÇÃgØ¥§~è‘M˜˜˜˜xh=pç÷înKªlØÐ×Ôc´ïðsv:­A¼×t$üx‡ß™zç?Ú«–«ŽüÕ|jÉAÞù—9«›q÷ü’øc®©f†Ãο%AÈÎúο&»ýÜù‡!Ê© ŽïÐ<ßµý¾ h¢³Fõù=‘ê/tÂôÀôÀE{àܽwÔ@ïs^ pï:Y¨ËbâuÞ~ð$â¶~ ;‚öüÛ¹†}¿zØ©5mx—Ý&G*Oò»&ÿ,ûè/u&ÿX7·?¶0ò  *±×ßû—Ž©9•w«¶„ õ]'z& Ÿþh;ÓpÂôÀµçvý}[]€ì¸íȉåæ) Ì­õ ÀåNr0käÀÜýýSÁ_äA&LL\¤n;—-l•0°Ð$â 'ë˜ÂmIòUm±,3w+º©&•àëv°Zg|€µŠIýR&‰—v”±_ã§¹;}çß½&ûÎ?ºc¸A) ¢*§ŠHjrº‚è)[h*xW ©Gôît7`5˜ÓÓÓÓ…ÎßÖ~$ã±yp—šqÜ€5d`–ÞŒóJÇ «~ù-cûí"o‰½Þ°Ïw÷Ç~™¯LöÕN¿nGüò¾?šU3ÖÙù×~ì#…Úù—D_ Ø$þè/Bæ &0ŠcBOyÄÕ¶&¹AÇ2õBõ‘ À ÓÓ—ìóçn«GcëVò~Š•ì©BÒ7ë Ç®½úÆ7ÛU}¾}«¿0Æ«X^/§éÌ vLì!—_Ó³é»d±Kâ€ò¸/]ñã$ýj÷_Ê>)SïüC¹vùñˆoƒþá¥vö%@'ÿØHr°Ó†×;ÏÏ`„[¦Àv¹sJW›ë>ÿ‹àøËÀø‰Ü—·¿3~D‹ÌH u8\®“åà°e”á¡ þÙà_úóÞêIG}xpÂôÀÕê¯g®o®yîCeÈëèÈÀAyk./Îø’à'÷à¶»‡¤Ù^M ÌÂKø¿W^)/wTgX}ì½°ËÕ3Á¨}ä&ø0½ÇgŒÜ²•ðêHøÑ~Iæ‹÷Þ“/GËî¿,Îc#€~Ðä_5§1QÕä‡Ê¦Ž*C‡ú°{PCÎíÁà?FþíA¾±1V1Pü!Ȥ|]'LLL\KpÍæ¼eNc>ç6çµ—FþÅÁ}¸ýÞ׳Ižuè±ù8GÔfVé´W´R›&HÊÝX]¢Øjøz`/»’´‰¼úæÞ:à3;÷íÍLÛØ~ØÃþïêõµë/zµë¯¦&‰L5÷’øëЪÝ~N#éÉŠƒYp¢¬ X¦^ÞÁG´´ÛóœÍ6|(â¿d ÎmPÖùm´ä¼vòL™†¦®pW¸¾†Žklb‘ëkרŒì‚{pîÞV’ cu›÷²Uy¯q Þ(‹ZgHà'µ7‘gÂÐö&ñ(«CŸòÖ[iñiHòoùÕßÜÑw”uuû£J=éG’¯Þù¥%˜à³¼÷¤Ž1í’ðãG?*õöe§*©'ÔlÂÿé{ƒÄž1æàB"T+PÎé? nÁ—DH›Ñ¼2©²yE_ú˜pÿ=ð’4}Noî¹­²5OY¤õœçµ|”méõ[<2€¶#Œ5Ê ‚O¥p?ëê‚ßüž s*2ÖB\côÉ5çØ=>¯ñí:¼\ À[Áúêtœ€CNBêGL±Ê[6©›0=pµx`ë`A2& D"òö du„&GÒŒüú˜ ™†uCH­ z\A÷zL€.‰¹µ•-9úµ£…´£È!åâ£P ¿ŒeIøe<@% #÷?ùÈ/"nà»Ôøî?ô—Pö )Øeúˆh|ãìŠs…vE¸ãˆgèl í ÓÓÓ?¸®ƒ2o‰ãÜFüTF¬<„>“:# ÈT$âÞ’ïî&ÚŽÅ-ó.?²Äû1BGs$𖱾˗/Ü­[Z$U×çÔ”¨¯rxvúÙ‘ã¹=ýÊN¿Jü•}Hù¾€/Âò©tfAÞ¯¦ðŒÅ2T [@™ÊvêÒ{··Vžr^hœG,óšuÔO˜¸=À5»ŽE\Û'!ÇÀÄu~ ydÿ®ü1úænZÞŸw\®ß ÞëøÁ ¶9íú(°:ÈMâ)ƒö0¸<êK$ôì¤à;-KIøÕûÿÒ°h:‚ºóïø?< Œ7\ŽD`ÉHþ:€èwÔ¡UmÇ`‡yw`é?1qÆžjžºf@œÇ>°pMŽì$ ¦Ñv iã!A±cìû@oÂ¥yàÇ¢n>·n<7È<ðœëå¡òÜ£êÃ[µ¼Eײ±ÝÓÒö“‚üz/œ¼?ðÞ4ú÷Áï òˆ¯ úåÚò:sœÈ¼æ U^‚ËõÁò@Ãxðc™W&Õ8iž t·ÚFhûrtœðK™q(w÷É?þRHÝ9¿<…O¬HàÑý’È£ë  ¬ôR®ÃT—ú{›æ£ÝîWh´ ì¡ð<@ÇÅŠVlI§[è„ééékÉ®ç¤|©ç2ã(süöþ´÷0Çþ³ Ò7d?_ýѵG]§¡Šóˆ×Ñx©Håîôóâc{½A·1áGsÕ—~øqû¯_øMý{ðø‚$ù<ŽÐS}L½ °wÂLÁÄ0³ˆ”Q'­qŽ‚·nl3¶CþK6oãëóA ¿¨ôV[ä8‡ºQ^•óczà óת1ÈX#ÝŠGÆ¢G­ãÎÛß³;}úJ|_Tîa£“ƒ8DR÷z㨷•ìÓ䚎 ?âN•»Ríî ï#ÂÚUN">ëqßÜÁò$þÖÍÇýT¸ÝÁ@í]{$û baIü¡×‘ñÐÿ8B^mH&ö[ötw;EñüŒn"Þ 9àܞشeª (¸ïЛpù< ïéa}>¬ãÃK•ÓF¼:Ê #r=ŒHåÇIúñdÝãƒ÷x}»ý¾;øŽ _rAûãÚ‚‡Žc¢<OŠUÞº^©»,@Ð{°Àƒ•ꌱ¬Ó ÖtÔ]›º ÓWƒ¸V½®¹¹Þ×_”¼ÐCgÙ~wžM¬!IVW> àF:SõÈ{™]y¼çÏòbñ$f1°Rèrwü©fmxä%KÿUŽ€„ýßË—¤ÀÞ#¿]Æpû‰˜‰¾ÔÙåjÙRí*!ØÛÕ#˜0dÇà/¢° Ž˜óÁy@ Š%V>ް²ä iÕS$¦¦¦Þ`¾rýfÌ$^ŠÎk”ቭ‡ð¾„Ö{ó…­íM€GI²) íü"Jä%ø:­±KË»«¬è“ÆZî#½N*˯ùvý;{‚TÒ¯w\‰ÉÈjוîî«G~û\Æ“¶¥Oy8³@‡jÂê2ä} ý»ö¾nªË¤¶l ýE*75…çCŠÇ™»œ¿t-½ƒÈ•…0=pEz€kÕXäµÍþ¤XDvj#øÎÝ™G´ ·`ô nQ$f†Ðc‚Ìö—BIêÙ?v}§’}½bIüõx²ìð#xÌd<îúCÞþ’FîïýC~dz@¡êÙX´®vURG†“ð#Pñ@ õGwÿrcJ°÷Á"1ç†Ñ=r{‹ ØhHáu#´ÏQ½kðƒ>Zûàò‘ö·(²ƒzœ÷‘·¬>eÑû~¤7¦ž]~Ÿü¸®rIÀµúÓA?$y/³s)ýz]Cc]™¾•—¦êòÀ°¼º<Ä*1åQ6:=ë¥cýÚiêC'L\-àÚ¯kËÒ±Îkþ„ q%q£~,#ÍYe¸ÒÀÚr;Á 1­tüYûn=:µnPF ¹ËÏ/X–Qw‡‰>ÌA] ‘ä_Úë»#ªÜ‡Ö—%É:(ÀwÔ’¤9ú’Èê1ahG‡ÔÙnIvÙ/i¥}`aèyrdž§‘Ò²vÂôÀôÀôÀ5ã1+•3EëÇ|¼uÏCÄýwgÓûóPç‰ÖØ *ˆ8°— DÐ#ï~boIëYÝæô÷–¢´7t·î¬í@ŽnOúÁdþúPv’ §Hòj§_Ÿ×L b¬Ïk5AõïÈmbJç!äð[õê¤zi7êëeêùÞ½ ¬)ÐôüxNÖ2F«EttRØ ÓW¤¼†ÇëÖë\Ùšr?ÆC=ØäG>€z×O7GFâ`H‰Ž ½ú΃ÊQ¯wû…71Åt%öºž‹l”\J}0ÿkhMG¡p a{—Ê¡î”LLLL\šˆ¯û @Ú¿=óÆóú¼–¸^s„1ºÓüÞ.yç^‘ŠåpNK]Ü*‡O§5Íu3™?Z {¾ÓÏyÔG|1Õ’~ÝÂ’(t3a9&ÿº®Kþö]»MlT1ÁYÇW‹šèBêÀQf{eÔcë.¼0ʦ¦âÍ5ö=wþL%Îö<Äý0¾¬ã · ɸHQ¬²ß¸Q4ÐJíÞå]oLøQm¢æÔÙ¿ ?wþ?öQíº=Ö¾$þZ¼3°Dƒä]°äðýW|+¡WI?t[ ÁT{'`kCÛfïøØ"ˆÞÑÝïc[°é÷-Å){XzÀ»:ò{°¶Yë?&‚OíøÄuåE–yEÉO$ÈË4œY/f¬[:'5¦|0]îž{Ø9è¹h¥å5ÅqÈø+Ê™lÒéûðÀxÝò ‡k™¥¿€•CùFA0º%¸ß~èŽ{v¯zÄ" ƒzÀ^Xø§Õ×Y†’¨ã±` ›h…ás±Ùe”}´·DðcK1dÙG~Ñ÷e ã®¿Þw-5:ïz Z‰¼Q‡!XŽ×ÆD]-åÎ#+ˆ-‹?™C?XœlzT~=ÁäOLLvµ=¶çokï n~·åx>sš:Ê¡¦®dx§@½n½¦Çëyä¹àÜmo]vÍ•¥Qƒ{m’q$ýÆÎ©ö†QnyiÚ.›­Wß„Ÿú¾Û=úT滑Ÿïúóæîú«ø–äP‰¿ŸúÅ_ “Ð#eP{;ÿJ9z´#±‡^ÀòcCÐjÉÄ(œýYZnÁ"4þxޤ5’ÔK‘ߨv‹Žv¬Gpì/«cÉ¥qÛ¿«;ò—Ö[Óæ1ÿO ¾"øñAwÆ„½hà®~Oðǃïrƒ cl^#k>U¶¿(åË­ô`$9àñäRæf3ñazbØÐÑŽ'T›ÒEy2ÓW¸ÆkÖë:¢÷ÅHù[þs×Çö–¤_Ŧf7-W!ͽshè7šš±£¼”»Õ¥¼g¨W–Îõ>ÚK b̃²;ý×cÊãã¾”cÇZ¤DŸÄÄ}±]ɼ”¡ryõÚr¦ªõWzè Oâú3nænÍÆO|No#ržèÚóEüH#ž0=0=0=pMy€h@‡'ÅHäÄØ÷á­©æo_šì,â-ˆÚÝõ£ýY½ÝúQá¶S%ÖïÖöRÞÛáWv†ùµôMºÛ­5þˆkë”ɇÃA¦¼&¤”øµœ2mÔ“FT]XFžñïj+ì¤Ç/Þh£ rÎ(Ôó¨,Õ¦®X0  \÷º¯gùÿ=êm6pöù÷/ïNyR+óI‹Ê{аÞò²+° ”«·g«ÆäŸúî¤]Õ÷ ñ|ÌWêùø‡> ý–O$ÙW ¼²yOðUÑD®AÞÉ?À‚ÇmšµäaØgß^º¿€‰ £‡Ê{^(Ò5_•ÃÇhC^ªÍ-:ÚÌMöx9žP}¢xlz~Æ: œT繲ݳ£ûªà§÷¶Ã¤|±ð+Qü‰àOÙll]'ΑÖ1ù ÑqÌØvìk9u‚u–Pz9€œ¶Œƒ8©RœI* ËæiÛPO‡Ž˜â„é«Î^Ï&Á½¸Þä\ÿàñl»Û½/åƒà÷±”\À²›Ž]ÚEr×÷×!(gàõ|yR¿Wø'¾ê`°·<ê‹,Àªñ—{Ý釽JúQŸ>ºùÅ\ï† P5ÌÅ3%ëõ,d@ƒµÌÀt×w¡£žÎch€ ?lÂ3 ð§ON¾/Õ˜AcDMuðœKÌC'LLL\Kð‹¶Ôc7Ô"‰•ÚC.x?¿±W¯åO°®wè… Xj^vù-/Ÿjbu+)¸ìD¿q^mÒty‡_·S$ ?ÛÕ¬‘ù³úOÒo‘»•¼tàHšjxÚCA@¨oÙzu-õÖv~º¬n}제״E6R{âˆÖÞŠhÂôÀåî,cÐÖ5krÍõÍ»HIŠ?>¸ç>ò–ÝõûŸjíIëÒ–0ä¡ +)¦XU½Þ°±„¡®¸4ãc½´ÕÎ’L½I>ê}ôwy"¦78LüqkòˆoÛÁC•Ìà ø<òËÛS+ÉÏ#À½®ÉØ!`«…‚5О(¬ÄâÙwÇž©F~gøF@ÊQ<ŒÑñÜq4­ËvnSܤM쌲±lc?›F¯q¡~?É [õ[2Ú+‡nñœgîO€óLDÆ}ûØà§?=øäàý}$ýXmü•ú£/‘kE¯'yëÖÔöÒÑ®Çä¥Êpz9€ ړꀑqðÈáÇ226¶¡ ÚöêAåÑ0=pµx€ë–Æ5íý€ žë€B=÷çLÞ—ò¼-ßC>­GÑr¼#Î÷/#$O¯ÒŠwšåõJDƒÚW,$·Ú×»þºAwúQ419¶Á€rðt3î´ÞÄÑÛøN)£_¶z_êJ9Ll°PúPßK§Ûðs3Ê2×éb>e¿()“ö#‹Æ„ééékÃÌBD](0ÎJð s›ñ”ÈË,}4øÈà1A¿;ø9A‚5ÑBk‡4@O[°ÈehÈŽ=çÁÞÈêµúñ„*ÐÞ„âþe¶ª±+t}£¿ó G P1§LOD´x^]õ¡èÚÎú±=v‘;+±—a~>b­IíAËZQŽG¦S¶-OéôÀCïîâ תw££"qMC]c{¿/²ƒàÑG߸;ÿØÏËm›Yµ³EÕ± Ù<ìåÚ’x‰^ÌQºòRÚËCå¹#FžsB9<”óÃýúòàk‚¿9èö¢káíAÞë÷³C«Ñ}‰ôïõÓ.ìýYv”¼mFª-mCË­ô }âÌË 'o‹"óäŽ}2`ý»äÑYô›ZûŒÍE>ö»£>G8 X†Ò¤)^ë•«£çôVÔ—öÊÔq¦BÎÌõ.”7áç"¥4G ?Z¡Þ9Îym8àÔN˜¸ò<ÀÁõj¼¡ @‘‰ãõÿÞà'÷àèÃÿlwôÔoJë3¹eˆúNã#×ÇÞç´ù~§Ø¹F—Ä ÞQ½ q7Ÿm ¨ ?dõ~¿ÞÞ5ïyãš»ö”e“u=ð,ðVÿqâ—p݇ºó~›<2Bý×p!冴«6wü@¸M î¯ãeex³]ÑJdœ¿“€AhC;ÊF*Oc?'ÙòmxN¨ù±ŒÜ:ù‘âÊœWÏwØžî3ƒ¯ î½Ѹo†dó8ÈÁ0Ž#âÆà5õzâš'¡ì¶•©c;mŒ6éC »ðȸ\ ÀqðŒ*Å'°Ž¥õœ éÖI²]Ô&L\5àº5ø¼ö9ë &Ü£ äÝá¾(}köO|^öOÔ ÁG¬U"0l½ îÄ£|dy×å ÔÄø9ž9^Coç®Ã^¬;Õ>&Øó©s}ÂA.\ü &reDRš—º]“wT,(ÒVºÌŸãRêrtÅÁà`ÀæàäÈ,#Sê…Ü¿uÂO˜¸Z<À5Ì5=^ãŒ}”SÇýið ÀÀ³—þà‹Ò›““{jëÍküžTw˜ÂV•;ð„ ØIrÛmQúÝ‚Èý2p32À–¡µS/Ñ:† U¯h„&ó´I»â­³ Òï¸óÑÒàMy?ž²Ý–顬ʹ¡ÊÑ!Ž2¥ ÓÓÓ¬ç5¬@qÓ/ÜÄL’M?Ó)/ =þÖô¯ƒŸì1¼"­óܱæ0É!$üž0¯U›^çèî+Z³Po¤D~ËðÀ}Q¼ g{yäzIž:Æê*À2zðÊÃ.mùÚ³ ?±­ #¯%dŽBžµ:ü„é+ÝÜ-Æ"ÆÊŠl”Sïµ %ñ*‚wŸ܃£}ûn÷èÏŠ…˜3rÑ:ï»GÓ ëÜÓ§0o,_O¯#ôxqðñ¨ßõŸëß–u…– Ëx,°¢&ëÖN5‰»@{¿;ü”qŒ}Ç_ÕËw{Õ®ýúoK¶Pá#¿î$„Ýñéb Ø£<þ!Âx¥##®Q…xôH‘­Á¶ÚÛ*Û”>ìgmk–·=སh{ŽÆºQßoò;<ç90|UðuAvâªö¢sú_ƒßü‰ ç; }Ø×8¦ˆ ¨½. [×s¥tü£™×ž×™íG[ðôH[éx –/ ÝZF=Pq@:[›$‡ʽ(ãO¼'Ë6”'L\­àÚöK×»÷ÇõM=Ê} Ræ/fÙªÀóMÇ@”ù–,]¾ò11Ô-ÇNPIê]uRÙ†êY†ÒÆva}‡U‰9š7¾‰»“hEÍnX¨6à«m ËC½0DgUßÛ3ÊßÃaÛÀ_ŽÞ¤ù:Àãî1ØSÏ Õu§!¦¦¦®â×X·u s1]ý¤úÞ<øãÖî›#å=€DÖ5(Ã* -y>èéB`û éPç„£žeÚËzÌ€TfÀ2õê@G9zÊl§þØFú´™¹þ[pør„EZBGžs®åXå\:°¦®hg¸nÇ%°wý‹\csÝó‡ßÃà¯ý›Ýù»ÿûîÔõKœiæN-Ñ-·Ò)BY @>ìZܟˈ¯ –wúieIèåžÊ~›öŸ‰¹zw_jÇw¢]¿Ô[4Ç‘6¼ë°hoO¨`7ß’ D,GBë]$[;Ñy~ðä ›ÆØC<9xºÐËðœSÏ[ØM íåé™tì9}Ôá„N8ö@» ï»ŒžºòRΙçKÈñ·çÙ ƒ¼ìã·o Þxo}_ðmA~܃~èä3û[¼ÛýÁ¼ðfZ¼iöx{)þÙu*¯ë/¡LdÁºq^ ñ&ÈKµ!E^mJöª{½~±“2 ÈCׯvèîId¹=øNN²8¡¹hp‡ÊûE dÄ+º{Oá&LLL\`&!2w@¸¿9¿4~ô«owúc¾*U iD¬%ø|‡>¢{dfp±cã õR¿—àSŸÛS0€Dõ<‡Á(•I3ÞJêµvGÚ씀%«Ã:NðUÚuy³A-<ø£ Mïžãã]ÿ9Ãþ Š[@¼g`ÍHó½q¹ñ§xÞq^›£ÂlmGľýHíS=ì^ÈæF7לȋ}‹"ÛBïA)÷œçò‰áóLýîwŸ¼?ðkiôÖà÷>H?Œ x^‘y~áG@.ª½F¤ãµãµÅu;^[£®¼öèK>lñPÇÿ Aïr¤³å=HÀIÂ9PäêІzèˆ). ÝE0™é«È\¿C®®{xÁkžû9ÁÅ$ ôGƒ À_Š¥ï¸m·û¢¼ °n2ï¦(/ëð<{¦‡ÇQžª¼¹ÊÎ"˜U…‰·zçIÔ°‹L;Ö#XøèÉã`| eë¡ÅíK†²D "1õQ_û[Ú÷:úû¾¤Ro_GćÁ×B+RbÝCO¶œÊ ÓÓÓCòAÖ–ÄÁ1Zer~ó‹7ØÊ ¶±à›"ýûÁuT%ò^hK4¦Þvô Xn¥ã‰Ê²=''eØ2vG¹¼mO*ryèš×¾rŽ{KÙûƒ?Üwÿ9¯9wAG¼½p"çsÂôÀÕàîÖÏÆ )rÑÄõNÙüÓÁ÷àèwô„?šÈ•¿´–õ.%íÆhÁj}}ª’gׯÃU\âL«8\—§ž$ÝÒaׯd^g§îô3 T«è±Ã¯ݵ}ç @Fà;þZwìðk§%{BÖ±EÊÕ.åóý®rÇÆÇ/Dö?‚øM c‚7Þ0dx†5âø})U{Àiµ9RõÐõÚ;!hâ±+Ʋüx>Fž«Ÿ2¿Ž”¤ú«ƒìéÿ-½.ä’€óö_‚ßä{×ÈVWßPêG¨[!(èù—zMŒ¯xÚ(“ª;Rô@döÇš¯ÊËõq¡¥Ó¯·OH§Ã@Ù‹BêÇ6Ôuð–¥´™0=p5z€kØû`ä9®}`„Å}:.PÞ2èS‚{ðMÙø†[Ò8­‰2ˬîwæ¹Ð@·‚A×S¾4[˜Þ]¿£;©¾ªÆp}l ç»$ã\ÇTR/JêúžÀƒD`tpfÐ¥_Ê$þ€âû`°‰}˜ø£žÆ& ϦÝOÞý÷®hÿRÐÅÍñuÓåÔ!£+xêàAFÕGnÂôÀôÀôÀµáB4AeÐqn3ž:·A0øšà>ð=òÁgí‹— AñØ32ËÖŸDÕ[Gm¢9 =eÈå©çh´XoYª\Š^;´E¦þ8ÃŒuô§žºÿ>2Ç‹î1è_4±("·ê(VáóZŸqÃM˜¸²=ÀÝÁ0Þ ÈÀ1qí»Æ†’|kð ¸ËœÿÀ7ï®{ÂÿœêcÀàñÍö|n^ÒÑ`M1 6ô—âÓ‡¼Œœ[0àÝÇâ–„[‡fÖ`áR×uú¿Rg—ÿ¢ÓÞýG÷¶m´~¼#! ÆY¶šƒí8Óy³ÃîAûKÛ;óWˆ{YFoÂÛ"EßÓ)tŒCÈÄîµò ç-Õ'‚í ôaY:òÔãÙÅÛá'{@ÿC×¼2Î <_Ž¿r/ýž`^¢¹Ë•ûïI«7ßÌ ¯ªûL±ú¥ì]¢ Œç^=(e®å^3Ԗºk^[PûŠa\ Ø]NàÀNŠ ïI’§N(€“ä¥ÈGžò„é«Ñ\Ç\ãJÞ#Èt@þÚŽÊ_ÊЃgòÁ=øÙL£ß–=Ÿ×ߢ້I„¼ˆxlIÏq½ÒõÙFÛï¾QÏ$^×,bbNÙ¨S|ïh X/=IΣ»ÌÜxÊY¼Úc&5ˆ=mBÝø½ñä‡ðþ6¼%b|)%ð JÙ…Š‹êà±H›“-§rÂôÀôÀôÀÃØÎiÎ[D{Ðù¬Ï"5÷1—9·Aùµ¾Wo ­ÿ×àÿÝE”…‘'úbedŒ°ç±ÍIr'¡j8|`OXóÚ·­õÒ“äÖCG^}(ȸÕõ˜}(ÿJn»%x·ízþrS.Õ*=cymí¹ˆ&L\‘ànäšåú…Ž×ïIkl®}ÖØ¿|Gð¹Á=8zÿßÞÿ Ÿ›Wþ=úønHOt¶<Ú›d÷Ýí®a'] D>â»,¸½«là{é™C8†£óiPI½Ö{mGŸ:-8˜à[s ¤’tŒ¯ÛLÙúÚ©ÍV0©¯ñ¢G(¯†f×àÒ9vûNÂóçãÆü3³¦ˆà'ƒ¬§‰1ÆŸ( 2@°dë™óæüvl«‘ÓF™×‡ýl½†„œaaÍSVÆy°Œï(C¹È¹×ž$é÷{ƒÏ ÞÈ––ݾ)øÞ ýÙ/}Q¦/(•/A><¯PÑX0RxÑkâB”:‘vê®ymÒ7üH°ÜJ—ùs½TºÝy`ØæÄX†Ž'K~ GÙ:áÇ:Êdߢý ‰¿u'½mÂ/FúÎ C`1ˆ¿iϹq\D ç|"ÓKa'LLL\S`æ!Žqp˜jÎcÞ#fW™×X‹RΟ¯ê±žßºoLñû‚/:q 1òcÔݬõG[Dò581ÙÎ2z#o[e'••KѱL¹<ã£~-GFÝwñü! ñÖ >éÈs>ì J«Ø˜0=pµx€;‚ë–XpW!(×7õÆ!ר7Dö–àAp—wÚýÊߨzÒ_],ª¿´×ƒµi’ŽÒ+":Ø¿¥»ýš%qØãÊq‚Açö3Þt¦Õ“ë‡ZlI¹VsüŽ?ná$þJY»ÐV¿—ЋŽ;þjOÐG…+ô>«m³±$ oÿÞD_²Ç5}[Æü?&)ƒœ7ÑÃdÔÌ#Ð å.ˆS?–•Yo™¾ì'ì„î|-"’‡â/(çDßå›gíò{Cè+z]È%ç„'x“írn<ïa«ì8ì—òÊ‘Á蹯/®tÁT=¯¥uúê­©võ™`½åËN/t=9ÚEî‰ó„ŽõðÖ¯ùµÞ,O\Mðz'@ïêx"÷)“$” “'u,èù Ëüj,þÍívé±ûQ2!G‚ŒN,k€™w+(  8@™eàKEÓ39×JÃF莽jÛÛ©O°”­oâeV§ÿ1±ç8 e£×›äÑbxðŸ'ùwWè ð–Èñ¯ˆKàñ¿ÔEÊHéZ<Ùz”&LLL<Œ=@xç[® \â¡1Ñ9 ÊTãÜæ¼F™yí¥½.d€¯ ÿσ72X­Ó3h™:€È̈ր.°¥?ÊÕ#â€]ÁÉ‹²¼T=ËÒµœòVrÆ@ÿÖCEÆÿ#Áw·wÿñ ÎYÌeðÐ×õô@ïã:%Å ÓW¼¸c@®]p· çº'ˆ;”¡è±Þ{GðçƒO îÁÑ¿ywô˜7ìNÝü‚’×Ûÿ*Ö‚Œ ¼e}Ýã ënz^¦ÜDE—0$›¨Xìê-1W-ÚÇ’èC³ÆÑ5‹hIÜE™ ½Ò¢Vò\*éX¦{€aèµU{úO˜H¹ ä½]äGçòåã¶Ýê?ÙÌûÛŒ3&ÿð½klŒyÎÂߨμeê×@¼û,eäʤÆ7ݼ¶w-–GÿêoeÜ3ðøKÙ Ãÿ¡àçÛ 2Ã\"¼3ú¼ìãÍAñÅ6}žû¤Î¾K¡Œzò\Kð[ÔëÌ:¯…Q¾–­Ë£®vÖÔþ&¼hy¤ð ìLà O‚uÝúä®Ë'Ù™òé«Å7®{*AC r:Q tùëȧŸ܃”ðù9·ìv/º©‹ûÝåMæ;÷QˆÑmë»ÒZ×$òZØ„²°@n™:_G Ô{þr7íK'uÊhµ<®wwÇÁJbýî@Úƒ  þ»¢üCxqÞñ]œ@Ñ"æ ÈY¬XFÆù¦ç ÓÓÓפX«FŒ‡Îmȉ¡|цŽ_¾‰¡Ùþûþà§÷áçRüûÁ¯ìb-ZXØZÙ"wD£þšGo½Ú´'Û +ŒíÔ“ªw)T{ØÀK2åòÈÙ7Ibt˜¿ÞÄ <ôË7–ìÅ:­C™Û¨‡N˜¸š<@Ìáîõ†rw#¹Þ]cÃs—@®ùü#ÁUD8¿;ÿËiwúß’÷mßxü‡ô¾°>bû‰1Þ¨É(yÌžjÈDàÚº :åì-¬æKF‘¡Ê{u˜>Ú[ܾÑSVf2®x6åy0E›þ˜Ü+¾·«ŠAYÙþ«Ã¥Ë£¿ùÅäàM‘›ès] •çÀ„1§zI RÏy»P,¢n´»¢_îÐ|­ô½9<à¹øÄð¿¿$—öÁ\ÿÆ ‰¿÷í»çY]¡oÿ-u#¯>Ôs;RxQÊ\#–ám#o›Q®þE¶Æˆ ÒVz?·–IF÷ãüú¤:/Ë“N<<0^ûLz\ç,B @V LŒò.J˜@yD6,P¾,8Þ;ÅþTþÞÿÏŸ´ÛÝ’Ö¬èlIÌ¥@‚lù>Ô[kÄUÑ¢Ÿ¶@%øBÕÃ&0&ùÁ×)è1HËDт޿¡`¡ÝðA¹Ë±:žj‹M˜€ ?ÆÏ»-øooõŸôEÓ ¦¡ò˜µ ¢o=ú”kH¡}”á&LLL\[ ì12sqêœ&58ÆÙï_*܇¿›âo þæ ½Ð ÀØk“ì¢ ¬W¾¶#‚ŸFwê—‰­+SÛ23ÊìWjûuýXV:ʱ‹}äöóÃó¶¤mxKÄ|Ñ¢…­œ»Æ²õôe^ƒÇCð¦®&xg3fî:ï<âÈ2X$’p½›Xc¿7øcAbÑ>Üù£»£ÿñM»£'þ©Ü­Œ \Ùò;ÁîÈ;ÕW¥ú&ì|4ØvÚwGŸrË-Q˜ák¤Ði[§;kß~¤¶º­Ýb—D_%þ0ýó­¾cwþP¯aƒß&ü|¤?4zaDžX#œX3Æó%Œuʤ¶½T:^+ÚºÖ)~‘s€_¡øKLÖw÷uÁõÞüˆ€óü¶ ß]yc-6<¿öÑãyYóö2¼×Ô²Ôëa«Ìõ·–«?ÒµŽe¨hß-2ê€5mÒ‡ès½ zˆ†±t«sAgN’¯õfyzàjò€Á” 7ÞБgQŠ… <‹–÷"ø¢à¼/Óè×äu»_ßßÈ.¹ë×w=ʇ2+_WS5ÂX_»÷;m©Ð´«®7ÜâÕ]h7¬îZ^Šjèì—nÊÈá¿ýŽ|Gêõ謀UË/™œð­‹èˆÕedœ/xÏ<Ö)ŸÜK*'LLL<Œ=@ôwn“á“P‘ð<ÆXø¼¨a÷ÜZýù I¯õï :ïì·h_/™HÖz–µ£>rÚŒrÆ! gýh[~Ôe)`ýX‡L»èPg=”¶Œçûƒ<à» ¼p ýËܦ%ePdô8Îk”…óÚè‘TO˜¸¢=`üáNq­åzçû¯×»×:÷÷ˆkltØôü ÏÓ„mpôÿgwtËKw§ñEö@Ar¬ï\)TqïÑÝ’´v‡7Y“Ô§»ùƒKÂÙ’¨#òìAç>á?N‚·§‚MÌëyF­ÖÜŸôàí{´ï¹,¥|X^S¯-ŠL¤üH‘suêJ•Y†ž„©* ¶ÒCüIp›0=0=ðÐy`8.”@eÂ$ñ§Œ€Ü»,RÐ! >7x°@ù—Iz½$¡™Ç÷`b{ÙG¬^‡b£×Rß*g0 BÛR¢‰MäQ*y×SÇYÊ­Y%ñ`Mð-õØbʸêÛ øPäßý¤ZÕøy{ oF=ˆ‡ZÆïÿ{çöëÛUÝ÷}\ÌÕ@ÂÍ&` ”%iÚD‘PiûÜÇJýªVª*EÊCÕ—J­úVõ±/m´%Ê¥Uh ›p‡”оÛؘ[B \ ûôû™k}~gì¹×oŸãsŽí}Cgìq™×õ]gŽ1×Üë÷Ûô(þ”¡CJôuTÔ¦F hÎ-ÆBâ#›{lÙøI¬•ñ¡s»üb‹'ëW‡Sž5þ}ø?®nG31ÑRÛòµú^¿å³dv•è¯ú˜¹´¥Ï>æ¥Yuú©ö–.B_NÝwÐ`/ñEê|ÏQ*Îèܯ]ž›íTmjNüß­Ìÿqé`E±ÇƆ9œ"‚°nøÞºÛÂÿ8<ÑŃÇþ77¼ê·sÎ÷¢qÐæÇ~/Udè%íÞð3‰OÔ…,X¬Cívu)Ku÷Õ.å‡ÞÔ£:WL94Ú¥e—7 ãO9oý7 ©·¾©hw‡‰£|éëâc 1ßx[êÛ&ñæßÃa# ™ 6º q±þZ_u膲ÝAaô? Joç}’m¢ ßžÄo°ÄÛM vefc2p8múijFà¼#@,$â•ÆNc,ä5mc®¿ÔÒæ£Eÿ2üœðazÌÿ¦”$@5OU=E‡Èh}\ÚÀ$SÛé£Þ¬Û¯~%~3>m˕԰õ!_Yÿ­aÚ&Þjÿ\XŒiIm$>î RÝ{Ä(èH9jS#pêàÿ/äÿiÿûÿÞÕäÛ¸3Ç¡¤×‡_Cg‡è‡_=xü‹¿|pÃOü—¬çg\þc}·åQ{ç·gg¶å«÷;£¯\ÌZâ øÆGycPûR9—×ú‘Ýa”€²;¤#úIóñ6á×0ßÚfù«ÀùCŒ?ê3V ýæ¯'ªðšM∗À– ‰9Ï/ÆÓæ>IŒÆórEÄ¢',ÇÌ×¾fý wvNx0÷þP˜_Íñ™³ÛÃ쓺ܨÊù^™Ÿ¶dõ©óÿŠ>°õ©Ï¶õªTOó]{tü²v•è'––¨tb§×kÎÈ@‚¬Á‰àebDzðW7)|è5áŸ"²î¯äûÿë‹~š#FåÀlj×ÖWnÔóPŽîG|£ÏñvuÒ~§§¾:»èÈÁß:î®Þj׃¾Q¶ö Hôã×ó$`î¡ÇGLa¦à&P©ÏMŠ÷†a˜‰ $ªWŠÚÔ4À¹FÀŒaœ4VÖj\%žsÉTøÿ:ÌÛG? çÁÛÂ/ ÿSŒ‰hÍãd¾r6ÚK饨½å7™XIß•ªmV \¿}0¾>$ãU»ê)Ú,£¯o…-üð6}%nºéÑܶØJó>z•½7Þ« =í–ÀiAÀÿ»H™ÿïl}ùîÿ}eCø°/̯æÏÓäÛÏäð_\¸ù?\¸áÒq<ˆ3þ¸/Ö¿ 7ë윤~ëeÌAÄú£ 9ˆ›gü‘;ä°¢ãõ oÈáLÙ@„ü(ôGżý·;8ô; LôEG©OÃoýNþ¬ÇŸž6~PÜx  ‰9bK™:³Y%Y¯vDÓS„¸CUz?8ÀSGz ÷¯¢?&C±¶ÈÀ”yøg;¥}¤Ê޼ÿ8ÐYŸùhKêc­ÚF²²åÈZ¿úm‹OÆi#%u¥þ-ÝèIöä3ŒR!Ö¦ÁŸl %¸ÖºØ†*üÜð!"»~ oÁ½){“秇ǦjD¼žøÃe³ÿq|i{9ÿ£S£~|dóÚ~gÇÏe£í:Ž>%Ñ™:ô!õÛO•èÔ§ôÅ8~5‡ì8öÐÃñÿn8Þ=$±QÁ2e}Pr£2.+u Æ^GŽÖÔ4@#`Žª¹ Ý|6Kóš~òÇ\7…o¥OÄõŠð«ÃFe%#ÐÕ¶¾}~“Œu‘õ±a¶k}ëU:cQ6V$}à·Þ,kÖámöÿÞûÂÍÈ]¿‘y÷—×Èaæ6t˜^‘Œ†ÎlêÕTTRÔÔœJˆP•èÄ$l¼AâG‹¬ËÚàm¶Ÿ ã;L?xèàÂ>¸pÓ?ˆÿp0á»ô.ŒS¹t1^»£«Çã[äx‹®¯ ãD/â#u/PÎÇkG=Ú¯|!Ë—2Ûs@¸³Ç¡ß:ã;§qHYöŒ9¾‹0’¶Ë`æïw Ro„†øê_ûå€ð;ï98øîãpØJ…ñrÝK×8¤ßøc @ ¬+{þ¹&ùk±— ¿2ÉXu¼©»skΘk»VX'²ëåkñ‘S\CÞ«jÓ~]ò> ¹Hÿ?`£kW©ÎÔ­zs;ë_NÎÿ‡ê¼2Ôîÿ þSIÜ”¦F xz0°*Y—ênBj µ [‡@ÄcÁÏ®þˆKôHJoÏÃÃ/=ëààémD·Œ‚ôM½9ây·ó¯õw~Û§ïÚåó¡`µ‰¼ÔåßòÌCûð8è‹4’ïü(·n$oRßz¾1ˆM›2À›óÍ~ß¾‡xŒú­0¤b¦„Ä¥ŽÔFÖ :=sH¦¶¤65@#pÎ0‡)Éa°6¹«æ5uë™×° ÿdøùá£ôÁ¸^~ux$¢U’ ê{":‘«¾‰Ç2%°)#Àd }Öµí–LõÑÞ²Ú_rÚÁÿ?ÞOïJÑ]afO^3·)çÜFÏ#%G:²³õJRÔÔœZŒ9Hã ›84Ç¢jSÏXÄ~‘·“_>JÞ5ÿP~ÿÆõdc]FãÐê‹=ô¢{ §Íॼè>¾"Ëw‡ˆξíwÝ’Ž”­íøp|ÏÒ\×¶9ÈÃ^Þ.\ä2¯âìƒ1Ò†kàðïÛïÎû}\Ô>º#ï o`âÒ¸¤Ž$Òѹñ†Á¸7÷®Þ7ô}€oNÙ Ä ¸ÀoKÇd¬¦Kˆ»Rü±Õ‘®Ÿ-i=ûP2 ºä=Xþ#_ºOÜG|UnéëÌQo.Ÿí¹?ǤóÐvNÊò*ÑO-qÚFàéCÀ X#A“ ÃúÔ4˜ÎA·–‘Lù-ÌÖú—è;éõòVÜÏæðÇÓ»‘I…†/=™úHÞdBÇ\ý[}Ö1"ïlÛ¤½‡ôë!õl£o'×±woî±iÿùüxk”8áÛCl6øÂZKÙŒ€™Ì&…rlÊܘÐõ² [`pªLh åbõÏF hÎ/ä%¨Jt˜¦®4ß!eÊС{ï?ãy?æÑœÌ‡-³­‡LDUZ§úÔk´¯õðk#É>bЖ̀ÝG ³u-³žm­ƒ¤ž})ùPÕ[Â9_8†>˜²‡™¥9 ½>|›Û ;%3…êÃÑ?S„12Î(ñ¹§Ö§­4i#Y?~Iø(=zOVÞ_äðïÜpà ”C=ÖXVÐ¥ƒ=ï|ão¤<Ôy ã-¼¥Ÿ±×rßøÛµ[ú†½¶YÊXÞiŸ·úꛀ—ÞüËòoüeŽ*VÉ´cCÂÈ‹“Î<òa¼ûŒRi÷Ëc’XDL’Ýcl¼ážýÀBâãž ÿEx‹Þ'ídúDWêW:^ª4êš@då­5bymGר˜+½õ>y¿êËäÅ>Îgëì“u\tçƒÔŽ:üU¢ŸzâÆ55ÀÓ‹€A©n’cfèT¥åÔ·\É´à/—½.lQ"ë¾7§c¯¾ñàà–´¨ÚÃNø‡|Úi³å÷ ¯öN´åðÎ(º³×þ°-ó­¿úFß|ðÇW“àƒf¹ÞŸd{ñ›9à¤|1=¾œöžð¼ñ!©nV€Ë m±½\/¹Î.ZS#Ð4€ƒ*“ôÍY³4ÏQrÒÆÂ|ÍG}GéSqñ–ÜÏ…Î&$j×ÈM9=êCÉòÚµžÉÇvÕ¶OêÛõ¬£¤ž:’úHýQ‡m/Å~K8ßå{ ýiÊÞ6ù ]ó\õ1CF˜g ^aª45§âT¥1¿1FŸ¶ñG¿qê¾´¹%Ì7¥äwËüÉxðàBB•y,5z\mßèóMÀÙ¿ØY¦¾É·ë'K“¿¸«ä-Aë –±Örþ²/úrÉ›‡ 8è­oþ-ãSÿ’„…Ñž9 rð÷X6×ßüÍD˜ÿwôš/yˆR¿NåÝ›D¼Ù·ÇÎ #  mÝ/ïžÀ_M;ú‰®ö‹Û2$e޵iEì+‹;>õ}²¶›ï*½'[RÿG¼úòV™¾-‰¯2óÁöÿÂ,St¶ˆ`ÖÔ4'‚©ôŒujÕ?]ê°–­ƒäËÓ ˜·†ó¶~?#üL!" `¨FÆ-lþXÚ1kõ˜¼ß!ˆnĦžoòá÷¿^Ÿö®, 8s\ûù^*¼3[‹wg›AŸÇЦì³a7$H6%õÁÈ2þãr#wS‰Î%]f¸ÔhjFà|"@.‚ÌYÚÈ9g™ÿô#áÚ–Øœ§ëñžeGésqáÿN8oºïÑ"‚µ‘3ã'ÒoùmCRB—ÍØÌÎþk³Α„–úúìWÛìóvž¹ÇÁfĺ+þÿföÌ¢²¹MIFqtG­³Ž»ó 4Œ1ÄtV­ñŸ~c޲î±ñA÷…o o-Ác9ûöûƒ~òàÂ3^œjkPáͺAs‰Í[ê-oéejëG=ÈÛð:˜³—ðÚ㬂ü¥`ÞDtÎw .oô-r™[êïü|ÿ vÂÁ94Ì÷|ó¿%RÜ?f¿ç/üÏ0’dú{ Ñê¶01aR7&è–¹Qqƒ2.;åôÃô0~õ¨M@#Ð4+æ¦ >ò„^s›º’zÖGÂÄé<Ž7ÜýYÌBd¾÷‡_~iØDD䦌~%݈®ßHo¹~¤&èfdõ«+©Kf©í-SætãHï}‘ô·ŸîNÑ;Ãæ,f‰n>›¥åŒÓ;Ìlàzõ1‡ljN+ÆŽ:|Æüèî§-Þ}¶aÜ~Uø¦ðQº˜EÌ! ËëÙoÈ¡ZšŒC¾ué•–%7Þ\~‘ü•¼¥ÍTÎR]ÛíÞ賟ñGDüã(2ß™:Ë›‡”ÓGÑKü†Ÿ¥Ÿy\|$iéo~#:ßC°—ø~Äß ÿUØ}4±†øc 2F))‡‰? Á$Àª÷ ½Þìžqÿóøø„ñ¬JúDÇRŽ»Óafüµ‘¬×~Z«#%ð…ÀÞ{€î½PG®ÿ Ç=òÞmù(“k?¶Q־ѽ×ÎùÍ2UÏ>± šFàéGÀ€9US]§^ë1s}_mä—üŠkØ1¢^¢¿LXä#Á7¥ôV§"9 ã€(Jô5Ò¢GÔM w)ç°/ÿ1íñy è~ôîÁ¡õæ?ò±+sã§ o/~4[‡ßâS t¾Ÿèö]aÞ¥pc2oH´Ý ŠÇ47(cº±Çt"õø‘S¡©hsŒ€yǼø*ã³?z•–ë#§=~m8¿¾Ú "ý‡y,ýÛar™À$†Ä®lDÇG”Ÿmüø(ƒÉÕÉi-ÛÒ=ô£ 峤Oüw‡ó¼=Ž"Ž!xÿ ÌÕ’ÃÈUÖ<7ç6fÁ(JtQ¨WÍìš³‚±2¶`Ï>ÊñÕXtœÍz¹3üòð†7(Ëè{Y¦|:o¾öàÂßzÁú\?’Ëò›™ný¨.v,Åø<àõ—:øwß1Hù¨·šQùKÁK½åM@ GÊßòÇF–2 ÇÁßc9ËûV¾Êï‘.ýæçâc¿¿þzØ8„4öŸŒKÄ)¸Æ!&¿^(1È{¤ô¾ ‰sÿh©6~rÑÿ.Ì/‡Œàô3Gí¤1†c2nÓaļJjÔõƒmùì§ \+ÏØ{¸Gü_¨6zõÍeÞã}’ú•™¶÷z–):_TÎו÷Õ6'i™kÔ²dñaoq­Ïoä`–¨{„ÈœŸH:þdÒóOäAéE•èhd5ŠA÷ùG›ü˜ËÇ_ñûÆ ¦.ì[…õ»wo¦Ü>ðÝ´ð¶<þi&NÛcˆMÆ;Âw†¹L6 ò¼AqsB=Úa›€°+ \*6„ÞÔ4@#ps‘%ÚU’ç°!¤yNi¹6uˆÏ÷†o ?'¼MwÇý¾ðsï ¹æÇIë"É $›Zßì ¯ÚU§-uhO_HË«äñ™÷WÞæñöxÊk9·‡ÉMæ+s²bS‡™ÀèŒ,×+E‡!åbõÏFàt#@Ü€%tc >tmëꛥ崻;Ìàcl þÖå\ížýººe£ížÒà2>z»üíþhÇ®ìÑÝ¢í/ð}€)oôQoýØîáïøÃŸ¥Ÿ±–Å,ý1®r)¼øÝÛòÖ_þVÞc¼N},ñ• D-~ÕÂDj BwŸmÒ¤^£#1§b[ï‘÷ygøþ0Ï5<ßüÛðÿ ÓÞHmÄ¥ÿ-¦®µ© à=PR¤Ž„ª­o)¹ô|Å^½Þï½²–¡Ï¶õªT·lï«’¡CÊÅ:§?ÙT55ÀÉ@€J`2É1+t¨Jê±v­7?Q2 Sïäà7c·†ŸÞ¤¿NØ|_Òõ—roN¯ÏKDÒ+eÞÊ#Zs¶{k?ø9ÀÛÆöm@dô´· ?úÃQÞžùýa¶üEãË×ÌÆä¡pÝ”¸!©›“ZΦÃFf‡4.§NÑå¨M@#Ð4—AÀœEn‚!%e[l]emÃä=á—…_@Á&Íy4äÏdð˜þ’0ÑÛ$¥4¢kWi8ÎWëléfú Ü ßíú@˜Ð]öy{´¼=5?6W™Ë”ä8õšÛ|ðftgÀ,œ™ ›³†1„ÿÛÆ!®„ÂF¿ÜÛvÊû×67Gê‹Z)C?zw>üþÔÈ7¾"‡q7,z£õ p9 KÝõ ðð á=þª0ßÓÇÛ“E6€·|ì×?62ã_ÚZ'rŒóƒÌ#ú÷>•§…ü G?·öQçD¿#žÿæìg®tÍ$à¸ ŠŸ:®÷éÞØ¼yø»a"i[ã¶>î;eHýêq5Mˆ7îùÔ²ÚÌzúÀWs¥÷É{¯íýšmýUÚ—Ò±¼¯Hh–‹÷œÿ$À55ÀÉA Vƒ© ¯®WÊð[ߺ\IõéGòFÀa~Kù#á½ô@Rò»Sû¾Èe”fäaF´C¦×ê'biç>|Ôó£Åþq íÏÃ>l õÝ“Ž?[Šwe‹ñ5*\žîI•·‡y§‚ Juƒ²¥û0ņÄ%.©nPbî6êȦF hmÌI–j+ÍqØþYÎeØÄè»ÂÔ}ù*#6ˆ?õ‘0ïÎݦ6dR’°LZøÈ –)gÅ6f ë’AЕêÌç½aþîã?ž¾‘bÞh¿;|%9ÍdS#p–0¦xMÚH÷Ô”éׇ éG·L?¿dÿjø•a"Ì6]̲ü^¾‘æÛïÍšÏFûÆ[rxc9Ð3,Ëу¾ Yòðí× äÇv—örÀ÷بWÿˆÇîm?Ú<žñ×ÃÆñÆ/é}÷cyC1oü}ÿÓ)ãüîX"Ž| üÑp1êû$q¨Æ¢Œ~âŒ-¾øª^ï1KI<£-19³åÖG6íGÀûQå–>÷PñE¯÷Á¼ƒOÝûr¥²ö‡îÞÏYÎó;÷v=P8÷`4À @€ÀJà"ÙAê\|¬Ûj£Ë&I%õí @ÉÃAöæp-‹y˜xðö¤òO'eó—v_˜ÚÏÌHFh¾Óx|¯_|¼é7þðÅ6"ÏY˜ŒÏEQN?CÏqØ·¶CçmÄeÜwd/òÇ‘_§Áå‰á>þ`˜]̼ÁWýêalL˜mL¿ÓuÊÎS#Ð4À•#0çíDÿ]³7}ØèÔEB³äûnáW„÷¾åž²å}ø¼è2²‡pÏ ??LdŸ™ °Kx¥|NlØf ¤mhoŸd2ßÜ÷ž0ßÞç{+Q/Cw¤œ·m˜1½Ò’|….›ó°ÍeÔct$3…¡³C2óÎk¡éÌ"@Üàÿ¸q‡ c‰q¦úÑ+[‡öµ¯ož+ÌŸþ}Ax?ñÑÝï>ï9¸øèƒé=[ûg¼h]…YŽ»7—%zññ,a|ëwrÈÇ=øfý80úòÝ€Yê´AˆeO¿ëyôžüÝžƒ¿ßOdÈL^žþ*UÞ¾?lü1æ ÷Å!êÂÆ!$1iÜa¢êbªûT9t¿¼G^$}ÖØ¦®´ÿ*é³é(b.ÆÔP÷¾mµÜCü`ì}Q÷>àŸuíYZ×>°ëýC‡f¹xûç&ÞÈÍÂv6ÀSŽ@ ¸X9_2tl8|Vß2>{µ‘Ç1õ)GÂ/ÿÃ0•+"&÷S™Éϧõë3òÍ™Ý q²­8DkÖÏA!tºÑÒ¼é'=šþ¥Ø¼uøÙl  <1úrª ̇¨ØTÌ›’º9a“‘³v°fmB"ñÀr±úg#Ð4À>|`0§‘ÇÐÉmèä2˜Ü¦$_a—×Ì…æ¶›RÿMá×…IYWF/Kµ¿¦ÕkÂdHÈ$†n¾¢Wüûl2D=tÞÛ{ |GøÎ°åQ¯€¾“: ÓÚ‡hòz}ØVGÖÜFŽƒÍiŒÎìes’+’£65gV¥\c1È8DL"‹®$hcLú»Ñqí+â èÂóò¦¿ï |ÃÁÅó]ù£!cãœC;& ]\7ÔØPç{ý.í¯Ûc)§tñ±|×ÀîO$¸+üÙÁò-9WLìùÕïOŒ-H|JcQC–‡Æ ÷×Þ$÷@é½ÁgÎðÞQ2nÇè—>•èûØø—*MÞÜà­­^eÕ­§¬ÝzŸÒÜ3ËZ—2¨úÏâ³L_ËË ÀÍij“…BTI€&?6nTÜtðÀ„^™zØ|Aº›}Ô‡Ùäütø—ÂÔ}BôÜD×fV¯Èl^œ™¾8ò%‘ÏcÖ¡zÀWíï&”óׇ¿²Ê/&5ó±cvWA|ÿÈÇÂw„ÙTÐ 9ên<Ü”lIëۆ͂Jè$$Ih+ÅÝÔ4@#°[yÍœ¤$¡›³°e}ä6r~Ø‘äÊ[Âo ó•OŒÈ®¯ ¿*̯Çèù£afOf˜ üõðWü'ï¢î?¡çìÔ_ˆ|óÙ0ÜoHô3¥Ú†>~¦‹»&§˜M@#Ð4Wˆ ²>8˜Ûä#sÒ¼¥$ÉÕG]s›¹É/¸~!LŽ»6"—¤ÉÈ$:2ÙIº>ô…tóÑ0ÜôJb˜¼¥4‡)}ãÆÜg^£>:}Áä3¤ù C书Fà,#ÀJ–kbE×X4Ç!ãq†Pã>cÒöôyKøá—„¯.¬è†U²¼ùø/ßï7Âõ‘øË¾ß6~K`c ÒøƒT÷—ØÆ'gL#æ¢îî ÷†{›+À½ú©‡šc™ñXS^¥ºûú7m à:¡¨â]u×PõY¿vYsKŽêÞGÚá—µ«DoºJXHM@#p²˜p-eHƒ06þãÈ k]’åƒá»Â´}aøªã²[ óó×za2?ƒPvD·Ÿ ¿7|o›áØd omLܤÔr72´uc.ØLÓ „X!›F h®âª9‹Ð}€ÓFZ¢|Ѧ²uóúËÁçÂ<þH˜õ«'ɼwþ°ÙçÚ³=ܾ-œ¿pÀw‰ÕÜTs—ºÒüfCÚI.ƒ™½,Væ·55çã‹’µ±oð¯ö•Wð\_HˆhqG˜÷‚ó9ßË|?`*Ok º˜°v1í’À„ÿš‰˜ù±ð‡Âó[5æÔ¸Suê0|È‹˜ {ë9¥h3௘‹)’øe S§_t%õjݘ›¹Óa\Õ»µ6,늷÷Å2md­g¹>$4ËÅÛ?¯ «~À¿¦Q»q#Ð\tk°%b#݈Ô(úµ¼¶Ã/ÑÖ€ŠÝ@L¢þbøÎ0úóÃü&ó$¿äÁèöðaè˜# ™ Ǽ™}Ú´a#‚íÃý‡vÔ6è3vøšF h® ­¼¤¯ÊªÛ³>í*ÍÖÑF’ßþ2üù0ßÈÇÛ€<„[7êÓF䟻·…9¨äÃä!¸æ*òÕÖ÷þúÐm{sœÝ>›ïÁšåâíŸÀÙE€µïúWzµÚ³¤œµâÞÛrÛ)]OÕÖÇÁþ=á/„y}Ï{ø¸žr"&<þHø“aâe#Ä"â Œn,R«ªmüQ‡ †ÀF|à*¶Ê¸Flã>ˆ6ø¤±›Ü¦ï®ð½aÞ|MøÕá…ŸJ"Ç<¾g•äæVsº¹JI>C7—ÍÒzæ@ûCŠRŒ”q ²©8ð"¾°&Üc³ñÁ¬# {‹ìézªkÌuG¿0_K€ür˜C6~Á~k˜Xtsø©< d¾_ ß¾?Ì~›XÁüŒ`[”uo=ëÖ1!íOfŒReàçõSæÔ÷™D¬ç:©²‹_´«LúðÞDº}a7@ÅŠ{‚ £k#¯”ìÏ~lWýúZ>Iôà“lwÛ\ †VšId±~I´l HÀHl‰6ý +i_$¶›ü$[|Hü¼ÈáÛ'ÂÞ~i˜¯F¿Þ1„M?`sô¥0ãâc^Hæ…tC”¹vˆÐapч®Ÿ6ØökßbVèH¸©hFàú @Ü%Ÿ™“Љ·9eßEÉôcÆn|06LæßÊ|´Í·Ê_ýæðËÃ/_ï_t1>o’×Èi…ÉEsn3—™ã°Ícä+óºlNÃF·¯ßÜ&.H1D65çÿÿÏ{lÖŒÄz¢œµ5k 2!ç8D× k²Æ!Ê>¾+̛ɷ„_fÍ/)®7åóÂãÐXÄÞž7—’kf^Huã ûi|Ƥ{lêè§6}zýȇj,cðCýÌ ØýÑ?\ɾíÇ¾Ž…¬DYÓå'ïµÕÅûrdÝZ¯úª^ë´þ$ @jj“‹@ ˆ&=-IIR$Éò& ‰×C@Û!g6I"M¦$f“4q¿’$‹ÎX†^uü<,ñöæ£ 0­2YGÝ$Æâ·|܉ ’2ØMs`îÎ vSâ&C n@ܰèCÚŽ ×Oû¤X\ÃÅêŸ@#Ð4ׂ±•bŒE7Þ“oˆË[ÔhWum$l¾P’#éæPм†ä—NäžÏ†É]ä1r›9 yS˜>Ž#Æå«)Ìiä5þ8ô#×Ô¹™kjþ!?™£¨o^C7¡ËõÁÛ¶”Ù'¾:ベRü”)jjÎõÿ>ë‚xà[ XGkK²²²k ³þd×%ñÇ8„˜3tw­ö³#=4±×Æ¿ãÄ|˜kCÄ"Þö£ÿ:·:GæÂ\™:R6渿VâŸcmñÑåöYÇBgžHÉ5áSFmÍ HïõèW°!$Lµoý³Lµ¦+Dì®…æö³}-üÁà|IDAT}wÛ'ˆ¨©hN&.’I$+‘dë! •:m$̙釶Huê°!ñAI‰±‘$އ¯:~?:mÜèDÝm*˜«ósnÎOé±™“6›túp“âF„zóFÄz<(QNê W¶ÆsuŽê)njF ¸Ž˜èÒÜÆþ”x=“±i;â·±ÝØn^#á7QNc ›qaüä Íeø!lê›Ûœ«¹ˆ~êüÌ%Î é\©‹”é§²¹Ê‡¤\[öÌFg ÊêX¯š'vS#pÞ¨k„µÍú™‰5¹ÎÕ]ã®9$ìÚ&±&‘ø;Hc’qaã‡xØÆ"$dBÂŽÅ0ä¶:Ò9*«ñI_Æuí996¡Óž¾Ñëxâìü”©6æì<½nÚzÝ”U,öµÅo?Qwº~|MW@Å^fûê{î–O ¦F 8ÙXIz$B’¢’+‘tÙ\”‘nTXç&=’qMÄØÔ¥%:mxÈAg#¢Dw“Â|ªn‚6isèá÷†cµõ1tæ£ãs®Œ]™Íe\'~ìºằñ»AÚÆööé8u|æP9fS#Ð4ÀuD€˜K¾ ÖBØ>â3yˆx]©Æec¶’XÓVöæ6•ô_sšùŒñå¨CW’[¤9·ÕëpžÎMi¾qŽæ#$>$ù ½æ1|3×ú¶§ûdLlæ‚^çsg£75ç×ë™uÂÚW²~fbC Ú¢»ÆhÓÎ5®N=tÖ':L 2!{+1·ÊÌAšã~æ#3Ÿy~Αù8'%󆃹ÂÇÅ"ëІz¶·¿Š‰sšeš ª×B;l0¡>ý¡ã³ ²¿ªãÓ¦¾uô/¥ý³8‡lšFàä#`Â2ñÕ ÉV"ùò°£¬ Ï$Œ$‘*iO“5:±ÁM ›l¸>,Õ ó‚ñAÚêλÎI½Î srŽêlFðUéÆß¼Y¡t˜:Œ¥t %cSî¼M@#Ð4OÄ[ò†±ÂGÌ6é7>SG)ËeÚûÐnNCšÏ(ߗטƒ¹L×ÎçœñAÌr^”;/¤y†¹`;'¤º9 9ç5mêVݶôO;ÇtR=jS#Ðl ÀX߬#‒5&±ÎêšrÍ!]g®IÖ!qG›¸ÂA }Ôý¶6câ7‡°!l¨Æ ã’ównÎEÉü˜6’¹)Ñe悎4Þ ±emë)ƒ:ôëxŽé<ðLú¸u¤÷ƒúâ€nôJø²²ê£°4ç‚LS#МL`&D’!‰I¦œuM–lC=t6&gêºࡈ ýàǦ®K$|üŒ¥dUdž¨£®tHØù¨;'üèÎKɼäyóá¦Ä€´£?ý"~°e瀔ª®¯e#Ð4ÀõG€XLÞ0îbCäsÒp”Ô…©Kœ‡ÉGØæ ó~ûAŸ¹æ5t˜ü‡„f‰¯æ6çâ|(¯óÂï‘ÌiÎBÊ”©“ü}–ë·ßy<ì:¯˜ƒð55ÀQ\¬mÖë^Éz“ªnêÁÄפkúÄ"±…ý¶ŸÖÁ¦RflÉœfŽëPÂf>Ì)c3ËÐõ¡3'â‹Ò¸ƒòºçÖFZnHú¥eºTu}Hü\g-×GŸ’X`S>××VZ¯Jô¦FàÜ!@°ijÓ…€ÉŒäG2¬’.ĆÁdΆƒM’úl:°9mðQ‡„O}Œ³µAaó%®Ý¦¤êÌÝù«3gtæƒ>3sssQ7곤.s§?¥}0Ž}Ec!©ë|°Ñ›F hž:ˆÃäã¯6’¸Mž1N#Ûä%t˜üÄgÜ'GËðUIðV^c29]š<õ;7lç¯æ4ææ¼ð«3Gl¤9²-Ûzöeÿ^¿óPâ—ð55À~\#[{lÖ$T×–zC®EÖ&~$ûQöÖÆ!Ö6:}º‡&>k𪬱R:ï*Ñ›ù¨3žóC§œ¹àcŽÚ”‹¶¤õpí›ñèrü:·¥äðOʹëUÝ2ZT?¶d;¥~¤>e-k½8W`šFàô!`# ’X‘ÒĈòð6>Ä ±MØH7"H7&è0}±1¡7(øÜ´à‡±Õ‘[T7èÚÌ]ÉœÐ#s®’²j×òÚÎq(‡!$TÆÝÔ4@#ðÔ#@¬6?‹±Û5^בäʨ‡Mü'WaS†ÄW¥ù _eÆ$‡!娻Š^‰±2·`ã7aS†=K|•ÉkÕ®º×‡¯^³ãÖ¹8§TíÜMÀ À‚ˆ¬!÷³HÖ±Â:”GúY‹ØÈ‡°©³‡èƒý:’˜£œcs£!Æenp è0å01Éõà¯1Fý¸8d¶w<üèuÎ'înè[D]ˆk¬:>m%¾ã¨Ö«úqmº¬8󰸚Fàô"P7èn\Ûl Øl`#ÝPèŸ7"´gc¢´{nïXö阎•&»MºÉ ³9€²›7J7#Øn6êÁí±éw~ë/®Ý¦‡öŽ­¤njF xú ¿HèÚsÞÁ&7Íù‰¼T¹ÖÑ_}ôc.C·_$D^C¯y?dþ˜%y‰œSó›öVNÓW%õåùñêŽO=jç6@hj®Ö{]óÆýÆü01DÒX£Ô§Ô¿ÕÖ>©‹î<ôÇµó¡³æ!ã‚v?êÄc:1¦Æ—ƒ,·{oÚàs<úÆÐõc£;ì'J^{m7û¶úßòÕ>ZoÎ%óâ9— ôE7§Ö±kYÉ&bóàÛß7)¶§ž›ûuLì:n̽äfÀͶº;³tsá¦Ã͈ÒM }¹‘A·Ü1ªd‚ØpS#Ð4ÀÉAÀƌԑæóÒœ“ð›«Ìmæ+ìªÓÖºè–9†}›çRe/™GÌeJü泚ÇðÍ6ùÊœ…´]•´±-:ý+Ñå¨Û¡©¸êÚW7>Ðmø1ÆcŠ~%þª[Ï8¤t,lõ¨Ç’1€¸ 'Œ/ĪcŒ;ÊÙO¶CŸc‘ã !ç²Xý³hžv$M@#púp-+Ý(`Ën.´=èÃV§:>7&ô…îf9ëö‰¤}¦yCàFÁ J•n*Ü„PW½n@<øc,õÚ/ýh#eêW»©hFàä `naFê䍿"ÊÌKä ªc›Ï,3§)k_êHHÛñ寧ä‰Üd^1ŸÕTó娳ÏÇÆWuì¦F 8PšFàì à&+rã€Î¦BúD¹›üØl8,w“B™zmcÿ¶EBø-ŽòƒÍ4o´‘2›ºá |Çéu#C=û¦/tÈy(oÿlF 8‰˜_˜›9§æ|3›Ë”汚÷,£­ºù«Žã¸øf2˜c´ÍeØæ3|>X«+kîšuû¶.s@‡”;.¾ªc75Àµ#`Ì¡'ãºqÁ‚-Wzeêh[_Ò1”qòaWrÝ? ã‚1?>ãˆR¿|ÔÙ§ÓÆvö¯ÄaCÊÅêŸ@#p"  45ÀÙB€u]×¶›ˆê÷AH_Ý€àæ´UæFÅrÚ8>Ⱦ‘uàF¡J6 ÚnDÜÀÌ›7Ô·,ênCRûª:õ!ÇY¬þÙ4@#p ÇHæ}æò•:Ö§ŽmΪeÖGÖþ±%ýØès^Ñ®¹Çœ¥ÏGþ² ߬›k™ù I}HŸúpöF xR¨1€j¼°Ì¸‚m\ѧÍÛò¹Ì:–Wɘu ÊŒ;Øs\0V()G7!1Ê‹¬gËÒlŒ…_ÆWuì¦F 8a4šFàl"Àúv«WÉU× en:<üÃ‡Îær“b]}µ_õÑ`ýMT¥7$”»±Œ‡$tëXŽ !ݴئ–áƒf¹xûg#Ð4ÀiBÀ_æ¬^%ù†\…į¬ùK}«žml—.vãàƒæ”áXm}æ+lus•>¬ñËæ2úT·=í¶˜ºeM@#ðÔ @ ¨ñ@»Ê_Œ+H÷ØèÔÙW¾lWûE—ÐëÚW¯±¢Æô{ª>Ç!û¨±ˆq©Ù/z»©hN(5€œÐ)ö´FàpW‰^™îçƒ@|nJØ|@´q“‚„ð¹9±žrTXPª7ʺ¡pRËÜ€Tß\ϲ*_S#Ð4ÀéGÀ敘wª¬9kÎUæ2ý´SWÒ·~|°¤>畚ǨkŽª:>sTÍkÖ¥¬ê¶­Òöøæ9àkj'ã@•è3ojÕž^#Ð\\óU¢Wv7"nLlSíªÛ醥úªîf¡JôÜŒP߆>¥þÚ^ŸíªDojF 8›˜Ã¼:sÒr%~˶¤>óÞ,g–>(ë÷!ÚüTËÑÍiJÚÍuðÙ2÷-Vÿl“€À'Œ7U2OlbL•µŽºu°%Ë´·äV¼˜÷ØÆ¤ñiü©}¨×6Œ«ÞÔ4§PNÉ”{š@#ppíWY7Ug86!u#2—k#!åbýéf‚’º¨7$Öµ^­c™#XG©¿e#Ð4ÀÙGÀ\ä•’· ê¯º¹:[u«ýr¹ÍüDÝšŸÔ•5¿ÍuíÃ<¦´²©hN.Ɖ*kÜÙÒ÷í±ç>¸j}û0ÎPnü˜}5s¨¯n}ÛÏ}a75À)Dàrä^RO¹hžÆ%MÑåj£K—Û¨X¯ö‹¯n$´Ýd`»!±Li;ëj[^%zS#Ð4ÀùE æ0QØ:à3G)­£Üê‡þ¬oß[9i~Ö¶MµÕíGIݪ۶e#М|ŒJflLѧíÕhÏÒ¶ÖÛ²çX-SŸ8Sm|ÕVGJêJý-Fà”"`ð9¥Óïi7ÀuDÀx ¤kudÕkºTëá³åuqœ>—aÏ>ú¬>ÇhÙ4@#ЈÀœ—ðW_Õ-«mgý¸¼FÝ9_ÙÞC¾Ù6)íÃz-Fàô#`ÜPrEêȪ×2th.¯¾Q!?¶bHõQ»ú´gŸu‘M@#p†0˜œ¡KêKië€@ [º>¥CV»ê–× ¾-[Ÿrn;û-oÙ4@#Ї€yIi]ìêÛ§S¿–پ楪[^ÿjù>Ýv-Fàì!PcÈ–®O)Õ®ºå5žàÛ²õ)ç¶³ßò–@#pFØ gäÒú2Fà:"PcEÕë³¶­;o.f›zÕWuûhÙ4@#Ð\+æ)åVµ¬êµîVžš}—³k­7ÀùA Æ•ªWfÿl[÷JâL­SuûhÙ4g}Áã _r_Z#Ð\GöÅ}~‡ÞÚplù¬ß²hF xªØÊa[¾:Ÿ}9lŸ¿¶m½h}1gŸßö[1gËgý–@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#Ð4@#ðô ðÿ¯0ÔŠIEND®B`‚RxJS-4.1.0/doc/designguidelines/readme.md000066400000000000000000001351011266736161100202220ustar00rootroot00000000000000# RxJS Design Guidelines # RxJS Logo 1. [Introduction](#1-introduction) 2. [When to use RxJS](#2-when-to-use-rxjs) 1. [Use RxJS for orchestrating asynchronous and event-based computations](#21-use-rxjs-for-orchestrating-asynchronous-and-event-based-computations) 2. [Use RxJS to deal with asynchronous sequences of data](#22-use-rxjs-to-deal-with-asynchronous-sequences-of-data) 3. [The RxJS contract](#3-the-rxjs-contract) 1. [Assume the RxJS Grammar](#31-the-rxjs-grammar) 2. [Assume resources are cleaned up after an `onError` or `onCompleted` messages](#32-assume-resources-are-cleaned-up-after-an-onerror-or-oncompleted-message) 3. [Assume a best effort to stop all outstanding work on Unsubscribe](#33-assume-a-best-effort-to-stop-all-outstanding-work-on-unsubscribe) 4. [Using RxJS](#4-using-rx) 1. [Consider drawing a Marble-diagram](#41-consider-drawing-a-marble-diagram) 2. [Consider passing multiple arguments to `subscribe`](#42-consider-passing-multiple-arguments-to-subscribe) 3. [Consider passing a specific scheduler to concurrency introducing operators](#43-consider-passing-a-specific-scheduler-to-concurrency-introducing-operators) 4. [Call the `observeOn` operator as late and in as few places as possible](#44-call-the-observeon-operator-as-late-and-in-as-few-places-as-possible) 5. [Consider limiting buffers](#45-consider-limiting-buffers) 6. [Make side-effects explicit using the `do`/`tap` operator](#46-make-side-effects-explicit-using-the-dotap-operator) 7. [Assume messages can come through until unsubscribe has completed](#47-assume-messages-can-come-through-until-unsubscribe-has-completed) 8. [Use the `publish` operator to share side-effects](#48-use-the-publish-operator-to-share-side-effects) 5. [Operator implementations](#5-operator-implementations) 1. [Implement new operators by composing existing operators](#51-implement-new-operators-by-composing-existing-operators) 2. [Implement custom operators using `Observable.create`](#52-implement-custom-operators-using-observablecreate) 3. [Protect calls to user code from within an operator](#53-protect-calls-to-user-code-from-within-an-operator) 4. [`subscribe` implementations should not throw](#54-subscribe-implementations-should-not-throw) 5. [`onError` messages should have abort semantics](#55-onerror-messages-should-have-abort-semantics) 6. [Parameterize concurrency by providing a scheduler argument](#56-parameterize-concurrency-by-providing-a-scheduler-argument) 7. [Provide a default scheduler](#57-provide-a-default-scheduler) 8. [The scheduler should be the last argument to the operator](#58-the-scheduler-should-be-the-last-argument-to-the-operator) 9. [Avoid introducing concurrency](#59-avoid-introducing-concurrency) 10. [Hand out all disposables instances created inside the operator to consumers](#510-hand-out-all-disposables-instances-created-inside-the-operator-to-consumers) 11. [Operators should not block](#511-operators-should-not-block) 12. [Avoid deep stacks caused by recursion in operators](#512-avoid-deep-stacks-caused-by-recursion-in-operators) 13. [Argument validation should occur outside `Observable.create`](#513-argument-validation-should-occur-outside-observablecreate) 14. [Unsubscription should be idempotent](#514-unsubscription-should-be-idempotent) 15. [Unsubscription should not throw](#515-unsubscription-should-not-throw) 16. [Custom Observable implementations should follow the RxJS contract](#516-custom-observable-implementations-should-follow-the-rxjs-contract) 17. [Operator implementations should follow guidelines for RxJS usage](#517-operator-implementations-should-follow-guidelines-for-rxjs-usage) ## 1. Introduction ## This document describes guidelines that aid in developing applications and libraries that use the Reactive Extensions for RxJS library. The guidelines listed in this document have evolved over time by the Rx team during the development of the RxJS library. As RxJS continues to evolve, these guidelines will continue to evolve with it. Make sure you have the latest version of this document. All information described in this document is merely a set of guidelines to aid development. These guidelines do not constitute an absolute truth. They are patterns that the team found helpful; not rules that should be followed blindly. There are situations where certain guidelines do not apply. The team has tried to list known situations where this is the case. It is up to each individual developer to decide if a certain guideline makes sense in each specific situation. The guidelines in this document are listed in no particular order. There is neither total nor partial ordering in these guidelines. Please contact us through the [RxJS Issues](https://github.com/Reactive-Extensions/RxJS) for feedback on the guidelines, as well as questions on whether certain guidelines are applicable in specific situations. ## 2. When to Use RxJS ## ### 2.1 Use RxJS for orchestrating asynchronous and event-based computations ### Code that deals with more than one event or asynchronous computation gets complicated quickly as it needs to build a state-machine to deal with ordering issues. Next to this, the code needs to deal with successful and failure termination of each separate computation. This leads to code that doesn’t follow normal control-flow, is hard to understand and hard to maintain. RxJS makes these computations first-class citizens. This provides a model that allows for readable and composable APIs to deal with these asynchronous computations. #### Sample #### ```js var input = document.getElementById('input'); var dictionarySuggest = Rx.Observable.fromEvent(input, 'keyup') .map(function () { return input.value; }) .filter(function (text) { return !!text; }) .distinctUntilChanged() .debounce(250) .flatMapLatest(searchWikipedia) .subscribe( function (results) { list = []; list.concat(results.map(createItem)); }, function (err) { logError(err); } ); ``` This sample models a common UI paradigm of receiving completion suggestions while the user is typing input. RxJS creates an observable sequence that models an existing `keyup` event on the input. It then places several filters and projections on top of the event to make the event only fire if a unique value has come through. (The `keyup` event fires for every key stroke, so also if the user presses left or right arrow, moving the cursor but not changing the input text). Next it makes sure the event only gets fired after 250 milliseconds of activity by using the `debounce` operator. (If the user is still typing characters, this saves a potentially expensive lookup that will be ignored immediately). In traditionally written programs, this debouncing would introduce separate callbacks through a timer. This timer could potentially throw exceptions (certain timers have a maximum amount of operations in flight). Once the user input has been filtered down it is time to perform the dictionary lookup. As this is usually an expensive operation (e.g. a request to a server on the other side of the world), this operation is itself asynchronous as well. The `flatMap` or `selectMany` operator allows for easy combining of multiple asynchronous operations. It doesn’t only combine success values; it also tracks any exceptions that happen in each individual operation. In traditionally written programs, this would introduce separate callbacks and a place for exceptions occurring. If the user types a new character while the dictionary operation is still in progress, we do not want to see the results of that operation anymore. The user has typed more characters leading to a more specific word, seeing old results would be confusing. The `flatMapLatest` operation makes sure that the dictionary operation is ignored once a new `keyup` has been detected. Finally we subscribe to the resulting observable sequence. Only at this time our execution plan will be used. We pass two functions to the `subscribe` call: 1. Receives the result from our computation. 2. Receives exceptions in case of a failure occurring anywhere along the computation. #### When to ignore this guideline #### If the application/library in question has very few asynchronous/event-based operations or has very few places where these operations need to be composed, the cost of depending on RxJS (redistributing the library as well as the learning curve) might outweigh the cost of manually coding these operations. ### 2.2 Use RxJS to deal with asynchronous sequences of data ### Several other libraries exist to aid asynchronous operations in the JavaScript ecosystem. Even though these libraries are powerful, they usually work best on operations that return a single message. They usually do not support operations that produce multiple messages over the lifetime of the operation. RxJS follows the following grammar: `onNext`* (`onCompleted`|`onError`)?. This allows for multiple messages to come in over time. This makes RxJS suitable for both operations that produce a single message, as well as operations that produce multiple messages. ```js var fs = require('fs'); var Rx = require('rx'); // Read/write from stream implementation function readAsync(fd, chunkSize) { /* impl */ } function appendAsync(fd, buffer) { /* impl */ } function encrypt(buffer) { /* impl */} //open a 4GB file for asynchronous reading in blocks of 64K var inFile = fs.openSync('4GBfile.txt', 'r+'); var outFile = fs.openSync('Encrypted.txt', 'w+'); readAsync(inFile, 2 << 15) .map(encrypt) .flatMap(function (data) { return appendAsync(outFile, data); }) .subscribe( function () { }, function (err) { console.log('An error occurred while encrypting the file: %s', err.message); fs.closeSync(inFile); fs.closeSync(outFile); }, function () { console.log('Successfully encrypted the file.'); fs.closeSync(inFile); fs.closeSync(outFile); } ); ``` In this sample, a 4 GB file is read in its entirety, encrypted and saved out to another file. Reading the whole file into memory, encrypting it and writing out the whole file would be an expensive operation. Instead, we rely on the fact that RxJS can produce many messages. We read the file asynchronously in blocks of 64K. This produces an observable sequence of byte arrays. We then encrypt each block separately (for this sample we assume the encryption operation can work on separate parts of the file). Once the block is encrypted, it is immediately sent further down the pipeline to be saved to the other file. The `writeAsync` operation is an asynchronous operation that can process multiple messages. #### When to ignore this guideline #### If the application/library in question has very few operations with multiple messages, the cost of depending on RxJS (redistributing the library as well as the learning curve) might outweigh the cost of manually coding these operations. ## 3. The RxJS Contract ## ### 3.1 The RxJS Grammar ### Messages sent to instances of the `Observer` object follow the following grammar: onNext* (onCompleted | onError)? This grammar allows observable sequences to send any amount (0 or more) of `onNext` messages to the subscribed observer instance, optionally followed by a single success (`onCompleted`) or failure (`onError`) message. The single message indicating that an observable sequence has finished ensures that consumers of the observable sequence can deterministically establish that it is safe to perform cleanup operations. A single failure further ensures that abort semantics can be maintained for operators that work on multiple observable sequences. #### Sample #### ```js var count = 0; xs.subscribe( function () { count++; }, function (err) { console.log('Error: %s', err.message); }, function () { console.log('OnNext has been called %d times', count); } ); ``` In this sample we safely assume that the total amount of calls to the OnNext method won’t change once the OnCompleted method is called as the observable sequence follows the Rx grammar. #### When to ignore this guideline #### Ignore this guideline only when working with a non-conforming implementation of the Observable object. ### 3.2 Assume resources are cleaned up after an `onError` or `onCompleted` message ### Paragraph 3.1 states that no more messages should arrive after an `onError` or `onCompleted` message. This makes it possible to cleanup any resource used by the subscription the moment an `onError` or `onCompleted` arrives. Cleaning up resources immediately will make sure that any side-effect occurs in a predictable fashion. It also makes sure that the runtime can reclaim these resources. #### Sample #### ```js var fs = require('fs'); var Rx = require('rx'); function appendAsync(fd, buffer) { /* impl */ } function openFile(path, flags) { var fd = fs.openSync(path, flags); return Rx.Disposable.create(function () { fs.closeSync(fd); }); } Rx.Observable. using( function () { return openFile('temp.txt', 'w+'); }, function (fd) { return Rx.Observable.range(0, 10000) .map(function (v) { return Buffer(v); }) .flatMap(function (buffer) { return appendAsync(fd, buffer); }); } ) .subscribe(); ``` In this sample the Using operator creates a resource that will be disposed upon unsubscription. The Rx contract for cleanup ensures that unsubscription will be called automatically once an `onError` or `onCompleted` message is sent. #### When to ignore this guideline #### There are currently no known cases where to ignore this guideline. ### 3.3 Assume a best effort to stop all outstanding work on Unsubscribe ### When unsubscribe is called on an observable subscription, the observable sequence will make a best effort attempt to stop all outstanding work. This means that any queued work that has not been started will not start. Any work that is already in progress might still complete as it is not always safe to abort work that is in progress. Results from this work will not be signaled to any previously subscribed observer instances. #### Sample 1 ```js Observable.timer(2000).subscribe(...).dispose() ``` In this sample subscribing to the observable sequence generated by Timer will queue an action on the `Scheduler.timeout` scheduler to send out an `onNext` message in 2 seconds. The subscription then gets canceled immediately. As the scheduled action has not started yet, it will be removed from the scheduler. #### Sample 2 ```js Rx.Observable.startAsync(function () { return Q.delay(2000); }) .subscribe(...).dispose(); ``` In this sample the `startAsync` operator will immediately schedule the execution of the lambda provided as its argument. The subscription registers the observer instance as a listener to this execution. As the lambda is already running once the subscription is disposed, it will keep running and its return value is ignored. ## 4. Using Rx ## ### 4.1 Consider drawing a Marble-diagram ### Draw a marble-diagram of the observable sequence you want to create. By drawing the diagram, you will get a clearer picture on what operator(s) to use. A marble-diagram is a diagram that shows event occurring over time. A marble diagram contains both input and output sequences(s). throttleWithSelector By drawing the diagram we can see that we will need some kind of delay after the user input, before firing of another asynchronous call. The delay in this sample maps to the `debounce` operator. To create another observable sequence from an observable sequence we will use the `flatMap` or `selectMany` operator. This will lead to the following code: ```js var dictionarySuggest = userInput .debounce(250) .flatMap(function (input) { return serverCall(input); }); ``` #### When to ignore this guideline #### This guideline can be ignored if you feel comfortable enough with the observable sequence you want to write. However, even the Rx team members will still grab the whiteboard to draw a marble-diagram once in a while. ### 4.2 Consider passing multiple arguments to `subscribe` ### For convenience, Rx provides an overload to the `subscribe` method that takes functions instead of an Observer argument. The Observer object would require implementing all three methods (`onNext`, `onError` & `onCompleted`). The extensions to the `subscribe` method allow developers to use defaults chosen for each of these methods. E.g. when calling the `subscribe` method that only has an `onNext` argument, the `onError` behavior will be to rethrow the exception on the thread that the message comes out from the observable sequence. The `onCompleted` behavior in this case is to do nothing. In many situations, it is important to deal with the exception (either recover or abort the application gracefully). Often it is also important to know that the observable sequence has completed successfully. For example, the application notifies the user that the operation has completed. Because of this, it is best to provide all 3 arguments to the subscribe function. RxJS also provides three convenience methods which only subscribe to the part of the sequence that is desired. The other handlers will default to their original behaviors. There are three of such functions: - `subscribeOnNext`: for `onNext` messages only - `subscribeOnError`: for `onError` messages only - `subscribeOnCompleted`: for `onCompleted` messages only. #### When to ignore this guideline #### - When the observable sequence is guaranteed not to complete, e.g. an event such as keyup. - When the observable sequence is guaranteed not to have `onError` messages (e.g. an event, a materialized observable sequence etc…). - When the default behavior is the desirable behavior. ### 4.3 Consider passing a specific scheduler to concurrency introducing operators ### Rather than using the `observeOn` operator to change the execution context on which the observable sequence produces messages, it is better to create concurrency in the right place to begin with. As operators parameterize introduction of concurrency by providing a scheduler argument overload, passing the right scheduler will lead to fewer places where the ObserveOn operator has to be used. #### Sample #### ```js Rx.Observable.range(0, 90000, Rx.Scheduler.requestAnimationFrame) .subscribe(draw); ``` In this sample, callbacks from the `range` operator will arrive by calling `window.requestAnimationFrame`. The default overload of `range` would place the `onNext` call on the `Rx.Scheduler.currentThread` which is used when recursive scheduling is required immediately. By providing the `Rx.Scheduler.requestAnimationFrame` scheduler, all messages from this observable sequence will originiate on the `window.requestAnimationFrame` callback. #### When to ignore this guideline #### When combining several events that originate on different execution contexts, use guideline 4.4 to put all messages on a specific execution context as late as possible. ### 4.4 Call the `observeOn` operator as late and in as few places as possible ### By using the `observeOn` operator, an action is scheduled for each message that comes through the original observable sequence. This potentially changes timing information as well as puts additional stress on the system. Placing this operator later in the query will reduce both concerns. #### Sample #### ```js var result = xs.debounce(1000) .flatMap(function (x) { return ys.takeUntil(zs).sample(250).map(function (y) { return x + y }); }) .merge(ws) .filter(function (x) { return x < 10; }) .observeOn(Rx.Scheduler.requestAnimationFrame); ``` This sample combines many observable sequences running on many different execution contexts. The query filters out a lot of messages. Placing the `observeOn` operator earlier in the query would do extra work on messages that would be filtered out anyway. Calling the `observeOn` operator at the end of the query will create the least performance impact. #### When to ignore this guideline #### Ignore this guideline if your use of the observable sequence is not bound to a specific execution context. In that case do not use the `observeOn` operator. ### 4.5 Consider limiting buffers ### RxJS comes with several operators and classes that create buffers over observable sequences, e.g. the `replay` operator. As these buffers work on any observable sequence, the size of these buffers will depend on the observable sequence it is operating on. If the buffer is unbounded, this can lead to memory pressure. Many buffering operators provide policies to limit the buffer, either in time or size. Providing this limit will address memory pressure issues. #### Sample #### ```js var result = xs.replay(null, 10000, 1000 * 60 /* 1 hr */).refCount(); ``` In this sample, the `replay` operator creates a buffer. We have limited that buffer to contain at most 10,000 messages and keep these messages around for a maximum of 1 hour. #### When to ignore this guideline #### When the amount of messages created by the observable sequence that populates the buffer is small or when the buffer size is limited. ### 4.6 Make side-effects explicit using the `do`/`tap` operator ### As many Rx operators take functions as arguments, it is possible to pass any valid user code in these arguments. This code can change global state (e.g. change global variables, write to disk etc...). The composition in Rx runs through each operator for each subscription (with the exception of the sharing operators, such as `publish`). This will make every side-effect occur for each subscription. If this behavior is the desired behavior, it is best to make this explicit by putting the side-effecting code in a `do`/`tap` operator. There are overloads to this method which call the specified method only, for example `doOnNext`/`tapOnNext`, `doOnError`/`tapOnError`,`doOnCompleted`/`tapOnCompleted` #### Sample #### ```js var result = xs .filter(function (x) { return x.failed; }) .tap(function (x) { log(x); }); ``` In this sample, messages are filtered for failure. The messages are logged before handing them out to the code subscribed to this observable sequence. The logging is a side-effect (e.g. placing the messages in the computer’s event log) and is explicitly done via a call to the `do`/`tap` operator. ### 4.7 Assume messages can come through until unsubscribe has completed ### As RxJS uses a push model, messages can be sent from different execution contexts. Messages can be in flight while calling unsubscribe. These messages can still come through while the call to unsubscribe is in progress. After control has returned, no more messages will arrive. The unsubscription process can still be in progress on a different context. #### When to ignore this guideline #### Once the `onCompleted` or `onError` method has been received, the RxJS grammar guarantees that the subscription can be considered to be finished. ### 4.8 Use the `publish` operator to share side-effects ### As many observable sequences are cold [\(see cold vs. hot on Channel 9\)](http://channel9.msdn.com/Blogs/J.Van.Gogh/Rx-API-in-depth-Hot-and-Cold-observables), each subscription will have a separate set of side-effects. Certain situations require that these side-effects occur only once. The `publish` operator provides a mechanism to share subscriptions by broadcasting a single subscription to multiple subscribers. There are several overloads of the `publish` operator. The most convenient overloads are the ones that provide a function with a wrapped observable sequence argument that shares the side-effects. #### Sample #### ```js var xs = Rx.Observable.create(function (observer) { console.log('Side effect'); observer.onNext('hi!'); observer.onCompleted(); }); xs.publish(function (sharedXs) { sharedXs.subscribe(console.log.bind(console)); sharedXs.subscribe(console.log.bind(console)); return sharedXs; }).subscribe(); ``` In this sample, xs is an observable sequence that has side-effects (writing to the console). Normally each separate subscription will trigger these side-effects. The `publish` operator uses a single subscription to xs for all subscribers to sharedXs. #### When to ignore this guideline #### Only use the `publish` operator to share side-effects when sharing is required. In most situations you can create separate subscriptions without any problems: either the subscriptions do not have side-effects or the side effects can execute multiple times without any issues. ## 5. Operator implementations ## ### 5.1 Implement new operators by composing existing operators ### Many operations can be composed from existing operators. This will lead to smaller, easier to maintain code. The Rx team has put a lot of effort in dealing with all corner cases in the base operators. By reusing these operators you’ll get all that work for free in your operator. #### Sample #### ```js Rx.Observable.prototype.flatMap = function (selector) { return this.map(selector).mergeAll(); }; ``` In this sample, the `flatMap` or `selectMany` operator uses two existing operators: `map` and `mergeAll`. The `map` operator already deals with any issues around the selector function throwing an exception. The `mergeAll` operator already deals with concurrency issues of multiple observable sequences firing at the same time. #### When to ignore this guideline #### - No appropriate set of base operators is available to implement this operator. - Performance analysis proves that the implementation using existing operators has performance issues. Such can be caused by `materialize`. ### 5.2 Implement custom operators using `Observable.create` ### When it is not possible to follow guideline 5.1, use the Observable.Create(WithDisposable) method to create an observable sequence as it provides several protections make the observable sequence follow the RxJS contract. - When the observable sequence has finished (either by firing `onError` or `onCompleted`), any subscription will automatically be unsubscribed. - Any subscribed observer instance will only see a single OnError or OnCompleted message. No more messages are sent through. This ensures the Rx grammar of onNext* (onError|onCompleted)? #### Sample #### ```js Rx.Observable.prototype.map = function (selector, thisArg) { var source = this; return Rx.Observable.create(function (observer) { var idx = 0; return source.subscribe( function (x) { var result; try { result = selector.call(thisArg, x, idx++, source); } catch (e) { observer.onError(e); return; } observer.onNext(result); }, observer.onError.bind(observer), observer.onCompleted.bind(observer) ); }) }; ``` In this sample, `map` uses the `Observable.create` operator to return a new instance of the Observable class. This ensures that no matter the implementation of the source observable sequence, the output observable sequence follows the Rx contract . It also ensures that the lifetime of subscriptions is a short as possible. #### When to ignore this guideline #### - The operator needs to return an observable sequence that doesn’t follow the Rx contract. This should usually be avoided (except when writing tests to see how code behaves when the contract is broken) - The object returned needs to implement more than the Observable class (e.g. Subject, or a custom class). ### 5.3 Protect calls to user code from within an operator ### When user code is called from within an operator, this is potentially happening outside of the execution context of the call to the operator (asynchronously). Any exception that happens here will cause the program to terminate unexpectedly. Instead it should be fed through to the subscribed observer instance so that the exception can be dealt with by the subscribers. Common kinds of user code that should be protected: - Selector functions passed in to the operator. - Comparer functions passed into the operator. **Note:** calls to `Scheduler` implementations are not considered for this guideline. The reason for this is that only a small set of issues would be caught as most schedulers deal with asynchronous calls. Instead, protect the arguments passed to schedulers inside each scheduler implementation. #### Sample #### ```js Rx.Observable.prototype.map = function (selector, thisArg) { var source = this; return Rx.Observable.create(function (observer) { var idx = 0; return source.subscribe( function (x) { var result; try { result = selector.call(thisArg, x, idx++, source); } catch (e) { observer.onError(e); return; } observer.onNext(result); }, observer.onError.bind(observer), observer.onCompleted.bind(observer) ); }) }; ``` This sample invokes a selector function which is user code. It catches any exception resulting from this call and transfers the exception to the subscribed observer instance through the `onError` call. #### When to ignore this guideline #### Ignore this guideline for calls to user code that are made before creating the observable sequence (outside of the `Observable.create` call). These calls are on the current execution context and are allowed to follow normal control flow. **Note:** do not protect calls to `subscribe`, `dispose`, `onNext`, `onError` and `onCompleted` methods. These calls are on the edge of the monad. Calling the `onError` method from these places will lead to unexpected behavior. ### 5.4 `subscribe` implementations should not throw ### As multiple observable sequences are composed, subscribe to a specific observable sequence might not happen at the time the user calls `subscribe` (e.g. Within the `concat` operator, the second observable sequence argument to `concat` will only be subscribed to once the first observable sequence has completed). Throwing an exception would bring down the program. Instead exceptions in subscribe should be tunneled to the `onError` method. #### Sample #### ```js var CLOSED = 3; function readWebSocket(socket) { return Rx.Observable.create(function (observer) { if (socket.readyState === CLOSED) { observer.onError(new Error('The websocket is no longer open.')); return; } // Rest of the implementation goes here }); } ``` In this sample, an error condition is detected in the subscribe method implementation. An error is raised by calling the `onError` method instead of throwing the exception. This allows for proper handling of the exception if `subscribe` is called outside of the execution context of the original call to Subscribe by the user. #### When to ignore this guideline #### When a catastrophic error occurs that should bring down the whole program anyway. ### 5.5 `onError` messages should have abort semantics As normal control flow in JavaScript uses abort semantics for exceptions (the stack is unwound, current code path is interrupted), RxJS mimics this behavior. To ensure this behavior, no messages should be sent out by an operator once one of it sources has an error message or an exception is thrown within the operator. #### Sample #### ```js Rx.Observable.prototype.minimumBuffer = function (bufferSize) { var source = this; return Rx.Observable.create(function (observer) { var data = []; return source.subscribe( function (value) { data = data.concat(value); if (data.length > bufferSize) { observer.onNext(data.slice(0)); data = []; } }, observer.onError.bind(observer), function () { if (data.length > 0) { observer.onNext(data.slice(0)); } observer.onCompleted(); } ); }); }; ``` In this sample, a buffering operator will abandon the observable sequence as soon as the subscription to source encounters an error. The current buffer is not sent to any subscribers, maintain abort semantics. #### When to ignore this guideline #### There are currently no known cases where to ignore this guideline. ### 5.6 Parameterize concurrency by providing a scheduler argument ### As there are many different notions of concurrency, and no scenario fits all, it is best to parameterize the concurrency an operator introduces. The notion of parameterizing concurrency in RxJS is abstracted through the `Scheduler` class. #### Sample #### ```js Rx.Observable.just = function (value, scheduler) { return Rx.Observable.create(function (observer) { return scheduler.schedule(function () { observer.onNext(value); observer.onCompleted(); }); }); }; ``` In this sample, the `just` operator parameterizes the level of concurrency the operator has by providing a scheduler argument. It then uses this scheduler to schedule the firing of the `onNext` and `onCompleted` messages. #### When to ignore this guideline #### - The operator is not in control of creating the concurrency (e.g. in an operator that converts an event into an observable sequence, the source event is in control of firing the messages, not the operator). - The operator is in control, but needs to use a specific scheduler for introducing concurrency. ### 5.7 Provide a default scheduler ### In most cases there is a good default that can be chosen for an operator that has parameterized concurrency through guideline 5.6. This will make the code that uses this operator more succinct. **Note:** Follow guideline 5.9 when choosing the default scheduler, using the immediate scheduler where possible, only choosing a scheduler with more concurrency when needed. #### Sample #### ```js Rx.Observable.just = function (value, scheduler) { // Pick a default scheduler, in this case, immediately Rx.helpers.isScheduler(scheduler) || (scheduler = Rx.Scheduler.immediate); return Rx.Observable.create(function (observer) { return scheduler.schedule(function () { observer.onNext(value); observer.onCompleted(); }); }); }; ``` In this sample, we provided a default scheduler if not provided by the caller. #### When to ignore this guideline #### Ignore this guideline when no good default can be chosen. ### 5.8 The scheduler should be the last argument to the operator ### Adding the scheduler as the last argument is a must for all operators introducing concurrency. This is to ensure that the schedulers are optional, and a default one can be chosen. This also makes the programming experience much more predictable. #### Sample #### ```js Rx.Observable.just = function (value, scheduler) { // Pick a default scheduler, in this case, immediately Rx.helpers.isScheduler(scheduler) || (scheduler = Rx.Scheduler.immediate); return Rx.Observable.create(function (observer) { return scheduler.schedule(function () { observer.onNext(value); observer.onCompleted(); }); }); }; ``` In this sample the `return` operator has two parameters, and the scheduler parameter defaults to the immediate scheduler if not provided. As the scheduler argument is the last argument, adding or omitting the argument is clearly visible. #### When to ignore this guideline #### JavaScript supports rest arguments syntax. With this syntax, the rest arguments has to be the last argument. Make the scheduler the final to last argument in this case. ### 5.9 Avoid introducing concurrency ### By adding concurrency, we change the timeliness of an observable sequence. Messages will be scheduled to arrive later. The time it takes to deliver a message is data itself, by adding concurrency we skew that data. This includes not using such mechanisms as `setTimeout`, `setImmediate`, `requestAnimationFrame`, `process.nextTick`, etc which should be avoided directly in your code, and instead be wrapped by a `Scheduler` class. #### Sample 1 #### ```js Rx.Observable.prototype.map = function (selector, thisArg) { var source = this; return Rx.Observable.create(function (observer) { var idx = 0; return source.subscribe( function (x) { var result; try { result = selector.call(thisArg, x, idx++, source); } catch (e) { observer.onError(e); return; } observer.onNext(result); }, observer.onError.bind(observer), observer.onCompleted.bind(observer) ); }) }; ``` In this sample, the select operator does not use a scheduler to send out the `onNext` message. Instead it uses the source observable sequence call to `onNext` to process the message, hence staying in the same time-window. #### Sample 2 #### ```js Rx.Observable.just = function (value, scheduler) { // Pick a default scheduler, in this case, immediately Rx.helpers.isScheduler(scheduler) || (scheduler = Rx.Scheduler.immediate); return Rx.Observable.create(function (observer) { return scheduler.schedule(function () { observer.onNext(value); observer.onCompleted(); }); }); }; ``` In this case, the default scheduler for the `just` operator is the immediate scheduler. This scheduler does not introduce concurrency. #### When to ignore this guideline #### Ignore this guideline in situations where introduction of concurrency is an essential part of what the operator does. **NOTE:** When we use the Immediate scheduler or call the observer directly from within the call to `subscribe`, we make the `subscribe` call blocking. Any expensive computation in this situation would indicate a candidate for introducing concurrency. ### 5.10 Hand out all disposables instances created inside the operator to consumers ### `Disposable` instances control lifetime of subscriptions as well as cancelation of scheduled actions. RxJS gives users an opportunity to unsubscribe from a subscription to the observable sequence using disposable instances. After a subscription has ended, no more messages are allowed through. At this point, leaving any state alive inside the observable sequence is inefficient and can lead to unexpected semantics. To aid composition of multiple disposable instances, RxJS provides a set of classes implementing `Disposable` such as: Name | Description -------------------------- | --------------------------------------------------------------- CompositeDisposable | Composes and disposes a group of disposable instances together. SerialDisposable | A place holder for changing instances of disposable instances. Once new disposable instance is placed, the old disposable instance is disposed. SingleAssignmentDisposable | A place holder for a single instance of a disposable. ScheduledDisposable | Uses a scheduler to dispose an underlying disposable instance. #### Sample #### ```js Observable.prototype.zip = function () { var parent = this, sources = slice.call(arguments), resultSelector = sources.pop(); sources.unshift(parent); return new AnonymousObservable(function (observer) { var n = sources.length, queues = arrayInitialize(n, function () { return []; }), isDone = arrayInitialize(n, function () { return false; }); function next(i) { var res, queuedValues; if (queues.every(function (x) { return x.length > 0; })) { try { queuedValues = queues.map(function (x) { return x.shift(); }); res = resultSelector.apply(parent, queuedValues); } catch (ex) { observer.onError(ex); return; } observer.onNext(res); } else if (isDone.filter(function (x, j) { return j !== i; }).every(identity)) { observer.onCompleted(); } }; function done(i) { isDone[i] = true; if (isDone.every(function (x) { return x; })) { observer.onCompleted(); } } var subscriptions = new Array(n); for (var idx = 0; idx < n; idx++) { (function (i) { var source = sources[i], sad = new SingleAssignmentDisposable(); Rx.helpers.isPromise(source) && (source = Rx.Observable.fromPromise(source)); sad.setDisposable(source.subscribe(function (x) { queues[i].push(x); next(i); }, observer.onError.bind(observer), function () { done(i); })); subscriptions[i] = sad; })(idx); } return new CompositeDisposable(subscriptions); }); }; ``` In this sample, the operator groups all disposable instances controlling the various subscriptions together and returns the group as the result of subscribing to the outer observable sequence. When a user of this operator subscribes to the resulting observable sequence, he/she will get back a disposable instance that controls subscription to all underlying observable sequences. #### When to ignore this guideline #### There are currently no known instances where this guideline should be ignored. ### 5.11 Operators should not block ### RxJS is a library for composing asynchronous and event-based programs using observable collections. By making an operator blocking we lose these asynchronous characteristics. We also potentially lose composability (e.g. by returning a value typed as `T` instead of `Observable`). This is in contrast to the Array#extras such as `sum`, `reduce`, `some` and `every` which return a single value. #### Sample #### ```js Rx.Observable.prototype.sum = function () { return this.reduce(function (acc, x) { return acc + x; }, 0); }; ``` In this sample, the `sum` operator has a return type of `Observable` instead of `Number`. By doing this, the operator does not block. It also allows the result value to be used in further composition. #### When to ignore this guideline #### There are currently no known instances where this guideline should be ignored. ### 5.12 Avoid deep stacks caused by recursion in operators ### As code inside Rx operators can be called from different execution context in many different scenarios, it is nearly impossible to establish how deep the stack is before the code is called. If the operator itself has a deep stack (e.g. because of recursion), the operator could trigger a stack overflow quicker than one might expect. There are two recommended ways to avoid this issue: - Use the recursive `scheduleRecursive` methods on the `Scheduler` - Implement an infinite looping generator using the yield iterator pattern, convert it to an observable sequence using the `from` operator. #### Sample 1 #### ```js Rx.Observable.repeat = function (value, scheduler) { return Rx.Observable.create(function (observer) { return scheduler.scheduleRecursive(function (self) { observer.onNext(value); self(); }); }); }; ``` In this sample, the recursive `scheduleRecursive` method is used to allow the scheduler to schedule the next iteration of the recursive function. Schedulers such as the current thread scheduler do not rely on stack semantics. Using such a scheduler with this pattern will avoid stack overflow issues. #### Sample 2 #### ```js Rx.Observable.repeat = function (value) { return Rx.Observable.from( function* () { while(true) { yield value; } }()); }; ``` The yield iterator pattern ensures that the stack depth does not increase drastically. By returning an infinite generator with the `from` operator can build an infinite observable sequence. #### When to ignore this guideline #### There are currently no known instances where this guideline should be ignored. ### 5.13 Argument validation should occur outside `Observable.create` As guideline 5.3 specifies that the `Observable.create` operator should not throw, any argument validation that potentially throws exceptions should be done outside the `Observable.create` operator. #### Sample #### ```js Rx.Observable.prototype.map = function (selector, thisArg) { if (this == null) { throw new TypeError('Must be an instance of an Observable'); } if (selector == null) { throw new TypeError('selector cannot be null/undefined'); } var selectorFn = typeof selector !== 'function' ? function () { return selector; } : selector; var source = this; return Rx.Observable.create(function (observer) { var idx = 0; return source.subscribe( function (x) { var result; try { result = selectorFn.call(thisArg, x, idx++, source); } catch (e) { observer.onError(e); return; } observer.onNext(result); }, observer.onError.bind(observer), observer.onCompleted.bind(observer) ); }); }; ``` In this sample, the arguments are checked for null values before the `Observable.create` operator is called. #### When to ignore this guideline #### Ignore this guideline if some aspect of the argument cannot be checked until the subscription is active. ### 5.14 Unsubscription should be idempotent ### The observable `subscribe` method returns a `Disposable` instance that can be used to clean up the subscription. The `Disposable` instance doesn’t give any information about what the state of the subscription is. As consumers do not know the state of the subscription, calling the `dispose` method multiple times should be allowed. Only the first call the side-effect of cleaning up the subscription should occur. #### Sample #### ```js var subscription = xs.subscribe(function (x) { console.log(x); }); subscription.dispose(); subscription.dispose(); ``` In this sample, the subscription is disposed twice, the first time the subscription will be cleaned up and the second call will be a no-op. ### 5.15 Unsubscription should not throw ### As the RxJS’s composition makes that subscriptions are chained, so are unsubscriptions. Because of this, any operator can call an unsubscription at any time. Because of this, just throwing an exception will lead to the application crashing unexpectedly. As the observer instance is already unsubscribed, it cannot be used for receiving the exception either. Because of this, exceptions in unsubscriptions should be avoided. #### When to ignore this guideline #### There are currently no known cases where to ignore this guideline. ### 5.16 Custom `Observable` implementations should follow the RxJS contract ### When it is not possible to follow guideline 5.1, the custom implementation of the `Observable` class should still follow the RxJS contract in order to get the right behavior from the RxJS operators. #### When to ignore this guideline #### Only ignore this guideline when writing observable sequences that need to break the contract on purpose (e.g. for testing). ### 5.17 Operator implementations should follow guidelines for RxJS usage ### As Rx is a composable API, operator implementations often use other operators for their implementation (see paragraph 5.1). RxJS usage guidelines should be strongly considered when implementing these operators. #### When to ignore this guideline #### As described in the introduction, only follow a guideline if it makes sense in that specific situation. RxJS-4.1.0/doc/gettingstarted/000077500000000000000000000000001266736161100161505ustar00rootroot00000000000000RxJS-4.1.0/doc/gettingstarted/backpressure.md000066400000000000000000000255751266736161100212010ustar00rootroot00000000000000# Backpressure # When it comes to streaming data, streams can be overly chatty in which the consumer cannot keep up with the producer. To that end, we need mechanisms to control the source so that the consumer does not get overwhelmed. These mechanisms can come in either the form of lossy or loss-less operations, each of which depends on the requirements. For example, if you miss a few mouse movements, it may not be a problem, however, if you miss a few bank transactions, that could be a definite problem. This section covers which techniques you can use to handle backpressure in either lossy or loss-less ways. For example, imagine using the `zip` operator to zip together two infinite Observables, one of which emits items twice as frequently as the other. A naive implementation of the zip operator would have to maintain an ever-expanding buffer of items emitted by the faster Observable to eventually combine with items emitted by the slower one. This could cause RxJS to seize an unwieldy amount of system resources. ## Hot and Cold Observables and Multicast ## A cold Observable emits a particular sequence of items, but can begin emitting this sequence when its Observer finds it to be convenient, and at whatever rate the Observer desires, without disrupting the integrity of the sequence. For example if you convert a iterable such as array, Map, Set, or generator into an Observable, that Observable will emit the same sequence of items no matter when it is later subscribed to or how frequently those items are observed. Examples of items emitted by a cold Observable might include the results of a database query, file retrieval, or web request. A hot Observable begins generating items to emit immediately when it is created. Subscribers typically begin observing the sequence of items emitted by a hot Observable from somewhere in the middle of the sequence, beginning with the first item emitted by the Observable subsequent to the establishment of the subscription. Such an Observable emits items at its own pace, and it is up to its observers to keep up. Examples of items emitted by a hot Observable might include mouse & keyboard events, system events, or stock prices. When a cold Observable is multi-cast (when it is converted into a `ConnectableObservable` and its `connect` method is called), it effectively becomes hot and for the purposes of backpressure and flow-control it should be treated as a hot Observable. Cold Observables are ideal subjects for the reactive pull model of backpressure described below. Hot observables are typically not designed to cope well with a reactive pull model, and are better candidates for some of the other flow control strategies discussed on this page, such as the use of the `pausableBuffered` or `pausable` operators, throttling, buffers, or windows. ## Lossy Backpressure ## There are a number of ways that an observable sequence can be controlled so that the consumer does not get overwhelmed through lossy operations, meaning that packets will be dropped in between pause and resume actions. ### Debounce ### The first technique for lossy backpressure is called [`debounce`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/debounce.md) which only emits an item from the source Observable after a particular timespan has passed without the Observable emitting any other items. This is useful in scenarios such as if the user is typing too fast and you do not want to yield every keystroke, and instead wait half a second after the person stopped typing before yielding the value. ```js var debounced = Rx.Observable.fromEvent(input, 'keyup') .map(function (e) { return e.target.value; }) .debounce(500 /* ms */); debounced.subscribeOnNext(function (value) { console.log('Input value: %s', value); }); ``` ### Throttling ### Another technique to deal with an observable sequence which is producing too much for the consumer is through throttling with the use of the [`throttle`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/throttle.md) method which emits the first items emitted by an Observable within periodic time intervals. Throttling can be especially useful for rate limiting execution of handlers on events like resize and scroll. ```js var throttled = Rx.Observable.fromEvent(window, 'resize') .throttle(250 /* ms */); throttled.subscribeOnNext(function (e) { console.log('Window inner height: %d', window.innerHeight); console.log('Window inner width: %d', window.innerWidth); }); ``` ### Sampling Observables ### You can also at certain intervals extract values from the observable sequence using the [`sample`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/sample.md) method. This is useful if you want values from say a stock ticker every five seconds or so without having to consume the entire observable sequence. ```js var sampled = getStockData() .sample(5000 /* ms */); sampled.subscribeOnNext(function (data) { console.log('Stock data: %o', data); }); ``` ### Pausable Observables ### The ability to pause and resume is also a powerful concept which is offered in RxJS in both lossy and loss-less versions. In the case of lossy backpressure, the [`pausable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/pausable.md) operator can be used to stop listening and then resume listening at a later time by calling `pause` and `resume` respectively on the observable sequence. For example we can take some observable sequence and call `pausable`, then call `pause` to pause the sequence and `resume` within 5 seconds. Note that any data that comes in between the pause and resume are lost. Note that this only works for hot observables and is unsuitable for cold observables as they will restart upon resume. ```js var pausable = getSomeObservableSource() .pausable(); pausable.subscribeOnNext(function (data) { console.log('Data: %o', data); }); pausable.pause(); // Resume in five seconds setTimeout(function () { pausable.resume(); }, 5000); ``` ## Loss-less Backpressure ## In addition to supporting lossy backpressure mechanisms, RxJS also supports ways of getting the data in such a way that it is able to be fully consumed by the consumer at its own pace. There are a number of strategies at work including using buffers that work with timespans, count or both, pausable buffers, reactive pull, etc. ### Buffers and Windows ### The first strategy of dealing with an overly chatty producer is through the use of buffers. This allows the consumer to set either the number of items they wish to wait for at a time, or a particular timespan, or both, whichever comes first. This is useful in a number of cases, for example if you want some data within a window for comparison purposes in addition to chunking up data as you need it. The [`bufferWithCount`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/bufferwithcount.md) method allows us to specify the number of items that you wish to capture in a buffer array before yielding it to the consumer. An impractical yet fun use of this is to calculate whether the user has input the Konami Code for example. ```js var codes = [ 38, // up 38, // up 40, // down 40, // down 37, // left 39, // right 37, // left 39, // right 66, // b 65 // a ]; function isKonamiCode(buffer) { return codes.toString() === buffer.toString(); } var keys = Rx.Observable.fromEvent(document, 'keyup') .map(function (e) { return e.keyCode; }) .bufferWithCount(10, 1) .filter(isKonamiCode) .subscribeOnNext(function () { console.log('KONAMI!'); }); ``` On the other hand, you can also get the data within a buffer for a given amount of time with the [`bufferWithTime`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/bufferwithtime.md). This is useful for example if you are tracking volume of data that is coming across the network, which can then be handled uniformly. ```js var source = getStockData() .bufferWithTime(5000, 1000) // time in milliseconds .subscribeOnNext(function (data) { data.forEach(function (d) { console.log('Stock: %o', d); }); }); ``` In order to keep buffers from filling too quickly, there is a method to cap the buffer by specifying ceilings for count and timespan, whichever occurs first. For example, the network could be particularly quick with the data for the specified time, and other times not, so to keep the data levels even, you can specify this threshold via the [`bufferWithTimeOrCount`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/bufferwithtimeorcount.md) method ```js var source = getStockData() .bufferWithTimeOrCount(5000 /* ms */, 100 /* items */) .subscribeOnNext(function (data) { data.forEach(function (d) { console.log('Stock: %o', d); }); }); ``` ### Pausable Buffers ### The [`pausable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/pausable.md) method is great at dealing with hot observables where you would want to pause and resume while dropping data, however, you may want to preserve that data between the `pause` and `resume` calls. To that end, we have introduced the [`pausableBuffered`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/pausablebuffered.md) method which keeps a running buffer between `pause` is called and is drained when `resume` is called. This then leaves the discretion up to the developer to decide when to pause and resume and in the mean time, no data is lost. ```js var source = getStockData() .pausableBuffered(); source.subscribeOnNext(function (stock) { console.log('Stock data: %o', stock); }); source.pause(); // Resume after five seconds setTimeout(function () { // Drains the buffer and subscribeOnNext is called with the data source.resume(); }, 5000); ``` ### Controlled Observables ### In more advanced scenarios, you may want to control the absolute number of items that you receive at a given time, and the rest is buffered via the `controlled` method. For example, you can pull 10 items, followed by 20 items, and is up to the discretion of the developer. This is more in-line with the efforts from the [Reactive Streams](http://www.reactive-streams.org/) effort to effectively turn the push stream into a push/pull stream. ```js var source = getStockData() .controlled(); source.subscribeOnNext(function (stock) { console.log('Stock data: %o', stock); }); source.request(2); // Keep getting more after 5 seconds setInterval(function () { source.request(2); }, 5000); ``` ### Future Work ### This is of course only the beginning of the work with backpressure as there are many other strategies that can be considered. In future versions of RxJS, the idea of the controlled observable will be baked into the subscription itself which then allows the backpressure to be an essential part of the contract or requesting n number of items. RxJS-4.1.0/doc/gettingstarted/callbacks.md000066400000000000000000000124731266736161100204200ustar00rootroot00000000000000# Bridging to Callbacks # Besides events, other asynchronous data sources exist in the web and server-side world. One of them is the simple callback pattern which is frequently used in Node.js. In this design pattern, the arguments are passed to the function, and then a callback is usually the last parameter, which when executed, passes control to the inner scope with the data. Node.js has a standard way of doing callbacks in which the callback is called with the `Error` object first if there is an error, else null, and then the additional parameters from the callback. ## Converting Callbacks to Observable Sequences ## Many asynchronous methods in Node.js and the many JavaScript APIs are written in such a way that it has a callback as the last parameter. These standard callbacks are executed with the data passed to it once it is available. We can use the [`Rx.Observable.fromCallback`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromcallback.md) to wrap these kinds of callbacks. Note that this does not cover the Node.js style of callbacks where the `Error` parameter is first. For that operation, we provide the [`Rx.Observable.fromNodeCallback`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromnodecallback.md) which we will cover below. In the following example, we will convert the Node.js [`fs.exists`](http://nodejs.org/api/fs.html#fs_fs_exists_path_callback) function. This function takes a path and returns a `true` or `false` value whether the file exists, in this case we will check if 'file.txt' exists. The arguments returned when wrapped in `Rx.Observable.fromCallback` will return an array containing the arguments passed to the callback. ```js var Rx = require('rx'), fs = require('fs'); // Wrap the exists method var exists = Rx.Observable.fromCallback(fs.exists); var source = exists('file.txt'); // Get the first argument only which is true/false var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: true // => onCompleted ``` ## Converting Node.js Style Callbacks to Observable Sequences ## Node.js has adopted a convention in many of the callbacks where an error may occur, such as File I/O, Network requests, etc. RxJS supports this through the [`Rx.Observable.fromNodeCallback`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromnodecallback.md) method in which the error, if present, is captured and the `onError` notification is sent. Otherwise, the `onNext` is sent with the rest of the callback arguments, followed by an `onCompleted` notification. In the following example, we will convert the Node.js [`fs.rename`](http://nodejs.org/api/fs.html#fs_fs_rename_oldpath_newpath_callback) function to an Observable sequence. ```js var fs = require('fs'), Rx = require('rx'); // Wrap fs.rename var rename = Rx.Observable.fromNodeCallback(fs.rename); // Rename file which returns no parameters except an error var source = rename('file1.txt', 'file2.txt'); var subscription = source.subscribe( function (x) { console.log('onNext: success!'); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: success! // => onCompleted ``` ## Converting Observable sequences to Callbacks ## We can easily go in another direction and convert an observable sequence to a callback. This of course requires the observable sequence to yield only one value for this to make sense. Let's convert using the [`timer`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/timer.md) method to wait for a certain amount of time. The implementation of `toCallback` could look like the following. Note that it is not included in RxJS but you can easily add it if needed. ```js Rx.Observable.prototype.toCallback = function (cb) { var source = this; return function () { var val, hasVal = false; source.subscribe( function (x) { hasVal = true; val = x; }, function (e) { throw e; }, // Default error handling function () { hasVal && cb(val); } ); }; }; ``` Then we could execute our command simply like the following: ```js function cb (x) { console.log('hi!'); } setTimeout( Rx.Observable.timer(5000) .toCallback(cb) , 500); ``` ## Converting Observable sequences to Node.js Style Callbacks ## The same could also apply to Node.js style callbacks should you desire that behavior. Once again the same restrictions apply with regards to having a single value and an end much like above. The implementation of `toNodeCallback` could look like the following. Note that it is not included in RxJS but you can easily add it if needed. ```js Rx.Observable.prototype.toNodeCallback = function (cb) { var source = this; return function () { var val, hasVal = false; source.subscribe( function (x) { hasVal = true; val = x; }, function (e) { cb(e); }, function () { hasVal && cb(null, val); } ); }; }; ``` We could then take this and for example if we had an observable sequence which gets a value from a REST call and then convert it to Node.js style. ```js getData().toNodeCallback(function (err, data) { if (err) { throw err; } // Do something with the data }); ``` RxJS-4.1.0/doc/gettingstarted/categories.md000066400000000000000000000443211266736161100206230ustar00rootroot00000000000000# Operators by Categories # This topic lists all major operators implemented by the [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) type by their categories, specifically: creation, conversion, combine, functional, mathematical, time, exceptions, miscellaneous, selection and primitives. ## Operators by Categories ##
UsageOperators
Creating an observable sequence
  1. create
  2. defer
  3. generate
  4. generateWithAbsoluteTime
  5. generateWithRelativeTime
  6. range
  7. using
Converting events or asynchronous patterns to observable sequences, or between Arrays and observable sequences.
  1. from
  2. fromArray
  3. fromCallback
  4. fromNodeCallback
  5. fromEvent
  6. fromEventPattern
  7. fromPromise
  8. of
  9. toArray
  10. toMap
  11. toPromise
  12. toSet
Combining multiple observable sequences into a single sequence.
  1. amb
  2. prototype.amb
  3. combineLatest
  4. proto.combineLatest
  5. concat
  6. prototype.concat
  7. startWith
  8. merge
  9. prototype.merge
  10. mergeAll
  11. repeat
  12. prototype.repeat
  13. withLatestFrom
  14. zip
  15. prototype.zip
Functional - Sharing Side Effects
  1. let
  2. publish
  3. publishLast
  4. publishValue
  5. replay
  6. share
  7. shareLast
  8. shareReplay
  9. shareValue
Mathemathical operators on sequences
  1. aggregate
  2. average
  3. count
  4. max
  5. maxBy
  6. min
  7. minBy
  8. reduce
  9. sum
Time-based operations
  1. debounce
  2. debounceWithSelector
  3. delay
  4. interval
  5. timeInterval
  6. timer
  7. timeout
  8. timeoutWithSelector
  9. timestamp
Handling Exceptions
  1. catch
  2. prototype.catch
  3. finally
  4. onErrorResumenext
  5. prototype.onErrorResumeNext
  6. retry
Filtering and selecting values in a sequence
  1. concatMap
  2. concatMapObserver
  3. elementAt
  4. elementAtOrDefault
  5. filter
  6. flatMap
  7. flatMapLatest
  8. flatMapObserver
  9. find
  10. findIndex
  11. first
  12. firstOrDefault
  13. includes
  14. last
  15. lastOrDefault
  16. map
  17. pluck
  18. select
  19. selectConcat
  20. selectMany
  21. selectManyObserver
  22. selectSwitch
  23. single
  24. singleOrDefault
  25. skip
  26. skipLast
  27. skipLastWithTime
  28. skipUntil
  29. skipWhile
  30. take
  31. takeLast
  32. takeLastBuffer
  33. takeLastBufferWithTime
  34. takeLastWithTime
  35. takeWhile
  36. where
Grouping and Windowing
  1. buffer
  2. bufferWithCount
  3. bufferWithTimeOrCount
  4. groupBy
  5. groupByUntil
  6. groupJoin
  7. join
  8. window
  9. windowWithCount
  10. windowWithTime
  11. windowWithTimeOrCount
Imperative Operators
  1. case
  2. do
  3. doOnNext
  4. doOnError
  5. doOnCompleted
  6. doWhile
  7. for
  8. if
  9. tap
  10. tapOnNext
  11. tapOnError
  12. tapOnCompleted
  13. while
Primitives
  1. empty
  2. never
  3. return
  4. throw
## See Also ## *Reference* - [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) *Concepts* - [Querying Observable Sequences](querying.md) RxJS-4.1.0/doc/gettingstarted/combining.md000066400000000000000000000000001266736161100204250ustar00rootroot00000000000000RxJS-4.1.0/doc/gettingstarted/creating.md000066400000000000000000000407761266736161100203040ustar00rootroot00000000000000# Creating and Subscribing to Simple Observable Sequences # You do not need to implement the `Observable` class manually to create an observable sequence. Similarly, you do not need to implement `Observer` either to subscribe to a sequence. By installing the Reactive Extension libraries, you can take advantage of the `Observable` type which provides many operators for you to create a simple sequence with zero, one or more elements. In addition, RxJS provides an overloaded `subscribe` method which allows you to pass in `onNext`, `onError` and `onCompleted` function handlers. ## Creating a sequence from scratch ## Before getting into many operators, let's look at how to create an `Observable` from scratch using the [`Rx.Observable.create`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/create.md) method. First, we need to ensure we reference the core `rx.js` file. ```html ``` Or if we're using [Node.js](http://node.js), we can reference it as such: ```js var Rx = require('rx'); ``` In this example, we will simply yield a single value of 42 and then mark it as completed. The return value is completely optional if no cleanup is required. ```js var source = Rx.Observable.create(function (observer) { // Yield a single value and complete observer.onNext(42); observer.onCompleted(); // Any cleanup logic might go here return function () { console.log('disposed'); } }); var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 42 // => onCompleted subscription.dispose(); // => disposed ``` For most operations, this is completely overkill, but shows the very basics of how most RxJS operators work. ## Creating and subscribing to a simple sequence ## The following sample uses the [`range`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/range.md) operator of the `Observable` type to create a simple observable collection of numbers. The observer subscribes to this collection using the Subscribe method of the Observable class, and provides actions that are delegates which handle `onNext`, `onError` and `onCompleted`. In our example, it creates a sequence of integers that starts with x and produces y sequential numbers afterwards. As soon as the subscription happens, the values are sent to the observer. The `onNext` function then prints out the values. ```js // Creates an observable sequence of 5 integers, starting from 1 var source = Rx.Observable.range(1, 5); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 4 // => onNext: 5 // => onCompleted ``` When an observer subscribes to an observable sequence, the `subscribe` method may be using asynchronous behavior behind the scenes depending on the operator. Therefore, the `subscribe` call is asynchronous in that the caller is not blocked until the observation of the sequence completes. This will be covered in more details in the [Using Schedulers](schedulers.md) topic. Notice that the [`subscribe`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/susbcribe.md) method returns a `Disposable`, so that you can unsubscribe to a sequence and dispose of it easily. When you invoke the `dispose` method on the observable sequence, the observer will stop listening to the observable for data. Normally, you do not need to explicitly call `dispose` unless you need to unsubscribe early, or when the source observable sequence has a longer life span than the observer. Subscriptions in Rx are designed for fire-and-forget scenarios without the usage of a finalizer. Note that the default behavior of the Observable operators is to dispose of the subscription as soon as possible (i.e, when an `onCompleted` or `onError` messages is published). For example, the code will subscribe x to both sequences a and b. If a throws an error, x will immediately be unsubscribed from b. ```js var x = Rx.Observable.zip(a, b, function (a1, b1) { return a1 + b1; }).subscribe(); ``` You can also tweak the code sample to use the Create operator of the Observer type, which creates and returns an observer from specified OnNext, OnError, and OnCompleted action delegates. You can then pass this observer to the Subscribe method of the Observable type. The following sample shows how to do this. ```js // Creates an observable sequence of 5 integers, starting from 1 var source = Rx.Observable.range(1, 5); // Create observer var observer = Rx.Observer.create( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // Prints out each item var subscription = source.subscribe(observer); // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 4 // => onNext: 5 // => onCompleted ``` In addition to creating an observable sequence from scratch, you can convert existing Arrays, events, callbacks and promises into observable sequences. The other topics in this section will show you how to do this. Notice that this topic only shows you a few operators that can create an observable sequence from scratch. To learn more about other LINQ operators, see Querying Observable Sequences using LINQ Operators. ## Using a timer ## The following sample uses the [`timer`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/timer.md) operator to create a sequence. The sequence will push out the first value after 5 second has elapsed, then it will push out subsequent values every 1 second. For illustration purpose, we chain the [`timestamp`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/timestamp.md) operator to the query so that each value pushed out will be appended by the time when it is published. By doing so, when we subscribe to this source sequence, we can receive both its value and timestamp. First, we need to ensure we reference the proper files if in the browser. Note that the RxJS NPM Package already includes all operators by default. ```html ``` Now on to our example ```js console.log('Current time: ' + Date.now()); var source = Rx.Observable.timer( 5000, /* 5 seconds */ 1000 /* 1 second */) .timestamp(); var subscription = source.subscribe( function (x) { console.log(x.value + ': ' + x.timestamp); }); /* Output may be similar to this */ // Current time: 1382560697820 // 0: 1382560702820 // 1: 1382560703820 // 2: 1382560704820 ``` By using the `timestamp` operator, we have verified that the first item is indeed pushed out 5 seconds after the sequence has started, and each item is published 1 second later. ## Converting Arrays and Iterables to an Observable Sequence ## Using the [`Rx.Observable.from`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/from.md) operator, you can convert an array to observable sequence. ```js var array = [1,2,3,4,5]; // Converts an array to an observable sequence var source = Rx.Observable.from(array); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 4 // => onNext: 5 // => onCompleted ``` You can also convert array-like objects such as objects with a length property and indexed with numbers. In this case, we'll simply have an object with a length of 5. ```js var arrayLike = { length: 5 }; // Converts an array to an observable sequence var source = Rx.Observable.from(arrayLike, function (v, k) { return k; }); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 4 // => onNext: 5 // => onCompleted ``` In addition, we can also use ES6 Iterable objects such as `Map` and `Set` using `from` to an observable sequence. In this example, we can take a `Set` and convert it to an observable sequence. ```js var set = new Set([1,2,3,4,5]); // Converts a Set to an observable sequence var source = Rx.Observable.from(set); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 4 // => onNext: 5 // => onCompleted ``` We can also do a `Map` as well by applying the same technique. ```js var map = new Map([['key1', 1], ['key2', 2]]); // Converts a Map to an observable sequence var source = Rx.Observable.from(map); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: key1, 1 // => onNext: key2, 2 // => onCompleted ``` The `from` method can also support ES6 generators which may already be in your browser, or coming to a browser near you. This allows us to do such things as Fibonacci sequences and so forth and convert them to an observable sequence. ```js function* fibonacci () { var fn1 = 1; var fn2 = 1; while (1){ var current = fn2; fn2 = fn1; fn1 = fn1 + current; yield current; } } // Converts a generator to an observable sequence var source = Rx.Observable.from(fibonacci()).take(5); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 1 // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 5 // => onCompleted ``` ## Cold vs. Hot Observables ## Cold observables start running upon subscription, i.e., the observable sequence only starts pushing values to the observers when Subscribe is called. Values are also not shared among subscribers. This is different from hot observables such as mouse move events or stock tickers which are already producing values even before a subscription is active. When an observer subscribes to a hot observable sequence, it will get all values in the stream that are emitted after it subscribes. The hot observable sequence is shared among all subscribers, and each subscriber is pushed the next value in the sequence. For example, even if no one has subscribed to a particular stock ticker, the ticker will continue to update its value based on market movement. When a subscriber registers interest in this ticker, it will automatically receive the next tick. The following example demonstrates a cold observable sequence. In this example, we use the Interval operator to create a simple observable sequence of numbers pumped out at specific intervals, in this case, every 1 second. Two observers then subscribe to this sequence and print out its values. You will notice that the sequence is reset for each subscriber, in which the second subscription will restart the sequence from the first value. First, we need to ensure we reference the proper files if in the browser. Note that the RxJS NPM Package already includes all operators by default. ```html ``` And now to the example. ```js var source = Rx.Observable.interval(1000); var subscription1 = source.subscribe( function (x) { console.log('Observer 1: onNext: ' + x); }, function (e) { console.log('Observer 1: onError: ' + e.message); }, function () { console.log('Observer 1: onCompleted'); }); var subscription2 = source.subscribe( function (x) { console.log('Observer 2: onNext: ' + x); }, function (e) { console.log('Observer 2: onError: ' + e.message); }, function () { console.log('Observer 2: onCompleted'); }); setTimeout(function () { subscription1.dispose(); subscription2.dispose(); }, 5000); // => Observer 1: onNext: 0 // => Observer 2: onNext: 0 // => Observer 1: onNext: 1 // => Observer 2: onNext: 1 // => Observer 1: onNext: 2 // => Observer 2: onNext: 2 // => Observer 1: onNext: 3 // => Observer 2: onNext: 3 ``` In the following example, we convert the previous cold observable sequence source to a hot one using the [`publish`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/publish.md) operator, which returns a `ConnectableObservable` instance we name `hot`. The [`publish`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/publish.md) operator provides a mechanism to share subscriptions by broadcasting a single subscription to multiple subscribers. The `hot` variable acts as a proxy by subscribing to `source` and, as it receives values from `source`, pushing them to its own subscribers. To establish a subscription to the backing source and start receiving values, we use the [`ConnectableObservable.prototype.connect`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/connect.md) method. Since `ConnectableObservable` inherits `Observable`, we can use `subscribe` to subscribe to this hot sequence even before it starts running. Notice that in the example, the hot sequence has not been started when `subscription1` subscribes to it. Therefore, no value is pushed to the subscriber. After calling Connect, values are then pushed to `subscription1`. After a delay of 3 seconds, `subscription2` subscribes to `hot` and starts receiving the values immediately from the current position (3 in this case) until the end. The output looks like this: ``` // => Current time: 1382562433256 // => Current Time after 1st subscription: 1382562433260 // => Current Time after connect: 1382562436261 // => Observer 1: onNext: 0 // => Observer 1: onNext: 1 // => Current Time after 2nd subscription: 1382562439262 // => Observer 1: onNext: 2 // => Observer 2: onNext: 2 // => Observer 1: onNext: 3 // => Observer 2: onNext: 3 // => Observer 1: onNext: 4 // => Observer 2: onNext: 4 ``` First, we need to ensure we reference the proper files if in the browser. Note that the RxJS NPM Package already includes all operators by default. ```html ``` Now onto the example! ```js console.log('Current time: ' + Date.now()); // Creates a sequence var source = Rx.Observable.interval(1000); // Convert the sequence into a hot sequence var hot = source.publish(); // No value is pushed to 1st subscription at this point var subscription1 = hot.subscribe( function (x) { console.log('Observer 1: onNext: %s', x); }, function (e) { console.log('Observer 1: onError: %s', e); }, function () { console.log('Observer 1: onCompleted'); }); console.log('Current Time after 1st subscription: ' + Date.now()); // Idle for 3 seconds setTimeout(function () { // Hot is connected to source and starts pushing value to subscribers hot.connect(); console.log('Current Time after connect: ' + Date.now()); // Idle for another 3 seconds setTimeout(function () { console.log('Current Time after 2nd subscription: ' + Date.now()); var subscription2 = hot.subscribe( function (x) { console.log('Observer 2: onNext: %s', x); }, function (e) { console.log('Observer 2: onError: %s', e); }, function () { console.log('Observer 2: onCompleted'); }); }, 3000); }, 3000); ``` **Analogies** It helps to think of cold and hot Observables as movies or performances that one can watch ("subscribe"). - Cold Observables: movies. - Hot Observables: live performances. - Hot Observables replayed: live performances recorded on video. Whenever you watch a movie, your run of the movie is independent of anyone else's run, even though all movie watchers see the same effects. On the other hand, a live performance is shared to multiple viewers. If you arrive late to a live performance, you will simply miss some of it. However, if it was recorded on video (in RxJS this would happen with a BehaviorSubject or a ReplaySubject), you can watch a "movie" of the live performance. A [`.publish().refCount()`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/refcount.md) live performance is one where the artists quit playing when no one is watching, and start playing again when there is at least one person in the audience. RxJS-4.1.0/doc/gettingstarted/creatingquerying.md000066400000000000000000000006641266736161100220600ustar00rootroot00000000000000# Creating and Querying Observable Sequences # This section describes how you can create and subscribe to an observable sequence, convert an existing JavaScript event and query it. 1. [Creating and Subscribing to Simple Observable Sequences](creating.md) 2. [Bridging to Events](events.md) 3. [Bridging to Callbacks and Promises](callbacks.md) 4. [Querying Observable Sequences](querying.md) 5. [Operators by Category](categories.md) RxJS-4.1.0/doc/gettingstarted/errors.md000066400000000000000000000231421266736161100200100ustar00rootroot00000000000000# Error Handling in the Reactive Extensions # One of the most difficult tasks in asynchronous programming is dealing with errors. Unlike interactive style programming, we cannot simply use the try/catch/finally approach that we use when dealing with blocking code. ```js try { for (var obj in objs) { doSomething(obj); } } catch (e) { handleError(e); } finally { doCleanup(); } ``` These actions mirror exactly our `Observer` class which has the following contract for handing zero to infinite items with `onNext` and optionally handling either an `Error` with `onError` or successful completion with `onCompleted`. ```typescript interface Observable { onNext(value: T) : void onError(error: Error) : void onCompleted() : void } ``` But the try/catch/finally approach won't work with asynchronous code. Instead, we have a myriad of ways of handling errors as they occur, and ensure proper disposal of resources. For example, we might want to do the following: - swallow the error and switch over to a backup Observable to continue the sequence - swallow the error and emit a default item - swallow the error and immediately try to restart the failed Observable - swallow the error and try to restart the failed Observable after some back-off interval We'll cover each of those scenarios and more in this section. ## Catching Errors ## The first topic is catching errors as they happen with our streams. In the Reactive Extensions, any error is propogated through the `onError` channel which halts the sequence. We can compensate for this by using the `catch` operator, at both the class and instance level. Using the class level `catch` method, we can catch errors as they happen with the current sequence and then move to the next sequence should there be an error. For example, we could try getting data from several URLs, it doesn't matter which since they all have the same data, and then if that fails, default to a cached version, so an error should never propagate. One thing to note is that if `get('url')` calls succeed, then it will not move onto the next sequence in the list. ```js var source = Rx.Observable.catch( get('url1'), get('url2'), get('url3'), getCachedVersion() ); var subscription = source.subscribe( function (data) { // Display the data as it comes in } ); ``` We also have an instance version of `catch` which can be used two ways. The first way is much like the example above, where we can take an existing stream, catch the error and move onto the next stream or `Promise`. ```js var source = get('url1').catch(getCachedVersion()); var subscription = source.subscribe( function (data) { // Display the data as it comes in } ); ``` The other overload of `catch` allows us to inspect the error as it comes in so we can decide which route to take. For example, if an error status code of 500 comes back from our web server, we can assume it is down and then use a cached version. ```js var source = get('url1').catch(function (e) { if (e.status === 500) { return cachedVersion(); } else { return get('url2'); } }); var subscription = source.subscribe( function (data) { // Display the data as it comes in } ); ``` This isn't the only way to handle errors as there are plenty of others as you'll see below. ## Ignoring Errors with `onErrorResumeNext` ## The Reactive Extensions borrowed from a number of languages in our design. One of those features is bringing [`On Error Resume Next`](https://msdn.microsoft.com/en-us/library/5hsw66as.aspx) from Microsoft Visual Basic. This operation specifies that when a run-time error occurs, control goes to the statement immediately following the statement where the error occurred, and execution continues from that point. There are some instances with stream processing that you simply want to skip a stream which produces an error and move to the next stream. We can achieve this with a class based and instance based `onErrorResumeNext` method. The class based `onErrorResumeNext` continues a stream that is terminated normally or by an `Error` with the next stream or `Promise`. Unlike `catch`, `onErrorResumeNext` will continue to the next sequence regardless of whether the previous was in error or not. To make this more concrete, let's use a simple example of mixing error sequences with normal sequences. ```js var source = Rx.Observable.onErrorResumeNext( Rx.Observable.just(42), Rx.Observable.throw(new Error()), Rx.Observable.just(56), Rx.Observable.throw(new Error()), Rx.Observable.just(78) ); var subscription = source.subscribe( function (data) { console.log(data); } ); // => 42 // => 56 // => 78 ``` The instance based `onErrorResumeNext` is similar to the class based version, the only difference being that it is attached to the prototype, but can take another sequence or `Promise` and continue. ## Retrying Sequences ## When catching errors isn't enough and we want to retry our logic, we can do so with `retry` or `retryWhen` operators. With the `retry` operator, we can try a certain operation a number of times before an error is thrown. This is useful when you need to get data from a resource which may have intermittent failures due to load or any other issue. Let's take a look at a simple example of trying to get some data from a URL and giving up after three tries. ```js // Try three times to get the data and then give up var source = get('url').retry(3); var subscription = source.subscribe( function (data) { console.log(data); }, function (err) { console.log(err); } ); ``` In the above example, it will give up after three tries and thus call `onError` if it continues to fail after the third try. We can remedy that by adding `catch` to use an alternate source. ```js // Try three times to get the data and then return cached data if still fails var source = get('url').retry(3).catch(cachedVersion()); var subscription = source.subscribe( function (data) { // Displays the data from the URL or cached data console.log(data); } ); ``` The above case retries immediately upon failure. But what if you want to control when a retry happens? We have the `retryWhen` operator which allows us to deeply control when the next try happens. We incrementally back off trying again by using the following method: ```js var source = get('url').retryWhen( function (attempts) { return attempts .zip(Rx.Observable.range(1, 3), function (_, i) { return i }) .flatMap(function (i) { console.log('delay retry by ' + i + ' second(s)'); return Rx.Observable.timer(i * 1000); }); } ); var subscription = source.subscribe( function (data) { // Displays the data from the URL or cached data console.log(data); } ); // => delay retry by 1 second(s) // => delay retry by 2 second(s) // => Data ``` ## Ensuring Cleanup with Finally ## We've already covered the try/catch part of try/catch/finally, so what about finally? We have the `finally` operator which calls a function after the source sequence terminates gracefully or exceptionally. This is useful if you are using external resources or need to free up a particular variable upon completion. In this example, we can ensure that our `WebSocket` will indeed be closed once the last message is processed. ```js var socket = new WebSocket('ws://someurl', 'xmpp'); var source = Rx.Observable.from(data) .finally(function () { socket.close(); }); var subscription = source.subscribe( function (data) { socket.send(data); } ); ``` But,we can do a better job in terms of managing resources if need be by using the `using` method. ## Ensuring Resource Disposal ## As stated above, `finally` can be used to ensure proper cleanup of any resources or perform any side effects as necessary. There is a cleaner approach we can take by creating a disposable wrapper around our object with a `dispose` method so that when our scope is complete, then the resource is automatically disposed through the `using` operator. ```js function DisposableWebSocket(url, protocol) { var socket = new WebSocket(url, protocol); // Create a way to close the WebSocket upon completion var d = Rx.Disposable.create(function () { socket.close(); }); d.socket = socket; return d; } var source = Rx.Observable.using( function () { return new DisposableWebSocket('ws://someurl', 'xmpp'); }, function (d) { return Rx.Observable.from(data) .tap(function (data) { d.socket.send(data); }); } ); var subscription = source.subscribe(); ``` ## Delaying Errors with `mergeDelayError` ## Another issue may arise when you are dealing with flattening sequences into a single sequence and there may be errors along the way. We want a way to flatten without being interrupted by one of our sources being in error. This is much like the other operator `mergeAll` but the main difference is, instead of immediately bubbling up the error, it holds off until the very end. To illustrate, we can create this little sample that has an errored sequence in the middle when it is trying to flatten the sequences. ```js var source1 = Rx.Observable.of(1,2,3); var source2 = Rx.Observable.throwError(new Error('woops')); var source3 = Rx.Observable.of(4,5,6); var source = Rx.Observable.mergeDelayError(source1, source2, source3); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => 1 // => 2 // => 3 // => 4 // => 5 // => 6 // => Error: Error: woops ``` ## Further Reading ## - [Using Generators For Try/Catch Operations](generators.md) - [Testing and Debugging Your RxJS Application](testing.md) RxJS-4.1.0/doc/gettingstarted/events.md000066400000000000000000000217541266736161100200070ustar00rootroot00000000000000# Bridging to Events # RxJS provides factory methods for you to bridge with existing asynchronous sources in the DOM or Node.js so that you can employ the rich composing, filtering and resource management features provided by RxJS on any kind of data streams. This topic examines the [`fromEvent`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromevent.md) and [`fromEventPattern`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromeventpattern.md) operator that allows "importing" a DOM or custom event into RxJS as an observable sequence. Every time an event is raised, an `onNext` message will be delivered to the observable sequence. You can then manipulate event data just like any other observable sequences. RxJS does not aim at replacing existing asynchronous programming models such as promises or callbacks. However, when you attempt to compose events, RxJS’s factory methods will provide you the convenience that cannot be found in the current programming model. This is especially true for resource maintenance (e.g., when to unsubscribe) and filtering (e.g., choosing what kind of data to receive). In this topic and the ones that follow, you can examine how these RxJS features can assist you in asynchronous programming. Natively, RxJS supports a number of libraries and hooks into them such as [jQuery](http://jquery.com/), [Zepto.js](http://zeptojs.com/), [AngularJS](https://angularjs.org/), [Ember.js](http://emberjs.com/) and [Backbone.js](http://backbonejs.org) for using their event system. This behavior, however, can be overridden to only use native bindings only. By default, RxJS also has hooks for [Node.js](http://nodejs.org) `EventEmitter` events natively supported. ## Converting a DOM event to a RxJS Observable Sequence ## The following sample creates a simple DOM event handler for the mouse move event, and prints out the mouse’s location on the page. ```js var result = document.getElementById('result'); document.addEventListener('mousemove', function (e) { result.innerHTML = e.clientX + ', ' + e.clientY; }, false); ``` To import an event into RxJS, you can use the [`fromEvent`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromevent.md) operator, and provide the event arguments that will be raised by the event being bridged. It then converts the given event into an observable sequence. In the following example, we convert the mousemove event stream of the DOM into an observable sequence. Every time a mouse-move event is fired, the subscriber will receive an `onNext` notification. We can then examine the event arguments value of such notification and get the location of the mouse-move. ```js var result = document.getElementById('result'); var source = Rx.Observable.fromEvent(document, 'mousemove'); var subscription = source.subscribe(function (e) { result.innerHTML = e.clientX + ', ' + e.clientY; }); ``` Notice that in this sample, move becomes an observable sequence in which we can manipulate further. The [Querying Observable Sequences](querying.md) topic will show you how you can project this sequence into a collection of Points type and filter its content, so that your application will only receive values that satisfy a certain criteria. Cleaning up of the event handler is taken care of by the `Disposable` object returned by the `subscribe` method. Calling `dispose` will release all resources being used by the sequence including the underlying event handler. This essentially takes care of unsubscribing to an event on your behalf. The `fromEvent` method also supports adding event handlers to multiple items, for example a DOM NodeList. This example will add the 'click' to each element in the list. ```js var result = document.getElementById('result'); var sources = document.querySelectorAll('div'); var source = Rx.Observable.fromEvent(sources, 'click'); var subscription = source.subscribe(function (e) { result.innerHTML = e.clientX + ', ' + e.clientY; }); ``` In addition, `fromEvent` also supports libraries such as [jQuery](http://jquery.com/), [Zepto.js](http://zeptojs.com/), [AngularJS](https://angularjs.org/), [Ember.js](http://emberjs.com/) and [Backbone.js](http://backbonejs.org): ```js var $result = $('#result'); var $sources = $('div'); var source = Rx.Observable.fromEvent($sources, 'click'); var subscription = source.subscribe(function (e) { $result.html(e.clientX + ', ' + e.clientY); }); ``` If this behavior is not desired, you can override it by setting the `Rx.config.useNativeEvents` to `true` which will disregard any library for which we support events. ```js // Use only native events even if jQuery Rx.config.useNativeEvents = true; // Native events only var result = document.getElementById('result'); var source = Rx.Observable.fromEvent(document, 'mousemove'); var subscription = source.subscribe(function (e) { result.innerHTML = e.clientX + ', ' + e.clientY; }); ``` In addition, you could easily add many shortcuts into the event system for events such as `mousemove`, and even extending to [Pointer](http://www.w3.org/TR/pointerevents/) and [Touch](http://www.w3.org/TR/touch-events/) Events. ```js Rx.dom = {}; var events = "blur focus focusin focusout load resize scroll unload click dblclick " + "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + "change select submit keydown keypress keyup error contextmenu"; if (root.PointerEvent) { events += " pointerdown pointerup pointermove pointerover pointerout pointerenter pointerleave"; } if (root.TouchEvent) { events += " touchstart touchend touchmove touchcancel"; } events.split(' ').forEach(function (e) { Rx.dom[e] = function (element, selector) { return Rx.Observable.fromEvent(element, e, selector); }; }); ``` Now we can rewrite a simple mouse drag as the following: ```js var draggable = document.getElementById('draggable'); var mousedrag = Rx.dom.mousedown(draggable).flatMap(function (md) { md.preventDefault(); var start = getLocation(md); return Rx.dom.mousemove(document) .map(function (mm) { return getDelta(start, mm); }) .takeUntil(Rx.dom.mouseup(draggable)); }); ``` Note this is already available in the [RxJS-DOM](https://github.com/Reactive-Extensions/RxJS-DOM) project, but is small enough for you to implement yourself. ## Converting a Node.js event to a RxJS Observable Sequence ## Node.js is also supported such as an [`EventEmitter`](http://nodejs.org/api/events.html#events_class_events_eventemitter): ```js var Rx = require('rx'), EventEmitter = require('events').EventEmitter; var eventEmitter = new EventEmitter(); var source = Rx.Observable.fromEvent(eventEmitter, 'data') var subscription = source.subscribe(function (data) { console.log('data: ' + data); }); eventEmitter.emit('data', 'foo'); // => data: foo ``` ## Bridging to Custom Events with FromEventPattern ## There may be instances dealing with libraries which have different ways of subscribing and unsubscribing from events. The [`fromEventPattern`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/fromeventpattern.md) method was created exactly for this purpose to allow you to bridge to each of these custom event emitters. For example, you might want to bridge to using jQuery [`on`](http://api.jquery.com/on/) method. We can convert the following code which alerts based upon the click of a table row. ```js $( "#dataTable tbody" ).on('click', 'tr', function() { alert( $( this ).text() ); }); ``` The converted code looks like this while using the `fromEventPattern` method. Each function passes in the handler function which allows you to call the `on` and `off` methods to properly handle disposal of events. ```js var $tbody = $('#dataTable tbody'); var source = Rx.Observable.fromEventPattern( function addHandler (h) { $tbody.on('click', 'tr', h); }, function delHandler (h) { $tbody.off('click', 'tr', h); }); var subscription = source.subscribe(function (e) { alert( $(e.target).text() ); }); ``` In addition to this normal support, we also support if the `addHandler` returns an object, it can be passed to the `removeHandler` to properly unsubscribe. In this example, we'll use the [Dojo Toolkit](http://dojotoolkit.org) and the [`on`](http://dojotoolkit.org/api/1.9/dojo/on.html) module. ```js require(['dojo/on', 'dojo/dom', 'rx', 'rx.async', 'rx.binding'], function (on, dom, rx) { var input = dom.byId('input'); var source = Rx.Observable.fromEventPattern( function addHandler (h) { return on(input, 'click', h); }, function delHandler (_, signal) { signal.remove(); } ); var subscription = source.subscribe( function (x) { console.log('Next: Clicked!'); }, function (err) { console.log('Error: ' + err); }, function () { console.log('Completed'); }); on.emit(input, 'click'); // => Next: Clicked! }); ``` ## See Also Concepts - [Querying Observable Sequences](querying.md) RxJS-4.1.0/doc/gettingstarted/exploring.md000066400000000000000000000127721266736161100205120ustar00rootroot00000000000000# Exploring The Major Concepts in RxJS # This topic describes the major Reactive Extensions for JavaScript (Rx) objects used to represent observable sequences and subscribe to them. The `Observable` / `Observer` objects are available in the core distribution of RxJS. ## `Observable` / `Observer` ## Rx exposes asynchronous and event-based data sources as push-based, observable sequences abstracted by the [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) object in the core distribution of RxJS. It represents a data source that can be observed, meaning that it can send data to anyone who is interested. As described in [What is RxJS](what.md), the other half of the push model is represented by the [`Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) object, which represents an observer who registers an interest through a subscription. Items are subsequently handed to the observer from the observable sequence to which it subscribes. In order to receive notifications from an observable collection, you use the [`subscribe`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypesubscribeobserver--onnext-onerror-oncompleted) method of `Observable` to hand it an `Observer` object. In return for this observer, the [`subscribe`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypesubscribeobserver--onnext-onerror-oncompleted) method returns a `Disposable` object that acts as a handle for the subscription. This allows you to clean up the subscription after you are done. Calling `dispose` on this object detaches the observer from the source so that notifications are no longer delivered. As you can infer, in RxJS you do not need to explicitly unsubscribe from an event as in the common JavaScript event model. Observers support three publication events, reflected by the object's methods. The [`onNext`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md#rxobserverprototypeonnextvalue) can be called zero or more times, when the observable data source has data available. For example, an observable data source used for mouse move events can send out an event object every time the mouse has moved. The other two methods are used to indicate completion or errors. The following lists the `Observable` / `Observer` objects in addition to the `Disposable` object. ```js /** * Defines a method to release allocated resources. */ function Disposable() { } /** * Performs application-defined tasks associated with freeing, releasing, or resetting resources. */ Disposable.prototype.dispose = function () { ... } /** * Defines a provider for push-based notification. */ function Observable() { } /** * Notifies the provider that an observer is to receive notifications. * * @param {Observer} observer The object that is to receive notifications. * @returns {Disposable} A reference to disposable that allows observers to stop receiving notifications before the provider has finished sending them. */ Observable.prototype.subscribe = function (observer) { ... } /** * Provides a mechanism for receiving push-based notifications. */ function Observer() { } /** * Provides the observer with new data. * * @param {Any} value The current notification information. */ Observer.prototype.onNext = function (value) { ... }; /** * Notifies the observer that the provider has experienced an error condition. * * @param {Error} error An object that provides additional information about the error. */ Observer.prototype.onError = function (error) { ... }; /** * Notifies the observer that the provider has finished sending push-based notifications. */ Observer.prototype.onCompleted = function () { ... }; ``` RxJS also provides `subscribe` capabilities so that you can avoid implementing the `Observer` object yourself. For each publication event (`onNext`, `onError`, `onCompleted`) of an observable sequence, you can specify a function that will be invoked, as shown in the following example. If you do not specify an action for an event, the default behavior will occur. ```js // Creates an observable sequence of 5 integers, starting from 1 var source = Rx.Observable.range(1, 5); // Prints out each item var subscription = source.subscribe( function (x) { console.log('onNext: ' + x); }, function (e) { console.log('onError: ' + e.message); }, function () { console.log('onCompleted'); }); // => onNext: 1 // => onNext: 2 // => onNext: 3 // => onNext: 4 // => onNext: 5 // => onCompleted ``` You can treat the observable sequence (such as a sequence of mouse-over events) as if it were a normal collection. Thus you can write queries over the collection to do things like filtering, grouping, composing, etc. To make observable sequences more useful, the RxJS libraries provide many factory operators so that you do not need to implement any of these on your own. This will be covered in the [Querying Observable Sequences](querying.md) topic. ### Caution: You do not need to implement the Observable/Observer objects yourself. Rx provides internal implementations of these interfaces for you and exposes them through various extension methods provided by the Observable and Observer types. See the [Creating and Querying Observable Sequences](creatingquerying.md) topic for more information. ### See Also Concepts - [Querying Observable Sequences](querying.md) Other Resources - [Creating and Querying Observable Sequences](creatingquerying.md) RxJS-4.1.0/doc/gettingstarted/generators.md000066400000000000000000000137521266736161100206530ustar00rootroot00000000000000# Generators and Observable Sequences # One of the more exciting features of ES6 is a new function type called generators. They have been in Firefox for years, although they have now been finally standardized in ES6, and will be shipping in a browser or runtime near you. How generators differ from normal functions is that a normal function such as the following will run to completion, regardless of whether it is asynchronous or not. ```js function printNumberOfTimes(msg, n) { for (var i = 0; i < n; i++) { console.log(msg); } } printNumberOfTime('Hello world', 1); // => Hello world // Asynchronous setTimeout(function () { console.log('Hello from setTimeout after one second'); }, 1000); // => Hello from setTimeout after one second ``` Instead of running to completion, generators allow us to interrupt the flow of the function by introducing the `yield` keyword which pauses the function. The function cannot resume on its own without the external consumer saying that they need the next value. To create a generator function, you must use the `function*` syntax which then becomes a generator. In this particular example, we will yield a single value, the meaning of life. ```js function* theMeaningOfLife() { yield 42; } ``` To get the value out, we need to invoke the function, and then call `next` to get the next value. The return value from the `next` call will have a flag as to whether it is done, as well as any value that is yielded. Note that the function doesn't do anything until we start to call `next`. ```js var it = theMeaningOfLife(); it.next(); // => { done: false, value: 42 } it.next(); // => { done: true, value: undefined } ``` We can also use some ES6 shorthand for getting values from a generator such as the `for..of`. ```js for (var v of theMeaningOfLife()) { console.log(v); } // => 42 ``` This of course is only scratching the surface of what generators are capable of doing as we're more focused on the simple nature of yielding values. Since RxJS believes heavily in standards, we also look for ways to incorporate new language features as they become standardized so that you can take advantage of them, combined with the power of RxJS. ## Async/Await Style and RxJS ## One common complaint of JavaScript is the callback nature to asynchronous behavior. Luckily, this can be solved quite easily with a library approach. To that end, we introduce [`Rx.spawn`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/spawn.md) which allows you to write straight forward code manner and can yield not only Observable sequences, but also Promises, Callbacks, Arrays, etc. This allows you to write your code in a very imperative manner without all the callbacks, but also brings the power of RxJS whether you want to call `timeout`, `retry`, `catch` or any other method for that matter. Note that this only yields a single value, but in RxJS terms, this is still quite useful. For example, we could get the HTML from Bing.com and write it to the console, with a timeout of 5 seconds which will throw an error should it not respond in time. We could also add in things like `retry` and `catch` so that we could for example try three times and then if it fails, give a default response or cached version. ```js var Rx = require('rx'); var request = require('request'); var get = Rx.Observable.fromNodeCallback(request); Rx.Observable.spawn(function* () { var data; try { data = yield get('http://bing.com').timeout(5000 /*ms*/); } catch (e) { console.log('Error %s', e); } console.log(data); }).subscribe(); ``` ## Mixing Operators with Generators ## Many of the operators inside RxJS also support generators. For example, we could use the [`Rx.Observable.from`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/from.md) method to take a generator function, in this case, a Fibonacci sequence, take 10 of them and display it. ```js function* fibonacci(){ var fn1 = 1; var fn2 = 1; while (1) { var current = fn2; fn2 = fn1; fn1 = fn1 + current; yield current; } } Rx.Observable.from(fibonacci()) .take(10) .subscribe(function (x) { console.log('Value: %s', x); }); //=> Value: 1 //=> Value: 1 //=> Value: 2 //=> Value: 3 //=> Value: 5 //=> Value: 8 //=> Value: 13 //=> Value: 21 //=> Value: 34 //=> Value: 55 ``` That's just the beginning, as there are several operators such as [`concatMap`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concatmap.md)/[`selectConcat`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concatmap.md) and [`flatMap`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/selectmany.md)/[`selectMany`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concatmap.md) which take iterables as an argument so that we can further enable composition. For example, we could project using generators from a `flatMap` operation. ```js var source = Rx.Observable.of(1,2,3) .flatMap( function (x, i) { return function* () { yield x; yield i; }(); }, function (x, y, i1, i2) { return x + y + i1 + i2; } ); var subscription = source.subscribe( function (x) { console.log('Next: %s', x); }, function (err) { console.log('Error: %s', err); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 2 // => Next: 5 // => Next: 5 // => Next: 8 // => Next: 8 // => Completed ``` The future of JavaScript is exciting and generators add new possibilities to our applications to allow them to mix and match our programming styles. Notice that in this sample, move becomes an observable sequence in which we can manipulate further. The [Querying Observable Sequences](querying.md) topic will show you how you can project this sequence into a collection of Points type and filter its content, so that your application will only receive values that satisfy a certain criteria. ## See Also Concepts - [Querying Observable Sequences](querying.md) RxJS-4.1.0/doc/gettingstarted/operators.md000066400000000000000000000113011266736161100205040ustar00rootroot00000000000000# Implementing Your Own Observable Operators # You can extend RxJS by adding new operators for operations that are not provided by the base library, or by creating your own implementation of standard query operators to improve readability and performance. Writing a customized version of a standard operator is useful when you want to operate with in-memory objects and when the intended customization does not require a comprehensive view of the query. ## Creating New Operators ## RxJS offers a full set of operators that cover most of the possible operations on a set of entities. However, you might need an operator to add a particular semantic meaning to your query—especially if you can reuse that same operator several times in your code. Adding new operators to RxJS is a way to extend its capabilities. However, you can also improve code readability by wrapping existing operators into more specialized and meaningful ones. For example, let's see how we might implement the [_.where](http://lodash.com/docs#where) method from [Lo-Dash](http://lodash.com/) or [Underscore](http://underscorejs.org/), which takes a set of attributes and does a deep comparison for equality. We might try implementing this from scratch using the `Rx.Observable.create` method such as the following code. ```js Rx.Observable.prototype.filterByProperties = function (properties) { var source = this, comparer = Rx.internals.isEqual; return Rx.Observable.create(function (observer) { // Our disposable is the subscription from the parent return source.subscribe( function (data) { try { var shouldRun = true; // Iterate the properties for deep equality for (var prop in properties) { if (!comparer(properties[prop], data[prop])) { shouldRun = false; break; } } } catch (e) { observer.onError(e); } if (shouldRun) { observer.onNext(data); } }, observer.onError.bind(observer), observer.onCompleted.bind(observer) ); }); }; ``` Many existing operators, such as this, instead could be built using other basic operators for example in this case, `filter` or `where`. In fact, many existing operators are built using other basic operators. For example, the `flatMap` or `selectMany` operator is built by composing the `map` or `select` and `mergeObservable` operators, as the following code shows. ```js Rx.Observable.prototype.flatMap = function (selector) { return this.map(selector).mergeObservable(); }; ``` We could rewrite it as the following to take advantage of already built in operators. ```js Rx.Observable.prototype.filterByProperties = function (properties) { var comparer = Rx.internals.isEqual; return this.filter(function (data) { // Iterate the properties for deep equality for (var prop in properties) { if (!comparer(properties[prop], data[prop])) { return false; } } return true; }); }; ``` By reusing existing operators when you build a new one, you can take advantage of the existing performance or exception handling capabilities implemented in the RxJS libraries. When writing a custom operator, it is good practice not to leave any disposables unused; otherwise, you may find that resources could actually be leaked and cancellation may not work correctly. ## Testing Your New Operator ## Just because you have implemented a new operator doesn't mean you are finished. Now, let's write a test to verify its behavior from what we learned in the [Testing and Debugging](testing.md) topic. We'll reuse the `collectionAssert.assertEqual` from the previous topic so it is not repeated here. ```js var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted, subscribe = Rx.ReactiveTest.subscribe; test('filterProperties should yield with match', function () { var scheduler = new Rx.TestScheduler(); var input = scheduler.createHotObservable( onNext(210, { 'name': 'curly', 'age': 30, 'quotes': ['Oh, a wise guy, eh?', 'Poifect!'] }), onNext(220, { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }), onCompleted(230) ); var results = scheduler.startWithCreate( function () { return input.filterByProperties({ 'age': 40 }); } ); collectionAssert.assertEqual(results.messages, [ onNext(220, { 'name': 'moe', 'age': 40, 'quotes': ['Spread out!', 'You knucklehead!'] }), onCompleted(230) ]); collectionAssert.assertEqual(input.subscriptions, [ subscribe(200, 230) ]); }); ``` In order for this to be successfully tested, we should check for when there is no data, empty, single matches, multiple matches and so forth. ## See Also ## **Resources** - [Testing and Debugging](testing.md) RxJS-4.1.0/doc/gettingstarted/promises.md000066400000000000000000000254521266736161100203430ustar00rootroot00000000000000# Bridging to Promises # Promises are a defacto standard within JavaScript community and is part of the ECMAScript Standard. A promise represents the eventual result of an asynchronous operation. The primary way of interacting with a promise is through its then method, which registers callbacks to receive either a promise’s eventual value or the reason why the promise cannot be fulfilled. You can create them very easily where the constructor has two functions, `resolve` and `reject` which resolves the value or rejects it for a given reason. RxJS is fully committed to standards and has native support for Promises for any number of methods where they can be used interchangeably with Observable sequences. The advantage that you get when you intermix Promises with Observable sequences is that unlike the ES6 Promise standard, you get cancellation semantics which means you can disregard values if you no longer are interested. One of the biggest problems around Promises right now are around cancellation, as to cancel the operation, such as an XHR is not easily done with the existing standard, nor is it to only get the last value to ensure no out of order requests. With Observable sequences, you get that behavior for free in a multicast behavior, instead of the unicast Promise behavior. The following list of operators natively support Promises: - [`Rx.Observable.amb`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/amb.md) | [`Rx.Observable.prototype.amb`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/ambproto.md) - [`Rx.Observable.case`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/case.md) - [`Rx.Observable.catch`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/catch.md) | [`Rx.Observable.prototype.catch`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/catchproto.md) - [`Rx.Observable.combineLatest`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/combinelatest.md) | [`Rx.Observable.prototype.combineLatest`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/combinelatestproto.md) - [`Rx.Observable.concat`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concat.md) | [`Rx.Observable.prototype.concat`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concatproto.md) - [`Rx.Observable.prototype.concatMap`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concatmap.md) - [`Rx.Observable.prototype.concatMapObserver`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/concatobserver.md) - [`Rx.Observable.defer`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/defer.md) - [`Rx.Observable.prototype.flatMap`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/selectmany.md) - [`Rx.Observable.prototype.flatMapLatest`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/flatmaplatest.md) - [`Rx.Observable.forkJoin`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/forkjoin.md) | [`Rx.Observable.prototype.forkJoin`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/forkjoinproto.md) - [`Rx.Observable.if`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/if.md) - [`Rx.Observable.merge`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/merge.md) - [`Rx.Observable.prototype.mergeAll`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/mergeall.md) - [`Rx.Observable.onErrorResumeNext`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/onerrorresumenext.md) | [`Rx.Observable.prototype.onErrorResumeNext`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/onerrorresumenextproto.md) - [`Rx.Observable.prototype.selectMany`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/selectmany.md) - [`Rx.Observable.prototype.selectSwitch`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/flatmaplatest.md) - [`Rx.Observable.prototype.sequenceEqual`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/sequenceequal.md) - [`Rx.Observable.prototype.skipUntil`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/skipuntil.md) - [`Rx.Observable.startAsync`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/startasync.md) - [`Rx.Observable.prototype.switch`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/switch.md) - [`Rx.Observable.prototype.takeUntil`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/takeuntil.md) - [`Rx.Observable.prototype.debounceWithSelector`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/debouncewithselector.md) - [`Rx.Observable.prototype.timeoutWithSelector`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/timeoutwithselector.md) - [`Rx.Observable.while`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/while.md) - [`Rx.Observable.prototype.window`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/window.md) - [`Rx.Observable.withLatestFrom`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/withlatestfrom.md) - [`Rx.Observable.zip`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/zip.md) | [`Rx.Observable.prototype.zip`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/zipproto.md) Because of this, we can now do a number of very interesting things such as combining Promises and Observable sequences. ```js var source = Rx.Observable.range(0, 3) .flatMap(function (x) { return Promise.resolve(x * x); }); var subscription = source.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 0 // => onNext: 1 // => onNext: 4 // => onCompleted ``` This is just scatching the surface of what Promises and RxJS can do together so that we have first class single values and first class multiple values working together. ## Converting Promises to Observable Sequences ## It's quite simple to convert a Promise object which conforms to the ES6 Standard Promise where the behavior is uniform across implementations. To support this, we provide the [`Rx.Observable.fromPromise`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/frompromise.md) method which calls the `then` method of the promise to handle both success and error cases. In the following example, we create promise objects using [RSVP](https://github.com/tildeio/rsvp.js) library. ```js // Create a promise which resolves 42 var promise1 = new RSVP.Promise(function (resolve, reject) { resolve(42); }); var source1 = Rx.Observable.fromPromise(promise1); var subscription1 = source1.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onNext: 42 // => onCompleted // Create a promise which rejects with an error var promise2 = new RSVP.Promise(function (resolve, reject) { reject(new Error('reason')); }); var source2 = Rx.Observable.fromPromise(promise2); var subscription2 = source2.subscribe( function (x) { console.log('onNext: %s', x); }, function (e) { console.log('onError: %s', e); }, function () { console.log('onCompleted'); }); // => onError: reject ``` Notice that in this sample, these promises becomes an observable sequences in which we can manipulate further. The [Querying Observable Sequences](querying.md) topic will show you how you can project this sequence into another, filter its content, so that your application will only receive values that satisfy a certain criteria. ## Converting Observable Sequences to Promises ## Just as you can convert a Promise to an Observable sequence, you can also convert an Observable sequence to a Promise. This either requires native support for Promises, or a Promise library you can add yourself, such as [Q](https://github.com/kriskowal/q), [RSVP](https://github.com/tildeio/rsvp.js), [when.js](https://github.com/cujojs/when) among others. These libraries must conform to the ES6 standard for construction where it provides two functions to resolve or reject the promise. ```js var p = new Promise(function (resolve, reject) { resolve(42); }); ``` We can use the [`toPromise`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/topromise.md) method which allows you to convert an Observable sequence to a Promise. This method accepts a Promise constructor, and if not provided, will default to a default implementation. In this first example, we will use [RSVP](https://github.com/tildeio/rsvp.js) to construct our Promise objects. ```js // Return a single value var source1 = Rx.Observable.just(1).toPromise(RSVP.Promise); source1.then( function (value) { console.log('Resolved value: %s', value); }, function (reason) { console.log('Rejected reason: %s', reason); }); // => Resolved value: 1 // Reject the Promise var source2 = Rx.Observable.throwError(new Error('reason')).toPromise(RSVP.Promise); source2.then( function (value) { console.log('Resolved value: %s', value); }, function (reason) { console.log('Rejected reason: %s', reason); }); // => Rejected reason: Error: reason ``` If an implementation is not given with the [`toPromise`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/topromise.md) method, it will fall back to the Promise implementation specified in the `Rx.config.Promise` field. By default this will be set to the runtime's ES6 Promise implementation, but can easily be overridden by specifying the configuration information. ```js Rx.config.Promise = RSVP.Promise; var source1 = Rx.Observable.just(1).toPromise(); source1.then( function (value) { console.log('Resolved value: %s', value); }, function (reason) { console.log('Rejected reason: %s', reason); }); // => Resolved value: 1 ``` If you are in a pure ES6 environment, this should just work without any settings on your part as it will use the runtime's ES6 Promise implementation. ```js var source1 = Rx.Observable.just(1).toPromise(); source1.then( function (value) { console.log('Resolved value: %s', value); }, function (reason) { console.log('Rejected reason: %s', reason); }); // => Resolved value: 1 ``` Concepts - [Querying Observable Sequences](querying.md) RxJS-4.1.0/doc/gettingstarted/querying.md000066400000000000000000000323721266736161100203440ustar00rootroot00000000000000# Querying Observable Sequences # In [Bridging to Events](events.md), we have converted existing DOM and Node.js events into observable sequences to subscribe to them. In this topic, we will look at the first-class nature of observable sequences as IObservable objects, in which generic LINQ operators are supplied by the Rx assemblies to manipulate these objects. Most operators take an observable sequence and perform some logic on it and output another observable sequence. In addition, as you can see from our code samples, you can even chain multiple operators on a source sequence to tweak the resulting sequence to your exact requirement. ## Using Different Operators ## We have already used the [`create`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablecreatesubscribe) and [`range`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablerangestart-count-scheduler) operators in previous topics to create and return simple sequences. We have also used the [`fromEvent`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromeventelement-eventname) and [`fromEventPattern`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablefromeventpatternaddhandler-removehandler) operators to convert existing events into observable sequences. In this topic, we will use other operators of the `Observable` type so that you can filter, group and transform data. Such operators take observable sequence(s) as input, and produce observable sequence(s) as output. ## Combining different sequences ## In this section, we will examine some of the operators that combine various observable sequences into a single observable sequence. Notice that data are not transformed when we combine sequences. In the following sample, we use the Concat operator to combine two sequences into a single sequence and subscribe to it. For illustration purpose, we will use the very simple `range(x, y)` operator to create a sequence of integers that starts with x and produces y sequential numbers afterwards. ```js var source1 = Rx.Observable.range(1, 3); var source2 = Rx.Observable.range(1, 3); source1.concat(source2) .subscribe(function (x) { console.log(x); }); // => 1 // => 2 // => 3 // => 1 // => 2 // => 3 ``` Notice that the resultant sequence is 1,2,3,1,2,3. This is because when you use the [`concat`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeconcatargs) operator, the 2nd sequence (source2) will not be active until after the 1st sequence (source1) has finished pushing all its values. It is only after source1 has completed, then source2 will start to push values to the resultant sequence. The subscriber will then get all the values from the resultant sequence. Compare this with the [`merge`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypemergemaxconcurrent--other) operator. If you run the following sample code, you will get 1,1,2,2,3,3. This is because the two sequences are active at the same time and values are pushed out as they occur in the sources. The resultant sequence only completes when the last source sequence has finished pushing values. ```js var source1 = Rx.Observable.range(1, 3); var source2 = Rx.Observable.range(1, 3); source1.merge(source2) .subscribe(function (x) { console.log(x); }); // => 1 // => 1 // => 2 // => 2 // => 3 // => 3 ``` Another comparison can be done with the [`catch`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypecatchsecond--handler) operator. In this case, if source1 completes without any error, then source2 will not start. Therefore, if you run the following sample code, you will get 1,2,3 only since source2 (which produces 4,5,6) is ignored. ```js var source1 = Rx.Observable.range(1, 3); var source2 = Rx.Observable.range(4, 3); source1.catch(source2) .subscribe(function (x) { console.log(x); }); // => 1 // => 2 // => 3 ``` Finally, let’s look at [`onErrorResumeNext`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeonerrorresumenextsecond). This operator will move on to source2 even if source1 cannot be completed due to an error. In the following example, even though source1 represents a sequence that terminates with an exception by using the [`throw`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablethrowexception-scheduler) operator, the subscriber will receive values (1,2,3) published by source2. Therefore, if you expect either source sequence to produce any error, it is a safer bet to use [`onErrorResumeNext`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeonerrorresumenextsecond) to guarantee that the subscriber will still receive some values. ```js var source1 = Rx.Observable.throw(new Error('An error has occurred.')); var source2 = Rx.Observable.range(1, 3); source1.onErrorResumeNext(source2) .subscribe(function (x) { console.log(x); }); // => 1 // => 2 // => 3 ``` ## Projection ## The [`select`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeselectselector-thisarg) or [`map`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypemapselector-thisarg) operator can translate each element of an observable sequence into another form. In the following example, we project a sequence of strings into an a series of integers representing the length. ```js var array = ['Reactive', 'Extensions', 'RxJS']; var seqString = Rx.Observable.from(array); var seqNum = seqString.map(function (x) { return x.length; }); seqNum .subscribe(function (x) { console.log(x); }); // => 8 // => 10 // => 4 ``` In the following sample, which is an extension of the event conversion example we saw in the [Bridging with Existing Events](events.md) topic, we use the `select` or `map` operator to project the event arguments to a point of x and y. In this way, we are transforming a mouse move event sequence into a data type that can be parsed and manipulated further, as can be seen in the next "Filtering" section. ```js var move = Rx.Observable.fromEvent(document, 'mousemove'); var points = move.map(function (e) { return { x: e.clientX, y: e.clientY }; }); points.subscribe( function (pos) { console.log('Mouse at point ' + pos.x + ', ' + pos.y); }); ``` Finally, let’s look at the [`selectMany`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeselectmanyselector-resultselector) or [`flatMap`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypeflatmapselector-resultselector) operator. The `selectMany` or `flatMap` operator has many overloads, one of which takes a selector function argument. This selector function is invoked on every value pushed out by the source observable. For each of these values, the selector projects it into a mini observable sequence. At the end, the `selectMany` or `flatMap` operator flattens all of these mini sequences into a single resultant sequence, which is then pushed to the subscriber. The observable returned from `selectMany` or `flatMap` publishes `onCompleted` after the source sequence and all mini observable sequences produced by the selector have completed. It fires `onError` when an error has occurred in the source stream, when an exception was thrown by the selector function, or when an error occurred in any of the mini observable sequences. In the following example, we first create a source sequence which produces an integer every 5 seconds, and decide to just take the first 2 values produced (by using the `take` operator). We then use `selectMany` or `flatMap` to project each of these integers using another sequence of {100, 101, 102}. By doing so, two mini observable sequences are produced, {100, 101, 102} and {100, 101, 102}. These are finally flattened into a single stream of integers of {100, 101, 102, 100, 101, 102} and pushed to the observer. ```js var source1 = Rx.Observable.interval(5000).take(2); var proj = Rx.Observable.range(100, 3); var resultSeq = source1.flatMap(proj); var subscription = resultSeq.subscribe( function (x) { console.log('onNext: ' + x); }, function (e) { console.log('onError: ' + e.message); }, function () { console.log('onCompleted'); }); // => onNext: 100 // => onNext: 101 // => onNext: 102 // => onNext: 100 // => onNext: 101 // => onNext: 102 // => onCompleted ``` ## Filtering ## In the following example, we use the [`generate`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablegenerateinitialstate-condition-iterate-resultselector-scheduler) operator to create a simple observable sequence of numbers. The `generate` operator has several versions including with relative and absolute time scheduling. In our example, it takes an initial state (0 in our example), a conditional function to terminate (fewer than 10 times), an iterator (+1), a result selector (a square function of the current value), and prints out only those smaller than 5 using the [`filter`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypefilterpredicate-thisarg) or [`where`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypewherepredicate-thisarg) operators. ```js var seq = Rx.Observable.generate( 0, function (i) { return i < 10; }, function (i) { return i + 1; }, function (i) { return i * i; }); var source = seq.filter(function (n) { return n < 5; }); var subscription = source.subscribe( function (x) { console.log('onNext: ' + x); }, function (e) { console.log('onError: ' + e.message); }, function () { console.log('onCompleted'); }); // => onNext: 0 // => onNext: 1 // => onNext: 4 // => onCompleted ``` The following example is an extension of the projection example you have seen earlier in this topic. In that sample, we have used the `select` or `map` operator to project the event arguments into a point with x and y. In the following example, we use the `filter` or `where` and `select` or `map` operator to pick only those mouse movement that we are interested. In this case, we filter the mouse moves to those over the first bisector (where the x and y coordinates are equal). ```js var move = Rx.Observable.fromEvent(document, 'mousemove'); var points = move.map(function (e) { return { x: e.clientX, y: e.clientY }; }); var overfirstbisector = points.filter(function (pos) { return pos.x === pos.y; }); var movesub = overfirstbisector.subscribe(function (pos) { console.log('mouse at ' + pos.x + ', ' + pos.y); }); ``` ## Time-based Operation ## You can use the Buffer operators to perform time-based operations. Buffering an observable sequence means that an observable sequence’s values are put into a buffer based on either a specified timespan or by a count threshold. This is especially helpful in situations when you expect a tremendous amount of data to be pushed out by the sequence, and the subscriber does not have the resource to process these values. By buffering the results based on time or count, and only returning a sequence of values when the criteria is exceeded (or when the source sequence has completed), the subscriber can process OnNext calls at its own pace. In the following example, we first create a simple sequence of integers for every second. We then use the `bufferWithCount` operator and specify that each buffer will hold 5 items from the sequence. The `onNext` is called when the buffer is full. We then tally the sum of the buffer using calling `Array.reduce`. The buffer is automatically flushed and another cycle begins. The printout will be 10, 35, 60… in which 10=0+1+2+3+4, 35=5+6+7+8+9, and so on. ```js var seq = Rx.Observable.interval(1000); var bufSeq = seq.bufferWithCount(5); bufSeq .map(function (arr) { return arr.reduce(function (acc, x) { return acc + x; }, 0); }) .subscribe(function (sum) { console.log(sum); }); // => 10 // => 35 // => 60 ... ``` We can also create a buffer with a specified time span in milliseconds. In the following example, the buffer will hold items that have accumulated for 3 seconds. The printout will be 3, 12, 21… in which 3=0+1+2, 12=3+4+5, and so on. ```js var seq = Rx.Observable.interval(1000); var bufSeq = seq.bufferWithTime(3000); bufSeq .map(function (arr) { return arr.reduce(function (acc, x) { return acc + x; }, 0); }) .subscribe(function (sum) { console.log(sum); }); ``` Note that if you are using any of the `buffer*` or `window*` operators, you have to make sure that the sequence is not empty before filtering on it. ## Operators by Categories ## The [Operators by Categories](categories.md) topic lists of all major operators implemented by the `Observable` type by their categories; specifically: creation, conversion, combine, functional, mathematical, time, exceptions, miscellaneous, selection and primitives. ## See Also ## *Reference* - [Observable](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) *Concepts* - [Operators by Categories](categories.md) RxJS-4.1.0/doc/gettingstarted/schedulers.md000066400000000000000000000214521266736161100206370ustar00rootroot00000000000000# Using Schedulers # A scheduler controls when a subscription starts and when notifications are published. It consists of three components. It is first a data structure. When you schedule for tasks to be completed, they are put into the scheduler for queueing based on priority or other criteria. It also offers an execution context which denotes where the task is executed (e.g. immediately, in the current thread, or in another callback mechanism such as `setTimeout` or `process.nextTick`). Lastly, it has a clock which provides a notion of time for itself (by accessing the `now` method of a scheduler). Tasks being scheduled on a particular scheduler will adhere to the time denoted by that clock only. Schedulers also introduce the notion of virtual time (denoted by the [`VirtualTimeScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/virtualtimescheduler.md) type), which does not correlate with real time that is used in our daily life. For example, a sequence that is specified to take 100 years to complete can be scheduled to complete in virtual time in a mere 5 minutes. This will be covered in the [Testing and Debugging Observable Sequences](testing.md) topic. ## Scheduler Types ## The various Scheduler types provided by Rx all implement the `Scheduler` methods. Each of these can be created and returned by using static properties of the `Scheduler` object. The `ImmediateScheduler` (by accessing the static [`immediate`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/scheduler.md#rxschedulerimmediate) property) will start the specified action immediately. The `CurrentThreadScheduler` (by accessing the static [`currentThread`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/scheduler.md#rxschedulercurrentthread) property) will schedule actions to be performed on the thread that makes the original call. The action is not executed immediately, but is placed in a queue and only executed after the current action is complete. The `DefaultScheduler` (by accessing the static [`default`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/scheduler.md#rxschedulerdefault) property) will schedule actions to be performed on a asynchronous callback, which is optimized for the particular runtime, such as `setImmediate` or `process.nextTick` on Node.js or in the browser with a fallback to `setTimeout`. ## Using Schedulers ## You may have already used schedulers in your Rx code without explicitly stating the type of schedulers to be used. This is because all Observable operators that deal with concurrency have optional schedulers. If you do not provide the scheduler, RxJS will pick a default scheduler by using the principle of least concurrency. This means that the scheduler which introduces the least amount of concurrency that satisfies the needs of the operator is chosen. For example, for operators returning an observable with a finite and small number of messages, RxJS calls `immediate`. For operators returning a potentially large or infinite number of messages, `currentThread` is called. For operators which use timers, `default` is used. Because RxJS uses the least concurrency scheduler, you can pick a different scheduler if you want to introduce concurrency for performance purpose. To specify a particular scheduler, you can use those operator methods that take a scheduler, e.g., `return(42, Rx.Scheduler.default)`. In the following example, the source observable sequence is producing values at a frantic pace. The default scheduler of the generate operator would place onNext messages on the `currentThread`. ```js var obs = Rx.Observable.generate( 0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }); ``` This will queue up on the observer quickly. We can improve this code by using the observeOn operator, which allows you to specify the context that you want to use to send pushed notifications (onNext) to observers. By default, the [`observeOn`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/observeon.md) operator ensures that `onNext` will be called as many times as possible on the current thread. You can use its overloads and redirect the `onNext` outputs to a different context. In addition, you can use the [`subscribeOn`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/subscribeon.md) operator to return a proxy observable that delegates actions to a specific scheduler. For example, for a UI-intensive application, you can delegate all background operations to be performed on a scheduler running in the background by using `subscribeOn` and passing to it the `DefaultScheduler`. The following example will schedule any onNext notifications on the current Dispatcher, so that any value pushed out is sent on the UI thread. This is especially beneficial to Silverlight developers who use RxJS. ```js Rx.Observable.generate( 0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; } ) .observeOn(Rx.Scheduler.default) .subscribe(...); ``` Instead of using the `observeOn` operator to change the execution context on which the observable sequence produces messages, we can create concurrency in the right place to begin with. As operators parameterize introduction of concurrency by providing a scheduler argument overload, passing the right scheduler will lead to fewer places where the ObserveOn operator has to be used. For example, we can unblock the observer and subscribe to the UI thread directly by changing the scheduler used by the source, as in the following example. In this code, by using the `generate` method passing a scheduler, and providing the `Rx.Scheduler.default` instance, all values pushed out from this observable sequence will originate via an asynchronous callback. ```js Rx.Observable.generate( 0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.default) .subscribe(...); ``` You should also note that by using the `observeOn` operator, an action is scheduled for each message that comes through the original observable sequence. This potentially changes timing information as well as puts additional stress on the system. If you have a query that composes various observable sequences running on many different execution contexts, and you are doing filtering in the query, it is best to place `observeOn` later in the query. This is because a query will potentially filter out a lot of messages, and placing the `observeOn` operator earlier in the query would do extra work on messages that would be filtered out anyway. Calling the `observeOn` operator at the end of the query will create the least performance impact. Another advantage of specifying a scheduler type explicitly is that you can introduce concurrency for performance purpose, as illustrated by the following code. ```js seq.groupBy(...) .map(function (x) { return x.observeOn(Rx.Scheduler.default); }) .map(function (x) { return expensive(x); }) // perform operations that are expensive on resources ``` ## When to Use Which Scheduler ## To make things a little easier when you are creating your own operators, or using the standard built-in ones, which scheduler you should use. The following table lays out each scenario with the suggested scheduler.
Scenario Scheduler
Constant Time Operations Rx.Scheduler.immediate
Tail Recursive Operations Rx.Scheduler.immediate
Iteration Operations Rx.Scheduler.currentThread
Time-based Operations Rx.Scheduler.default
Asynchronous Conversions Rx.Scheduler.default
Historical Data Operations Rx.HistoricalScheduler
Unit Testing Rx.TestScheduler
## See Also *Reference* - [Testing and Debugging Observable Sequences](testing.md) RxJS-4.1.0/doc/gettingstarted/subjects.md000066400000000000000000000135221266736161100203170ustar00rootroot00000000000000# Using Subjects # The [`Subject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/subject.md) class inherits both [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) and [`Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md), in the sense that it is both an observer and an observable. You can use a subject to subscribe all the observers, and then subscribe the subject to a backend data source. In this way, the subject can act as a proxy for a group of subscribers and a source. You can use subjects to implement a custom observable with caching, buffering and time shifting. In addition, you can use subjects to broadcast data to multiple subscribers. By default, subjects do not perform any synchronization across threads. They do not take a scheduler but rather assume that all serialization and grammatical correctness are handled by the caller of the subject. A subject simply broadcasts to all subscribed observers in the thread-safe list of subscribers. Doing so has the advantage of reducing overhead and improving performance. ## Using Subjects ## In the following example, we create a subject, subscribe to that subject and then use the same subject to publish values to the observer. By doing so, we combine the publication and subscription into the same source. In addition to taking an `Observer`, the [`subscribe`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypesubscribeobserver--onnext-onerror-oncompleted) method can also take a function for onNext, which means that the action will be executed every time an item is published. In our sample, whenever onNext is invoked, the item will be written to the console. ```js var subject = new Rx.Subject(); var subscription = subject.subscribe( function (x) { console.log('onNext: ' + x); }, function (e) { console.log('onError: ' + e.message); }, function () { console.log('onCompleted'); }); subject.onNext(1); // => onNext: 1 subject.onNext(2); // => onNext: 2 subject.onCompleted(); // => onCompleted subscription.dispose(); ``` The following example illustrates the proxy and broadcast nature of a `Subject`. We first create a source sequence which produces an integer every 1 second. We then create a `Subject`, and pass it as an observer to the source so that it will receive all the values pushed out by this source sequence. After that, we create another two subscriptions, this time with the subject as the source. The `subSubject1` and `subSubject2` subscriptions will then receive any value passed down (from the source) by the `Subject`. ```js // Every second var source = Rx.Observable.interval(1000); var subject = new Rx.Subject(); var subSource = source.subscribe(subject); var subSubject1 = subject.subscribe( function (x) { console.log('Value published to observer #1: ' + x); }, function (e) { console.log('onError: ' + e.message); }, function () { console.log('onCompleted'); }); var subSubject2 = subject.subscribe( function (x) { console.log('Value published to observer #2: ' + x); }, function (e) { console.log('onError: ' + e.message); }, function () { console.log('onCompleted'); }); setTimeout(function () { // Clean up subject.onCompleted(); subSubject1.dispose(); subSubject2.dispose(); }, 5000); // => Value published to observer #1: 0 // => Value published to observer #2: 0 // => Value published to observer #1: 1 // => Value published to observer #2: 1 // => Value published to observer #1: 2 // => Value published to observer #2: 2 // => Value published to observer #1: 3 // => Value published to observer #2: 3 // => onCompleted // => onCompleted ``` ## Different types of Subjects ## The `Subject` object in the RxJS library is a basic implementation, but you can create your own using the [`Subject.create`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/subject.md#rxsubjectcreateobserver-observable) method. There are other implementations of Subjects that offer different functionalities. All of these types store some (or all of) values pushed to them via onNext, and broadcast it back to its observers. In this way, they convert a Cold Observable into a Hot one. This means that if you Subscribe to any of these more than once (i.e. subscribe -> unsubscribe -> subscribe again), you will see at least one of the same value again. For more information on hot and cold observables, see the last section of the [Creating and Subscribing to Simple Observable Sequences](creating.md) topic. [`ReplaySubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/replaysubject.md) stores all the values that it has published. Therefore, when you subscribe to it, you automatically receive an entire history of values that it has published, even though your subscription might have come in after certain values have been pushed out. [`BehaviourSubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/behaviorsubject.md) is similar to `ReplaySubject`, except that it only stored the last value it published. `BehaviourSubject` also requires a default value upon initialization. This value is sent to observers when no other value has been received by the subject yet. This means that all subscribers will receive a value instantly on `subscribe`, unless the `Subject` has already completed. [`AsyncSubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/asyncsubject.md) is similar to the Replay and Behavior subjects, however it will only store the last value, and only publish it when the sequence is completed. You can use the `AsyncSubject` type for situations when the source observable is hot and might complete before any observer can subscribe to it. In this case, `AsyncSubject` can still provide the last value and publish it to any future subscribers. RxJS-4.1.0/doc/gettingstarted/testing.md000066400000000000000000000300451266736161100201510ustar00rootroot00000000000000# Testing your Rx application # Let's face it, testing asynchronous code is a pain. In JavaScript, with so many asynchronous things to coordinate, testing is too hard for anyone to wrap their minds around. Luckily the Reactive Extensions for JavaScript makes this easy. If you have an observable sequence that publishes values over an extended period of time, testing it in real time can be a stretch. The RxJS library provides the [`TestScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md) type to assist testing this kind of time-dependent code without actually waiting for time to pass. The `TestScheduler` inherits [`VirtualScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/virtualtimescheduler.md) and allows you to create, publish and subscribe to sequences in emulated time. For example, you can compact a publication which takes 5 days to complete into a 2 minute run, while maintaining the correct scale. You can also take a sequence which actually has happened in the past (e.g., a sequence of stock ticks for a previous year) and compute or subscribe to it as if it is pushing out new values in real time. The factory methods [`startWithTiming`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md#rxtestschedulerprototypestartwithtimingcreate-created-subscribed-disposed), [`startWithCreate`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md#rxtestschedulerprototypestartwithcreatecreate) and [`startWithDispose`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md#rxtestschedulerprototypestartwithdisposecreate-disposed) executes all scheduled tasks until the queue is empty, or you can specify a time to so that queued-up tasks are only executed to the specified time. The following example creates a hot observable sequence with specified `onNext` notifications. It then starts the test scheduler and specifies when to subscribe to and dispose of the hot observable sequence. The Start method returns an instance of an `Observer`, which contains a `messages` property that records all notifications in a list. After the sequence has completed, we can use methods such as `collectionAssert.assertEqual` to compare the `messages` property, together with a list of expected values to see if both are identical (with the same number of items, and items are equal and in the same order). By doing so, we can confirm that we have indeed received the notifications that we expect. In our example, since we only start subscribing at 150, we will miss out the value 'abc'. However, when we compare the values we have received so far at 400, we notice that we have in fact received all the published values after we subscribed to the sequence. And we also verify that the OnCompleted notification was fired at the right time at 500. In addition, subscription information is also captured by the `Observable` type returned by the [`createHotObservable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md#rxtestschedulerprototypecreatehotobservableargs) method. In the same way, you can use that same defined method such as our `collectionAssert.assertEqual` below to confirm that subscriptions indeed happened at expected times. It is easy to wrap this for your favorite unit testing framework whether it is QUnit, Mocha, Jasmine, etc. In this example, we'll write a quick wrapper for QUnit. ```js function createMessage(expected, actual) { return 'Expected: [' + expected.toString() + ']\r\nActual: [' + actual.toString() + ']'; } // Using QUnit testing for assertions var collectionAssert = { assertEqual: function (actual, expected) { var comparer = Rx.internals.isEqual, isOk = true; if (expected.length !== actual.length) { ok(false, 'Not equal length. Expected: ' + expected.length + ' Actual: ' + actual.length); return; } for(var i = 0, len = expected.length; i < len; i++) { isOk = comparer(expected[i], actual[i]); if (!isOk) { break; } } ok(isOk, createMessage(expected, actual)); } }; var onNext = Rx.ReactiveTest.onNext, onCompleted = Rx.ReactiveTest.onCompleted, subscribe = Rx.ReactiveTest.subscribe; test('buffer should join strings', function () { var scheduler = new Rx.TestScheduler(); var input = scheduler.createHotObservable( onNext(100, 'abc'), onNext(200, 'def'), onNext(250, 'ghi'), onNext(300, 'pqr'), onNext(450, 'xyz'), onCompleted(500) ); var results = scheduler.startScheduler( function () { return input.buffer(function () { return input.debounce(100, scheduler); }) .map(function (b) { return b.join(','); }); }, { created: 50, subscribed: 150, disposed: 600 } ); collectionAssert.assertEqual(results.messages, [ onNext(400, 'def,ghi,pqr'), onNext(500, 'xyz'), onCompleted(500) ]); collectionAssert.assertEqual(input.subscriptions, [ subscribe(150, 500), subscribe(150, 400), subscribe(400, 500) ]); }); ``` ## Debugging your Rx application ## You can use the [`do`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypedoobserver--onnext-onerror-oncompleted) operator to debug your Rx application. The `do` operator allows you to specify various actions to be taken for each item of observable sequence (e.g., print or log the item, etc.). This is especially helpful when you are chaining many operators and you want to know what values are produced at each level. In the following example, we are going to reuse the Buffer example which generates integers every second, while putting them into buffers that can hold 5 items each. In our original example in the [Querying Observable Sequences](querying.md) topic, we subscribe only to the final `Observable` sequence when the buffer is full (and before it is emptied). In this example, however, we will use the `do` operator to print out the values when they are being pushed out by the original sequence (an integer every second). When the buffer is full, we use the `do` operator to print the status, before handing over all this as the final sequence for the observer to subscribe. ```js var seq1 = Rx.Observable.interval(1000) .do(function (x) { console.log(x); }) .bufferWithCount(5) .do(function (x) { console.log('buffer is full'); }) .subscribe(function (x) { console.log('Sum of the buffer is ' + x.reduce(function (acc, x) { return acc + x; }, 0)); }); // => 0 // => 1 // => 2 // => 3 // => 4 // => buffer is full // => Sum of the buffer is 10 // ... ``` As you can see from this sample, a subscription is on the recipient end of a series of chained observable sequences. At first, we create an observable sequence of integers separate by a second using the Interval operator. Then, we put 5 items into a buffer using the Buffer operator, and send them out as another sequence only when the buffer is full. Lastly, this is handed over to the Subscribe operator. Data propagate down all these intermediate sequences until they are pushed to the observer. In the same way, subscriptions are propagated in the reverse direction to the source sequence. By inserting the `do` operator in the middle of such propagations, you can "spy" on such data flow just like you use console.log perform debugging. You can also use the [`timestamp`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypetimestampscheduler) operator to verify the time when an item is pushed out by an observable sequence. This can help you troubleshoot time-based operations to ensure accuracy. Recall the following example from the [Creating and Subscribing to Simple Observable Sequences](creating.md) topic, in which we chain the `timestamp` operator to the query so that each value pushed out by the source sequence will be appended by the time when it is published. By doing so, when we subscribe to this source sequence, we can receive both its value and timestamp. ```js console.log('Current time: ' + Date.now()); var source = Rx.Observable.timer(5000, 1000) .timestamp(); var subscription = source.subscribe(function (x) { console.log(x.value + ': ' + x.timestamp); }); /* Output will look similar to this */ // => Current time: 1382646947400 // => 0: 1382646952400 // => 1: 1382646953400 // => 2: 1382646954400 // => 3: 1382646955400 // => 4: 1382646956400 // => 5: 1382646957400 // => 6: 1382646958400 ``` By using the `timestamp` operator, we have verified that the first item is indeed pushed out 5 seconds after the sequence, and each item is published 1 second later. You can remove any `do` and `map` or `select` calls after you finish debugging. ## Long Stack Traces Support When dealing with large RxJS applications, debugging and finding where the error occurred can be a difficult operation. As you chain more and more operators together, the longer the stack trace gets, and the harder it is to find out where things went wrong. Inspiration for this feature came from the [Q library](https://github.com/kriskowal/q) from [@kriskowal](https://github.com/kriskowal) which helped us get started. RxJS comes with optional support for "long stack traces" where the stack property of Error from onError calls is rewritten to be traced along asynchronous jumps instead of stopping at the most recent one. As an example: ```js var Rx = require('rx'); var source = Rx.Observable.range(0, 100) .timestamp() .map(function (x) { if (x.value > 98) throw new Error(); return x; }); source.subscribeOnError( function (err) { console.log(err.stack); }); ``` The error stack easily becomes unreadable and hard to find where the error actually occurred: ```bash $ node example.js Error at C:\GitHub\example.js:6:29 at AnonymousObserver._onNext (C:\GitHub\rxjs\dist\rx.all.js:4013:31) at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.next (C:\GitHub\rxjs\dist\rx.all.js:1863:12) at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AutoDetachObserverPrototype.next (C:\GitHub\rxjs\dist\rx.all.js:9226:23) at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AnonymousObserver._onNext (C:\GitHub\rxjs\dist\rx.all.js:4018:18) at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.next (C:\GitHub\rxjs\dist\rx.all.js:1863:12) at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AutoDetachObserverPrototype.next (C:\GitHub\rxjs\dist\rx.all.js:9226:23) ``` Instead, we can turn on this feature by setting the following flag: ```js Rx.config.longStackSupport = true; ``` When running the same example again with the flag set at the top, our stack trace looks much nicer and indicates exactly where the error occurred: ```bash $ node example.js Error at C:\GitHub\example.js:6:29 From previous event: at Object. (C:\GitHub\example.js:3:28) From previous event: at Object. (C:\GitHub\example.js:4:4) From previous event: at Object. (C:\GitHub\example.js:5:4) ``` Now, it is more clear that the error did occur exactly at line 6 with throwing an error and only shows the user code in this point. This is very helpful for debugging, as otherwise you end up getting only the first line, plus a bunch of RxJS internals, with no sign of where the operation started. This feature does come with a serious performance and memory overhead, however, If you're working with lots of RxJS code, or trying to scale a server to many users, you should probably keep it off. In development, this is perfectly fine for finding those pesky errors! In a future release, we may also release support for a node.js environment variable so that you can set it and unset it fairly easily. ## See Also ## **Concepts** - [Creating and Subscribing to Simple Observable Sequences](creating.md) - [Querying Observable Sequences](querying.md) - [Using Schedulers](schedulers.md) RxJS-4.1.0/doc/gettingstarted/transducers.md000066400000000000000000000075121266736161100210340ustar00rootroot00000000000000# Transducers with Observable Sequences # Much like Language Integrated Query (LINQ), Transducers are composable algorithmic transformations. They, like LINQ, are independent from the context of their input and output sources and specify only the essence of the transformation in terms of an individual element. Because transducers are decoupled from input or output sources, they can be used in many different processes - collections, streams, observables, etc. Transducers compose directly, without awareness of input or creation of intermediate aggregates. There are two major libraries currently out there, Cognitect's [`transducer-js`](https://github.com/cognitect-labs/transducers-js) and James Long's [`transducers.js`](https://github.com/jlongster/transducers.js) which are both great for getting high performance over large amounts of data. Because it is collection type neutral, it is a perfect fit for RxJS to do transformations over large collections. The word `transduce` is just a combination of `transform` and `reduce`. The reduce function is the base transformation; any other transformation can be expressed in terms of it (`map`, `filter`, etc). ```js var arr = [1, 2, 3, 4]; arr.reduce( function(result, x) { return result.concat(x + 1); }, []); // => [ 2, 3, 4, 5 ] ``` Using transducers, we can model the following behavior while breaking apart the map aspect of adding 1 to the concat operation, adding the seed and then the "collection" to transduce. ```js var arr = [1, 2, 3, 4]; function increment(x) { return x + 1; } function concatItem(acc, x) { return acc.concat(x); } transduce(map(increment), concatItem, [], arr); // => [ 2, 3, 4, 5 ] ``` Using Cognitect's [`transducers-js`](https://github.com/cognitect-labs/transducers-js) library, we can easily accomplish what we had above. ```js var t = transducers; var arr = [1, 2, 3, 4]; function increment(x) { return x + 1; } into([], t.comp(t.map(increment)), arr); // => [ 2, 3, 4, 5 ] ``` We can go a step further and add filtering as well to get only even values. ```js var t = transducers; var arr = [1, 2, 3, 4]; function increment(x) { return x + 1; } function isEven(x) { return x % 2 === 0; } into([], t.comp(t.map(increment), t.filter(isEven)), arr); // => [ 2, 4 ] ``` Since it works so well using Arrays, there's no reason why it cannot work for Observable sequences as well. To that end, we have introduced the [`transduce`](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/api/core/operators/transduce.md) method which acts exactly like it does for Arrays, but for Observable sequences. Once again, let's go over the above example, this time using an Observable sequence. ```js var t = transducers; var source = Rx.Observable.range(1, 4); function increment(x) { return x + 1; } function isEven(x) { return x % 2 === 0; } var transduced = source.transduce(t.comp(t.map(increment), t.filter(isEven))); transduced.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 4 // => Completed ``` Note that this above example also works the same with `transducers.js` as well with little to no modification. This example will in fact work faster than the traditional LINQ style (as of now) which most use currently. ```js var source = Rx.Observable.range(1, 4); function increment(x) { return x + 1; } function isEven(x) { return x % 2 === 0; } var transduced = source.map(increment).filter(isEven); transduced.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 4 // => Completed ``` This opens up a wide new set of possibilities making RxJS even faster over large collections with no intermediate Observable sequences. RxJS-4.1.0/doc/gettingstarted/what.md000066400000000000000000000131511266736161100174360ustar00rootroot00000000000000# What are the Reactive Extensions for JavaScript (RxJS)? # The Reactive Extensions for JavaScript (RxJS) is a library for composing asynchronous and event-based programs using observable sequences and [LINQ-style query operators](http://en.wikipedia.org/wiki/LINQ). Using RxJS, developers *__represent__* asynchronous data streams with [Observables](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md), *__query__* asynchronous data streams using [LINQ operators](http://msdn.microsoft.com/en-us/library/hh242983.aspx), and *__parameterize__* the concurrency in the asynchronous data streams using [Schedulers](http://msdn.microsoft.com/en-us/library/hh242963.aspx). Simply put, Rx = Observables + LINQ + Schedulers. Whether you are authoring a web-based application or server-side applications with [Node.js](http://nodejs.org), you have to deal with asynchronous and event-based programming constantly. Web applications and Node.js applications have I/O operations and computationally expensive tasks that might take a long time to complete and potentially block the main thread. Furthermore, handling exceptions, cancellation, and synchronization is difficult and error-prone. Using RxJS, you can represent multiple asynchronous data streams (that come from diverse sources, e.g., stock quote, tweets, computer events, web service requests, etc.), and subscribe to the event stream using the `Observer` object. The `Observable` object notifies the subscribed `Observer` object whenever an event occurs. Because observable sequences are data streams, you can query them using standard query operators implemented by the Observable extension methods. Thus you can filter, project, aggregate, compose and perform time-based operations on multiple events easily by using these standard query operators. In addition, there are a number of other reactive stream specific operators that allow powerful queries to be written. Cancellation, exceptions, and synchronization are also handled gracefully by using the extension methods provided by Rx. RxJS complements and interoperates smoothly with both synchronous data streams such as Arrays, Sets and Maps and single-value asynchronous computations such as Promises as the following diagram shows:
Single return valueMutiple return values
Pull/Synchronous/Interactive Object Iterables (Array | Set | Map | Object)
Push/Asynchronous/Reactive Promise Observable
## Pushing vs. Pulling Data ## In interactive programming, the application actively polls a data source for more information by retrieving data from a sequence that represents the source. Such behavior is represented by the iterator pattern of JavaScript Arrays, Objects, Sets, Maps, etc. In interactive programming, one must get the next item by either getting an item by an index in an Array, or through [ES6 iterators](http://wiki.ecmascript.org/doku.php?id=harmony:iterators). The application is active in the data retrieval process: it decides about the pace of the retrieval by calling `next` at its own convenience. This enumeration pattern is synchronous, which means your application might be blocked while polling the data source. Such pulling pattern is similar to visiting your library and checking out a book. After you are done with the book, you pay another visit to check out another one. On the other hand, in reactive programming, the application is offered more information by subscribing to a data stream (called observable sequence in RxJS), and any update is handed to it from the source. The application is passive in the data retrieval process: apart from subscribing to the observable source, it does not actively poll the source, but merely react to the data being pushed to it. When the event has completed, the source will send a notice to the subscriber. In this way, your application will not be blocked by waiting for the source to update. This is the push pattern employed by Reactive Extensions for JavaScript. This is similar to joining a book club in which you register your interest in a particular genre, and books that match your interest are automatically sent to you as they are published. You do not need to stand in a line to acquire something that you want. Employing a push pattern is especially helpful in heavy UI environment in which the UI thread cannot be blocked while the application is waiting for some events, which is essential in JavaScript environments which has its own set of asynchronous requirements. In summary, by using RxJS, you can make your application more responsive. The push model implemented by Rx is represented by the observable pattern of `Observable`/`Observer`. The `Observable` will notify all the observers automatically of any state changes. To register an interest through a subscription, you use the `subscribe` method of `Observable`, which takes on an `Observer` and returns a `Disposable` object. This gives you the ability to track your subscription and be able to dispose the subscription. You can essentially treat the observable sequence (such as a sequence of mouseover events) as if it were a normal collection. RxJS’s built-in query implementation over observable sequences allows developers to compose complex event processing queries over push-based sequences such as events, callbacks, Promises, HTML5 Geolocation APIs, and much much more.. For more information on these two interfaces, see [Exploring The Major Concepts in RxJS](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/exploring.md). RxJS-4.1.0/doc/gettingstarted/which-instance.md000066400000000000000000000502051266736161100214000ustar00rootroot00000000000000# Which Operator to Use? - Instance Operators # Use this page to find the instance operator implemented by the [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) type that fits your needs: Instance methods
Using an existing sequence I want to change each value map/select
I want to pull a property off each value pluck
I want to be notified of values without affecting them do/tap
doOnNext/tapOnNext
doOnError/tapOnError
doOnCompleted/tapOnCompleted
I want to include values based on custom logic filter/where
from the start of the sequence take
based on custom logic takeWhile
from the end of the sequence takeLast
until another sequence emits a value or completes takeUntil
I want to ignore values altogether ignoreElements
from the start of the sequence skip
based on custom logic skipWhile
from the end of the sequence skipLast
until another sequence emits a value skipUntil
that have the same value as the previous distinctUntilChanged
that occur too frequently throttle
I want to compute the sum of its values sum
the average average
using custom logic and only output the final value aggregate
reduce
and output the values as they are calculated scan
I want to wrap its messages with metadata that describes each message materialize
that includes the time past since the last value timeInterval
that includes a timestamp timestamp
after a period of inactivity I want to throw an error timeout
I want to switch to another sequence timeout
I want ensure there is only one value and throw an error if there are more or less than one value single
and use the default value if there are no values singleOrDefault
I want to only take the first value and throw an error if there are no values first
and use the default value if there are no values firstOrDefault
within a time period sample
I want to only take the last value and error if there are no values last
and use the default value if there are no values lastOrDefault
I want to know how many values it contains count
I want to know if it includes a value contains
I want to know if a condition is satisfied by any of its values some
by all of its values all/every
I want to delay messages by a specific amount of time delay
based on custom logic delayWithSelector
I want to group the values until the sequence completes toArray
toMap
toSet
using custom logic as arrays buffer
as sequences window
in batches of a particular size as arrays bufferWithCount
as sequences windowWithCount
based on time as arrays bufferWithTime
as sequences windowWithTime
based on time or count, whichever happens first as arrays bufferWithTimeOrCount
as sequences windowWithTimeOrCount
based on a key until the sequence completes groupBy
and control the lifetime of each group groupByUntil
I want to start a new sequence for each value and emit the values from all sequences in parallel flatMap/selectMany
and emit the values from each sequence in order concatMap/selectConcat
and cancel the previous sequence when a new value arrives flatMapLatest/selectSwitch
and recursively start a new sequence for each new value expand
and emit values from all sequences depending for onNext, onError, and onCompleted in parallel flatMapObserver/selectManyObserver
and emit values from all sequences depending for onNext, onError, and onCompleted in order concatMapObserver/selectConcatObserver
I want to combine it with another And be notified when both have completed forkJoin
I want to perform complex operations without breaking the fluent calls let
I want to share a subscription between multiple subscribers using a specific subject implementation multicast
publish
share
and suppy the last value to future subscribers publishLast
shareLast
and replay a default or the latest value to future subscribers publishValue
shareValue
and replay n number of values to future subscribers replay
shareReplay
when an error occurs I want to re-subscribe retry
I want to start a new sequence catch
that depends on the error catch
when it completes I want to re-subscribe repeat
I want to start a new sequence concat
when it completes or errors I want to start a new sequence onErrorResumeNext
when it completes, errors or unsubscribes I want to execute a function finally
I want to change the scheduler that routes calls to subscribe subscribeOn
messages observeOn
Using two sequences I want to decide which to receive values from based on which one has values first amb
I want to determine if their values are equal sequenceEqual
I want to combine their values only when the first sequence emits, using the latest value from each withLatestFrom
in order reusing the latest value when unchanged combineLatest
using each value only once zip
that share overlapping “lifetime†that I choose and be notified for each combination join
and be given a sequence of “rights†for each “left†groupJoin
I want to include values from both merge
## See Also ## *Reference* - [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) *Concepts* - [Querying Observable Sequences](querying.md) - [Operators By Category](categories.md) RxJS-4.1.0/doc/gettingstarted/which-static.md000066400000000000000000000231511266736161100210630ustar00rootroot00000000000000# Which Operator to Use? - Creation Operators # Use this page to find the creation operator implemented by the [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) type that fits your needs: Static methods
I want to create a new sequence using custom logic Observable.create
that works like a for-loop Observable.generate
and emits the values over time Observable.generateWithRelativeTime
Observable.generateWithAbsoluteTime
that returns a value Observable.return/just
multiple times Observable.repeat
that throws an error Observable.throw
that completes Observable.empty
that never does anything Observable.never
from an event Observable.fromEvent
that uses custom functions to add and remove event handlers Observable.fromEventPattern
from an ES6 Promise Observable.fromPromise
that iterates over the values in an array Observable.fromArray
of object key/values Observable.pairs
of asynchronous elements Observable.for
over values in a numeric range Observable.range
over the values in an iterable, array or array-like object Observable.from
over arguments Observable.of
that emits values on a timer Observable.interval
with an optional initial delay Observable.timer
that calls a function with no arguments on a specific scheduler Observable.start
asynchronously Observable.startAsync
decided at subscribe-time based on a boolean condition Observable.if
from a pre-set set of sequences Observable.case
using custom logic Observable.defer
that depends on a resource Observable.using
I want to wrap a function and yield the result in a sequence Observable.toAsync
which accepts a callback Observable.fromCallback
which accepts a Node.js callback Observable.fromNodeCallback
I want to combine multiple sequences and only receive values from the sequence that yields a value first Observable.amb
and be notified when all of them have finished Observable.forkJoin
and output the values from all of them Observable.merge
in order reusing the latest value when unchanged Observable.combineLatest
using each value only once Observable.zip
by subscribing to each in order when the previous sequence completes Observable.concat
when the previous sequence errors Observable.catch
regardless of whether the previous sequence completes or errors Observable.onErrorResumeNext
by responding to different combinations of values (join calculus) Observable.when
## See Also ## *Reference* - [`Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) *Concepts* - [Querying Observable Sequences](querying.md) - [Operators By Category](categories.md) RxJS-4.1.0/doc/howdoi/000077500000000000000000000000001266736161100144115ustar00rootroot00000000000000RxJS-4.1.0/doc/howdoi/angular.md000066400000000000000000000100641266736161100163650ustar00rootroot00000000000000# How do I integrate Angular.js with RxJS? # [AngularJS](http://angularjs.org/) is a popular MV* framework for JavaScript which covers things such as data binding, controllers as well as things such as dependency injection. The Reactive Extensions for JavaScript plays well with this framework, and in fact has a dedicated library for interop called [rx.angular.js](https://github.com/Reactive-Extensions/rx.angular.js). However, if you don't wish to use that, here are some simple ways you can integrate the two together. ## Integration with Scopes The [`scope`](http://docs.angularjs.org/api/ng.$rootScope.Scope) is an object that refers to the application model. It is an execution context for expressions. Scopes are arranged in hierarchical structure which mimic the DOM structure of the application. Scopes can watch expressions and propagate events. Scopes provide the ability to observe change mutations on the scope through the [`$watch`](http://docs.angularjs.org/api/ng.$rootScope.Scope#methods_$watch) method. This is a perfect opportunity to integrate the power of the Reactive Extensions for JavaScript with Angular. Let's look at a typical usage of `$watch`. ```js // Get the scope from somewhere var scope = $rootScope; scope.name = 'Reactive Extensions'; scope.counter = 0; scope.$watch('name', function(newValue, oldValue) { scope.counter = scope.counter + 1; scope.oldValue = oldValue; scope.newValue = newValue; }); // Process All the Watchers scope.$digest(); // See the counter increment console.log(counter); // => 1 ``` Using the Reactive Extensions for JavaScript, we're able to easily bind to this by wrapping the `$watch` as an observable. To do this, we'll create an observable sequence using `Rx.Observable.create` which gives us an observer to yield to. In this case, we'll capture both the old and new values through our listener function. The `$watch` function returns a function, which when called, ceases the watch expression. ```js Rx.Observable.$watch = function (scope, watchExpression, objectEquality) { return Rx.Observable.create(function (observer) { // Create function to handle old and new Value function listener (newValue, oldValue) { observer.onNext({ oldValue: oldValue, newValue: newValue }); } // Returns function which disconnects the $watch expression return scope.$watch(watchExpression, listener, objectEquality); }); }; ``` Now that we have this, we're able to now take the above example and now add some RxJS goodness to it. ```js // Get the scope from somewhere var scope = $rootScope; scope.name = 'Reactive Extensions'; scope.isLoading = false; scope.data = []; // Watch for name change and throttle it for 1 second and then query a service Rx.Observable.$watch(scope, 'name') .throttle(1000) .map(function (e) { return e.newValue; }) .do(function () { // Set loading and reset data scope.isLoading = true; scope.data = []; }) .flatMapLatest(querySomeService) .subscribe(function (data) { // Set the data scope.isLoading = false; scope.data = data; }); ``` ## Integration with Deferred/Promise Objects AngularJS ships a promise/deferred implementation based upon [Kris Kowal's Q](https://github.com/kriskowal/q) called the [`$q`](http://docs.angularjs.org/api/ng.$q) service. Promises are quite useful in scenarios with one and done asynchronous operations such as querying a service through the [`$http`](http://docs.angularjs.org/api/ng.$http) service. ```js $http.get('/someUrl') .then(successCallback, errCallback); ``` Using the Reactive Extensions for JavaScript, we can also integrate using the `Rx.Observable.fromPromise` bridge available in RxJS version 2.2+. We simply ```js // Query data var observable = Rx.Observable.fromPromise( $http({ method: 'GET', url: 'someurl', params: { searchString: $scope.searchString } }) ); // Subscribe to data and update UI observable.subscribe( function (data) { $scope.data = data; }, function (err) { $scope.error = err.message; } ); ``` These are just only the beginnings of what you can do with the Reactive Extensions for JavaScript and AngularJS. RxJS-4.1.0/doc/howdoi/createcustomoperators.md000066400000000000000000000000771266736161100213740ustar00rootroot00000000000000# Creating Your Own Custom Operators Final Result ```js ``` RxJS-4.1.0/doc/howdoi/eventemitter.md000066400000000000000000000071171266736161100174540ustar00rootroot00000000000000# How do I create a custom event emitter? # Publish/Subscribe is a common pattern within JavaScript applications. The idea is that you have a publisher that emits events and you have consumers which register their interest in a given event. Typically you may see something like the following where you listen for a 'data' event and then the event emitter publishes data to it. ```js var emitter = new Emitter(); function logData(data) { console.log('data: ' + data); } emitter.on('data', logData); emitter.emit('data', 'foo'); // => data: foo // Destroy handler emitter.off('data', logData); ``` How might one implement this using the Reactive Extensions for JavaScript? Using an `Rx.Subject` will solve this problem easily. As you may remember, an `Rx.Subject` is both an Observer and Observable, so it handles both publish and subscribe. ```js var subject = new Rx.Subject(); var subscription = subject.subscribe(function (data) { console.log('data: ' + data); }); subject.onNext('foo'); // => data: foo ``` Now that we have a basic understanding of publish and subscribe through `onNext` and `subscribe`, let's put it to work to handle multiple types of events at once. First, we'll create an Emitter class which has three main methods, `emit`, `on` and `off` which allows you to emit an event, listen to an event and stop listening to an event. ```js var hasOwnProp = {}.hasOwnProperty; function createName (name) { return '$' + name; } function Emitter() { this.subjects = {}; } Emitter.prototype.emit = function (name, data) { var fnName = createName(name); this.subjects[fnName] || (this.subjects[fnName] = new Rx.Subject()); this.subjects[fnName].onNext(data); }; Emitter.prototype.on = function (name, handler) { var fnName = createName(name); this.subjects[fnName] || (this.subjects[fnName] = new Rx.Subject()); this.subjects[fnName].subscribe(handler); }; Emitter.prototype.off = function (name, handler) { var fnName = createName(name); if (this.subjects[fnName]) { this.subjects[fnName].dispose(); delete this.subjects[fnName]; } }; Emitter.prototype.dispose = function () { var subjects = this.subjects; for (var prop in subjects) { if (hasOwnProp.call(subjects, prop)) { subjects[prop].dispose(); } } this.subjects = {}; }; ``` Then we can use it much as we did above. As the call to `subscribe` returns a subscription, we might want to hand that back to the user instead of providing an off method. So, we could rewrite the above where we call the `on` method to `listen` and we return a subscription handle to the user to stop listening. ```js var hasOwnProp = {}.hasOwnProperty; function createName (name) { return '$' + name; } function Emitter() { this.subjects = {}; } Emitter.prototype.emit = function (name, data) { var fnName = createName(name); this.subjects[fnName] || (this.subjects[fnName] = new Rx.Subject()); this.subjects[fnName].onNext(data); }; Emitter.prototype.listen = function (name, handler) { var fnName = createName(name); this.subjects[fnName] || (this.subjects[fnName] = new Rx.Subject()); return this.subjects[fnName].subscribe(handler); }; Emitter.prototype.dispose = function () { var subjects = this.subjects; for (var prop in subjects) { if (hasOwnProp.call(subjects, prop)) { subjects[prop].dispose(); } } this.subjects = {}; }; ``` Now we can use this to rewrite our example such as the following: ```js var emitter = new Emitter(); var subcription = emitter.listen('data', function (data) { console.log('data: ' + data); }); emitter.emit('data', 'foo'); // => data: foo // Destroy the subscription subscription.dispose(); ``` RxJS-4.1.0/doc/howdoi/jquery.md000066400000000000000000000140371266736161100162570ustar00rootroot00000000000000# How do I work with jQuery and RxJS # The [jQuery](http://jquery.com) project and RxJS play very well together as libraries. In fact, we supply bindings directly for RxJS to jQuery should you want to wrap animations, events, Ajax calls and more using Observables in [RxJS-jQuery](https://github.com/Reactive-Extensions/RxJS-jQuery). The bindings library provides many handy features for bridging the world to Observables. If you're interested in that library, go ahead and use it. ## Using RxJS with Rx-jQuery ## Getting started with the bindings is easy. Each method is enumerated on the main page from the jQuery method to its RxJS counterpart. ```html
``` Now we can start using the bindings! For example, we can listen to a `click` event and then by using `flatMap` or `selectMap` we can animate by calling `animateAsObservable`. Finally, we can subscribe to cause the side effect and nothing more. ```js $( "#go" ).clickAsObservable().flatMap(function () { return $( "#block" ).animateAsObservable({ width: "70%", opacity: 0.4, marginLeft: "0.6in", fontSize: "3em", borderWidth: "10px" }, 1500 ); }).subscribe(); ``` ## Using RxJS with jQuery ## Let's start though by assuming you just have RxJS and wanted to get started with jQuery without the bridge library. There is already plenty you can do without even needing a bridge library with the support built in for events and promises. ### Binding to an event ### Using RxJS with jQuery to bind to an event using plain old RxJS is easy. For example, we could bind to the `mousemove` event from the DOM document easily. First, we'll reference the files we need. ```html
``` ```js var observable = Rx.Observable.fromEvent( $(document), 'mousemove'); var subscription = observable.subscribe(function (e) { $('#results').text(e.clientX + ',' + e.clientY); }); ``` We could go a step further and create our own jQuery plugin which handles events with ease. ```js /** * Creates an observable sequence by adding an event listener to the matching jQuery element * * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ jQuery.fn.toObservable = function (eventName, selector) { return Rx.Observable.fromEvent(this, eventName, selector); }; ``` Now we could rewrite our above example such as this. ```js var observable = $(document).toObservable('mousemove'); var subscription = observable.subscribe(function (e) { $('#results').text(e.clientX + ',' + e.clientY); }); ``` ### Using RxJS with Ajax calls ### Bridging to jQuery Ajax calls using [`$.ajax`](http://api.jquery.com/jQuery.ajax/) is easy as well with the built-in [Promises A+](https://github.com/promises-aplus/promises-spec) support. Since jQuery 1.5, the `$.ajax` method has implemented a promise interface (even if not 100% pure) which allows us to bridge to an observable sequence via the `Rx.Observable.fromPromise` method. For example, we could query Wikipedia by calling the `$.ajax` method and then calling the [`promise`](http://api.jquery.com/deferred.promise/) method which then exposes the minimum promise interface needed. ```js function searchWikipedia (term) { var promise = $.ajax({ url: 'http://en.wikipedia.org/w/api.php', dataType: 'jsonp', data: { action: 'opensearch', format: 'json', search: encodeURI(term) } }).promise(); return Rx.Observable.fromPromise(promise); } ``` Once we created the wrapper, we can query the service by getting the text and then using `flatMapLatest` to ensure we have no out of order results. ```js $('#input').toObservable('keyup') .map(function (e) { return e.target.value; }) .flatMapLatest(searchWikipedia) .subscribe(function (data) { var results = data[1]; $.each(results, function (_, result) { // Do something with each result }); }); ``` ### Using RxJS with Callbacks to Handle Simple Animations ### RxJS can also be used to bind to simple callbacks, such as the [`.animate()`](http://api.jquery.com/animate/) method. We can use `Rx.Observable.fromCallback` to supply the required arguments with the last argument is to be the callback. In this example, we'll take the animation example from above and use nothing but core RxJS to accomplish the same thing. You'll note that we need a notion of `this` for the `block.animate` to properly work, so we have two choices, either use `Function.prototype.bind` available in most modern browsers... ```js var animate = Rx.Observable.fromCallback(block.animate.bind(block)); ``` Or we can supply an optional argument which supplies the context to the callback such as the following... ```js var animate = Rx.Observable.fromCallback( block.animate, null, /* default scheduler used */ block /* context */); ``` When viewed in its entirety, it will look like this where we call `flatMap` or `selectMany` to compose together two observable sequences. We then bind to the `animate` function through `Rx.Observable.fromCallback` and then return the observable which results from the function execution. Our `subscribe` does nothing in this case as there is nothing to print or do, and is simply a side effect. ```js var block = $('#block'); $('#go').toObservable('click').flatMap(function () { var animate = Rx.Observable.fromCallback(block.animate.bind(block)); return animate({ width: "70%", opacity: 0.4, marginLeft: "0.6in", fontSize: "3em", borderWidth: "10px" }, 1500); }).subscribe(); ``` RxJS-4.1.0/doc/howdoi/wrap.md000066400000000000000000000077071266736161100157170ustar00rootroot00000000000000# Wrap an Existing API with RxJS One question that often comes up is how can I wrap an existing API into an Observable sequence? The answer is fairly simple and not a lot of lines of code to make that happen. To make this a bit more concrete, let's take a familiar HTML5 API like [Geolocation API](http://dev.w3.org/geo/api/spec-source.html), in particular, the `navigator.geolocation.watchPosition` method. The typical use of this method might be the following where we would hook up an event handler to listen for success and errors on watching the geolocation by using the `navigator.geolocation.watchPosition` method. When one wishes to terminate listening for geolocation updates, you simply call the `navigator.geolocation.clearWatch` method passing in the watch ID returned from the `watchPosition` method. ```js function watchPositionChanged(e) { // Do something with the coordinates } function watchPositionError(e) { // Handle position error } var watchId = navigator.geolocation.watchPosition( watchPositionChanged, watchPositionError); var stopWatching = document.querySelector('#stopWatching'); stopWatching.addEventListener('click', stopWatchingClicked, false); // Clear watching upon click function stopWatchingClicked(e) { navigator.geolocation.clearWatch(watchId) } ``` In order to wrap this, we'll need to use the [`Rx.Observable.create`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservablecreatesubscribe) method. From this, we can yield values to the observer or handle the errors. Let's see how the code might look, creating a watchPosition method which takes geolocation options. ```js function watchPosition(geolocationOptions) { return Rx.Observable.create(function (observer) { var watchId = window.navigator.geolocation.watchPosition( function successHandler (loc) { observer.onNext(loc); }, function errorHandler (err) { observer.onError(err); }, geolocationOptions); return function () { window.navigator.geolocation.clearWatch(watchId); }; }); } ``` We need to also be aware of ensuring we're not adding too many watchPosition calls as we compose it together with other observable sequences. To do that, we'll need to utilize the [`publish`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#rxobservableprototypepublishselector) and [`refCount`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md#connectableobservableprototyperefcount) methods from rx.binding.js. Our final result should look like the following: ```js function watchPosition(geolocationOptions) { return Rx.Observable.create(function (observer) { var watchId = window.navigator.geolocation.watchPosition( function successHandler (loc) { observer.onNext(loc); }, function errorHandler (err) { observer.onError(err); }, geolocationOptions); return function () { window.navigator.geolocation.clearWatch(watchId); }; }).publish().refCount(); } ``` And now we can consume the geolocation such as: ```js var source = watchPosition(); var subscription = source.subscribe( function (position) { console.log('Next:' + position.coords.latitude + ',' + position.coords.longitude); }, function (err) { var message = ''; switch (err.code) { case err.PERMISSION_DENIED: message = 'Permission denied'; break; case err.POSITION_UNAVAILABLE: message = 'Position unavailable'; break; case err.PERMISSION_DENIED_TIMEOUT: message = 'Position timeout'; break; } console.log('Error: ' + message); }, function () { console.log('Completed'); }); ``` RxJS-4.1.0/doc/libraries/000077500000000000000000000000001266736161100150745ustar00rootroot00000000000000RxJS-4.1.0/doc/libraries/core/000077500000000000000000000000001266736161100160245ustar00rootroot00000000000000RxJS-4.1.0/doc/libraries/core/rx.core.binding.md000066400000000000000000000053311266736161100213410ustar00rootroot00000000000000# RxJS Core Binding Module # The Reactive Extensions for JavaScript has a notion of hot and cold observables. Hot observables fire whether you are listening to them or not, such as mouse movements. Cold observables on the other hand, such as a sequence created from an array will fire the same sequence to all subscribers. The Core Binding module gives you the ability to replay events for hot observables, and to turn cold observables into hot observables. The primary use case is for those who are implementing libraries compatible with RxJS to be able to handle hot and cold observables. ## Details ## Files: - [`rx.core.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.core.binding.js) NPM Packages: - [`rx-core-binding`](https://www.npmjs.com/package/rx-core-binding) NuGet Packages: - _None_ File Dependencies: - [`rx.core.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.core.js) NuGet Dependencies: - _None_ ## Included Observable Operators ## ### `Observable Instance Methods` - [`connect`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/connect.md) - [`publish`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/publish.md) - [`publishLast`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/publishlast.md) - [`publishValue`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/publishvalue.md) - [`refCount`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/refcount.md) - [`replay`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/replay.md) - [`share`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/share.md) - [`shareLast`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/sharelast.md) - [`shareReplay`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/sharereplay.md) - [`shareValue`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/sharevalue.md) - [`singleInstance`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/singleinstance.md) ## Included Classes ## ### Subjects - [`Rx.AsyncSubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/asyncsubject.md) - [`Rx.Subject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/subjects/subject.md) - [`Rx.BehaviorSubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.mdapi/subjects/behaviorsubject.md) - [`Rx.ReplaySubject`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.mdapi/subjects/replaysubject.md) RxJS-4.1.0/doc/libraries/core/rx.core.md000066400000000000000000000031651266736161100177330ustar00rootroot00000000000000# RxJS Core Module # The Reactive Extensions for JavaScript's core functionality for conforming to the RxJS contract can be found here. This module contains only the bare essentials including Disposables, Schedulers, Observer and Observable. This is made available with the `rx.core.js` file. The primary use case for this file is for those who want to implement a minimal implementation of RxJS for their own usage. ## Details ## Files: - [`rx.core.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.core.js) NPM Packages: - [`rx-core`](https://www.npmjs.com/package/rx-core) NuGet Packages: - _None_ ## Included Classes ## ### Core Objects - [`Rx.Observer`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observer.md) - [`Rx.Observable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/observable.md) ### `Observable Methods` - [`create`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/create.md) ### Schedulers - [`Rx.Scheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/scheduler.md) ### Disposables - [`Rx.CompositeDisposable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/disposables/compositedisposable.md) - [`Rx.Disposable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/disposables/disposable.md) - [`Rx.SerialDisposable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/disposables/serialdisposable.md) - [`Rx.SingleAssignmentDisposable`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/disposables/singleassignmentdisposable.md) RxJS-4.1.0/doc/libraries/core/rx.core.testing.md000066400000000000000000000025251266736161100214060ustar00rootroot00000000000000# RxJS Core Testing Module # The Reactive Extensions for JavaScript has a built-in mechanism for testing all operators which allows for mocking absolute and relative time with ease for use with `rx.core.js` and `rx.core.binding.js` ## Details ## Files: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.core.testing.js) NPM Packages: - [`rx-core-testing`](https://www.npmjs.com/package/rx-core-testing) NuGet Packages: - _None_ File Dependencies: - [`rx.core.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.core.js) NuGet Dependencies: - _None_ ## Included Classes ## ### Core Objects - [`Rx.Notification`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/notification.md) ### Schedulers - [`Rx.TestScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/testscheduler.md) - [`Rx.VirtualTimeScheduler`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/schedulers/virtualtimescheduler.md) ### Testing Classes - [`Rx.ReactiveTest`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/reactivetest.md) - [`Rx.Recorded`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/recorded.md) - [`Rx.Subscription`](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/testing/subscription.md) RxJS-4.1.0/doc/libraries/lite/000077500000000000000000000000001266736161100160315ustar00rootroot00000000000000RxJS-4.1.0/doc/libraries/lite/rx.lite.aggregates.md000066400000000000000000000051451266736161100220550ustar00rootroot00000000000000# RxJS Lite Aggregates Module # The Reactive Extensions for JavaScript has a number of aggregation operators including those you might already know from the Array#extras and the upcoming ES6 standard such as `reduce`, `find` and `findIndex`. This module is used exclusively for aggregation operations used on finite observable sequences. In addition to the aforementioned operators, there are many useful operators such as `count`, `sum`, `average` and determining whether two sequences are equal via the `sequenceEqual` method. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-aggregates/rx.lite.aggregates.js) [`rx.lite.aggregates.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-aggregates-compat/rx.lite.aggregates.compat.js) NPM Packages: - [`rx-lite-aggregates`](https://www.npmjs.org/package/rx) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ### `Observable Instance Methods` - [`aggregate`](../../api/core/operators/reduce.md) - [`all`](../../api/core/operators/every.md) - [`any`](../../api/core/operators/some.md) - [`average`](../../api/core/operators/average.md) - [`includes`](../../api/core/operators/includes.md) - [`count`](../../api/core/operators/count.md) - [`elementAt`](../../api/core/operators/elementat.md) - [`every`](../../api/core/operators/every.md) - [`find`](../../api/core/operators/find.md) - [`findIndex`](../../api/core/operators/findindex.md) - [`first`](../../api/core/operators/first.md) - [`indexOf`](../../api/core/operators/indexof.md) - [`isEmpty`](../../api/core/operators/isempty.md) - [`last`](../../api/core/operators/last.md) - [`lastIndexOf`](../../api/core/operators/lastindexof.md) - [`max`](../../api/core/operators/max.md) - [`maxBy`](../../api/core/operators/maxby.md) - [`min`](../../api/core/operators/min.md) - [`minBy`](../../api/core/operators/minby.md) - [`reduce`](../../api/core/operators/reduce.md) - [`sequenceEqual`](../../api/core/operators/sequenceequal.md) - [`single`](../../api/core/operators/single.md) - [`slice`](../../api/core/operators/slice.md) - [`some`](../../api/core/operators/some.md) - [`sum`](../../api/core/operators/sum.md) - [`toMap`](../../api/core/operators/tomap.md) - [`toSet`](../../api/core/operators/toset.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.async.md000066400000000000000000000023441266736161100210570ustar00rootroot00000000000000# RxJS Lite Async Module # The Reactive Extensions for JavaScript provides support for using generators with RxJS, as well as starting async methods or turning functions into async functions. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-async/rx.lite.async.js) [`rx.lite.async.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-async-compat/rx.lite.async.compat.js) NPM Packages: - [`rx-lite-async`](https://www.npmjs.org/package/rx-lite-async) - [`rx-lite-async-compat`](https://www.npmjs.org/package/rx-lite-async-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ### `Observable Methods` - [`spawn`](../../api/core/operators/spawn.md) - [`start`](../../api/core/operators/start.md) - [`startAsync`](../../api/core/operators/startasync.md) - [`toAsync`](../../api/core/operators/toasync.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.coincidence.md000066400000000000000000000033411266736161100222030ustar00rootroot00000000000000# RxJS Lite Coincidence Module # The Reactive Extensions for JavaScript has a set of coincidence-based operators such as `join` and `groupJoin` which allow one to correlate two observable sequences much as you would do in SQL. There is also support for advanced windowing and bufferring capabilities which allow for the specification of opening and closing observable sequences to denote how much data to capture. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-coincidence/rx.lite.coincidence.js) - [`rx.lite.coincidence.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-coincidence-compat/rx.lite.coincidence.compat.js) NPM Packages: - [`rx-lite-coincidence`](https://www.npmjs.org/package/rx-lite-coincidence) - [`rx-lite-coincidence-compat`](https://www.npmjs.org/package/rx-lite-coincidence-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ## `Observable Instance Methods` - [`buffer`](../../api/core/operators/buffer.md) - [`groupBy`](../../api/core/operators/groupby.md) - [`groupByUntil`](../../api/core/operators/groupbyuntil.md) - [`groupJoin`](../../api/core/operators/groupjoin.md) - [`join`](../../api/core/operators/join.md) - [`pairwise`](../../api/core/operators/pairwise.md) - [`partition`](../../api/core/operators/partition.md) - [`window`](../../api/core/operators/window.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.experimental.md000066400000000000000000000040371266736161100224400ustar00rootroot00000000000000# RxJS Lite Experimental Module # The Reactive Extensions for JavaScript has a number of operators that are considered experimental and not ready for mainstream usage. This includes imperative operators such as `if`, `case`, `for`, `while`, `doWhile` as well as operators such as `forkJoin`. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-experimental/rx.lite.experimental.js) - [`rx.lite.experimental.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-experimental-compat/rx.lite.experimental.compat.js) NPM Packages: - [`rx-lite-experimental`](https://www.npmjs.org/package/rx-lite-experimental) - [`rx-lite-experimental-compat`](https://www.npmjs.org/package/rx-lite-experimental-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ### `Observable Methods` - [`case`](../../api/core/operators/case.md) - [`for`](../../api/core/operators/for.md) - [`forkJoin`](../../api/core/operators/forkjoin.md) - [`if`](../../api/core/operators/if.md) - [`while`](../../api/core/operators/while.md) ### `Observable Instance Methods` - [`doWhile`](/api/core/operators/dowhile.md) - [`expand`](../../api/core/operators/expand.md) - [`extend`](../../api/core/operators/manyselect.md) - [`flatMapFirst`](../../api/core/operators/flatmapfirst.md) - [`flatMapWithMaxConcurrent`](../../api/core/flatmapwithmaxconcurrent.md) - [`forkJoin`](../../api/core/operators/forkjoinproto.md) - [`let`](../../api/core/operators/let.md) - [`manySelect`](../../api/core/operators/manyselect.md) - [`selectSwitchFirst`](../../api/core/operators/flatmapfirst.md) - [`selectWithMaxConcurrent`](../../api/core/operators/flatmapwithmaxconcurrent.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.extras.md000066400000000000000000000031701266736161100212460ustar00rootroot00000000000000# RxJS Lite Extras # The Reactive Extensions for JavaScript's lite extras are the operators that are found on `rx.js` and `rx.compat.js` but not available in `rx.lite.js` and `rx.lite.compat.js`. By adding this file, you will have full access to all operators and thus makes including other files such as `rx.time.js`, `rx.joinpatterns.js` and others easier. ## Details ## Files: - [`rx.lite.extras.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.extras.js) NPM Packages: - [`rx-lite-extras`](https://www.npmjs.org/package/rx-lite-extras) NuGet Packages: - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ### `Observable Methods` - [`amb`](../../api/core/operators/amb.md) - [`generate`](../../api/core/operators/generate.md) - [`onErrorResumeNext`](../../api/core/operators/onerrorresumenext.md) - [`using`](../../api/core/operators/using.md) ### `Observable Instance Methods` - [`amb`](../../api/core/operators/ambproto.md) - [`bufferWithCount`](../../api/core/operators/bufferwithcount.md) - [`distinct`](../../api/core/operators/distinct.md) - [`observeOn`](../../api/core/operators/observeon.md) - [`onErrorResumeNext`](../../api/core/operators/onerrorresumenext.md) - [`subscribeOn`](../../api/core/operators/subscribeon.md) - [`takeLastBuffer`](../../api/core/operators/takelastbuffer.md) - [`windowWithCount`](../../api/core/operators/windowwithcount.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.joinpatterns.md000066400000000000000000000024501266736161100224600ustar00rootroot00000000000000# RxJS Lite Join Patterns Module # The Reactive Extensions for JavaScript also supports join calculus in that you can easily create patterns for when certain observable sequences fire. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.joinpatterns.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-joinpatterns/rx.lite.joinpatterns.js) - [`rx.lite.joinpatterns.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-joinpatterns-compat/rx.lite.joinpatterns.compat.js) NPM Packages: - [`rx-lite-joinpatterns`](https://www.npmjs.org/package/rx-lite-joinpatterns) - [`rx-lite-joinpatterns-compat`](https://www.npmjs.org/package/rx-lite-joinpatterns-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ### `Observable Methods` - [`when`](../../api/core/operators/when.md) ### `Observable Instance Methods` - [`and`](../../api/core/operators/and.md) ### `Pattern Instance Methods` - [`thenDo`](../../api/core/operators/thendo.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.md000066400000000000000000000156271266736161100177530ustar00rootroot00000000000000# RxJS Lite Module # The Reactive Extensions for JavaScript Lite version is a lightweight version of the Reactive Extensions for JavaScript which covers most of the day to day operators you might use all in a single library. Functionality such as bridging to events, promises, callbacks, Node.js-style callbacks, time-based operations and more are built right in. This comes with both `rx.lite.js` which is for use in modern development environments such as > IE9 and server-side environments such as Node.js. We also have `rx.lite.compat.js` which has backwards compatibility to browsers which do not support all required ES5 features. ## Details ## Files: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx-lite`](https://www.npmjs.org/package/rx-lite) NuGet Packages: - [`RxJS-Lite`](https://www.nuget.org/packages/RxJS-Lite/) ## Included Observable Operators ## ### `Observable Methods` - [`catch`](../../api/core/operators/catch.md) - [`concat`](../../api/core/operators/concat.md) - [`create`](../../api/core/operators/create.md) - [`defer`](../../api/core/operators/defer.md) - [`empty`](../../api/core/operators/empty.md) - [`from`](../../api/core/operators/from.md) - [`fromArray`](../../api/core/operators/fromarray.md) - [`fromCallback`](../../api/core/operators/fromcallback.md) - [`fromEvent`](../../api/core/operators/fromevent.md) - [`fromEventPattern`](../../api/core/operators/fromeventpattern.md) - [`fromNodeCallback`](../../api/core/operators/fromnodecallback.md) - [`fromPromise`](../../api/core/operators/frompromise.md) - [`interval`](../../api/core/operators/interval.md) - [`just`](../../api/core/operators/return.md) - [`merge`](../../api/core/operators/merge.md) - [`mergeDelayError`](../../api/core/operators/mergedelayerror.md) - [`never`](../../api/core/operators/never.md) - [`of`](../../api/core/operators/of.md) - [`ofWithScheduler`](../../api/core/operators/ofwithscheduler.md) - [`pairs`](../../api/core/operators/pairs.md) - [`range`](../../api/core/operators/range.md) - [`repeat`](../../api/core/operators/repeat.md) - [`return`](../../api/core/operators/return.md) - [`throw`](../../api/core/operators/throw.md) - [`timer`](../../api/core/operators/timer.md) - [`zip`](../../api/core/operators/zip.md) ### `Observable Instance Methods` - [`asObservable`](../../api/core/operators/asobservable.md) - [`catch`](../../api/core/operators/catchproto.md) - [`combineLatest`](../../api/core/operators/combinelatest.md) - [`concat`](../../api/core/operators/concatproto.md) - [`concatMap`](../../api/core/operators/concatmap.md) - [`connect`](../../api/core/operators/connect.md) - [`debounce`](../../api/core/operators/debounce.md) - [`defaultIfEmpty`](../../api/core/operators/defaultifempty.md) - [`delay`](../../api/core/operators/delay.md) - [`dematerialize`](../../api/core/operators/dematerialize.md) - [`distinctUntilChanged`](../../api/core/operators/distinctuntilchanged.md) - [`do`](../../api/core/operators/do.md) - [`doOnNext`](../../api/core/operators/doonnext.md) - [`doOnError`](../../api/core/operators/doonerror.md) - [`doOnCompleted`](../../api/core/operators/dooncompleted.md) - [`filter`](../../api/core/operators/where.md) - [`finally`](../../api/core/operators/finally.md) - [`flatMap`](../../api/core/operators/selectmany.md) - [`flatMapLatest`](../../api/core/operators/flatmaplatest.md) - [`ignoreElements`](../../api/core/operators/ignoreelements.md) - [`map`](../../api/core/operators/select.md) - [`merge`](../../api/core/operators/mergeproto.md) - [`mergeAll`](../../api/core/operators/mergeall.md) - [`multicast`](../../api/core/operators/multicast.md) - [`publish`](../../api/core/operators/publish.md) - [`publishLast`](../../api/core/operators/publishlast.md) - [`publishValue`](../../api/core/operators/publishvalue.md) - [`refCount`](../../api/core/operators/refcount.md) - [`repeat`](../../api/core/operators/repeat.md) - [`repeatWhen`](../../api/core/operators/repeatwhen.md) - [`replay`](../../api/core/operators/replay.md) - [`retry`](../../api/core/operators/retry.md) - [`retryWhen`](../../api/core/operators/retrywhen.md) - [`sample`](../../api/core/operators/sample.md) - [`scan`](../../api/core/operators/scan.md) - [`select`](../../api/core/operators/select.md) - [`selectConcat`](../../api/core/operators/concatmap.md) - [`selectMany`](../../api/core/operators/selectmany.md) - [`selectSwitch`](../../api/core/operators/flatmaplatest.md) - [`singleInstance`](../../api/core/operators/singleinstance.md) - [`skip`](../../api/core/operators/skip.md) - [`skipLast`](../../api/core/operators/skiplast.md) - [`skipUntil`](../../api/core/operators/skipuntil.md) - [`skipWhile`](../../api/core/operators/skipwhile.md) - [`startWith`](../../api/core/operators/startwith.md) - [`subscribe | forEach`](../../api/core/operators/subscribe.md) - [`subscribeOnNext`](../../api/core/operators/subscribeonnext.md) - [`subscribeOnError`](../../api/core/operators/subscribeonerror.md) - [`subscribeOnCompleted`](../../api/core/operators/subscribeoncompleted.md) - [`switch | switchLatest`](../../api/core/operators/switch.md) - [`take`](../../api/core/operators/take.md) - [`takeLast`](../../api/core/operators/takelast.md) - [`takeUntil`](../../api/core/operators/takeuntil.md) - [`takeWhile`](../../api/core/operators/takewhile.md) - [`tap`](../../api/core/operators/do.md) - [`tapOnNext`](../../api/core/operators/doonnext.md) - [`tapOnError`](../../api/core/operators/doonerror.md) - [`tapOnCompleted`](../../api/core/operators/dooncompleted.md) - [`throttle`](../../api/core/operators/throttle.md) - [`timeout`](../../api/core/operators/timeout.md) - [`timestamp`](../../api/core/operators/timestamp.md) - [`toArray`](../../api/core/operators/toarray.md) - [`toPromise`](../../api/core/operators/topromise.md) - [`transduce`](../../api/core/operators/transduce.md) - [`where`](../../api/core/operators/where.md) - [`withLatestFrom`](../../api/core/operators/withlatestfrom.md) - [`zip`](../../api/core/operators/zipproto.md) - [`zipIterable`](../../api/core/operators/zipiterable.md) ## Included Classes ## ### Core Objects - [`Rx.Observer`](../../api/core/observer.md) - [`Rx.Notification`](../../api/core/notification.md) ### Subjects - [`Rx.AsyncSubject`](../../api/subjects/asyncsubject.md) - [`Rx.BehaviorSubject`](../../api/subjects/behaviorsubject.md) - [`Rx.ReplaySubject`](../../api/subjects/replaysubject.md) - [`Rx.Subject`](../../api/subjects/subject.md) ### Schedulers - [`Rx.Scheduler`](../../api/schedulers/scheduler.md) ### Disposables - [`Rx.CompositeDisposable`](../../api/disposables/compositedisposable.md) - [`Rx.Disposable`](../../api/disposables/disposable.md) - [`Rx.RefCountDisposable`](../../api/disposables/refcountdisposable.md) - [`Rx.SerialDisposable`](../../api/disposables/serialdisposable.md) - [`Rx.SingleAssignmentDisposable`](../../api/disposables/singleassignmentdisposable.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.testing.md000066400000000000000000000023631266736161100214200ustar00rootroot00000000000000# RxJS Lite Testing Module # The Reactive Extensions for JavaScript has a built-in mechanism for testing all operators which allows for mocking absolute and relative time with ease. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-testing/rx.lite.testing.js) - [`rx.lite.testing.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-testing-compat/rx.lite.testing.compat.js) NPM Packages: - [`rx-lite-testing`](https://www.npmjs.org/package/rx-lite-testing) - [`rx-lite-testing-compat`](https://www.npmjs.org/package/rx-lite-testing-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Classes ## ### Testing Classes - [`Rx.ReactiveTest`](../../api/testing/reactivetest.md) - [`Rx.Recorded`](../../api/testing/recorded.md) - [`Rx.Subscription`](../../api/testing/subscription.md) - [`Rx.TestScheduler`](../../api/testing/testscheduler.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.time.md000066400000000000000000000044231266736161100207000ustar00rootroot00000000000000# RxJS Lite Time Module # The Reactive Extensions for JavaScript, as it is a library that deals with events over time, naturally has a large number of operators that allow the creation of sequences at given timers, in addition to capturing time stamp and time interval information. In addition, you can also check for timeouts on your operations. This also supports windows and buffers with time. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-time/rx.lite.time.js) - [`rx.lite.time.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-time-compat/rx.lite.time.compat.js) NPM Packages: - [`rx-lite-time`](https://www.npmjs.org/package/rx-lite-time) - [`rx-lite-time-compat`](https://www.npmjs.org/package/rx-lite-time-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Observable Operators ## ### `Observable Methods` - [`generateWithAbsoluteTime`](../../api/core/operators/generatewithabsolutetime.md) - [`generateWithRelativeTime`](../../api/core/operators/generatewithrelativetime.md) ### `Observable Instance Methods` - [`bufferWithTime`](../../api/core/operators/bufferwithtime.md) - [`bufferWithTimeOrCount`](../../api/core/operators/bufferwithtimeorcount.md) - [`delaySubscription`](../../api/core/operators/delaysubscription.md) - [`sample`](../../api/core/operators/sample.md) - [`skipLastWithTime`](../../api/core/operators/skiplastwithtime.md) - [`takeLastBufferWithTime`](../../api/core/operators/takelastbufferwithtime.md) - [`takeLastWithTime`](../../api/core/operators/takelastwithtime.md) - [`timeInterval`](../../api/core/operators/timeinterval.md) - [`timeout`](../../api/core/operators/timeout.md) - [`timeoutWithSelector`](../../api/core/operators/timeoutwithselector.md) - [`timestamp`](../../api/core/operators/timestamp.md) - [`windowWithTime`](../../api/core/operators/windowwithtime.md) - [`windowWithTimeOrCount`](../../api/core/operators/windowwithtimeorcount.md) RxJS-4.1.0/doc/libraries/lite/rx.lite.virtualtime.md000066400000000000000000000023541266736161100223100ustar00rootroot00000000000000# RxJS Virtual Time Module # The Reactive Extensions for JavaScript supports a notion of virtual time, which allows you to mock time easily, or even run through historical data through the `HistoricalScheduler`. This module is designed to work with the `rx-lite` NPM module for both the standards-compliant version as well as compat for older browsers. ## Details ## Files: - [`rx.lite.virtualtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-virtualtime/rx.lite.virtualtime.js) - [`rx.lite.virtualtime.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/modules/rx-lite-virtualtime-compat/rx.lite.virtualtime.compat.js) NPM Packages: - [`rx-lite-virtualtime`](https://www.npmjs.org/package/rx-lite-virtualtime) - [`rx-lite-virtualtime-compat`](https://www.npmjs.org/package/rx-lite-virtualtime-compat) File Dependencies: - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) - [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) ## Included Classes ## ### Schedulers - [`Rx.HistoricalScheduler`](../../api/schedulers/historicalscheduler.md) - [`Rx.VirtualTimeScheduler`](../../api/schedulers/virtualtimescheduler.md) RxJS-4.1.0/doc/libraries/main/000077500000000000000000000000001266736161100160205ustar00rootroot00000000000000RxJS-4.1.0/doc/libraries/main/rx.aggregates.md000066400000000000000000000052271266736161100211110ustar00rootroot00000000000000# RxJS Aggregates Module # The Reactive Extensions for JavaScript has a number of aggregation operators including those you might already know from the Array#extras and the upcoming ES6 standard such as `reduce`, `find` and `findIndex`. This module is used exclusively for aggregation operations used on finite observable sequences. In addition to the aforementioned operators, there are many useful operators such as `count`, `sum`, `average` and determining whether two sequences are equal via the `sequenceEqual` method. ## Details ## Files: - [`rx.aggregates.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.aggregates.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Aggregates`](http://www.nuget.org/packages/RxJS-Aggregates/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) | [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) ## Included Observable Operators ## ### `Observable Instance Methods` - [`aggregate`](../../api/core/operators/reduce.md) - [`all`](../../api/core/operators/every.md) - [`any`](../../api/core/operators/some.md) - [`average`](../../api/core/operators/average.md) - [`includes`](../../api/core/operators/includes.md) - [`count`](../../api/core/operators/count.md) - [`elementAt`](../../api/core/operators/elementat.md) - [`every`](../../api/core/operators/every.md) - [`find`](../../api/core/operators/find.md) - [`findIndex`](../../api/core/operators/findindex.md) - [`first`](../../api/core/operators/first.md) - [`indexOf`](../../api/core/operators/indexof.md) - [`isEmpty`](../../api/core/operators/isempty.md) - [`last`](../../api/core/operators/last.md) - [`lastIndexOf`](../../api/core/operators/lastindexof.md) - [`max`](../../api/core/operators/max.md) - [`maxBy`](../../api/core/operators/maxby.md) - [`min`](../../api/core/operators/min.md) - [`minBy`](../../api/core/operators/minby.md) - [`reduce`](../../api/core/operators/reduce.md) - [`sequenceEqual`](../../api/core/operators/sequenceequal.md) - [`single`](../../api/core/operators/single.md) - [`slice`](../../api/core/operators/slice.md) - [`some`](../../api/core/operators/some.md) - [`sum`](../../api/core/operators/sum.md) - [`toMap`](../../api/core/operators/tomap.md) - [`toSet`](../../api/core/operators/toset.md) RxJS-4.1.0/doc/libraries/main/rx.async.md000066400000000000000000000042471266736161100201160ustar00rootroot00000000000000# RxJS Async Module # The Reactive Extensions for JavaScript provides support for bridging to events, promises, callbacks, Node.js-style callbacks and more. This module includes all of that functionality. In addition, this also supports taking ordinary functions and turning them into asynchronous functions via Observable sequences. This comes with both `rx.async.js` which is for use in modern development environments such as > IE9 and server-side environments such as Node.js. We also have `rx.async.compat.js` which has backwards compatibility to browsers which do not support all required ES5 features. ## Details ## Files: - [`rx.async.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.async.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Async`](http://www.nuget.org/packages/RxJS-Async/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) ## Included Observable Operators ## ### `Observable Methods` - [`fromCallback`](../../api/core/operators/fromcallback.md) - [`fromEvent`](../../api/core/operators/fromevent.md) - [`fromEventPattern`](../../api/core/operators/fromeventpattern.md) - [`fromNodeCallback`](../../api/core/operators/fromnodecallback.md) - [`spawn`](../../api/core/operators/spawn.md) - [`start`](../../api/core/operators/start.md) - [`startAsync`](../../api/core/operators/startasync.md) - [`toAsync`](../../api/core/operators/toasync.md) - [`toPromise`](../../api/core/operators/topromise.md) - [`wrap`](../../api/core/operators/wrap.md) RxJS-4.1.0/doc/libraries/main/rx.backpressure.md000066400000000000000000000035111266736161100214630ustar00rootroot00000000000000# RxJS Backpressure Module # The Reactive Extensions for JavaScript provides support backpressure for situations when the observable sequences emits too many messages for the observer to consume. This is in addition to other mechanisms already in place such as `buffer`, `throttle`, `sample` among other operators which allow you to get messages every so often, or in batches. This module allows you to pause and resume a hot observable with `pausable` and to pause and resume with buffered data with `pausableBuffered`. In addition, we also support the ability to get a requested number of items from the queue through the `controlled` operator. ## Details ## Files: - [`rx.backpressure.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.backpressure.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-BackPressure`](http://www.nuget.org/packages/RxJS-Backpressure/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) NuGet Dependencies: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) ## Included Observable Operators ## ### `Observable Instance Methods` - [`controlled`](../../api/core/operators/controlled.md) - [`pausable`](../../api/core/operators/pausable.md) - [`pausableBuffered`](../../api/core/operators/pausablebuffered.md) RxJS-4.1.0/doc/libraries/main/rx.binding.md000066400000000000000000000041111266736161100204010ustar00rootroot00000000000000# RxJS Binding Module # The Reactive Extensions for JavaScript has a notion of hot and cold observables. Hot observables fire whether you are listening to them or not, such as mouse movements. Cold observables on the other hand, such as a sequence created from an array will fire the same sequence to all subscribers. The Binding module gives you the ability to replay events for hot observables, and to turn cold observables into hot observables. ## Details ## Files: - [`rx.binding.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.binding.js) - [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Binding`](http://www.nuget.org/packages/RxJS-Binding/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NuGet Dependencies: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) ## Included Observable Operators ## ### `Observable Instance Methods` - [`connect`](../../api/core/operators/connect.md) - [`publish`](../../api/core/operators/publish.md) - [`publishLast`](../../api/core/operators/publishlast.md) - [`publishValue`](../../api/core/operators/publishvalue.md) - [`refCount`](../../api/core/operators/refcount.md) - [`replay`](../../api/core/operators/replay.md) - [`share`](../../api/core/operators/share.md) - [`shareLast`](../../api/core/operators/sharelast.md) - [`shareReplay`](../../api/core/operators/sharereplay.md) - [`shareValue`](../../api/core/operators/sharevalue.md) - [`singleInstance`](../../api/core/operators/singleinstance.md) ## Included Classes ## ### Subjects - [`Rx.BehaviorSubject`](../../api/core/observable.mdapi/subjects/behaviorsubject.md) - [`Rx.ReplaySubject`](../../api/core/observable.mdapi/subjects/replaysubject.md) RxJS-4.1.0/doc/libraries/main/rx.coincidence.md000066400000000000000000000032431266736161100212370ustar00rootroot00000000000000# RxJS Coincidence Module # The Reactive Extensions for JavaScript has a set of coincidence-based operators such as `join` and `groupJoin` which allow one to correlate two observable sequences much as you would do in SQL. There is also support for advanced windowing and bufferring capabilities which allow for the specification of opening and closing observable sequences to denote how much data to capture. ## Details ## Files: - [`rx.coincidence.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.coincidence.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Coincidence`](http://www.nuget.org/packages/RxJS-Coincidence/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) ## Included Observable Operators ## ## `Observable Instance Methods` - [`buffer`](../../api/core/operators/buffer.md) - [`groupBy`](../../api/core/operators/groupby.md) - [`groupByUntil`](../../api/core/operators/groupbyuntil.md) - [`groupJoin`](../../api/core/operators/groupjoin.md) - [`join`](../../api/core/operators/join.md) - [`pairwise`](../../api/core/operators/pairwise.md) - [`partition`](../../api/core/operators/partition.md) - [`window`](../../api/core/operators/window.md) RxJS-4.1.0/doc/libraries/main/rx.complete.md000066400000000000000000000264521266736161100206130ustar00rootroot00000000000000# RxJS Complete Module # The Reactive Extensions for JavaScript's complete functionality is in the complete RxJS file which has many core components including the Schedulers, Disposables, Observable and Observer, but omits any testing capabilities. This comes with both [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) which is for use in modern development environments such as > IE9 and server-side environments such as Node.js. We also have [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) which has backwards compatibility to browsers which do not support all required ES5 features. ## Details ## Files: - [`rx.all.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.js) - [`rx.all.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.all.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) ## Included Observable Operators ## ### `Observable Methods` - [`amb`](../../api/core/operators/amb.md) - [`case`](../../api/core/operators/case.md) - [`catch`](../../api/core/operators/catch.md) - [`concat`](../../api/core/operators/concat.md) - [`create`](../../api/core/operators/create.md) - [`defer`](../../api/core/operators/defer.md) - [`empty`](../../api/core/operators/empty.md) - [`for`](../../api/core/operators/for.md) - [`forkJoin`](../../api/core/operators/forkjoin.md) - [`from`](../../api/core/operators/from.md) - [`fromArray`](../../api/core/operators/fromarray.md) - [`fromCallback`](../../api/core/operators/fromcallback.md) - [`fromEvent`](../../api/core/operators/fromevent.md) - [`fromEventPattern`](../../api/core/operators/fromeventpattern.md) - [`fromNodeCallback`](../../api/core/operators/fromnodecallback.md) - [`fromPromise`](../../api/core/operators/frompromise.md) - [`generate`](../../api/core/operators/generate.md) - [`generateWithAbsoluteTime`](../../api/core/operators/generatewithabsolutetime.md) - [`generateWithRelativeTime`](../../api/core/operators/generatewithrelativetime.md) - [`if`](../../api/core/operators/if.md) - [`interval`](../../api/core/operators/interval.md) - [`just`](../../api/core/operators/return.md) - [`merge`](../../api/core/operators/merge.md) - [`mergeDelayError`](../../api/core/operators/mergedelayerror.md) - [`never`](../../api/core/operators/never.md) - [`of`](../../api/core/operators/of.md) - [`ofArrayChanges`](../../api/core/operators/ofarraychanges.md) - [`ofObjectChanges`](../../api/core/operators/ofobjectchanges.md) - [`ofWithScheduler`](../../api/core/operators/ofwithscheduler.md) - [`onErrorResumeNext`](../../api/core/operators/onerrorresumenext.md) - [`pairs`](../../api/core/operators/pairs.md) - [`range`](../../api/core/operators/range.md) - [`repeat`](../../api/core/operators/repeat.md) - [`return`](../../api/core/operators/return.md) - [`spawn`](../../api/core/operators/spawn.md) - [`start`](../../api/core/operators/start.md) - [`startAsync`](../../api/core/operators/startasync.md) - [`throw`](../../api/core/operators/throw.md) - [`timer`](../../api/core/operators/timer.md) - [`toAsync`](../../api/core/operators/toasync.md) - [`using`](../../api/core/operators/using.md) - [`when`](../../api/core/operators/when.md) - [`while`](../../api/core/operators/while.md) - [`wrap`](../../api/core/operators/wrap.md) - [`zip`](../../api/core/operators/zip.md) ### `Observable Instance Methods` - [`aggregate`](../../api/core/operators/reduce.md) - [`all`](../../api/core/operators/every.md) - [`amb`](../../api/core/operators/ambproto.md) - [`and`](../../api/core/operators/and.md) - [`any`](../../api/core/operators/some.md) - [`asObservable`](../../api/core/operators/asobservable.md) - [`average`](../../api/core/operators/average.md) - [`buffer`](../../api/core/operators/buffer.md) - [`bufferWithCount`](../../api/core/operators/bufferwithcount.md) - [`bufferWithTime`](../../api/core/operators/bufferwithtime.md) - [`bufferWithTimeOrCount`](../../api/core/operators/bufferwithtimeorcount.md) - [`catch`](../../api/core/operators/catchproto.md) - [`combineLatest`](../../api/core/operators/combinelatest.md) - [`concat`](../../api/core/operators/concatproto.md) - [`concatAll`](../../api/core/operators/concatall.md) - [`concatMap`](../../api/core/operators/concatmap.md) - [`connect`](../../api/core/operators/connect.md) - [`controlled`](../../api/core/operators/controlled.md) - [`count`](../../api/core/operators/count.md) - [`debounce`](../../api/core/operators/debounce.md) - [`defaultIfEmpty`](../../api/core/operators/defaultifempty.md) - [`delay`](../../api/core/operators/delay.md) - [`delaySubscription`](../../api/core/operators/delaysubscription.md) - [`dematerialize`](../../api/core/operators/dematerialize.md) - [`distinct`](../../api/core/operators/distinct.md) - [`distinctUntilChanged`](../../api/core/operators/distinctuntilchanged.md) - [`do`](../../api/core/operators/do.md) - [`doOnNext`](../../api/core/operators/doonnext.md) - [`doOnError`](../../api/core/operators/doonerror.md) - [`doOnCompleted`](../../api/core/operators/dooncompleted.md) - [`doWhile`](../../api/core/operators/dowhile.md) - [`elementAt`](../../api/core/operators/elementat.md) - [`every`](../../api/core/operators/every.md) - [`expand`](../../api/core/operators/expand.md) - [`extend`](../../api/core/operators/manyselect.md) - [`filter`](../../api/core/operators/where.md) - [`finally | ensure`](../../api/core/operators/finally.md) - [`find`](../../api/core/operators/find.md) - [`findIndex`](../../api/core/operators/findindex.md) - [`first`](../../api/core/operators/first.md) - [`flatMap`](../../api/core/operators/selectmany.md) - [`flatMapFirst`](../../api/core/operators/flatmapfirst.md) - [`flatMapLatest`](../../api/core/operators/flatmaplatest.md) - [`flatMapObserver`](../../api/core/operators/flatmapobserver.md) - [`flatMapWithMaxConcurrent`](../../api/core/flatmapwithmaxconcurrent.md) - [`forkJoin`](../../api/core/operators/forkjoinproto.md) - [`groupBy`](../../api/core/operators/groupby.md) - [`groupByUntil`](../../api/core/operators/groupbyuntil.md) - [`groupJoin`](../../api/core/operators/groupjoin.md) - [`ignoreElements`](../../api/core/operators/ignoreelements.md) - [`includes`](../../api/core/operators/includes.md) - [`isEmpty`](../../api/core/operators/isempty.md) - [`join`](../../api/core/operators/join.md) - [`last`](../../api/core/operators/last.md) - [`lastIndexOf`](../../api/core/operators/lastindexof.md) - [`let`](../../api/core/operators/let.md) - [`manySelect`](../../api/core/operators/manyselect.md) - [`map`](../../api/core/operators/select.md) - [`max`](../../api/core/operators/max.md) - [`maxBy`](../../api/core/operators/maxby.md) - [`merge`](../../api/core/operators/mergeproto.md) - [`mergeAll`](../../api/core/operators/mergeall.md) - [`min`](../../api/core/operators/min.md) - [`minBy`](../../api/core/operators/minby.md) - [`multicast`](../../api/core/operators/multicast.md) - [`observeOn`](../../api/core/operators/observeon.md) - [`onErrorResumeNext`](../../api/core/operators/onerrorresumenextproto.md) - [`pairwise`](../../api/core/operators/pairwise.md) - [`partition`](../../api/core/operators/partition.md) - [`pausable`](../../api/core/operators/pausable.md) - [`pausableBuffered`](../../api/core/operators/pausablebuffered.md) - [`pluck`](../../api/core/operators/pluck.md) - [`publish`](../../api/core/operators/publish.md) - [`publishLast`](../../api/core/operators/publishlast.md) - [`publishValue`](../../api/core/operators/publishvalue.md) - [`share`](../../api/core/operators/share.md) - [`shareReplay`](../../api/core/operators/sharereplay.md) - [`shareValue`](../../api/core/operators/sharevalue.md) - [`refCount`](../../api/core/operators/refcount.md) - [`reduce`](../../api/core/operators/reduce.md) - [`repeat`](../../api/core/operators/repeat.md) - [`replay`](../../api/core/operators/replay.md) - [`retry`](../../api/core/operators/retry.md) - [`retryWhen`](../../api/core/operators/retrywhen.md) - [`sample`](../../api/core/operators/sample.md) - [`scan`](../../api/core/operators/scan.md) - [`select`](../../api/core/operators/select.md) - [`selectConcat`](../../api/core/operators/selectconcat.md) - [`selectMany`](../../api/core/operators/selectmany.md) - [`selectManyObserver`](../../api/core/operators/selectmanyobserver.md) - [`sequenceEqual`](../../api/core/operators/sequenceequal.md) - [`single`](../../api/core/operators/single.md) - [`singleInstance`](../../api/core/operators/singleinstance.md) - [`skip`](../../api/core/operators/skip.md) - [`skipLast`](../../api/core/operators/skiplast.md) - [`skipLastWithTime`](../../api/core/operators/skiplastwithtime.md) - [`skipUntil`](../../api/core/operators/skipuntil.md) - [`skipUntilWithTime`](../../api/core/operators/skipuntilwithtime.md) - [`skipWhile`](../../api/core/operators/skipwhile.md) - [`slice`](../../api/core/operators/slice.md) - [`some`](../../api/core/operators/some.md) - [`startWith`](../../api/core/operators/startwith.md) - [`subscribe | forEach`](../../api/core/operators/subscribe.md) - [`subscribeOn`](../../api/core/operators/subscribeon.md) - [`sum`](../../api/core/operators/sum.md) - [`switch | switchLatest`](../../api/core/operators/switch.md) - [`switchFirst`](../../api/core/operators/switchfirst.md) - [`take`](../../api/core/operators/take.md) - [`takeLast`](../../api/core/operators/takelast.md) - [`takeLastBuffer`](../../api/core/operators/takelastbuffer.md) - [`takeLastBufferWithTime`](../../api/core/operators/takelastbufferwithtime.md) - [`takeLastWithTime`](../../api/core/operators/takelastwithtime.md) - [`takeUntil`](../../api/core/operators/takeuntil.md) - [`takeUntilWithTime`](../../api/core/operators/takeuntilwithtimee.md) - [`takeWhile`](../../api/core/operators/takewhile.md) - [`tap`](../../api/core/operators/do.md) - [`tapOnNext`](../../api/core/operators/doonnext.md) - [`tapOnError`](../../api/core/operators/doonerror.md) - [`tapOnCompleted`](../../api/core/operators/dooncompleted.md) - [`throttle`](../../api/core/operators/throttle.md) - [`timeInterval`](../../api/core/operators/timeinterval.md) - [`timeout`](../../api/core/operators/timeout.md) - [`timestamp`](../../api/core/operators/timestamp.md) - [`toArray`](../../api/core/operators/toarray.md) - [`where`](../../api/core/operators/where.md) - [`window`](../../api/core/operators/window.md) - [`windowWithCount`](../../api/core/operators/windowwithcount.md) - [`windowWithTime`](../../api/core/operators/windowwithtime.md) - [`windowWithTimeOrCount`](../../api/core/operators/windowwithtimeorcount.md) - [`withLatestFrom`](../../api/core/operators/withlatestfrom.md) - [`zip`](../../api/core/operators/zipproto.md) - [`zipIterable`](../../api/core/operators/zipiterable.md) ## Included Classes ## ### Core Objects - [`Rx.Observer`](../../api/core/observer.md) - [`Rx.Notification`](../../api/core/notification.md) ### Subjects - [`Rx.AsyncSubject`](../../api/subjects/asyncsubject.md) - [`Rx.Subject`](../../api/subjects/subject.md) ### Schedulers - [`Rx.Scheduler`](../../api/schedulers/scheduler.md) ### Disposables - [`Rx.CompositeDisposable`](../../api/disposables/compositedisposable.md) - [`Rx.Disposable`](../../api/disposables/disposable.md) - [`Rx.RefCountDisposable`](../../api/disposables/refcountdisposable.md) - [`Rx.SerialDisposable`](../../api/disposables/serialdisposable.md) - [`Rx.SingleAssignmentDisposable`](../../api/disposables/singleassignmentdisposable.md) RxJS-4.1.0/doc/libraries/main/rx.experimental.md000066400000000000000000000040231266736161100214660ustar00rootroot00000000000000# RxJS Experimental Module # The Reactive Extensions for JavaScript has a number of operators that are considered experimental and not ready for mainstream usage. This includes imperative operators such as `if`, `case`, `for`, `while`, `doWhile` as well as operators such as `forkJoin`. ## Details ## Files: - [`rx.experimental.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.experimental.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Experimental`](http://www.nuget.org/packages/RxJS-Experimental/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) ## Included Observable Operators ## ### `Observable Methods` - [`case`](../../api/core/operators/case.md) - [`for`](../../api/core/operators/for.md) - [`forkJoin`](../../api/core/operators/forkjoin.md) - [`if`](../../api/core/operators/if.md) - [`while`](../../api/core/operators/while.md) ### `Observable Instance Methods` - [`doWhile`](/api/core/operators/dowhile.md) - [`expand`](../../api/core/operators/expand.md) - [`extend`](../../api/core/operators/manyselect.md) - [`flatMapFirst`](../../api/core/operators/flatmapfirst.md) - [`flatMapWithMaxConcurrent`](../../api/core/flatmapwithmaxconcurrent.md) - [`forkJoin`](../../api/core/operators/forkjoinproto.md) - [`let`](../../api/core/operators/let.md) - [`manySelect`](../../api/core/operators/manyselect.md) - [`selectSwitchFirst`](../../api/core/operators/flatmapfirst.md) - [`selectWithMaxConcurrent`](../../api/core/operators/flatmapwithmaxconcurrent.md) RxJS-4.1.0/doc/libraries/main/rx.joinpatterns.md000066400000000000000000000024331266736161100215140ustar00rootroot00000000000000# RxJS Join Patterns Module # The Reactive Extensions for JavaScript also supports join calculus in that you can easily create patterns for when certain observable sequences fire. ## Details ## Files: - [`rx.joinpatterns.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.joinpatterns.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-JoinPatterns`](http://www.nuget.org/packages/RxJS-JoinPatterns/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) ## Included Observable Operators ## ### `Observable Methods` - [`when`](../../api/core/operators/when.md) ### `Observable Instance Methods` - [`and`](../../api/core/operators/and.md) ### `Pattern Instance Methods` - [`thenDo`](../../api/core/operators/thendo.md) RxJS-4.1.0/doc/libraries/main/rx.md000066400000000000000000000141471266736161100170020ustar00rootroot00000000000000# RxJS Main Module # The Reactive Extensions for JavaScript's main functionality is in the main RxJS file which has many core components including the Schedulers, Disposables, Observable and Observer. This comes with both `rx.js` which is for use in modern development environments such as > IE9 and server-side environments such as Node.js. We also have `rx.compat.js` which has backwards compatibility to browsers which do not support all required ES5 features. ## Details ## Files: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) - [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) ## Included Observable Operators ## ### `Observable Methods` - [`amb`](../../api/core/operators/amb.md) - [`catch`](../../api/core/operators/catch.md) - [`concat`](../../api/core/operators/concat.md) - [`create`](../../api/core/operators/create.md) - [`defer`](../../api/core/operators/defer.md) - [`empty`](../../api/core/operators/empty.md) - [`from`](../../api/core/operators/from.md) - [`fromArray`](../../api/core/operators/fromarray.md) - [`generate`](../../api/core/operators/generate.md) - [`just`](../../api/core/operators/return.md) - [`merge`](../../api/core/operators/merge.md) - [`mergeDelayError`](../../api/core/operators/mergedelayerror.md) - [`never`](../../api/core/operators/never.md) - [`of`](../../api/core/operators/of.md) - [`ofWithScheduler`](../../api/core/operators/ofwithscheduler.md) - [`onErrorResumeNext`](../../api/core/operators/onerrorresumenext.md) - [`pairs`](../../api/core/operators/pairs.md) - [`range`](../../api/core/operators/range.md) - [`repeat`](../../api/core/operators/repeat.md) - [`return`](../../api/core/operators/return.md) - [`throw`](../../api/core/operators/throw.md) - [`zip`](../../api/core/operators/zip.md) ### `Observable Instance Methods` - [`amb`](../../api/core/operators/ambproto.md) - [`asObservable`](../../api/core/operators/asobservable.md) - [`bufferWithCount`](../../api/core/operators/bufferwithcount.md) - [`catch`](../../api/core/operators/catch.md) - [`combineLatest`](../../api/core/operators/combinelatest.md) - [`concat`](../../api/core/operators/concatproto.md) - [`concatAll`](../../api/core/operators/concatall.md) - [`concatMap`](../../api/core/operators/concatmap.md) - [`defaultIfEmpty`](../../api/core/operators/defaultifempty.md) - [`distinct`](../../api/core/operators/distinct.md) - [`distinctUntilChanged`](../../api/core/operators/distinctuntilchanged.md) - [`do`](../../api/core/operators/do.md) - [`doOnNext`](../../api/core/operators/doonnext.md) - [`doOnError`](../../api/core/operators/doonerror.md) - [`doOnCompleted`](../../api/core/operators/dooncompleted.md) - [`filter`](../../api/core/operators/where.md) - [`finally`](../../api/core/operators/finally.md) - [`flatMap`](../../api/core/operators/selectmany.md) - [`flatMapLatest`](../../api/core/operators/flatmaplatest.md) - [`flatMapObserver`](../../api/core/operators/flatmapobserver.md) - [`ignoreElements`](../../api/core/operators/ignoreelements.md) - [`map`](../../api/core/operators/select.md) - [`merge`](../../api/core/operators/mergeproto.md) - [`mergeAll`](../../api/core/operators/mergeall.md) - [`observeOn`](../../api/core/operators/observeon.md) - [`onErrorResumeNext`](../../api/core/operators/onerrorresumenext.md) - [`repeat`](../../api/core/operators/repeatproto.md) - [`repeatWhen`](../../api/core/operators/repeatwhen.md) - [`retry`](../../api/core/operators/retry.md) - [`retryWhen`](../../api/core/operators/retrywhen.md) - [`scan`](../../api/core/operators/scan.md) - [`select`](../../api/core/operators/select.md) - [`selectConcat`](../../api/core/operators/concatmap.md) - [`selectMany`](../../api/core/operators/selectmany.md) - [`selectManyObserver`](../../api/core/operators/flatpmapobserver.md) - [`selectSwitch`](../../api/core/operators/flatmaplatest.md) - [`single`](../../api/core/operators/single.md) - [`singleOrDefault`](../../api/core/operators/singleordefault.md) - [`skip`](../../api/core/operators/skip.md) - [`skipLast`](../../api/core/operators/skiplast.md) - [`skipUntil`](../../api/core/operators/skipuntil.md) - [`skipWhile`](../../api/core/operators/skipwhile.md) - [`startWith`](../../api/core/operators/startwith.md) - [`subscribe | forEach`](../../api/core/operators/subscribe.md) - [`subscribeOnNext`](../../api/core/operators/subscribeonnext.md) - [`subscribeOnError`](../../api/core/operators/subscribeonerror.md) - [`subscribeOnCompleted`](../../api/core/operators/subscribeoncompleted.md) - [`subscribeOn`](../../api/core/operators/subscribeon.md) - [`switch | switchLatest`](../../api/core/operators/switch.md) - [`take`](../../api/core/operators/take.md) - [`takeLast`](../../api/core/operators/takelast.md) - [`takeLastBuffer`](../../api/core/operators/takelastbuffer.md) - [`takeUntil`](../../api/core/operators/takeuntil.md) - [`takeWhile`](../../api/core/operators/takewhile.md) - [`toArray`](../../api/core/operators/toarray.md) - [`transduce`](../../api/core/operators/transduce.md) - [`where`](../../api/core/operators/where.md) - [`windowWithCount`](../../api/core/operators/windowwithcount.md) - [`withLatestFrom`](../../api/core/operators/withlatestfrom.md) - [`zip`](../../api/core/operators/zipproto.md) - [`zipIterable`](../../api/core/operators/zipiterable.md) ## Included Classes ## ### Core Objects - [`Rx.Observer`](../../api/core/observer.md) - [`Rx.Observable`](../../api/core/observable.md) - [`Rx.Notification`](../../api/core/notification.md) ### Subjects - [`Rx.AsyncSubject`](../../api/subjects/asyncsubject.md) - [`Rx.Subject`](../../api/subjects/subject.md) ### Schedulers - [`Rx.Scheduler`](../../api/schedulers/scheduler.md) ### Disposables - [`Rx.CompositeDisposable`](../../api/disposables/compositedisposable.md) - [`Rx.Disposable`](../../api/disposables/disposable.md) - [`Rx.RefCountDisposable`](../../api/disposables/refcountdisposable.md) - [`Rx.SerialDisposable`](../../api/disposables/serialdisposable.md) - [`Rx.SingleAssignmentDisposable`](../../api/disposables/singleassignmentdisposable.md) RxJS-4.1.0/doc/libraries/main/rx.testing.md000066400000000000000000000024651266736161100204560ustar00rootroot00000000000000# RxJS Testing Module # The Reactive Extensions for JavaScript has a built-in mechanism for testing all operators which allows for mocking absolute and relative time with ease. ## Details ## Files: - [`rx.testing.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.testing.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Testing`](http://www.nuget.org/packages/RxJS-Testing/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) - [`rx.virtualtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.virtualtime.js) NuGet Dependencies: - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) ## Included Classes ## ### Testing Classes - [`Rx.ReactiveTest`](../../api/testing/reactivetest.md) - [`Rx.Recorded`](../../api/testing/recorded.md) - [`Rx.Subscription`](../../api/testing/subscription.md) - [`Rx.TestScheduler`](../../api/testing/testscheduler.md) RxJS-4.1.0/doc/libraries/main/rx.time.md000066400000000000000000000047511266736161100177370ustar00rootroot00000000000000# RxJS Time Module # The Reactive Extensions for JavaScript, as it is a library that deals with events over time, naturally has a large number of operators that allow the creation of sequences at given timers, in addition to capturing time stamp and time interval information. In addition, you can also check for timeouts on your operations. This also supports windows and buffers with time. ## Details ## Files: - [`rx.time.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.time.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-Time`](http://www.nuget.org/packages/RxJS-Time/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) - [`RxJS-Lite`](http://www.nuget.org/packages/RxJS-Lite/) ## Included Observable Operators ## ### `Observable Methods` - [`generateWithAbsoluteTime`](../../api/core/operators/generatewithabsolutetime.md) - [`generateWithRelativeTime`](../../api/core/operators/generatewithrelativetime.md) - [`interval`](../../api/core/operators/interval.md) - [`timer`](../../api/core/operators/timer.md) ### `Observable Instance Methods` - [`bufferWithTime`](../../api/core/operators/bufferwithtime.md) - [`bufferWithTimeOrCount`](../../api/core/operators/bufferwithtimeorcount.md) - [`debounce`](../../api/core/operators/debounce.md) - [`delay`](../../api/core/operators/delay.md) - [`delaySubscription`](../../api/core/operators/delaysubscription.md) - [`sample`](../../api/core/operators/sample.md) - [`skipLastWithTime`](../../api/core/operators/skiplastwithtime.md) - [`takeLastBufferWithTime`](../../api/core/operators/takelastbufferwithtime.md) - [`takeLastWithTime`](../../api/core/operators/takelastwithtime.md) - [`throttle`](../../api/core/operators/throttle.md) - [`timeInterval`](../../api/core/operators/timeinterval.md) - [`timeout`](../../api/core/operators/timeout.md) - [`timestamp`](../../api/core/operators/timestamp.md) - [`windowWithTime`](../../api/core/operators/windowwithtime.md) - [`windowWithTimeOrCount`](../../api/core/operators/windowwithtimeorcount.md) RxJS-4.1.0/doc/libraries/main/rx.virtualtime.md000066400000000000000000000022611266736161100213400ustar00rootroot00000000000000# RxJS Virtual Time Module # The Reactive Extensions for JavaScript supports a notion of virtual time, which allows you to mock time easily, or even run through historical data through the `HistoricalScheduler`. ## Details ## Files: - [`rx.virtualtime.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.virtualtime.js) NPM Packages: - [`rx`](https://www.npmjs.org/package/rx) NuGet Packages: - [`RxJS-VirtualTime`](http://www.nuget.org/packages/RxJS-VirtualTime/) File Dependencies: - [`rx.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.js) | [`rx.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.compat.js) | [`rx.lite.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.js) | [`rx.lite.compat.js`](https://github.com/Reactive-Extensions/RxJS/blob/master/dist/rx.lite.compat.js) NuGet Dependencies: - [`RxJS-All`](http://www.nuget.org/packages/RxJS-All/) - [`RxJS-Main`](http://www.nuget.org/packages/RxJS-Main/) ## Included Classes ## ### Schedulers - [`Rx.HistoricalScheduler`](../../api/schedulers/historicalscheduler.md) - [`Rx.VirtualTimeScheduler`](../../api/schedulers/virtualtimescheduler.md) RxJS-4.1.0/doc/mapping/000077500000000000000000000000001266736161100145535ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/async/000077500000000000000000000000001266736161100156705ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/async/comparing.md000066400000000000000000000703421266736161100201770ustar00rootroot00000000000000# RxJS for Async.js Users # [Async.js](https://github.com/caolan/async) is a popular utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript. Async provides around 20 functions that include the usual 'functional' suspects (map, reduce, filter, each...) as well as some common patterns for asynchronous control flow (parallel, series, waterfall...). All these functions assume you follow the node.js convention of providing a single callback as the last argument of your async function. Many of these concepts in the library map directly to RxJS concepts. We'll go operator by operator on how each map to existing functionality in RxJS. ## Collection Methods - [`async.each`](#asynceach) - [`async.map`](#asyncmap) - [`async.filter`](#asyncfilter) - [`async.reject`](#asyncreject) - [`async.reduce`](#asyncreduce) - [`async.detect`](#asyncdetect) - [`async.some`](#asyncsome) - [`async.every`](#asyncevery) - [`async.concat`](#asynconcat) ## Control Flow - [`async.series`](#asyncseries) - [`async.parallel`](#asyncparallel) - [`async.whilst`](#asyncwhilst) - [`async.doWhilst`](#asyncdowhilst) - [`async.nextTick`](#asyncnexttick) - [`async.waterfall`](#asyncwaterfall) - [`async.compose`](#asynccompose) ## `async.each` ## The [`async.each`](https://github.com/caolan/async#eacharr-iterator-callback) method applies an iterator function to each item in an array, in parallel. The iterator is called with an item from the list and a callback for when it has finished. If the iterator passes an error to this callback, the main callback for the each function is immediately called with the error. #### async version #### In this example, we will use `async.each` to iterate an array of files to write some contents and save. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; function saveFile (file, cb) { fs.writeFile(file, 'Hello Node', function (err) { cb(err); }); } async.each(files, saveFile, function (err) { // if any of the saves produced an error, err would equal that error }); ``` #### RxJS version #### Using RxJS, you can accomplish this task in a number of ways by using `Rx.Observable.fromNodeCallback` to wrap the `fs.writeFile` function, and then iterate the files by using the `Rx.Observable.for` method. ```js var Rx = require('rx'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; // wrap the method var writeFile = Rx.Observable.fromNodeCallback(fs.writeFile); Rx.Observable .for(files, function (file) { return writeFile(file, 'Hello Node') }) .forEach( function () { console.log('file written!'); }, function (err) { console.log('err ' + err); }, function () { console.log('completed!') } ); ``` * * * ## `async.map` ## The `async.map` method produces a new array of values by mapping each value in the given array through the iterator function. The iterator is called with an item from the array and a callback for when it has finished processing. The callback takes 2 arguments, an error and the transformed item from the array. If the iterator passes an error to this callback, the main callback for the map function is immediately called with the error. #### async version #### In this example, we'll get the `fs.stat` for each file given and have the results returned as an array. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; async.map(files, fs.stat, function (err, results) { results.forEach(function (result) { console.log('is file: %s', result.isFile()); }); }); ``` #### RxJS version #### Using RxJS, we can achieve the same results of an array of all of our values by wrapping the `fs.stat` method again using our `Rx.Observable.fromNodeCallback`, then iterate using the `Rx.Observable.for` method, and finally, calling `.toArray()` to get our results as an entire array. ```js var Rx = require('rx'), fs = require('fs'); var stat = Rx.Observable.fromNodeCallback(fs.stat); var files = ['file1.txt', 'file2.txt', 'file3.txt']; Rx.Observable .for(files, function (file) { return stat(file); }) .toArray() .forEach( function (results) { results.forEach(function (result) { console.log('is file: %s', result.isFile()); }); }, function (err) { console.log('err %s', err); } ); ``` * * * ## `async.filter` ## The `async.filter` method returns a new array of all the values which pass an async truth test. The callback for each iterator call only accepts a single argument of true or false, it does not accept an error argument first! This is in-line with the way node libraries work with truth tests like fs.exists. #### async version #### In this example, we'll determine whether the file exists by calling `fs.exists` for each file given and have the results returned as an array. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; async.filter(files, fs.exists, function (results) { results.forEach(function (result) { console.log('exists: %s', result); }); }); ``` #### RxJS version #### Using RxJS, we can achieve the same results of an array of all of our values by wrapping the `fs.exists` method using our `Rx.Observable.fromCallback` as it only has one result, a `true` or `false` value instead of the usual callback with error and result. Then we'll iterate using the `Rx.Observable.for` method, filter the existing files and finally, calling `.toArray()` to get our results as an entire array. ```js var Rx = require('rx'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; var exists = Rx.Observable.fromCallback(fs.exists); Rx.Observable .for(files, function (file) { return exists(file); }) .where(function (x) { return x; }) .toArray() .forEach( function (results) { results.forEach(function (result) { console.log('exists: %s', result); }); } ); ``` * * * ## `async.reject` ## The `async.reject` method is the opposite of filter. Removes values that pass an async truth test. #### async version #### In this example, we'll determine whether the file exists by calling `fs.exists` for each file given and have the results returned as an array. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; async.reject(files, fs.exists, function (results) { results.forEach(function (result) { console.log('exists: %s', result); }); }); ``` #### RxJS version #### Using RxJS, we can achieve the same results of an array of all of our values by wrapping the `fs.exists` method using our `Rx.Observable.fromCallback` as it only has one result, a `true` or `false` value instead of the usual callback with error and result. Then we'll iterate using the `Rx.Observable.for` method, filter the existing files using `filter` and finally, calling `.toArray()` to get our results as an entire array. ```js var Rx = require('rx'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; var exists = Rx.Observable.fromCallback(fs.exists); Rx.Observable .for(files, function (file) { return exists(file); }) .where(function (x) { return !x; }) .toArray() .forEach( function (results) { results.forEach(function (result) { console.log('exists: %s', result); }); } ); ``` * * * ## `async.reduce` ## The `async.reduce` method reduces a list of values into a single value using an async iterator to return each successive step. Memo is the initial state of the reduction. This function only operates in series. For performance reasons, it may make sense to split a call to this function into a parallel map, then use the normal `Array.prototype.reduce` on the results. This function is for situations where each step in the reduction needs to be async, if you can get the data before reducing it then it's probably a good idea to do so. #### async version #### In this example, we'll call `reduction` for each value which will return the result of adding them all together. ```js var async = require('async'); function reduction (acc, x, cb) { process.nextTick(function () { cb(null, acc + x); }); } async.reduce([1,2,3], 0, reduction, function (err, results) { console.log(results); }); // => 6 ``` #### RxJS version #### In RxJS, we have a number of ways of doing this including using `Rx.Observable.from` to turn an array into observable sequence, then we can call `reduce` to add the numbers. To ensure that it is indeed async, we can switch to the `Rx.Scheduler.timeout` to ensure that it is done via a `setImmediate` call. ```js var Rx = require('rx'); Rx.Observable .from([1,2,3], Rx.Scheduler.timeout) .reduce(function (acc, x) { return acc + x; }, 0) .forEach( function (results) { console.log(results); }); // => 6 ``` * * * ## `async.detect` ## The `async.detect` method returns the first value in a list that passes an async truth test. The iterator is applied in parallel, meaning the first iterator to return true will fire the detect callback with that result. #### async version #### In this example, we'll get the first file that matches. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; async.detect(files, fs.exists, function (result){ // result now equals the first file in the list that exists }); ``` #### RxJS version #### In RxJS, we can iterate over the files as above using `Rx.Observable.from`, calling `concatMap` to call `fs.exists` and then calling `first` to get the first matching file project forward the file name and whether the file exists. ```js var Rx = require('rx'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; var exists = Rx.Observable.fromCallback(fs.exists); Rx.Observable .from(files) .concatMap( function (file) { return exists(file); }, function (file, exists) { return {file: file, exists: exists}}) .first(function (x) { return x.exists; }) .forEach( function (result) { // result now equals the first file in the list that exists }); ``` * * * ## `async.some` ## The `async.some` method returns `true` if at least one element in the array satisfies an async test. The callback for each iterator call only accepts a single argument of true or false, it does not accept an error argument first! This is in-line with the way node libraries work with truth tests like fs.exists. Once any iterator call returns true, the main callback is immediately called. #### async version #### In this example, we'll determine whether the file exists by calling `fs.exists` for each file given and have the results returned as an array. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; async.some(files, fs.exists, function (result){ // if result is true then at least one of the files exists }); ``` #### RxJS version #### Using RxJS, we can achieve the same results of an array of all of our values by wrapping the `fs.exists` method using our `Rx.Observable.fromCallback` as it only has one result, a `true` or `false` value instead of the usual callback with error and result. Then we'll iterate using the `Rx.Observable.for` method, then call `some` to determine whether any match. ```js var Rx = require('rx'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; var exists = Rx.Observable.fromCallback(fs.exists); Rx.Observable .for(files, function (file) { return exists(file); }) .some() .forEach( function (results) { // if result is true then at least one of the files exists }); ``` * * * ## `async.every` ## The `async.every` method returns `true` if every element in the array satisfies an async test. The callback for each iterator call only accepts a single argument of true or false, it does not accept an error argument first! This is in-line with the way node libraries work with truth tests like fs.exists. #### async version #### In this example, we'll determine whether the file exists by calling `fs.exists` for each file given and have the results returned as an array. ```js var async = require('async'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; async.every(files, fs.exists, function (result) { // if result is true then every file exists }); ``` #### RxJS version #### Using RxJS, we can achieve the same results of an array of all of our values by wrapping the `fs.exists` method using our `Rx.Observable.fromCallback` as it only has one result, a `true` or `false` value instead of the usual callback with error and result. Then we'll iterate using the `Rx.Observable.for` method, then call `every` to determine whether all match. ```js var Rx = require('rx'), fs = require('fs'); var files = ['file1.txt', 'file2.txt', 'file3.txt']; var exists = Rx.Observable.fromCallback(fs.exists); Rx.Observable .for(files, function (file) { return exists(file); }) .every(function (x) { return x; }) .forEach( function (results) { // if result is true then every file exists }); ``` * * * ## `async.concat` ## The `async.concat` method applies an iterator to each item in a list, concatenating the results. Returns the concatenated list. The iterators are called in parallel, and the results are concatenated as they return. #### async version #### In this example, we'll determine whether the file exists by calling `fs.exists` for each file given and have the results returned as an array. ```js var async = require('async'), fs = require('fs'); var directories = ['dir1', 'dir2', 'dir3']; async.concat(directories, fs.readdir, function (err, files) { // files is now a list of filenames that exist in the 3 directories }); ``` #### RxJS version #### Using RxJS, we can achieve the same results of an array of all of our values by wrapping the `fs.readdir` method using our `Rx.Observable.fromNodeCallback`. Then we'll iterate using the `Rx.Observable.for` method, then call `reduce` to add each item to the item to the overall list. ```js var Rx = require('rx'), fs = require('fs'); var directories = ['dir1', 'dir2', 'dir3']; var readdir = Rx.Observable.fromNodeCallback(fs.readdir); Rx.Observable .for(directories, function (dir) { return readdir(dir); }) .reduce(function (acc, x) { return acc.concat(x) }, []) .forEach( function (files) { // files is now a list of filenames that exist in the 3 directories }, function (err) { // handle error }); ``` * * * ## `async.series` ## The `async.series` runs an array of functions in series, each one running once the previous function has completed. If any functions in the series pass an error to its callback, no more functions are run and the callback for the series is immediately called with the value of the error. Once the tasks have completed, the results are passed to the final callback as an array. It is also possible to use an object instead of an array. Each property will be run as a function and the results will be passed to the final callback as an object instead of an array. This can be a more readable way of handling results from async.series. #### async version #### In this example we'll run some examples with both an array or an object. ```js var async = require('async'); async.series([ function(callback){ // do some stuff ... callback(null, 'one'); }, function(callback){ // do some more stuff ... callback(null, 'two'); } ], // optional callback function(err, results){ // results is now equal to ['one', 'two'] }); // an example using an object instead of an array async.series({ one: function(callback){ setTimeout(function(){ callback(null, 1); }, 200); }, two: function(callback){ setTimeout(function(){ callback(null, 2); }, 100); } }, function(err, results) { // results is now equal to: {one: 1, two: 2} }); ``` #### RxJS version #### We can achieve the same functionality of `async.series` with an array by simply calling `from` and calling `concatAll` to give us the observable of the current. Then we'll call `toArray` to add each item to a new array to return. ```js var Rx = require('rx'); function wrapArray (items) { return Rx.Observable .from(items) .concatAll() .toArray(); } wrapArray([ Rx.Observable.just('one'), Rx.Observable.just('two') ]) .forEach( function (results) { console.log(results); }, function (err) { console.log('Error: %s', err); } ); // => ['one', 'two'] ``` Using an object literal can also be achieved with a little bit more work in which we call `pairs` to get the key/value pairs from the object. Then we'll call `concatMap` to extract both the key, and the eventual value through the `map` function on the value's `Observable`. Then we can call `reduce` to build up a new object to return. ```js var Rx = require('rx'); function wrapObject (obj) { return Rx.Observable .pairs(obj) .concatMap(function (o) { return o[1].map(function (v) { return [o[0], v]}); }) .reduce(function (acc, x) { var obj = Object.create(acc); obj[x[0]] = x[1]; return obj; }, {}); } wrapObject({ one: Rx.Observable.just(1), two: Rx.Observable.just(2) }) .forEach( function (results) { console.log(results); }, function (err) { console.log('Error: %s', err); } ); // => { one: 1, two: 2 } ``` * * * ## `async.parallel` ## The `async.parallel` runs an array of functions in parallel, without waiting until the previous function has completed. If any of the functions pass an error to its callback, the main callback is immediately called with the value of the error. Once the tasks have completed, the results are passed to the final callback as an array. It is also possible to use an object instead of an array. Each property will be run as a function and the results will be passed to the final callback as an object instead of an array. This can be a more readable way of handling results from async.parallel. #### async version #### In this example we'll run some examples with both an array or an object. ```js var async = require('async'); async.parallel([ function(callback){ setTimeout(function(){ callback(null, 'one'); }, 200); }, function(callback){ setTimeout(function(){ callback(null, 'two'); }, 100); } ], // optional callback function(err, results){ // the results array will equal ['one','two'] even though // the second function had a shorter timeout. }); // an example using an object instead of an array async.parallel({ one: function(callback){ setTimeout(function(){ callback(null, 1); }, 200); }, two: function(callback){ setTimeout(function(){ callback(null, 2); }, 100); } }, function(err, results) { // results is now equals to: {one: 1, two: 2} }); ``` #### RxJS version #### We can achieve the same functionality of `async.series` with an array by calling `Rx.Observable.forkJoin` with our array of observable sequences. This returns the last value from each sequence in "parallel". ```js var Rx = require('rx'); function wrapArrayParallel (items) { return Rx.Observable.forkJoin.apply(null, items); } wrapArrayParallel([ Rx.Observable.just('one'), Rx.Observable.just('two') ]) .forEach( function (results) { console.log(results); }, function (err) { console.log('Error: %s', err); } ); // => ['one', 'two'] ``` Using an object literal can also be achieved with a little bit more work, but totally reasonable. Instead of simply calling `forkJoin`, we first need to extract the observable sequences by calling `map` on the keys we obtained by `Object.keys`. Because the order of observable sequences is deterministic, we can then call `map` to transform the array into an object, by calling `reduce` on the array, turning the array into an object with the appropriate keys. ```js var Rx = require('rx'); function wrapObjectParallel (obj) { var keys = Object.keys(obj); var mapped = keys.map(function (key) { return obj[key]; }); return Rx.Observable.forkJoin.apply(null, mapped) .map(function (arr) { var idx = 0; return arr.reduce(function (acc, x) { var o = Object.create(acc); o[key[idx++]] = x; return o; }, {}); }); } wrapObjectParallel({ one: Rx.Observable.just(1), two: Rx.Observable.just(2) }) .forEach( function (results) { console.log(results); }, function (err) { console.log('Error: ' + err); } ); // => { one: 1, two: 2 } ``` * * * ## `async.whilst` ## The `async.whilst` method repeatedly call function, while test returns true. Calls the callback when stopped, or an error occurs. #### async version #### In this example we'll just run a keep calling the callback while the count is less than 5. ```js var async = require('async'); var count = 0; async.whilst( function () { return count < 5; }, function (callback) { count++; setTimeout(callback, 1000); }, function (err) { // 5 seconds have passed } ); ``` #### RxJS version #### We can achieve the same kind of functionality by using the `Rx.Observable.while` method which takes a condition and an observable sequence that we created by calling `Rx.Observable.create`. ```js var Rx = require('rx'); var count = 0; Rx.Observable.while( function () { return count < 5; }, Rx.Observable.create(function (observer) { setTimeout(function () { observer.onCompleted(count++); }, 1000); }) ) .subscribeOnCompleted( function () { /* 5 seconds have passed */ } ); ``` * * * ## `async.doWhilst` ## The `async.doWhilst` method is a post check version of `whilst`. To reflect the difference in the order of operations test and fn arguments are switched. `doWhilst` is to `whilst` as `do while` is to `while` in plain JavaScript. #### async version #### In this example we'll just run a keep calling the callback while the count is less than 5. ```js var async = require('async'); var count = 0; async.doWhilst( function (callback) { count++; setTimeout(callback, 1000); }, function () { return count < 5; }, function (err) { // 5 seconds have passed } ); ``` #### RxJS version #### We can achieve the same kind of functionality by using the `doWhile` on our observable sequence which takes a predicate to determine whether to continue running. ```js var Rx = require('rx'); var i = 0; var source = Rx.Observable.timer(0, 1000).doWhile( function () { return i++ < 5; }) .subscribeOnCompleted( // 5 seconds have passed ); ``` * * * ## `async.nextTick` ## The `async.nextTick` method calls the callback on a later loop around the event loop. In node.js this just calls process.nextTick, in the browser it falls back to setImmediate(callback) if available, otherwise setTimeout(callback, 0), which means other higher priority events may precede the execution of the callback. #### async version #### In this example we'll just run a keep calling the callback while the count is less than 5. ```js var async = require('async'); var call_order = []; async.nextTick( function () { call_order.push('two'); // call_order now equals ['one','two'] }); call_order.push('one'); ``` #### RxJS version #### We can achieve the same thing by using the `Rx.Scheduler.timeout` scheduler to schedule an item which will optimize for the runtime, for example, using `process.nextTick` if available, or `setImmediate` if available, or other fallbacks like `MessageChannel`, `postMessage` or even an async script load. ```js var Rx = require('rx'); var call_order = []; Rx.Scheduler.timeout.schedule(function () { call_order.push('two'); // call_order now equals ['one','two'] }); call_order.push('one'); ``` * * * ## `async.waterfall` ## The `async.waterfall` method runs an array of functions in series, each passing their results to the next in the array. However, if any of the functions pass an error to the callback, the next function is not executed and the main callback is immediately called with the error. #### async version #### In this example, we'll check whether a file exists, then rename it and finally return its [stats](http://nodejs.org/api/fs.html#fs_class_fs_stats). ```js var async = require('async'), fs = require('fs'), path = require('path'); // Get file and destination var file = path.join(__dirname, 'file.txt'), dest = path.join(__dirname, 'file1.txt'); async.waterfall([ function (callback) { fs.exists(file, function (flag) { if (!flag) { callback(new Error('File does not exist.')) } else { callback(null); } }); }, function (callback) { fs.rename(file, dest, function (err) { callback(err); }); }, function (callback) { fs.stat(dest, function (err, fsStat) { callback(err, fsStat); }); } ], function (err, fsStat) { if (err) { console.log(err); } else { console.log(JSON.stringify(fsStat)); } }); ``` #### RxJS version #### We can easily accomplish the same task as above using our wrappers for `Rx.Observable.fromCallback` and `Rx.Observable.fromNodeCallback`, creating a waterfall-like just using `concatMap`. We can now use it such as the following, wrapping `fs.exists`, `fs.rename` and `fs.stat`. ```js var Rx = require('rx'), fs = require('fs'), path = require('path'); var file = path.join(__dirname, 'file.txt'), dest = path.join(__dirname, 'file1.txt'), exists = Rx.Observable.fromCallback(fs.exists), rename = Rx.Observable.fromNodeCallback(fs.rename), stat = Rx.Observable.fromNodeCallback(fs.stat); exists(file) .concatMap(function (flag) { return flag ? rename(file, dest) : Rx.Observable.throw(new Error('File does not exist.')); }) .concatMap(function () { return stat(dest); }) .forEach( function (fsStat) { console.log(JSON.stringify(fsStat)); }, function (err) { console.log(err); } ); ``` * * * ## `async.compose` ## The [`async.compose`](https://github.com/caolan/async#composefn1-fn2) method creates a function which is a composition of the passed asynchronous functions. Each function consumes the return value of the function that follows. Composing functions f(), g() and h() would produce the result of f(g(h())), only this version uses callbacks to obtain the return values. Each function is executed with the `this` binding of the composed function. #### async version #### In this example, we'll chain together two functions, one to add 1 to a supplied argument, and then chain it to another to multiply the result by 3. ```js var async = require('async'); function add1(n, callback) { setTimeout(function () { callback(null, n + 1); }, 10); } function mul3(n, callback) { setTimeout(function () { callback(null, n * 3); }, 10); } var add1mul3 = async.compose(mul3, add1); add1mul3(4, function (err, result) { console.log(result); }); // => 15 ``` #### RxJS version #### Using RxJS, we can accomplish this using the usual composition operator for sequential operations `concatMap`. We'll wrap the `setTimeout` with a `wrapTimeout` method and ensure that we do deterministic cleanup via `clearTimeout`. Then we can compose together our `add1` and `mul3` functions which result in observable sequences. ```js var Rx = require('rx'); function wrapTimeout (fn, arg) { return Rx.Observable.create(function (obs) { // Ensure the composition of the this argument var id = setTimeout(function () { obs.onNext(fn.call(fn, arg)); obs.onCompleted(); }, 10); // Handle cleanup/early disposal return function () { clearTimeout(id); }; }); } function add1 (n) { return wrapTimeout(function (x) { return x + 1; }, n); } function mul3 (n) { return wrapTimeout(function (x) { return x * 3; }, n); } add1(4) .concatMap(mul3) .forEach( function (x) { console.log(x); }, function (err) { console.log('Error: %s', e); }); // => 15 ``` * * * RxJS-4.1.0/doc/mapping/async/whyrx.md000066400000000000000000000000001266736161100173610ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/bacon.js/000077500000000000000000000000001266736161100162505ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/bacon.js/comparing.md000066400000000000000000000000001266736161100205370ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/bacon.js/whyrx.md000066400000000000000000000442471266736161100177660ustar00rootroot00000000000000# RxJS for Bacon.js Users # [Bacon.js](https://github.com/baconjs/bacon.js) is a popular Reactive Programming library which was inspired by RxJS, ReactiveBanana among other libraries. But, before we get started, why use RxJS over Bacon.js? ### Performance ### RxJS has always been committed to providing the best performance available on any given JavaScript platform. Whether it is providing a small footprint for an `Observable` instance, to providing the capability of using `setImmediate` versus `setTimeout` versus `requestAnimationFrame`, all by choosing a different scheduler. In addition, since RxJS is written in regular JavaScript versus CoffeeScript, there are a lot more optimizations that can be made by hand to ensure performance. To make this more concrete, there is a project called [Kefir](https://github.com/rpominov/kefir) which is trying to make a more performance oriented version of Bacon.js. Here are some current numbers based upon the memory tests provided by Kefir. Note that these may change over time, but gives you a good indication of memory consumption. Below will be comparison of `combineLatest`, `filter`, `map`, and `scan`. ``` stream1.combine(stream2, ->) (1000 samples) ---------------------------------------------------------------- Kefir w/o subscr. 0.44 KiB w/ subscr. +0.80 KiB sum 1.23 KiB Bacon w/o subscr. 5.42 KiB w/ subscr. +6.15 KiB sum 11.57 KiB Rx w/o subscr. 0.43 KiB w/ subscr. +2.84 KiB sum 3.26 KiB ----------------------- Kefir 1.00 1.00 1.00 Bacon 12.45 7.71 9.39 Rx 0.98 3.56 2.65 .filter(->) (1000 samples) ---------------------------------------------------------------- Kefir w/o subscr. 0.31 KiB w/ subscr. +0.46 KiB sum 0.77 KiB Bacon w/o subscr. 1.82 KiB w/ subscr. +2.49 KiB sum 4.31 KiB Rx w/o subscr. 0.37 KiB w/ subscr. +1.44 KiB sum 1.81 KiB ----------------------- Kefir 1.00 1.00 1.00 Bacon 5.91 5.39 5.60 Rx 1.21 3.11 2.35 .map(->) (1000 samples) ---------------------------------------------------------------- Kefir w/o subscr. 0.30 KiB w/ subscr. +0.47 KiB sum 0.77 KiB Bacon w/o subscr. 1.81 KiB w/ subscr. +2.49 KiB sum 4.30 KiB Rx w/o subscr. 0.37 KiB w/ subscr. +1.43 KiB sum 1.81 KiB ----------------------- Kefir 1.00 1.00 1.00 Bacon 6.07 5.31 5.60 Rx 1.24 3.06 2.35 .scan(0, ->) (1000 samples) ---------------------------------------------------------------- Kefir w/o subscr. 0.30 KiB w/ subscr. +0.47 KiB sum 0.76 KiB Bacon w/o subscr. 1.68 KiB w/ subscr. +2.06 KiB sum 3.75 KiB Rx w/o subscr. 0.39 KiB w/ subscr. +1.13 KiB sum 1.52 KiB ----------------------- Kefir 1.00 1.00 1.00 Bacon 5.62 4.44 4.90 Rx 1.29 2.43 1.99 ``` As you'll note, while Kefir does pretty well here, Bacon.js does not. Bacon.js has a fairly heavy Observable object to start with and then subscriptions are fairly heavy as well. With both Kefir and RxJS, the initial size of the Observable is about the same. We'll get to the other fine tuning such as schedulers in the later section. ## Interoperability With The Libraries You Use ## One of the most important parts of when choosing a library is how well it works with the libraries you already use. Bacon.js ties itself directly to [jQuery](http://jquery.com) and [Zepto.js](http://zeptojs.com) for event binding with `asEventStream`. Not only that, but adding support for your own custom library's binding is difficult, whereas with RxJS it couldn't be easier. RxJS, on the other hand is more flexible about binding to the libraries you use. For example, if you use [jQuery](http://jquery.com) or [Zepto.js](http://zeptojs.com), `Rx.Observable.fromEvent` will work perfectly for you. In addition, we also support the other libraries out of the box: - [AngularJS](http://angularjs.org) - [Backbone.js](http://backbonejs.org) - [Ember.js](http://emberjs.org) You can also override this behavior in `fromEvent` so that you use native DOM or Node.js events via the `EventEmitter` directly by setting the `Rx.config.useNativeEvents` flag to true, so that it's never in doubt which event system you are using. When using native DOM events, you can attach a listener to one item, or you can attach listeners to a NodeList's children, we figure that out for you without you having to change your code, whereas Bacon.js does not. In order to support the libraries you use, it's very simple to add your own event binding, for example we can bind our events to the [Dojo Toolkit](http://dojotoolkit.org) using the `Rx.Observable.fromEventPattern` method: ```js require(['dojo/on', 'dojo/dom', 'rx'], function (on, dom, rx) { var input = dom.byId('input'); var source = Rx.Observable.fromEventPattern( function addHandler (h) { return on(input, 'click', h); }, function delHandler (_, signal) { signal.remove(); } ); var subscription = source.subscribeOnNext(function (x) { console.log('Next: Clicked!'); }); on.emit(input, 'click'); // => Next: Clicked! }); ``` In addition, transducers hold a great amount of potential for high performance querying, and to that end, RxJS has added [transducers support](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/transducers.md) via the `transduce` method. ```js var t = transducers; var source = Rx.Observable.range(1, 4); function increment(x) { return x + 1; } function isEven(x) { return x % 2 === 0; } var transduced = source.transduce(t.comp(t.map(increment), t.filter(isEven))); transduced.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 4 // => Completed ``` ## Browser Compatibility ## Browser and runtime compatibility is important to RxJS. For example, it can run not only in the browser, but also Node.js, RingoJS, Narwhal, Nashorn, and event Windows Scripting Host (WSH). We realize that there are many users out there without access to the latest browser, so we do the best to accommodate this with our `compat` builds. These builds bridge all the way back to IE6 for support which includes using `attachEvent` with event normalization, to DOM Level 1 events. Bacon.js does not have this behavior, and instead falls back to hoping that you use jQuery. We also want to build RxJS for speed with asynchronous operations, so we optimize for the browser and runtime you are using. For example, if your environment supports `setImmediate` for immediate execution, we will use that. Else, if you're in Node.js and `setImmediate` is not available, it falls back to `process.nextTick`. For browsers and runtimes that do not support `setImmediate`, we will fall back to `postMessage`, to `MessageChannel`, to asynchronous script loading, and finally defaulting back to `setTimeout` or event `WScript.Sleep` for Windows Scripting Host. These `compat` files are important as we will shim behavior that we require such as `Array#extras`, `Function#bind` and so forth, so there is no need to bring in your own compatibility library such as html5shiv, although if they do exist already, we will use the native or shimmed methods directly. ## Standards Based ## ### Iterables and Array#extras ### RxJS has a firm commitment to standards in JavaScript. Whether it is supporting the `Array#extras` standard method signatures such as `map`, `filter`, `reduce`, `every` and `some`, or to some new emerging standard on collections, RxJS will implement these features accordingly from pull collections to push. Unlike Bacon.js, RxJS conforms to `Array#extras` syntax to have the callback style of `function (item, index, collection)` in addition to accepting a `thisArg` for the calling context of the callback. This helps as you can easily reuse your code from the Array version to Observable version. An example of forward thinking is the introduction of ES6+ operators on Array with implementations on Observable such as: - `includes` - `find` - `findIndex` - `from` - `of` In addition, RxJS supports ES6 iterables in many methods which allow you to accept `Map`, `Set`, `Array` and array-like objects, for example in `Rx.Observable.from`, `flatMap`, `concatMap` among others. RxJS also has the capability of converting to Maps and Sets via the `toMap` and `toSet` methods if available in your runtime. This makes the following code possible to yield an array from an observable sequence and have it automatically converted into an observable sequence. ```js Rx.Observable.range(1, 3) .flatMap(function (x, i) { return [x, i]; }) .subscribeOnNext(function (value) { console.log('Value: %o', value); }); // => 1 // => 0 // => 2 // => 1 // => 3 // => 2 ``` ### Generators ### Generators also play a big part in the next version of JavaScript. RxJS also takes [full advantage of generators](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/generators.md) as iterables in such methods as the aforementioned `Rx.Observable.from`, `flatMap`, `concatMap` and other methods. For example, you can yield values like the following: ```js var source = Rx.Observable.from( function* () { yield 1; yield 2; yield 3; }() ); source.subscribeOnNext(function (value) { console.log('Next: %s', value); }); // => 1 // => 2 // => 3 ``` Generators also give the developer pretty powerful capabilities when dealing with asynchronous actions. RxJS introduced the `Rx.Observable.spawn` method which allows you to write async/await style code over Observables, Promises, Arrays, and just plain objects. ```js var spawned = Rx.Observable.spawn(function* () { var x = yield Rx.Observable.just(42); var y = yield Promise.resolve(42); console.log(x + y); try { var source = yield Rx.Observable.throw(new Error('woops')); console.log('Source is: %s', source); } catch (e) { console.log('Catched: %s', e.message); } }); spawned.subscribe(); // => 84 // => Source is: Error: woops ``` ### Promises ### Promises have been a great way for developers to express single value asynchronous values. With ES6, they have now been standardized and are starting to appear in all browsers. RxJS also supports `Promise` values as arguments in many places as noted in our [Bridging to Promises](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/promises.md) documentation. No more having to call `Rx.Observable.fromPromise` everywhere, RxJS automatically converts them for you. ```js var source = Rx.Observable.fromEvent(input, 'keyup') .map(function (e) { return e.target.value; }) .flatMapLatest(function (text) { return queryPromise(text); }); ``` RxJS also allows an Observable sequence to be converted to an ES6 compliant `Promise` with the `toPromise` method. ```js Rx.Observable.just(42) .toPromise() .then(function (value) { console.log(value); }); // => 42 ``` ## Swappable Concurrency Layer ## RxJS can easily be described in three pieces. First the `Observer` and `Observable` objects, secondly by the operators for composition on top of them, and finally a swappable concurrency layer which allows you to swap out your concurrency model at any time. This last part is key which distinguishes RxJS from many other libraries. There are a number of advantages to this approach that may be subtle at first, but invaluable as you start to use them. The first advantage is that you can switch where callbacks are executed, for example, instead of using `setImmediate` or any of its fallbacks, you can execute the callback on `window.requestAnimationFrame` for smooth animations. ```js // Available in RxJS-DOM project var scheduler = Rx.Scheduler.requestAnimationFrame; function render(value) { // Do something to render the value } Rx.Observable.range(1, 100, scheduler) .subscribe(render); ``` Schedulers also have advantages with virtual time, which means we can say what time it really is. This is great for deterministic testing in which you can verify the behavior of every single operator. RxJS, through the `TestScheduler` can record when items happen and what values were yielded, thus no need for asynchronous testing. ```js var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( Rx.ReactiveTest.onNext(201, 1), Rx.ReactiveTest.onCompleted(202) ); var results = scheduler.startWithCreate(function () { return xs.map(function (x, i) { return x + x + i }); }); // Some custom collection assertion for values collectionAssert.assertEqual(results.messages, [ Rx.ReactiveTest.onNext(201, 2), Rx.ReactiveTest.onCompleted(202) ]); // Some custom collection assertion for subscriptions collectionAssert.assertEqual(xs.subscriptions, [ Rx.ReactiveTest.subscribe(200, 202) ]) ``` Every operator within RxJS has tests written in this style where all data is easily verified. Not only can we create observables through the `TestScheduler`, but we can create Promises via the `createResolvedPromise` and `createRejectedPromise` methods. Virtual time has more advantages as well. Imagine if you had some historical stock data that you wanted to run through a simulation. Using the `Historical` scheduler, you can easily accomplish this. ```js var scheduler = new Rx.HistoricalScheduler(new Date(2014, 1)); var source = new Rx.Subject(); getStockData().forEach(function (stock) { scheduler.scheduleWithAbsolute(stock.date, function () { stock.onNext(stock); }); }); // Calculate with the data source.groupBy(function (stock) { return stock.symbol; }) /* Do something with the data */ .subscribe(function (info) { // Process the data }); ``` ## Backpressure ## In our applications, we consume a lot of data from external sources. But, what if our consumers (Observers) cannot handle the load from the observable sequence? RxJS has a number of mechanisms to handle this in the [Backpressure and Observable Sequences](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/backpressure.md) documentation. This could come in the form of lossy operations such as `debounce`, `throttleFirst`, `sample`, `pausable`, to loss-less operations such as `pausableBuffered`, `buffer`, etc. ## Build What You Want ## RxJS has a rather large surface area, so we give you the ability to build RxJS with only the things you want and none of the things you don't via the [`rx-cli`](https://www.npmjs.org/package/rx-cli) project. For example, we can build a `compat` version of RxJS with only the `map`, `flatMap`, `takeUntil`, and `fromEvent` methods, which keeps your RxJS version lean and mean. ```bash rx --lite --compat --methods map,flatmap,takeuntil,fromevent ``` ## Long Stack Trace Support ## Debugging programming with callbacks can be quite cumbersome. To that end, RxJS has introduced a notion of "Long Stack Traces" which allows you to quickly isolate your code from the plumbing not only of RxJS, but also Node.js and the browser cruft, thus getting you to the real cause of the issue. For example, without "long stack trace" support, typically, an error would look like the following: ```js var Rx = require('rx'); var source = Rx.Observable.range(0, 100) .timestamp() .map(function (x) { if (x.value > 98) throw new Error(); return x; }); source.subscribeOnError( function (err) { console.log(err.stack); }); ``` ```bash $ node example.js Error at C:\GitHub\example.js:6:29 at AnonymousObserver._onNext (C:\GitHub\rxjs\dist\rx.all.js:4013:31) at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.next (C:\GitHub\rxjs\dist\rx.all.js:1863:12) at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AutoDetachObserverPrototype.next (C:\GitHub\rxjs\dist\rx.all.js:9226:23) at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AnonymousObserver._onNext (C:\GitHub\rxjs\dist\rx.all.js:4018:18) at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.next (C:\GitHub\rxjs\dist\rx.all.js:1863:12) at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AutoDetachObserverPrototype.next (C:\GitHub\rxjs\dist\rx.all.js:9226:23) ``` This can be remedied using "long stack trace" support by setting the following flag: ```js Rx.config.longStackSupport = true; ``` Then we can run our program again using this support ```bash $ node example.js Error at C:\GitHub\example.js:6:29 From previous event: at Object. (C:\GitHub\example.js:3:28) From previous event: at Object. (C:\GitHub\example.js:4:4) From previous event: at Object. (C:\GitHub\example.js:5:4) ``` ## Many Examples and Tutorials ## As people try to learn RxJS, it's always great to have [examples](https://github.com/Reactive-Extensions/RxJS/tree/master/examples) to get them started. To that end, RxJS ships a number of examples out of the box including simple scenarios such as Autocomplete, Follow the Mouse, Drawing, to more complete examples like databinding using a little demo project called `TKO`, to a complete game of Alphabet Invasion. Want to learn RxJS at your own pace? We also have tutorials for that as well called [LearnRx](http://reactivex.io/learnrx/) which will walk you through the basics of learning to compose arrays, and then how that applies to observable sequences. There are also many [community resources](https://github.com/Reactive-Extensions/RxJS#resources) to learn RxJS from videos, to presentations, to examples with integration with such libraries as AngularJS and React. ## Extensive Documentation ## As stated before, RxJS has a rather large surface area so sometimes it's hard to know where to start. To that end, RxJS has [complete API documentation](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#reactive-extensions-class-library), as well as a [Getting Started Guide](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#getting-started-with-rxjs) as well as [Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#rxjs-guidelines), a [How Do I?](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#how-do-i) section as well as a [growing list of comparisons with other libraries](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#mapping-rxjs-from-different-libraries). RxJS-4.1.0/doc/mapping/highland/000077500000000000000000000000001266736161100163315ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/highland/comparing.md000066400000000000000000000000001266736161100206200ustar00rootroot00000000000000RxJS-4.1.0/doc/mapping/highland/whyrx.md000066400000000000000000000461361266736161100200460ustar00rootroot00000000000000# RxJS for Highland.js Users # [Highland.js](http://highlandjs.org/) is a general purpose utility belt for handling both synchronous and asynchronous code. It is built upon node.js with EventEmitters and Streams with a focus on composition. But, before we get started, why use RxJS over Highland.js? ### Uses an Array#extras interface instead of node.js Streams ### Highland.js is built upon node.js infrastructure, including Streams. This is great if you're a node developer using streams, but there are many who do not and simply use callbacks and events. In addition, Streams are hard to get right, hence the changes between Streams 1, 2 and 3 with regards to pause/resume, high water marks, draining, etc. The [Streams Handbook](https://github.com/substack/stream-handbook) is a great way to get started looking at streams as an approach. The Reactive Extensions are built on a language and runtime neutral approach that works great across languages, whether it is Java, .NET, Python, Ruby, Scala, Clojure, and JavaScript. This approach allows you easily to switch between Java, JavaScript, and .NET, and get a familiar feel between all the versions. RxJS was built upon the concept with the Array#extras in mind, where if you know Arrays in JavaScript, then you know RxJS. The only real difference is the possible element of time, and a push model instead of the Array's pull model. For example, you can write the following using Arrays in JavaScript. ```js var source = Array.of(1,2,3,4,5); source .map(function (x, i, a) { return x * x; }) .filter(function (x, i, a) { return x % 3 === 0; }) .forEach(function (x, i, a) { console.log('next', x); }); ``` The same can then be done using RxJS with only one small code change of changing `Array` to `Rx.Observable`. ```js var source = Rx.Observable.of(1,2,3,4,5); source .map(function (x, i, a) { return x * x; }) .filter(function (x, i, a) { return x % 3 === 0; }) .forEach(function (x, i, a) { console.log('next', x); }); ``` ### No Reliance on node.js Infrastructure ### Highland.js is built upon node.js infrastructure using both the `EventEmitter` and `Stream` class which bring a number of dependencies with it for Browserify to make it work for the browser., including the many drawbacks of the ever changing Streams designs within node.js. As it interoperates with existing streams, they may or may not be well behaved in whether they will actually pause or not and whether backpressure actually works. These were key reasons for changes between Streams 1, 2 and 3. Instead, RxJS takes a clean room approach with no external dependencies, which allows for a cleaner design without the technical debt of the `Stream` and `EventEmitter` designs in node.js. RxJS is built from scratch on a solid platform of the core objects of `Observer`, `Observable`, operators for composition, and `Scheduler` for controlling concurrency. ## Interoperability With Libraries and the DOM ## One of the most important parts of when choosing a library is how well it works with the libraries you already use. Highland.js, by default, ties itself directly to [jQuery](http://jquery.com) or any kind of event emitter with an `on` method, such as [Zepto.js](http://zeptojs.com) for all DOM event binding, with no deterministic way of unbinding that added event handler. For everything else, `EventEmitters` are used for eventing. RxJS, on the other hand is more flexible about binding to the libraries you use or to the plain old DOM. You can bind directly to the DOM elements using `Rx.Observable.fromEvent` which binds not only to a standard DOM Element, but also DOM NodeLists, etc directly, with deterministic disposal of events. For external libraries, if you use [jQuery](http://jquery.com) or [Zepto.js](http://zeptojs.com), `Rx.Observable.fromEvent` will work perfectly for you. In addition, we also support the other libraries out of the box: - [AngularJS](http://angularjs.org) - [Backbone.js](http://backbonejs.org) - [Ember.js](http://emberjs.org) You can also override this behavior in `fromEvent` so that you use native DOM or Node.js events via the `EventEmitter` directly by setting the `Rx.config.useNativeEvents` flag to true, so that it's never in doubt which event system you are using. When using native DOM events, you can attach a listener to one item, or you can attach listeners to a NodeList's children, we figure that out for you without you having to change your code. In order to support the libraries you use, it's very simple to add your own event binding, for example we can bind our events to the [Dojo Toolkit](http://dojotoolkit.org) using the `Rx.Observable.fromEventPattern` method: ```js require(['dojo/on', 'dojo/dom', 'rx'], function (on, dom, rx) { var input = dom.byId('input'); var source = Rx.Observable.fromEventPattern( function addHandler (h) { return on(input, 'click', h); }, function delHandler (_, signal) { signal.remove(); } ); var subscription = source.subscribeOnNext(function (x) { console.log('Next: Clicked!'); }); on.emit(input, 'click'); // => Next: Clicked! }); ``` In addition, transducers hold a great amount of potential for high performance querying, and to that end, RxJS has added [transducers support](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/transducers.md) via the `transduce` method. ```js var t = transducers; var source = Rx.Observable.range(1, 4); function increment(x) { return x + 1; } function isEven(x) { return x % 2 === 0; } var transduced = source.transduce(t.comp(t.map(increment), t.filter(isEven))); transduced.subscribe( function (x) { console.log('Next: %s', x); }, function (e) { console.log('Error: %s', e); }, function () { console.log('Completed'); }); // => Next: 2 // => Next: 4 // => Completed ``` ## Browser Compatibility ## Browser and runtime compatibility is important to RxJS. For example, it can run not only in the browser, but also Node.js, RingoJS, Narwhal, Nashorn, and event Windows Scripting Host (WSH). We realize that there are many users out there without access to the latest browser, so we do the best to accommodate this with our `compat` builds. These builds bridge all the way back to IE6 for support which includes using `attachEvent` with event normalization, to DOM Level 1 events. Highland.js does not have this behavior, and instead relies solely on `EventEmitter` or jQuery for events support. We also want to build RxJS for speed with asynchronous operations, so we optimize for the browser and runtime you are using. For example, if your environment supports `setImmediate` for immediate execution, we will use that. Else, if you're in Node.js and `setImmediate` is not available, it falls back to `process.nextTick`. For browsers and runtimes that do not support `setImmediate`, we will fall back to `postMessage`, to `MessageChannel`, to asynchronous script loading, and finally defaulting back to `setTimeout` or event `WScript.Sleep` for Windows Scripting Host. These `compat` files are important as we will shim behavior that we require such as `Array#extras`, `Function#bind` and so forth, so there is no need to bring in your own compatibility library such as html5shiv, although if they do exist already, we will use the native or shimmed methods directly. ## Standards Based ## ### Iterables and Array#extras ### RxJS has a firm commitment to standards in JavaScript. Whether it is supporting the `Array#extras` standard method signatures such as `map`, `filter`, `reduce`, `every` and `some`, or to some new emerging standard on collections, RxJS will implement these features accordingly from pull collections to push. Unlike Highland.js, RxJS conforms to `Array#extras` syntax to have the callback style of `function (item, index, collection)` in addition to accepting a `thisArg` for the calling context of the callback. This helps as you can easily reuse your code from the Array version to Observable version. An example of forward thinking is the introduction of ES6+ operators on Array with implementations on Observable such as: - `includes` - `find` - `findIndex` - `from` - `of` In addition, RxJS supports ES6 iterables in many methods which allow you to accept `Map`, `Set`, `Array` and array-like objects, for example in `Rx.Observable.from`, `flatMap`, `concatMap` among others. RxJS also has the capability of converting to Maps and Sets via the `toMap` and `toSet` methods if available in your runtime. This makes the following code possible to yield an array from an observable sequence and have it automatically converted into an observable sequence. ```js Rx.Observable.range(1, 3) .flatMap(function (x, i) { return [x, i]; }) .subscribeOnNext(function (value) { console.log('Value: %o', value); }); // => 1 // => 0 // => 2 // => 1 // => 3 // => 2 ``` ### Generators ### Generators also play a big part in the next version of JavaScript. RxJS also takes [full advantage of generators](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/generators.md) as iterables in such methods as the aforementioned `Rx.Observable.from`, `flatMap`, `concatMap` and other methods. For example, you can yield values like the following: ```js var source = Rx.Observable.from( function* () { yield 1; yield 2; yield 3; }() ); source.subscribeOnNext(function (value) { console.log('Next: %s', value); }); // => 1 // => 2 // => 3 ``` Generators also give the developer pretty powerful capabilities when dealing with asynchronous actions. RxJS introduced the `Rx.spawn` method which allows you to write async/await style code over Observables, Promises, Arrays, and just plain objects. ```js Rx.spawn(function* () { var x = yield Rx.Observable.just(42); var y = yield Promise.resolve(42); console.log(x + y); try { var source = yield Rx.Observable.throwError(new Error('woops')); } catch (e) { console.log(e.message); } })(); // => 84 // => woops ``` ### Promises ### Promises have been a great way for developers to express single value asynchronous values. With ES6, they have now been standardized and are starting to appear in all browsers. RxJS also supports `Promise` values as arguments in many places as noted in our [Bridging to Promises](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/promises.md) documentation. No more having to call `Rx.Observable.fromPromise` everywhere, RxJS automatically converts them for you. ```js var source = Rx.Observable.fromEvent(input, 'keyup') .map(function (e) { return e.target.value; }) .flatMapLatest(function (text) { return queryPromise(text); }); ``` RxJS also allows an Observable sequence to be converted to an ES6 compliant `Promise` with the `toPromise` method. ```js Rx.Observable.just(42) .toPromise() .then(function (value) { console.log(value); }); // => 42 ``` ## Swappable Concurrency Layer ## RxJS can easily be described in three pieces. First the `Observer` and `Observable` objects, secondly by the operators for composition on top of them, and finally a swappable concurrency layer which allows you to swap out your concurrency model at any time. This last part is key which distinguishes RxJS from many other libraries. There are a number of advantages to this approach that may be subtle at first, but invaluable as you start to use them. The first advantage is that you can switch where callbacks are executed, for example, instead of using `setImmediate` or any of its fallbacks, you can execute the callback on `window.requestAnimationFrame` for smooth animations. ```js // Available in RxJS-DOM project var scheduler = Rx.Scheduler.requestAnimationFrame; function render(value) { // Do something to render the value } Rx.Observable.range(1, 100, scheduler) .subscribe(render); ``` Schedulers also have advantages with virtual time, which means we can say what time it really is. This is great for deterministic testing in which you can verify the behavior of every single operator. RxJS, through the `TestScheduler` can record when items happen and what values were yielded, thus no need for asynchronous testing. ```js var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( Rx.ReactiveTest.onNext(201, 1), Rx.ReactiveTest.onCompleted(202) ); var results = scheduler.startWithCreate(function () { return xs.map(function (x, i) { return x + x + i }); }); // Some custom collection assertion for values collectionAssert.assertEqual(results.messages, [ Rx.ReactiveTest.onNext(201, 2), Rx.ReactiveTest.onCompleted(202) ]); // Some custom collection assertion for subscriptions collectionAssert.assertEqual(xs.subscriptions, [ Rx.ReactiveTest.subscribe(200, 202) ]) ``` Every operator within RxJS has tests written in this style where all data is easily verified. Not only can we create observables through the `TestScheduler`, but we can create Promises via the `createResolvedPromise` and `createRejectedPromise` methods. Virtual time has more advantages as well. Imagine if you had some historical stock data that you wanted to run through a simulation. Using the `Historical` scheduler, you can easily accomplish this. ```js var scheduler = new Rx.HistoricalScheduler(new Date(2014, 1)); var source = new Rx.Subject(); getStockData().forEach(function (stock) { scheduler.scheduleWithAbsolute(stock.date, function () { stock.onNext(stock); }); }); // Calculate with the data source.groupBy(function (stock) { return stock.symbol }) /* Do something with the data */ .subscribe(function (info) { // Process the data }); ``` ## Multicast Backpressure ## In our applications, we consume a lot of data from external sources. But, what if our consumers cannot handle the load from the sequence? Highland.js uses the standard backpressure mechanisms such as `pause`/`resume` from standard node.js streams, as well as `throttle` and `debounce` for lossy operations. The pause/resume from normal node.js streams work for multicast streams to share backpressure via `fork`, or to keep them separate with `observe`, but this can sometimes lead to confusion, especially when mixed. RxJS has a number of mechanisms to handle this in the [Backpressure and Observable Sequences](https://github.com/Reactive-Extensions/RxJS/blob/master/doc/gettingstarted/backpressure.md) documentation. This could come in the form of lossy operations such as `debounce`, `throttleFirst`, `sample`, `pausable`, to loss-less operations such as `pausableBuffered`, `buffer`, `windowed`, `stopAndWait`, etc. These work on the idea of multicast streams so that one consumer is not punished by another's inability to process the data in a timely manner. In RxJS, you can synchronize across streams with backpressure with the pause/resume semantics using a `Pauser` or just any ordinary `Subject` with `onNext(true)` to resume and `onNext(false)` to pause: ```js var pauser = new Rx.Pauser(); var source1 = getData().pausableBuffered(pauser); var source2 = getOtherData().pausableBuffered(pauser); // To pause both streams pauser.pause(); // To resume both streams pauser.resume(); ``` ## Build What You Want ## RxJS has a rather large surface area, so we give you the ability to build RxJS with only the things you want and none of the things you don't via the [`rx-cli`](https://www.npmjs.org/package/rx-cli) project. For example, we can build a `compat` version of RxJS with only the `map`, `flatMap`, `takeUntil`, and `fromEvent` methods, which keeps your RxJS version lean and mean. ```bash rx --lite --compat --methods map,flatmap,takeuntil,fromevent ``` ## Long Stack Trace Support ## Debugging programming with callbacks can be quite cumbersome. To that end, RxJS has introduced a notion of "Long Stack Traces" which allows you to quickly isolate your code from the plumbing not only of RxJS, but also node.js and the browser cruft, thus getting you to the real cause of the issue. For example, without "long stack trace" support, typically, an error would look like the following: ```js var Rx = require('rx'); var source = Rx.Observable.range(0, 100) .timestamp() .map(function (x) { if (x.value > 98) throw new Error(); return x; }); source.subscribeOnError( function (err) { console.log(err.stack); }); ``` ```bash $ node example.js Error at C:\GitHub\example.js:6:29 at AnonymousObserver._onNext (C:\GitHub\rxjs\dist\rx.all.js:4013:31) at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.next (C:\GitHub\rxjs\dist\rx.all.js:1863:12) at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AutoDetachObserverPrototype.next (C:\GitHub\rxjs\dist\rx.all.js:9226:23) at AutoDetachObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AnonymousObserver._onNext (C:\GitHub\rxjs\dist\rx.all.js:4018:18) at AnonymousObserver.Rx.AnonymousObserver.AnonymousObserver.next (C:\GitHub\rxjs\dist\rx.all.js:1863:12) at AnonymousObserver.Rx.internals.AbstractObserver.AbstractObserver.onNext (C:\GitHub\rxjs\dist\rx.all.js:1795:35) at AutoDetachObserverPrototype.next (C:\GitHub\rxjs\dist\rx.all.js:9226:23) ``` This can be remedied using "long stack trace" support by setting the following flag: ```js Rx.config.longStackSupport = true; ``` Then we can run our program again using this support ```bash $ node example.js Error at C:\GitHub\example.js:6:29 From previous event: at Object. (C:\GitHub\example.js:3:28) From previous event: at Object. (C:\GitHub\example.js:4:4) From previous event: at Object. (C:\GitHub\example.js:5:4) ``` ## Many Examples and Tutorials ## As people try to learn RxJS, it's always great to have [examples](https://github.com/Reactive-Extensions/RxJS/tree/master/examples) to get them started. To that end, RxJS ships a number of examples out of the box including simple scenarios such as Autocomplete, Follow the Mouse, Drawing, to more complete examples like databinding using a little demo project called `TKO`, to a complete game of Alphabet Invasion. Want to learn RxJS at your own pace? We also have tutorials for that as well called [LearnRx](http://jhusain.github.io/learnrx/) which will walk you through the basics of learning to compose arrays, and then how that applies to observable sequences. There are also many [community resources](https://github.com/Reactive-Extensions/RxJS#resources) to learn RxJS from videos, to presentations, to examples with integration with such libraries as AngularJS and React. ## Extensive Documentation ## As stated before, RxJS has a rather large surface area so sometimes it's hard to know where to start. To that end, RxJS has [complete API documentation](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#reactive-extensions-class-library), as well as a [Getting Started Guide](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#getting-started-with-rxjs) as well as [Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#rxjs-guidelines), a [How Do I?](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#how-do-i) section as well as a [growing list of comparisons with other libraries](https://github.com/Reactive-Extensions/RxJS/tree/master/doc#mapping-rxjs-from-different-libraries). RxJS-4.1.0/doc/readme.md000066400000000000000000000207461266736161100147100ustar00rootroot00000000000000# RxJS v4.0 Reactive Extensions (Rx) is a library for composing asynchronous and event-based programs using observable sequences and LINQ-style query operators. Data sequences can take many forms, such as a stream of data from a file or web service, web services requests, system notifications, or a series of events such as user input. Reactive Extensions represents all these data sequences as observable sequences. An application can subscribe to these observable sequences to receive asynchronous notifications as new data arrive. RxJS has no dependencies which complements and interoperates smoothly with both synchronous data streams such as iterable objects in JavaScript and single-value asynchronous computations such as Promises as the following diagram shows:
Single return valueMultiple return values
Pull/Synchronous/Interactive Object Iterables(Array | Set | Map)
Push/Asynchronous/Reactive Promise Observable
To put it more concretely, if you know how to program against Arrays using the Array#extras, then you already know how to use RxJS!
Example code showing how similar high-order functions can be applied to an Array and an Observable
IterableObservable
getDataFromLocalMemory()
  .filter (s => s != null)
  .map(s => s + 'transformed')
  .forEach(s => console.log(\`next => ${s}\`))
getDataFromNetwork()
  .filter (s => s != null)
  .map(s => s + 'transformed')
  .subscribe(s => console.log(\`next => ${s}\`))
There are a number of ways of getting started with RxJS including: - [Getting Started With RxJS](#getting-started-with-rxjs) - [RxJS Guidelines](#rxjs-guidlines) - [Getting to Know RxJS Libraries](#getting-to-know-rxjs-libraries) - [How Do I?](#how-do-i) - [Mapping RxJS from Different Libraries](#mapping-rxjs-from-different-libraries) - [API Documentation](#reactive-extensions-class-library) ## Getting Started With RxJS Getting started with the Reactive Extensions for JavaScript is easy. Let's start with the basics here: - [What are the Reactive Extensions?](gettingstarted/what.md) - [Exploring Major Concepts in RxJS](gettingstarted/exploring.md) - [Creating and Querying Observable Sequences](gettingstarted/creatingquerying.md) 1. [Creating and Subscribing to Simple Observable Sequences](gettingstarted/creating.md) 2. [Bridging to Events](gettingstarted/events.md) 3. [Bridging to Callbacks](gettingstarted/callbacks.md) 4. [Bridging to Promises](gettingstarted/promises.md) 5. [Generators and Observable Sequences](gettingstarted/generators.md) 6. [Querying Observable Sequences](gettingstarted/querying.md) 7. [Error Handling With Observable Sequences](gettingstarted/errors.md) 8. [Transducers with Observable Sequences](gettingstarted/transducers.md) 9. [Backpressure with Observable Sequences](gettingstarted/backpressure.md) 10. [Operators by Category](gettingstarted/categories.md) 11. Which Operator do I use? - [Creation Operators](gettingstarted/which-static.md) - [Instance Operators](gettingstarted/which-instance.md) - [Subjects](gettingstarted/subjects.md) - [Scheduling and Concurrency](gettingstarted/schedulers.md) - [Testing and Debugging](gettingstarted/testing.md) - [Implementing Your Own Operators](gettingstarted/operators.md) ## RxJS Guidelines ## Curious on how we designed RxJS? This is covered along with overall guidelines of how your RxJS code should operate. In addition, we have contribution guidelines which set the bar for which we accept contributions. - [RxJS Code of Conduct](https://github.com/Reactive-Extensions/RxJS/tree/master/code-of-conduct.md) - [RxJS Design Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines) - [RxJS Contribution Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/contributing.md) ## Getting to Know RxJS Libraries ## There are many libraries that make up the Reactive Extensions for JavaScript, so it may be a little daunting at first to know which ones to include. This will serve as a guide for which libraries you might need. For most operations you'll only need [`rx.lite.js`](libraries/lite/rx.lite.md), but you may find you need more operators, so you start with [`rx.js`](libraries/main/rx.md) and add additional files to mix in functionality as you need it. ### The complete library: - [`rx.all.js`](libraries/main/rx.complete.md) ### Main Libraries: - [`rx.js`](libraries/main/rx.md) - [`rx.aggregates.js`](libraries/main/rx.aggregates.md) - [`rx.async.js`](libraries/main/rx.async.md) - [`rx.binding.js`](libraries/main/rx.binding.md) - [`rx.coincidence.js`](libraries/main/rx.coincidence.md) - [`rx.experimental.js`](libraries/main/rx.experimental.md) - [`rx.joinpatterns.js`](libraries/main/rx.joinpatterns.md) - [`rx.testing.js`](libraries/main/rx.testing.md) - [`rx.time.js`](libraries/main/rx.time.md) - [`rx.virtualtime.js`](libraries/main/rx.virtualtime.md) ### Lite Libraries: - [`rx.lite.js`](libraries/lite/rx.lite.md) - [`rx.lite.extras.js`](libraries/lite/rx.lite.extras.md) - [`rx.lite.aggregates.js`](libraries/lite/rx.lite.aggregates.md) - [`rx.lite.async.js`](libraries/lite/rx.lite.async.md) - [`rx.lite.coincidence.js`](libraries/lite/rx.lite.coincidence.md) - [`rx.lite.experimental.js`](libraries/lite/rx.lite.experimental.md) - [`rx.lite.joinpatterns.js`](libraries/lite/rx.lite.joinpatterns.md) - [`rx.lite.testing.js`](libraries/lite/rx.lite.testing.md) - [`rx.lite.time.js`](libraries/lite/rx.lite.time.md) - [`rx.lite.virtualtime.js`](libraries/lite/rx.lite.virtualtime.md) ### Core Libraries: - [`rx.core.js`](libraries/core/rx.core.md) - [`rx.core.binding.js`](libraries/core/rx.core.binding.md) - [`rx.core.testing.js`](libraries/core/rx.core.testing.md) ## How Do I? ## There is a large surface area with the Reactive Extensions for JavaScript, so it might be hard to know where to start. This will serve as a guide to answer some of the more basic questions. 1. [How do I wrap an existing API?](howdoi/wrap.md) 2. [How do I integrate jQuery with RxJS?](howdoi/jquery.md) 3. [How do I integrate Angular.js with RxJS?](howdoi/angular.md) 4. [How do I create a simple event emitter?](howdoi/eventemitter.md) ## Mapping RxJS from Different Libraries ## Converting your existing code from other libraries can be easy. Many of the concepts you already know from popular libraries such as [Bacon.js](https://github.com/baconjs/bacon.js) and [Async.js](https://github.com/caolan/async) 1. For Bacon.js Users - [Why RxJS versus Bacon.js](mapping/bacon.js/whyrx.md) - [Comparing RxJS and Bacon.js](mapping/bacon.js/comparing.md) 2. For Async.js Users - [Why RxJS versus Async.js](mapping/async/whyrx.md) - [Comparing RxJS and Async.js](mapping/async/comparing.md) 3. For Highland.js Users - [Why RxJS versus Highland.js](mapping/highland/whyrx.md) - [Comparing RxJS and Highland.js](mapping/highland/comparing.md) ## Reactive Extensions Class Library This section contains the reference documentation for the Reactive Extensions class library. ### Helpers - [`Rx.config`](api/config/readme.md) - [`Rx.helpers`](api/helpers/readme.md) ### Core - [`Rx.Observable`](api/core/observable.md) - [`Rx.Observer`](api/core/observer.md) - [`Rx.Notification`](api/core/notification.md) ### Subjects - [`Rx.AsyncSubject`](api/subjects/asyncsubject.md) - [`Rx.BehaviorSubject`](api/subjects/behaviorsubject.md) - [`Rx.ReplaySubject`](api/subjects/replaysubject.md) - [`Rx.Subject`](api/subjects/subject.md) ### Schedulers - [`Rx.HistoricalScheduler`](api/schedulers/historicalscheduler.md) - [`Rx.Scheduler`](api/schedulers/scheduler.md) - [`Rx.VirtualTimeScheduler`](api/schedulers/virtualtimescheduler.md) ### Disposables - [`Rx.CompositeDisposable`](api/disposables/compositedisposable.md) - [`Rx.Disposable`](api/disposables/disposable.md) - [`Rx.RefCountDisposable`](api/disposables/refcountdisposable.md) - [`Rx.SerialDisposable`](api/disposables/serialdisposable.md) - [`Rx.SingleAssignmentDisposable`](api/disposables/singleassignmentdisposable.md) ### Testing - [`Rx.ReactiveTest`](api/testing/reactivetest.md) - [`Rx.Recorded`](api/testing/recorded.md) - [`Rx.Subscription`](api/testing/subscription.md) - [`Rx.TestScheduler`](api/testing/testscheduler.md) RxJS-4.1.0/index.js000066400000000000000000000006241266736161100140220ustar00rootroot00000000000000var Rx = require('./dist/rx'); require('./dist/rx.aggregates'); require('./dist/rx.async'); require('./dist/rx.backpressure'); require('./dist/rx.binding'); require('./dist/rx.coincidence'); require('./dist/rx.experimental'); require('./dist/rx.joinpatterns'); require('./dist/rx.sorting'); require('./dist/rx.virtualtime'); require('./dist/rx.testing'); require('./dist/rx.time'); module.exports = Rx; RxJS-4.1.0/license.txt000066400000000000000000000013041266736161100145340ustar00rootroot00000000000000Copyright (c) Microsoft. All rights reserved. Microsoft Open Technologies would like to thank its contributors, a list of whom are at http://rx.codeplex.com/wikipage?title=Contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. RxJS-4.1.0/logos/000077500000000000000000000000001266736161100134765ustar00rootroot00000000000000RxJS-4.1.0/logos/logo.png000066400000000000000000000312011266736161100151410ustar00rootroot00000000000000‰PNG  IHDR––<qâ2HIDATxÚí ˜TŹ÷ÿŠF‰šÄ˜›/Fs“hã71~7‰äº/.¸ƒ‚ˆ¢€ˆ HË23Ý}ªÎ°‰€l#‹"»²ïþ ë°Ã ;³ÏôvßÓ]g¦º¦NwÏ ÃÚõ<ï#¬}~ý—z«^ ¹’+¹’+¹’+¹’+¹’+¹’+¹’+¹’+¹’+¹’+¹.Üê„à¹6„þÿQþëŒß—Âý»x~Bú-§áº>„&u“¯Tr%SR~‚÷ï~x_ €uÀêŸDö-Ù Ø×ðÑd©~°×}à÷‡ÐççIÈ’K»Ž‘:ù`<àƒÙ—`Z凙Dz,ädôqÅÛ&‚lxX‹ˆš ¹<ùj&WxåÁu#ÑŽ`ZE°”Æ‚Iof€àÊ&È&ûa´ ‘ê%_ÕK|Y±¹³¨}UJU°ô }½äB‡–Áøs®zÉWø\GáºÆ‡t)Í¡šB¥(X!ÁºÔÏ“ÉØë’ Ô]õ(ÛëH9“P‘j…ŠÉòÈ=Û±üÏáùë¿‘zï¿rç¤ýj8<7»ñÁu.4H*ÚŶJÁ^&·u´ºù#ð„ö“m$[J6‡l:Ù7dS„}~d,Ì]ãÁw}I ‘m£¿Û< æÆI`+&R–ù5Ø'S`¸¦ÀÓúk¤üs\7%ŸÐ¸|ð>B®êxÕ@2ËŽ€Þ$š@6†l4Ù¿-þíßd_ÿe43DP…&GÀ L/%+šž7á «øéÛHqU@ª”Øi²­Âm¥“12SüÙ‚jÙ'dŸ:(•êþƉ¯e+U,¨fÇ€Êj1ÙËY¶,lŒ‡`ü²©w”Áû§b¸ÿQã%j°|@‰§réÅÏôfƒUUµ’ƒõ;ë¶ZŃJ§ ¨œ€²AZC¶V²uó­_¾ÆÛkÁî˜וIZb*QëË‹ "‚查ó>©‘IYÞäꦓ-¥¿Ûim«Áy‰Èð,åH%û˜¬—€*UR+¦¨Õ@)¶, rR+5®²3@ªé @%»>*¨5 Hë%Ûe¼`Œ™¤b-WÃ{Û„d6½VPV/TŒ¶Îre迉” ,·ggy .a=Éz+jeƒe«Õ ¡F#¥ò‚“Z©.P.+L• š¥ÄTNñÔò@­S@Ú(lý® n?²lôF2áº>ITX¥Ìëýaׯ¾öGŠšÁD‹š%áL“šð°:u'ûH€ÕK¸ÁT– U_Í,ñ@³È6‹=KÀ3J˜®^õ•& ´ƒõYš@}âú–IP9µA)SØf²-1Œ~‡²LðM›ÀS×ÂýÇ!ôf½„ëN)?!ÅéD.n;â¯J¥üTøaqrgœ€â¡T=7hí¦Åz¸–ËÌ5­€äJ­€x° 8cµ²¡’öхϰ œ§¸?*ÙõÅJ†i«°m¶µÜÌS›ÁfnorI÷”Ù}”굪¶³X  »"NŠÄC]Ⱥ’u“ÔJuƒƒÄ>@V$Áäôõ­2Å)ññ[3…û›¨¸Ài1â*9¦Z¦¸¿Õ T: T˜¶“íp°íÒÇÑçúIÁ¶’¥­…çæK , Îï$¥Z¨‚ë³â©}a7Q©Î,K­T°ú¥²Tj'YA *Wé#] §ë˜¡Ã—™¡ÝuÉe’e\gš°ÇŠ«œ Z# ’UJ” SÙNa»¤?g « ™y’ÔkeɹTÔêJ?X‹ &»s2_Ø…q ºyè²N XÝ%7ØS¨Õ0±}ã«FkŒõ9EV‡Ãeé¡“uÓCG륇²/Oí¹‚âºúÙòË ¢ºÑUu]\eg+•˜Ê†JU)¨, $Ëvkl—d;%È`e[ÀvdÂûÖ%[Yu¨*tÐ‹Ä ê(¬“¬«_¹¤øÊ-ܘ¿š=Wed…uH±¬Öa‚*û RÌúô¯$®"(¾G€\MÐ-¦ÿŸ_OïWHÙŸ Õz¨t@Ùí!Û«±=ÂdÐÀ‚¤^'6Áà3ЮþÅœ ÞŸŸØC6é]gÁÃCï’u`½__™Úøªo  ò‹Î‡ëuœÔêuÀÚKPí¼Š ¨6Pë®!h¾OÊD¶ðªÊjµBÊå`}ƒ•N¥vI0Ù@í¶_²}’íÕ&ÃEo´" ê',»XK_ýžTho"PíêôY{I­ÞáûˆÂg jUTGqƒ’Zm'¨6Tª5×<ב:]«¯ªg8(Õ&•Ú¥¨“ Ò²ƒdÙ;(þý€› ÙNÉ5Ò÷+³²ÆuH»å"T,ï]AeOçþvÞÖ€%ÇWj™¡Ø¶)ªfçh©pƒ¶Z¶Õª~D­¶X™Özk5)ÕrK­®tv«%¨"qU´RíÜ^, rÂqeË&C¶_KŽ»H¹|›ÀælDÚÝï^vÉ€å¿È‘ê­`9•úˆ‚¨Uø¬*X>QÓ²Ü`.©Õ1áX{H­²ÈÝYnp#Aµ–TjAµìšT c¨Õ:M\µMQ**PG4vX,[Q¯=Š[´Kô³Ì^ãž‹¦'XQR°õ7XíD|Õ^Н>ˆS¿r‹ºSYÁ*e†|É æXûI­vX;¬-’̰ÔêòèŽ'µ’Ë ¶ ´ƒtÛýí¿f@(çW#B‡ïøWèÐO†„Õëæ°€è˜ÆŽ*€éà’c®íåp™`s×Â{_&\W\ð`•ýW r¹ÒƒÍ oóP[²6 XVàþžÖ‡» –Õ³·Šªe»Á<‘ Ù`Ø JñU¹¼&:\ª€¥S+;¶Ú¡@uàGƒC'ÚÌ ÍÙ*]$”?p]èø]ŸÜ}ÃðXPì¸00.‡xËRõÀðYëàýŸÕú6PìnR,ŸúPO†» " µ–Àz'XÝ5…Q»›‰í—üá Hnð´_Én0œ 7¸°^å­Õ Ú±Õ&%¶’]à¾úýCÇ^šò*ƒÁ°|þPá§ëC'n†çDø5²Zƒ*ì¤02'¸ö*.±Bµ¬ìp΄ÕpÿÁu!Ç\e0îUjQxk$âêZ‘½¡€Õ>XjF˜*u3|"ÜQY‚»í£â+Ù JñÕò«¢ ¢ñÜ`¦â£Ôê†OC§Ò2Ê¡²­lå¡PîoF•uZc§à²ÝâA)SÜ-Õ¸lÕ²~.úùŠ×Á´}~~ªU“º%ð>¢Ì«Ä6ÍëXo*`uŒV/,Cl>Û:þw»ÌpŒÀÊ&5ÚKñSÙ–+Žú¤T”ý­"[aÕ¬.‹€+”Ý ]•3A;`?põ€ÐÉwæ‡ü%¾(°J¿Ù:uËð0<Dù–¢J–>ÿù·\.;æÊV²Ä] X›E ¹ÄÜ5ð|LÊuÝV»úÖæ³ü@w‡Ë¨Z*`9e„‰‚ÅECߤpõ>Ò½°3\ʈ®È}½p[+‹ë0u"ð̷Ҙݣsƒ+•ý@]Ð^î…»:JñTä/, ýoû‰Pa³Y¡ÓW ÃcAT(¶šl+€å å²á:¦¸ÄÕ’2İjmÿ¼,{Ü/\p™bˆÞ >°6T§Ã½N^«XrqÔ¬táG‹¾ªqR;Ì’Ù§ëúZi=VÛcâÅWNÙàn©¼`=øCVœuç˜Ð)‚)ÿ9¡¼‡&†NÿpP”R‹8жb .Ù-ʪe»ÃýîpK¹;Lo0cmŒ_^P`BÚ­>ð,ÛõXÂæU ¬ÖÕ«g°úI‡&ìÞvûÐÄHM ²¬é Xs«V¦RiÏ’Ü ]³Ê XYà‰+ú…NÖ‰€’'À)Y«Oă>ñÿ6\ùŠK<&ÅZ±Ü¡ Å…þU0Ò/˜â©ui™æ{vF¸?E ª °X°†U¬™ Xj©AÝpVÁ’‹¢²ŒK€‘+ÅU… 2‘½$¸J„[´]¢.ÖÊv(˜Ê`m*w‡V|Ès—ø§âé¹.»®kp>–$|0ðƒ †_(˵D`j¦«M5Àê­‹I€™Âú‰½ÄÁ°TW8YÓ×®‚µHÖê8`íTÀÊ–À:æV‰I·a^¬ÄZ'5`ÀÚ­€µ¹X–ò²9òó»©¿~îWÎ+¸(`oä‹@nì³h Ž—k ¬TQ(í#þ¾§ˆÃìÃ=Äçvÿæ½^#ÎX«j,Y±ä¾1U±+¾b…]º)Òþ×~†ÿü1Ê{õœÕ¨[ or~ûÅÈ ?8zQ€Õ´†®°—t¼Ëj•¦«—WQXµ>ßú:]èˆ/Ù0²/É&“}CV“à=3Fðno6çH[7Ç¥bhž¢Z¥’9AuB)9¨Á{œ+ ÖÊp†\¡Zw“R=ïëÂXò0¼?gPDê e0FP%jÓ^›`%’Zû„ ˜Ò…‹ãÂíŃËV/®n°.âë¿/¬Y:Ùçd_‡áâå­Ès(7¬QnØ­Q­CŠjDE/+—mER=Ë©–•£t<Ä*7¨`-ÏŸÞåâ#0<cË£ðŒjלå uŠ‘v A4&³H®Yå‡ÏíñÐsÕËzè=È ²¢FÕO4öÉ€y\n `½×hÖMQ.0»(Û;ì*# fíèÀÒHZeä:Ö~M\q‰rvX¨)’æJ.ð˜R}ßï_mÓÄWk¢Á*^£•ýl€çöÇÀ&“;<ô(¼-î>[ñ–Õi òÊ`ŽW¡ „ ”pl°^Š–\y·xÙ@²A"Ã(²½þ \¶ryàê] ¸ì¶èɆ’M «¯Ò–Ω[t§¦–•-µÇSà’•+_©ºË.ð˜f¿ÐÉ nÕÄWk„+ψÜxã[ 6Â~¾÷Âu=)–ç ú½é¿S†ûwg©NÕû6RªQQAåÎëT1=+Àz!Xò^¡µÝÓ7ü@#'–‹cñ*\¶zq.[½b¹F—â»*®±“˜úGdŸ‚{ܳü©VPmGŽÕ2³3Žj©pÙnQÝ'ÌU R·sÔlPvƒ[cÄW×X ¾ZŠšëPï<î'Õ:õ<­ÔöÝℇ :¡o‰‰@£‚õŠÈ m°^—2C«Ó¡gøòpi`˜(l•àRÕ«Ÿ&îJÔ5Æ ê;—ÃÅNwÛÔÆ”v`Þx›Í{w!ŒIKÀ·“û(Õmël”NlSz±ö:dˆ:¸œ:T¨râí[Ë»ônPloéwÊ’Ÿócð6Æéˆj±!õ·µ•Õ(V Þ,s—Ó&ïúAžŽV ¬·ÄÉœád#Å 5+žkì¥É¥ ¾ô°à؆‹ jØ.ë0hñÔ™Co¬…ð>¿Æ'+À2V‚çÅêpÐuîw€ë¨Ø ¨c1šýœºHí ènpE$n ’+Ü ?ëGà}ŠTk©VeˆÏ4¨­;ï­AG~ð NP­Ô¸½Öó"βÁj.ÕVÄS£•KfLvNY£“zEÇ]¼øCðõ]Àúw·I{¸n‰÷"~÷u+àùçr°W‚}½ü =4¿NµœúÝe¸r¤lñ¨bG€:¨¬Ø¥mò“7Ÿ£Ýà ‘áXþùðFJ)hˆÀÚheeŠœ^“k©ÊSlµßI­¬wëSXMb€e¹@«`9†ìߢ".Ã5Ê.;öäw%¢^q÷õÛÖ†ûCxl‡ÔUõ5±î­ZNYAöâjýÖÁX¿ fé&©ç}»¦“t¯²Õ£ì°æ@E¶¦%ÙÞT¡RkW²Z­”»)¥ð6X]Ã1wL{u$¸ÆjàrŠ»â•$*g¬8 FŸÞè}ÛÙ*úÑû¾ußFz·oëA€-ÞN9„Þã$ô^ P;+ùŠ‚*F&(ÔÊXøµ¦UùqðÿO`-‘Á"ú8Ò~X$^ ‚êÀ²6w’Yp5vÈ Û‰½¹)a‹´ªØp}©Àe«×k‘@Ö¨ºF#'žg=ð\{nÚ‰P‡²êk2á½i ¼ÚþfÌñYà9»`ªrwƒÃÅ ŽPiêV*ï·òVNtŒe4 °VG+›smŒÛóQ¦€™©Ë[ˆo®ëyQfè'6z§J³jT¸ª¢^jÜåäûÂXE@ýÕuþŒˆ«CA½0¯²®}´ÔŒTÌE-&ÈJbÝ6#_i´=†û“¡Z#AQ+¶sÜo.Ž¡>ÕÃO€m’ÁzÆ–'`þ쌿¥`w;œ¢‚eõ•?/¾yCMÿ¢¸@íÑ’2C´§L€}-ZWt€{ˆØ€M6Þ•çã¦Wo†÷ï;À?ØN?;Ù>ús€@ ZF Ü.Œ€ n _’”" TA‚*HP)® Z÷È/ƒ±f)<ï|“@Ù 1¼Ï4‚±¿aXìðc`¿8ã¿ôÉp/»É¦¨É“D*XO °¬-’ñdߊv\S$À&&èUרÄ^eƒÀ¾ìï^àgIÝÚÿ “‚éL E(po†9v3Å?›ÁwÐß΄yŒ2Ð㤟X~œ²Ò#kÀ·®„1-^s)ܯÌCïßL¨ÂIèF`MŸ„qòIñLX¥÷#íÖÚªe½.r³z¯Ü¦'4îÐr‘ƒÉæŠþ&®Y`SãÀå¤^N=Åq¥ƒaL„”;q ,ë>¬ièòCúï÷‡ µ•µÕ´$P§¼o5ó5ÏÓ†ëŸpÿ±–‚Pãž Ì-2éáb§ì‹mÕz^´¡|'ZOæŠþ&0.[¹¦&àÇÅì#pqÿP°eŸPª_¥„Ka=@ž‰ JyFD# ¬áùïZy]-wHŠ5À.”ZñUs XEŸ•uAíBq’X×lÅ-êû‰qÊÒ¼Áàð]ÃàyÕ•œå\íõ4úüâ#Ÿ^§±¤ZÂ{W­½a)€ƒ,ÇËã% X/ˆ®Ì%¢AΆk¾˜ª\6`‰ºÆÊA=ÏÃ3¨6j-—ТøøMÀ¾k"Àzª\µXÙƒè]{1«²?Ì ¬!Rà.ƒÕFt`ÚÕÝÅ¢QN§^rÜ¥ª×”®QQ®²Í^[1À%´žƒñÙ®&¢dT¡ZÆq]VhmØ7«á²¦rT“­Ó#=…LÊ`=%6˜3”=)0Y½æTQ½t{²}¤XÍ]Óíuç`ÝA™ã 0Z¾Vò¼Èêm—ØÆŽGáQ{àëÜ×­Áht&¶wêÀ‡äÁôuT zB¸Á©dò¾ÔrioJ§^s²F]ìU.^:lâ`7&Ѩi|•òÓa|ò¢xŽÏ ÕŠòžùO*•÷ÿçÚ‡áíü(Œ¡gÈ2s/xñ[7hÁ¶RÚô”·ì=*.]Ü®èŠ=?4–Ô*‰EÍ× Hû¯—á]û’(lÛªõlØUÚ+¬Ó)¿ Þí¤X3ïëûg,žº<ÿ ¬ÆáC|‹^toÐ&©“QçÉuû™à¾iàƒ’Xœ7ø:Œ -Åþîk \Ö;¡ÓÕETÏø§ÀƒÀ‚OFJNÕW,ë’®ŒçªVqTÖR¥Gh‹—|wÀMšØÇ‹½f—΀·]‹š¯‘rg+ŭĹÏ×ÄÁ—ˆK4r^‘.!—x¿(AX‘j¶”ùßTë›—Âý?øT{ZËÊv*]•ûÓ+¹ÇUq²ÆEšØKT싦Gö®’«FÙ ëŠ7à1Þ1òë\Õ2&<ïm¥êzÃsð®…ÓàÓVdˇ-úGuúÞNÀõ}Š­ºø¤cõjŒeÕ´tm³:×(õFÓ蟘käÇ]hÜl®áz ®[ß$Uj#®=°U«EXµXQSxÚ<Švõ ù•äS)K,yŒ„„…«O…ËLlöÝø ê71—ÝmMK•ü,wÔL˺!f~Ü™ƒk¬|2‘‚ª­^ÖŠ$5_oÁp·´´ªUáÙÒ¦Hµ®“¼ì9 _")K >/Àz6R< X“­;ª‘ šPÐ~TËzدI` Ó"‰çãeË2Çù0Æ%±¨Ùjׯ߆qämq2ýM¡Z—È [ÂÛó%tù¡ƒQ¬µèe0ßË¢¶UQ•gÅÌWoK‡Àzˆâ«C2X­$°¬SÍê¹·D\£®ù_çU¸æÃÛ7‰FMVƒzíáýìq‚ê-i¾QÄ%͑֠<7“KÚ ,¿©¦pJpxF·jýe0þLеB ÐVË:sP¹È>×èÔÇrKªÅÞMÂQýÕÆÀN½+®‘²áЍ;ÝF¯¦7‡÷Cr‰‡ì,±iTáÔ‹í#°ž«f©Ássæ§2X§Ä% 6XsÉÔañÔk›¦Þ¥+I¬ÒÔ¼¬[_’xTo½×ïÁûí{µ²Þ]¿$þ60¾mï}¯!­uK°, äƒv–Ø,ªpjË$°î¬&X®z¥à¯afË>’ú¡„'ÊÇŸº+nÖ˜XÅ~1¼O%©ÞzÞÎÁò:0Ä%sï–«ÛûÒÚµBZsR­îø+²Ä\¯TÀåÆÜ½Á{ÅY_\åÇ¿úŠtÓËŠ{â]·£;Í»-’„®¥0þ7‰HÕW'÷~¾‰,ð¾hs²áz‡vÊǾN`‘j­“‚uµ¶Õ\ÚK$¸ (SìW£ÈR- â¾Îk’C ,+¨ÖÝ8§»ËI7´±*ÕúUá8ë^}®æpý +eÓ]ÀKì+2ß«€Ëÿ.¼ëß‚ÇÝÆfR._t–Xy»ç°#/Àx©Æ?Øt¸ª ü}R­#Á𨸊Z–Pw5ëwíŽS’Ètè”XV­¤bUuu‡ñ~wð# ZWd~}±oî»0æ“åKô¿])K” §aÕ 6ƒ±åŒÝçP×M°\e¹RÉÁÊÖÔû2ãÍ1N´$¡sëÀ^N¢’ørQØ|íGʨwÞ[±VG°²Rr‰A5Kl£Ùî!¸J^…wàý!K‘z‡l¹Å@ª8dej¹ \Æ+îÒ•$œ³FÞ1‰K¢JÕû—.°¯]Wõî^•T+ø^®H¼¥d‰!½Kd§š"õ¾3þÃúàþµa:½¬=£ÙdyÊÒ'4ƒ²UÀªRó’+ö¤XÉi«\×÷3{ª7GwÓÞ]®·¸Hµ‚-à]„šç×/ÊŸÙ3‹²ƒ€u9ˆX@ýbÃ˘‹³yÎàux=ꌽšÀ•€z•e‚¥$Q’õW™p·ì ¾#]\ìkhæ É.Q Qð}¶¯+…4¤\ÅÎ.‘~)žÕ_ª1R} ü”O‚+×XÕ‚ª”5¶‚-_Û„.Õíê÷ƒ§Mð]ýFð©ƒ"ªÅ (”ù¶ŒU¤Z§ºF×·ä@>ØÞÏäCgm傱d—)€©êuº % À‚ÛÁm¿äo˜qÁuÍ]ÂØ?Ps%9ÓLéèC ô[ÕÞ”à_‘¨\ÅÕª<©–±ºmäláÙ¿Ðηuæ°Ä/M`/Ó¨WW"% µS"r“°™·¬ó¥ Õ'ðÞ4Fú`ðã꜡ŠëÈå©´<¶îcx{ö€»áÇ`C>?Ù#*ÞRUË8Úž¦í”Agm…àú/R‘/ŸÀ.«—.°×Á•hŞ̿|þ:ú¾—"TÃàýŸÏHm†‚çÉ÷ÝËÒú–«/öÂX–JoÄT÷ö‚ûw½aŒê ~º§RÛ’«òÌ—v„'µum iJ¬ze0Zɗ߯sÕ©Ö¨¸\?¸üÀN˜—To–¯ï[£ÀW§?fp¨2©ÃºŽœâ­Ü¾`KL0ÓÏÓd·[CR‘zOØìTð"]m+ºpj|Eju;Îõ®!¤Ý⃹F†+Ã5ÊÊå4M4Vµ~¹Þ`£)–fR*~áÇS ê ƒûñQ0-#cÙPx—†1óSðÁV¼ÕiOHù½‰>?£ìâ^Ö:^xŸ÷ÀXï/s‡VE9V\âšÎð<Ø$ök[÷l©Ö•Åð´¦XË=/Zï‚úxRÜÜs˰‡ãýl§àùï‚‹`óš ¹â ؇À}ÝH¤ÿÀ27ýÙR#ƒ²6ú÷+'`B]µhjÀøˆƒï§`ÞOÁ|Э™¡m»Än”]~÷K­æY]ß"xßFZƒ³ö‹Ãø¥ì;uŠE¼¸Ëi¸v¼jý~˜¥ÖèùqézßVžŸÖâRr&Ò~•ãßoP¼”'¢é‡„ò#”-¶s‚ê^4¹êx‡·ƒ7ÃúóYûE²Ð®~)e~ðR§‰a6dNYc~‚ö+ú¼Ì,‚ëÅX±ÀQ¾¿æq ®ÐÅ}mw+ëÏ‹ýÁ2hJF¥„¤,ñpwr¥­5}ì È ¿×ïÁØÜ¬°¼]ÎA¬eþÊs’Ü#¯ƒ+‘¬QW±W]c}Ÿà“öPŒëç*¤ø"òõÍì<-Cy±Xë+üÞ@xÿ4ƈAຄ —T•·Ê9½`tsU.:_fµßt‚÷ÍÀŽDöÙ–èó‹³þÛÍŸìñ>ã£¬Í ¬`Œ¬±H{ŠØ åÊ%¸zí‰Q~ W˜^\îzÍÝôµ_?q&îÏð¾.µT‹2ÂÛ»ƒuø|kw‚Ï®ou&ÕjGñê9ý¥­)ÖZNk W~ŒÀ^†ë ø¬½0îÕÅP‘zC)ÌurFJ¶/üãÃH»õBêñêþõÇÑÃo³ÏÁ§Ž/‘gi«ÃB+»D^ÄÀf¥!íŠl¯IÝnèóó^ô5)Þšmí%öPê[ó_þ0Œ«ËÀÛĘ”xpÉA}¬½ÆXU¬$lìn¤Ü©‚ÂËK`¼Cªå+ŽÎFOœ„9ô(¼wïAýçäºÇ"õžq”¹…wÊ`Eöèu"ÚgšA¡Õ²ÊÞþ¼b:}TzÓõ†çIR¯Ïú„ã­Êõ-r‰;ß‘®<§«˜jkè¹Ä¼xpãTe×x*fÍË,"¸Fì„÷?CJ¦xšÒïRðÕj©ƒÔ°à%Ça<°ç<ëšBnj¹Ÿ‰ð<;Fê—0L 5™@™ÜX‡q{ö¨½¡Q.‘ ›oÂÓº­(ÏxὉTë)Œtе6§‘{L­T‚·×”uçíóê]FªõWëd㯠\þ}^Ü’ÏÏûl?=.ë|d1XkR­‚Ê;¦Üâ²ãàÍ3ÏÄŒ˜,«Èù ©Ãt¦‚»¦€Mü|Çd˜%êT4ݸ½h—ÈŸ‚ooZxþjµÙx‘r— £-‡1†Ó¿Q _æÔøq,ö]'?>¯À¢‡tÅZÍÈö$–ÓvPÕ+öfþar‹”ÉU–Šì_–jö.# š;N‚»÷ÃuóÙ,LEŸŸÍ‡Ñ`6=ðÙàýf˜:,sxÞ4R§o”‘{òЪ/ô#ŽƒŸï¦,ñ“Aäæ8Ü$Åz²? n)W_°CoåÚ–WßxøC¸or>Æ ¡ðø_–F.17Q¸ªº¤¯Ø›Å‡ÀffK°Fb-ö(}½-%•]¢ø:æ©c`Óу>S¯Ájz 2èá.…ûKI‰ÈZ-ë¼Ì»Æ¸àóæ¯Ÿ ~ð;Jïå êT´Iʘce@{pŒü‘`+‡Á>Þ¾ƒá=lŽ¥\ƒÀ #Õ…S.ÁÝ+Ïý=ÀRZÓÏ~Þž…ôŽ,# Æ)AÄr¾8=^²k”àò‘k\-Mª ÁsmŒöÅà'u›â¹åò€¹õŒ– óµ5ýýW å'0\+Á6f’,Ï^~t øéÅà>{ÌÜJ×ëǾÈ.Qž@K·Ç?0Œ¾Y1¹Å Üb#g‰¦W´Kd³\H½çûÔÚ\¸n¡xkI¢ñV¼¬1Ñþz,H®qß!˜=ìøéR~Jñ–YJqK±sr<~‚\êÌ‘±À5ˆ›šÔ]†Ôß\£¬õÆÂESÑfiÆí©.Ñi¼±.K´á’k[éJá4R•gúÀÝÐißð¼[ùôˆW•Ot+(Vµ^©×©lð¯rà¹Ý êKéAS–8¡4¼¨s‰áÏ’•Ñçî'0Í]5H¹­ï¹®¯€ñQÅ.+”‹|eÕ²áš-Måpr‰ê`v;Þ%Á5LË.œêÛ™Ya<\ç8‰©FñÔý7‚«°:pU¥ýYã-¸‡I½r`t܃ö?°î±/ŸE_'¨s‰Šêù²)-ßw³eÊHÕ ÕYNqÞ r‹¤ZþeŠjÍW&ÑΊã¦Ï–òº„S;³ d`C<•‡_^«Þû®ñ*óµW±7}9àó)öz i (ÞZ,ЧAûsu1[¤}Ç,&å›qžû-×êªæ]3ÐõGËà1VP¬Gpù® \³5supÉÊ5FKV.y/QR.:Ø7¤\¸ 7O à~Øq‹3W¬ØK×çuˆÒyR¯q')C+_[,Á¥û<»ÊÙü6 Àœ´ ž'öRÌ–å°Oã>å®Å0Æ,Ë^–OÁ|`&˜—•Ë)Þšào’â­a’K¬è•ç¾~`ËMz£]ð»ò‘Ûù>°m6UÌélc¼hR¡\ ÔWæƒ§Ï :Ä[Qû“RO˜/ÌE»`¶ÜöÛí`7Vgïq6Å|WïE` À÷Ï?5¸.Þš®Q­¯”`^*A„ §2\ò^â úÁÖ¥ÃóôEÓDBÿú…ð>Eʵ );p•Å88ïÂr‘ô1føãu[H¶ÚéÚ¥÷…Ï>ò;Áûo§ñ6wî÷&«H\•×d:\¿€2²…0úÌ%×Dª•1|ó·à{fƒçÌ?FvbØ©oŠ)dj b|ŒxkDôFµØÖp¿Öäb»l%D.Ä*Zúé]_Õ:W¢®± ÁèÃÂNˆwÚüV»Y• ƒ»À‹³`®"°FË-`nû¯uH»e\׋öž¸õ¡áè|ítr•3à~a6X÷™XÏ„1…ÀZ>,‹À*˜VT—8²<Öâ¡`»?…çívÕtãçý²ÞÕ> ¢­Icäó« —“k¬Jû³­^ÇÄÇä%ì#p©wNX÷Mlƒyp+Ì[`ŽÚ3mX§u`­×€7_ þ ÙóàMVÂxn؋䛒½n LXÖc þ-بïÀ§ÑWÍ?D.18MÆ>QS•ÿBïƒÃÀ~Ï{®š\«}a(W“º…ðü…”k ÁuòLÁUVÛp*\cäïO+õ±ãšNVùì£ —îŽÕÌŠyBþuàE×éUäÞVÎ;ºœÜÜJ*È|‹4õ-5K”y]U~¬6Þâ‡ÁÝÑ8w2œ‹e¥î@ßïCpí«n9¢*ûxýõ¶zLÀ%ÔLæPáÚì0 MıT™Ý8O—\8UáÒ¹Ä\lçH­†\ìJ¥W/ãÇ¥0^#õZGq—¯¦ê嫯vwÙ€pp‰öñ4ݘÑw|ÉpUÜ ­©’g7ªsí„®¶¥Û¨Wž)kGÀÝè’ž©mÍ¢.†Ñ  | ©WiMàòÇ(I8\·¤»¿Þ¶£®3Çá9ùnUu`‚}#´ÓXã%Qcõ¢÷å½D§ê¯ÊÕ‹Í"åºï¼ßT>;MoMê–À{ÕƒûãgÂ-Æ«ÖçÅÉ ³c°£šCµº[rvJªµ5jXB.uÄ‹“K”ã­Ù16ª'—+öÙ8¸ÿØ$ykô: ÷uEðüUwÒº¶ªõ¹ À•#ìC ¯s‰Û\¢:Z/—ø­f£zZ”käG&ÃÛ™þlÝåpY’$‡î€\7\mìñ+5Ë©ý¹U¿°$[²X÷ªîtÈ7ISgu.q©ƒK”·{fIÛ>ã+&Ãh8ÆÕIz,KCïßPìe•%JjË5VõÂ’lÉ ˆqq\–ƒKTSÉ.q™ƒKœ#YEƒ ÏŸ cØ,¤ý*”Œ§ªXëË}ðÞWã[q8Ö_òDm܈c+Õ¾Š;½çfGO5£”Ko-Ñ b' Î/¶f&ÖÌÆx`ej”k­°ˆ‚ñbk×"°Q³‘vw’€Z^§áº¾ž °I¤`Û=0«»j©ýõÕ½¿^3”J?t%xAø–¥0Æ$ƒžÙéj‚ë18'Pæ`» š’3ÕãåÔëèXSÏôAË]£µ¯xd ŒŒ•`­ É™BçÁÊEÚ-Ù+‹}Bnr¾æþxÕüª¶?ëÚ˜c ÝëÌÛ5.²`&©í&˜׃_ o§•HûóH4OO8ß–uÌ>ïŸÊÀZ8Áõ A¶•¬PU¥ Z•ẩgY l?½æºÍÓ&®MàO,ëædóÚ‹¤XìvÊ&Ÿ,ƒñ>ýw(6”m¯ªfUÙªêýõ{Ãw©š;vÏÈOߣíVx²š3/åÍâ‹#ryž› °?û`4,…û5‚ëÃÈm9l¦uÕ¸uðƒâµ|‚/ëº%§’ĘŇÉç„OfóédŸ‘ktí‚Ñ’TëÑípÿq+Ro@²¨yq¯£p]SÏ”ÂüwAu u˜‚îC0ÿr쎃ôµ³ÐÿûI’+¼æ£A=ËZw˜†öÃ<¸ṅñãB¤ü””ë§ÖŸéßo<×õ»à¾ne§«ÑúòäöJr%Wr%Wr%Wr%Wr%Wr%Wr%Wr%×Yÿ(,³¤6ÑIEND®B`‚RxJS-4.1.0/nuget/000077500000000000000000000000001266736161100134755ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Aggregates/000077500000000000000000000000001266736161100163725ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Aggregates/RxJS-Aggregates.nuspec000066400000000000000000000026271266736161100225150ustar00rootroot00000000000000 RxJS-Aggregates Reactive Extensions for JavaScript - Aggregation Operations $version$ Microsoft Corporation Reactive Extensions for JavaScript library with aggregation event processing query operations. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-All/000077500000000000000000000000001266736161100150315ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-All/RxJS-All.nuspec000066400000000000000000000034161266736161100176100ustar00rootroot00000000000000 RxJS-All Reactive Extensions for JavaScript - All Libraries $version$ Microsoft Corporation Reactive Extensions for JavaScript libraries. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Async/000077500000000000000000000000001266736161100153765ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Async/RxJS-Async.nuspec000066400000000000000000000031741266736161100205230ustar00rootroot00000000000000 RxJS-Async Reactive Extensions for JavaScript - Async-Based Operations $version$ Microsoft Corporation Reactive Extensions for JavaScript library with async-based event processing query operations. http://go.microsoft.com/fwlink/?LinkID=179929 http://go.microsoft.com/fwlink/?LinkId=261274 true http://go.microsoft.com/fwlink/?LinkID=265024 en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-BackPressure/000077500000000000000000000000001266736161100167125ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-BackPressure/RxJS-BackPressure.nuspec000066400000000000000000000027751266736161100233610ustar00rootroot00000000000000 RxJS-BackPressure Reactive Extensions for JavaScript - BackPressure-Based Operations $version$ Microsoft Corporation Reactive Extensions for JavaScript library with async-based event processing query operations. http://go.microsoft.com/fwlink/?LinkID=179929 http://go.microsoft.com/fwlink/?LinkId=261274 true http://go.microsoft.com/fwlink/?LinkID=265024 en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Binding/000077500000000000000000000000001266736161100156735ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Binding/RxJS-Binding.nuspec000066400000000000000000000022011266736161100213030ustar00rootroot00000000000000 RxJS-Binding Reactive Extensions for JavaScript - Binding $version$ Microsoft Corporation Reactive Extensions for JavaScript library with binding operationrs. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Coincidence/000077500000000000000000000000001266736161100165245ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Coincidence/RxJS-Coincidence.nuspec000066400000000000000000000026431266736161100227770ustar00rootroot00000000000000 RxJS-Coincidence Reactive Extensions for JavaScript - Coincidence $version$ Microsoft Corporation Reactive Extensions for JavaScript library with reactive coincidence join event processing query operations. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Complete/000077500000000000000000000000001266736161100160715ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Complete/RxJS-Complete.nuspec000066400000000000000000000064521266736161100217130ustar00rootroot00000000000000 RxJS-Main Reactive Extensions for JavaScript - Main Library $version$ Microsoft Corporation Reactive Extensions for JavaScript main library used to express complex event processing queries over observable sequences. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Experimental/000077500000000000000000000000001266736161100167565ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Experimental/RxJS-Experimental.nuspec000066400000000000000000000026131266736161100234600ustar00rootroot00000000000000 RxJS-Experimental Reactive Extensions for JavaScript - Experimental $version$ Microsoft Corporation Reactive Extensions for JavaScript library with experimental operators. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-JoinPatterns/000077500000000000000000000000001266736161100167415ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-JoinPatterns/RxJS-JoinPatterns.nuspec000066400000000000000000000026421266736161100234300ustar00rootroot00000000000000 RxJS-JoinPatterns Reactive Extensions for JavaScript - Join Patterns $version$ Microsoft Corporation Reactive Extensions for JavaScript library with join patterns event processing query operations. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Lite/000077500000000000000000000000001266736161100152165ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Lite/RxJS-Lite.nuspec000066400000000000000000000033541266736161100201630ustar00rootroot00000000000000 RxJS-Lite Reactive Extensions for JavaScript - Lite Library $version$ Microsoft Corporation Reactive Extensions for JavaScript main library used to express complex event processing queries over observable sequences. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Main/000077500000000000000000000000001266736161100152055ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Main/RxJS-Main.nuspec000066400000000000000000000027261266736161100201430ustar00rootroot00000000000000 RxJS-Main Reactive Extensions for JavaScript - Main Library $version$ Microsoft Corporation Reactive Extensions for JavaScript main library used to express complex event processing queries over observable sequences. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Testing/000077500000000000000000000000001266736161100157365ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Testing/RxJS-Testing.nuspec000066400000000000000000000027021266736161100214170ustar00rootroot00000000000000 RxJS-Testing Reactive Extensions for JavaScript - Test Library $version$ Microsoft Corporation Reactive Extensions for JavaScript test library, used to write unit tests for complex event processing queries. http://rx.codeplex.com http://go.microsoft.com/fwlink/?LinkId=261274 true http://www.apache.org/licenses/LICENSE-2.0.html en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-Time/000077500000000000000000000000001266736161100152175ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-Time/RxJS-Time.nuspec000066400000000000000000000025641266736161100201670ustar00rootroot00000000000000 RxJS-Time Reactive Extensions for JavaScript - Time-Based Operations $version$ Microsoft Corporation Reactive Extensions for JavaScript library with time-based event processing query operations. http://go.microsoft.com/fwlink/?LinkID=179929 http://go.microsoft.com/fwlink/?LinkId=261274 true http://go.microsoft.com/fwlink/?LinkID=265024 en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/nuget/RxJS-VirtualTime/000077500000000000000000000000001266736161100165665ustar00rootroot00000000000000RxJS-4.1.0/nuget/RxJS-VirtualTime/RxJS-VirtualTime.nuspec000066400000000000000000000026541266736161100231050ustar00rootroot00000000000000 RxJS-VirtualTime Reactive Extensions for JavaScript - Virtual Time-Based Schedulers $version$ Microsoft Corporation Reactive Extensions for JavaScript library with virtual time based schedulers. http://go.microsoft.com/fwlink/?LinkID=179929 http://go.microsoft.com/fwlink/?LinkId=261274 true http://go.microsoft.com/fwlink/?LinkID=265024 en-US Rx RxJS Reactive Extensions Observable RxJS-4.1.0/package.json000066400000000000000000000023621266736161100146440ustar00rootroot00000000000000{ "name": "rx", "title": "Reactive Extensions for JavaScript (RxJS)", "description": "Library for composing asynchronous and event-based operations in JavaScript", "version": "4.1.0", "homepage": "https://github.com/Reactive-Extensions/RxJS", "author": { "name": "Cloud Programmability Team", "url": "https://github.com/Reactive-Extensions/RxJS/blob/master/authors.txt" }, "repository": { "type": "git", "url": "https://github.com/Reactive-Extensions/RxJS.git" }, "license": "Apache-2.0", "bugs": "https://github.com/Reactive-Extensions/RxJS/issues", "jam": { "main": "dist/rx.all.js" }, "browser": { "index.js": "./dist/rx.all.js" }, "dependencies": {}, "devDependencies": { "benchmark": "*", "grunt-cli": "*", "grunt": "*", "grunt-contrib-copy": "*", "grunt-contrib-jshint": "*", "grunt-contrib-connect": "*", "grunt-contrib-uglify": "*", "grunt-contrib-concat": "*", "grunt-contrib-qunit": "*", "grunt-contrib-watch": "*", "grunt-saucelabs": "*", "grunt-jscs": "*", "load-grunt-tasks": "*" }, "keywords": [ "LINQ", "FRP", "Reactive", "Events", "Rx", "RxJS" ], "main": "index.js", "scripts": { "test": "grunt" } } RxJS-4.1.0/readme.md000066400000000000000000000444461266736161100141460ustar00rootroot00000000000000[![Build Status](https://travis-ci.org/Reactive-Extensions/RxJS.svg)](https://travis-ci.org/Reactive-Extensions/RxJS) [![GitHub version](https://img.shields.io/github/tag/reactive-extensions/rxjs.svg)](https://github.com/Reactive-Extensions/RxJS) [![NPM version](https://img.shields.io/npm/v/rx.svg)](https://www.npmjs.com/package/rx) [![Downloads](https://img.shields.io/npm/dm/rx.svg)](https://www.npmjs.com/package/rx) [![Bower](https://img.shields.io/bower/v/rxjs.svg)](http://bower.io/search/?q=rxjs) [![NuGet](https://img.shields.io/nuget/v/RxJS-All.svg)](http://www.nuget.org/packages/RxJS-All/) [![Join the chat at https://gitter.im/Reactive-Extensions/RxJS](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Reactive-Extensions/RxJS?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) **[The Need to go Reactive](#the-need-to-go-reactive)** | **[About the Reactive Extensions](#about-the-reactive-extensions)** | **[Batteries Included](#batteries-included)** | **[Why RxJS?](#why-rxjs)** | **[Dive In!](#dive-in)** | **[Resources](#resources)** | **[Getting Started](#getting-started)** | **[What about my libraries?](#what-about-my-libraries)** | **[Compatibility](#compatibility)** | **[Contributing](#contributing)** | **[License](#license)** # The Reactive Extensions for JavaScript (RxJS) 4.0... # *...is a set of libraries to compose asynchronous and event-based programs using observable collections and [Array#extras](http://blogs.msdn.com/b/ie/archive/2010/12/13/ecmascript-5-part-2-array-extras.aspx) style composition in JavaScript* The project is actively developed by [Microsoft](https://microsoft.com/), in collaboration with a community of open source developers. ## The Need to go Reactive ## Applications, especially on the web have changed over the years from being a simple static page, to DHTML with animations, to the Ajax revolution. Each time, we're adding more complexity, more data, and asynchronous behavior to our applications. How do we manage it all? How do we scale it? By moving towards "Reactive Architectures" which are event-driven, resilient and responsive. With the Reactive Extensions, you have all the tools you need to help build these systems. ## About the Reactive Extensions ## The Reactive Extensions for JavaScript (RxJS) is a set of libraries for composing asynchronous and event-based programs using observable sequences and fluent query operators that many of you already know by [Array#extras](http://blogs.msdn.com/b/ie/archive/2010/12/13/ecmascript-5-part-2-array-extras.aspx) in JavaScript. Using RxJS, developers represent asynchronous data streams with Observables, query asynchronous data streams using our many operators, and parameterize the concurrency in the asynchronous data streams using Schedulers. Simply put, RxJS = Observables + Operators + Schedulers. Whether you are authoring a web-based application in JavaScript or a server-side application in Node.js, you have to deal with asynchronous and event-based programming. Although some patterns are emerging such as the Promise pattern, handling exceptions, cancellation, and synchronization is difficult and error-prone. Using RxJS, you can represent multiple asynchronous data streams (that come from diverse sources, e.g., stock quote, tweets, computer events, web service requests, etc.), and subscribe to the event stream using the Observer object. The Observable notifies the subscribed Observer instance whenever an event occurs. Because observable sequences are data streams, you can query them using standard query operators implemented by the Observable type. Thus you can filter, project, aggregate, compose and perform time-based operations on multiple events easily by using these operators. In addition, there are a number of other reactive stream specific operators that allow powerful queries to be written. Cancellation, exceptions, and synchronization are also handled gracefully by using the methods on the Observable object. But the best news of all is that you already know how to program like this. Take for example the following JavaScript code, where we get some stock data and then manipulate and iterate the results. ```js /* Get stock data somehow */ const source = getAsyncStockData(); const subscription = source .filter(quote => quote.price > 30) .map(quote => quote.price) .forEach(price => console.log(`Prices higher than $30: ${price}`); ``` Now what if this data were to come as some sort of event, for example a stream, such as a WebSocket? Then we could pretty much write the same query to iterate our data, with very little change. ```js /* Get stock data somehow */ const source = getAsyncStockData(); const subscription = source .filter(quote => quote.price > 30) .map(quote => quote.price) .subscribe( price => console.log(`Prices higher than $30: ${price}`), err => console.log(`Something went wrong: ${err.message}`); ); /* When we're done */ subscription.dispose(); ``` The only difference is that we can handle the errors inline with our subscription. And when we're no longer interested in receiving the data as it comes streaming in, we call `dispose` on our subscription. Note the use of `subscribe` instead of `forEach`. We could also use `forEach` which is an alias for `subscribe` but we highly suggest you use `subscribe`. ## Batteries Included ## Sure, there are a lot of libraries to get started with RxJS. Confused on where to get started? Start out with the complete set of operators with [`rx.all.js`](doc/libraries/main/rx.complete.md), then you can reduce it to the number of operators that you really need, and perhaps stick with something as small as [`rx.lite.js`](doc/libraries/lite/rx.lite.md). If you're an implementor of RxJS, then you can start out with [`rx.core.js`](doc/libraries/core/rx.core.md). This set of libraries include: ### The complete library: - [`rx.all.js`](doc/libraries/main/rx.complete.md) ### Main Libraries: - [`rx.js`](doc/libraries/main/rx.md) - [`rx.aggregates.js`](doc/libraries/main/rx.aggregates.md) - [`rx.async.js`](doc/libraries/main/rx.async.md) - [`rx.binding.js`](doc/libraries/main/rx.binding.md) - [`rx.coincidence.js`](doc/libraries/main/rx.coincidence.md) - [`rx.experimental.js`](doc/libraries/main/rx.experimental.md) - [`rx.joinpatterns.js`](doc/libraries/main/rx.joinpatterns.md) - [`rx.testing.js`](doc/libraries/main/rx.testing.md) - [`rx.time.js`](doc/libraries/main/rx.time.md) - [`rx.virtualtime.js`](doc/libraries/main/rx.virtualtime.md) ### Lite Libraries: - [`rx.lite.js`](doc/libraries/lite/rx.lite.md) - [`rx.lite.extras.js`](doc/libraries/lite/rx.lite.extras.md) - [`rx.lite.aggregates.js`](doc/libraries/lite/rx.lite.aggregates.md) - [`rx.lite.async.js`](doc/libraries/lite/rx.lite.async.md) - [`rx.lite.coincidence.js`](doc/libraries/lite/rx.lite.coincidence.md) - [`rx.lite.experimental.js`](doc/libraries/lite/rx.lite.experimental.md) - [`rx.lite.joinpatterns.js`](doc/libraries/lite/rx.lite.joinpatterns.md) - [`rx.lite.testing.js`](doc/libraries/lite/rx.lite.testing.md) - [`rx.lite.time.js`](doc/libraries/lite/rx.lite.time.md) - [`rx.lite.virtualtime.js`](doc/libraries/lite/rx.lite.virtualtime.md) ### Core Libraries: - [`rx.core.js`](doc/libraries/core/rx.core.md) - [`rx.core.binding.js`](doc/libraries/core/rx.core.binding.md) - [`rx.core.testing.js`](doc/libraries/core/rx.core.testing.md) ## Why RxJS? ## One question you may ask yourself is why RxJS? What about Promises? Promises are good for solving asynchronous operations such as querying a service with an XMLHttpRequest, where the expected behavior is one value and then completion. Reactive Extensions for JavaScript unify both the world of Promises, callbacks as well as evented data such as DOM Input, Web Workers, and Web Sockets. Unifying these concepts enables rich composition. To give you an idea about rich composition, we can create an autocompletion service which takes user input from a text input and then throttles queries a service (to avoid flooding the service with calls for every key stroke). First, we'll reference the JavaScript files, including jQuery, although RxJS has no dependencies on jQuery... ```html ``` Next, we'll get the user input from an input, listening to the keyup event by using the `Rx.Observable.fromEvent` method. This will either use the event binding from [jQuery](http://jquery.com), [Zepto](http://zeptojs.com/), [AngularJS](https://angularjs.org/), [Backbone.js](http://backbonejs.org/) and [Ember.js](http://emberjs.com/) if available, and if not, falls back to the native event binding. This gives you consistent ways of thinking of events depending on your framework, so there are no surprises. ```js const $input = $('#input'); const $results = $('#results'); /* Only get the value from each key up */ var keyups = Rx.Observable.fromEvent($input, 'keyup') .pluck('target', 'value') .filter(text => text.length > 2 ); /* Now debounce the input for 500ms */ var debounced = keyups .debounce(500 /* ms */); /* Now get only distinct values, so we eliminate the arrows and other control characters */ var distinct = debounced .distinctUntilChanged(); ``` Now, let's query Wikipedia! In RxJS, we can instantly bind to any [Promises A+](https://github.com/promises-aplus/promises-spec) implementation through the `Rx.Observable.fromPromise` method. Or, directly return it and RxJS will wrap it for you. ```js function searchWikipedia (term) { return $.ajax({ url: 'https://en.wikipedia.org/w/api.php', dataType: 'jsonp', data: { action: 'opensearch', format: 'json', search: term } }).promise(); } ``` Once that is created, we can tie together the distinct throttled input and query the service. In this case, we'll call `flatMapLatest` to get the value and ensure we're not introducing any out of order sequence calls. ```js var suggestions = distinct .flatMapLatest(searchWikipedia); ``` Finally, we call the `subscribe` method on our observable sequence to start pulling data. ```js suggestions.subscribe( data => { $results .empty() .append($.map(data[1], value => $('
  • ').text(value))) }, error=> { $results .empty() .append($('
  • ')) .text('Error:' + error); }); ``` And there you have it! ## Dive In! ## Please check out: - [Our Code of Conduct](https://github.com/Reactive-Extensions/RxJS/tree/master/code-of-conduct.md) - [The full documentation](https://github.com/Reactive-Extensions/RxJS/tree/master/doc) - [Our many great examples](https://github.com/Reactive-Extensions/RxJS/tree/master/examples) - [Our design guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines) - [Our contribution guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/contributing.md) - [Our complete Unit Tests](https://github.com/Reactive-Extensions/RxJS/tree/master/tests) - [Our recipes](https://github.com/Reactive-Extensions/RxJS/wiki/Recipes) ## Resources - Contact us - [Twitter @ReactiveX](https://twitter.com/ReactiveX) - [Gitter.im](https://gitter.im/Reactive-Extensions/RxJS) - [StackOverflow rxjs](http://stackoverflow.com/questions/tagged/rxjs) - Tutorials - [The introduction to Reactive Programming you've been missing](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754) - [2 minute introduction to Rx](https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877) - [Learn RxJS - @jhusain](https://github.com/jhusain/learnrx) - [RxJS Koans](https://github.com/Reactive-Extensions/RxJSKoans) - [RxJS Workshop from BuildStuff 2014](https://github.com/Reactive-Extensions/BuildStuffWorkshop) - [Rx Workshop](http://rxworkshop.codeplex.com/) - [Reactive Programming and MVC](http://aaronstacy.com/writings/reactive-programming-and-mvc/) - [RxJS lessons - egghead.io](https://egghead.io/technologies/rx) - [RxJS Training - @andrestaltz](https://github.com/staltz/rxjs-training) - Reference Material - [Rx Marbles](http://rxmarbles.com/) - [RxJS GitBook](http://xgrommx.github.io/rx-book//) - [Intro to Rx](http://introtorx.com/) - [101 Rx Samples Wiki](http://rxwiki.wikidot.com/101samples) - [RxJS Design Guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines) - [Visualizing Reactive Streams](http://jaredforsyth.com/2015/03/06/visualizing-reactive-streams-hot-and-cold/) - [Your Mouse is a Database](http://queue.acm.org/detail.cfm?id=2169076) - Essential tools - [RxVision](http://jaredforsyth.com/rxvision/) - [Percussion](https://github.com/grisendo/Percussion) - Books - [RxJS](http://xgrommx.github.io/rx-book/) - [Intro to Rx](http://www.amazon.com/Introduction-to-Rx-ebook/dp/B008GM3YPM/) - [Programming Reactive Extensions and LINQ](http://www.amazon.com/Programming-Reactive-Extensions-Jesse-Liberty/dp/1430237473/) - [Reactive Programming with RxJS](https://pragprog.com/book/smreactjs/reactive-programming-with-rxjs) - [Community Examples](examples/community.md) - [Presentations](examples/presentations.md) - [Videos and Podcasts](examples/videos.md) ## Getting Started There are a number of ways to get started with RxJS. The files are available on [cdnjs](http://cdnjs.com/libraries/rxjs/) and [jsDelivr](http://www.jsdelivr.com/#!rxjs). ### Download the Source ```bash git clone https://github.com/Reactive-Extensions/rxjs.git cd ./rxjs ``` ### Installing with [NPM](https://www.npmjs.com/) ```bash` $ npm install rx $ npm install -g rx ``` ### Using with Node.js and Ringo.js ```js var Rx = require('rx'); ``` ### Installing with [Bower](http://bower.io/) ```bash $ bower install rxjs ``` ### Installing with [Jam](http://jamjs.org/) ```bash $ jam install rx ``` ### Installing All of RxJS via [NuGet](http://www.nuget.org/) ```bash $ Install-Package RxJS-All ``` ### Install individual packages via [NuGet](http://www.nuget.org/): Install-Package RxJS-All Install-Package RxJS-Lite Install-Package RxJS-Main Install-Package RxJS-Aggregates Install-Package RxJS-Async Install-Package RxJS-BackPressure Install-Package RxJS-Binding Install-Package RxJS-Coincidence Install-Package RxJS-Experimental Install-Package RxJS-JoinPatterns Install-Package RxJS-Testing Install-Package RxJS-Time ### In a Browser: ```html ``` ### Along with a number of our extras for RxJS: ```html ``` ### Using RxJS with an AMD loader such as Require.js ```js require({ 'paths': { 'rx': 'path/to/rx-lite.js' } }, ['rx'], (Rx) => { const obs = Rx.Observable.of(42); obs.forEach(x => console.log(x)); }); ``` ## What about my libraries? ## The Reactive Extensions for JavaScript have no external dependencies on any library, so they'll work well with just about any library. We provide bridges and support for various libraries including: - [Node.js](https://www.npmjs.com/package/rx-node) - [React](http://facebook.github.io/react/) - [Rx-React](https://github.com/fdecampredon/rx-react) - [RxReact](https://github.com/AlexMost/RxReact) - [cycle-react](https://github.com/pH200/cycle-react) - [Flux](http://facebook.github.io/flux/) - [Rx-Flux](https://github.com/fdecampredon/rx-flux) - [ReactiveFlux](https://github.com/codesuki/reactive-flux) - [Thundercats.js](https://github.com/ThunderCatsJS/thundercats) - [Flurx](https://github.com/qwtel/flurx) - [RR](https://github.com/winsonwq/RR) - [Ember](http://emberjs.com/) - [RxEmber](https://github.com/blesh/RxEmber) - [AngularJS](https://github.com/Reactive-Extensions/rx.angular.js) - [HTML DOM](https://github.com/Reactive-Extensions/RxJS-DOM) - [jQuery (1.4+)](https://github.com/Reactive-Extensions/RxJS-jQuery) - [MooTools](https://github.com/Reactive-Extensions/RxJS-MooTools) - [Dojo 1.7+](https://github.com/Reactive-Extensions/RxJS-Dojo) - [ExtJS](https://github.com/Reactive-Extensions/RxJS-ExtJS) ## Compatibility ## RxJS has been thoroughly tested against all major browsers and supports IE6+, Chrome 4+, FireFox 1+, and Node.js v0.4+. ## Contributing ## There are lots of ways to contribute to the project, and we appreciate our [contributors](https://github.com/Reactive-Extensions/RxJS/wiki/Contributors). If you wish to contribute, check out our [style guide]((https://github.com/Reactive-Extensions/RxJS/tree/master/doc/contributing)). You can contribute by reviewing and sending feedback on code checkins, suggesting and trying out new features as they are implemented, submit bugs and help us verify fixes as they are checked in, as well as submit code fixes or code contributions of your own. Note that all code submissions will be rigorously reviewed and tested by the Rx Team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source. First-time contributors must sign a [Contribution License Agreement](https://cla.microsoft.com/). If your Pull Request has the label [cla-required](https://github.com/Reactive-Extensions/RxJS/labels/cla-required), this is an indication that you haven't yet signed such an agreement. ## License ## Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. Microsoft Open Technologies would like to thank its contributors, a list of whom are at https://github.com/Reactive-Extensions/RxJS/wiki/Contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. RxJS-4.1.0/src/000077500000000000000000000000001266736161100131425ustar00rootroot00000000000000RxJS-4.1.0/src/core/000077500000000000000000000000001266736161100140725ustar00rootroot00000000000000RxJS-4.1.0/src/core/abstractobserver.js000066400000000000000000000035011266736161100200020ustar00rootroot00000000000000 /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ var AbstractObserver = Rx.internals.AbstractObserver = (function (__super__) { inherits(AbstractObserver, __super__); /** * Creates a new observer in a non-stopped state. */ function AbstractObserver() { this.isStopped = false; } // Must be implemented by other observers AbstractObserver.prototype.next = notImplemented; AbstractObserver.prototype.error = notImplemented; AbstractObserver.prototype.completed = notImplemented; /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ AbstractObserver.prototype.onNext = function (value) { !this.isStopped && this.next(value); }; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ AbstractObserver.prototype.onError = function (error) { if (!this.isStopped) { this.isStopped = true; this.error(error); } }; /** * Notifies the observer of the end of the sequence. */ AbstractObserver.prototype.onCompleted = function () { if (!this.isStopped) { this.isStopped = true; this.completed(); } }; /** * Disposes the observer, causing it to transition to the stopped state. */ AbstractObserver.prototype.dispose = function () { this.isStopped = true; }; AbstractObserver.prototype.fail = function (e) { if (!this.isStopped) { this.isStopped = true; this.error(e); return true; } return false; }; return AbstractObserver; }(Observer)); RxJS-4.1.0/src/core/anonymousobservable.js000066400000000000000000000023101266736161100205210ustar00rootroot00000000000000 var AnonymousObservable = Rx.AnonymousObservable = (function (__super__) { inherits(AnonymousObservable, __super__); // Fix subscriber to check for undefined or function returned to decorate as Disposable function fixSubscriber(subscriber) { return subscriber && isFunction(subscriber.dispose) ? subscriber : isFunction(subscriber) ? disposableCreate(subscriber) : disposableEmpty; } function setDisposable(s, state) { var ado = state[0], self = state[1]; var sub = tryCatch(self.__subscribe).call(self, ado); if (sub === errorObj && !ado.fail(errorObj.e)) { thrower(errorObj.e); } ado.setDisposable(fixSubscriber(sub)); } function AnonymousObservable(subscribe, parent) { this.source = parent; this.__subscribe = subscribe; __super__.call(this); } AnonymousObservable.prototype._subscribe = function (o) { var ado = new AutoDetachObserver(o), state = [ado, this]; if (currentThreadScheduler.scheduleRequired()) { currentThreadScheduler.schedule(state, setDisposable); } else { setDisposable(null, state); } return ado; }; return AnonymousObservable; }(Observable)); RxJS-4.1.0/src/core/anonymousobserver.js000066400000000000000000000024761266736161100202410ustar00rootroot00000000000000 /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ var AnonymousObserver = Rx.AnonymousObserver = (function (__super__) { inherits(AnonymousObserver, __super__); /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ function AnonymousObserver(onNext, onError, onCompleted) { __super__.call(this); this._onNext = onNext; this._onError = onError; this._onCompleted = onCompleted; } /** * Calls the onNext action. * @param {Any} value Next element in the sequence. */ AnonymousObserver.prototype.next = function (value) { this._onNext(value); }; /** * Calls the onError action. * @param {Any} error The error that has occurred. */ AnonymousObserver.prototype.error = function (error) { this._onError(error); }; /** * Calls the onCompleted action. */ AnonymousObserver.prototype.completed = function () { this._onCompleted(); }; return AnonymousObserver; }(AbstractObserver)); RxJS-4.1.0/src/core/autodetachobserver.js000066400000000000000000000025331266736161100203240ustar00rootroot00000000000000 var AutoDetachObserver = (function (__super__) { inherits(AutoDetachObserver, __super__); function AutoDetachObserver(observer) { __super__.call(this); this.observer = observer; this.m = new SingleAssignmentDisposable(); } var AutoDetachObserverPrototype = AutoDetachObserver.prototype; AutoDetachObserverPrototype.next = function (value) { var result = tryCatch(this.observer.onNext).call(this.observer, value); if (result === errorObj) { this.dispose(); thrower(result.e); } }; AutoDetachObserverPrototype.error = function (err) { var result = tryCatch(this.observer.onError).call(this.observer, err); this.dispose(); result === errorObj && thrower(result.e); }; AutoDetachObserverPrototype.completed = function () { var result = tryCatch(this.observer.onCompleted).call(this.observer); this.dispose(); result === errorObj && thrower(result.e); }; AutoDetachObserverPrototype.setDisposable = function (value) { this.m.setDisposable(value); }; AutoDetachObserverPrototype.getDisposable = function () { return this.m.getDisposable(); }; AutoDetachObserverPrototype.dispose = function () { __super__.prototype.dispose.call(this); this.m.dispose(); }; return AutoDetachObserver; }(AbstractObserver)); RxJS-4.1.0/src/core/backpressure/000077500000000000000000000000001266736161100165635ustar00rootroot00000000000000RxJS-4.1.0/src/core/backpressure/controlled.js000066400000000000000000000107601266736161100212720ustar00rootroot00000000000000 var ControlledObservable = (function (__super__) { inherits(ControlledObservable, __super__); function ControlledObservable (source, enableQueue, scheduler) { __super__.call(this); this.subject = new ControlledSubject(enableQueue, scheduler); this.source = source.multicast(this.subject).refCount(); } ControlledObservable.prototype._subscribe = function (o) { return this.source.subscribe(o); }; ControlledObservable.prototype.request = function (numberOfItems) { return this.subject.request(numberOfItems == null ? -1 : numberOfItems); }; return ControlledObservable; }(Observable)); var ControlledSubject = (function (__super__) { inherits(ControlledSubject, __super__); function ControlledSubject(enableQueue, scheduler) { enableQueue == null && (enableQueue = true); __super__.call(this); this.subject = new Subject(); this.enableQueue = enableQueue; this.queue = enableQueue ? [] : null; this.requestedCount = 0; this.requestedDisposable = null; this.error = null; this.hasFailed = false; this.hasCompleted = false; this.scheduler = scheduler || currentThreadScheduler; } addProperties(ControlledSubject.prototype, Observer, { _subscribe: function (o) { return this.subject.subscribe(o); }, onCompleted: function () { this.hasCompleted = true; if (!this.enableQueue || this.queue.length === 0) { this.subject.onCompleted(); this.disposeCurrentRequest(); } else { this.queue.push(Notification.createOnCompleted()); } }, onError: function (error) { this.hasFailed = true; this.error = error; if (!this.enableQueue || this.queue.length === 0) { this.subject.onError(error); this.disposeCurrentRequest(); } else { this.queue.push(Notification.createOnError(error)); } }, onNext: function (value) { if (this.requestedCount <= 0) { this.enableQueue && this.queue.push(Notification.createOnNext(value)); } else { (this.requestedCount-- === 0) && this.disposeCurrentRequest(); this.subject.onNext(value); } }, _processRequest: function (numberOfItems) { if (this.enableQueue) { while (this.queue.length > 0 && (numberOfItems > 0 || this.queue[0].kind !== 'N')) { var first = this.queue.shift(); first.accept(this.subject); if (first.kind === 'N') { numberOfItems--; } else { this.disposeCurrentRequest(); this.queue = []; } } } return numberOfItems; }, request: function (number) { this.disposeCurrentRequest(); var self = this; this.requestedDisposable = this.scheduler.schedule(number, function(s, i) { var remaining = self._processRequest(i); var stopped = self.hasCompleted || self.hasFailed; if (!stopped && remaining > 0) { self.requestedCount = remaining; return disposableCreate(function () { self.requestedCount = 0; }); // Scheduled item is still in progress. Return a new // disposable to allow the request to be interrupted // via dispose. } }); return this.requestedDisposable; }, disposeCurrentRequest: function () { if (this.requestedDisposable) { this.requestedDisposable.dispose(); this.requestedDisposable = null; } } }); return ControlledSubject; }(Observable)); /** * Attaches a controller to the observable sequence with the ability to queue. * @example * var source = Rx.Observable.interval(100).controlled(); * source.request(3); // Reads 3 values * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request * @param {Scheduler} scheduler determines how the requests will be scheduled * @returns {Observable} The observable sequence which only propagates values on request. */ observableProto.controlled = function (enableQueue, scheduler) { if (enableQueue && isScheduler(enableQueue)) { scheduler = enableQueue; enableQueue = true; } if (enableQueue == null) { enableQueue = true; } return new ControlledObservable(this, enableQueue, scheduler); }; RxJS-4.1.0/src/core/backpressure/pausable.js000066400000000000000000000033741266736161100207240ustar00rootroot00000000000000 var PausableObservable = (function (__super__) { inherits(PausableObservable, __super__); function PausableObservable(source, pauser) { this.source = source; this.controller = new Subject(); this.paused = true; if (pauser && pauser.subscribe) { this.pauser = this.controller.merge(pauser); } else { this.pauser = this.controller; } __super__.call(this); } PausableObservable.prototype._subscribe = function (o) { var conn = this.source.publish(), subscription = conn.subscribe(o), connection = disposableEmpty; var pausable = this.pauser.startWith(!this.paused).distinctUntilChanged().subscribe(function (b) { if (b) { connection = conn.connect(); } else { connection.dispose(); connection = disposableEmpty; } }); return new NAryDisposable([subscription, connection, pausable]); }; PausableObservable.prototype.pause = function () { this.paused = true; this.controller.onNext(false); }; PausableObservable.prototype.resume = function () { this.paused = false; this.controller.onNext(true); }; return PausableObservable; }(Observable)); /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausable(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ observableProto.pausable = function (pauser) { return new PausableObservable(this, pauser); }; RxJS-4.1.0/src/core/backpressure/pausablebuffered.js000066400000000000000000000076471266736161100224360ustar00rootroot00000000000000 function combineLatestSource(source, subject, resultSelector) { return new AnonymousObservable(function (o) { var hasValue = [false, false], hasValueAll = false, isDone = false, values = new Array(2), err; function next(x, i) { values[i] = x; hasValue[i] = true; if (hasValueAll || (hasValueAll = hasValue.every(identity))) { if (err) { return o.onError(err); } var res = tryCatch(resultSelector).apply(null, values); if (res === errorObj) { return o.onError(res.e); } o.onNext(res); } isDone && values[1] && o.onCompleted(); } return new BinaryDisposable( source.subscribe( function (x) { next(x, 0); }, function (e) { if (values[1]) { o.onError(e); } else { err = e; } }, function () { isDone = true; values[1] && o.onCompleted(); }), subject.subscribe( function (x) { next(x, 1); }, function (e) { o.onError(e); }, function () { isDone = true; next(true, 1); }) ); }, source); } var PausableBufferedObservable = (function (__super__) { inherits(PausableBufferedObservable, __super__); function PausableBufferedObservable(source, pauser) { this.source = source; this.controller = new Subject(); this.paused = true; if (pauser && pauser.subscribe) { this.pauser = this.controller.merge(pauser); } else { this.pauser = this.controller; } __super__.call(this); } PausableBufferedObservable.prototype._subscribe = function (o) { var q = [], previousShouldFire; function drainQueue() { while (q.length > 0) { o.onNext(q.shift()); } } var subscription = combineLatestSource( this.source, this.pauser.startWith(!this.paused).distinctUntilChanged(), function (data, shouldFire) { return { data: data, shouldFire: shouldFire }; }) .subscribe( function (results) { if (previousShouldFire !== undefined && results.shouldFire !== previousShouldFire) { previousShouldFire = results.shouldFire; // change in shouldFire if (results.shouldFire) { drainQueue(); } } else { previousShouldFire = results.shouldFire; // new data if (results.shouldFire) { o.onNext(results.data); } else { q.push(results.data); } } }, function (err) { drainQueue(); o.onError(err); }, function () { drainQueue(); o.onCompleted(); } ); return subscription; }; PausableBufferedObservable.prototype.pause = function () { this.paused = true; this.controller.onNext(false); }; PausableBufferedObservable.prototype.resume = function () { this.paused = false; this.controller.onNext(true); }; return PausableBufferedObservable; }(Observable)); /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, * and yields the values that were buffered while paused. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausableBuffered(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ observableProto.pausableBuffered = function (pauser) { return new PausableBufferedObservable(this, pauser); }; RxJS-4.1.0/src/core/backpressure/pauser.js000066400000000000000000000007101266736161100204160ustar00rootroot00000000000000 /** * Used to pause and resume streams. */ Rx.Pauser = (function (__super__) { inherits(Pauser, __super__); function Pauser() { __super__.call(this); } /** * Pauses the underlying sequence. */ Pauser.prototype.pause = function () { this.onNext(false); }; /** * Resumes the underlying sequence. */ Pauser.prototype.resume = function () { this.onNext(true); }; return Pauser; }(Subject)); RxJS-4.1.0/src/core/backpressure/stopandwait.js000066400000000000000000000043021266736161100214550ustar00rootroot00000000000000 var StopAndWaitObservable = (function (__super__) { inherits(StopAndWaitObservable, __super__); function StopAndWaitObservable (source) { __super__.call(this); this.source = source; } function scheduleMethod(s, self) { return self.source.request(1); } StopAndWaitObservable.prototype._subscribe = function (o) { this.subscription = this.source.subscribe(new StopAndWaitObserver(o, this, this.subscription)); return new BinaryDisposable( this.subscription, defaultScheduler.schedule(this, scheduleMethod) ); }; var StopAndWaitObserver = (function (__sub__) { inherits(StopAndWaitObserver, __sub__); function StopAndWaitObserver (observer, observable, cancel) { __sub__.call(this); this.observer = observer; this.observable = observable; this.cancel = cancel; this.scheduleDisposable = null; } StopAndWaitObserver.prototype.completed = function () { this.observer.onCompleted(); this.dispose(); }; StopAndWaitObserver.prototype.error = function (error) { this.observer.onError(error); this.dispose(); }; function innerScheduleMethod(s, self) { return self.observable.source.request(1); } StopAndWaitObserver.prototype.next = function (value) { this.observer.onNext(value); this.scheduleDisposable = defaultScheduler.schedule(this, innerScheduleMethod); }; StopAndWaitObserver.dispose = function () { this.observer = null; if (this.cancel) { this.cancel.dispose(); this.cancel = null; } if (this.scheduleDisposable) { this.scheduleDisposable.dispose(); this.scheduleDisposable = null; } __sub__.prototype.dispose.call(this); }; return StopAndWaitObserver; }(AbstractObserver)); return StopAndWaitObservable; }(Observable)); /** * Attaches a stop and wait observable to the current observable. * @returns {Observable} A stop and wait observable. */ ControlledObservable.prototype.stopAndWait = function () { return new StopAndWaitObservable(this); }; RxJS-4.1.0/src/core/backpressure/windowed.js000066400000000000000000000047331266736161100207500ustar00rootroot00000000000000 var WindowedObservable = (function (__super__) { inherits(WindowedObservable, __super__); function WindowedObservable(source, windowSize) { __super__.call(this); this.source = source; this.windowSize = windowSize; } function scheduleMethod(s, self) { return self.source.request(self.windowSize); } WindowedObservable.prototype._subscribe = function (o) { this.subscription = this.source.subscribe(new WindowedObserver(o, this, this.subscription)); return new BinaryDisposable( this.subscription, defaultScheduler.schedule(this, scheduleMethod) ); }; var WindowedObserver = (function (__sub__) { inherits(WindowedObserver, __sub__); function WindowedObserver(observer, observable, cancel) { this.observer = observer; this.observable = observable; this.cancel = cancel; this.received = 0; this.scheduleDisposable = null; __sub__.call(this); } WindowedObserver.prototype.completed = function () { this.observer.onCompleted(); this.dispose(); }; WindowedObserver.prototype.error = function (error) { this.observer.onError(error); this.dispose(); }; function innerScheduleMethod(s, self) { return self.observable.source.request(self.observable.windowSize); } WindowedObserver.prototype.next = function (value) { this.observer.onNext(value); this.received = ++this.received % this.observable.windowSize; this.received === 0 && (this.scheduleDisposable = defaultScheduler.schedule(this, innerScheduleMethod)); }; WindowedObserver.prototype.dispose = function () { this.observer = null; if (this.cancel) { this.cancel.dispose(); this.cancel = null; } if (this.scheduleDisposable) { this.scheduleDisposable.dispose(); this.scheduleDisposable = null; } __sub__.prototype.dispose.call(this); }; return WindowedObserver; }(AbstractObserver)); return WindowedObservable; }(Observable)); /** * Creates a sliding windowed observable based upon the window size. * @param {Number} windowSize The number of items in the window * @returns {Observable} A windowed observable based upon the window size. */ ControlledObservable.prototype.windowed = function (windowSize) { return new WindowedObservable(this, windowSize); }; RxJS-4.1.0/src/core/checkedobserver.js000066400000000000000000000024461266736161100175740ustar00rootroot00000000000000 var CheckedObserver = (function (__super__) { inherits(CheckedObserver, __super__); function CheckedObserver(observer) { __super__.call(this); this._observer = observer; this._state = 0; // 0 - idle, 1 - busy, 2 - done } var CheckedObserverPrototype = CheckedObserver.prototype; CheckedObserverPrototype.onNext = function (value) { this.checkAccess(); var res = tryCatch(this._observer.onNext).call(this._observer, value); this._state = 0; res === errorObj && thrower(res.e); }; CheckedObserverPrototype.onError = function (err) { this.checkAccess(); var res = tryCatch(this._observer.onError).call(this._observer, err); this._state = 2; res === errorObj && thrower(res.e); }; CheckedObserverPrototype.onCompleted = function () { this.checkAccess(); var res = tryCatch(this._observer.onCompleted).call(this._observer); this._state = 2; res === errorObj && thrower(res.e); }; CheckedObserverPrototype.checkAccess = function () { if (this._state === 1) { throw new Error('Re-entrancy detected'); } if (this._state === 2) { throw new Error('Observer completed'); } if (this._state === 0) { this._state = 1; } }; return CheckedObserver; }(Observer)); RxJS-4.1.0/src/core/concurrency/000077500000000000000000000000001266736161100164245ustar00rootroot00000000000000RxJS-4.1.0/src/core/concurrency/catchscheduler.js000066400000000000000000000042651266736161100217520ustar00rootroot00000000000000 var CatchScheduler = (function (__super__) { inherits(CatchScheduler, __super__); function CatchScheduler(scheduler, handler) { this._scheduler = scheduler; this._handler = handler; this._recursiveOriginal = null; this._recursiveWrapper = null; __super__.call(this); } CatchScheduler.prototype.schedule = function (state, action) { return this._scheduler.schedule(state, this._wrap(action)); }; CatchScheduler.prototype._scheduleFuture = function (state, dueTime, action) { return this._scheduler.schedule(state, dueTime, this._wrap(action)); }; CatchScheduler.prototype.now = function () { return this._scheduler.now(); }; CatchScheduler.prototype._clone = function (scheduler) { return new CatchScheduler(scheduler, this._handler); }; CatchScheduler.prototype._wrap = function (action) { var parent = this; return function (self, state) { var res = tryCatch(action)(parent._getRecursiveWrapper(self), state); if (res === errorObj) { if (!parent._handler(res.e)) { thrower(res.e); } return disposableEmpty; } return disposableFixup(res); }; }; CatchScheduler.prototype._getRecursiveWrapper = function (scheduler) { if (this._recursiveOriginal !== scheduler) { this._recursiveOriginal = scheduler; var wrapper = this._clone(scheduler); wrapper._recursiveOriginal = scheduler; wrapper._recursiveWrapper = wrapper; this._recursiveWrapper = wrapper; } return this._recursiveWrapper; }; CatchScheduler.prototype.schedulePeriodic = function (state, period, action) { var self = this, failed = false, d = new SingleAssignmentDisposable(); d.setDisposable(this._scheduler.schedulePeriodic(state, period, function (state1) { if (failed) { return null; } var res = tryCatch(action)(state1); if (res === errorObj) { failed = true; if (!self._handler(res.e)) { thrower(res.e); } d.dispose(); return null; } return res; })); return d; }; return CatchScheduler; }(Scheduler)); RxJS-4.1.0/src/core/concurrency/currentthreadscheduler.js000066400000000000000000000021441266736161100235340ustar00rootroot00000000000000 /** * Gets a scheduler that schedules work as soon as possible on the current thread. */ var CurrentThreadScheduler = (function (__super__) { var queue; function runTrampoline () { while (queue.length > 0) { var item = queue.dequeue(); !item.isCancelled() && item.invoke(); } } inherits(CurrentThreadScheduler, __super__); function CurrentThreadScheduler() { __super__.call(this); } CurrentThreadScheduler.prototype.schedule = function (state, action) { var si = new ScheduledItem(this, state, action, this.now()); if (!queue) { queue = new PriorityQueue(4); queue.enqueue(si); var result = tryCatch(runTrampoline)(); queue = null; if (result === errorObj) { thrower(result.e); } } else { queue.enqueue(si); } return si.disposable; }; CurrentThreadScheduler.prototype.scheduleRequired = function () { return !queue; }; return CurrentThreadScheduler; }(Scheduler)); var currentThreadScheduler = Scheduler.currentThread = new CurrentThreadScheduler(); RxJS-4.1.0/src/core/concurrency/defaultscheduler.js000066400000000000000000000147061266736161100223150ustar00rootroot00000000000000 var scheduleMethod, clearMethod; var localTimer = (function () { var localSetTimeout, localClearTimeout = noop; if (!!root.setTimeout) { localSetTimeout = root.setTimeout; localClearTimeout = root.clearTimeout; } else if (!!root.WScript) { localSetTimeout = function (fn, time) { root.WScript.Sleep(time); fn(); }; } else { throw new NotSupportedError(); } return { setTimeout: localSetTimeout, clearTimeout: localClearTimeout }; }()); var localSetTimeout = localTimer.setTimeout, localClearTimeout = localTimer.clearTimeout; (function () { var nextHandle = 1, tasksByHandle = {}, currentlyRunning = false; clearMethod = function (handle) { delete tasksByHandle[handle]; }; function runTask(handle) { if (currentlyRunning) { localSetTimeout(function () { runTask(handle); }, 0); } else { var task = tasksByHandle[handle]; if (task) { currentlyRunning = true; var result = tryCatch(task)(); clearMethod(handle); currentlyRunning = false; if (result === errorObj) { thrower(result.e); } } } } var reNative = new RegExp('^' + String(toString) .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') .replace(/toString| for [^\]]+/g, '.*?') + '$' ); var setImmediate = typeof (setImmediate = freeGlobal && moduleExports && freeGlobal.setImmediate) == 'function' && !reNative.test(setImmediate) && setImmediate; function postMessageSupported () { // Ensure not in a worker if (!root.postMessage || root.importScripts) { return false; } var isAsync = false, oldHandler = root.onmessage; // Test for async root.onmessage = function () { isAsync = true; }; root.postMessage('', '*'); root.onmessage = oldHandler; return isAsync; } // Use in order, setImmediate, nextTick, postMessage, MessageChannel, script readystatechanged, setTimeout if (isFunction(setImmediate)) { scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; setImmediate(function () { runTask(id); }); return id; }; } else if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; process.nextTick(function () { runTask(id); }); return id; }; } else if (postMessageSupported()) { var MSG_PREFIX = 'ms.rx.schedule' + Math.random(); var onGlobalPostMessage = function (event) { // Only if we're a match to avoid any other global events if (typeof event.data === 'string' && event.data.substring(0, MSG_PREFIX.length) === MSG_PREFIX) { runTask(event.data.substring(MSG_PREFIX.length)); } }; root.addEventListener('message', onGlobalPostMessage, false); scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; root.postMessage(MSG_PREFIX + id, '*'); return id; }; } else if (!!root.MessageChannel) { var channel = new root.MessageChannel(); channel.port1.onmessage = function (e) { runTask(e.data); }; scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; channel.port2.postMessage(id); return id; }; } else if ('document' in root && 'onreadystatechange' in root.document.createElement('script')) { scheduleMethod = function (action) { var scriptElement = root.document.createElement('script'); var id = nextHandle++; tasksByHandle[id] = action; scriptElement.onreadystatechange = function () { runTask(id); scriptElement.onreadystatechange = null; scriptElement.parentNode.removeChild(scriptElement); scriptElement = null; }; root.document.documentElement.appendChild(scriptElement); return id; }; } else { scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; localSetTimeout(function () { runTask(id); }, 0); return id; }; } }()); /** * Gets a scheduler that schedules work via a timed callback based upon platform. */ var DefaultScheduler = (function (__super__) { inherits(DefaultScheduler, __super__); function DefaultScheduler() { __super__.call(this); } function scheduleAction(disposable, action, scheduler, state) { return function schedule() { disposable.setDisposable(Disposable._fixup(action(scheduler, state))); }; } function ClearDisposable(id) { this._id = id; this.isDisposed = false; } ClearDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; clearMethod(this._id); } }; function LocalClearDisposable(id) { this._id = id; this.isDisposed = false; } LocalClearDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; localClearTimeout(this._id); } }; DefaultScheduler.prototype.schedule = function (state, action) { var disposable = new SingleAssignmentDisposable(), id = scheduleMethod(scheduleAction(disposable, action, this, state)); return new BinaryDisposable(disposable, new ClearDisposable(id)); }; DefaultScheduler.prototype._scheduleFuture = function (state, dueTime, action) { if (dueTime === 0) { return this.schedule(state, action); } var disposable = new SingleAssignmentDisposable(), id = localSetTimeout(scheduleAction(disposable, action, this, state), dueTime); return new BinaryDisposable(disposable, new LocalClearDisposable(id)); }; function scheduleLongRunning(state, action, disposable) { return function () { action(state, disposable); }; } DefaultScheduler.prototype.scheduleLongRunning = function (state, action) { var disposable = disposableCreate(noop); scheduleMethod(scheduleLongRunning(state, action, disposable)); return disposable; }; return DefaultScheduler; }(Scheduler)); var defaultScheduler = Scheduler['default'] = Scheduler.async = new DefaultScheduler(); RxJS-4.1.0/src/core/concurrency/historicalscheduler.js000066400000000000000000000032161266736161100230240ustar00rootroot00000000000000 /** Provides a virtual time scheduler that uses Date for absolute time and number for relative time. */ Rx.HistoricalScheduler = (function (__super__) { inherits(HistoricalScheduler, __super__); /** * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ function HistoricalScheduler(initialClock, comparer) { var clock = initialClock == null ? 0 : initialClock; var cmp = comparer || defaultSubComparer; __super__.call(this, clock, cmp); } var HistoricalSchedulerProto = HistoricalScheduler.prototype; /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ HistoricalSchedulerProto.add = function (absolute, relative) { return absolute + relative; }; HistoricalSchedulerProto.toAbsoluteTime = function (absolute) { return new Date(absolute).getTime(); }; /** * Converts the TimeSpan value to a relative virtual time value. * @memberOf HistoricalScheduler * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ HistoricalSchedulerProto.toRelativeTime = function (timeSpan) { return timeSpan; }; return HistoricalScheduler; }(Rx.VirtualTimeScheduler)); RxJS-4.1.0/src/core/concurrency/immediatescheduler.js000066400000000000000000000007671266736161100226310ustar00rootroot00000000000000 /** Gets a scheduler that schedules work immediately on the current thread. */ var ImmediateScheduler = (function (__super__) { inherits(ImmediateScheduler, __super__); function ImmediateScheduler() { __super__.call(this); } ImmediateScheduler.prototype.schedule = function (state, action) { return disposableFixup(action(this, state)); }; return ImmediateScheduler; }(Scheduler)); var immediateScheduler = Scheduler.immediate = new ImmediateScheduler(); RxJS-4.1.0/src/core/concurrency/scheduleditem.js000066400000000000000000000014211266736161100215770ustar00rootroot00000000000000 var ScheduledItem = Rx.internals.ScheduledItem = function (scheduler, state, action, dueTime, comparer) { this.scheduler = scheduler; this.state = state; this.action = action; this.dueTime = dueTime; this.comparer = comparer || defaultSubComparer; this.disposable = new SingleAssignmentDisposable(); }; ScheduledItem.prototype.invoke = function () { this.disposable.setDisposable(this.invokeCore()); }; ScheduledItem.prototype.compareTo = function (other) { return this.comparer(this.dueTime, other.dueTime); }; ScheduledItem.prototype.isCancelled = function () { return this.disposable.isDisposed; }; ScheduledItem.prototype.invokeCore = function () { return disposableFixup(this.action(this.scheduler, this.state)); }; RxJS-4.1.0/src/core/concurrency/scheduleperiodicrecursive.js000066400000000000000000000016251266736161100242310ustar00rootroot00000000000000 var SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive = (function () { function createTick(self) { return function tick(command, recurse) { recurse(0, self._period); var state = tryCatch(self._action)(self._state); if (state === errorObj) { self._cancel.dispose(); thrower(state.e); } self._state = state; }; } function SchedulePeriodicRecursive(scheduler, state, period, action) { this._scheduler = scheduler; this._state = state; this._period = period; this._action = action; } SchedulePeriodicRecursive.prototype.start = function () { var d = new SingleAssignmentDisposable(); this._cancel = d; d.setDisposable(this._scheduler.scheduleRecursiveFuture(0, this._period, createTick(this))); return d; }; return SchedulePeriodicRecursive; }()); RxJS-4.1.0/src/core/concurrency/scheduler.js000066400000000000000000000042621266736161100207440ustar00rootroot00000000000000 /** Provides a set of static properties to access commonly used schedulers. */ var Scheduler = Rx.Scheduler = (function () { function Scheduler() { } /** Determines whether the given object is a scheduler */ Scheduler.isScheduler = function (s) { return s instanceof Scheduler; }; var schedulerProto = Scheduler.prototype; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedulerProto.schedule = function (state, action) { throw new NotImplementedError(); }; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedulerProto.scheduleFuture = function (state, dueTime, action) { var dt = dueTime; dt instanceof Date && (dt = dt - this.now()); dt = Scheduler.normalize(dt); if (dt === 0) { return this.schedule(state, action); } return this._scheduleFuture(state, dt, action); }; schedulerProto._scheduleFuture = function (state, dueTime, action) { throw new NotImplementedError(); }; /** Gets the current time according to the local machine's system clock. */ Scheduler.now = defaultNow; /** Gets the current time according to the local machine's system clock. */ Scheduler.prototype.now = defaultNow; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ Scheduler.normalize = function (timeSpan) { timeSpan < 0 && (timeSpan = 0); return timeSpan; }; return Scheduler; }()); var normalizeTime = Scheduler.normalize, isScheduler = Scheduler.isScheduler; RxJS-4.1.0/src/core/concurrency/scheduler.periodic.js000066400000000000000000000017301266736161100225360ustar00rootroot00000000000000 (function (schedulerProto) { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulerProto.schedulePeriodic = function(state, period, action) { if (typeof root.setInterval === 'undefined') { throw new NotSupportedError(); } period = normalizeTime(period); var s = state, id = root.setInterval(function () { s = action(s); }, period); return disposableCreate(function () { root.clearInterval(id); }); }; }(Scheduler.prototype)); RxJS-4.1.0/src/core/concurrency/scheduler.recursive.js000066400000000000000000000053301266736161100227470ustar00rootroot00000000000000 (function (schedulerProto) { function invokeRecImmediate(scheduler, pair) { var state = pair[0], action = pair[1], group = new CompositeDisposable(); action(state, innerAction); return group; function innerAction(state2) { var isAdded = false, isDone = false; var d = scheduler.schedule(state2, scheduleWork); if (!isDone) { group.add(d); isAdded = true; } function scheduleWork(_, state3) { if (isAdded) { group.remove(d); } else { isDone = true; } action(state3, innerAction); return disposableEmpty; } } } function invokeRecDate(scheduler, pair) { var state = pair[0], action = pair[1], group = new CompositeDisposable(); action(state, innerAction); return group; function innerAction(state2, dueTime1) { var isAdded = false, isDone = false; var d = scheduler.scheduleFuture(state2, dueTime1, scheduleWork); if (!isDone) { group.add(d); isAdded = true; } function scheduleWork(_, state3) { if (isAdded) { group.remove(d); } else { isDone = true; } action(state3, innerAction); return disposableEmpty; } } } /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedulerProto.scheduleRecursive = function (state, action) { return this.schedule([state, action], invokeRecImmediate); }; /** * Schedules an action to be executed recursively after a specified relative or absolute due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number | Date} dueTime Relative or absolute time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedulerProto.scheduleRecursiveFuture = function (state, dueTime, action) { return this.scheduleFuture([state, action], dueTime, invokeRecDate); }; }(Scheduler.prototype)); RxJS-4.1.0/src/core/concurrency/scheduler.wrappers.js000066400000000000000000000010541266736161100226020ustar00rootroot00000000000000 (function (schedulerProto) { /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ schedulerProto.catchError = schedulerProto['catch'] = function (handler) { return new CatchScheduler(this, handler); }; }(Scheduler.prototype)); RxJS-4.1.0/src/core/concurrency/virtualtimescheduler.js000066400000000000000000000157371266736161100232430ustar00rootroot00000000000000 /** Provides a set of extension methods for virtual time scheduling. */ var VirtualTimeScheduler = Rx.VirtualTimeScheduler = (function (__super__) { inherits(VirtualTimeScheduler, __super__); /** * Creates a new virtual time scheduler with the specified initial clock value and absolute time comparer. * * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ function VirtualTimeScheduler(initialClock, comparer) { this.clock = initialClock; this.comparer = comparer; this.isEnabled = false; this.queue = new PriorityQueue(1024); __super__.call(this); } var VirtualTimeSchedulerPrototype = VirtualTimeScheduler.prototype; VirtualTimeSchedulerPrototype.now = function () { return this.toAbsoluteTime(this.clock); }; VirtualTimeSchedulerPrototype.schedule = function (state, action) { return this.scheduleAbsolute(state, this.clock, action); }; VirtualTimeSchedulerPrototype.scheduleFuture = function (state, dueTime, action) { var dt = dueTime instanceof Date ? this.toRelativeTime(dueTime - this.now()) : this.toRelativeTime(dueTime); return this.scheduleRelative(state, dt, action); }; /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ VirtualTimeSchedulerPrototype.add = notImplemented; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ VirtualTimeSchedulerPrototype.toAbsoluteTime = notImplemented; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ VirtualTimeSchedulerPrototype.toRelativeTime = notImplemented; /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be emulated using recursive scheduling. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ VirtualTimeSchedulerPrototype.schedulePeriodic = function (state, period, action) { var s = new SchedulePeriodicRecursive(this, state, period, action); return s.start(); }; /** * Schedules an action to be executed after dueTime. * @param {Mixed} state State passed to the action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ VirtualTimeSchedulerPrototype.scheduleRelative = function (state, dueTime, action) { var runAt = this.add(this.clock, dueTime); return this.scheduleAbsolute(state, runAt, action); }; /** * Starts the virtual time scheduler. */ VirtualTimeSchedulerPrototype.start = function () { if (!this.isEnabled) { this.isEnabled = true; do { var next = this.getNext(); if (next !== null) { this.comparer(next.dueTime, this.clock) > 0 && (this.clock = next.dueTime); next.invoke(); } else { this.isEnabled = false; } } while (this.isEnabled); } }; /** * Stops the virtual time scheduler. */ VirtualTimeSchedulerPrototype.stop = function () { this.isEnabled = false; }; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ VirtualTimeSchedulerPrototype.advanceTo = function (time) { var dueToClock = this.comparer(this.clock, time); if (this.comparer(this.clock, time) > 0) { throw new ArgumentOutOfRangeError(); } if (dueToClock === 0) { return; } if (!this.isEnabled) { this.isEnabled = true; do { var next = this.getNext(); if (next !== null && this.comparer(next.dueTime, time) <= 0) { this.comparer(next.dueTime, this.clock) > 0 && (this.clock = next.dueTime); next.invoke(); } else { this.isEnabled = false; } } while (this.isEnabled); this.clock = time; } }; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ VirtualTimeSchedulerPrototype.advanceBy = function (time) { var dt = this.add(this.clock, time), dueToClock = this.comparer(this.clock, dt); if (dueToClock > 0) { throw new ArgumentOutOfRangeError(); } if (dueToClock === 0) { return; } this.advanceTo(dt); }; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ VirtualTimeSchedulerPrototype.sleep = function (time) { var dt = this.add(this.clock, time); if (this.comparer(this.clock, dt) >= 0) { throw new ArgumentOutOfRangeError(); } this.clock = dt; }; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ VirtualTimeSchedulerPrototype.getNext = function () { while (this.queue.length > 0) { var next = this.queue.peek(); if (next.isCancelled()) { this.queue.dequeue(); } else { return next; } } return null; }; /** * Schedules an action to be executed at dueTime. * @param {Mixed} state State passed to the action to be executed. * @param {Number} dueTime Absolute time at which to execute the action. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ VirtualTimeSchedulerPrototype.scheduleAbsolute = function (state, dueTime, action) { var self = this; function run(scheduler, state1) { self.queue.remove(si); return action(scheduler, state1); } var si = new ScheduledItem(this, state, run, dueTime, this.comparer); this.queue.enqueue(si); return si.disposable; }; return VirtualTimeScheduler; }(Scheduler)); RxJS-4.1.0/src/core/disposables/000077500000000000000000000000001266736161100164025ustar00rootroot00000000000000RxJS-4.1.0/src/core/disposables/binarydisposable.js000066400000000000000000000015501266736161100222730ustar00rootroot00000000000000 var BinaryDisposable = Rx.BinaryDisposable = function (first, second) { this._first = first; this._second = second; this.isDisposed = false; }; BinaryDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; var old1 = this._first; this._first = null; old1 && old1.dispose(); var old2 = this._second; this._second = null; old2 && old2.dispose(); } }; var NAryDisposable = Rx.NAryDisposable = function (disposables) { this._disposables = disposables; this.isDisposed = false; }; NAryDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; for (var i = 0, len = this._disposables.length; i < len; i++) { this._disposables[i].dispose(); } this._disposables.length = 0; } }; RxJS-4.1.0/src/core/disposables/booleandisposable.js000066400000000000000000000027331266736161100224320ustar00rootroot00000000000000 // Single assignment var SingleAssignmentDisposable = Rx.SingleAssignmentDisposable = function () { this.isDisposed = false; this.current = null; }; SingleAssignmentDisposable.prototype.getDisposable = function () { return this.current; }; SingleAssignmentDisposable.prototype.setDisposable = function (value) { if (this.current) { throw new Error('Disposable has already been assigned'); } var shouldDispose = this.isDisposed; !shouldDispose && (this.current = value); shouldDispose && value && value.dispose(); }; SingleAssignmentDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; var old = this.current; this.current = null; old && old.dispose(); } }; // Multiple assignment disposable var SerialDisposable = Rx.SerialDisposable = function () { this.isDisposed = false; this.current = null; }; SerialDisposable.prototype.getDisposable = function () { return this.current; }; SerialDisposable.prototype.setDisposable = function (value) { var shouldDispose = this.isDisposed; if (!shouldDispose) { var old = this.current; this.current = value; } old && old.dispose(); shouldDispose && value && value.dispose(); }; SerialDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; var old = this.current; this.current = null; } old && old.dispose(); }; RxJS-4.1.0/src/core/disposables/compositedisposable.js000066400000000000000000000037151266736161100230160ustar00rootroot00000000000000 /** * Represents a group of disposable resources that are disposed together. * @constructor */ var CompositeDisposable = Rx.CompositeDisposable = function () { var args = [], i, len; if (Array.isArray(arguments[0])) { args = arguments[0]; } else { len = arguments.length; args = new Array(len); for(i = 0; i < len; i++) { args[i] = arguments[i]; } } this.disposables = args; this.isDisposed = false; this.length = args.length; }; var CompositeDisposablePrototype = CompositeDisposable.prototype; /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ CompositeDisposablePrototype.add = function (item) { if (this.isDisposed) { item.dispose(); } else { this.disposables.push(item); this.length++; } }; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ CompositeDisposablePrototype.remove = function (item) { var shouldDispose = false; if (!this.isDisposed) { var idx = this.disposables.indexOf(item); if (idx !== -1) { shouldDispose = true; this.disposables.splice(idx, 1); this.length--; item.dispose(); } } return shouldDispose; }; /** * Disposes all disposables in the group and removes them from the group. */ CompositeDisposablePrototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; var len = this.disposables.length, currentDisposables = new Array(len); for(var i = 0; i < len; i++) { currentDisposables[i] = this.disposables[i]; } this.disposables = []; this.length = 0; for (i = 0; i < len; i++) { currentDisposables[i].dispose(); } } }; RxJS-4.1.0/src/core/disposables/disposable.js000066400000000000000000000031601266736161100210650ustar00rootroot00000000000000 /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ var Disposable = Rx.Disposable = function (action) { this.isDisposed = false; this.action = action || noop; }; /** Performs the task of cleaning up resources. */ Disposable.prototype.dispose = function () { if (!this.isDisposed) { this.action(); this.isDisposed = true; } }; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ var disposableCreate = Disposable.create = function (action) { return new Disposable(action); }; /** * Gets the disposable that does nothing when disposed. */ var disposableEmpty = Disposable.empty = { dispose: noop }; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ var isDisposable = Disposable.isDisposable = function (d) { return d && isFunction(d.dispose); }; var checkDisposed = Disposable.checkDisposed = function (disposable) { if (disposable.isDisposed) { throw new ObjectDisposedError(); } }; var disposableFixup = Disposable._fixup = function (result) { return isDisposable(result) ? result : disposableEmpty; }; RxJS-4.1.0/src/core/disposables/refcountdisposable.js000066400000000000000000000037401266736161100226370ustar00rootroot00000000000000 /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ var RefCountDisposable = Rx.RefCountDisposable = (function () { function InnerDisposable(disposable) { this.disposable = disposable; this.disposable.count++; this.isInnerDisposed = false; } InnerDisposable.prototype.dispose = function () { if (!this.disposable.isDisposed && !this.isInnerDisposed) { this.isInnerDisposed = true; this.disposable.count--; if (this.disposable.count === 0 && this.disposable.isPrimaryDisposed) { this.disposable.isDisposed = true; this.disposable.underlyingDisposable.dispose(); } } }; /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ function RefCountDisposable(disposable) { this.underlyingDisposable = disposable; this.isDisposed = false; this.isPrimaryDisposed = false; this.count = 0; } /** * Disposes the underlying disposable only when all dependent disposables have been disposed */ RefCountDisposable.prototype.dispose = function () { if (!this.isDisposed && !this.isPrimaryDisposed) { this.isPrimaryDisposed = true; if (this.count === 0) { this.isDisposed = true; this.underlyingDisposable.dispose(); } } }; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ RefCountDisposable.prototype.getDisposable = function () { return this.isDisposed ? disposableEmpty : new InnerDisposable(this); }; return RefCountDisposable; })(); RxJS-4.1.0/src/core/disposables/scheduleddisposable.js000066400000000000000000000006231266736161100227470ustar00rootroot00000000000000 function ScheduledDisposable(scheduler, disposable) { this.scheduler = scheduler; this.disposable = disposable; this.isDisposed = false; } function scheduleItem(s, self) { if (!self.isDisposed) { self.isDisposed = true; self.disposable.dispose(); } } ScheduledDisposable.prototype.dispose = function () { this.scheduler.schedule(this, scheduleItem); }; RxJS-4.1.0/src/core/enumerable.js000066400000000000000000000132341266736161100165520ustar00rootroot00000000000000 var Enumerable = Rx.internals.Enumerable = function () { }; function IsDisposedDisposable(state) { this._s = state; this.isDisposed = false; } IsDisposedDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; this._s.isDisposed = true; } }; var ConcatEnumerableObservable = (function(__super__) { inherits(ConcatEnumerableObservable, __super__); function ConcatEnumerableObservable(sources) { this.sources = sources; __super__.call(this); } function scheduleMethod(state, recurse) { if (state.isDisposed) { return; } var currentItem = tryCatch(state.e.next).call(state.e); if (currentItem === errorObj) { return state.o.onError(currentItem.e); } if (currentItem.done) { return state.o.onCompleted(); } // Check if promise var currentValue = currentItem.value; isPromise(currentValue) && (currentValue = observableFromPromise(currentValue)); var d = new SingleAssignmentDisposable(); state.subscription.setDisposable(d); d.setDisposable(currentValue.subscribe(new InnerObserver(state, recurse))); } ConcatEnumerableObservable.prototype.subscribeCore = function (o) { var subscription = new SerialDisposable(); var state = { isDisposed: false, o: o, subscription: subscription, e: this.sources[$iterator$]() }; var cancelable = currentThreadScheduler.scheduleRecursive(state, scheduleMethod); return new NAryDisposable([subscription, cancelable, new IsDisposedDisposable(state)]); }; function InnerObserver(state, recurse) { this._state = state; this._recurse = recurse; AbstractObserver.call(this); } inherits(InnerObserver, AbstractObserver); InnerObserver.prototype.next = function (x) { this._state.o.onNext(x); }; InnerObserver.prototype.error = function (e) { this._state.o.onError(e); }; InnerObserver.prototype.completed = function () { this._recurse(this._state); }; return ConcatEnumerableObservable; }(ObservableBase)); Enumerable.prototype.concat = function () { return new ConcatEnumerableObservable(this); }; var CatchErrorObservable = (function(__super__) { function CatchErrorObservable(sources) { this.sources = sources; __super__.call(this); } inherits(CatchErrorObservable, __super__); function scheduleMethod(state, recurse) { if (state.isDisposed) { return; } var currentItem = tryCatch(state.e.next).call(state.e); if (currentItem === errorObj) { return state.o.onError(currentItem.e); } if (currentItem.done) { return state.lastError !== null ? state.o.onError(state.lastError) : state.o.onCompleted(); } var currentValue = currentItem.value; isPromise(currentValue) && (currentValue = observableFromPromise(currentValue)); var d = new SingleAssignmentDisposable(); state.subscription.setDisposable(d); d.setDisposable(currentValue.subscribe(new InnerObserver(state, recurse))); } CatchErrorObservable.prototype.subscribeCore = function (o) { var subscription = new SerialDisposable(); var state = { isDisposed: false, e: this.sources[$iterator$](), subscription: subscription, lastError: null, o: o }; var cancelable = currentThreadScheduler.scheduleRecursive(state, scheduleMethod); return new NAryDisposable([subscription, cancelable, new IsDisposedDisposable(state)]); }; function InnerObserver(state, recurse) { this._state = state; this._recurse = recurse; AbstractObserver.call(this); } inherits(InnerObserver, AbstractObserver); InnerObserver.prototype.next = function (x) { this._state.o.onNext(x); }; InnerObserver.prototype.error = function (e) { this._state.lastError = e; this._recurse(this._state); }; InnerObserver.prototype.completed = function () { this._state.o.onCompleted(); }; return CatchErrorObservable; }(ObservableBase)); Enumerable.prototype.catchError = function () { return new CatchErrorObservable(this); }; var RepeatEnumerable = (function (__super__) { inherits(RepeatEnumerable, __super__); function RepeatEnumerable(v, c) { this.v = v; this.c = c == null ? -1 : c; } RepeatEnumerable.prototype[$iterator$] = function () { return new RepeatEnumerator(this); }; function RepeatEnumerator(p) { this.v = p.v; this.l = p.c; } RepeatEnumerator.prototype.next = function () { if (this.l === 0) { return doneEnumerator; } if (this.l > 0) { this.l--; } return { done: false, value: this.v }; }; return RepeatEnumerable; }(Enumerable)); var enumerableRepeat = Enumerable.repeat = function (value, repeatCount) { return new RepeatEnumerable(value, repeatCount); }; var OfEnumerable = (function(__super__) { inherits(OfEnumerable, __super__); function OfEnumerable(s, fn, thisArg) { this.s = s; this.fn = fn ? bindCallback(fn, thisArg, 3) : null; } OfEnumerable.prototype[$iterator$] = function () { return new OfEnumerator(this); }; function OfEnumerator(p) { this.i = -1; this.s = p.s; this.l = this.s.length; this.fn = p.fn; } OfEnumerator.prototype.next = function () { return ++this.i < this.l ? { done: false, value: !this.fn ? this.s[this.i] : this.fn(this.s[this.i], this.i, this.s) } : doneEnumerator; }; return OfEnumerable; }(Enumerable)); var enumerableOf = Enumerable.of = function (source, selector, thisArg) { return new OfEnumerable(source, selector, thisArg); }; RxJS-4.1.0/src/core/expressions/000077500000000000000000000000001266736161100164545ustar00rootroot00000000000000RxJS-4.1.0/src/core/expressions/ExpressionTrees.csproj000066400000000000000000000073231266736161100230450ustar00rootroot00000000000000 Debug {9286B3D5-AAB5-41FB-B205-ED0ACADBDB98} {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} Library bin v4.6 full true 1.4 true web.config web.config 12.0 ExpressionTrees True True 18636 / http://localhost:18636/ False False False false true true false RxJS-4.1.0/src/core/expressions/ExpressionTrees.csproj.user000066400000000000000000000020431266736161100240140ustar00rootroot00000000000000 CurrentPage True False False False True True RxJS-4.1.0/src/core/expressions/ExpressionTrees.sln000066400000000000000000000017161266736161100223410ustar00rootroot00000000000000 Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 14 VisualStudioVersion = 14.0.22823.1 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExpressionTrees", "ExpressionTrees.csproj", "{9286B3D5-AAB5-41FB-B205-ED0ACADBDB98}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {9286B3D5-AAB5-41FB-B205-ED0ACADBDB98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9286B3D5-AAB5-41FB-B205-ED0ACADBDB98}.Debug|Any CPU.Build.0 = Debug|Any CPU {9286B3D5-AAB5-41FB-B205-ED0ACADBDB98}.Release|Any CPU.ActiveCfg = Release|Any CPU {9286B3D5-AAB5-41FB-B205-ED0ACADBDB98}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal RxJS-4.1.0/src/core/expressions/app.css000066400000000000000000000001271266736161100177460ustar00rootroot00000000000000body { font-family: 'Segoe UI', sans-serif; } span { font-style: italic; } RxJS-4.1.0/src/core/expressions/app.js000066400000000000000000000041601266736161100175730ustar00rootroot00000000000000/// var Tests = (function () { function Tests(element) { this.element = element; } Tests.prototype.start = function () { var e = Expression.add(Expression.constant(1), Expression.constant(2)); var l = Expression.lambda(e); var c = l.compileToFunction(); var f = l.compile(); var b = l.toBonsai(); var x = f(); this.element.innerHTML = "Eval(" + l + ") = Eval(" + c + ") = Eval(" + JSON.stringify(b) + ") = " + x; }; return Tests; })(); window.onload = function () { var el = document.getElementById('content'); var tests = new Tests(el); tests.start(); }; /* var resources = { "my://xs": [1, 2, 3, 4, 5], "my://ss": ["bar", "foo", "qux"], "rx://operators/filter": function (xs: any[], f: (any) => boolean) { return xs.filter(f); }, "rx://operators/map": function (xs: any[], f: (any) => any) { return xs.map(f); }, }; var x = Expression.Parameter("x"); var f1 = Expression.Invoke( Expression.Parameter("rx://operators/map"), Expression.Invoke( Expression.Parameter("rx://operators/filter"), Expression.Parameter("my://xs"), Expression.Lambda<(number) => boolean>( Expression.Equal( Expression.Modulo( x, Expression.Constant(2) ), Expression.Constant(0) ), x ) ), Expression.Lambda<(number) => boolean>( Expression.Multiply( x, x ), x ) ); var f2 = Expression.Invoke( Expression.Parameter("rx://operators/map"), Expression.Parameter("my://ss"), Expression.Lambda<(string) => string>( Expression.Call( x, "substring", Expression.Constant(1) ), x ) ); var binder = new Binder(resources); var b1 = Expression.Lambda<() => number[]>(binder.Visit(f1)); var c1 = b1.Compile(); var r1 = c1(); alert(r1.join(", ")); var b2 = Expression.Lambda<() => string[]>(binder.Visit(f2)); var c2 = b2.Compile(); var r2 = c2(); alert(r2.join(", ")); */ //# sourceMappingURL=app.js.mapRxJS-4.1.0/src/core/expressions/app.js.map000066400000000000000000000021721266736161100203500ustar00rootroot00000000000000{"version":3,"file":"app.js","sourceRoot":"","sources":["app.ts"],"names":["Tests","Tests.constructor","Tests.start"],"mappings":"AAAA,oCAAoC;AAEpC,IAAM,KAAK;IAGPA,SAHEA,KAAKA,CAGKA,OAAoBA;QAC5BC,IAAIA,CAACA,OAAOA,GAAGA,OAAOA,CAACA;IAC3BA,CAACA;IAEDD,qBAAKA,GAALA;QACIE,IAAIA,CAACA,GAAGA,UAAUA,CAACA,GAAGA,CAACA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,EAAEA,UAAUA,CAACA,QAAQA,CAACA,CAACA,CAACA,CAACA,CAACA;QACvEA,IAAIA,CAACA,GAAGA,UAAUA,CAACA,MAAMA,CAAeA,CAACA,CAACA,CAACA;QAC3CA,IAAIA,CAACA,GAAGA,CAACA,CAACA,iBAAiBA,EAAEA,CAACA;QAC9BA,IAAIA,CAACA,GAAGA,CAACA,CAACA,OAAOA,EAAEA,CAACA;QACpBA,IAAIA,CAACA,GAAGA,CAACA,CAACA,QAAQA,EAAEA,CAACA;QACrBA,IAAIA,CAACA,GAAGA,CAACA,EAAEA,CAACA;QACZA,IAAIA,CAACA,OAAOA,CAACA,SAASA,GAAGA,OAAOA,GAAGA,CAACA,GAAGA,WAAWA,GAAGA,CAACA,GAAGA,WAAWA,GAAGA,IAAIA,CAACA,SAASA,CAACA,CAACA,CAACA,GAAGA,MAAMA,GAAGA,CAACA,CAACA;IAC1GA,CAACA;IACLF,YAACA;AAADA,CAACA,AAhBD,IAgBC;AAED,MAAM,CAAC,MAAM,GAAG;IACZ,IAAI,EAAE,GAAG,QAAQ,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAC5C,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6DE"}RxJS-4.1.0/src/core/expressions/app.ts000066400000000000000000000041031266736161100176020ustar00rootroot00000000000000/// class Tests { element: HTMLElement; constructor(element: HTMLElement) { this.element = element; } start() { var e = Expression.add(Expression.constant(1), Expression.constant(2)); var l = Expression.lambda<() => number>(e); var c = l.compileToFunction(); var f = l.compile(); var b = l.toBonsai(); var x = f(); this.element.innerHTML = "Eval(" + l + ") = Eval(" + c + ") = Eval(" + JSON.stringify(b) + ") = " + x; } } window.onload = () => { var el = document.getElementById('content'); var tests = new Tests(el); tests.start(); }; /* var resources = { "my://xs": [1, 2, 3, 4, 5], "my://ss": ["bar", "foo", "qux"], "rx://operators/filter": function (xs: any[], f: (any) => boolean) { return xs.filter(f); }, "rx://operators/map": function (xs: any[], f: (any) => any) { return xs.map(f); }, }; var x = Expression.Parameter("x"); var f1 = Expression.Invoke( Expression.Parameter("rx://operators/map"), Expression.Invoke( Expression.Parameter("rx://operators/filter"), Expression.Parameter("my://xs"), Expression.Lambda<(number) => boolean>( Expression.Equal( Expression.Modulo( x, Expression.Constant(2) ), Expression.Constant(0) ), x ) ), Expression.Lambda<(number) => boolean>( Expression.Multiply( x, x ), x ) ); var f2 = Expression.Invoke( Expression.Parameter("rx://operators/map"), Expression.Parameter("my://ss"), Expression.Lambda<(string) => string>( Expression.Call( x, "substring", Expression.Constant(1) ), x ) ); var binder = new Binder(resources); var b1 = Expression.Lambda<() => number[]>(binder.Visit(f1)); var c1 = b1.Compile(); var r1 = c1(); alert(r1.join(", ")); var b2 = Expression.Lambda<() => string[]>(binder.Visit(f2)); var c2 = b2.Compile(); var r2 = c2(); alert(r2.join(", ")); */RxJS-4.1.0/src/core/expressions/compiler.js000066400000000000000000001142061266736161100206300ustar00rootroot00000000000000var __extends = this.__extends || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } __.prototype = b.prototype; d.prototype = new __(); }; var Expression = (function () { function Expression(nodeType) { this.nodeType = nodeType; } Expression.prototype.accept = function (visitor) { throw new Error("not implemented"); }; Expression.prototype.acceptGeneric = function (visitor) { throw new Error("not implemented"); }; Expression.prototype.toString = function () { return new PrintVisitor().visit(this); }; Expression.prototype.toBonsai = function () { return new BonsaiVisitor().visit(this); }; Expression.constant = function (value) { return new ConstantExpression(value); }; Expression.parameter = function (name) { return new ParameterExpression(name); }; Expression.condition = function (test, ifTrue, ifFalse) { return new ConditionalExpression(test, ifTrue, ifFalse); }; Expression.add = function (left, right) { return new BinaryExpression(3 /* Add */, left, right); }; Expression.subtract = function (left, right) { return new BinaryExpression(4 /* Subtract */, left, right); }; Expression.multiply = function (left, right) { return new BinaryExpression(5 /* Multiply */, left, right); }; Expression.divide = function (left, right) { return new BinaryExpression(6 /* Divide */, left, right); }; Expression.modulo = function (left, right) { return new BinaryExpression(7 /* Modulo */, left, right); }; Expression.and = function (left, right) { return new BinaryExpression(8 /* And */, left, right); }; Expression.andAlso = function (left, right) { return new BinaryExpression(10 /* AndAlso */, left, right); }; Expression.or = function (left, right) { return new BinaryExpression(9 /* Or */, left, right); }; Expression.orElse = function (left, right) { return new BinaryExpression(11 /* OrElse */, left, right); }; Expression.exclusiveOr = function (left, right) { return new BinaryExpression(12 /* ExclusiveOr */, left, right); }; Expression.equal = function (left, right) { return new BinaryExpression(13 /* Equal */, left, right); }; Expression.notEqual = function (left, right) { return new BinaryExpression(14 /* NotEqual */, left, right); }; Expression.lessThan = function (left, right) { return new BinaryExpression(15 /* LessThan */, left, right); }; Expression.lessThanOrEqual = function (left, right) { return new BinaryExpression(16 /* LessThanOrEqual */, left, right); }; Expression.greaterThan = function (left, right) { return new BinaryExpression(17 /* GreaterThan */, left, right); }; Expression.greaterThanOrEqual = function (left, right) { return new BinaryExpression(18 /* GreaterThanOrEqual */, left, right); }; Expression.leftShift = function (left, right) { return new BinaryExpression(19 /* LeftShift */, left, right); }; Expression.rightShift = function (left, right) { return new BinaryExpression(20 /* RightShift */, left, right); }; Expression.not = function (operand) { return new UnaryExpression(22 /* Not */, operand); }; Expression.unaryPlus = function (operand) { return new UnaryExpression(24 /* UnaryPlus */, operand); }; Expression.negate = function (operand) { return new UnaryExpression(23 /* Negate */, operand); }; Expression.onesComplement = function (operand) { return new UnaryExpression(25 /* OnesComplement */, operand); }; Expression.lambda = function (body) { var parameters = []; for (var _i = 1; _i < arguments.length; _i++) { parameters[_i - 1] = arguments[_i]; } return new LambdaExpression(body, parameters); }; Expression.invoke = function (expression) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return new InvocationExpression(expression, args); }; Expression.new = function (typeName) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return new NewExpression(typeName, args); }; Expression.functionCall = function (obj, methodName) { var args = []; for (var _i = 2; _i < arguments.length; _i++) { args[_i - 2] = arguments[_i]; } return new FunctionCallExpression(obj, methodName, args); }; Expression.member = function (obj, memberName) { return new MemberExpression(obj, memberName); }; Expression.index = function (obj) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } return new IndexExpression(obj, args); }; return Expression; })(); var ExpressionVisitorGeneric = (function () { function ExpressionVisitorGeneric() { } ExpressionVisitorGeneric.prototype.visit = function (node) { if (node === null) { return null; } return node.acceptGeneric(this); }; ExpressionVisitorGeneric.prototype.visitConstant = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitParameter = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitBinary = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitUnary = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitConditional = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitLambda = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitInvoke = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitCall = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitNew = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitMember = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitIndex = function (node) { throw new Error("not implemented"); }; ExpressionVisitorGeneric.prototype.visitMany = function (nodes) { var res = new Array(nodes.length); for (var i = 0; i < nodes.length; i++) { var oldNode = nodes[i]; var newNode = this.visit(oldNode); res[i] = newNode; } return res; }; return ExpressionVisitorGeneric; })(); var ExpressionVisitor = (function () { function ExpressionVisitor() { } ExpressionVisitor.prototype.visit = function (node) { if (node === null) { return null; } return node.accept(this); }; ExpressionVisitor.prototype.visitConstant = function (node) { return node; }; ExpressionVisitor.prototype.visitParameter = function (node) { return node; }; ExpressionVisitor.prototype.visitBinary = function (node) { return node.update(this.visit(node.left), this.visit(node.right)); }; ExpressionVisitor.prototype.visitUnary = function (node) { return node.update(this.visit(node.operand)); }; ExpressionVisitor.prototype.visitConditional = function (node) { return node.update(this.visit(node.test), this.visit(node.ifTrue), this.visit(node.ifFalse)); }; ExpressionVisitor.prototype.visitLambda = function (node) { return node.update(this.visit(node.body), this.visitMany(node.parameters)); }; ExpressionVisitor.prototype.visitInvoke = function (node) { return node.update(this.visit(node.expression), this.visitMany(node.args)); }; ExpressionVisitor.prototype.visitCall = function (node) { return node.update(this.visit(node.obj), this.visitMany(node.args)); }; ExpressionVisitor.prototype.visitNew = function (node) { return node.update(this.visitMany(node.args)); }; ExpressionVisitor.prototype.visitMember = function (node) { return node.update(this.visit(node.obj)); }; ExpressionVisitor.prototype.visitIndex = function (node) { return node.update(this.visit(node.obj), this.visitMany(node.args)); }; ExpressionVisitor.prototype.visitMany = function (nodes) { var res = new Array(nodes.length); for (var i = 0; i < nodes.length; i++) { var oldNode = nodes[i]; var newNode = this.visit(oldNode); res[i] = newNode; } return res; }; return ExpressionVisitor; })(); var ConstantExpression = (function (_super) { __extends(ConstantExpression, _super); function ConstantExpression(value) { _super.call(this, 0 /* Constant */); this._value = value; } Object.defineProperty(ConstantExpression.prototype, "value", { get: function () { return this._value; }, enumerable: true, configurable: true }); ConstantExpression.prototype.accept = function (visitor) { return visitor.visitConstant(this); }; ConstantExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitConstant(this); }; return ConstantExpression; })(Expression); var ParameterExpression = (function (_super) { __extends(ParameterExpression, _super); function ParameterExpression(name) { _super.call(this, 1 /* Parameter */); this._name = name; } Object.defineProperty(ParameterExpression.prototype, "name", { get: function () { return this._name; }, enumerable: true, configurable: true }); ParameterExpression.prototype.accept = function (visitor) { return visitor.visitParameter(this); }; ParameterExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitParameter(this); }; return ParameterExpression; })(Expression); var UnaryExpression = (function (_super) { __extends(UnaryExpression, _super); function UnaryExpression(nodeType, operand) { _super.call(this, nodeType); this._operand = operand; } Object.defineProperty(UnaryExpression.prototype, "operand", { get: function () { return this._operand; }, enumerable: true, configurable: true }); UnaryExpression.prototype.accept = function (visitor) { return visitor.visitUnary(this); }; UnaryExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitUnary(this); }; UnaryExpression.prototype.update = function (operand) { if (operand !== this._operand) { return new UnaryExpression(this.nodeType, operand); } return this; }; return UnaryExpression; })(Expression); var BinaryExpression = (function (_super) { __extends(BinaryExpression, _super); function BinaryExpression(nodeType, left, right) { _super.call(this, nodeType); this._left = left; this._right = right; } Object.defineProperty(BinaryExpression.prototype, "left", { get: function () { return this._left; }, enumerable: true, configurable: true }); Object.defineProperty(BinaryExpression.prototype, "right", { get: function () { return this._right; }, enumerable: true, configurable: true }); BinaryExpression.prototype.accept = function (visitor) { return visitor.visitBinary(this); }; BinaryExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitBinary(this); }; BinaryExpression.prototype.update = function (left, right) { if (left !== this._left || right !== this._right) { return new BinaryExpression(this.nodeType, left, right); } return this; }; return BinaryExpression; })(Expression); var ConditionalExpression = (function (_super) { __extends(ConditionalExpression, _super); function ConditionalExpression(test, ifTrue, ifFalse) { _super.call(this, 26 /* Condition */); this._test = test; this._ifTrue = ifTrue; this._ifFalse = ifFalse; } Object.defineProperty(ConditionalExpression.prototype, "test", { get: function () { return this._test; }, enumerable: true, configurable: true }); Object.defineProperty(ConditionalExpression.prototype, "ifTrue", { get: function () { return this._ifTrue; }, enumerable: true, configurable: true }); Object.defineProperty(ConditionalExpression.prototype, "ifFalse", { get: function () { return this._ifTrue; }, enumerable: true, configurable: true }); ConditionalExpression.prototype.accept = function (visitor) { return visitor.visitConditional(this); }; ConditionalExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitConditional(this); }; ConditionalExpression.prototype.update = function (test, ifTrue, ifFalse) { if (test !== this._test || ifTrue !== this._ifTrue || ifFalse !== this._ifFalse) { return new ConditionalExpression(test, ifTrue, ifFalse); } return this; }; return ConditionalExpression; })(Expression); var LambdaExpression = (function (_super) { __extends(LambdaExpression, _super); function LambdaExpression(body, parameters) { _super.call(this, 2 /* Lambda */); this._body = body; this._parameters = parameters; } Object.defineProperty(LambdaExpression.prototype, "body", { get: function () { return this._body; }, enumerable: true, configurable: true }); Object.defineProperty(LambdaExpression.prototype, "parameters", { get: function () { return this._parameters; }, enumerable: true, configurable: true }); LambdaExpression.prototype.accept = function (visitor) { return visitor.visitLambda(this); }; LambdaExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitLambda(this); }; LambdaExpression.prototype.update = function (body, parameters) { if (body !== this._body || parameters !== this._parameters) { return new LambdaExpression(body, parameters); } return this; }; LambdaExpression.prototype.compileToFunction = function (debug) { var comp = new LambdaCompiler(); comp.visit(this); var code = comp.code; code = code.replace(/\"/g, "\\\""); // TODO: more escape sequences code = "new Function(\"return " + code + ";\")"; code = code.replace(/\r?\n|\r/g, ""); if (debug) { alert(code); } return code; }; LambdaExpression.prototype.compile = function (debug) { var code = this.compileToFunction(debug); return eval(code)(); }; return LambdaExpression; })(Expression); var InvocationExpression = (function (_super) { __extends(InvocationExpression, _super); function InvocationExpression(expression, args) { _super.call(this, 21 /* Invoke */); this._expression = expression; this._args = args; } Object.defineProperty(InvocationExpression.prototype, "expression", { get: function () { return this._expression; }, enumerable: true, configurable: true }); Object.defineProperty(InvocationExpression.prototype, "args", { get: function () { return this._args; }, enumerable: true, configurable: true }); InvocationExpression.prototype.accept = function (visitor) { return visitor.visitInvoke(this); }; InvocationExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitInvoke(this); }; InvocationExpression.prototype.update = function (expression, args) { if (expression !== this._expression || args !== this._args) { return new InvocationExpression(expression, args); } return this; }; return InvocationExpression; })(Expression); var FunctionCallExpression = (function (_super) { __extends(FunctionCallExpression, _super); function FunctionCallExpression(expression, methodName, args) { _super.call(this, 28 /* Call */); this._expression = expression; this._method = methodName; this._args = args; } Object.defineProperty(FunctionCallExpression.prototype, "obj", { get: function () { return this._expression; }, enumerable: true, configurable: true }); Object.defineProperty(FunctionCallExpression.prototype, "method", { get: function () { return this._method; }, enumerable: true, configurable: true }); Object.defineProperty(FunctionCallExpression.prototype, "args", { get: function () { return this._args; }, enumerable: true, configurable: true }); FunctionCallExpression.prototype.accept = function (visitor) { return visitor.visitCall(this); }; FunctionCallExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitCall(this); }; FunctionCallExpression.prototype.update = function (expression, args) { if (expression !== this._expression || args !== this._args) { return new FunctionCallExpression(expression, this._method, args); } return this; }; return FunctionCallExpression; })(Expression); var IndexExpression = (function (_super) { __extends(IndexExpression, _super); function IndexExpression(expression, args) { _super.call(this, 30 /* Index */); this._expression = expression; this._args = args; } Object.defineProperty(IndexExpression.prototype, "obj", { get: function () { return this._expression; }, enumerable: true, configurable: true }); Object.defineProperty(IndexExpression.prototype, "args", { get: function () { return this._args; }, enumerable: true, configurable: true }); IndexExpression.prototype.accept = function (visitor) { return visitor.visitIndex(this); }; IndexExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitIndex(this); }; IndexExpression.prototype.update = function (expression, args) { if (expression !== this._expression || args !== this._args) { return new IndexExpression(expression, args); } return this; }; return IndexExpression; })(Expression); var NewExpression = (function (_super) { __extends(NewExpression, _super); function NewExpression(typeName, args) { _super.call(this, 27 /* New */); this._type = typeName; this._args = args; } Object.defineProperty(NewExpression.prototype, "type", { get: function () { return this._type; }, enumerable: true, configurable: true }); Object.defineProperty(NewExpression.prototype, "args", { get: function () { return this._args; }, enumerable: true, configurable: true }); NewExpression.prototype.accept = function (visitor) { return visitor.visitNew(this); }; NewExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitNew(this); }; NewExpression.prototype.update = function (args) { if (args !== this._args) { return new NewExpression(this._type, args); } return this; }; return NewExpression; })(Expression); var MemberExpression = (function (_super) { __extends(MemberExpression, _super); function MemberExpression(obj, memberName) { _super.call(this, 29 /* Member */); this._obj = obj; this._member = memberName; } Object.defineProperty(MemberExpression.prototype, "obj", { get: function () { return this._obj; }, enumerable: true, configurable: true }); Object.defineProperty(MemberExpression.prototype, "member", { get: function () { return this._member; }, enumerable: true, configurable: true }); MemberExpression.prototype.accept = function (visitor) { return visitor.visitMember(this); }; MemberExpression.prototype.acceptGeneric = function (visitor) { return visitor.visitMember(this); }; MemberExpression.prototype.update = function (obj) { if (obj !== this._obj) { return new MemberExpression(obj, this._member); } return this; }; return MemberExpression; })(Expression); var LambdaCompiler = (function (_super) { __extends(LambdaCompiler, _super); function LambdaCompiler() { _super.call(this); this._stack = new Array(); } Object.defineProperty(LambdaCompiler.prototype, "code", { get: function () { if (this._stack.length != 1) throw new Error("invalid code generation"); return this._stack[0]; }, enumerable: true, configurable: true }); LambdaCompiler.prototype.visitConstant = function (node) { var value = ""; if (typeof node.value == "string") { value = "\"" + node.value + "\""; // TODO: escape characters } else if (node.value instanceof Array) { value = JSON.stringify(node.value); } else if (node.value === undefined) { value = "undefined"; } else { value = node.value.toString(); // TODO } this._stack.push(value); return node; }; LambdaCompiler.prototype.visitUnary = function (node) { this.visit(node.operand); var o = this._stack.pop(); var i = ""; switch (node.nodeType) { case 23 /* Negate */: i = "-"; break; case 24 /* UnaryPlus */: i = "+"; break; case 22 /* Not */: i = "!"; break; case 25 /* OnesComplement */: i = "~"; break; } var res = "(" + i + "" + o + ")"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitBinary = function (node) { this.visit(node.left); this.visit(node.right); var r = this._stack.pop(); var l = this._stack.pop(); var i = ""; switch (node.nodeType) { case 3 /* Add */: i = "+"; break; case 4 /* Subtract */: i = "-"; break; case 5 /* Multiply */: i = "*"; break; case 6 /* Divide */: i = "/"; break; case 7 /* Modulo */: i = "%"; break; case 8 /* And */: i = "&"; break; case 9 /* Or */: i = "|"; break; case 10 /* AndAlso */: i = "&&"; break; case 11 /* OrElse */: i = "||"; break; case 12 /* ExclusiveOr */: i = "^"; break; case 13 /* Equal */: i = "==="; break; case 14 /* NotEqual */: i = "!=="; break; case 15 /* LessThan */: i = "<"; break; case 16 /* LessThanOrEqual */: i = "<="; break; case 17 /* GreaterThan */: i = ">"; break; case 18 /* GreaterThanOrEqual */: i = ">="; break; case 19 /* LeftShift */: i = "<<"; break; case 20 /* RightShift */: i = ">>"; break; } var res = "(" + l + " " + i + " " + r + ")"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitConditional = function (node) { this.visit(node.test); this.visit(node.ifTrue); this.visit(node.ifFalse); var f = this._stack.pop(); var t = this._stack.pop(); var c = this._stack.pop(); var res = "(" + c + " ? " + t + " : " + f + ")"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitParameter = function (node) { this._stack.push(node.name); return node; }; LambdaCompiler.prototype.visitLambda = function (node) { this.visitMany(node.parameters); this.visit(node.body); var body = this._stack.pop(); var n = node.parameters.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var allArgs = args.join(", "); var res = "function(" + allArgs + ") { return " + body + "; }"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitInvoke = function (node) { this.visit(node.expression); this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); var func = this._stack.pop(); var res = func + "(" + argList + ")"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitCall = function (node) { var res = ""; if (node.obj !== null) { this.visit(node.obj); res = this._stack.pop() + "."; } this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); res += node.method + "(" + argList + ")"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitNew = function (node) { this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); var res = "new " + node.type + "(" + argList + ")"; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitMember = function (node) { var res = ""; if (node.obj !== null) { this.visit(node.obj); res = this._stack.pop() + "."; } res += node.member; this._stack.push(res); return node; }; LambdaCompiler.prototype.visitIndex = function (node) { this.visit(node.obj); var res = this._stack.pop(); this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); res += "[" + argList + "]"; this._stack.push(res); return node; }; return LambdaCompiler; })(ExpressionVisitor); var FreeVariableScanner = (function (_super) { __extends(FreeVariableScanner, _super); function FreeVariableScanner() { _super.call(this); this._stack = new Array(); this._result = new Array(); } Object.defineProperty(FreeVariableScanner.prototype, "result", { get: function () { return this._result; }, enumerable: true, configurable: true }); FreeVariableScanner.prototype.visitParameter = function (node) { var found = false; for (var i = this._stack.length - 1; i >= 0; i--) { if (this._stack[i].indexOf(node) >= 0) { found = true; break; } } if (!found) { this._result.push(node); } return node; }; FreeVariableScanner.prototype.visitLambda = function (node) { this._stack.push(node.parameters); this.visit(node.body); this._stack.pop(); return node; }; return FreeVariableScanner; })(ExpressionVisitor); var ExpressionType; (function (ExpressionType) { ExpressionType[ExpressionType["Constant"] = 0] = "Constant"; ExpressionType[ExpressionType["Parameter"] = 1] = "Parameter"; ExpressionType[ExpressionType["Lambda"] = 2] = "Lambda"; ExpressionType[ExpressionType["Add"] = 3] = "Add"; ExpressionType[ExpressionType["Subtract"] = 4] = "Subtract"; ExpressionType[ExpressionType["Multiply"] = 5] = "Multiply"; ExpressionType[ExpressionType["Divide"] = 6] = "Divide"; ExpressionType[ExpressionType["Modulo"] = 7] = "Modulo"; ExpressionType[ExpressionType["And"] = 8] = "And"; ExpressionType[ExpressionType["Or"] = 9] = "Or"; ExpressionType[ExpressionType["AndAlso"] = 10] = "AndAlso"; ExpressionType[ExpressionType["OrElse"] = 11] = "OrElse"; ExpressionType[ExpressionType["ExclusiveOr"] = 12] = "ExclusiveOr"; ExpressionType[ExpressionType["Equal"] = 13] = "Equal"; ExpressionType[ExpressionType["NotEqual"] = 14] = "NotEqual"; ExpressionType[ExpressionType["LessThan"] = 15] = "LessThan"; ExpressionType[ExpressionType["LessThanOrEqual"] = 16] = "LessThanOrEqual"; ExpressionType[ExpressionType["GreaterThan"] = 17] = "GreaterThan"; ExpressionType[ExpressionType["GreaterThanOrEqual"] = 18] = "GreaterThanOrEqual"; ExpressionType[ExpressionType["LeftShift"] = 19] = "LeftShift"; ExpressionType[ExpressionType["RightShift"] = 20] = "RightShift"; ExpressionType[ExpressionType["Invoke"] = 21] = "Invoke"; ExpressionType[ExpressionType["Not"] = 22] = "Not"; ExpressionType[ExpressionType["Negate"] = 23] = "Negate"; ExpressionType[ExpressionType["UnaryPlus"] = 24] = "UnaryPlus"; ExpressionType[ExpressionType["OnesComplement"] = 25] = "OnesComplement"; ExpressionType[ExpressionType["Condition"] = 26] = "Condition"; ExpressionType[ExpressionType["New"] = 27] = "New"; ExpressionType[ExpressionType["Call"] = 28] = "Call"; ExpressionType[ExpressionType["Member"] = 29] = "Member"; ExpressionType[ExpressionType["Index"] = 30] = "Index"; })(ExpressionType || (ExpressionType = {})); var Binder = (function (_super) { __extends(Binder, _super); function Binder(resources) { _super.call(this); this._stack = new Array(); this._resources = resources; } Binder.prototype.visitParameter = function (node) { var found = false; for (var i = this._stack.length - 1; i >= 0; i--) { if (this._stack[i].indexOf(node) >= 0) { found = true; break; } } if (!found) { return Expression.constant(this._resources[node.name]); } return node; }; Binder.prototype.visitLambda = function (node) { this._stack.push(node.parameters); this.visit(node.body); this._stack.pop(); return node; }; return Binder; })(ExpressionVisitor); var PrintVisitor = (function (_super) { __extends(PrintVisitor, _super); function PrintVisitor() { _super.apply(this, arguments); } PrintVisitor.prototype.visitConstant = function (node) { return "Constant(" + node.value + ")"; }; PrintVisitor.prototype.visitParameter = function (node) { return "Parameter(" + node.name + ")"; }; PrintVisitor.prototype.visitBinary = function (node) { return ExpressionType[node.nodeType] + "(" + this.visit(node.left) + ", " + this.visit(node.right) + ")"; }; PrintVisitor.prototype.visitUnary = function (node) { return ExpressionType[node.nodeType] + "(" + this.visit(node.operand) + ")"; }; PrintVisitor.prototype.visitConditional = function (node) { return "Conditional(" + this.visit(node.test) + ", " + this.visit(node.ifTrue) + ", " + this.visit(node.ifFalse) + ")"; }; PrintVisitor.prototype.visitLambda = function (node) { var body = this.visit(node.body); var children = this.visitMany(node.parameters); children.unshift(body); return "Lambda(" + children.join(", ") + ")"; }; PrintVisitor.prototype.visitInvoke = function (node) { var expression = this.visit(node.expression); var children = this.visitMany(node.args); children.unshift(expression); return "Invoke(" + children.join(", ") + ")"; }; PrintVisitor.prototype.visitCall = function (node) { var children = this.visitMany(node.args); if (node.obj != null) { children.unshift(this.visit(node.obj)); } children.unshift(node.method); return "Call(" + children.join(", ") + ")"; }; PrintVisitor.prototype.visitNew = function (node) { var children = this.visitMany(node.args); children.unshift(node.type); return "New(" + children.join(", ") + ")"; }; PrintVisitor.prototype.visitMember = function (node) { var children = []; if (node.obj != null) { children.unshift(this.visit(node.obj)); } children.unshift(node.member); return "Member(" + children.join(", ") + ")"; }; PrintVisitor.prototype.visitIndex = function (node) { var children = this.visitMany(node.args); if (node.obj != null) { children.unshift(this.visit(node.obj)); } return "Index(" + children.join(", ") + ")"; }; return PrintVisitor; })(ExpressionVisitorGeneric); var BonsaiVisitor = (function (_super) { __extends(BonsaiVisitor, _super); function BonsaiVisitor() { _super.apply(this, arguments); } BonsaiVisitor.prototype.visitConstant = function (node) { return [":", node.value]; }; BonsaiVisitor.prototype.visitParameter = function (node) { return ["$", node.name]; }; BonsaiVisitor.prototype.visitBinary = function (node) { var i = ""; switch (node.nodeType) { case 3 /* Add */: i = "+"; break; case 4 /* Subtract */: i = "-"; break; case 5 /* Multiply */: i = "*"; break; case 6 /* Divide */: i = "/"; break; case 7 /* Modulo */: i = "%"; break; case 8 /* And */: i = "&"; break; case 9 /* Or */: i = "|"; break; case 10 /* AndAlso */: i = "&&"; break; case 11 /* OrElse */: i = "||"; break; case 12 /* ExclusiveOr */: i = "^"; break; case 13 /* Equal */: i = "==="; break; case 14 /* NotEqual */: i = "!=="; break; case 15 /* LessThan */: i = "<"; break; case 16 /* LessThanOrEqual */: i = "<="; break; case 17 /* GreaterThan */: i = ">"; break; case 18 /* GreaterThanOrEqual */: i = ">="; break; case 19 /* LeftShift */: i = "<<"; break; case 20 /* RightShift */: i = ">>"; break; } return [i, this.visit(node.left), this.visit(node.right)]; }; BonsaiVisitor.prototype.visitUnary = function (node) { var i = ""; switch (node.nodeType) { case 23 /* Negate */: i = "-"; break; case 24 /* UnaryPlus */: i = "+"; break; case 22 /* Not */: i = "!"; break; case 25 /* OnesComplement */: i = "~"; break; } return [i, this.visit(node.operand)]; }; BonsaiVisitor.prototype.visitConditional = function (node) { return ["?:", this.visit(node.test), this.visit(node.ifTrue), this.visit(node.ifFalse)]; }; BonsaiVisitor.prototype.visitLambda = function (node) { return ["=>", this.visit(node.body), this.visitMany(node.parameters)]; }; BonsaiVisitor.prototype.visitInvoke = function (node) { var expression = this.visit(node.expression); var args = this.visitMany(node.args); return ["()", expression, args]; }; BonsaiVisitor.prototype.visitCall = function (node) { var args = []; if (node.obj != null) { args.unshift(this.visit(node.obj)); } args.unshift(this.visitMany(node.args)); return [".()", node.method, args]; }; BonsaiVisitor.prototype.visitNew = function (node) { var args = this.visitMany(node.args); return ["new", args]; }; BonsaiVisitor.prototype.visitMember = function (node) { var res = [".", node.member]; if (node.obj != null) { res.unshift(this.visit(node.obj)); } return res; }; BonsaiVisitor.prototype.visitIndex = function (node) { throw new Error("not implemented"); }; return BonsaiVisitor; })(ExpressionVisitorGeneric); //# sourceMappingURL=compiler.js.mapRxJS-4.1.0/src/core/expressions/compiler.js.map000066400000000000000000001270701266736161100214070ustar00rootroot00000000000000{"version":3,"file":"compiler.js","sourceRoot":"","sources":["compiler.ts"],"names":["Expression","Expression.constructor","Expression.accept","Expression.acceptGeneric","Expression.toString","Expression.toBonsai","Expression.constant","Expression.parameter","Expression.condition","Expression.add","Expression.subtract","Expression.multiply","Expression.divide","Expression.modulo","Expression.and","Expression.andAlso","Expression.or","Expression.orElse","Expression.exclusiveOr","Expression.equal","Expression.notEqual","Expression.lessThan","Expression.lessThanOrEqual","Expression.greaterThan","Expression.greaterThanOrEqual","Expression.leftShift","Expression.rightShift","Expression.not","Expression.unaryPlus","Expression.negate","Expression.onesComplement","Expression.lambda","Expression.invoke","Expression.new","Expression.functionCall","Expression.member","Expression.index","ExpressionVisitorGeneric","ExpressionVisitorGeneric.constructor","ExpressionVisitorGeneric.visit","ExpressionVisitorGeneric.visitConstant","ExpressionVisitorGeneric.visitParameter","ExpressionVisitorGeneric.visitBinary","ExpressionVisitorGeneric.visitUnary","ExpressionVisitorGeneric.visitConditional","ExpressionVisitorGeneric.visitLambda","ExpressionVisitorGeneric.visitInvoke","ExpressionVisitorGeneric.visitCall","ExpressionVisitorGeneric.visitNew","ExpressionVisitorGeneric.visitMember","ExpressionVisitorGeneric.visitIndex","ExpressionVisitorGeneric.visitMany","ExpressionVisitor","ExpressionVisitor.constructor","ExpressionVisitor.visit","ExpressionVisitor.visitConstant","ExpressionVisitor.visitParameter","ExpressionVisitor.visitBinary","ExpressionVisitor.visitUnary","ExpressionVisitor.visitConditional","ExpressionVisitor.visitLambda","ExpressionVisitor.visitInvoke","ExpressionVisitor.visitCall","ExpressionVisitor.visitNew","ExpressionVisitor.visitMember","ExpressionVisitor.visitIndex","ExpressionVisitor.visitMany","ConstantExpression","ConstantExpression.constructor","ConstantExpression.value","ConstantExpression.accept","ConstantExpression.acceptGeneric","ParameterExpression","ParameterExpression.constructor","ParameterExpression.name","ParameterExpression.accept","ParameterExpression.acceptGeneric","UnaryExpression","UnaryExpression.constructor","UnaryExpression.operand","UnaryExpression.accept","UnaryExpression.acceptGeneric","UnaryExpression.update","BinaryExpression","BinaryExpression.constructor","BinaryExpression.left","BinaryExpression.right","BinaryExpression.accept","BinaryExpression.acceptGeneric","BinaryExpression.update","ConditionalExpression","ConditionalExpression.constructor","ConditionalExpression.test","ConditionalExpression.ifTrue","ConditionalExpression.ifFalse","ConditionalExpression.accept","ConditionalExpression.acceptGeneric","ConditionalExpression.update","LambdaExpression","LambdaExpression.constructor","LambdaExpression.body","LambdaExpression.parameters","LambdaExpression.accept","LambdaExpression.acceptGeneric","LambdaExpression.update","LambdaExpression.compileToFunction","LambdaExpression.compile","InvocationExpression","InvocationExpression.constructor","InvocationExpression.expression","InvocationExpression.args","InvocationExpression.accept","InvocationExpression.acceptGeneric","InvocationExpression.update","FunctionCallExpression","FunctionCallExpression.constructor","FunctionCallExpression.obj","FunctionCallExpression.method","FunctionCallExpression.args","FunctionCallExpression.accept","FunctionCallExpression.acceptGeneric","FunctionCallExpression.update","IndexExpression","IndexExpression.constructor","IndexExpression.obj","IndexExpression.args","IndexExpression.accept","IndexExpression.acceptGeneric","IndexExpression.update","NewExpression","NewExpression.constructor","NewExpression.type","NewExpression.args","NewExpression.accept","NewExpression.acceptGeneric","NewExpression.update","MemberExpression","MemberExpression.constructor","MemberExpression.obj","MemberExpression.member","MemberExpression.accept","MemberExpression.acceptGeneric","MemberExpression.update","LambdaCompiler","LambdaCompiler.constructor","LambdaCompiler.code","LambdaCompiler.visitConstant","LambdaCompiler.visitUnary","LambdaCompiler.visitBinary","LambdaCompiler.visitConditional","LambdaCompiler.visitParameter","LambdaCompiler.visitLambda","LambdaCompiler.visitInvoke","LambdaCompiler.visitCall","LambdaCompiler.visitNew","LambdaCompiler.visitMember","LambdaCompiler.visitIndex","FreeVariableScanner","FreeVariableScanner.constructor","FreeVariableScanner.result","FreeVariableScanner.visitParameter","FreeVariableScanner.visitLambda","ExpressionType","Binder","Binder.constructor","Binder.visitParameter","Binder.visitLambda","PrintVisitor","PrintVisitor.constructor","PrintVisitor.visitConstant","PrintVisitor.visitParameter","PrintVisitor.visitBinary","PrintVisitor.visitUnary","PrintVisitor.visitConditional","PrintVisitor.visitLambda","PrintVisitor.visitInvoke","PrintVisitor.visitCall","PrintVisitor.visitNew","PrintVisitor.visitMember","PrintVisitor.visitIndex","BonsaiVisitor","BonsaiVisitor.constructor","BonsaiVisitor.visitConstant","BonsaiVisitor.visitParameter","BonsaiVisitor.visitBinary","BonsaiVisitor.visitUnary","BonsaiVisitor.visitConditional","BonsaiVisitor.visitLambda","BonsaiVisitor.visitInvoke","BonsaiVisitor.visitCall","BonsaiVisitor.visitNew","BonsaiVisitor.visitMember","BonsaiVisitor.visitIndex"],"mappings":";;;;;;AAAA,IAAM,UAAU;IAGZA,SAHEA,UAAUA,CAGAA,QAAwBA;QAChCC,IAAIA,CAACA,QAAQA,GAAGA,QAAQA,CAACA;IAC7BA,CAACA;IAEDD,2BAAMA,GAANA,UAAOA,OAA0BA;QAC7BE,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IACvCA,CAACA;IAEDF,kCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDG,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IACvCA,CAACA;IAEDH,6BAAQA,GAARA;QACII,MAAMA,CAACA,IAAIA,YAAYA,EAAEA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA;IAC1CA,CAACA;IAEDJ,6BAAQA,GAARA;QACIK,MAAMA,CAACA,IAAIA,aAAaA,EAAEA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA;IAC3CA,CAACA;IAEML,mBAAQA,GAAfA,UAAgBA,KAAUA;QACtBM,MAAMA,CAACA,IAAIA,kBAAkBA,CAACA,KAAKA,CAACA,CAACA;IACzCA,CAACA;IAEMN,oBAASA,GAAhBA,UAAiBA,IAAYA;QACzBO,MAAMA,CAACA,IAAIA,mBAAmBA,CAACA,IAAIA,CAACA,CAACA;IACzCA,CAACA;IAEMP,oBAASA,GAAhBA,UAAiBA,IAAgBA,EAAEA,MAAkBA,EAAEA,OAAmBA;QACtEQ,MAAMA,CAACA,IAAIA,qBAAqBA,CAACA,IAAIA,EAAEA,MAAMA,EAAEA,OAAOA,CAACA,CAACA;IAC5DA,CAACA;IAEMR,cAAGA,GAAVA,UAAWA,IAAgBA,EAAEA,KAAiBA;QAC1CS,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,WAAkBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACjEA,CAACA;IAEMT,mBAAQA,GAAfA,UAAgBA,IAAgBA,EAAEA,KAAiBA;QAC/CU,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,gBAAuBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACtEA,CAACA;IAEMV,mBAAQA,GAAfA,UAAgBA,IAAgBA,EAAEA,KAAiBA;QAC/CW,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,gBAAuBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACtEA,CAACA;IAEMX,iBAAMA,GAAbA,UAAcA,IAAgBA,EAAEA,KAAiBA;QAC7CY,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,cAAqBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACpEA,CAACA;IAEMZ,iBAAMA,GAAbA,UAAcA,IAAgBA,EAAEA,KAAiBA;QAC7Ca,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,cAAqBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACpEA,CAACA;IAEMb,cAAGA,GAAVA,UAAWA,IAAgBA,EAAEA,KAAiBA;QAC1Cc,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,WAAkBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACjEA,CAACA;IAEMd,kBAAOA,GAAdA,UAAeA,IAAgBA,EAAEA,KAAiBA;QAC9Ce,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,gBAAsBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACrEA,CAACA;IAEMf,aAAEA,GAATA,UAAUA,IAAgBA,EAAEA,KAAiBA;QACzCgB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,UAAiBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IAChEA,CAACA;IAEMhB,iBAAMA,GAAbA,UAAcA,IAAgBA,EAAEA,KAAiBA;QAC7CiB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,eAAqBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACpEA,CAACA;IAEMjB,sBAAWA,GAAlBA,UAAmBA,IAAgBA,EAAEA,KAAiBA;QAClDkB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,oBAA0BA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACzEA,CAACA;IAEMlB,gBAAKA,GAAZA,UAAaA,IAAgBA,EAAEA,KAAiBA;QAC5CmB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,cAAoBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACnEA,CAACA;IAEMnB,mBAAQA,GAAfA,UAAgBA,IAAgBA,EAAEA,KAAiBA;QAC/CoB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,iBAAuBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACtEA,CAACA;IAEMpB,mBAAQA,GAAfA,UAAgBA,IAAgBA,EAAEA,KAAiBA;QAC/CqB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,iBAAuBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACtEA,CAACA;IAEMrB,0BAAeA,GAAtBA,UAAuBA,IAAgBA,EAAEA,KAAiBA;QACtDsB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,wBAA8BA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IAC7EA,CAACA;IAEMtB,sBAAWA,GAAlBA,UAAmBA,IAAgBA,EAAEA,KAAiBA;QAClDuB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,oBAA0BA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACzEA,CAACA;IAEMvB,6BAAkBA,GAAzBA,UAA0BA,IAAgBA,EAAEA,KAAiBA;QACzDwB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,2BAAiCA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IAChFA,CAACA;IAEMxB,oBAASA,GAAhBA,UAAiBA,IAAgBA,EAAEA,KAAiBA;QAChDyB,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,kBAAwBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACvEA,CAACA;IAEMzB,qBAAUA,GAAjBA,UAAkBA,IAAgBA,EAAEA,KAAiBA;QACjD0B,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,mBAAyBA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;IACxEA,CAACA;IAEM1B,cAAGA,GAAVA,UAAWA,OAAmBA;QAC1B2B,MAAMA,CAACA,IAAIA,eAAeA,CAACA,YAAkBA,EAAEA,OAAOA,CAACA,CAACA;IAC5DA,CAACA;IAEM3B,oBAASA,GAAhBA,UAAiBA,OAAmBA;QAChC4B,MAAMA,CAACA,IAAIA,eAAeA,CAACA,kBAAwBA,EAAEA,OAAOA,CAACA,CAACA;IAClEA,CAACA;IAEM5B,iBAAMA,GAAbA,UAAcA,OAAmBA;QAC7B6B,MAAMA,CAACA,IAAIA,eAAeA,CAACA,eAAqBA,EAAEA,OAAOA,CAACA,CAACA;IAC/DA,CAACA;IAEM7B,yBAAcA,GAArBA,UAAsBA,OAAmBA;QACrC8B,MAAMA,CAACA,IAAIA,eAAeA,CAACA,uBAA6BA,EAAEA,OAAOA,CAACA,CAACA;IACvEA,CAACA;IAEM9B,iBAAMA,GAAbA,UAAkCA,IAAgBA;QAAE+B,oBAAoCA;aAApCA,WAAoCA,CAApCA,sBAAoCA,CAApCA,IAAoCA;YAApCA,mCAAoCA;;QACpFA,MAAMA,CAACA,IAAIA,gBAAgBA,CAAIA,IAAIA,EAAEA,UAAUA,CAACA,CAACA;IACrDA,CAACA;IAEM/B,iBAAMA,GAAbA,UAAcA,UAAsBA;QAAEgC,cAAqBA;aAArBA,WAAqBA,CAArBA,sBAAqBA,CAArBA,IAAqBA;YAArBA,6BAAqBA;;QACvDA,MAAMA,CAACA,IAAIA,oBAAoBA,CAACA,UAAUA,EAAEA,IAAIA,CAACA,CAACA;IACtDA,CAACA;IAEMhC,cAAGA,GAAVA,UAAWA,QAAgBA;QAAEiC,cAAqBA;aAArBA,WAAqBA,CAArBA,sBAAqBA,CAArBA,IAAqBA;YAArBA,6BAAqBA;;QAC9CA,MAAMA,CAACA,IAAIA,aAAaA,CAACA,QAAQA,EAAEA,IAAIA,CAACA,CAACA;IAC7CA,CAACA;IAEMjC,uBAAYA,GAAnBA,UAAoBA,GAAeA,EAAEA,UAAkBA;QAAEkC,cAAqBA;aAArBA,WAAqBA,CAArBA,sBAAqBA,CAArBA,IAAqBA;YAArBA,6BAAqBA;;QAC1EA,MAAMA,CAACA,IAAIA,sBAAsBA,CAACA,GAAGA,EAAEA,UAAUA,EAAEA,IAAIA,CAACA,CAACA;IAC7DA,CAACA;IAEMlC,iBAAMA,GAAbA,UAAcA,GAAeA,EAAEA,UAAkBA;QAC7CmC,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,GAAGA,EAAEA,UAAUA,CAACA,CAACA;IACjDA,CAACA;IAEMnC,gBAAKA,GAAZA,UAAaA,GAAeA;QAAEoC,cAAqBA;aAArBA,WAAqBA,CAArBA,sBAAqBA,CAArBA,IAAqBA;YAArBA,6BAAqBA;;QAC/CA,MAAMA,CAACA,IAAIA,eAAeA,CAACA,GAAGA,EAAEA,IAAIA,CAACA,CAACA;IAC1CA,CAACA;IACLpC,iBAACA;AAADA,CAACA,AAlJD,IAkJC;AAED,IAAM,wBAAwB;IAA9BqC,SAAMA,wBAAwBA;IAyC9BC,CAACA;IAxCGD,wCAAKA,GAALA,UAAMA,IAAgBA;QAClBE,EAAEA,CAACA,CAACA,IAAIA,KAAKA,IAAIA,CAACA,CAACA,CAACA;YAChBA,MAAMA,CAACA,IAAIA,CAACA;QAChBA,CAACA;QACDA,MAAMA,CAACA,IAAIA,CAACA,aAAaA,CAACA,IAAIA,CAACA,CAACA;IACpCA,CAACA;IAEDF,gDAAaA,GAAbA,UAAcA,IAAwBA;QAAOG,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAElFH,iDAAcA,GAAdA,UAAeA,IAAyBA;QAAOI,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAEpFJ,8CAAWA,GAAXA,UAAYA,IAAsBA;QAAOK,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAE9EL,6CAAUA,GAAVA,UAAWA,IAAqBA;QAAOM,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAE5EN,mDAAgBA,GAAhBA,UAAiBA,IAA2BA;QAAOO,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAExFP,8CAAWA,GAAXA,UAAwCA,IAAiCA;QAAOQ,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAErHR,8CAAWA,GAAXA,UAAYA,IAA0BA;QAAOS,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAElFT,4CAASA,GAATA,UAAUA,IAA4BA;QAAOU,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAElFV,2CAAQA,GAARA,UAASA,IAAmBA;QAAOW,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAExEX,8CAAWA,GAAXA,UAAYA,IAAsBA;QAAOY,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAE9EZ,6CAAUA,GAAVA,UAAWA,IAAqBA;QAAOa,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IAACA,CAACA;IAE5Eb,4CAASA,GAATA,UAAgCA,KAAUA;QACtCc,IAAIA,GAAGA,GAAGA,IAAIA,KAAKA,CAAIA,KAAKA,CAACA,MAAMA,CAACA,CAACA;QAErCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACpCA,IAAIA,OAAOA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;YACvBA,IAAIA,OAAOA,GAAMA,IAAIA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA;YACrCA,GAAGA,CAACA,CAACA,CAACA,GAAGA,OAAOA,CAACA;QACrBA,CAACA;QAEDA,MAAMA,CAACA,GAAGA,CAACA;IACfA,CAACA;IACLd,+BAACA;AAADA,CAACA,AAzCD,IAyCC;AAED,IAAM,iBAAiB;IAAvBe,SAAMA,iBAAiBA;IA+DvBC,CAACA;IA9DGD,iCAAKA,GAALA,UAAMA,IAAgBA;QAClBE,EAAEA,CAACA,CAACA,IAAIA,KAAKA,IAAIA,CAACA,CAACA,CAACA;YAChBA,MAAMA,CAACA,IAAIA,CAACA;QAChBA,CAACA;QACDA,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,CAACA;IAC7BA,CAACA;IAEDF,yCAAaA,GAAbA,UAAcA,IAAwBA;QAClCG,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDH,0CAAcA,GAAdA,UAAeA,IAAyBA;QACpCI,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDJ,uCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BK,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;IACtEA,CAACA;IAEDL,sCAAUA,GAAVA,UAAWA,IAAqBA;QAC5BM,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA;IACjDA,CAACA;IAEDN,4CAAgBA,GAAhBA,UAAiBA,IAA2BA;QACxCO,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,MAAMA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA;IACjGA,CAACA;IAEDP,uCAAWA,GAAXA,UAAgCA,IAAyBA;QACrDQ,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA,CAACA;IAC/EA,CAACA;IAEDR,uCAAWA,GAAXA,UAAYA,IAA0BA;QAClCS,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,UAAUA,CAACA,EAAEA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;IAC/EA,CAACA;IAEDT,qCAASA,GAATA,UAAUA,IAA4BA;QAClCU,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,EAAEA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACxEA,CAACA;IAEDV,oCAAQA,GAARA,UAASA,IAAmBA;QACxBW,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;IAClDA,CAACA;IAEDX,uCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BY,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,CAACA;IAC7CA,CAACA;IAEDZ,sCAAUA,GAAVA,UAAWA,IAAqBA;QAC5Ba,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,EAAEA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;IACxEA,CAACA;IAEDb,qCAASA,GAATA,UAAgCA,KAAUA;QACtCc,IAAIA,GAAGA,GAAGA,IAAIA,KAAKA,CAAIA,KAAKA,CAACA,MAAMA,CAACA,CAACA;QAErCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,KAAKA,CAACA,MAAMA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACpCA,IAAIA,OAAOA,GAAGA,KAAKA,CAACA,CAACA,CAACA,CAACA;YACvBA,IAAIA,OAAOA,GAAMA,IAAIA,CAACA,KAAKA,CAACA,OAAOA,CAACA,CAACA;YACrCA,GAAGA,CAACA,CAACA,CAACA,GAAGA,OAAOA,CAACA;QACrBA,CAACA;QAEDA,MAAMA,CAACA,GAAGA,CAACA;IACfA,CAACA;IACLd,wBAACA;AAADA,CAACA,AA/DD,IA+DC;AAED,IAAM,kBAAkB;IAASe,UAA3BA,kBAAkBA,UAAmBA;IAGvCA,SAHEA,kBAAkBA,CAGRA,KAAUA;QAClBC,kBAAMA,gBAAuBA,CAACA,CAACA;QAC/BA,IAAIA,CAACA,MAAMA,GAAGA,KAAKA,CAACA;IACxBA,CAACA;IAEDD,sBAAIA,qCAAKA;aAATA;YACIE,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACvBA,CAACA;;;OAAAF;IAEDA,mCAAMA,GAANA,UAAOA,OAA0BA;QAC7BG,MAAMA,CAACA,OAAOA,CAACA,aAAaA,CAACA,IAAIA,CAACA,CAACA;IACvCA,CAACA;IAEDH,0CAAaA,GAAbA,UAAiBA,OAAoCA;QACjDI,MAAMA,CAACA,OAAOA,CAACA,aAAaA,CAACA,IAAIA,CAACA,CAACA;IACvCA,CAACA;IACLJ,yBAACA;AAADA,CAACA,AAnBD,EAAiC,UAAU,EAmB1C;AAED,IAAM,mBAAmB;IAASK,UAA5BA,mBAAmBA,UAAmBA;IAGxCA,SAHEA,mBAAmBA,CAGTA,IAAYA;QACpBC,kBAAMA,iBAAwBA,CAACA,CAACA;QAChCA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACtBA,CAACA;IAEDD,sBAAIA,qCAAIA;aAARA;YACIE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAF;IAEDA,oCAAMA,GAANA,UAAOA,OAA0BA;QAC7BG,MAAMA,CAACA,OAAOA,CAACA,cAAcA,CAACA,IAAIA,CAACA,CAACA;IACxCA,CAACA;IAEDH,2CAAaA,GAAbA,UAAiBA,OAAoCA;QACjDI,MAAMA,CAACA,OAAOA,CAACA,cAAcA,CAACA,IAAIA,CAACA,CAACA;IACxCA,CAACA;IACLJ,0BAACA;AAADA,CAACA,AAnBD,EAAkC,UAAU,EAmB3C;AAED,IAAM,eAAe;IAASK,UAAxBA,eAAeA,UAAmBA;IAGpCA,SAHEA,eAAeA,CAGLA,QAAwBA,EAAEA,OAAmBA;QACrDC,kBAAMA,QAAQA,CAACA,CAACA;QAChBA,IAAIA,CAACA,QAAQA,GAAGA,OAAOA,CAACA;IAC5BA,CAACA;IAEDD,sBAAIA,oCAAOA;aAAXA;YACIE,MAAMA,CAACA,IAAIA,CAACA,QAAQA,CAACA;QACzBA,CAACA;;;OAAAF;IAEDA,gCAAMA,GAANA,UAAOA,OAA0BA;QAC7BG,MAAMA,CAACA,OAAOA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;IACpCA,CAACA;IAEDH,uCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDI,MAAMA,CAACA,OAAOA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;IACpCA,CAACA;IAEDJ,gCAAMA,GAANA,UAAOA,OAAmBA;QACtBK,EAAEA,CAACA,CAACA,OAAOA,KAAKA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;YAC5BA,MAAMA,CAACA,IAAIA,eAAeA,CAACA,IAAIA,CAACA,QAAQA,EAAEA,OAAOA,CAACA,CAACA;QACvDA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLL,sBAACA;AAADA,CAACA,AA3BD,EAA8B,UAAU,EA2BvC;AAED,IAAM,gBAAgB;IAASM,UAAzBA,gBAAgBA,UAAmBA;IAIrCA,SAJEA,gBAAgBA,CAINA,QAAwBA,EAAEA,IAAgBA,EAAEA,KAAiBA;QACrEC,kBAAMA,QAAQA,CAACA,CAACA;QAChBA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;QAClBA,IAAIA,CAACA,MAAMA,GAAGA,KAAKA,CAACA;IACxBA,CAACA;IAEDD,sBAAIA,kCAAIA;aAARA;YACIE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAF;IAEDA,sBAAIA,mCAAKA;aAATA;YACIG,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACvBA,CAACA;;;OAAAH;IAEDA,iCAAMA,GAANA,UAAOA,OAA0BA;QAC7BI,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,CAACA,CAACA;IACrCA,CAACA;IAEDJ,wCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDK,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,CAACA,CAACA;IACrCA,CAACA;IAEDL,iCAAMA,GAANA,UAAOA,IAAgBA,EAAEA,KAAiBA;QACtCM,EAAEA,CAACA,CAACA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,IAAIA,KAAKA,KAAKA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA;YAC/CA,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,IAAIA,CAACA,QAAQA,EAAEA,IAAIA,EAAEA,KAAKA,CAACA,CAACA;QAC5DA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLN,uBAACA;AAADA,CAACA,AAjCD,EAA+B,UAAU,EAiCxC;AAED,IAAM,qBAAqB;IAASO,UAA9BA,qBAAqBA,UAAmBA;IAK1CA,SALEA,qBAAqBA,CAKXA,IAAgBA,EAAEA,MAAkBA,EAAEA,OAAmBA;QACjEC,kBAAMA,kBAAwBA,CAACA,CAACA;QAChCA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;QAClBA,IAAIA,CAACA,OAAOA,GAAGA,MAAMA,CAACA;QACtBA,IAAIA,CAACA,QAAQA,GAAGA,OAAOA,CAACA;IAC5BA,CAACA;IAEDD,sBAAIA,uCAAIA;aAARA;YACIE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAF;IAEDA,sBAAIA,yCAAMA;aAAVA;YACIG,MAAMA,CAACA,IAAIA,CAACA,OAAOA,CAACA;QACxBA,CAACA;;;OAAAH;IAEDA,sBAAIA,0CAAOA;aAAXA;YACII,MAAMA,CAACA,IAAIA,CAACA,OAAOA,CAACA;QACxBA,CAACA;;;OAAAJ;IAEDA,sCAAMA,GAANA,UAAOA,OAA0BA;QAC7BK,MAAMA,CAACA,OAAOA,CAACA,gBAAgBA,CAACA,IAAIA,CAACA,CAACA;IAC1CA,CAACA;IAEDL,6CAAaA,GAAbA,UAAiBA,OAAoCA;QACjDM,MAAMA,CAACA,OAAOA,CAACA,gBAAgBA,CAACA,IAAIA,CAACA,CAACA;IAC1CA,CAACA;IAEDN,sCAAMA,GAANA,UAAOA,IAAgBA,EAAEA,MAAkBA,EAAEA,OAAmBA;QAC5DO,EAAEA,CAACA,CAACA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,IAAIA,MAAMA,KAAKA,IAAIA,CAACA,OAAOA,IAAIA,OAAOA,KAAKA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;YAC9EA,MAAMA,CAACA,IAAIA,qBAAqBA,CAACA,IAAIA,EAAEA,MAAMA,EAAEA,OAAOA,CAACA,CAACA;QAC5DA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLP,4BAACA;AAADA,CAACA,AAvCD,EAAoC,UAAU,EAuC7C;AAED,IAAM,gBAAgB;IAAqCQ,UAArDA,gBAAgBA,UAA+CA;IAIjEA,SAJEA,gBAAgBA,CAINA,IAAgBA,EAAEA,UAAiCA;QAC3DC,kBAAMA,cAAqBA,CAACA,CAACA;QAC7BA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;QAClBA,IAAIA,CAACA,WAAWA,GAAGA,UAAUA,CAACA;IAClCA,CAACA;IAEDD,sBAAIA,kCAAIA;aAARA;YACIE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAF;IAEDA,sBAAIA,wCAAUA;aAAdA;YACIG,MAAMA,CAACA,IAAIA,CAACA,WAAWA,CAACA;QAC5BA,CAACA;;;OAAAH;IAEDA,iCAAMA,GAANA,UAAOA,OAA0BA;QAC7BI,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAAYA,IAAIA,CAACA,CAACA;IAChDA,CAACA;IAEDJ,wCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDK,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAAYA,IAAIA,CAACA,CAACA;IAChDA,CAACA;IAEDL,iCAAMA,GAANA,UAAOA,IAAgBA,EAAEA,UAAiCA;QACtDM,EAAEA,CAACA,CAACA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,IAAIA,UAAUA,KAAKA,IAAIA,CAACA,WAAWA,CAACA,CAACA,CAACA;YACzDA,MAAMA,CAACA,IAAIA,gBAAgBA,CAAYA,IAAIA,EAAEA,UAAUA,CAACA,CAACA;QAC7DA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDN,4CAAiBA,GAAjBA,UAAkBA,KAAeA;QAC7BO,IAAIA,IAAIA,GAAGA,IAAIA,cAAcA,EAAEA,CAACA;QAChCA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,CAACA;QAEjBA,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,IAAIA,CAACA;QAErBA,IAAIA,GAAGA,IAAIA,CAACA,OAAOA,CAACA,KAAKA,EAAEA,MAAMA,CAACA,EAAEA,8BAA8BA;QAClEA,IAAIA,GAAGA,wBAAwBA,GAAGA,IAAIA,GAAGA,MAAMA,CAACA;QAChDA,IAAIA,GAAGA,IAAIA,CAACA,OAAOA,CAACA,WAAWA,EAAEA,EAAEA,CAACA,CAACA;QAErCA,EAAEA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACRA,KAAKA,CAACA,IAAIA,CAACA,CAACA;QAChBA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDP,kCAAOA,GAAPA,UAAQA,KAAeA;QACnBQ,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,iBAAiBA,CAACA,KAAKA,CAACA,CAACA;QACzCA,MAAMA,CAAYA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,CAACA;IACnCA,CAACA;IACLR,uBAACA;AAADA,CAACA,AAvDD,EAA2D,UAAU,EAuDpE;AAED,IAAM,oBAAoB;IAASS,UAA7BA,oBAAoBA,UAAmBA;IAIzCA,SAJEA,oBAAoBA,CAIVA,UAAsBA,EAAEA,IAAkBA;QAClDC,kBAAMA,eAAqBA,CAACA,CAACA;QAC7BA,IAAIA,CAACA,WAAWA,GAAGA,UAAUA,CAACA;QAC9BA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACtBA,CAACA;IAEDD,sBAAIA,4CAAUA;aAAdA;YACIE,MAAMA,CAACA,IAAIA,CAACA,WAAWA,CAACA;QAC5BA,CAACA;;;OAAAF;IAEDA,sBAAIA,sCAAIA;aAARA;YACIG,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAH;IAEDA,qCAAMA,GAANA,UAAOA,OAA0BA;QAC7BI,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,CAACA,CAACA;IACrCA,CAACA;IAEDJ,4CAAaA,GAAbA,UAAiBA,OAAoCA;QACjDK,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,CAACA,CAACA;IACrCA,CAACA;IAEDL,qCAAMA,GAANA,UAAOA,UAAsBA,EAAEA,IAAkBA;QAC7CM,EAAEA,CAACA,CAACA,UAAUA,KAAKA,IAAIA,CAACA,WAAWA,IAAIA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACzDA,MAAMA,CAACA,IAAIA,oBAAoBA,CAACA,UAAUA,EAAEA,IAAIA,CAACA,CAACA;QACtDA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLN,2BAACA;AAADA,CAACA,AAjCD,EAAmC,UAAU,EAiC5C;AAED,IAAM,sBAAsB;IAASO,UAA/BA,sBAAsBA,UAAmBA;IAK3CA,SALEA,sBAAsBA,CAKZA,UAAsBA,EAAEA,UAAkBA,EAAEA,IAAkBA;QACtEC,kBAAMA,aAAmBA,CAACA,CAACA;QAC3BA,IAAIA,CAACA,WAAWA,GAAGA,UAAUA,CAACA;QAC9BA,IAAIA,CAACA,OAAOA,GAAGA,UAAUA,CAACA;QAC1BA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACtBA,CAACA;IAEDD,sBAAIA,uCAAGA;aAAPA;YACIE,MAAMA,CAACA,IAAIA,CAACA,WAAWA,CAACA;QAC5BA,CAACA;;;OAAAF;IAEDA,sBAAIA,0CAAMA;aAAVA;YACIG,MAAMA,CAACA,IAAIA,CAACA,OAAOA,CAACA;QACxBA,CAACA;;;OAAAH;IAEDA,sBAAIA,wCAAIA;aAARA;YACII,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAJ;IAEDA,uCAAMA,GAANA,UAAOA,OAA0BA;QAC7BK,MAAMA,CAACA,OAAOA,CAACA,SAASA,CAACA,IAAIA,CAACA,CAACA;IACnCA,CAACA;IAEDL,8CAAaA,GAAbA,UAAiBA,OAAoCA;QACjDM,MAAMA,CAACA,OAAOA,CAACA,SAASA,CAACA,IAAIA,CAACA,CAACA;IACnCA,CAACA;IAEDN,uCAAMA,GAANA,UAAOA,UAAsBA,EAAEA,IAAkBA;QAC7CO,EAAEA,CAACA,CAACA,UAAUA,KAAKA,IAAIA,CAACA,WAAWA,IAAIA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACzDA,MAAMA,CAACA,IAAIA,sBAAsBA,CAACA,UAAUA,EAAEA,IAAIA,CAACA,OAAOA,EAAEA,IAAIA,CAACA,CAACA;QACtEA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLP,6BAACA;AAADA,CAACA,AAvCD,EAAqC,UAAU,EAuC9C;AAED,IAAM,eAAe;IAASQ,UAAxBA,eAAeA,UAAmBA;IAIpCA,SAJEA,eAAeA,CAILA,UAAsBA,EAAEA,IAAkBA;QAClDC,kBAAMA,cAAoBA,CAACA,CAACA;QAC5BA,IAAIA,CAACA,WAAWA,GAAGA,UAAUA,CAACA;QAC9BA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACtBA,CAACA;IAEDD,sBAAIA,gCAAGA;aAAPA;YACIE,MAAMA,CAACA,IAAIA,CAACA,WAAWA,CAACA;QAC5BA,CAACA;;;OAAAF;IAEDA,sBAAIA,iCAAIA;aAARA;YACIG,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAH;IAEDA,gCAAMA,GAANA,UAAOA,OAA0BA;QAC7BI,MAAMA,CAACA,OAAOA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;IACpCA,CAACA;IAEDJ,uCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDK,MAAMA,CAACA,OAAOA,CAACA,UAAUA,CAACA,IAAIA,CAACA,CAACA;IACpCA,CAACA;IAEDL,gCAAMA,GAANA,UAAOA,UAAsBA,EAAEA,IAAkBA;QAC7CM,EAAEA,CAACA,CAACA,UAAUA,KAAKA,IAAIA,CAACA,WAAWA,IAAIA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACzDA,MAAMA,CAACA,IAAIA,eAAeA,CAACA,UAAUA,EAAEA,IAAIA,CAACA,CAACA;QACjDA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLN,sBAACA;AAADA,CAACA,AAjCD,EAA8B,UAAU,EAiCvC;AAED,IAAM,aAAa;IAASO,UAAtBA,aAAaA,UAAmBA;IAIlCA,SAJEA,aAAaA,CAIHA,QAAgBA,EAAEA,IAAkBA;QAC5CC,kBAAMA,YAAkBA,CAACA,CAACA;QAC1BA,IAAIA,CAACA,KAAKA,GAAGA,QAAQA,CAACA;QACtBA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,CAACA;IACtBA,CAACA;IAEDD,sBAAIA,+BAAIA;aAARA;YACIE,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAF;IAEDA,sBAAIA,+BAAIA;aAARA;YACIG,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA;QACtBA,CAACA;;;OAAAH;IAEDA,8BAAMA,GAANA,UAAOA,OAA0BA;QAC7BI,MAAMA,CAACA,OAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA;IAClCA,CAACA;IAEDJ,qCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDK,MAAMA,CAACA,OAAOA,CAACA,QAAQA,CAACA,IAAIA,CAACA,CAACA;IAClCA,CAACA;IAEDL,8BAAMA,GAANA,UAAOA,IAAkBA;QACrBM,EAAEA,CAACA,CAACA,IAAIA,KAAKA,IAAIA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACtBA,MAAMA,CAACA,IAAIA,aAAaA,CAACA,IAAIA,CAACA,KAAKA,EAAEA,IAAIA,CAACA,CAACA;QAC/CA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLN,oBAACA;AAADA,CAACA,AAjCD,EAA4B,UAAU,EAiCrC;AAED,IAAM,gBAAgB;IAASO,UAAzBA,gBAAgBA,UAAmBA;IAIrCA,SAJEA,gBAAgBA,CAINA,GAAeA,EAAEA,UAAkBA;QAC3CC,kBAAMA,eAAqBA,CAACA,CAACA;QAC7BA,IAAIA,CAACA,IAAIA,GAAGA,GAAGA,CAACA;QAChBA,IAAIA,CAACA,OAAOA,GAAGA,UAAUA,CAACA;IAC9BA,CAACA;IAEDD,sBAAIA,iCAAGA;aAAPA;YACIE,MAAMA,CAACA,IAAIA,CAACA,IAAIA,CAACA;QACrBA,CAACA;;;OAAAF;IAEDA,sBAAIA,oCAAMA;aAAVA;YACIG,MAAMA,CAACA,IAAIA,CAACA,OAAOA,CAACA;QACxBA,CAACA;;;OAAAH;IAEDA,iCAAMA,GAANA,UAAOA,OAA0BA;QAC7BI,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,CAACA,CAACA;IACrCA,CAACA;IAEDJ,wCAAaA,GAAbA,UAAiBA,OAAoCA;QACjDK,MAAMA,CAACA,OAAOA,CAACA,WAAWA,CAACA,IAAIA,CAACA,CAACA;IACrCA,CAACA;IAEDL,iCAAMA,GAANA,UAAOA,GAAeA;QAClBM,EAAEA,CAACA,CAACA,GAAGA,KAAKA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;YACpBA,MAAMA,CAACA,IAAIA,gBAAgBA,CAACA,GAAGA,EAAEA,IAAIA,CAACA,OAAOA,CAACA,CAACA;QACnDA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLN,uBAACA;AAADA,CAACA,AAjCD,EAA+B,UAAU,EAiCxC;AAED,IAAM,cAAc;IAASO,UAAvBA,cAAcA,UAA0BA;IAG1CA,SAHEA,cAAcA;QAIZC,iBAAOA,CAACA;QACRA,IAAIA,CAACA,MAAMA,GAAGA,IAAIA,KAAKA,EAAUA,CAACA;IACtCA,CAACA;IAEDD,sBAAIA,gCAAIA;aAARA;YACIE,EAAEA,CAACA,CAACA,IAAIA,CAACA,MAAMA,CAACA,MAAMA,IAAIA,CAACA,CAACA;gBACxBA,MAAMA,IAAIA,KAAKA,CAACA,yBAAyBA,CAACA,CAACA;YAE/CA,MAAMA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA;QAC1BA,CAACA;;;OAAAF;IAEDA,sCAAaA,GAAbA,UAAcA,IAAwBA;QAClCG,IAAIA,KAAKA,GAAGA,EAAEA,CAACA;QAEfA,EAAEA,CAACA,CAACA,OAAOA,IAAIA,CAACA,KAAKA,IAAIA,QAAQA,CAACA,CAACA,CAACA;YAChCA,KAAKA,GAAGA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,GAAGA,IAAIA,EAAEA,0BAA0BA;YAA3BA,JACrCA,CAACA;QACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,IAAIA,CAACA,KAAKA,YAAYA,KAAKA,CAACA,CAACA,CAACA;YACnCA,KAAKA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;QACvCA,CAACA;QACDA,IAAIA,CAACA,EAAEA,CAACA,CAACA,IAAIA,CAACA,KAAKA,KAAKA,SAASA,CAACA,CAACA,CAACA;YAChCA,KAAKA,GAAGA,WAAWA,CAACA;QACxBA,CAACA;QACDA,IAAIA,CAACA,CAACA;YACFA,KAAKA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,QAAQA,EAAEA,EAAEA,OAAOA;YAARA,JAClCA,CAACA;QAEDA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;QAExBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDH,mCAAUA,GAAVA,UAAWA,IAAqBA;QAC5BI,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA;QAEzBA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAC1BA,IAAIA,CAACA,GAAGA,EAAEA,CAACA;QAEXA,MAAMA,CAACA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;YACpBA,KAAKA,eAAqBA;gBACtBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,kBAAwBA;gBACzBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,YAAkBA;gBACnBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,uBAA6BA;gBAC9BA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;QACdA,CAACA;QAEDA,IAAIA,GAAGA,GAAGA,GAAGA,GAAGA,CAACA,GAAGA,EAAEA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;QACjCA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDJ,oCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BK,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACtBA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAACA;QAEvBA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAC1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAC1BA,IAAIA,CAACA,GAAGA,EAAEA,CAACA;QAEXA,MAAMA,CAACA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;YACpBA,KAAKA,WAAkBA;gBACnBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,gBAAuBA;gBACxBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,gBAAuBA;gBACxBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,cAAqBA;gBACtBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,cAAqBA;gBACtBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,WAAkBA;gBACnBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,UAAiBA;gBAClBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,gBAAsBA;gBACvBA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,eAAqBA;gBACtBA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,oBAA0BA;gBAC3BA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,cAAoBA;gBACrBA,CAACA,GAAGA,KAAKA,CAACA;gBACVA,KAAKA,CAACA;YACVA,KAAKA,iBAAuBA;gBACxBA,CAACA,GAAGA,KAAKA,CAACA;gBACVA,KAAKA,CAACA;YACVA,KAAKA,iBAAuBA;gBACxBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,wBAA8BA;gBAC/BA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,oBAA0BA;gBAC3BA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,2BAAiCA;gBAClCA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,kBAAwBA;gBACzBA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,mBAAyBA;gBAC1BA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;QACdA,CAACA;QAEDA,IAAIA,GAAGA,GAAGA,GAAGA,GAAGA,CAACA,GAAGA,GAAGA,GAAGA,CAACA,GAAGA,GAAGA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;QAC5CA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDL,yCAAgBA,GAAhBA,UAAiBA,IAA2BA;QACxCM,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACtBA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA;QACxBA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA;QAEzBA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAC1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAC1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAE1BA,IAAIA,GAAGA,GAAGA,GAAGA,GAAGA,CAACA,GAAGA,KAAKA,GAAGA,CAACA,GAAGA,KAAKA,GAAGA,CAACA,GAAGA,GAAGA,CAACA;QAEhDA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDN,uCAAcA,GAAdA,UAAeA,IAAyBA;QACpCO,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE5BA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDP,oCAAWA,GAAXA,UAAgCA,IAAyBA;QACrDQ,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAChCA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAEtBA,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAE7BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,UAAUA,CAACA,MAAMA,CAACA;QAC/BA,IAAIA,IAAIA,GAAGA,IAAIA,KAAKA,CAASA,CAACA,CAACA,CAACA;QAChCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACzBA,IAAIA,CAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QACxCA,CAACA;QAEDA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE9BA,IAAIA,GAAGA,GAAGA,WAAWA,GAAGA,OAAOA,GAAGA,aAAaA,GAAGA,IAAIA,GAAGA,KAAKA,CAACA;QAE/DA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDR,oCAAWA,GAAXA,UAAYA,IAA0BA;QAClCS,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAC5BA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACzBA,IAAIA,IAAIA,GAAGA,IAAIA,KAAKA,CAASA,CAACA,CAACA,CAACA;QAChCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACzBA,IAAIA,CAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QACxCA,CAACA;QAEDA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE9BA,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAE7BA,IAAIA,GAAGA,GAAGA,IAAIA,GAAGA,GAAGA,GAAGA,OAAOA,GAAGA,GAAGA,CAACA;QAErCA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDT,kCAASA,GAATA,UAAUA,IAA4BA;QAClCU,IAAIA,GAAGA,GAAGA,EAAEA,CAACA;QAEbA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,KAAKA,IAAIA,CAACA,CAACA,CAACA;YACpBA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;YACrBA,GAAGA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,GAAGA,GAAGA,CAACA;QAClCA,CAACA;QAEDA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACzBA,IAAIA,IAAIA,GAAGA,IAAIA,KAAKA,CAASA,CAACA,CAACA,CAACA;QAChCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACzBA,IAAIA,CAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QACxCA,CAACA;QAEDA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE9BA,GAAGA,IAAIA,IAAIA,CAACA,MAAMA,GAAGA,GAAGA,GAAGA,OAAOA,GAAGA,GAAGA,CAACA;QAEzCA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDV,iCAAQA,GAARA,UAASA,IAAmBA;QACxBW,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACzBA,IAAIA,IAAIA,GAAGA,IAAIA,KAAKA,CAASA,CAACA,CAACA,CAACA;QAChCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACzBA,IAAIA,CAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QACxCA,CAACA;QAEDA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE9BA,IAAIA,GAAGA,GAAGA,MAAMA,GAAGA,IAAIA,CAACA,IAAIA,GAAGA,GAAGA,GAAGA,OAAOA,GAAGA,GAAGA,CAACA;QAEnDA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDX,oCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BY,IAAIA,GAAGA,GAAGA,EAAEA,CAACA;QAEbA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,KAAKA,IAAIA,CAACA,CAACA,CAACA;YACpBA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;YACrBA,GAAGA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,GAAGA,GAAGA,CAACA;QAClCA,CAACA;QAEDA,GAAGA,IAAIA,IAAIA,CAACA,MAAMA,CAACA;QAEnBA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDZ,mCAAUA,GAAVA,UAAWA,IAAqBA;QAC5Ba,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QACrBA,IAAIA,GAAGA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAE5BA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE1BA,IAAIA,CAACA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,MAAMA,CAACA;QACzBA,IAAIA,IAAIA,GAAGA,IAAIA,KAAKA,CAASA,CAACA,CAACA,CAACA;QAChCA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,CAACA,EAAEA,CAACA,GAAGA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YACzBA,IAAIA,CAACA,CAACA,GAAGA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QACxCA,CAACA;QAEDA,IAAIA,OAAOA,GAAGA,IAAIA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAE9BA,GAAGA,IAAIA,GAAGA,GAAGA,OAAOA,GAAGA,GAAGA,CAACA;QAE3BA,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA;QAEtBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLb,qBAACA;AAADA,CAACA,AApRD,EAA6B,iBAAiB,EAoR7C;AAED,IAAM,mBAAmB;IAASc,UAA5BA,mBAAmBA,UAA0BA;IAI/CA,SAJEA,mBAAmBA;QAKjBC,iBAAOA,CAACA;QACRA,IAAIA,CAACA,MAAMA,GAAGA,IAAIA,KAAKA,EAAgBA,CAACA;QACxCA,IAAIA,CAACA,OAAOA,GAAGA,IAAIA,KAAKA,EAAcA,CAACA;IAC3CA,CAACA;IAEDD,sBAAIA,uCAAMA;aAAVA;YACIE,MAAMA,CAACA,IAAIA,CAACA,OAAOA,CAACA;QACxBA,CAACA;;;OAAAF;IAEDA,4CAAcA,GAAdA,UAAeA,IAAyBA;QACpCG,IAAIA,KAAKA,GAAGA,KAAKA,CAACA;QAElBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,MAAMA,GAAGA,CAACA,EAAEA,CAACA,IAAIA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAC/CA,EAAEA,CAACA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;gBACpCA,KAAKA,GAAGA,IAAIA,CAACA;gBACbA,KAAKA,CAACA;YACVA,CAACA;QACLA,CAACA;QAEDA,EAAEA,CAACA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACTA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAC5BA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDH,yCAAWA,GAAXA,UAAgCA,IAAyBA;QACrDI,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAElCA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAEtBA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAElBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLJ,0BAACA;AAADA,CAACA,AAxCD,EAAkC,iBAAiB,EAwClD;AAED,IAAK,cAgCJ;AAhCD,WAAK,cAAc;IACfK,2DAAQA;IACRA,6DAASA;IACTA,uDAAMA;IACNA,iDAAGA;IACHA,2DAAQA;IACRA,2DAAQA;IACRA,uDAAMA;IACNA,uDAAMA;IACNA,iDAAGA;IACHA,+CAAEA;IACFA,0DAAOA;IACPA,wDAAMA;IACNA,kEAAWA;IACXA,sDAAKA;IACLA,4DAAQA;IACRA,4DAAQA;IACRA,0EAAeA;IACfA,kEAAWA;IACXA,gFAAkBA;IAClBA,8DAASA;IACTA,gEAAUA;IACVA,wDAAMA;IACNA,kDAAGA;IACHA,wDAAMA;IACNA,8DAASA;IACTA,wEAAcA;IACdA,8DAASA;IACTA,kDAAGA;IACHA,oDAAIA;IACJA,wDAAMA;IACNA,sDAAKA;AACTA,CAACA,EAhCI,cAAc,KAAd,cAAc,QAgClB;AAED,IAAM,MAAM;IAASC,UAAfA,MAAMA,UAA0BA;IAIlCA,SAJEA,MAAMA,CAIIA,SAAcA;QACtBC,iBAAOA,CAACA;QACRA,IAAIA,CAACA,MAAMA,GAAGA,IAAIA,KAAKA,EAAgBA,CAACA;QACxCA,IAAIA,CAACA,UAAUA,GAAGA,SAASA,CAACA;IAChCA,CAACA;IAEDD,+BAAcA,GAAdA,UAAeA,IAAyBA;QACpCE,IAAIA,KAAKA,GAAGA,KAAKA,CAACA;QAElBA,GAAGA,CAACA,CAACA,GAAGA,CAACA,CAACA,GAAGA,IAAIA,CAACA,MAAMA,CAACA,MAAMA,GAAGA,CAACA,EAAEA,CAACA,IAAIA,CAACA,EAAEA,CAACA,EAAEA,EAAEA,CAACA;YAC/CA,EAAEA,CAACA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA,CAACA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA,CAACA;gBACpCA,KAAKA,GAAGA,IAAIA,CAACA;gBACbA,KAAKA,CAACA;YACVA,CAACA;QACLA,CAACA;QAEDA,EAAEA,CAACA,CAACA,CAACA,KAAKA,CAACA,CAACA,CAACA;YACTA,MAAMA,CAACA,UAAUA,CAACA,QAAQA,CAACA,IAAIA,CAACA,UAAUA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;QAC3DA,CAACA;QAEDA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IAEDF,4BAAWA,GAAXA,UAAgCA,IAAyBA;QACrDG,IAAIA,CAACA,MAAMA,CAACA,IAAIA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAElCA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAEtBA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,EAAEA,CAACA;QAElBA,MAAMA,CAACA,IAAIA,CAACA;IAChBA,CAACA;IACLH,aAACA;AAADA,CAACA,AApCD,EAAqB,iBAAiB,EAoCrC;AAED,IAAM,YAAY;IAASI,UAArBA,YAAYA,UAAyCA;IAA3DA,SAAMA,YAAYA;QAASC,8BAAgCA;IAkE3DA,CAACA;IAjEGD,oCAAaA,GAAbA,UAAcA,IAAwBA;QAClCE,MAAMA,CAACA,WAAWA,GAAGA,IAAIA,CAACA,KAAKA,GAAGA,GAAGA,CAACA;IAC1CA,CAACA;IAEDF,qCAAcA,GAAdA,UAAeA,IAAyBA;QACpCG,MAAMA,CAACA,YAAYA,GAAGA,IAAIA,CAACA,IAAIA,GAAGA,GAAGA,CAACA;IAC1CA,CAACA;IAEDH,kCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BI,MAAMA,CAACA,cAAcA,CAACA,IAAIA,CAACA,QAAQA,CAACA,GAAGA,GAAGA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA,GAAGA,GAAGA,CAACA;IAC7GA,CAACA;IAEDJ,iCAAUA,GAAVA,UAAWA,IAAqBA;QAC5BK,MAAMA,CAACA,cAAcA,CAACA,IAAIA,CAACA,QAAQA,CAACA,GAAGA,GAAGA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,GAAGA,GAAGA,CAACA;IAChFA,CAACA;IAEDL,uCAAgBA,GAAhBA,UAAiBA,IAA2BA;QACxCM,MAAMA,CAACA,cAAcA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,MAAMA,CAACA,GAAGA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,GAAGA,GAAGA,CAACA;IAC3HA,CAACA;IAEDN,kCAAWA,GAAXA,UAAgCA,IAAyBA;QACrDO,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACjCA,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAC/CA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,CAACA;QACvBA,MAAMA,CAACA,SAASA,GAAGA,QAAQA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;IACjDA,CAACA;IAEDP,kCAAWA,GAAXA,UAAYA,IAA0BA;QAClCQ,IAAIA,UAAUA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAC7CA,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACzCA,QAAQA,CAACA,OAAOA,CAACA,UAAUA,CAACA,CAACA;QAC7BA,MAAMA,CAACA,SAASA,GAAGA,QAAQA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;IACjDA,CAACA;IAEDR,gCAASA,GAATA,UAAUA,IAA4BA;QAClCS,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACzCA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,CAACA,CAACA;YACnBA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,CAACA;QAC3CA,CAACA;QACDA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA;QAC9BA,MAAMA,CAACA,OAAOA,GAAGA,QAAQA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;IAC/CA,CAACA;IAEDT,+BAAQA,GAARA,UAASA,IAAmBA;QACxBU,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACzCA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QAC5BA,MAAMA,CAACA,MAAMA,GAAGA,QAAQA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;IAC9CA,CAACA;IAEDV,kCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BW,IAAIA,QAAQA,GAAaA,EAAEA,CAACA;QAC5BA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,CAACA,CAACA;YACnBA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,CAACA;QAC3CA,CAACA;QACDA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,MAAMA,CAACA,CAACA;QAC9BA,MAAMA,CAACA,SAASA,GAAGA,QAAQA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;IACjDA,CAACA;IAEDX,iCAAUA,GAAVA,UAAWA,IAAqBA;QAC5BY,IAAIA,QAAQA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACzCA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,CAACA,CAACA;YACnBA,QAAQA,CAACA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,CAACA;QAC3CA,CAACA;QACDA,MAAMA,CAACA,QAAQA,GAAGA,QAAQA,CAACA,IAAIA,CAACA,IAAIA,CAACA,GAAGA,GAAGA,CAACA;IAChDA,CAACA;IACLZ,mBAACA;AAADA,CAACA,AAlED,EAA2B,wBAAwB,EAkElD;AAED,IAAM,aAAa;IAASa,UAAtBA,aAAaA,UAAsCA;IAAzDA,SAAMA,aAAaA;QAASC,8BAA6BA;IAoIzDA,CAACA;IAnIGD,qCAAaA,GAAbA,UAAcA,IAAwBA;QAClCE,MAAMA,CAACA,CAAEA,GAAGA,EAAEA,IAAIA,CAACA,KAAKA,CAAEA,CAACA;IAC/BA,CAACA;IAEDF,sCAAcA,GAAdA,UAAeA,IAAyBA;QACpCG,MAAMA,CAACA,CAACA,GAAGA,EAAEA,IAAIA,CAACA,IAAIA,CAACA,CAACA;IAC5BA,CAACA;IAEDH,mCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BI,IAAIA,CAACA,GAAGA,EAAEA,CAACA;QAEXA,MAAMA,CAACA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;YACpBA,KAAKA,WAAkBA;gBACnBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,gBAAuBA;gBACxBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,gBAAuBA;gBACxBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,cAAqBA;gBACtBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,cAAqBA;gBACtBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,WAAkBA;gBACnBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,UAAiBA;gBAClBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,gBAAsBA;gBACvBA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,eAAqBA;gBACtBA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,oBAA0BA;gBAC3BA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,cAAoBA;gBACrBA,CAACA,GAAGA,KAAKA,CAACA;gBACVA,KAAKA,CAACA;YACVA,KAAKA,iBAAuBA;gBACxBA,CAACA,GAAGA,KAAKA,CAACA;gBACVA,KAAKA,CAACA;YACVA,KAAKA,iBAAuBA;gBACxBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,wBAA8BA;gBAC/BA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,oBAA0BA;gBAC3BA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,2BAAiCA;gBAClCA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,kBAAwBA;gBACzBA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;YACVA,KAAKA,mBAAyBA;gBAC1BA,CAACA,GAAGA,IAAIA,CAACA;gBACTA,KAAKA,CAACA;QACdA,CAACA;QAEDA,MAAMA,CAACA,CAAEA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,KAAKA,CAACA,CAAEA,CAACA;IAChEA,CAACA;IAEDJ,kCAAUA,GAAVA,UAAWA,IAAqBA;QAC5BK,IAAIA,CAACA,GAAGA,EAAEA,CAACA;QAEXA,MAAMA,CAACA,CAACA,IAAIA,CAACA,QAAQA,CAACA,CAACA,CAACA;YACpBA,KAAKA,eAAqBA;gBACtBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,kBAAwBA;gBACzBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,YAAkBA;gBACnBA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;YACVA,KAAKA,uBAA6BA;gBAC9BA,CAACA,GAAGA,GAAGA,CAACA;gBACRA,KAAKA,CAACA;QACdA,CAACA;QAEDA,MAAMA,CAACA,CAACA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAACA,CAACA;IACzCA,CAACA;IAEDL,wCAAgBA,GAAhBA,UAAiBA,IAA2BA;QACxCM,MAAMA,CAACA,CAACA,IAAIA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,MAAMA,CAACA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,OAAOA,CAACA,CAAEA,CAACA;IAC7FA,CAACA;IAEDN,mCAAWA,GAAXA,UAAgCA,IAAyBA;QACrDO,MAAMA,CAACA,CAACA,IAAIA,EAAEA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,IAAIA,CAACA,EAAEA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA,CAACA;IAC1EA,CAACA;IAEDP,mCAAWA,GAAXA,UAAYA,IAA0BA;QAClCQ,IAAIA,UAAUA,GAAGA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,UAAUA,CAACA,CAACA;QAC7CA,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACrCA,MAAMA,CAACA,CAACA,IAAIA,EAAEA,UAAUA,EAAEA,IAAIA,CAACA,CAACA;IACpCA,CAACA;IAEDR,iCAASA,GAATA,UAAUA,IAA4BA;QAClCS,IAAIA,IAAIA,GAAUA,EAAEA,CAACA;QACrBA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,CAACA,CAACA;YACnBA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,CAACA;QACvCA,CAACA;QACDA,IAAIA,CAACA,OAAOA,CAACA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA,CAACA;QACxCA,MAAMA,CAACA,CAACA,KAAKA,EAAEA,IAAIA,CAACA,MAAMA,EAAEA,IAAIA,CAACA,CAACA;IACtCA,CAACA;IAEDT,gCAAQA,GAARA,UAASA,IAAmBA;QACxBU,IAAIA,IAAIA,GAAGA,IAAIA,CAACA,SAASA,CAACA,IAAIA,CAACA,IAAIA,CAACA,CAACA;QACrCA,MAAMA,CAACA,CAACA,KAAKA,EAAEA,IAAIA,CAACA,CAACA;IACzBA,CAACA;IAEDV,mCAAWA,GAAXA,UAAYA,IAAsBA;QAC9BW,IAAIA,GAAGA,GAAGA,CAACA,GAAGA,EAAEA,IAAIA,CAACA,MAAMA,CAACA,CAACA;QAC7BA,EAAEA,CAACA,CAACA,IAAIA,CAACA,GAAGA,IAAIA,IAAIA,CAACA,CAACA,CAACA;YACnBA,GAAGA,CAACA,OAAOA,CAACA,IAAIA,CAACA,KAAKA,CAACA,IAAIA,CAACA,GAAGA,CAACA,CAACA,CAACA;QACtCA,CAACA;QACDA,MAAMA,CAACA,GAAGA,CAACA;IACfA,CAACA;IAEDX,kCAAUA,GAAVA,UAAWA,IAAqBA;QAC5BY,MAAMA,IAAIA,KAAKA,CAACA,iBAAiBA,CAACA,CAACA;IACvCA,CAACA;IACLZ,oBAACA;AAADA,CAACA,AApID,EAA4B,wBAAwB,EAoInD"}RxJS-4.1.0/src/core/expressions/compiler.ts000066400000000000000000001002511266736161100206350ustar00rootroot00000000000000class Expression { nodeType: ExpressionType; constructor(nodeType: ExpressionType) { this.nodeType = nodeType; } accept(visitor: ExpressionVisitor): Expression { throw new Error("not implemented"); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { throw new Error("not implemented"); } toString(): string { return new PrintVisitor().visit(this); } toBonsai(): string { return new BonsaiVisitor().visit(this); } static constant(value: any): ConstantExpression { return new ConstantExpression(value); } static parameter(name: string): ParameterExpression { return new ParameterExpression(name); } static condition(test: Expression, ifTrue: Expression, ifFalse: Expression): ConditionalExpression { return new ConditionalExpression(test, ifTrue, ifFalse); } static add(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Add, left, right); } static subtract(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Subtract, left, right); } static multiply(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Multiply, left, right); } static divide(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Divide, left, right); } static modulo(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Modulo, left, right); } static and(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.And, left, right); } static andAlso(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.AndAlso, left, right); } static or(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Or, left, right); } static orElse(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.OrElse, left, right); } static exclusiveOr(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.ExclusiveOr, left, right); } static equal(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.Equal, left, right); } static notEqual(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.NotEqual, left, right); } static lessThan(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.LessThan, left, right); } static lessThanOrEqual(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.LessThanOrEqual, left, right); } static greaterThan(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.GreaterThan, left, right); } static greaterThanOrEqual(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.GreaterThanOrEqual, left, right); } static leftShift(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.LeftShift, left, right); } static rightShift(left: Expression, right: Expression): BinaryExpression { return new BinaryExpression(ExpressionType.RightShift, left, right); } static not(operand: Expression): UnaryExpression { return new UnaryExpression(ExpressionType.Not, operand); } static unaryPlus(operand: Expression): UnaryExpression { return new UnaryExpression(ExpressionType.UnaryPlus, operand); } static negate(operand: Expression): UnaryExpression { return new UnaryExpression(ExpressionType.Negate, operand); } static onesComplement(operand: Expression): UnaryExpression { return new UnaryExpression(ExpressionType.OnesComplement, operand); } static lambda(body: Expression, ...parameters: ParameterExpression[]): LambdaExpression { return new LambdaExpression(body, parameters); } static invoke(expression: Expression, ...args: Expression[]): InvocationExpression { return new InvocationExpression(expression, args); } static new(typeName: string, ...args: Expression[]): NewExpression { return new NewExpression(typeName, args); } static functionCall(obj: Expression, methodName: string, ...args: Expression[]): FunctionCallExpression { return new FunctionCallExpression(obj, methodName, args); } static member(obj: Expression, memberName: string): MemberExpression { return new MemberExpression(obj, memberName); } static index(obj: Expression, ...args: Expression[]): IndexExpression { return new IndexExpression(obj, args); } } class ExpressionVisitorGeneric { visit(node: Expression): T { if (node === null) { return null; } return node.acceptGeneric(this); } visitConstant(node: ConstantExpression): T { throw new Error("not implemented"); } visitParameter(node: ParameterExpression): T { throw new Error("not implemented"); } visitBinary(node: BinaryExpression): T { throw new Error("not implemented"); } visitUnary(node: UnaryExpression): T { throw new Error("not implemented"); } visitConditional(node: ConditionalExpression): T { throw new Error("not implemented"); } visitLambda(node: LambdaExpression): T { throw new Error("not implemented"); } visitInvoke(node: InvocationExpression): T { throw new Error("not implemented"); } visitCall(node: FunctionCallExpression): T { throw new Error("not implemented"); } visitNew(node: NewExpression): T { throw new Error("not implemented"); } visitMember(node: MemberExpression): T { throw new Error("not implemented"); } visitIndex(node: IndexExpression): T { throw new Error("not implemented"); } visitMany(nodes: E[]): T[] { var res = new Array(nodes.length); for (var i = 0; i < nodes.length; i++) { var oldNode = nodes[i]; var newNode = this.visit(oldNode); res[i] = newNode; } return res; } } class ExpressionVisitor { visit(node: Expression): Expression { if (node === null) { return null; } return node.accept(this); } visitConstant(node: ConstantExpression): Expression { return node; } visitParameter(node: ParameterExpression): Expression { return node; } visitBinary(node: BinaryExpression): Expression { return node.update(this.visit(node.left), this.visit(node.right)); } visitUnary(node: UnaryExpression): Expression { return node.update(this.visit(node.operand)); } visitConditional(node: ConditionalExpression): Expression { return node.update(this.visit(node.test), this.visit(node.ifTrue), this.visit(node.ifFalse)); } visitLambda(node: LambdaExpression): Expression { return node.update(this.visit(node.body), this.visitMany(node.parameters)); } visitInvoke(node: InvocationExpression): Expression { return node.update(this.visit(node.expression), this.visitMany(node.args)); } visitCall(node: FunctionCallExpression): Expression { return node.update(this.visit(node.obj), this.visitMany(node.args)); } visitNew(node: NewExpression): Expression { return node.update(this.visitMany(node.args)); } visitMember(node: MemberExpression): Expression { return node.update(this.visit(node.obj)); } visitIndex(node: IndexExpression): Expression { return node.update(this.visit(node.obj), this.visitMany(node.args)); } visitMany(nodes: T[]): T[] { var res = new Array(nodes.length); for (var i = 0; i < nodes.length; i++) { var oldNode = nodes[i]; var newNode = this.visit(oldNode); res[i] = newNode; } return res; } } class ConstantExpression extends Expression { _value: any; constructor(value: any) { super(ExpressionType.Constant); this._value = value; } get value(): any { return this._value; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitConstant(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitConstant(this); } } class ParameterExpression extends Expression { _name: string; constructor(name: string) { super(ExpressionType.Parameter); this._name = name; } get name(): string { return this._name; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitParameter(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitParameter(this); } } class UnaryExpression extends Expression { _operand: Expression; constructor(nodeType: ExpressionType, operand: Expression) { super(nodeType); this._operand = operand; } get operand(): Expression { return this._operand; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitUnary(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitUnary(this); } update(operand: Expression): UnaryExpression { if (operand !== this._operand) { return new UnaryExpression(this.nodeType, operand); } return this; } } class BinaryExpression extends Expression { _left: Expression; _right: Expression; constructor(nodeType: ExpressionType, left: Expression, right: Expression) { super(nodeType); this._left = left; this._right = right; } get left(): Expression { return this._left; } get right(): Expression { return this._right; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitBinary(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitBinary(this); } update(left: Expression, right: Expression): BinaryExpression { if (left !== this._left || right !== this._right) { return new BinaryExpression(this.nodeType, left, right); } return this; } } class ConditionalExpression extends Expression { _test: Expression; _ifTrue: Expression; _ifFalse: Expression; constructor(test: Expression, ifTrue: Expression, ifFalse: Expression) { super(ExpressionType.Condition); this._test = test; this._ifTrue = ifTrue; this._ifFalse = ifFalse; } get test(): Expression { return this._test; } get ifTrue(): Expression { return this._ifTrue; } get ifFalse(): Expression { return this._ifTrue; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitConditional(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitConditional(this); } update(test: Expression, ifTrue: Expression, ifFalse: Expression): ConditionalExpression { if (test !== this._test || ifTrue !== this._ifTrue || ifFalse !== this._ifFalse) { return new ConditionalExpression(test, ifTrue, ifFalse); } return this; } } class LambdaExpression extends Expression { _body: Expression; _parameters: ParameterExpression[]; constructor(body: Expression, parameters: ParameterExpression[]) { super(ExpressionType.Lambda); this._body = body; this._parameters = parameters; } get body(): Expression { return this._body; } get parameters(): ParameterExpression[] { return this._parameters; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitLambda(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitLambda(this); } update(body: Expression, parameters: ParameterExpression[]): LambdaExpression { if (body !== this._body || parameters !== this._parameters) { return new LambdaExpression(body, parameters); } return this; } compileToFunction(debug?: boolean): string { var comp = new LambdaCompiler(); comp.visit(this); var code = comp.code; code = code.replace(/"/g, "\\\""); // TODO: more escape sequences code = "new Function(\"return " + code + ";\")"; code = code.replace(/\r?\n|\r/g, ""); if (debug) { alert(code); } return code; } compile(debug?: boolean): TFunction { var code = this.compileToFunction(debug); return eval(code)(); } } class InvocationExpression extends Expression { _expression: Expression; _args: Expression[]; constructor(expression: Expression, args: Expression[]) { super(ExpressionType.Invoke); this._expression = expression; this._args = args; } get expression(): Expression { return this._expression; } get args(): Expression[] { return this._args; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitInvoke(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitInvoke(this); } update(expression: Expression, args: Expression[]): InvocationExpression { if (expression !== this._expression || args !== this._args) { return new InvocationExpression(expression, args); } return this; } } class FunctionCallExpression extends Expression { _expression: Expression; _method: string; _args: Expression[]; constructor(expression: Expression, methodName: string, args: Expression[]) { super(ExpressionType.Call); this._expression = expression; this._method = methodName; this._args = args; } get obj(): Expression { return this._expression; } get method(): string { return this._method; } get args(): Expression[] { return this._args; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitCall(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitCall(this); } update(expression: Expression, args: Expression[]): FunctionCallExpression { if (expression !== this._expression || args !== this._args) { return new FunctionCallExpression(expression, this._method, args); } return this; } } class IndexExpression extends Expression { _expression: Expression; _args: Expression[]; constructor(expression: Expression, args: Expression[]) { super(ExpressionType.Index); this._expression = expression; this._args = args; } get obj(): Expression { return this._expression; } get args(): Expression[] { return this._args; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitIndex(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitIndex(this); } update(expression: Expression, args: Expression[]): IndexExpression { if (expression !== this._expression || args !== this._args) { return new IndexExpression(expression, args); } return this; } } class NewExpression extends Expression { _type: string; _args: Expression[]; constructor(typeName: string, args: Expression[]) { super(ExpressionType.New); this._type = typeName; this._args = args; } get type(): string { return this._type; } get args(): Expression[] { return this._args; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitNew(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitNew(this); } update(args: Expression[]): NewExpression { if (args !== this._args) { return new NewExpression(this._type, args); } return this; } } class MemberExpression extends Expression { _obj: Expression; _member: string; constructor(obj: Expression, memberName: string) { super(ExpressionType.Member); this._obj = obj; this._member = memberName; } get obj(): Expression { return this._obj; } get member(): string { return this._member; } accept(visitor: ExpressionVisitor): Expression { return visitor.visitMember(this); } acceptGeneric(visitor: ExpressionVisitorGeneric): T { return visitor.visitMember(this); } update(obj: Expression): MemberExpression { if (obj !== this._obj) { return new MemberExpression(obj, this._member); } return this; } } class LambdaCompiler extends ExpressionVisitor { _stack: string[]; constructor() { super(); this._stack = []; } get code(): string { if (this._stack.length != 1) throw new Error("invalid code generation"); return this._stack[0]; } visitConstant(node: ConstantExpression): Expression { var value = ""; if (typeof node.value == "string") { value = "\"" + node.value + "\""; // TODO: escape characters } else if (node.value instanceof Array) { value = JSON.stringify(node.value); } else if (node.value === undefined) { value = "undefined"; } else { value = node.value.toString(); // TODO } this._stack.push(value); return node; } visitUnary(node: UnaryExpression): Expression { this.visit(node.operand); var o = this._stack.pop(); var i = ""; switch (node.nodeType) { case ExpressionType.Negate: i = "-"; break; case ExpressionType.UnaryPlus: i = "+"; break; case ExpressionType.Not: i = "!"; break; case ExpressionType.OnesComplement: i = "~"; break; } var res = "(" + i + "" + o + ")"; this._stack.push(res); return node; } visitBinary(node: BinaryExpression): Expression { this.visit(node.left); this.visit(node.right); var r = this._stack.pop(); var l = this._stack.pop(); var i = ""; switch (node.nodeType) { case ExpressionType.Add: i = "+"; break; case ExpressionType.Subtract: i = "-"; break; case ExpressionType.Multiply: i = "*"; break; case ExpressionType.Divide: i = "/"; break; case ExpressionType.Modulo: i = "%"; break; case ExpressionType.And: i = "&"; break; case ExpressionType.Or: i = "|"; break; case ExpressionType.AndAlso: i = "&&"; break; case ExpressionType.OrElse: i = "||"; break; case ExpressionType.ExclusiveOr: i = "^"; break; case ExpressionType.Equal: i = "==="; break; case ExpressionType.NotEqual: i = "!=="; break; case ExpressionType.LessThan: i = "<"; break; case ExpressionType.LessThanOrEqual: i = "<="; break; case ExpressionType.GreaterThan: i = ">"; break; case ExpressionType.GreaterThanOrEqual: i = ">="; break; case ExpressionType.LeftShift: i = "<<"; break; case ExpressionType.RightShift: i = ">>"; break; } var res = "(" + l + " " + i + " " + r + ")"; this._stack.push(res); return node; } visitConditional(node: ConditionalExpression): Expression { this.visit(node.test); this.visit(node.ifTrue); this.visit(node.ifFalse); var f = this._stack.pop(); var t = this._stack.pop(); var c = this._stack.pop(); var res = "(" + c + " ? " + t + " : " + f + ")"; this._stack.push(res); return node; } visitParameter(node: ParameterExpression): Expression { this._stack.push(node.name); return node; } visitLambda(node: LambdaExpression): Expression { this.visitMany(node.parameters); this.visit(node.body); var body = this._stack.pop(); var n = node.parameters.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var allArgs = args.join(", "); var res = "function(" + allArgs + ") { return " + body + "; }"; this._stack.push(res); return node; } visitInvoke(node: InvocationExpression): Expression { this.visit(node.expression); this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); var func = this._stack.pop(); var res = func + "(" + argList + ")"; this._stack.push(res); return node; } visitCall(node: FunctionCallExpression): Expression { var res = ""; if (node.obj !== null) { this.visit(node.obj); res = this._stack.pop() + "."; } this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); res += node.method + "(" + argList + ")"; this._stack.push(res); return node; } visitNew(node: NewExpression): Expression { this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); var res = "new " + node.type + "(" + argList + ")"; this._stack.push(res); return node; } visitMember(node: MemberExpression): Expression { var res = ""; if (node.obj !== null) { this.visit(node.obj); res = this._stack.pop() + "."; } res += node.member; this._stack.push(res); return node; } visitIndex(node: IndexExpression): Expression { this.visit(node.obj); var res = this._stack.pop(); this.visitMany(node.args); var n = node.args.length; var args = new Array(n); for (var i = 0; i < n; i++) { args[n - i - 1] = this._stack.pop(); } var argList = args.join(", "); res += "[" + argList + "]"; this._stack.push(res); return node; } } class FreeVariableScanner extends ExpressionVisitor { _stack: Expression[][]; _result: Expression[]; constructor() { super(); this._stack = []; this._result = []; } get result(): Expression[] { return this._result; } visitParameter(node: ParameterExpression): Expression { var found = false; for (var i = this._stack.length - 1; i >= 0; i--) { if (this._stack[i].indexOf(node) >= 0) { found = true; break; } } if (!found) { this._result.push(node); } return node; } visitLambda(node: LambdaExpression): Expression { this._stack.push(node.parameters); this.visit(node.body); this._stack.pop(); return node; } } enum ExpressionType { Constant, Parameter, Lambda, Add, Subtract, Multiply, Divide, Modulo, And, Or, AndAlso, OrElse, ExclusiveOr, Equal, NotEqual, LessThan, LessThanOrEqual, GreaterThan, GreaterThanOrEqual, LeftShift, RightShift, Invoke, Not, Negate, UnaryPlus, OnesComplement, Condition, New, Call, Member, Index, } class Binder extends ExpressionVisitor { _stack: Expression[][]; _resources: any; constructor(resources: any) { super(); this._stack = []; this._resources = resources; } visitParameter(node: ParameterExpression): Expression { var found = false; for (var i = this._stack.length - 1; i >= 0; i--) { if (this._stack[i].indexOf(node) >= 0) { found = true; break; } } if (!found) { return Expression.constant(this._resources[node.name]); } return node; } visitLambda(node: LambdaExpression): Expression { this._stack.push(node.parameters); this.visit(node.body); this._stack.pop(); return node; } } class PrintVisitor extends ExpressionVisitorGeneric { visitConstant(node: ConstantExpression): string { return "Constant(" + node.value + ")"; } visitParameter(node: ParameterExpression): string { return "Parameter(" + node.name + ")"; } visitBinary(node: BinaryExpression): string { return ExpressionType[node.nodeType] + "(" + this.visit(node.left) + ", " + this.visit(node.right) + ")"; } visitUnary(node: UnaryExpression): string { return ExpressionType[node.nodeType] + "(" + this.visit(node.operand) + ")"; } visitConditional(node: ConditionalExpression): string { return "Conditional(" + this.visit(node.test) + ", " + this.visit(node.ifTrue) + ", " + this.visit(node.ifFalse) + ")"; } visitLambda(node: LambdaExpression): string { var body = this.visit(node.body); var children = this.visitMany(node.parameters); children.unshift(body); return "Lambda(" + children.join(", ") + ")"; } visitInvoke(node: InvocationExpression): string { var expression = this.visit(node.expression); var children = this.visitMany(node.args); children.unshift(expression); return "Invoke(" + children.join(", ") + ")"; } visitCall(node: FunctionCallExpression): string { var children = this.visitMany(node.args); if (node.obj != null) { children.unshift(this.visit(node.obj)); } children.unshift(node.method); return "Call(" + children.join(", ") + ")"; } visitNew(node: NewExpression): string { var children = this.visitMany(node.args); children.unshift(node.type); return "New(" + children.join(", ") + ")"; } visitMember(node: MemberExpression): string { var children = []; if (node.obj != null) { children.unshift(this.visit(node.obj)); } children.unshift(node.member); return "Member(" + children.join(", ") + ")"; } visitIndex(node: IndexExpression): string { var children = this.visitMany(node.args); if (node.obj != null) { children.unshift(this.visit(node.obj)); } return "Index(" + children.join(", ") + ")"; } } class BonsaiVisitor extends ExpressionVisitorGeneric { visitConstant(node: ConstantExpression): any { return [ ":", node.value ]; } visitParameter(node: ParameterExpression): any { return ["$", node.name]; } visitBinary(node: BinaryExpression): any { var i = ""; switch (node.nodeType) { case ExpressionType.Add: i = "+"; break; case ExpressionType.Subtract: i = "-"; break; case ExpressionType.Multiply: i = "*"; break; case ExpressionType.Divide: i = "/"; break; case ExpressionType.Modulo: i = "%"; break; case ExpressionType.And: i = "&"; break; case ExpressionType.Or: i = "|"; break; case ExpressionType.AndAlso: i = "&&"; break; case ExpressionType.OrElse: i = "||"; break; case ExpressionType.ExclusiveOr: i = "^"; break; case ExpressionType.Equal: i = "==="; break; case ExpressionType.NotEqual: i = "!=="; break; case ExpressionType.LessThan: i = "<"; break; case ExpressionType.LessThanOrEqual: i = "<="; break; case ExpressionType.GreaterThan: i = ">"; break; case ExpressionType.GreaterThanOrEqual: i = ">="; break; case ExpressionType.LeftShift: i = "<<"; break; case ExpressionType.RightShift: i = ">>"; break; } return [ i, this.visit(node.left), this.visit(node.right) ]; } visitUnary(node: UnaryExpression): any { var i = ""; switch (node.nodeType) { case ExpressionType.Negate: i = "-"; break; case ExpressionType.UnaryPlus: i = "+"; break; case ExpressionType.Not: i = "!"; break; case ExpressionType.OnesComplement: i = "~"; break; } return [i, this.visit(node.operand)]; } visitConditional(node: ConditionalExpression): any { return ["?:", this.visit(node.test), this.visit(node.ifTrue), this.visit(node.ifFalse) ]; } visitLambda(node: LambdaExpression): any { return ["=>", this.visit(node.body), this.visitMany(node.parameters)]; } visitInvoke(node: InvocationExpression): any { var expression = this.visit(node.expression); var args = this.visitMany(node.args); return ["()", expression, args]; } visitCall(node: FunctionCallExpression): any { var args = []; if (node.obj != null) { args.unshift(this.visit(node.obj)); } args.unshift(this.visitMany(node.args)); return [".()", node.method, args]; } visitNew(node: NewExpression): any { var args = this.visitMany(node.args); return ["new", args]; } visitMember(node: MemberExpression): any { var res = [".", node.member]; if (node.obj != null) { res.unshift(this.visit(node.obj)); } return res; } visitIndex(node: IndexExpression): any { throw new Error("not implemented"); } }RxJS-4.1.0/src/core/expressions/index.html000066400000000000000000000005441266736161100204540ustar00rootroot00000000000000 TypeScript Expression APIs

    TypeScript Expression APIs

    RxJS-4.1.0/src/core/expressions/web.Debug.config000066400000000000000000000023661266736161100214540ustar00rootroot00000000000000 RxJS-4.1.0/src/core/expressions/web.Release.config000066400000000000000000000024621266736161100220030ustar00rootroot00000000000000 RxJS-4.1.0/src/core/expressions/web.config000066400000000000000000000005271266736161100204240ustar00rootroot00000000000000 RxJS-4.1.0/src/core/headers/000077500000000000000000000000001266736161100155055ustar00rootroot00000000000000RxJS-4.1.0/src/core/headers/aggregatesheader.js000066400000000000000000000016001266736161100213220ustar00rootroot00000000000000 // References var Observable = Rx.Observable, observableProto = Observable.prototype, BinaryDisposable = Rx.BinaryDisposable, AnonymousObservable = Rx.AnonymousObservable, AbstractObserver = Rx.internals.AbstractObserver, disposableEmpty = Rx.Disposable.empty, helpers = Rx.helpers, defaultComparer = helpers.defaultComparer, identity = helpers.identity, defaultSubComparer = helpers.defaultSubComparer, isFunction = helpers.isFunction, isPromise = helpers.isPromise, isArrayLike = helpers.isArrayLike, isIterable = helpers.isIterable, inherits = Rx.internals.inherits, observableFromPromise = Observable.fromPromise, observableFrom = Observable.from, bindCallback = Rx.internals.bindCallback, EmptyError = Rx.EmptyError, ObservableBase = Rx.ObservableBase, ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError; RxJS-4.1.0/src/core/headers/asyncheader.js000066400000000000000000000013001266736161100203230ustar00rootroot00000000000000 // Aliases var Observable = Rx.Observable, observableFromPromise = Observable.fromPromise, observableThrow = Observable.throwError, AnonymousObservable = Rx.AnonymousObservable, ObservableBase = Rx.ObservableBase, AsyncSubject = Rx.AsyncSubject, disposableCreate = Rx.Disposable.create, CompositeDisposable = Rx.CompositeDisposable, immediateScheduler = Rx.Scheduler.immediate, defaultScheduler = Rx.Scheduler['default'], inherits = Rx.internals.inherits, isScheduler = Rx.Scheduler.isScheduler, isPromise = Rx.helpers.isPromise, isFunction = Rx.helpers.isFunction, isIterable = Rx.helpers.isIterable, isArrayLike = Rx.helpers.isArrayLike; RxJS-4.1.0/src/core/headers/asyncintro.js000066400000000000000000000026131266736161100202360ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.binding', 'exports'], function (Rx, exports) { root.Rx = factory(root, exports, Rx); return root.Rx; }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('./rx')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/backpressureheader.js000066400000000000000000000015461266736161100217130ustar00rootroot00000000000000 // References var Observable = Rx.Observable, observableProto = Observable.prototype, AnonymousObservable = Rx.AnonymousObservable, AbstractObserver = Rx.internals.AbstractObserver, CompositeDisposable = Rx.CompositeDisposable, BinaryDisposable = Rx.BinaryDisposable, NAryDisposable = Rx.NAryDisposable, Notification = Rx.Notification, Subject = Rx.Subject, Observer = Rx.Observer, disposableEmpty = Rx.Disposable.empty, disposableCreate = Rx.Disposable.create, inherits = Rx.internals.inherits, addProperties = Rx.internals.addProperties, defaultScheduler = Rx.Scheduler['default'], currentThreadScheduler = Rx.Scheduler.currentThread, identity = Rx.helpers.identity, isScheduler = Rx.Scheduler.isScheduler, isFunction = Rx.helpers.isFunction, checkDisposed = Rx.Disposable.checkDisposed; RxJS-4.1.0/src/core/headers/basicheader-compat.js000066400000000000000000000024761266736161100215670ustar00rootroot00000000000000 // Defaults var noop = Rx.helpers.noop = function () { }, identity = Rx.helpers.identity = function (x) { return x; }, defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()), defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); }, defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); }, defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); }, defaultError = Rx.helpers.defaultError = function (err) { throw err; }, isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; }, isFunction = Rx.helpers.isFunction = (function () { var isFn = function (value) { return typeof value == 'function' || false; }; // fallback for older versions of Chrome and Safari if (isFn(/x/)) { isFn = function(value) { return typeof value == 'function' && toString.call(value) == '[object Function]'; }; } return isFn; }()); function cloneArray(arr) { var len = arr.length, a = new Array(len); for(var i = 0; i < len; i++) { a[i] = arr[i]; } return a; } RxJS-4.1.0/src/core/headers/basicheader.js000066400000000000000000000023131266736161100202740ustar00rootroot00000000000000 // Defaults var noop = Rx.helpers.noop = function () { }, identity = Rx.helpers.identity = function (x) { return x; }, defaultNow = Rx.helpers.defaultNow = Date.now, defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); }, defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); }, defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); }, defaultError = Rx.helpers.defaultError = function (err) { throw err; }, isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; }, isFunction = Rx.helpers.isFunction = (function () { var isFn = function (value) { return typeof value == 'function' || false; }; // fallback for older versions of Chrome and Safari if (isFn(/x/)) { isFn = function(value) { return typeof value == 'function' && toString.call(value) == '[object Function]'; }; } return isFn; }()); function cloneArray(arr) { for(var a = [], i = 0, len = arr.length; i < len; i++) { a.push(arr[i]); } return a;} RxJS-4.1.0/src/core/headers/bindingheader.js000066400000000000000000000015071266736161100206310ustar00rootroot00000000000000 var Observable = Rx.Observable, observableProto = Observable.prototype, AnonymousObservable = Rx.AnonymousObservable, ObservableBase = Rx.ObservableBase, Subject = Rx.Subject, AsyncSubject = Rx.AsyncSubject, Observer = Rx.Observer, ScheduledObserver = Rx.internals.ScheduledObserver, disposableCreate = Rx.Disposable.create, disposableEmpty = Rx.Disposable.empty, BinaryDisposable = Rx.BinaryDisposable, currentThreadScheduler = Rx.Scheduler.currentThread, isFunction = Rx.helpers.isFunction, inherits = Rx.internals.inherits, addProperties = Rx.internals.addProperties, checkDisposed = Rx.Disposable.checkDisposed; // Utilities function cloneArray(arr) { var len = arr.length, a = new Array(len); for(var i = 0; i < len; i++) { a[i] = arr[i]; } return a; } RxJS-4.1.0/src/core/headers/coincidenceheader.js000066400000000000000000000015261266736161100214630ustar00rootroot00000000000000 var Observable = Rx.Observable, ObservableBase = Rx.ObservableBase, AbstractObserver = Rx.internals.AbstractObserver, CompositeDisposable = Rx.CompositeDisposable, BinaryDisposable = Rx.BinaryDisposable, RefCountDisposable = Rx.RefCountDisposable, SingleAssignmentDisposable = Rx.SingleAssignmentDisposable, SerialDisposable = Rx.SerialDisposable, Subject = Rx.Subject, observableProto = Observable.prototype, observableEmpty = Observable.empty, observableNever = Observable.never, AnonymousObservable = Rx.AnonymousObservable, addRef = Rx.internals.addRef, inherits = Rx.internals.inherits, bindCallback = Rx.internals.bindCallback, noop = Rx.helpers.noop, isPromise = Rx.helpers.isPromise, isFunction = Rx.helpers.isFunction, observableFromPromise = Observable.fromPromise; RxJS-4.1.0/src/core/headers/core-bindingheader.js000066400000000000000000000015451266736161100215610ustar00rootroot00000000000000 var Observable = Rx.Observable, observableProto = Observable.prototype, AnonymousObservable = Rx.AnonymousObservable, ObservableBase = Rx.ObservableBase, Observer = Rx.Observer, AbstractObserver = Rx.internals.AbstractObserver, disposableCreate = Rx.Disposable.create, disposableEmpty = Rx.Disposable.empty, CompositeDisposable = Rx.CompositeDisposable, BinaryDisposable = Rx.BinaryDisposable, SerialDisposable = Rx.SerialDisposable, currentThreadScheduler = Rx.Scheduler.currentThread, isFunction = Rx.helpers.isFunction, inherits = Rx.internals.inherits, addProperties = Rx.internals.addProperties, checkDisposed = Rx.Disposable.checkDisposed; // Utilities function cloneArray(arr) { var len = arr.length, a = new Array(len); for(var i = 0; i < len; i++) { a[i] = arr[i]; } return a; } RxJS-4.1.0/src/core/headers/core-intro.js000066400000000000000000000026111266736161100201240ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.core'], function (Rx, exports) { return factory(root, exports, Rx); }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('./rx.core')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/core-testheader.js000066400000000000000000000012531266736161100211220ustar00rootroot00000000000000 // Defaults var Observer = Rx.Observer, Observable = Rx.Observable, Disposable = Rx.Disposable, disposableEmpty = Disposable.empty, disposableCreate = Disposable.create, CompositeDisposable = Rx.CompositeDisposable, SingleAssignmentDisposable = Rx.SingleAssignmentDisposable, Scheduler = Rx.Scheduler, ScheduledItem = Rx.internals.ScheduledItem, SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive, PriorityQueue = Rx.internals.PriorityQueue, inherits = Rx.internals.inherits, notImplemented = Rx.helpers.notImplemented, defaultComparer = Rx.helpers.defaultComparer = function (a, b) { return isEqual(a, b); }; RxJS-4.1.0/src/core/headers/coreheader.js000066400000000000000000000027531266736161100201530ustar00rootroot00000000000000// Defaults var noop = Rx.helpers.noop = function () { }, defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()), defaultError = Rx.helpers.defaultError = function (err) { throw err; }, isPromise = Rx.helpers.isPromise = function (p) { return !!p && !isFunction(p.subscribe) && isFunction(p.then); }, defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); } isFunction = Rx.helpers.isFunction = (function () { var isFn = function (value) { return typeof value == 'function' || false; }; // fallback for older versions of Chrome and Safari if (isFn(/x/)) { isFn = function(value) { return typeof value == 'function' && toString.call(value) == '[object Function]'; }; } return isFn; }()); var NotImplementedError = Rx.NotImplementedError = function (message) { this.message = message || 'This operation is not implemented'; Error.call(this); }; NotImplementedError.prototype = Error.prototype; var NotSupportedError = Rx.NotSupportedError = function (message) { this.message = message || 'This operation is not supported'; Error.call(this); }; NotSupportedError.prototype = Error.prototype; var notImplemented = Rx.helpers.notImplemented = function () { throw new NotImplementedError(); }; var notSupported = Rx.helpers.notSupported = function () { throw new NotSupportedError(); }; RxJS-4.1.0/src/core/headers/enumeratorheader.js000066400000000000000000000011221266736161100213710ustar00rootroot00000000000000 // Shim in iterator support var $iterator$ = (typeof Symbol === 'function' && Symbol.iterator) || '_es6shim_iterator_'; // Bug for mozilla version if (root.Set && typeof new root.Set()['@@iterator'] === 'function') { $iterator$ = '@@iterator'; } var doneEnumerator = Rx.doneEnumerator = { done: true, value: undefined }; var isIterable = Rx.helpers.isIterable = function (o) { return o && o[$iterator$] !== undefined; }; var isArrayLike = Rx.helpers.isArrayLike = function (o) { return o && o.length !== undefined; }; Rx.helpers.iterator = $iterator$; RxJS-4.1.0/src/core/headers/experimentalheader.js000066400000000000000000000021621266736161100217120ustar00rootroot00000000000000 // Aliases var Observable = Rx.Observable, observableProto = Observable.prototype, ObservableBase = Rx.ObservableBase, AbstractObserver = Rx.internals.AbstractObserver, FlatMapObservable = Rx.FlatMapObservable, observableConcat = Observable.concat, observableDefer = Observable.defer, observableEmpty = Observable.empty, disposableEmpty = Rx.Disposable.empty, CompositeDisposable = Rx.CompositeDisposable, SerialDisposable = Rx.SerialDisposable, SingleAssignmentDisposable = Rx.SingleAssignmentDisposable, Enumerable = Rx.internals.Enumerable, enumerableOf = Enumerable.of, currentThreadScheduler = Rx.Scheduler.currentThread, AsyncSubject = Rx.AsyncSubject, Observer = Rx.Observer, inherits = Rx.internals.inherits, addProperties = Rx.internals.addProperties, helpers = Rx.helpers, noop = helpers.noop, isPromise = helpers.isPromise, isFunction = helpers.isFunction, isIterable = Rx.helpers.isIterable, isArrayLike = Rx.helpers.isArrayLike, isScheduler = Rx.Scheduler.isScheduler, observableFromPromise = Observable.fromPromise; RxJS-4.1.0/src/core/headers/exports.js000066400000000000000000000006151266736161100175510ustar00rootroot00000000000000 if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { root.Rx = Rx; define(function() { return Rx; }); } else if (freeExports && freeModule) { // in Node.js or RingoJS if (moduleExports) { (freeModule.exports = Rx).Rx = Rx; } else { freeExports.Rx = Rx; } } else { // in a browser or Rhino root.Rx = Rx; } RxJS-4.1.0/src/core/headers/intro.js000066400000000000000000000020151266736161100171740ustar00rootroot00000000000000;(function (undefined) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); var Rx = { internals: {}, config: { Promise: root.Promise }, helpers: { } }; RxJS-4.1.0/src/core/headers/joinpatternsheader.js000066400000000000000000000007651266736161100217440ustar00rootroot00000000000000 // Aliases var Observable = Rx.Observable, observableProto = Observable.prototype, AnonymousObservable = Rx.AnonymousObservable, observableThrow = Observable.throwError, observerCreate = Rx.Observer.create, SingleAssignmentDisposable = Rx.SingleAssignmentDisposable, CompositeDisposable = Rx.CompositeDisposable, AbstractObserver = Rx.internals.AbstractObserver, noop = Rx.helpers.noop, inherits = Rx.internals.inherits, isFunction = Rx.helpers.isFunction; RxJS-4.1.0/src/core/headers/license.js000066400000000000000000000001561266736161100174670ustar00rootroot00000000000000// Copyright (c) Microsoft, All rights reserved. See License.txt in the project root for license information. RxJS-4.1.0/src/core/headers/liteextrasheader.js000066400000000000000000000030261266736161100214010ustar00rootroot00000000000000 // References var Observable = Rx.Observable, observableProto = Observable.prototype, observableNever = Observable.never, observableThrow = Observable['throw'], AnonymousObservable = Rx.AnonymousObservable, ObservableBase = Rx.ObservableBase, AnonymousObserver = Rx.AnonymousObserver, notificationCreateOnNext = Rx.Notification.createOnNext, notificationCreateOnError = Rx.Notification.createOnError, notificationCreateOnCompleted = Rx.Notification.createOnCompleted, Observer = Rx.Observer, observerCreate = Observer.create, AbstractObserver = Rx.internals.AbstractObserver, Subject = Rx.Subject, internals = Rx.internals, helpers = Rx.helpers, ScheduledObserver = internals.ScheduledObserver, SerialDisposable = Rx.SerialDisposable, SingleAssignmentDisposable = Rx.SingleAssignmentDisposable, CompositeDisposable = Rx.CompositeDisposable, BinaryDisposable = Rx.BinaryDisposable, RefCountDisposable = Rx.RefCountDisposable, disposableEmpty = Rx.Disposable.empty, immediateScheduler = Rx.Scheduler.immediate, defaultKeySerializer = helpers.defaultKeySerializer, addRef = Rx.internals.addRef, identity = helpers.identity, isPromise = helpers.isPromise, isFunction = helpers.isFunction, inherits = internals.inherits, bindCallback = internals.bindCallback, noop = helpers.noop, isScheduler = Rx.Scheduler.isScheduler, observableFromPromise = Observable.fromPromise, ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError; RxJS-4.1.0/src/core/headers/liteheader-compat.js000066400000000000000000000025001266736161100214270ustar00rootroot00000000000000 // Defaults var noop = Rx.helpers.noop = function () { }, identity = Rx.helpers.identity = function (x) { return x; }, defaultNow = Rx.helpers.defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date; }; }()), defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); }, defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); }, defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); }, defaultError = Rx.helpers.defaultError = function (err) { throw err; }, isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; }, isFunction = Rx.helpers.isFunction = (function () { var isFn = function (value) { return typeof value == 'function' || false; }; // fallback for older versions of Chrome and Safari if (isFn(/x/)) { isFn = function(value) { return typeof value == 'function' && toString.call(value) == '[object Function]'; }; } return isFn; }()); function cloneArray(arr) { var len = arr.length, a = new Array(len); for(var i = 0; i < len; i++) { a[i] = arr[i]; } return a; } RxJS-4.1.0/src/core/headers/liteheader.js000066400000000000000000000023631266736161100201550ustar00rootroot00000000000000 // Defaults var noop = Rx.helpers.noop = function () { }, identity = Rx.helpers.identity = function (x) { return x; }, defaultNow = Rx.helpers.defaultNow = Date.now, defaultComparer = Rx.helpers.defaultComparer = function (x, y) { return isEqual(x, y); }, defaultSubComparer = Rx.helpers.defaultSubComparer = function (x, y) { return x > y ? 1 : (x < y ? -1 : 0); }, defaultKeySerializer = Rx.helpers.defaultKeySerializer = function (x) { return x.toString(); }, defaultError = Rx.helpers.defaultError = function (err) { throw err; }, isPromise = Rx.helpers.isPromise = function (p) { return !!p && typeof p.subscribe !== 'function' && typeof p.then === 'function'; }, isFunction = Rx.helpers.isFunction = (function () { var isFn = function (value) { return typeof value == 'function' || false; }; // fallback for older versions of Chrome and Safari if (isFn(/x/)) { isFn = function(value) { return typeof value == 'function' && toString.call(value) == '[object Function]'; }; } return isFn; }()); function cloneArray(arr) { var len = arr.length, a = new Array(len); for(var i = 0; i < len; i++) { a[i] = arr[i]; } return a; } RxJS-4.1.0/src/core/headers/liteintro-compat.js000066400000000000000000000025651266736161100213450ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.lite.compat'], function (Rx, exports) { return factory(root, exports, Rx); }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('rx-lite-compat')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/liteintro.js000066400000000000000000000025471266736161100200640ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.lite'], function (Rx, exports) { return factory(root, exports, Rx); }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('rx-lite')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/litetestintro-compat.js000066400000000000000000000026151266736161100222410ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.lite.virtualtime.compat'], function (Rx, exports) { return factory(root, exports, Rx); }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('rx-lite-virtualtime-compat')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/litetestintro.js000066400000000000000000000025771266736161100207670ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.lite.virtualtime'], function (Rx, exports) { return factory(root, exports, Rx); }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('rx-lite-virtualtime')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/outro.js000066400000000000000000000000171266736161100172110ustar00rootroot00000000000000}.call(this)); RxJS-4.1.0/src/core/headers/sortingheader.js000066400000000000000000000004041266736161100206770ustar00rootroot00000000000000 var Observable = Rx.Observable, observableProto = Observable.prototype, AnonymousObservable = Rx.AnonymousObservable, observableNever = Observable.never, isEqual = Rx.internals.isEqual, defaultSubComparer = Rx.helpers.defaultSubComparer; RxJS-4.1.0/src/core/headers/subintro.js000066400000000000000000000025371266736161100177170ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx'], function (Rx, exports) { return factory(root, exports, Rx); }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('./rx')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/suboutro.js000066400000000000000000000000221266736161100177170ustar00rootroot00000000000000 return Rx; })); RxJS-4.1.0/src/core/headers/testheader.js000066400000000000000000000006321266736161100201740ustar00rootroot00000000000000 // Defaults var Observer = Rx.Observer, Observable = Rx.Observable, Notification = Rx.Notification, VirtualTimeScheduler = Rx.VirtualTimeScheduler, Disposable = Rx.Disposable, disposableEmpty = Disposable.empty, disposableCreate = Disposable.create, CompositeDisposable = Rx.CompositeDisposable, inherits = Rx.internals.inherits, defaultComparer = Rx.internals.isEqual; RxJS-4.1.0/src/core/headers/testintro.js000066400000000000000000000026171266736161100201040ustar00rootroot00000000000000;(function (factory) { var objectTypes = { 'function': true, 'object': true }; function checkGlobal(value) { return (value && value.Object === Object) ? value : null; } var freeExports = (objectTypes[typeof exports] && exports && !exports.nodeType) ? exports : null; var freeModule = (objectTypes[typeof module] && module && !module.nodeType) ? module : null; var freeGlobal = checkGlobal(freeExports && freeModule && typeof global === 'object' && global); var freeSelf = checkGlobal(objectTypes[typeof self] && self); var freeWindow = checkGlobal(objectTypes[typeof window] && window); var moduleExports = (freeModule && freeModule.exports === freeExports) ? freeExports : null; var thisGlobal = checkGlobal(objectTypes[typeof this] && this); var root = freeGlobal || ((freeWindow !== (thisGlobal && thisGlobal.window)) && freeWindow) || freeSelf || thisGlobal || Function('return this')(); // Because of build optimizers if (typeof define === 'function' && define.amd) { define(['./rx.virtualtime', 'exports'], function (Rx, exports) { root.Rx = factory(root, exports, Rx); return root.Rx; }); } else if (typeof module === 'object' && module && module.exports === freeExports) { module.exports = factory(root, module.exports, require('./rx')); } else { root.Rx = factory(root, {}, root.Rx); } }.call(this, function (root, exp, Rx, undefined) { RxJS-4.1.0/src/core/headers/timeheader.js000066400000000000000000000020721266736161100201530ustar00rootroot00000000000000 // Refernces var inherits = Rx.internals.inherits, AbstractObserver = Rx.internals.AbstractObserver, Observable = Rx.Observable, observableProto = Observable.prototype, AnonymousObservable = Rx.AnonymousObservable, ObservableBase = Rx.ObservableBase, observableDefer = Observable.defer, observableEmpty = Observable.empty, observableNever = Observable.never, observableThrow = Observable['throw'], observableFromArray = Observable.fromArray, defaultScheduler = Rx.Scheduler['default'], SingleAssignmentDisposable = Rx.SingleAssignmentDisposable, SerialDisposable = Rx.SerialDisposable, CompositeDisposable = Rx.CompositeDisposable, BinaryDisposable = Rx.BinaryDisposable, RefCountDisposable = Rx.RefCountDisposable, Subject = Rx.Subject, addRef = Rx.internals.addRef, normalizeTime = Rx.Scheduler.normalize, helpers = Rx.helpers, isPromise = helpers.isPromise, isFunction = helpers.isFunction, isScheduler = Rx.Scheduler.isScheduler, observableFromPromise = Observable.fromPromise; RxJS-4.1.0/src/core/headers/virtualtimeheader.js000066400000000000000000000005441266736161100215640ustar00rootroot00000000000000 // Aliases var Scheduler = Rx.Scheduler, ScheduledItem = Rx.internals.ScheduledItem, SchedulePeriodicRecursive = Rx.internals.SchedulePeriodicRecursive, PriorityQueue = Rx.internals.PriorityQueue, inherits = Rx.internals.inherits, defaultSubComparer = Rx.helpers.defaultSubComparer, notImplemented = Rx.helpers.notImplemented; RxJS-4.1.0/src/core/internal/000077500000000000000000000000001266736161100157065ustar00rootroot00000000000000RxJS-4.1.0/src/core/internal/bindcallback.js000066400000000000000000000012711266736161100206360ustar00rootroot00000000000000 var bindCallback = Rx.internals.bindCallback = function (func, thisArg, argCount) { if (typeof thisArg === 'undefined') { return func; } switch(argCount) { case 0: return function() { return func.call(thisArg) }; case 1: return function(arg) { return func.call(thisArg, arg); }; case 2: return function(value, index) { return func.call(thisArg, value, index); }; case 3: return function(value, index, collection) { return func.call(thisArg, value, index, collection); }; } return function() { return func.apply(thisArg, arguments); }; }; RxJS-4.1.0/src/core/internal/dontenums.js000066400000000000000000000004121266736161100202550ustar00rootroot00000000000000 /** Used to determine if values are of the language type Object */ var dontEnums = ['toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor'], dontEnumsLength = dontEnums.length; RxJS-4.1.0/src/core/internal/errors.js000066400000000000000000000030511266736161100175570ustar00rootroot00000000000000 var EmptyError = Rx.EmptyError = function() { this.message = 'Sequence contains no elements.'; Error.call(this); }; EmptyError.prototype = Object.create(Error.prototype); EmptyError.prototype.name = 'EmptyError'; var ObjectDisposedError = Rx.ObjectDisposedError = function() { this.message = 'Object has been disposed'; Error.call(this); }; ObjectDisposedError.prototype = Object.create(Error.prototype); ObjectDisposedError.prototype.name = 'ObjectDisposedError'; var ArgumentOutOfRangeError = Rx.ArgumentOutOfRangeError = function () { this.message = 'Argument out of range'; Error.call(this); }; ArgumentOutOfRangeError.prototype = Object.create(Error.prototype); ArgumentOutOfRangeError.prototype.name = 'ArgumentOutOfRangeError'; var NotSupportedError = Rx.NotSupportedError = function (message) { this.message = message || 'This operation is not supported'; Error.call(this); }; NotSupportedError.prototype = Object.create(Error.prototype); NotSupportedError.prototype.name = 'NotSupportedError'; var NotImplementedError = Rx.NotImplementedError = function (message) { this.message = message || 'This operation is not implemented'; Error.call(this); }; NotImplementedError.prototype = Object.create(Error.prototype); NotImplementedError.prototype.name = 'NotImplementedError'; var notImplemented = Rx.helpers.notImplemented = function () { throw new NotImplementedError(); }; var notSupported = Rx.helpers.notSupported = function () { throw new NotSupportedError(); }; RxJS-4.1.0/src/core/internal/isequal.js000066400000000000000000000206131266736161100177110ustar00rootroot00000000000000var argsTag = '[object Arguments]', arrayTag = '[object Array]', boolTag = '[object Boolean]', dateTag = '[object Date]', errorTag = '[object Error]', funcTag = '[object Function]', mapTag = '[object Map]', numberTag = '[object Number]', objectTag = '[object Object]', regexpTag = '[object RegExp]', setTag = '[object Set]', stringTag = '[object String]', weakMapTag = '[object WeakMap]'; var arrayBufferTag = '[object ArrayBuffer]', float32Tag = '[object Float32Array]', float64Tag = '[object Float64Array]', int8Tag = '[object Int8Array]', int16Tag = '[object Int16Array]', int32Tag = '[object Int32Array]', uint8Tag = '[object Uint8Array]', uint8ClampedTag = '[object Uint8ClampedArray]', uint16Tag = '[object Uint16Array]', uint32Tag = '[object Uint32Array]'; var typedArrayTags = {}; typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true; typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; var objectProto = Object.prototype, hasOwnProperty = objectProto.hasOwnProperty, objToString = objectProto.toString, MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; var keys = Object.keys || (function() { var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'), dontEnums = [ 'toString', 'toLocaleString', 'valueOf', 'hasOwnProperty', 'isPrototypeOf', 'propertyIsEnumerable', 'constructor' ], dontEnumsLength = dontEnums.length; return function(obj) { if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { throw new TypeError('Object.keys called on non-object'); } var result = [], prop, i; for (prop in obj) { if (hasOwnProperty.call(obj, prop)) { result.push(prop); } } if (hasDontEnumBug) { for (i = 0; i < dontEnumsLength; i++) { if (hasOwnProperty.call(obj, dontEnums[i])) { result.push(dontEnums[i]); } } } return result; }; }()); function equalObjects(object, other, equalFunc, isLoose, stackA, stackB) { var objProps = keys(object), objLength = objProps.length, othProps = keys(other), othLength = othProps.length; if (objLength !== othLength && !isLoose) { return false; } var index = objLength, key; while (index--) { key = objProps[index]; if (!(isLoose ? key in other : hasOwnProperty.call(other, key))) { return false; } } var skipCtor = isLoose; while (++index < objLength) { key = objProps[index]; var objValue = object[key], othValue = other[key], result; if (!(result === undefined ? equalFunc(objValue, othValue, isLoose, stackA, stackB) : result)) { return false; } skipCtor || (skipCtor = key === 'constructor'); } if (!skipCtor) { var objCtor = object.constructor, othCtor = other.constructor; if (objCtor !== othCtor && ('constructor' in object && 'constructor' in other) && !(typeof objCtor === 'function' && objCtor instanceof objCtor && typeof othCtor === 'function' && othCtor instanceof othCtor)) { return false; } } return true; } function equalByTag(object, other, tag) { switch (tag) { case boolTag: case dateTag: return +object === +other; case errorTag: return object.name === other.name && object.message === other.message; case numberTag: return (object !== +object) ? other !== +other : object === +other; case regexpTag: case stringTag: return object === (other + ''); } return false; } var isObject = Rx.internals.isObject = function(value) { var type = typeof value; return !!value && (type === 'object' || type === 'function'); }; function isObjectLike(value) { return !!value && typeof value === 'object'; } function isLength(value) { return typeof value === 'number' && value > -1 && value % 1 === 0 && value <= MAX_SAFE_INTEGER; } var isHostObject = (function() { try { Object({ 'toString': 0 } + ''); } catch(e) { return function() { return false; }; } return function(value) { return typeof value.toString !== 'function' && typeof (value + '') === 'string'; }; }()); function isTypedArray(value) { return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; } var isArray = Array.isArray || function(value) { return isObjectLike(value) && isLength(value.length) && objToString.call(value) === arrayTag; }; function arraySome (array, predicate) { var index = -1, length = array.length; while (++index < length) { if (predicate(array[index], index, array)) { return true; } } return false; } function equalArrays(array, other, equalFunc, isLoose, stackA, stackB) { var index = -1, arrLength = array.length, othLength = other.length; if (arrLength !== othLength && !(isLoose && othLength > arrLength)) { return false; } // Ignore non-index properties. while (++index < arrLength) { var arrValue = array[index], othValue = other[index], result; if (result !== undefined) { if (result) { continue; } return false; } // Recursively compare arrays (susceptible to call stack limits). if (isLoose) { if (!arraySome(other, function(othValue) { return arrValue === othValue || equalFunc(arrValue, othValue, isLoose, stackA, stackB); })) { return false; } } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, isLoose, stackA, stackB))) { return false; } } return true; } function baseIsEqualDeep(object, other, equalFunc, isLoose, stackA, stackB) { var objIsArr = isArray(object), othIsArr = isArray(other), objTag = arrayTag, othTag = arrayTag; if (!objIsArr) { objTag = objToString.call(object); if (objTag === argsTag) { objTag = objectTag; } else if (objTag !== objectTag) { objIsArr = isTypedArray(object); } } if (!othIsArr) { othTag = objToString.call(other); if (othTag === argsTag) { othTag = objectTag; } } var objIsObj = objTag === objectTag && !isHostObject(object), othIsObj = othTag === objectTag && !isHostObject(other), isSameTag = objTag === othTag; if (isSameTag && !(objIsArr || objIsObj)) { return equalByTag(object, other, objTag); } if (!isLoose) { var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); if (objIsWrapped || othIsWrapped) { return equalFunc(objIsWrapped ? object.value() : object, othIsWrapped ? other.value() : other, isLoose, stackA, stackB); } } if (!isSameTag) { return false; } // Assume cyclic values are equal. // For more information on detecting circular references see https://es5.github.io/#JO. stackA || (stackA = []); stackB || (stackB = []); var length = stackA.length; while (length--) { if (stackA[length] === object) { return stackB[length] === other; } } // Add `object` and `other` to the stack of traversed objects. stackA.push(object); stackB.push(other); var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, isLoose, stackA, stackB); stackA.pop(); stackB.pop(); return result; } function baseIsEqual(value, other, isLoose, stackA, stackB) { if (value === other) { return true; } if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) { return value !== value && other !== other; } return baseIsEqualDeep(value, other, baseIsEqual, isLoose, stackA, stackB); } var isEqual = Rx.internals.isEqual = function (value, other) { return baseIsEqual(value, other); }; RxJS-4.1.0/src/core/internal/map.js000066400000000000000000000017271266736161100170300ustar00rootroot00000000000000 var Map = root.Map || (function () { function Map() { this.size = 0; this._values = []; this._keys = []; } Map.prototype['delete'] = function (key) { var i = this._keys.indexOf(key); if (i === -1) { return false; } this._values.splice(i, 1); this._keys.splice(i, 1); this.size--; return true; }; Map.prototype.get = function (key) { var i = this._keys.indexOf(key); return i === -1 ? undefined : this._values[i]; }; Map.prototype.set = function (key, value) { var i = this._keys.indexOf(key); if (i === -1) { this._keys.push(key); this._values.push(value); this.size++; } else { this._values[i] = value; } return this; }; Map.prototype.forEach = function (cb, thisArg) { for (var i = 0; i < this.size; i++) { cb.call(thisArg, this._values[i], this._keys[i]); } }; return Map; }()); RxJS-4.1.0/src/core/internal/polyfills.js000066400000000000000000000235551266736161100202730ustar00rootroot00000000000000 // Utilities var toString = Object.prototype.toString; var arrayClass = '[object Array]', funcClass = '[object Function]', stringClass = '[object String]'; if (!Array.prototype.forEach) { Array.prototype.forEach = function (callback, thisArg) { var T, k; if (this == null) { throw new TypeError(' this is null or not defined'); } var O = Object(this); var len = O.length >>> 0; if (typeof callback !== 'function') { throw new TypeError(callback + ' is not a function'); } if (arguments.length > 1) { T = thisArg; } k = 0; while (k < len) { var kValue; if (k in O) { kValue = O[k]; callback.call(T, kValue, k, O); } k++; } }; } var boxedString = Object('a'), splitString = boxedString[0] !== 'a' || !(0 in boxedString); if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = Object(this), self = splitString && toString.call(this) === stringClass ? this.split('') : object, length = self.length >>> 0, thisp = arguments[1]; if (toString.call(fun) !== funcClass) { throw new TypeError(fun + ' is not a function'); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = Object(this), self = splitString && toString.call(this) === stringClass ? this.split('') : object, length = self.length >>> 0, result = new Array(length), thisp = arguments[1]; if (toString.call(fun) !== funcClass) { throw new TypeError(fun + ' is not a function'); } for (var i = 0; i < length; i++) { if (i in self) { result[i] = fun.call(thisp, self[i], i, object); } } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function (predicate) { var results = [], item, t = new Object(this); for (var i = 0, len = t.length >>> 0; i < len; i++) { item = t[i]; if (i in t && predicate.call(arguments[1], item, i, t)) { results.push(item); } } return results; }; } if (!Array.isArray) { Array.isArray = function (arg) { return toString.call(arg) === arrayClass; }; } if (!Array.prototype.indexOf) { Array.prototype.indexOf = function indexOf(searchElement) { var t = Object(this); var len = t.length >>> 0; if (len === 0) { return -1; } var n = 0; if (arguments.length > 1) { n = Number(arguments[1]); if (n !== n) { n = 0; } else if (n !== 0 && n !== Infinity && n !== -Infinity) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } } if (n >= len) { return -1; } var k = n >= 0 ? n : Math.max(len - Math.abs(n), 0); for (; k < len; k++) { if (k in t && t[k] === searchElement) { return k; } } return -1; }; } // Fix for Tessel if (!Object.prototype.propertyIsEnumerable) { Object.prototype.propertyIsEnumerable = function (key) { for (var k in this) { if (k === key) { return true; } } return false; }; } if (!Object.keys) { Object.keys = (function() { 'use strict'; var hasOwnProperty = Object.prototype.hasOwnProperty, hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'); return function(obj) { if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) { throw new TypeError('Object.keys called on non-object'); } var result = [], prop, i; for (prop in obj) { if (hasOwnProperty.call(obj, prop)) { result.push(prop); } } if (hasDontEnumBug) { for (i = 0; i < dontEnumsLength; i++) { if (hasOwnProperty.call(obj, dontEnums[i])) { result.push(dontEnums[i]); } } } return result; }; }()); } if (typeof Object.create !== 'function') { // Production steps of ECMA-262, Edition 5, 15.2.3.5 // Reference: http://es5.github.io/#x15.2.3.5 Object.create = (function() { function Temp() {} var hasOwn = Object.prototype.hasOwnProperty; return function (O) { if (typeof O !== 'object') { throw new TypeError('Object prototype may only be an Object or null'); } Temp.prototype = O; var obj = new Temp(); Temp.prototype = null; if (arguments.length > 1) { // Object.defineProperties does ToObject on its first argument. var Properties = Object(arguments[1]); for (var prop in Properties) { if (hasOwn.call(Properties, prop)) { obj[prop] = Properties[prop]; } } } // 5. Return obj return obj; }; })(); } root.Element && root.Element.prototype.attachEvent && !root.Element.prototype.addEventListener && (function () { function addMethod(name, fn) { Window.prototype[name] = HTMLDocument.prototype[name] = Element.prototype[name] = fn; } addMethod('addEventListener', function (type, listener) { var target = this; var listeners = target._c1_listeners = target._c1_listeners || {}; var typeListeners = listeners[type] = listeners[type] || []; target.attachEvent('on' + type, typeListeners.event = function (e) { e || (e = root.event); var documentElement = target.document && target.document.documentElement || target.documentElement || { scrollLeft: 0, scrollTop: 0 }; e.currentTarget = target; e.pageX = e.clientX + documentElement.scrollLeft; e.pageY = e.clientY + documentElement.scrollTop; e.preventDefault = function () { e.bubbledKeyCode = e.keyCode; if (e.ctrlKey) { try { e.keyCode = 0; } catch (e) { } } e.defaultPrevented = true; e.returnValue = false; e.modified = true; e.returnValue = false; }; e.stopImmediatePropagation = function () { immediatePropagation = false; e.cancelBubble = true; }; e.stopPropagation = function () { e.cancelBubble = true; }; e.relatedTarget = e.fromElement || null; e.target = e.srcElement || target; e.timeStamp = +new Date(); // Normalize key events switch(e.type) { case 'keypress': var c = ('charCode' in e ? e.charCode : e.keyCode); if (c === 10) { c = 0; e.keyCode = 13; } else if (c === 13 || c === 27) { c = 0; } else if (c === 3) { c = 99; } e.charCode = c; e.keyChar = e.charCode ? String.fromCharCode(e.charCode) : ''; break; } var copiedEvent = {}; for (var prop in e) { copiedEvent[prop] = e[prop]; } for (var i = 0, typeListenersCache = [].concat(typeListeners), typeListenerCache, immediatePropagation = true; immediatePropagation && (typeListenerCache = typeListenersCache[i]); ++i) { for (var ii = 0, typeListener; typeListener = typeListeners[ii]; ++ii) { if (typeListener === typeListenerCache) { typeListener.call(target, copiedEvent); break; } } } }); typeListeners.push(listener); }); addMethod('removeEventListener', function (type, listener) { var target = this; var listeners = target._c1_listeners = target._c1_listeners || {}; var typeListeners = listeners[type] = listeners[type] || []; for (var i = typeListeners.length - 1, typeListener; typeListener = typeListeners[i]; --i) { if (typeListener === listener) { typeListeners.splice(i, 1); break; } } !typeListeners.length && typeListeners.event && target.detachEvent('on' + type, typeListeners.event); }); addMethod('dispatchEvent', function (e) { var target = this; var type = e.type; var listeners = target._c1_listeners = target._c1_listeners || {}; var typeListeners = listeners[type] = listeners[type] || []; try { return target.fireEvent('on' + type, e); } catch (err) { return typeListeners.event && typeListeners.event(e); } }); function ready() { if (ready.interval && document.body) { ready.interval = clearInterval(ready.interval); document.dispatchEvent(new CustomEvent('DOMContentLoaded')); } } ready.interval = setInterval(ready, 1); root.addEventListener('load', ready); }()); (!root.CustomEvent || typeof root.CustomEvent === 'object') && (function() { function CustomEvent (type, params) { var event; params = params || { bubbles: false, cancelable: false, detail: undefined }; try { if (document.createEvent) { event = document.createEvent('CustomEvent'); event.initCustomEvent(type, params.bubbles, params.cancelable, params.detail); } else if (document.createEventObject) { event = document.createEventObject(); } } catch (error) { event = document.createEvent('Event'); event.initEvent(type, params.bubbles, params.cancelable); event.detail = params.detail; } return event; } root.CustomEvent && (CustomEvent.prototype = root.CustomEvent.prototype); root.CustomEvent = CustomEvent; }()); RxJS-4.1.0/src/core/internal/priorityqueue.js000066400000000000000000000043741266736161100212020ustar00rootroot00000000000000 function IndexedItem(id, value) { this.id = id; this.value = value; } IndexedItem.prototype.compareTo = function (other) { var c = this.value.compareTo(other.value); c === 0 && (c = this.id - other.id); return c; }; var PriorityQueue = Rx.internals.PriorityQueue = function (capacity) { this.items = new Array(capacity); this.length = 0; }; var priorityProto = PriorityQueue.prototype; priorityProto.isHigherPriority = function (left, right) { return this.items[left].compareTo(this.items[right]) < 0; }; priorityProto.percolate = function (index) { if (index >= this.length || index < 0) { return; } var parent = index - 1 >> 1; if (parent < 0 || parent === index) { return; } if (this.isHigherPriority(index, parent)) { var temp = this.items[index]; this.items[index] = this.items[parent]; this.items[parent] = temp; this.percolate(parent); } }; priorityProto.heapify = function (index) { +index || (index = 0); if (index >= this.length || index < 0) { return; } var left = 2 * index + 1, right = 2 * index + 2, first = index; if (left < this.length && this.isHigherPriority(left, first)) { first = left; } if (right < this.length && this.isHigherPriority(right, first)) { first = right; } if (first !== index) { var temp = this.items[index]; this.items[index] = this.items[first]; this.items[first] = temp; this.heapify(first); } }; priorityProto.peek = function () { return this.items[0].value; }; priorityProto.removeAt = function (index) { this.items[index] = this.items[--this.length]; this.items[this.length] = undefined; this.heapify(); }; priorityProto.dequeue = function () { var result = this.peek(); this.removeAt(0); return result; }; priorityProto.enqueue = function (item) { var index = this.length++; this.items[index] = new IndexedItem(PriorityQueue.count++, item); this.percolate(index); }; priorityProto.remove = function (item) { for (var i = 0; i < this.length; i++) { if (this.items[i].value === item) { this.removeAt(i); return true; } } return false; }; PriorityQueue.count = 0; RxJS-4.1.0/src/core/internal/trycatch.js000066400000000000000000000007371266736161100200740ustar00rootroot00000000000000 var errorObj = {e: {}}; function tryCatcherGen(tryCatchTarget) { return function tryCatcher() { try { return tryCatchTarget.apply(this, arguments); } catch (e) { errorObj.e = e; return errorObj; } }; } var tryCatch = Rx.internals.tryCatch = function tryCatch(fn) { if (!isFunction(fn)) { throw new TypeError('fn must be a function'); } return tryCatcherGen(fn); }; function thrower(e) { throw e; } RxJS-4.1.0/src/core/internal/util.js000066400000000000000000000017451266736161100172300ustar00rootroot00000000000000 var hasProp = {}.hasOwnProperty, slice = Array.prototype.slice; var inherits = Rx.internals.inherits = function (child, parent) { function __() { this.constructor = child; } __.prototype = parent.prototype; child.prototype = new __(); }; var addProperties = Rx.internals.addProperties = function (obj) { for(var sources = [], i = 1, len = arguments.length; i < len; i++) { sources.push(arguments[i]); } for (var idx = 0, ln = sources.length; idx < ln; idx++) { var source = sources[idx]; for (var prop in source) { obj[prop] = source[prop]; } } }; // Rx Utils var addRef = Rx.internals.addRef = function (xs, r) { return new AnonymousObservable(function (observer) { return new BinaryDisposable(r.getDisposable(), xs.subscribe(observer)); }); }; function arrayInitialize(count, factory) { var a = new Array(count); for (var i = 0; i < count; i++) { a[i] = factory(); } return a; } RxJS-4.1.0/src/core/joins/000077500000000000000000000000001266736161100152145ustar00rootroot00000000000000RxJS-4.1.0/src/core/joins/activeplan.js000066400000000000000000000025651266736161100177100ustar00rootroot00000000000000 function ActivePlan(joinObserverArray, onNext, onCompleted) { this.joinObserverArray = joinObserverArray; this.onNext = onNext; this.onCompleted = onCompleted; this.joinObservers = new Map(); for (var i = 0, len = this.joinObserverArray.length; i < len; i++) { var joinObserver = this.joinObserverArray[i]; this.joinObservers.set(joinObserver, joinObserver); } } ActivePlan.prototype.dequeue = function () { this.joinObservers.forEach(function (v) { v.queue.shift(); }); }; ActivePlan.prototype.match = function () { var i, len, hasValues = true; for (i = 0, len = this.joinObserverArray.length; i < len; i++) { if (this.joinObserverArray[i].queue.length === 0) { hasValues = false; break; } } if (hasValues) { var firstValues = [], isCompleted = false; for (i = 0, len = this.joinObserverArray.length; i < len; i++) { firstValues.push(this.joinObserverArray[i].queue[0]); this.joinObserverArray[i].queue[0].kind === 'C' && (isCompleted = true); } if (isCompleted) { this.onCompleted(); } else { this.dequeue(); var values = []; for (i = 0, len = firstValues.length; i < firstValues.length; i++) { values.push(firstValues[i].value); } this.onNext.apply(this, values); } } }; RxJS-4.1.0/src/core/joins/joinobserver.js000066400000000000000000000031471266736161100202660ustar00rootroot00000000000000 var JoinObserver = (function (__super__) { inherits(JoinObserver, __super__); function JoinObserver(source, onError) { __super__.call(this); this.source = source; this.onError = onError; this.queue = []; this.activePlans = []; this.subscription = new SingleAssignmentDisposable(); this.isDisposed = false; } var JoinObserverPrototype = JoinObserver.prototype; JoinObserverPrototype.next = function (notification) { if (!this.isDisposed) { if (notification.kind === 'E') { return this.onError(notification.error); } this.queue.push(notification); var activePlans = this.activePlans.slice(0); for (var i = 0, len = activePlans.length; i < len; i++) { activePlans[i].match(); } } }; JoinObserverPrototype.error = noop; JoinObserverPrototype.completed = noop; JoinObserverPrototype.addActivePlan = function (activePlan) { this.activePlans.push(activePlan); }; JoinObserverPrototype.subscribe = function () { this.subscription.setDisposable(this.source.materialize().subscribe(this)); }; JoinObserverPrototype.removeActivePlan = function (activePlan) { this.activePlans.splice(this.activePlans.indexOf(activePlan), 1); this.activePlans.length === 0 && this.dispose(); }; JoinObserverPrototype.dispose = function () { __super__.prototype.dispose.call(this); if (!this.isDisposed) { this.isDisposed = true; this.subscription.dispose(); } }; return JoinObserver; } (AbstractObserver)); RxJS-4.1.0/src/core/joins/pattern.js000066400000000000000000000021621266736161100172300ustar00rootroot00000000000000 /** * @constructor * Represents a join pattern over observable sequences. */ function Pattern(patterns) { this.patterns = patterns; } /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ Pattern.prototype.and = function (other) { return new Pattern(this.patterns.concat(other)); }; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ Pattern.prototype.thenDo = function (selector) { return new Plan(this, selector); }; RxJS-4.1.0/src/core/joins/plan.js000066400000000000000000000027341266736161100165120ustar00rootroot00000000000000 function Plan(expression, selector) { this.expression = expression; this.selector = selector; } function handleOnError(o) { return function (e) { o.onError(e); }; } function handleOnNext(self, observer) { return function onNext () { var result = tryCatch(self.selector).apply(self, arguments); if (result === errorObj) { return observer.onError(result.e); } observer.onNext(result); }; } Plan.prototype.activate = function (externalSubscriptions, observer, deactivate) { var joinObservers = [], errHandler = handleOnError(observer); for (var i = 0, len = this.expression.patterns.length; i < len; i++) { joinObservers.push(planCreateObserver(externalSubscriptions, this.expression.patterns[i], errHandler)); } var activePlan = new ActivePlan(joinObservers, handleOnNext(this, observer), function () { for (var j = 0, jlen = joinObservers.length; j < jlen; j++) { joinObservers[j].removeActivePlan(activePlan); } deactivate(activePlan); }); for (i = 0, len = joinObservers.length; i < len; i++) { joinObservers[i].addActivePlan(activePlan); } return activePlan; }; function planCreateObserver(externalSubscriptions, observable, onError) { var entry = externalSubscriptions.get(observable); if (!entry) { var observer = new JoinObserver(observable, onError); externalSubscriptions.set(observable, observer); return observer; } return entry; } RxJS-4.1.0/src/core/linq/000077500000000000000000000000001266736161100150355ustar00rootroot00000000000000RxJS-4.1.0/src/core/linq/connectableobservable.js000066400000000000000000000042621266736161100217210ustar00rootroot00000000000000 var RefCountObservable = (function (__super__) { inherits(RefCountObservable, __super__); function RefCountObservable(source) { this.source = source; this._count = 0; this._connectableSubscription = null; __super__.call(this); } RefCountObservable.prototype.subscribeCore = function (o) { var subscription = this.source.subscribe(o); ++this._count === 1 && (this._connectableSubscription = this.source.connect()); return new RefCountDisposable(this, subscription); }; function RefCountDisposable(p, s) { this._p = p; this._s = s; this.isDisposed = false; } RefCountDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; this._s.dispose(); --this._p._count === 0 && this._p._connectableSubscription.dispose(); } }; return RefCountObservable; }(ObservableBase)); var ConnectableObservable = Rx.ConnectableObservable = (function (__super__) { inherits(ConnectableObservable, __super__); function ConnectableObservable(source, subject) { this.source = source; this._connection = null; this._source = source.asObservable(); this._subject = subject; __super__.call(this); } function ConnectDisposable(parent, subscription) { this._p = parent; this._s = subscription; } ConnectDisposable.prototype.dispose = function () { if (this._s) { this._s.dispose(); this._s = null; this._p._connection = null; } }; ConnectableObservable.prototype.connect = function () { if (!this._connection) { if (this._subject.isStopped) { return disposableEmpty; } var subscription = this._source.subscribe(this._subject); this._connection = new ConnectDisposable(this, subscription); } return this._connection; }; ConnectableObservable.prototype._subscribe = function (o) { return this._subject.subscribe(o); }; ConnectableObservable.prototype.refCount = function () { return new RefCountObservable(this); }; return ConnectableObservable; }(Observable)); RxJS-4.1.0/src/core/linq/enumerable/000077500000000000000000000000001266736161100171545ustar00rootroot00000000000000RxJS-4.1.0/src/core/linq/enumerable/while.js000066400000000000000000000011121266736161100206150ustar00rootroot00000000000000 var WhileEnumerable = (function(__super__) { inherits(WhileEnumerable, __super__); function WhileEnumerable(c, s) { this.c = c; this.s = s; } WhileEnumerable.prototype[$iterator$] = function () { var self = this; return { next: function () { return self.c() ? { done: false, value: self.s } : { done: true, value: void 0 }; } }; }; return WhileEnumerable; }(Enumerable)); function enumerableWhile(condition, source) { return new WhileEnumerable(condition, source); } RxJS-4.1.0/src/core/linq/groupedobservable.js000066400000000000000000000017301266736161100211060ustar00rootroot00000000000000 var UnderlyingObservable = (function (__super__) { inherits(UnderlyingObservable, __super__); function UnderlyingObservable(m, u) { this._m = m; this._u = u; __super__.call(this); } UnderlyingObservable.prototype.subscribeCore = function (o) { return new BinaryDisposable(this._m.getDisposable(), this._u.subscribe(o)); }; return UnderlyingObservable; }(ObservableBase)); var GroupedObservable = (function (__super__) { inherits(GroupedObservable, __super__); function GroupedObservable(key, underlyingObservable, mergedDisposable) { __super__.call(this); this.key = key; this.underlyingObservable = !mergedDisposable ? underlyingObservable : new UnderlyingObservable(mergedDisposable, underlyingObservable); } GroupedObservable.prototype._subscribe = function (o) { return this.underlyingObservable.subscribe(o); }; return GroupedObservable; }(Observable)); RxJS-4.1.0/src/core/linq/observable/000077500000000000000000000000001266736161100171615ustar00rootroot00000000000000RxJS-4.1.0/src/core/linq/observable/_extremaby.js000066400000000000000000000030341266736161100216560ustar00rootroot00000000000000 var ExtremaByObservable = (function (__super__) { inherits(ExtremaByObservable, __super__); function ExtremaByObservable(source, k, c) { this.source = source; this._k = k; this._c = c; __super__.call(this); } ExtremaByObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new ExtremaByObserver(o, this._k, this._c)); }; return ExtremaByObservable; }(ObservableBase)); var ExtremaByObserver = (function (__super__) { inherits(ExtremaByObserver, __super__); function ExtremaByObserver(o, k, c) { this._o = o; this._k = k; this._c = c; this._v = null; this._hv = false; this._l = []; __super__.call(this); } ExtremaByObserver.prototype.next = function (x) { var key = tryCatch(this._k)(x); if (key === errorObj) { return this._o.onError(key.e); } var comparison = 0; if (!this._hv) { this._hv = true; this._v = key; } else { comparison = tryCatch(this._c)(key, this._v); if (comparison === errorObj) { return this._o.onError(comparison.e); } } if (comparison > 0) { this._v = key; this._l = []; } if (comparison >= 0) { this._l.push(x); } }; ExtremaByObserver.prototype.error = function (e) { this._o.onError(e); }; ExtremaByObserver.prototype.completed = function () { this._o.onNext(this._l); this._o.onCompleted(); }; return ExtremaByObserver; }(AbstractObserver)); RxJS-4.1.0/src/core/linq/observable/_findvalue.js000066400000000000000000000023051266736161100216330ustar00rootroot00000000000000 var FindValueObserver = (function(__super__) { inherits(FindValueObserver, __super__); function FindValueObserver(observer, source, callback, yieldIndex) { this._o = observer; this._s = source; this._cb = callback; this._y = yieldIndex; this._i = 0; __super__.call(this); } FindValueObserver.prototype.next = function (x) { var shouldRun = tryCatch(this._cb)(x, this._i, this._s); if (shouldRun === errorObj) { return this._o.onError(shouldRun.e); } if (shouldRun) { this._o.onNext(this._y ? this._i : x); this._o.onCompleted(); } else { this._i++; } }; FindValueObserver.prototype.error = function (e) { this._o.onError(e); }; FindValueObserver.prototype.completed = function () { this._y && this._o.onNext(-1); this._o.onCompleted(); }; return FindValueObserver; }(AbstractObserver)); function findValue (source, predicate, thisArg, yieldIndex) { var callback = bindCallback(predicate, thisArg, 3); return new AnonymousObservable(function (o) { return source.subscribe(new FindValueObserver(o, source, callback, yieldIndex)); }, source); } RxJS-4.1.0/src/core/linq/observable/_firstonly.js000066400000000000000000000001431266736161100217050ustar00rootroot00000000000000 function firstOnly(x) { if (x.length === 0) { throw new EmptyError(); } return x[0]; } RxJS-4.1.0/src/core/linq/observable/_observabletimer.js000066400000000000000000000011031266736161100230360ustar00rootroot00000000000000 var TimerObservable = (function(__super__) { inherits(TimerObservable, __super__); function TimerObservable(dt, s) { this._dt = dt; this._s = s; __super__.call(this); } TimerObservable.prototype.subscribeCore = function (o) { return this._s.scheduleFuture(o, this._dt, scheduleMethod); }; function scheduleMethod(s, o) { o.onNext(0); o.onCompleted(); } return TimerObservable; }(ObservableBase)); function _observableTimer(dueTime, scheduler) { return new TimerObservable(dueTime, scheduler); } RxJS-4.1.0/src/core/linq/observable/_observabletimerdateandperiod.js000066400000000000000000000010011266736161100255570ustar00rootroot00000000000000 function observableTimerDateAndPeriod(dueTime, period, scheduler) { return new AnonymousObservable(function (observer) { var d = dueTime, p = normalizeTime(period); return scheduler.scheduleRecursiveFuture(0, d, function (count, self) { if (p > 0) { var now = scheduler.now(); d = new Date(d.getTime() + p); d.getTime() <= now && (d = new Date(now + p)); } observer.onNext(count); self(count + 1, new Date(d)); }); }); } RxJS-4.1.0/src/core/linq/observable/_observabletimertimespanandperiod.js000066400000000000000000000007221266736161100264730ustar00rootroot00000000000000 function observableTimerTimeSpanAndPeriod(dueTime, period, scheduler) { return dueTime === period ? new AnonymousObservable(function (observer) { return scheduler.schedulePeriodic(0, period, function (count) { observer.onNext(count); return count + 1; }); }) : observableDefer(function () { return observableTimerDateAndPeriod(new Date(scheduler.now() + dueTime), period, scheduler); }); } RxJS-4.1.0/src/core/linq/observable/amb.js000066400000000000000000000012061266736161100202550ustar00rootroot00000000000000 function amb(p, c) { return p.amb(c); } /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ Observable.amb = function () { var acc = observableNever(), items; if (Array.isArray(arguments[0])) { items = arguments[0]; } else { var len = arguments.length; items = new Array(items); for(var i = 0; i < len; i++) { items[i] = arguments[i]; } } for (var i = 0, len = items.length; i < len; i++) { acc = amb(acc, items[i]); } return acc; }; RxJS-4.1.0/src/core/linq/observable/ambproto.js000066400000000000000000000037201266736161100213440ustar00rootroot00000000000000 /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ observableProto.amb = function (rightSource) { var leftSource = this; return new AnonymousObservable(function (observer) { var choice, leftChoice = 'L', rightChoice = 'R', leftSubscription = new SingleAssignmentDisposable(), rightSubscription = new SingleAssignmentDisposable(); isPromise(rightSource) && (rightSource = observableFromPromise(rightSource)); function choiceL() { if (!choice) { choice = leftChoice; rightSubscription.dispose(); } } function choiceR() { if (!choice) { choice = rightChoice; leftSubscription.dispose(); } } var leftSubscribe = observerCreate( function (left) { choiceL(); choice === leftChoice && observer.onNext(left); }, function (e) { choiceL(); choice === leftChoice && observer.onError(e); }, function () { choiceL(); choice === leftChoice && observer.onCompleted(); } ); var rightSubscribe = observerCreate( function (right) { choiceR(); choice === rightChoice && observer.onNext(right); }, function (e) { choiceR(); choice === rightChoice && observer.onError(e); }, function () { choiceR(); choice === rightChoice && observer.onCompleted(); } ); leftSubscription.setDisposable(leftSource.subscribe(leftSubscribe)); rightSubscription.setDisposable(rightSource.subscribe(rightSubscribe)); return new BinaryDisposable(leftSubscription, rightSubscription); }); }; RxJS-4.1.0/src/core/linq/observable/and.js000066400000000000000000000005741266736161100202670ustar00rootroot00000000000000 /** * Creates a pattern that matches when both observable sequences have an available value. * * @param right Observable sequence to match with the current sequence. * @return {Pattern} Pattern object that matches when both observable sequences have an available value. */ observableProto.and = function (right) { return new Pattern([this, right]); }; RxJS-4.1.0/src/core/linq/observable/asobservable.js000066400000000000000000000005751266736161100221760ustar00rootroot00000000000000 function asObservable(source) { return function subscribe(o) { return source.subscribe(o); }; } /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ observableProto.asObservable = function () { return new AnonymousObservable(asObservable(this), this); }; RxJS-4.1.0/src/core/linq/observable/average.js000066400000000000000000000037371266736161100211430ustar00rootroot00000000000000 var AverageObservable = (function (__super__) { inherits(AverageObservable, __super__); function AverageObservable(source, fn) { this.source = source; this._fn = fn; __super__.call(this); } AverageObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new AverageObserver(o, this._fn, this.source)); }; return AverageObservable; }(ObservableBase)); var AverageObserver = (function(__super__) { inherits(AverageObserver, __super__); function AverageObserver(o, fn, s) { this._o = o; this._fn = fn; this._s = s; this._c = 0; this._t = 0; __super__.call(this); } AverageObserver.prototype.next = function (x) { if(this._fn) { var r = tryCatch(this._fn)(x, this._c++, this._s); if (r === errorObj) { return this._o.onError(r.e); } this._t += r; } else { this._c++; this._t += x; } }; AverageObserver.prototype.error = function (e) { this._o.onError(e); }; AverageObserver.prototype.completed = function () { if (this._c === 0) { return this._o.onError(new EmptyError()); } this._o.onNext(this._t / this._c); this._o.onCompleted(); }; return AverageObserver; }(AbstractObserver)); /** * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the average of the sequence of values. */ observableProto.average = function (keySelector, thisArg) { var source = this, fn; if (isFunction(keySelector)) { fn = bindCallback(keySelector, thisArg, 3); } return new AverageObservable(source, fn); }; RxJS-4.1.0/src/core/linq/observable/buffer.js000066400000000000000000000014671266736161100210000ustar00rootroot00000000000000 function toArray(x) { return x.toArray(); } /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ observableProto.buffer = function () { return this.window.apply(this, arguments) .flatMap(toArray); }; RxJS-4.1.0/src/core/linq/observable/bufferwithcount.js000066400000000000000000000013301266736161100227320ustar00rootroot00000000000000 function toArray(x) { return x.toArray(); } function notEmpty(x) { return x.length > 0; } /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ observableProto.bufferWithCount = observableProto.bufferCount = function (count, skip) { typeof skip !== 'number' && (skip = count); return this.windowWithCount(count, skip) .flatMap(toArray) .filter(notEmpty); }; RxJS-4.1.0/src/core/linq/observable/bufferwithtime.js000066400000000000000000000017301266736161100225440ustar00rootroot00000000000000 function toArray(x) { return x.toArray(); } /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ observableProto.bufferWithTime = observableProto.bufferTime = function (timeSpan, timeShiftOrScheduler, scheduler) { return this.windowWithTime(timeSpan, timeShiftOrScheduler, scheduler).flatMap(toArray); }; RxJS-4.1.0/src/core/linq/observable/bufferwithtimeorcount.js000066400000000000000000000013231266736161100241540ustar00rootroot00000000000000 function toArray(x) { return x.toArray(); } /** * Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a buffer. * @param {Number} count Maximum element count of a buffer. * @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ observableProto.bufferWithTimeOrCount = observableProto.bufferTimeOrCount = function (timeSpan, count, scheduler) { return this.windowWithTimeOrCount(timeSpan, count, scheduler).flatMap(toArray); }; RxJS-4.1.0/src/core/linq/observable/case.js000066400000000000000000000022661266736161100204400ustar00rootroot00000000000000 /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ Observable['case'] = function (selector, sources, defaultSourceOrScheduler) { return observableDefer(function () { isPromise(defaultSourceOrScheduler) && (defaultSourceOrScheduler = observableFromPromise(defaultSourceOrScheduler)); defaultSourceOrScheduler || (defaultSourceOrScheduler = observableEmpty()); isScheduler(defaultSourceOrScheduler) && (defaultSourceOrScheduler = observableEmpty(defaultSourceOrScheduler)); var result = sources[selector()]; isPromise(result) && (result = observableFromPromise(result)); return result || defaultSourceOrScheduler; }); }; RxJS-4.1.0/src/core/linq/observable/catch.js000066400000000000000000000013171266736161100206030ustar00rootroot00000000000000 /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ var observableCatch = Observable['catch'] = function () { var items; if (Array.isArray(arguments[0])) { items = arguments[0]; } else { var len = arguments.length; items = new Array(len); for(var i = 0; i < len; i++) { items[i] = arguments[i]; } } return enumerableOf(items).catchError(); }; RxJS-4.1.0/src/core/linq/observable/catchproto.js000066400000000000000000000041061266736161100216660ustar00rootroot00000000000000 var CatchObservable = (function (__super__) { inherits(CatchObservable, __super__); function CatchObservable(source, fn) { this.source = source; this._fn = fn; __super__.call(this); } CatchObservable.prototype.subscribeCore = function (o) { var d1 = new SingleAssignmentDisposable(), subscription = new SerialDisposable(); subscription.setDisposable(d1); d1.setDisposable(this.source.subscribe(new CatchObserver(o, subscription, this._fn))); return subscription; }; return CatchObservable; }(ObservableBase)); var CatchObserver = (function(__super__) { inherits(CatchObserver, __super__); function CatchObserver(o, s, fn) { this._o = o; this._s = s; this._fn = fn; __super__.call(this); } CatchObserver.prototype.next = function (x) { this._o.onNext(x); }; CatchObserver.prototype.completed = function () { return this._o.onCompleted(); }; CatchObserver.prototype.error = function (e) { var result = tryCatch(this._fn)(e); if (result === errorObj) { return this._o.onError(result.e); } isPromise(result) && (result = observableFromPromise(result)); var d = new SingleAssignmentDisposable(); this._s.setDisposable(d); d.setDisposable(result.subscribe(this._o)); }; return CatchObserver; }(AbstractObserver)); /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ observableProto['catch'] = function (handlerOrSecond) { return isFunction(handlerOrSecond) ? new CatchObservable(this, handlerOrSecond) : observableCatch([this, handlerOrSecond]); }; RxJS-4.1.0/src/core/linq/observable/combinelatestproto.js000066400000000000000000000017251266736161100234410ustar00rootroot00000000000000 /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ observableProto.combineLatest = function () { var len = arguments.length, args = new Array(len); for(var i = 0; i < len; i++) { args[i] = arguments[i]; } if (Array.isArray(args[0])) { args[0].unshift(this); } else { args.unshift(this); } return combineLatest.apply(this, args); }; RxJS-4.1.0/src/core/linq/observable/concatall.js000066400000000000000000000004341266736161100214600ustar00rootroot00000000000000 /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ observableProto.concatAll = function () { return this.merge(1); }; RxJS-4.1.0/src/core/linq/observable/concatmap.js000066400000000000000000000052121266736161100214640ustar00rootroot00000000000000 function concatMap(source, selector, thisArg) { var selectorFunc = bindCallback(selector, thisArg, 3); return source.map(function (x, i) { var result = selectorFunc(x, i, source); isPromise(result) && (result = observableFromPromise(result)); (isArrayLike(result) || isIterable(result)) && (result = observableFrom(result)); return result; }).concatAll(); } /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ observableProto.selectConcat = observableProto.concatMap = function (selector, resultSelector, thisArg) { if (isFunction(selector) && isFunction(resultSelector)) { return this.concatMap(function (x, i) { var selectorResult = selector(x, i); isPromise(selectorResult) && (selectorResult = observableFromPromise(selectorResult)); (isArrayLike(selectorResult) || isIterable(selectorResult)) && (selectorResult = observableFrom(selectorResult)); return selectorResult.map(function (y, i2) { return resultSelector(x, y, i, i2); }); }); } return isFunction(selector) ? concatMap(this, selector, thisArg) : concatMap(this, function () { return selector; }); }; RxJS-4.1.0/src/core/linq/observable/concatmapobserver.js000066400000000000000000000043531266736161100232410ustar00rootroot00000000000000 /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ observableProto.concatMapObserver = observableProto.selectConcatObserver = function(onNext, onError, onCompleted, thisArg) { var source = this, onNextFunc = bindCallback(onNext, thisArg, 2), onErrorFunc = bindCallback(onError, thisArg, 1), onCompletedFunc = bindCallback(onCompleted, thisArg, 0); return new AnonymousObservable(function (observer) { var index = 0; return source.subscribe( function (x) { var result; try { result = onNextFunc(x, index++); } catch (e) { observer.onError(e); return; } isPromise(result) && (result = observableFromPromise(result)); observer.onNext(result); }, function (err) { var result; try { result = onErrorFunc(err); } catch (e) { observer.onError(e); return; } isPromise(result) && (result = observableFromPromise(result)); observer.onNext(result); observer.onCompleted(); }, function () { var result; try { result = onCompletedFunc(); } catch (e) { observer.onError(e); return; } isPromise(result) && (result = observableFromPromise(result)); observer.onNext(result); observer.onCompleted(); }); }, this).concatAll(); }; RxJS-4.1.0/src/core/linq/observable/concatproto.js000066400000000000000000000007211266736161100220520ustar00rootroot00000000000000 /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ observableProto.concat = function () { for(var args = [], i = 0, len = arguments.length; i < len; i++) { args.push(arguments[i]); } args.unshift(this); return observableConcat.apply(null, args); }; RxJS-4.1.0/src/core/linq/observable/count.js000066400000000000000000000040341266736161100206500ustar00rootroot00000000000000 var CountObservable = (function (__super__) { inherits(CountObservable, __super__); function CountObservable(source, fn) { this.source = source; this._fn = fn; __super__.call(this); } CountObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new CountObserver(o, this._fn, this.source)); }; return CountObservable; }(ObservableBase)); var CountObserver = (function (__super__) { inherits(CountObserver, __super__); function CountObserver(o, fn, s) { this._o = o; this._fn = fn; this._s = s; this._i = 0; this._c = 0; __super__.call(this); } CountObserver.prototype.next = function (x) { if (this._fn) { var result = tryCatch(this._fn)(x, this._i++, this._s); if (result === errorObj) { return this._o.onError(result.e); } Boolean(result) && (this._c++); } else { this._c++; } }; CountObserver.prototype.error = function (e) { this._o.onError(e); }; CountObserver.prototype.completed = function () { this._o.onNext(this._c); this._o.onCompleted(); }; return CountObserver; }(AbstractObserver)); /** * Returns an observable sequence containing a value that represents how many elements in the specified observable sequence satisfy a condition if provided, else the count of items. * @example * res = source.count(); * res = source.count(function (x) { return x > 3; }); * @param {Function} [predicate]A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function if provided, else the count of items in the sequence. */ observableProto.count = function (predicate, thisArg) { var fn = bindCallback(predicate, thisArg, 3); return new CountObservable(this, fn); }; RxJS-4.1.0/src/core/linq/observable/create.js000066400000000000000000000013461266736161100207660ustar00rootroot00000000000000 /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ Observable.create = function (subscribe, parent) { return new AnonymousObservable(subscribe, parent); }; RxJS-4.1.0/src/core/linq/observable/debounce.js000066400000000000000000000072751266736161100213160ustar00rootroot00000000000000 var DebounceObservable = (function (__super__) { inherits(DebounceObservable, __super__); function DebounceObservable(source, dt, s) { isScheduler(s) || (s = defaultScheduler); this.source = source; this._dt = dt; this._s = s; __super__.call(this); } DebounceObservable.prototype.subscribeCore = function (o) { var cancelable = new SerialDisposable(); return new BinaryDisposable( this.source.subscribe(new DebounceObserver(o, this._dt, this._s, cancelable)), cancelable); }; return DebounceObservable; }(ObservableBase)); var DebounceObserver = (function (__super__) { inherits(DebounceObserver, __super__); function DebounceObserver(observer, dueTime, scheduler, cancelable) { this._o = observer; this._d = dueTime; this._scheduler = scheduler; this._c = cancelable; this._v = null; this._hv = false; this._id = 0; __super__.call(this); } function scheduleFuture(s, state) { state.self._hv && state.self._id === state.currentId && state.self._o.onNext(state.x); state.self._hv = false; } DebounceObserver.prototype.next = function (x) { this._hv = true; this._v = x; var currentId = ++this._id, d = new SingleAssignmentDisposable(); this._c.setDisposable(d); d.setDisposable(this._scheduler.scheduleFuture(this, this._d, function (_, self) { self._hv && self._id === currentId && self._o.onNext(x); self._hv = false; })); }; DebounceObserver.prototype.error = function (e) { this._c.dispose(); this._o.onError(e); this._hv = false; this._id++; }; DebounceObserver.prototype.completed = function () { this._c.dispose(); this._hv && this._o.onNext(this._v); this._o.onCompleted(); this._hv = false; this._id++; }; return DebounceObserver; }(AbstractObserver)); function debounceWithSelector(source, durationSelector) { return new AnonymousObservable(function (o) { var value, hasValue = false, cancelable = new SerialDisposable(), id = 0; var subscription = source.subscribe( function (x) { var throttle = tryCatch(durationSelector)(x); if (throttle === errorObj) { return o.onError(throttle.e); } isPromise(throttle) && (throttle = observableFromPromise(throttle)); hasValue = true; value = x; id++; var currentid = id, d = new SingleAssignmentDisposable(); cancelable.setDisposable(d); d.setDisposable(throttle.subscribe( function () { hasValue && id === currentid && o.onNext(value); hasValue = false; d.dispose(); }, function (e) { o.onError(e); }, function () { hasValue && id === currentid && o.onNext(value); hasValue = false; d.dispose(); } )); }, function (e) { cancelable.dispose(); o.onError(e); hasValue = false; id++; }, function () { cancelable.dispose(); hasValue && o.onNext(value); o.onCompleted(); hasValue = false; id++; } ); return new BinaryDisposable(subscription, cancelable); }, source); } observableProto.debounce = function () { if (isFunction (arguments[0])) { return debounceWithSelector(this, arguments[0]); } else if (typeof arguments[0] === 'number') { return new DebounceObservable(this, arguments[0], arguments[1]); } else { throw new Error('Invalid arguments'); } }; RxJS-4.1.0/src/core/linq/observable/defaultifempty.js000066400000000000000000000027221266736161100225440ustar00rootroot00000000000000 var DefaultIfEmptyObserver = (function (__super__) { inherits(DefaultIfEmptyObserver, __super__); function DefaultIfEmptyObserver(o, d) { this._o = o; this._d = d; this._f = false; __super__.call(this); } DefaultIfEmptyObserver.prototype.next = function (x) { this._f = true; this._o.onNext(x); }; DefaultIfEmptyObserver.prototype.error = function (e) { this._o.onError(e); }; DefaultIfEmptyObserver.prototype.completed = function () { !this._f && this._o.onNext(this._d); this._o.onCompleted(); }; return DefaultIfEmptyObserver; }(AbstractObserver)); /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ observableProto.defaultIfEmpty = function (defaultValue) { var source = this; defaultValue === undefined && (defaultValue = null); return new AnonymousObservable(function (o) { return source.subscribe(new DefaultIfEmptyObserver(o, defaultValue)); }, source); }; RxJS-4.1.0/src/core/linq/observable/defer.js000066400000000000000000000021471266736161100206100ustar00rootroot00000000000000 var Defer = (function(__super__) { inherits(Defer, __super__); function Defer(factory) { this._f = factory; __super__.call(this); } Defer.prototype.subscribeCore = function (o) { var result = tryCatch(this._f)(); if (result === errorObj) { return observableThrow(result.e).subscribe(o);} isPromise(result) && (result = observableFromPromise(result)); return result.subscribe(o); }; return Defer; }(ObservableBase)); /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ var observableDefer = Observable.defer = function (observableFactory) { return new Defer(observableFactory); }; RxJS-4.1.0/src/core/linq/observable/delay.js000066400000000000000000000120271266736161100206170ustar00rootroot00000000000000 function observableDelayRelative(source, dueTime, scheduler) { return new AnonymousObservable(function (o) { var active = false, cancelable = new SerialDisposable(), exception = null, q = [], running = false, subscription; subscription = source.materialize().timestamp(scheduler).subscribe(function (notification) { var d, shouldRun; if (notification.value.kind === 'E') { q = []; q.push(notification); exception = notification.value.error; shouldRun = !running; } else { q.push({ value: notification.value, timestamp: notification.timestamp + dueTime }); shouldRun = !active; active = true; } if (shouldRun) { if (exception !== null) { o.onError(exception); } else { d = new SingleAssignmentDisposable(); cancelable.setDisposable(d); d.setDisposable(scheduler.scheduleRecursiveFuture(null, dueTime, function (_, self) { var e, recurseDueTime, result, shouldRecurse; if (exception !== null) { return; } running = true; do { result = null; if (q.length > 0 && q[0].timestamp - scheduler.now() <= 0) { result = q.shift().value; } if (result !== null) { result.accept(o); } } while (result !== null); shouldRecurse = false; recurseDueTime = 0; if (q.length > 0) { shouldRecurse = true; recurseDueTime = Math.max(0, q[0].timestamp - scheduler.now()); } else { active = false; } e = exception; running = false; if (e !== null) { o.onError(e); } else if (shouldRecurse) { self(null, recurseDueTime); } })); } } }); return new BinaryDisposable(subscription, cancelable); }, source); } function observableDelayAbsolute(source, dueTime, scheduler) { return observableDefer(function () { return observableDelayRelative(source, dueTime - scheduler.now(), scheduler); }); } function delayWithSelector(source, subscriptionDelay, delayDurationSelector) { var subDelay, selector; if (isFunction(subscriptionDelay)) { selector = subscriptionDelay; } else { subDelay = subscriptionDelay; selector = delayDurationSelector; } return new AnonymousObservable(function (o) { var delays = new CompositeDisposable(), atEnd = false, subscription = new SerialDisposable(); function start() { subscription.setDisposable(source.subscribe( function (x) { var delay = tryCatch(selector)(x); if (delay === errorObj) { return o.onError(delay.e); } var d = new SingleAssignmentDisposable(); delays.add(d); d.setDisposable(delay.subscribe( function () { o.onNext(x); delays.remove(d); done(); }, function (e) { o.onError(e); }, function () { o.onNext(x); delays.remove(d); done(); } )); }, function (e) { o.onError(e); }, function () { atEnd = true; subscription.dispose(); done(); } )); } function done () { atEnd && delays.length === 0 && o.onCompleted(); } if (!subDelay) { start(); } else { subscription.setDisposable(subDelay.subscribe(start, function (e) { o.onError(e); }, start)); } return new BinaryDisposable(subscription, delays); }, source); } /** * Time shifts the observable sequence by dueTime. * The relative time intervals between the values are preserved. * * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ observableProto.delay = function () { var firstArg = arguments[0]; if (typeof firstArg === 'number' || firstArg instanceof Date) { var dueTime = firstArg, scheduler = arguments[1]; isScheduler(scheduler) || (scheduler = defaultScheduler); return dueTime instanceof Date ? observableDelayAbsolute(this, dueTime, scheduler) : observableDelayRelative(this, dueTime, scheduler); } else if (Observable.isObservable(firstArg) || isFunction(firstArg)) { return delayWithSelector(this, firstArg, arguments[1]); } else { throw new Error('Invalid arguments'); } }; RxJS-4.1.0/src/core/linq/observable/delaysubscription.js000066400000000000000000000026671266736161100232750ustar00rootroot00000000000000 var DelaySubscription = (function(__super__) { inherits(DelaySubscription, __super__); function DelaySubscription(source, dt, s) { this.source = source; this._dt = dt; this._s = s; __super__.call(this); } DelaySubscription.prototype.subscribeCore = function (o) { var d = new SerialDisposable(); d.setDisposable(this._s.scheduleFuture([this.source, o, d], this._dt, scheduleMethod)); return d; }; function scheduleMethod(s, state) { var source = state[0], o = state[1], d = state[2]; d.setDisposable(source.subscribe(o)); } return DelaySubscription; }(ObservableBase)); /** * Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. * * @example * 1 - res = source.delaySubscription(5000); // 5s * 2 - res = source.delaySubscription(5000, Rx.Scheduler.default); // 5 seconds * * @param {Number} dueTime Relative or absolute time shift of the subscription. * @param {Scheduler} [scheduler] Scheduler to run the subscription delay timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ observableProto.delaySubscription = function (dueTime, scheduler) { isScheduler(scheduler) || (scheduler = defaultScheduler); return new DelaySubscription(this, dueTime, scheduler); }; RxJS-4.1.0/src/core/linq/observable/dematerialize.js000066400000000000000000000023741266736161100223440ustar00rootroot00000000000000 var DematerializeObservable = (function (__super__) { inherits(DematerializeObservable, __super__); function DematerializeObservable(source) { this.source = source; __super__.call(this); } DematerializeObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new DematerializeObserver(o)); }; return DematerializeObservable; }(ObservableBase)); var DematerializeObserver = (function (__super__) { inherits(DematerializeObserver, __super__); function DematerializeObserver(o) { this._o = o; __super__.call(this); } DematerializeObserver.prototype.next = function (x) { x.accept(this._o); }; DematerializeObserver.prototype.error = function (e) { this._o.onError(e); }; DematerializeObserver.prototype.completed = function () { this._o.onCompleted(); }; return DematerializeObserver; }(AbstractObserver)); /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ observableProto.dematerialize = function () { return new DematerializeObservable(this); }; RxJS-4.1.0/src/core/linq/observable/distinct.js000066400000000000000000000052241266736161100213430ustar00rootroot00000000000000 // Swap out for Array.findIndex function arrayIndexOfComparer(array, item, comparer) { for (var i = 0, len = array.length; i < len; i++) { if (comparer(array[i], item)) { return i; } } return -1; } function HashSet(comparer) { this.comparer = comparer; this.set = []; } HashSet.prototype.push = function(value) { var retValue = arrayIndexOfComparer(this.set, value, this.comparer) === -1; retValue && this.set.push(value); return retValue; }; var DistinctObservable = (function (__super__) { inherits(DistinctObservable, __super__); function DistinctObservable(source, keyFn, cmpFn) { this.source = source; this._keyFn = keyFn; this._cmpFn = cmpFn; __super__.call(this); } DistinctObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new DistinctObserver(o, this._keyFn, this._cmpFn)); }; return DistinctObservable; }(ObservableBase)); var DistinctObserver = (function (__super__) { inherits(DistinctObserver, __super__); function DistinctObserver(o, keyFn, cmpFn) { this._o = o; this._keyFn = keyFn; this._h = new HashSet(cmpFn); __super__.call(this); } DistinctObserver.prototype.next = function (x) { var key = x; if (isFunction(this._keyFn)) { key = tryCatch(this._keyFn)(x); if (key === errorObj) { return this._o.onError(key.e); } } this._h.push(key) && this._o.onNext(x); }; DistinctObserver.prototype.error = function (e) { this._o.onError(e); }; DistinctObserver.prototype.completed = function () { this._o.onCompleted(); }; return DistinctObserver; }(AbstractObserver)); /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ observableProto.distinct = function (keySelector, comparer) { comparer || (comparer = defaultComparer); return new DistinctObservable(this, keySelector, comparer); }; RxJS-4.1.0/src/core/linq/observable/dowhile.js000066400000000000000000000010231266736161100211460ustar00rootroot00000000000000 /** * Repeats source as long as condition holds emulating a do while loop. * * @param {Function} condition The condition which determines if the source will be repeated. * @param {Observable} source The observable sequence that will be run if the condition function returns true. * @returns {Observable} An observable sequence which is repeated as long as the condition holds. */ observableProto.doWhile = function (condition) { return observableConcat([this, observableWhileDo(condition, this)]); }; RxJS-4.1.0/src/core/linq/observable/elementat.js000066400000000000000000000034211266736161100214750ustar00rootroot00000000000000 var ElementAtObservable = (function (__super__) { inherits(ElementAtObservable, __super__); function ElementAtObservable(source, i, d) { this.source = source; this._i = i; this._d = d; __super__.call(this); } ElementAtObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new ElementAtObserver(o, this._i, this._d)); }; return ElementAtObservable; }(ObservableBase)); var ElementAtObserver = (function (__super__) { inherits(ElementAtObserver, __super__); function ElementAtObserver(o, i, d) { this._o = o; this._i = i; this._d = d; __super__.call(this); } ElementAtObserver.prototype.next = function (x) { if (this._i-- === 0) { this._o.onNext(x); this._o.onCompleted(); } }; ElementAtObserver.prototype.error = function (e) { this._o.onError(e); }; ElementAtObserver.prototype.completed = function () { if (this._d === undefined) { this._o.onError(new ArgumentOutOfRangeError()); } else { this._o.onNext(this._d); this._o.onCompleted(); } }; return ElementAtObserver; }(AbstractObserver)); /** * Returns the element at a specified index in a sequence or default value if not found. * @param {Number} index The zero-based index of the element to retrieve. * @param {Any} [defaultValue] The default value to use if elementAt does not find a value. * @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence. */ observableProto.elementAt = function (index, defaultValue) { if (index < 0) { throw new ArgumentOutOfRangeError(); } return new ElementAtObservable(this, index, defaultValue); }; RxJS-4.1.0/src/core/linq/observable/every.js000066400000000000000000000033571266736161100206610ustar00rootroot00000000000000 var EveryObservable = (function (__super__) { inherits(EveryObservable, __super__); function EveryObservable(source, fn) { this.source = source; this._fn = fn; __super__.call(this); } EveryObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new EveryObserver(o, this._fn, this.source)); }; return EveryObservable; }(ObservableBase)); var EveryObserver = (function (__super__) { inherits(EveryObserver, __super__); function EveryObserver(o, fn, s) { this._o = o; this._fn = fn; this._s = s; this._i = 0; __super__.call(this); } EveryObserver.prototype.next = function (x) { var result = tryCatch(this._fn)(x, this._i++, this._s); if (result === errorObj) { return this._o.onError(result.e); } if (!Boolean(result)) { this._o.onNext(false); this._o.onCompleted(); } }; EveryObserver.prototype.error = function (e) { this._o.onError(e); }; EveryObserver.prototype.completed = function () { this._o.onNext(true); this._o.onCompleted(); }; return EveryObserver; }(AbstractObserver)); /** * Determines whether all elements of an observable sequence satisfy a condition. * @param {Function} [predicate] A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. */ observableProto.every = function (predicate, thisArg) { var fn = bindCallback(predicate, thisArg, 3); return new EveryObservable(this, fn); }; RxJS-4.1.0/src/core/linq/observable/expand.js000066400000000000000000000057551266736161100210120ustar00rootroot00000000000000 var ExpandObservable = (function(__super__) { inherits(ExpandObservable, __super__); function ExpandObservable(source, fn, scheduler) { this.source = source; this._fn = fn; this._scheduler = scheduler; __super__.call(this); } function scheduleRecursive(args, recurse) { var state = args[0], self = args[1]; var work; if (state.q.length > 0) { work = state.q.shift(); } else { state.isAcquired = false; return; } var m1 = new SingleAssignmentDisposable(); state.d.add(m1); m1.setDisposable(work.subscribe(new ExpandObserver(state, self, m1))); recurse([state, self]); } ExpandObservable.prototype._ensureActive = function (state) { var isOwner = false; if (state.q.length > 0) { isOwner = !state.isAcquired; state.isAcquired = true; } isOwner && state.m.setDisposable(this._scheduler.scheduleRecursive([state, this], scheduleRecursive)); }; ExpandObservable.prototype.subscribeCore = function (o) { var m = new SerialDisposable(), d = new CompositeDisposable(m), state = { q: [], m: m, d: d, activeCount: 0, isAcquired: false, o: o }; state.q.push(this.source); state.activeCount++; this._ensureActive(state); return d; }; return ExpandObservable; }(ObservableBase)); var ExpandObserver = (function(__super__) { inherits(ExpandObserver, __super__); function ExpandObserver(state, parent, m1) { this._s = state; this._p = parent; this._m1 = m1; __super__.call(this); } ExpandObserver.prototype.next = function (x) { this._s.o.onNext(x); var result = tryCatch(this._p._fn)(x); if (result === errorObj) { return this._s.o.onError(result.e); } this._s.q.push(result); this._s.activeCount++; this._p._ensureActive(this._s); }; ExpandObserver.prototype.error = function (e) { this._s.o.onError(e); }; ExpandObserver.prototype.completed = function () { this._s.d.remove(this._m1); this._s.activeCount--; this._s.activeCount === 0 && this._s.o.onCompleted(); }; return ExpandObserver; }(AbstractObserver)); /** * Expands an observable sequence by recursively invoking selector. * * @param {Function} selector Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. * @param {Scheduler} [scheduler] Scheduler on which to perform the expansion. If not provided, this defaults to the current thread scheduler. * @returns {Observable} An observable sequence containing all the elements produced by the recursive expansion. */ observableProto.expand = function (selector, scheduler) { isScheduler(scheduler) || (scheduler = currentThreadScheduler); return new ExpandObservable(this, selector, scheduler); }; RxJS-4.1.0/src/core/linq/observable/find.js000066400000000000000000000012121266736161100204330ustar00rootroot00000000000000 /** * Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, undefined. */ observableProto.find = function (predicate, thisArg) { return findValue(this, predicate, thisArg, false); }; RxJS-4.1.0/src/core/linq/observable/findindex.js000066400000000000000000000013301266736161100214640ustar00rootroot00000000000000 /** * Searches for an element that matches the conditions defined by the specified predicate, and returns * an Observable sequence with the zero-based index of the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. */ observableProto.findIndex = function (predicate, thisArg) { return findValue(this, predicate, thisArg, true); }; RxJS-4.1.0/src/core/linq/observable/first.js000066400000000000000000000043631266736161100206540ustar00rootroot00000000000000 var FirstObservable = (function (__super__) { inherits(FirstObservable, __super__); function FirstObservable(source, obj) { this.source = source; this._obj = obj; __super__.call(this); } FirstObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new FirstObserver(o, this._obj, this.source)); }; return FirstObservable; }(ObservableBase)); var FirstObserver = (function(__super__) { inherits(FirstObserver, __super__); function FirstObserver(o, obj, s) { this._o = o; this._obj = obj; this._s = s; this._i = 0; __super__.call(this); } FirstObserver.prototype.next = function (x) { if (this._obj.predicate) { var res = tryCatch(this._obj.predicate)(x, this._i++, this._s); if (res === errorObj) { return this._o.onError(res.e); } if (Boolean(res)) { this._o.onNext(x); this._o.onCompleted(); } } else if (!this._obj.predicate) { this._o.onNext(x); this._o.onCompleted(); } }; FirstObserver.prototype.error = function (e) { this._o.onError(e); }; FirstObserver.prototype.completed = function () { if (this._obj.defaultValue === undefined) { this._o.onError(new EmptyError()); } else { this._o.onNext(this._obj.defaultValue); this._o.onCompleted(); } }; return FirstObserver; }(AbstractObserver)); /** * Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence. * @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence. */ observableProto.first = function () { var obj = {}, source = this; if (typeof arguments[0] === 'object') { obj = arguments[0]; } else { obj = { predicate: arguments[0], thisArg: arguments[1], defaultValue: arguments[2] }; } if (isFunction (obj.predicate)) { var fn = obj.predicate; obj.predicate = bindCallback(fn, obj.thisArg, 3); } return new FirstObservable(this, obj); }; RxJS-4.1.0/src/core/linq/observable/for.js000066400000000000000000000012451266736161100203070ustar00rootroot00000000000000 /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers = this._n && comparer(x, this._elem)) { this._o.onNext(true); this._o.onCompleted(); } }; IncludesObserver.prototype.error = function (e) { this._o.onError(e); }; IncludesObserver.prototype.completed = function () { this._o.onNext(false); this._o.onCompleted(); }; return IncludesObserver; }(AbstractObserver)); /** * Determines whether an observable sequence includes a specified element with an optional equality comparer. * @param searchElement The value to locate in the source sequence. * @param {Number} [fromIndex] An equality comparer to compare elements. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence includes an element that has the specified value from the given index. */ observableProto.includes = function (searchElement, fromIndex) { return new IncludesObservable(this, searchElement, fromIndex); }; RxJS-4.1.0/src/core/linq/observable/indexof.js000066400000000000000000000035461266736161100211630ustar00rootroot00000000000000 var IndexOfObservable = (function (__super__) { inherits(IndexOfObservable, __super__); function IndexOfObservable(source, e, n) { this.source = source; this._e = e; this._n = n; __super__.call(this); } IndexOfObservable.prototype.subscribeCore = function (o) { if (this._n < 0) { o.onNext(-1); o.onCompleted(); return disposableEmpty; } return this.source.subscribe(new IndexOfObserver(o, this._e, this._n)); }; return IndexOfObservable; }(ObservableBase)); var IndexOfObserver = (function (__super__) { inherits(IndexOfObserver, __super__); function IndexOfObserver(o, e, n) { this._o = o; this._e = e; this._n = n; this._i = 0; __super__.call(this); } IndexOfObserver.prototype.next = function (x) { if (this._i >= this._n && x === this._e) { this._o.onNext(this._i); this._o.onCompleted(); } this._i++; }; IndexOfObserver.prototype.error = function (e) { this._o.onError(e); }; IndexOfObserver.prototype.completed = function () { this._o.onNext(-1); this._o.onCompleted(); }; return IndexOfObserver; }(AbstractObserver)); /** * Returns the first index at which a given element can be found in the observable sequence, or -1 if it is not present. * @param {Any} searchElement Element to locate in the array. * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. * @returns {Observable} And observable sequence containing the first index at which a given element can be found in the observable sequence, or -1 if it is not present. */ observableProto.indexOf = function(searchElement, fromIndex) { var n = +fromIndex || 0; Math.abs(n) === Infinity && (n = 0); return new IndexOfObservable(this, searchElement, n); }; RxJS-4.1.0/src/core/linq/observable/interval.js000066400000000000000000000014021266736161100213400ustar00rootroot00000000000000 /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ var observableinterval = Observable.interval = function (period, scheduler) { return observableTimerTimeSpanAndPeriod(period, period, isScheduler(scheduler) ? scheduler : defaultScheduler); }; RxJS-4.1.0/src/core/linq/observable/isempty.js000066400000000000000000000022711266736161100212130ustar00rootroot00000000000000 var IsEmptyObservable = (function (__super__) { inherits(IsEmptyObservable, __super__); function IsEmptyObservable(source) { this.source = source; __super__.call(this); } IsEmptyObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new IsEmptyObserver(o)); }; return IsEmptyObservable; }(ObservableBase)); var IsEmptyObserver = (function(__super__) { inherits(IsEmptyObserver, __super__); function IsEmptyObserver(o) { this._o = o; __super__.call(this); } IsEmptyObserver.prototype.next = function () { this._o.onNext(false); this._o.onCompleted(); }; IsEmptyObserver.prototype.error = function (e) { this._o.onError(e); }; IsEmptyObserver.prototype.completed = function () { this._o.onNext(true); this._o.onCompleted(); }; return IsEmptyObserver; }(AbstractObserver)); /** * Determines whether an observable sequence is empty. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence is empty. */ observableProto.isEmpty = function () { return new IsEmptyObservable(this); }; RxJS-4.1.0/src/core/linq/observable/join.js000066400000000000000000000065211266736161100204620ustar00rootroot00000000000000 /** * Correlates the elements of two sequences based on overlapping durations. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters passed to the function correspond with the elements from the left and right source sequences for which overlap occurs. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ observableProto.join = function (right, leftDurationSelector, rightDurationSelector, resultSelector) { var left = this; return new AnonymousObservable(function (o) { var group = new CompositeDisposable(); var leftDone = false, rightDone = false; var leftId = 0, rightId = 0; var leftMap = new Map(), rightMap = new Map(); var handleError = function (e) { o.onError(e); }; group.add(left.subscribe( function (value) { var id = leftId++, md = new SingleAssignmentDisposable(); leftMap.set(id, value); group.add(md); var duration = tryCatch(leftDurationSelector)(value); if (duration === errorObj) { return o.onError(duration.e); } md.setDisposable(duration.take(1).subscribe( noop, handleError, function () { leftMap['delete'](id) && leftMap.size === 0 && leftDone && o.onCompleted(); group.remove(md); })); rightMap.forEach(function (v) { var result = tryCatch(resultSelector)(value, v); if (result === errorObj) { return o.onError(result.e); } o.onNext(result); }); }, handleError, function () { leftDone = true; (rightDone || leftMap.size === 0) && o.onCompleted(); }) ); group.add(right.subscribe( function (value) { var id = rightId++, md = new SingleAssignmentDisposable(); rightMap.set(id, value); group.add(md); var duration = tryCatch(rightDurationSelector)(value); if (duration === errorObj) { return o.onError(duration.e); } md.setDisposable(duration.take(1).subscribe( noop, handleError, function () { rightMap['delete'](id) && rightMap.size === 0 && rightDone && o.onCompleted(); group.remove(md); })); leftMap.forEach(function (v) { var result = tryCatch(resultSelector)(v, value); if (result === errorObj) { return o.onError(result.e); } o.onNext(result); }); }, handleError, function () { rightDone = true; (leftDone || rightMap.size === 0) && o.onCompleted(); }) ); return group; }, left); }; RxJS-4.1.0/src/core/linq/observable/jortsort.js000066400000000000000000000005461266736161100214120ustar00rootroot00000000000000 /** * jortSort checks if your inputs are sorted. Note that this is only for a sequence with an end. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ observableProto.jortSort = function () { return this.jortSortUntil(observableNever()); }; RxJS-4.1.0/src/core/linq/observable/jortsortuntil.js000066400000000000000000000013161266736161100224620ustar00rootroot00000000000000 /** * jortSort checks if your inputs are sorted until another Observable sequence fires. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ observableProto.jortSortUntil = function (other) { var source = this; return new AnonymousObservable(function (observer) { var arr = []; return source.takeUntil(other).subscribe( arr.push.bind(arr), observer.onError.bind(observer), function () { var sorted = arr.slice(0).sort(defaultSubComparer); observer.onNext(isEqual(arr, sorted)); observer.onCompleted(); }); }, source); }; RxJS-4.1.0/src/core/linq/observable/last.js000066400000000000000000000045211266736161100204640ustar00rootroot00000000000000 var LastObservable = (function (__super__) { inherits(LastObservable, __super__); function LastObservable(source, obj) { this.source = source; this._obj = obj; __super__.call(this); } LastObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new LastObserver(o, this._obj, this.source)); }; return LastObservable; }(ObservableBase)); var LastObserver = (function(__super__) { inherits(LastObserver, __super__); function LastObserver(o, obj, s) { this._o = o; this._obj = obj; this._s = s; this._i = 0; this._hv = false; this._v = null; __super__.call(this); } LastObserver.prototype.next = function (x) { var shouldYield = false; if (this._obj.predicate) { var res = tryCatch(this._obj.predicate)(x, this._i++, this._s); if (res === errorObj) { return this._o.onError(res.e); } Boolean(res) && (shouldYield = true); } else if (!this._obj.predicate) { shouldYield = true; } if (shouldYield) { this._hv = true; this._v = x; } }; LastObserver.prototype.error = function (e) { this._o.onError(e); }; LastObserver.prototype.completed = function () { if (this._hv) { this._o.onNext(this._v); this._o.onCompleted(); } else if (this._obj.defaultValue === undefined) { this._o.onError(new EmptyError()); } else { this._o.onNext(this._obj.defaultValue); this._o.onCompleted(); } }; return LastObserver; }(AbstractObserver)); /** * Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element. * @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate. */ observableProto.last = function () { var obj = {}, source = this; if (typeof arguments[0] === 'object') { obj = arguments[0]; } else { obj = { predicate: arguments[0], thisArg: arguments[1], defaultValue: arguments[2] }; } if (isFunction (obj.predicate)) { var fn = obj.predicate; obj.predicate = bindCallback(fn, obj.thisArg, 3); } return new LastObservable(this, obj); }; RxJS-4.1.0/src/core/linq/observable/lastindexof.js000066400000000000000000000040371266736161100220430ustar00rootroot00000000000000 var LastIndexOfObservable = (function (__super__) { inherits(LastIndexOfObservable, __super__); function LastIndexOfObservable(source, e, n) { this.source = source; this._e = e; this._n = n; __super__.call(this); } LastIndexOfObservable.prototype.subscribeCore = function (o) { if (this._n < 0) { o.onNext(-1); o.onCompleted(); return disposableEmpty; } return this.source.subscribe(new LastIndexOfObserver(o, this._e, this._n)); }; return LastIndexOfObservable; }(ObservableBase)); var LastIndexOfObserver = (function (__super__) { inherits(LastIndexOfObserver, __super__); function LastIndexOfObserver(o, e, n) { this._o = o; this._e = e; this._n = n; this._v = 0; this._hv = false; this._i = 0; __super__.call(this); } LastIndexOfObserver.prototype.next = function (x) { if (this._i >= this._n && x === this._e) { this._hv = true; this._v = this._i; } this._i++; }; LastIndexOfObserver.prototype.error = function (e) { this._o.onError(e); }; LastIndexOfObserver.prototype.completed = function () { if (this._hv) { this._o.onNext(this._v); } else { this._o.onNext(-1); } this._o.onCompleted(); }; return LastIndexOfObserver; }(AbstractObserver)); /** * Returns the last index at which a given element can be found in the observable sequence, or -1 if it is not present. * @param {Any} searchElement Element to locate in the array. * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. * @returns {Observable} And observable sequence containing the last index at which a given element can be found in the observable sequence, or -1 if it is not present. */ observableProto.lastIndexOf = function(searchElement, fromIndex) { var n = +fromIndex || 0; Math.abs(n) === Infinity && (n = 0); return new LastIndexOfObservable(this, searchElement, n); }; RxJS-4.1.0/src/core/linq/observable/let.js000066400000000000000000000012601266736161100203020ustar00rootroot00000000000000 /** * Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. * This operator allows for a fluent style of writing queries that use the same sequence multiple times. * * @param {Function} selector Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ observableProto.letBind = observableProto['let'] = function (func) { return func(this); }; RxJS-4.1.0/src/core/linq/observable/manyselect.js000066400000000000000000000035251266736161100216700ustar00rootroot00000000000000 /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ observableProto.manySelect = observableProto.extend = function (selector, scheduler) { isScheduler(scheduler) || (scheduler = Rx.Scheduler.immediate); var source = this; return observableDefer(function () { var chain; return source .map(function (x) { var curr = new ChainObservable(x); chain && chain.onNext(x); chain = curr; return curr; }) .tap( noop, function (e) { chain && chain.onError(e); }, function () { chain && chain.onCompleted(); } ) .observeOn(scheduler) .map(selector); }, source); }; var ChainObservable = (function (__super__) { inherits(ChainObservable, __super__); function ChainObservable(head) { __super__.call(this); this.head = head; this.tail = new AsyncSubject(); } addProperties(ChainObservable.prototype, Observer, { _subscribe: function (o) { var g = new CompositeDisposable(); g.add(currentThreadScheduler.schedule(this, function (_, self) { o.onNext(self.head); g.add(self.tail.mergeAll().subscribe(o)); })); return g; }, onCompleted: function () { this.onNext(Observable.empty()); }, onError: function (e) { this.onNext(Observable['throw'](e)); }, onNext: function (v) { this.tail.onNext(v); this.tail.onCompleted(); } }); return ChainObservable; }(Observable)); RxJS-4.1.0/src/core/linq/observable/materialize.js000066400000000000000000000025221266736161100220260ustar00rootroot00000000000000 var MaterializeObservable = (function (__super__) { inherits(MaterializeObservable, __super__); function MaterializeObservable(source, fn) { this.source = source; __super__.call(this); } MaterializeObservable.prototype.subscribeCore = function (o) { return this.source.subscribe(new MaterializeObserver(o)); }; return MaterializeObservable; }(ObservableBase)); var MaterializeObserver = (function (__super__) { inherits(MaterializeObserver, __super__); function MaterializeObserver(o) { this._o = o; __super__.call(this); } MaterializeObserver.prototype.next = function (x) { this._o.onNext(notificationCreateOnNext(x)) }; MaterializeObserver.prototype.error = function (e) { this._o.onNext(notificationCreateOnError(e)); this._o.onCompleted(); }; MaterializeObserver.prototype.completed = function () { this._o.onNext(notificationCreateOnCompleted()); this._o.onCompleted(); }; return MaterializeObserver; }(AbstractObserver)); /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ observableProto.materialize = function () { return new MaterializeObservable(this); }; RxJS-4.1.0/src/core/linq/observable/max.js000066400000000000000000000010201266736161100202750ustar00rootroot00000000000000 /** * Returns the maximum value in an observable sequence according to the specified comparer. * @example * var res = source.max(); * var res = source.max(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the maximum element in the source sequence. */ observableProto.max = function (comparer) { return this.maxBy(identity, comparer).map(firstOnly); }; RxJS-4.1.0/src/core/linq/observable/maxby.js000066400000000000000000000013431266736161100206400ustar00rootroot00000000000000 /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ observableProto.maxBy = function (keySelector, comparer) { comparer || (comparer = defaultSubComparer); return new ExtremaByObservable(this, keySelector, comparer); }; RxJS-4.1.0/src/core/linq/observable/merge.js000066400000000000000000000016211266736161100206160ustar00rootroot00000000000000 /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ var observableMerge = Observable.merge = function () { var scheduler, sources = [], i, len = arguments.length; if (!arguments[0]) { scheduler = immediateScheduler; for(i = 1; i < len; i++) { sources.push(arguments[i]); } } else if (isScheduler(arguments[0])) { scheduler = arguments[0]; for(i = 1; i < len; i++) { sources.push(arguments[i]); } } else { scheduler = immediateScheduler; for(i = 0; i < len; i++) { sources.push(arguments[i]); } } if (Array.isArray(sources[0])) { sources = sources[0]; } return observableOf(scheduler, sources).mergeAll(); }; RxJS-4.1.0/src/core/linq/observable/mergedelayerror.js000066400000000000000000000100041266736161100227020ustar00rootroot00000000000000 var CompositeError = Rx.CompositeError = function(errors) { this.innerErrors = errors; this.message = 'This contains multiple errors. Check the innerErrors'; Error.call(this); }; CompositeError.prototype = Object.create(Error.prototype); CompositeError.prototype.name = 'CompositeError'; var MergeDelayErrorObservable = (function(__super__) { inherits(MergeDelayErrorObservable, __super__); function MergeDelayErrorObservable(source) { this.source = source; __super__.call(this); } MergeDelayErrorObservable.prototype.subscribeCore = function (o) { var group = new CompositeDisposable(), m = new SingleAssignmentDisposable(), state = { isStopped: false, errors: [], o: o }; group.add(m); m.setDisposable(this.source.subscribe(new MergeDelayErrorObserver(group, state))); return group; }; return MergeDelayErrorObservable; }(ObservableBase)); var MergeDelayErrorObserver = (function(__super__) { inherits(MergeDelayErrorObserver, __super__); function MergeDelayErrorObserver(group, state) { this._group = group; this._state = state; __super__.call(this); } function setCompletion(o, errors) { if (errors.length === 0) { o.onCompleted(); } else if (errors.length === 1) { o.onError(errors[0]); } else { o.onError(new CompositeError(errors)); } } MergeDelayErrorObserver.prototype.next = function (x) { var inner = new SingleAssignmentDisposable(); this._group.add(inner); // Check for promises support isPromise(x) && (x = observableFromPromise(x)); inner.setDisposable(x.subscribe(new InnerObserver(inner, this._group, this._state))); }; MergeDelayErrorObserver.prototype.error = function (e) { this._state.errors.push(e); this._state.isStopped = true; this._group.length === 1 && setCompletion(this._state.o, this._state.errors); }; MergeDelayErrorObserver.prototype.completed = function () { this._state.isStopped = true; this._group.length === 1 && setCompletion(this._state.o, this._state.errors); }; inherits(InnerObserver, __super__); function InnerObserver(inner, group, state) { this._inner = inner; this._group = group; this._state = state; __super__.call(this); } InnerObserver.prototype.next = function (x) { this._state.o.onNext(x); }; InnerObserver.prototype.error = function (e) { this._state.errors.push(e); this._group.remove(this._inner); this._state.isStopped && this._group.length === 1 && setCompletion(this._state.o, this._state.errors); }; InnerObserver.prototype.completed = function () { this._group.remove(this._inner); this._state.isStopped && this._group.length === 1 && setCompletion(this._state.o, this._state.errors); }; return MergeDelayErrorObserver; }(AbstractObserver)); /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ Observable.mergeDelayError = function() { var args; if (Array.isArray(arguments[0])) { args = arguments[0]; } else { var len = arguments.length; args = new Array(len); for(var i = 0; i < len; i++) { args[i] = arguments[i]; } } var source = observableOf(null, args); return new MergeDelayErrorObservable(source); }; RxJS-4.1.0/src/core/linq/observable/min.js000066400000000000000000000010751266736161100203050ustar00rootroot00000000000000 /** * Returns the minimum element in an observable sequence according to the optional comparer else a default greater than less than check. * @example * var res = source.min(); * var res = source.min(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the minimum element in the source sequence. */ observableProto.min = function (comparer) { return this.minBy(identity, comparer).map(firstOnly); }; RxJS-4.1.0/src/core/linq/observable/minby.js000066400000000000000000000014071266736161100206370ustar00rootroot00000000000000 /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ observableProto.minBy = function (keySelector, comparer) { comparer || (comparer = defaultSubComparer); return new ExtremaByObservable(this, keySelector, function (x, y) { return comparer(x, y) * -1; }); }; RxJS-4.1.0/src/core/linq/observable/multicast.js000066400000000000000000000040101266736161100215170ustar00rootroot00000000000000 var MulticastObservable = (function (__super__) { inherits(MulticastObservable, __super__); function MulticastObservable(source, fn1, fn2) { this.source = source; this._fn1 = fn1; this._fn2 = fn2; __super__.call(this); } MulticastObservable.prototype.subscribeCore = function (o) { var connectable = this.source.multicast(this._fn1()); return new BinaryDisposable(this._fn2(connectable).subscribe(o), connectable.connect()); }; return MulticastObservable; }(ObservableBase)); /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if
  • ').text(value))) }, error=> { $results .empty() .append($('
  • ')) .text('Error:' + error); }); ``` And there you have it! ## Dive In! ## Please check out: - [Our Code of Conduct](https://github.com/Reactive-Extensions/RxJS/tree/master/code-of-conduct.md) - [The full documentation](https://github.com/Reactive-Extensions/RxJS/tree/master/src/modular/doc) - [Our design guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/doc/designguidelines) - [Our contribution guidelines](https://github.com/Reactive-Extensions/RxJS/tree/master/contributing.md) - [Our complete Unit Tests](https://github.com/Reactive-Extensions/RxJS/tree/master/src/modular/test) ## Resources - Contact us - [Twitter @ReactiveX](https://twitter.com/ReactiveX) - [Gitter.im](https://gitter.im/Reactive-Extensions/RxJS) - [StackOverflow rxjs](http://stackoverflow.com/questions/tagged/rxjs) ## Getting Started There are a number of ways to get started with RxJS. ### Download the Source ```bash git clone https://github.com/Reactive-Extensions/rxjs.git cd ./rxjs/src/modular ``` ### Installing with [NPM](https://www.npmjs.com/) ```bash` $ npm install @rxjs/rx $ npm install -g @rxjs/rx ``` ### Using with Node.js/JXcore ```js var Rx = require('@rxjs/rx'); ``` ### In a Browser: ```html ``` ### Custom Builds You can create custom builds using WebPack, Browserify, Rollup or other tools since RxJS is written in the style of CommonJS modules. If you are looking for inspiration, see our `webpack.config.js` and `webpack.config.production.js` files on how we use WebPack. ## Contributing ## There are lots of ways to contribute to the project, and we appreciate our [contributors](https://github.com/Reactive-Extensions/RxJS/wiki/Contributors). If you wish to contribute, check out our [style guide]((https://github.com/Reactive-Extensions/RxJS/tree/master/doc/contributing)). You can contribute by reviewing and sending feedback on code checkins, suggesting and trying out new features as they are implemented, submit bugs and help us verify fixes as they are checked in, as well as submit code fixes or code contributions of your own. Note that all code submissions will be rigorously reviewed and tested by the Rx Team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source. First-time contributors must sign a [Contribution License Agreement](https://cla.microsoft.com/). If your Pull Request has the label [cla-required](https://github.com/Reactive-Extensions/RxJS/labels/cla-required), this is an indication that you haven't yet signed such an agreement. ## License ## Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. Microsoft Open Technologies would like to thank its contributors, a list of whom are at https://github.com/Reactive-Extensions/RxJS/wiki/Contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. RxJS-4.1.0/src/modular/refcountdisposable.js000066400000000000000000000031631266736161100210410ustar00rootroot00000000000000'use strict'; var Disposable = require('./disposable'); function InnerDisposable(disposable) { this.disposable = disposable; this.disposable.count++; this.isInnerDisposed = false; } InnerDisposable.prototype.dispose = function () { if (!this.disposable.isDisposed && !this.isInnerDisposed) { this.isInnerDisposed = true; this.disposable.count--; if (this.disposable.count === 0 && this.disposable.isPrimaryDisposed) { this.disposable.isDisposed = true; this.disposable.underlyingDisposable.dispose(); } } }; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ function RefCountDisposable(disposable) { this.underlyingDisposable = disposable; this.isDisposed = false; this.isPrimaryDisposed = false; this.count = 0; } /** * Disposes the underlying disposable only when all dependent disposables have been disposed */ RefCountDisposable.prototype.dispose = function () { if (!this.isDisposed && !this.isPrimaryDisposed) { this.isPrimaryDisposed = true; if (this.count === 0) { this.isDisposed = true; this.underlyingDisposable.dispose(); } } }; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ RefCountDisposable.prototype.getDisposable = function () { return this.isDisposed ? Disposable.empty : new InnerDisposable(this); }; module.exports = RefCountDisposable; RxJS-4.1.0/src/modular/replaysubject.js000066400000000000000000000107131266736161100200210ustar00rootroot00000000000000'use strict'; var Disposable = require('./disposable'); var Observable = require('./observable'); var Observer = require('./observer'); var ScheduledObserver = require('./observer/scheduledobserver'); var Scheduler = require('./scheduler'); var addProperties = require('./internal/addproperties'); var cloneArray = require('./internal/clonearray'); var inherits = require('inherits'); var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; function createRemovableDisposable(subject, observer) { return Disposable.create(function () { observer.dispose(); !subject.isDisposed && subject.observers.splice(subject.observers.indexOf(observer), 1); }); } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. * * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ function ReplaySubject(bufferSize, windowSize, scheduler) { this.bufferSize = bufferSize == null ? MAX_SAFE_INTEGER : bufferSize; this.windowSize = windowSize == null ? MAX_SAFE_INTEGER : windowSize; this.scheduler = scheduler || Scheduler.queue; this.q = []; this.observers = []; this.isStopped = false; this.isDisposed = false; this.hasError = false; this.error = null; Observable.call(this); } inherits(ReplaySubject, Observable); addProperties(ReplaySubject.prototype, Observer.prototype, { _subscribe: function (o) { Disposable.checkDisposed(this); var so = new ScheduledObserver(this.scheduler, o), subscription = createRemovableDisposable(this, so); this._trim(this.scheduler.now()); this.observers.push(so); for (var i = 0, len = this.q.length; i < len; i++) { so.onNext(this.q[i].value); } if (this.hasError) { so.onError(this.error); } else if (this.isStopped) { so.onCompleted(); } so.ensureActive(); return subscription; }, /** * Indicates whether the subject has observers subscribed to it. * @returns {Boolean} Indicates whether the subject has observers subscribed to it. */ hasObservers: function () { Disposable.checkDisposed(this); return this.observers.length > 0; }, _trim: function (now) { while (this.q.length > this.bufferSize) { this.q.shift(); } while (this.q.length > 0 && (now - this.q[0].interval) > this.windowSize) { this.q.shift(); } }, /** * Notifies all subscribed observers about the arrival of the specified element in the sequence. * @param {Mixed} value The value to send to all observers. */ onNext: function (value) { Disposable.checkDisposed(this); if (this.isStopped) { return; } var now = this.scheduler.now(); this.q.push({ interval: now, value: value }); this._trim(now); for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { var observer = os[i]; observer.onNext(value); observer.ensureActive(); } }, /** * Notifies all subscribed observers about the exception. * @param {Mixed} error The exception to send to all observers. */ onError: function (error) { Disposable.checkDisposed(this); if (this.isStopped) { return; } this.isStopped = true; this.error = error; this.hasError = true; var now = this.scheduler.now(); this._trim(now); for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { var observer = os[i]; observer.onError(error); observer.ensureActive(); } this.observers.length = 0; }, /** * Notifies all subscribed observers about the end of the sequence. */ onCompleted: function () { Disposable.checkDisposed(this); if (this.isStopped) { return; } this.isStopped = true; var now = this.scheduler.now(); this._trim(now); for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { var observer = os[i]; observer.onCompleted(); observer.ensureActive(); } this.observers.length = 0; }, /** * Unsubscribe all observers and release resources. */ dispose: function () { this.isDisposed = true; this.observers = null; } }); module.exports = ReplaySubject; RxJS-4.1.0/src/modular/rx.lite.js000066400000000000000000000074351266736161100165410ustar00rootroot00000000000000'use strict'; var Observer = require('./observer'); Observer.addToObject({ create: require('./observer/create') }); var Observable = require('./observable'); Observable.addToObject({ bindCallback: require('./observable/bindcallback'), bindNodeCallback: require('./observable/bindnodecallback'), catch: require('./observable/catch'), concat: require('./observable/concat'), create: require('./observable/create'), empty: require('./observable/empty'), from: require('./observable/from'), fromArray: require('./observable/fromarray'), fromEvent: require('./observable/fromevent'), fromEventPattern: require('./observable/fromeventpattern'), fromPromise: require('./observable/frompromise'), interval: require('./observable/interval'), just: require('./observable/just'), merge: require('./observable/merge'), never: require('./observable/never'), of: require('./observable/of'), range: require('./observable/range'), throw: require('./observable/throw'), using: require('./observable/using'), zip: require('./observable/zip') }); Observable.addToPrototype({ catch: require('./observable/catch'), combineLatest: require('./observable/combinelatest'), concat: require('./observable/concat'), concatAll: require('./observable/concatall'), debounce: require('./observable/debounce'), distinctUntilChanged: require('./observable/distinctuntilchanged'), do: require('./observable/tap'), filter: require('./observable/filter'), finally: require('./observable/finally'), flatMap: require('./observable/flatmap'), flatMapLatest: require('./observable/flatmaplatest'), map: require('./observable/map'), merge: require('./observable/merge'), mergeAll: require('./observable/mergeall'), multicast: require('./observable/multicast'), pluck: require('./observable/pluck'), publish: require('./observable/publish'), publishLast: require('./observable/publishlast'), publishValue: require('./observable/publishvalue'), replay: require('./observable/replay'), scan: require('./observable/scan'), share: require('./observable/share'), shareReplay: require('./observable/sharereplay'), shareValue: require('./observable/sharevalue'), skip: require('./observable/skip'), skipUntil: require('./observable/skipuntil'), switch: require('./observable/switch'), take: require('./observable/take'), takeUntil: require('./observable/takeuntil'), tap: require('./observable/tap'), toArray: require('./observable/toarray'), toPromise: require('./observable/topromise'), zip: require('./observable/zip') }); // RxJS V4 aliases Observable.prototype.selectMany = Observable.prototype.flatMap; Observable.prototype.select = Observable.prototype.map; Observable.prototype.where = Observable.prototype.filter; // RxJS V5 aliases Observable.prototype.mergeMap = Observable.prototype.flatMap; Observable.prototype.switchMap = Observable.prototype.flatMapLatest; Observable.prototype.publishReplay = Observable.prototype.replay; Observable.fromCallback = Observable.bindCallback; Observable.fromNodeCallback = Observable.bindNodeCallback; var Subject = require('./subject'); Subject.addToObject({ create: require('./subject/create') }); var Rx = { // Disposables BinaryDisposable: require('./binarydisposable'), CompositeDisposable: require('./compositedisposable'), Disposable: require('./disposable'), NAryDisposable: require('./narydisposable'), SerialDisposable: require('./serialdisposable'), SingleAssignmentDisposable: require('./singleassignmentdisposable'), // Scheduler Scheduler: require('./scheduler'), // Core Observer: Observer, Observable: Observable, // Subjects AsyncSubject: require('./asyncsubject'), BehaviorSubject: require('./behaviorsubject'), ReplaySubject: require('./replaysubject'), Subject: Subject }; module.exports = Rx; RxJS-4.1.0/src/modular/scheduleddisposable.js000066400000000000000000000006611266736161100211540ustar00rootroot00000000000000'use strict'; function ScheduledDisposable(scheduler, disposable) { this._scheduler = scheduler; this._disposable = disposable; this.isDisposed = false; } function scheduleItem(s, self) { if (!self.isDisposed) { self.isDisposed = true; self._disposable.dispose(); } } ScheduledDisposable.prototype.dispose = function () { this._scheduler.schedule(this, scheduleItem); }; module.exports = ScheduledDisposable; RxJS-4.1.0/src/modular/scheduler.js000066400000000000000000000147021266736161100171250ustar00rootroot00000000000000'use strict'; var errors = require('./internal/errors'); var Disposable = require('./disposable'); var CompositeDisposable = require('./compositedisposable'); function Scheduler() { } /** Determines whether the given object is a scheduler */ Scheduler.isScheduler = function (s) { return s instanceof Scheduler; }; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ Scheduler.prototype.schedule = function (state, action) { throw new errors.NotImplementedError(); }; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ Scheduler.prototype.scheduleFuture = function (state, dueTime, action) { var dt = dueTime; dt instanceof Date && (dt = dt - this.now()); dt = Scheduler.normalize(dt); if (dt === 0) { return this.schedule(state, action); } return this._scheduleFuture(state, dt, action); }; Scheduler.prototype._scheduleFuture = function (state, dueTime, action) { throw new errors.NotImplementedError(); }; function PeriodicDisposable(id) { this._id = id; this.isDisposed = false; } PeriodicDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; global.clearInterval(this._id); } }; /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ Scheduler.prototype.schedulePeriodic = function(state, period, action) { if (typeof global.setInterval === 'undefined') { throw new errors.NotSupportedError(); } period = Scheduler.normalize(period); var s = state, id = global.setInterval(function () { s = action(s); }, period); return new PeriodicDisposable(id); }; function invokeRecImmediate(scheduler, pair) { var state = pair[0], action = pair[1], group = new CompositeDisposable(); action(state, innerAction); return group; function innerAction(state2) { var isAdded = false, isDone = false; var d = scheduler.schedule(state2, scheduleWork); if (!isDone) { group.add(d); isAdded = true; } function scheduleWork(_, state3) { if (isAdded) { group.remove(d); } else { isDone = true; } action(state3, innerAction); return Disposable.empty; } } } function invokeRecDate(scheduler, pair) { var state = pair[0], action = pair[1], group = new CompositeDisposable(); action(state, innerAction); return group; function innerAction(state2, dueTime1) { var isAdded = false, isDone = false; var d = scheduler.scheduleFuture(state2, dueTime1, scheduleWork); if (!isDone) { group.add(d); isAdded = true; } function scheduleWork(_, state3) { if (isAdded) { group.remove(d); } else { isDone = true; } action(state3, innerAction); return Disposable.empty; } } } /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ Scheduler.prototype.scheduleRecursive = function (state, action) { return this.schedule([state, action], invokeRecImmediate); }; /** * Schedules an action to be executed recursively after a specified relative or absolute due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number | Date} dueTime Relative or absolute time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ Scheduler.prototype.scheduleRecursiveFuture = function (state, dueTime, action) { return this.scheduleFuture([state, action], dueTime, invokeRecDate); }; var defaultNow = (function () { return !!Date.now ? Date.now : function () { return +new Date(); }; }()); /** Gets the current time according to the local machine's system clock. */ Scheduler.now = defaultNow; /** Gets the current time according to the local machine's system clock. */ Scheduler.prototype.now = defaultNow; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ Scheduler.normalize = function (timeSpan) { timeSpan < 0 && (timeSpan = 0); return timeSpan; }; module.exports = Scheduler; var CurrentThreadScheduler = require('./scheduler/currentthreadscheduler'); var ImmediateScheduler = require('./scheduler/immediatescheduler'); var DefaultScheduler = require('./scheduler/defaultscheduler'); var CatchScheduler = require('./scheduler/catchscheduler'); Scheduler.queue = Scheduler.currentThread = new CurrentThreadScheduler(); Scheduler.async = Scheduler['default'] = Scheduler.timeout = new DefaultScheduler(); Scheduler.immediate = new ImmediateScheduler(); /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ Scheduler.prototype['catch'] = function (handler) { return new CatchScheduler(this, handler); }; RxJS-4.1.0/src/modular/scheduler/000077500000000000000000000000001266736161100165635ustar00rootroot00000000000000RxJS-4.1.0/src/modular/scheduler/catchscheduler.js000066400000000000000000000044341266736161100221070ustar00rootroot00000000000000'use strict'; var Scheduler = require('../scheduler'); var Disposable = require('../disposable'); var SingleAssignmentDisposable = require('../singleassignmentdisposable'); var inherits = require('inherits'); var tryCatchUtils = require('../internal/trycatchutils'); var tryCatch = tryCatchUtils.tryCatch, errorObj = tryCatchUtils.errorObj, thrower = tryCatchUtils.thrower; function CatchScheduler(scheduler, handler) { this._scheduler = scheduler; this._handler = handler; this._recursiveOriginal = null; this._recursiveWrapper = null; Scheduler.call(this); } inherits(CatchScheduler, Scheduler); CatchScheduler.prototype.schedule = function (state, action) { return this._scheduler.schedule(state, this._wrap(action)); }; CatchScheduler.prototype._scheduleFuture = function (state, dueTime, action) { return this._scheduler.schedule(state, dueTime, this._wrap(action)); }; CatchScheduler.prototype.now = function () { return this._scheduler.now(); }; CatchScheduler.prototype._clone = function (scheduler) { return new CatchScheduler(scheduler, this._handler); }; CatchScheduler.prototype._wrap = function (action) { var parent = this; return function (self, state) { var res = tryCatch(action)(parent._getRecursiveWrapper(self), state); if (res === errorObj) { if (!parent._handler(res.e)) { thrower(res.e); } return Disposable.empty; } return Disposable._fixup(res); }; }; CatchScheduler.prototype._getRecursiveWrapper = function (scheduler) { if (this._recursiveOriginal !== scheduler) { this._recursiveOriginal = scheduler; var wrapper = this._clone(scheduler); wrapper._recursiveOriginal = scheduler; wrapper._recursiveWrapper = wrapper; this._recursiveWrapper = wrapper; } return this._recursiveWrapper; }; CatchScheduler.prototype.schedulePeriodic = function (state, period, action) { var self = this, failed = false, d = new SingleAssignmentDisposable(); d.setDisposable(this._scheduler.schedulePeriodic(state, period, function (state1) { if (failed) { return null; } var res = tryCatch(action)(state1); if (res === errorObj) { failed = true; if (!self._handler(res.e)) { thrower(res.e); } d.dispose(); return null; } return res; })); return d; }; module.exports = CatchScheduler; RxJS-4.1.0/src/modular/scheduler/currentthreadscheduler.js000066400000000000000000000025041266736161100236730ustar00rootroot00000000000000'use strict'; var Scheduler = require('../scheduler'); var ScheduledItem = require('./scheduleditem'); var PriorityQueue = require('../internal/priorityqueue'); var tryCatchUtils = require('../internal/trycatchutils'); var tryCatch = tryCatchUtils.tryCatch, errorObj = tryCatchUtils.errorObj, thrower = tryCatchUtils.thrower; var inherits = require('inherits'); function CurrentThreadScheduler() { Scheduler.call(this); } CurrentThreadScheduler.queue = null; inherits(CurrentThreadScheduler, Scheduler); function runTrampoline () { while (CurrentThreadScheduler.queue.length > 0) { var item = CurrentThreadScheduler.queue.dequeue(); !item.isCancelled() && item.invoke(); } } CurrentThreadScheduler.prototype.schedule = function (state, action) { var si = new ScheduledItem(this, state, action, this.now()); if (!CurrentThreadScheduler.queue) { CurrentThreadScheduler.queue = new PriorityQueue(4); CurrentThreadScheduler.queue.enqueue(si); var result = tryCatch(runTrampoline)(); CurrentThreadScheduler.queue = null; if (result === errorObj) { thrower(result.e); } } else { CurrentThreadScheduler.queue.enqueue(si); } return si.disposable; }; CurrentThreadScheduler.prototype.scheduleRequired = function () { return !CurrentThreadScheduler.queue; }; module.exports = CurrentThreadScheduler; RxJS-4.1.0/src/modular/scheduler/defaultscheduler.js000066400000000000000000000121371266736161100224500ustar00rootroot00000000000000'use strict'; var Disposable = require('../disposable'); var BinaryDisposable = require('../binarydisposable'); var SingleAssignmentDisposable = require('../singleassignmentdisposable'); var Scheduler = require('../scheduler'); var isFunction = require('../helpers/isfunction'); var noop = require('../helpers/noop'); var tryCatchUtils = require('../internal/trycatchutils'); var tryCatch = tryCatchUtils.tryCatch, errorObj = tryCatchUtils.errorObj, thrower = tryCatchUtils.thrower; var inherits = require('inherits'); var scheduleMethod, clearMethod; (function () { var nextHandle = 1, tasksByHandle = {}, currentlyRunning = false; clearMethod = function (handle) { delete tasksByHandle[handle]; }; function runTask(handle) { if (currentlyRunning) { global.setTimeout(function () { runTask(handle); }, 0); } else { var task = tasksByHandle[handle]; if (task) { currentlyRunning = true; var result = tryCatch(task)(); clearMethod(handle); currentlyRunning = false; if (result === errorObj) { thrower(result.e); } } } } var setImmediate = global.setImmediate; function postMessageSupported () { // Ensure not in a worker if (!global.postMessage || global.importScripts) { return false; } var isAsync = false, oldHandler = global.onmessage; // Test for async global.onmessage = function () { isAsync = true; }; global.postMessage('', '*'); global.onmessage = oldHandler; return isAsync; } // Use in order, setImmediate, nextTick, postMessage, MessageChannel, script readystatechanged, setTimeout if (isFunction(setImmediate)) { scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; setImmediate(function () { runTask(id); }); return id; }; } else if (typeof process !== 'undefined' && {}.toString.call(process) === '[object process]') { scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; process.nextTick(function () { runTask(id); }); return id; }; } else if (postMessageSupported()) { var MSG_PREFIX = 'ms.rx.schedule' + Math.random(); var onGlobalPostMessage = function (event) { // Only if we're a match to avoid any other global events if (typeof event.data === 'string' && event.data.substring(0, MSG_PREFIX.length) === MSG_PREFIX) { runTask(event.data.substring(MSG_PREFIX.length)); } }; global.addEventListener('message', onGlobalPostMessage, false); scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; global.postMessage(MSG_PREFIX + id, '*'); return id; }; } else if (!!global.MessageChannel) { var channel = new global.MessageChannel(); channel.port1.onmessage = function (e) { runTask(e.data); }; scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; channel.port2.postMessage(id); return id; }; } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) { scheduleMethod = function (action) { var scriptElement = global.document.createElement('script'); var id = nextHandle++; tasksByHandle[id] = action; scriptElement.onreadystatechange = function () { runTask(id); scriptElement.onreadystatechange = null; scriptElement.parentNode.removeChild(scriptElement); scriptElement = null; }; global.document.documentElement.appendChild(scriptElement); return id; }; } else { scheduleMethod = function (action) { var id = nextHandle++; tasksByHandle[id] = action; global.setTimeout(function () { runTask(id); }, 0); return id; }; } }()); /** * Gets a scheduler that schedules work via a timed callback based upon platform. */ function DefaultScheduler() { Scheduler.call(this); } inherits(DefaultScheduler, Scheduler); function scheduleAction(disposable, action, scheduler, state) { return function schedule() { disposable.setDisposable(Disposable._fixup(action(scheduler, state))); }; } function ClearDisposable(method, id) { this._id = id; this._method = method; this.isDisposed = false; } ClearDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; this._method.call(null, this._id); } }; DefaultScheduler.prototype.schedule = function (state, action) { var disposable = new SingleAssignmentDisposable(), id = scheduleMethod(scheduleAction(disposable, action, this, state)); return new BinaryDisposable(disposable, new ClearDisposable(clearMethod, id)); }; DefaultScheduler.prototype._scheduleFuture = function (state, dueTime, action) { if (dueTime === 0) { return this.schedule(state, action); } var disposable = new SingleAssignmentDisposable(), id = global.setTimeout(scheduleAction(disposable, action, this, state), dueTime); return new BinaryDisposable(disposable, new ClearDisposable(global.clearTimeout, id)); }; module.exports = DefaultScheduler; RxJS-4.1.0/src/modular/scheduler/historicalscheduler.js000066400000000000000000000031141266736161100231600ustar00rootroot00000000000000'use strict'; var VirtualTimeScheduler = require('./virtualtimescheduler'); var inherits = require('inherits'); function baseComparer(x, y) { return x > y ? 1 : (x < y ? -1 : 0); } /** * Provides a virtual time scheduler that uses Date for absolute time and number for relative time. * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ function HistoricalScheduler(initialClock, comparer) { var clock = initialClock == null ? 0 : initialClock; var cmp = comparer || baseComparer; VirtualTimeScheduler.call(this, clock, cmp); } inherits(HistoricalScheduler, VirtualTimeScheduler); /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ HistoricalScheduler.prototype.add = function (absolute, relative) { return absolute + relative; }; HistoricalScheduler.prototype.toAbsoluteTime = function (absolute) { return new Date(absolute).getTime(); }; /** * Converts the TimeSpan value to a relative virtual time value. * @memberOf HistoricalScheduler * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ HistoricalScheduler.prototype.toRelativeTime = function (timeSpan) { return timeSpan; }; module.exports = HistoricalScheduler; RxJS-4.1.0/src/modular/scheduler/immediatescheduler.js000066400000000000000000000006121266736161100227550ustar00rootroot00000000000000'use strict'; var Scheduler = require('../scheduler'); var Disposable = require('../disposable'); var inherits = require('inherits'); function ImmediateScheduler() { Scheduler.call(this); } inherits(ImmediateScheduler, Scheduler); ImmediateScheduler.prototype.schedule = function (state, action) { return Disposable._fixup(action(this, state)); }; module.exports = ImmediateScheduler; RxJS-4.1.0/src/modular/scheduler/scheduleditem.js000066400000000000000000000016101266736161100217360ustar00rootroot00000000000000'use strict'; var Disposable = require('../disposable'); var SingleAssignmentDisposable = require('../singleassignmentdisposable'); var cmp = require('../helpers/comparer'); function ScheduledItem(scheduler, state, action, dueTime, comparer) { this.scheduler = scheduler; this.state = state; this.action = action; this.dueTime = dueTime; this.comparer = comparer || cmp; this.disposable = new SingleAssignmentDisposable(); } ScheduledItem.prototype.invoke = function () { this.disposable.setDisposable(this.invokeCore()); }; ScheduledItem.prototype.compareTo = function (other) { return this.comparer(this.dueTime, other.dueTime); }; ScheduledItem.prototype.isCancelled = function () { return this.disposable.isDisposed; }; ScheduledItem.prototype.invokeCore = function () { return Disposable._fixup(this.action(this.scheduler, this.state)); }; module.exports = ScheduledItem; RxJS-4.1.0/src/modular/scheduler/scheduleperiodicrecursive.js000066400000000000000000000017351266736161100243720ustar00rootroot00000000000000'use strict'; var SingleAssignmentDisposable = require('../singleassignmentdisposable'); var tryCatchUtils = require('../internal/trycatchutils'); var tryCatch = tryCatchUtils.tryCatch, errorObj = tryCatchUtils.errorObj, thrower = tryCatchUtils.thrower; function createTick(self) { return function tick(command, recurse) { recurse(0, self._period); var state = tryCatch(self._action)(self._state); if (state === errorObj) { self._cancel.dispose(); thrower(state.e); } self._state = state; }; } function SchedulePeriodicRecursive(scheduler, state, period, action) { this._scheduler = scheduler; this._state = state; this._period = period; this._action = action; } SchedulePeriodicRecursive.prototype.start = function () { var d = new SingleAssignmentDisposable(); this._cancel = d; d.setDisposable(this._scheduler.scheduleRecursiveFuture(0, this._period, createTick(this))); return d; }; module.exports = SchedulePeriodicRecursive; RxJS-4.1.0/src/modular/scheduler/virtualtimescheduler.js000066400000000000000000000150741266736161100233740ustar00rootroot00000000000000'use strict'; var Scheduler = require('../scheduler'); var PriorityQueue = require('../internal/priorityqueue'); var ScheduledItem = require('./scheduleditem'); var SchedulePeriodicRecursive = require('./scheduleperiodicrecursive'); var errors = require('../internal/errors'); var inherits = require('inherits'); function notImplemented() { throw new errors.NotImplementedError(); } /** * Creates a new virtual time scheduler with the specified initial clock value and absolute time comparer. * * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ function VirtualTimeScheduler(initialClock, comparer) { this.clock = initialClock; this.comparer = comparer; this.isEnabled = false; this.queue = new PriorityQueue(1024); Scheduler.call(this); } inherits(VirtualTimeScheduler, Scheduler); var VirtualTimeSchedulerPrototype = VirtualTimeScheduler.prototype; VirtualTimeSchedulerPrototype.now = function () { return this.toAbsoluteTime(this.clock); }; VirtualTimeSchedulerPrototype.schedule = function (state, action) { return this.scheduleAbsolute(state, this.clock, action); }; VirtualTimeSchedulerPrototype.scheduleFuture = function (state, dueTime, action) { var dt = dueTime instanceof Date ? this.toRelativeTime(dueTime - this.now()) : this.toRelativeTime(dueTime); return this.scheduleRelative(state, dt, action); }; /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ VirtualTimeSchedulerPrototype.add = notImplemented; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ VirtualTimeSchedulerPrototype.toAbsoluteTime = notImplemented; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ VirtualTimeSchedulerPrototype.toRelativeTime = notImplemented; /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be emulated using recursive scheduling. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ VirtualTimeSchedulerPrototype.schedulePeriodic = function (state, period, action) { var s = new SchedulePeriodicRecursive(this, state, period, action); return s.start(); }; /** * Schedules an action to be executed after dueTime. * @param {Mixed} state State passed to the action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ VirtualTimeSchedulerPrototype.scheduleRelative = function (state, dueTime, action) { var runAt = this.add(this.clock, dueTime); return this.scheduleAbsolute(state, runAt, action); }; /** * Starts the virtual time scheduler. */ VirtualTimeSchedulerPrototype.start = function () { if (!this.isEnabled) { this.isEnabled = true; do { var next = this.getNext(); if (next !== null) { this.comparer(next.dueTime, this.clock) > 0 && (this.clock = next.dueTime); next.invoke(); } else { this.isEnabled = false; } } while (this.isEnabled); } }; /** * Stops the virtual time scheduler. */ VirtualTimeSchedulerPrototype.stop = function () { this.isEnabled = false; }; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ VirtualTimeSchedulerPrototype.advanceTo = function (time) { var dueToClock = this.comparer(this.clock, time); if (this.comparer(this.clock, time) > 0) { throw new errors.ArgumentOutOfRangeError(); } if (dueToClock === 0) { return; } if (!this.isEnabled) { this.isEnabled = true; do { var next = this.getNext(); if (next !== null && this.comparer(next.dueTime, time) <= 0) { this.comparer(next.dueTime, this.clock) > 0 && (this.clock = next.dueTime); next.invoke(); } else { this.isEnabled = false; } } while (this.isEnabled); this.clock = time; } }; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ VirtualTimeSchedulerPrototype.advanceBy = function (time) { var dt = this.add(this.clock, time), dueToClock = this.comparer(this.clock, dt); if (dueToClock > 0) { throw new errors.ArgumentOutOfRangeError(); } if (dueToClock === 0) { return; } this.advanceTo(dt); }; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ VirtualTimeSchedulerPrototype.sleep = function (time) { var dt = this.add(this.clock, time); if (this.comparer(this.clock, dt) >= 0) { throw new errors.ArgumentOutOfRangeError(); } this.clock = dt; }; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ VirtualTimeSchedulerPrototype.getNext = function () { while (this.queue.length > 0) { var next = this.queue.peek(); if (next.isCancelled()) { this.queue.dequeue(); } else { return next; } } return null; }; /** * Schedules an action to be executed at dueTime. * @param {Mixed} state State passed to the action to be executed. * @param {Number} dueTime Absolute time at which to execute the action. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ VirtualTimeSchedulerPrototype.scheduleAbsolute = function (state, dueTime, action) { var self = this; function run(scheduler, state1) { self.queue.remove(si); return action(scheduler, state1); } var si = new ScheduledItem(this, state, run, dueTime, this.comparer); this.queue.enqueue(si); return si.disposable; }; module.exports = VirtualTimeScheduler; RxJS-4.1.0/src/modular/serialdisposable.js000066400000000000000000000012421266736161100204670ustar00rootroot00000000000000'use strict'; function SerialDisposable() { this.isDisposed = false; this._current = null; } SerialDisposable.prototype.getDisposable = function () { return this._current; }; SerialDisposable.prototype.setDisposable = function (value) { var shouldDispose = this.isDisposed; if (!shouldDispose) { var old = this._current; this._current = value; old && old.dispose(); } shouldDispose && value && value.dispose(); }; SerialDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; var old = this._current; this._current = null; old && old.dispose(); } }; module.exports = SerialDisposable; RxJS-4.1.0/src/modular/singleassignmentdisposable.js000066400000000000000000000013451266736161100225660ustar00rootroot00000000000000'use strict'; function SingleAssignmentDisposable () { this.isDisposed = false; this._current = null; } SingleAssignmentDisposable.prototype.getDisposable = function () { return this._current; }; SingleAssignmentDisposable.prototype.setDisposable = function (value) { if (this._current) { throw new Error('Disposable has already been assigned'); } var shouldDispose = this.isDisposed; !shouldDispose && (this._current = value); shouldDispose && value && value.dispose(); }; SingleAssignmentDisposable.prototype.dispose = function () { if (!this.isDisposed) { this.isDisposed = true; var old = this._current; this._current = null; old && old.dispose(); } }; module.exports = SingleAssignmentDisposable; RxJS-4.1.0/src/modular/subject.js000066400000000000000000000062161266736161100166070ustar00rootroot00000000000000'use strict'; var Disposable = require('./disposable'); var Observable = require('./observable'); var Observer = require('./observer'); var InnerSubscription = require('./internal/innersubscription'); var addProperties = require('./internal/addproperties'); var cloneArray = require('./internal/clonearray'); var inherits = require('inherits'); /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed observers. */ function Subject() { Observable.call(this); this.isDisposed = false; this.isStopped = false; this.observers = []; this.hasError = false; } inherits(Subject, Observable); addProperties(Subject.prototype, Observer.prototype, { _subscribe: function (o) { Disposable.checkDisposed(this); if (!this.isStopped) { this.observers.push(o); return new InnerSubscription(this, o); } if (this.hasError) { o.onError(this.error); return Disposable.empty; } o.onCompleted(); return Disposable.empty; }, /** * Indicates whether the subject has observers subscribed to it. * @returns {Boolean} Indicates whether the subject has observers subscribed to it. */ hasObservers: function () { Disposable.checkDisposed(this); return this.observers.length > 0; }, /** * Notifies all subscribed observers about the end of the sequence. */ onCompleted: function () { Disposable.checkDisposed(this); if (!this.isStopped) { this.isStopped = true; for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { os[i].onCompleted(); } this.observers.length = 0; } }, /** * Notifies all subscribed observers about the exception. * @param {Mixed} error The exception to send to all observers. */ onError: function (error) { Disposable.checkDisposed(this); if (!this.isStopped) { this.isStopped = true; this.error = error; this.hasError = true; for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { os[i].onError(error); } this.observers.length = 0; } }, /** * Notifies all subscribed observers about the arrival of the specified element in the sequence. * @param {Mixed} value The value to send to all observers. */ onNext: function (value) { Disposable.checkDisposed(this); if (!this.isStopped) { for (var i = 0, os = cloneArray(this.observers), len = os.length; i < len; i++) { os[i].onNext(value); } } }, /** * Unsubscribe all observers and release resources. */ dispose: function () { this.isDisposed = true; this.observers = null; } }); Subject.addToObject = function (operators) { Object.keys(operators).forEach(function (operator) { Subject[operator] = operators[operator]; }); }; Subject.addToPrototype = function (operators) { Object.keys(operators).forEach(function (operator) { Subject.prototype[operator] = function () { var args = [this]; args.push.apply(args, arguments); return operators[operator].apply(null, args); }; }); }; module.exports = Subject; RxJS-4.1.0/src/modular/subject/000077500000000000000000000000001266736161100162445ustar00rootroot00000000000000RxJS-4.1.0/src/modular/subject/create.js000066400000000000000000000022211266736161100200420ustar00rootroot00000000000000'use strict'; var Observable = require('../observable'); var Observer = require('../observer'); var addProperties = require('../internal/addproperties'); var inherits = require('inherits'); function AnonymousSubject(observer, observable) { this.observer = observer; this.observable = observable; Observable.call(this); } inherits(AnonymousSubject, Observable); addProperties(AnonymousSubject.prototype, Observer.prototype, { _subscribe: function (o) { return this.observable.subscribe(o); }, onCompleted: function () { this.observer.onCompleted(); }, onError: function (error) { this.observer.onError(error); }, onNext: function (value) { this.observer.onNext(value); } }); /** * Creates a subject from the specified observer and observable. * @param {Observer} observer The observer used to send messages to the subject. * @param {Observable} observable The observable used to subscribe to messages sent from the subject. * @returns {Subject} Subject implemented using the given observer and observable. */ module.exports = function create(observer, observable) { return new AnonymousSubject(observer, observable); }; RxJS-4.1.0/src/modular/test/000077500000000000000000000000001266736161100155645ustar00rootroot00000000000000RxJS-4.1.0/src/modular/test/asyncsubject.js000066400000000000000000000224201266736161100206170ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var AsyncSubject = require('../asyncsubject'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; test('AsyncSubject Infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onNext(630, 8), onNext(710, 9), onNext(870, 10), onNext(940, 11), onNext(1020, 12) ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); var subject; var subscription, subscription1, subscription2, subscription3; scheduler.scheduleAbsolute(null, 100, function () { subject = new AsyncSubject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, []); reactiveAssert(t, results2.messages, []); reactiveAssert(t, results3.messages, []); t.end(); }); test('AsyncSubject Finite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); var subject; var subscription, subscription1, subscription2, subscription3; scheduler.scheduleAbsolute(null, 100, function () { subject = new AsyncSubject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, []); reactiveAssert(t, results2.messages, [onNext(630, 7), onCompleted(630)]); reactiveAssert(t, results3.messages, [onNext(900, 7), onCompleted(900)]); t.end(); }); test('AsyncSubject Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onError(630, error), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); var subject; var subscription, subscription1, subscription2, subscription3; scheduler.scheduleAbsolute(null, 100, function () { subject = new AsyncSubject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, []); reactiveAssert(t, results2.messages, [onError(630, error)]); reactiveAssert(t, results3.messages, [onError(900, error)]); t.end(); }); test('AsyncSubject cancelled', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error())); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); var subject; var subscription, subscription1, subscription2, subscription3; scheduler.scheduleAbsolute(null, 100, function () { subject = new AsyncSubject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, []); reactiveAssert(t, results2.messages, [onCompleted(630)]); reactiveAssert(t, results3.messages, [onCompleted(900)]); t.end(); }); test('AsyncSubject disposed', function (t) { var scheduler = new TestScheduler(); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); var subject; var subscription1, subscription2, subscription3; scheduler.scheduleAbsolute(null, 100, function () { subject = new AsyncSubject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 300, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 400, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 500, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 600, function () { subject.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription3.dispose(); }); scheduler.scheduleAbsolute(null, 150, function () { subject.onNext(1); }); scheduler.scheduleAbsolute(null, 250, function () { subject.onNext(2); }); scheduler.scheduleAbsolute(null, 350, function () { subject.onNext(3); }); scheduler.scheduleAbsolute(null, 450, function () { subject.onNext(4); }); scheduler.scheduleAbsolute(null, 550, function () { subject.onNext(5); }); scheduler.scheduleAbsolute(null, 650, function () { t.throws(function () { subject.onNext(6); }); }); scheduler.scheduleAbsolute(null, 750, function () { t.throws(function () { subject.onCompleted(); }); }); scheduler.scheduleAbsolute(null, 850, function () { t.throws(function () { subject.onError(new Error()); }); }); scheduler.scheduleAbsolute(null, 950, function () { t.throws(function () { subject.subscribe(); }); }); scheduler.start(); reactiveAssert(t, results1.messages, []); reactiveAssert(t, results2.messages, []); reactiveAssert(t, results3.messages, []); t.end(); }); RxJS-4.1.0/src/modular/test/average.js000066400000000000000000000070441266736161100175410ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var EmptyError = require('../internal/errors').EmptyError; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ average: require('../observable/average') }); test('Observable#average number Empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.average(); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); t.end(); }); test('Observable#average number return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.average(); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); test('Observable#average number some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 3), onNext(220, 4), onNext(230, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.average(); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onCompleted(250) ]); t.end(); }); test('Observable#average number throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.average(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#average number never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.average(); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#average selector regular number', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 'b'), onNext(220, 'fo'), onNext(230, 'qux'), onCompleted(240) ); var results = scheduler.startScheduler(function () { return xs.average(function (x) { return x.length; }); }); reactiveAssert(t, results.messages, [ onNext(240, 2), onCompleted(240) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 240) ]); t.end(); }); test('Observable#average selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 'b'), onNext(220, 'fo'), onNext(230, 'qux'), onCompleted(240) ); var results = scheduler.startScheduler(function () { return xs.average(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); RxJS-4.1.0/src/modular/test/behaviorsubject.js000066400000000000000000000306421266736161100213060ustar00rootroot00000000000000'use strict'; var test = require('tape'); var BehaviorSubject = require('../behaviorsubject'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; test('BehaviorSubject Infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onNext(630, 8), onNext(710, 9), onNext(870, 10), onNext(940, 11), onNext(1020, 12) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new BehaviorSubject(100); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(300, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7) ]); reactiveAssert(t, results2.messages, [ onNext(400, 5), onNext(410, 6), onNext(520, 7), onNext(630, 8) ]); reactiveAssert(t, results3.messages, [ onNext(900, 10), onNext(940, 11) ]); t.end(); }); test('BehaviorSubject Finite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new BehaviorSubject(100); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(300, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7) ]); reactiveAssert(t, results2.messages, [ onNext(400, 5), onNext(410, 6), onNext(520, 7), onCompleted(630) ]); reactiveAssert(t, results3.messages, [ onCompleted(900) ]); t.end(); }); test('BehaviorSubject Error', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onError(630, ex), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new BehaviorSubject(100); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(300, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7) ]); reactiveAssert(t, results2.messages, [ onNext(400, 5), onNext(410, 6), onNext(520, 7), onError(630, ex) ]); reactiveAssert(t, results3.messages, [ onError(900, ex) ]); t.end(); }); test('BehaviorSubject Canceled', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new BehaviorSubject(100); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(300, 100) ]); reactiveAssert(t, results2.messages, [ onNext(400, 100), onCompleted(630) ]); reactiveAssert(t, results3.messages, [ onCompleted(900) ]); t.end(); }); test('BehaviorSubject subject disposed', function (t) { var scheduler = new TestScheduler(); var subject; var results1 = scheduler.createObserver(); var subscription1; var results2 = scheduler.createObserver(); var subscription2; var results3 = scheduler.createObserver(); var subscription3; scheduler.scheduleAbsolute(null, 100, function () { subject = new BehaviorSubject(0); }); scheduler.scheduleAbsolute(null, 200, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 300, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 400, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 500, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 600, function () { subject.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription3.dispose(); }); scheduler.scheduleAbsolute(null, 150, function () { subject.onNext(1); }); scheduler.scheduleAbsolute(null, 250, function () { subject.onNext(2); }); scheduler.scheduleAbsolute(null, 350, function () { subject.onNext(3); }); scheduler.scheduleAbsolute(null, 450, function () { subject.onNext(4); }); scheduler.scheduleAbsolute(null, 550, function () { subject.onNext(5); }); scheduler.scheduleAbsolute(null, 650, function () { t.throws(function () { subject.onNext(6); }); }); scheduler.scheduleAbsolute(null, 750, function () { t.throws(function () { subject.onCompleted(); }); }); scheduler.scheduleAbsolute(null, 850, function () { t.throws(function () { subject.onError(new Error()); }); }); scheduler.scheduleAbsolute(null, 950, function () { t.throws(function () { subject.subscribe(); }); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(200, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4) ]); reactiveAssert(t, results2.messages, [ onNext(300, 2), onNext(350, 3), onNext(450, 4), onNext(550, 5) ]); reactiveAssert(t, results3.messages, [ onNext(400, 3), onNext(450, 4), onNext(550, 5) ]); t.end(); }); test('BehaviorSubject value vs getValue()', function (t) { var scheduler = new TestScheduler(); var subject; var resultsGetValue = scheduler.createObserver(); var resultsValue = scheduler.createObserver(); // create and dispose scheduler.scheduleAbsolute(null, 100, function () { subject = new BehaviorSubject(0); }); scheduler.scheduleAbsolute(null, 650, function () { subject.dispose(); }); // fill the subject with values scheduler.scheduleAbsolute(null, 150, function () { subject.onNext(1); }); scheduler.scheduleAbsolute(null, 250, function () { subject.onNext(2); }); scheduler.scheduleAbsolute(null, 350, function () { subject.onNext(3); }); scheduler.scheduleAbsolute(null, 450, function () { subject.onNext(4); }); scheduler.scheduleAbsolute(null, 550, function () { subject.onError(new Error('Subject onError() method has been called')); }); // getValue() scheduler.scheduleAbsolute(null, 200, function () { resultsGetValue.onNext(subject.getValue()); }); scheduler.scheduleAbsolute(null, 300, function () { resultsGetValue.onNext(subject.getValue()); }); scheduler.scheduleAbsolute(null, 400, function () { resultsGetValue.onNext(subject.getValue()); }); scheduler.scheduleAbsolute(null, 500, function () { resultsGetValue.onNext(subject.getValue()); }); scheduler.scheduleAbsolute(null, 600, function () { t.throws(function () { resultsGetValue.onNext(subject.getValue()); }); }); scheduler.scheduleAbsolute(null, 700, function () { t.throws(function () { resultsGetValue.onNext(subject.getValue()); }); }); // value scheduler.scheduleAbsolute(null, 200, function () { resultsValue.onNext(subject.value); }); scheduler.scheduleAbsolute(null, 300, function () { resultsValue.onNext(subject.value); }); scheduler.scheduleAbsolute(null, 400, function () { resultsValue.onNext(subject.value); }); scheduler.scheduleAbsolute(null, 500, function () { resultsValue.onNext(subject.value); }); scheduler.scheduleAbsolute(null, 600, function () { resultsValue.onNext(subject.value); }); scheduler.scheduleAbsolute(null, 700, function () { resultsValue.onNext(subject.value); }); scheduler.start(); reactiveAssert(t, resultsGetValue.messages, [ onNext(200, 1), onNext(300, 2), onNext(400, 3), onNext(500, 4) // getValue() throws an exception if BehaviorSubject.onError() has been called //onNext(600) // getValue() throws an exception if BehaviorSubject has been disposed //onNext(700) ]); reactiveAssert(t, resultsValue.messages, [ onNext(200, 1), onNext(300, 2), onNext(400, 3), onNext(500, 4), // value is frozen if BehaviorSubject.onError() has been called onNext(600, 4), // value returns null if BehaviorSubject has been disposed onNext(700, null) ]); t.end(); }); RxJS-4.1.0/src/modular/test/binarydisposable.js000066400000000000000000000026261266736161100214620ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Disposable = require('../disposable'); var BinaryDisposable = require('../binarydisposable'); test('BinaryDisposable#constructor', function (t) { var disp1 = false; var disp2 = false; var d1 = Disposable.create(function () { disp1 = true; }); var d2 = Disposable.create(function () { disp2 = true; }); var b = new BinaryDisposable(d1, d2); t.equal(b.isDisposed, false, 'should not be disposed'); t.equal(disp1, false, 'first should not be disposed'); t.equal(disp2, false, 'second should not be disposed'); t.end(); }); test('BinaryDisposable#dispose', function (t) { var disp1 = false; var disp2 = false; var d1 = Disposable.create(function () { disp1 = true; }); var d2 = Disposable.create(function () { disp2 = true; }); var b = new BinaryDisposable(d1, d2); t.equal(b.isDisposed, false, 'should not be disposed'); t.equal(disp1, false, 'first should not be disposed'); t.equal(disp2, false, 'second should not be disposed'); b.dispose(); t.equal(b.isDisposed, true, 'should be disposed'); t.equal(disp1, true, 'first should be disposed'); t.equal(disp2, true, 'second should be disposed'); b.dispose(); t.equal(b.isDisposed, true, 'should be idempotent'); t.equal(disp1, true, 'first should be idempotent'); t.equal(disp2, true, 'second should be idempotent'); t.end(); }); RxJS-4.1.0/src/modular/test/bindcallback.js000066400000000000000000000060171266736161100205170ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ bindCallback: require('../observable/bindcallback') }); test('Observable.bindCallback', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindCallback(function (cb) { cb(true); })(); }); reactiveAssert(t, results.messages, [ onNext(200, true), onCompleted(200) ]); t.end(); }); test('Observable.bindCallback throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindCallback(function () { throw error; })(); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.bindCallback single argument', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindCallback(function (file, cb) { cb(file); })('file.txt'); }); reactiveAssert(t, results.messages, [ onNext(200, 'file.txt'), onCompleted(200) ]); t.end(); }); test('Observable.bindCallback selector', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindCallback( function (f, s, t, cb) { cb(1,2,3); }, null, function (f) { return f; })(1,2,3); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onCompleted(200) ]); t.end(); }); test('Observable.bindCallback selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindCallback( function (f, s, t, cb) { cb(1,2,3); }, null, function () { throw error; })(1,2,3); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.bindCallback ctx', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindCallback( function (cb) { t.equal(this, 42); cb(null); }, 42)(); }); reactiveAssert(t, results.messages, [ onNext(200, null), onCompleted(200) ]); t.end(); }); test('Observable.bindCallback resubscribe', function (t) { var count = 0; var res = Observable.bindCallback( function(cb) { cb(++count); })(); res.subscribe(function (x) { t.equal(x, 1); }, function () { t.fail(); }, function () { t.ok(true); }); res.subscribe(function (x) { t.equal(x, 1); }, function () { t.fail(); }, function () { t.ok(true); }); t.equal(1, count); t.end(); }); RxJS-4.1.0/src/modular/test/bindnodecallback.js000066400000000000000000000075311266736161100213670ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ bindNodeCallback: require('../observable/bindnodecallback') }); test('Observable.bindNodeCallback', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback(function (cb) { cb(null); })(); }); reactiveAssert(t, results.messages, [ onNext(200, undefined), onCompleted(200) ]); t.end(); }); test('Observable.bindNodeCallback throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback(function () { throw error; })(); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.bindNodeCallback single', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback(function (file, cb) { cb(null, file); })('foo'); }); reactiveAssert(t, results.messages, [ onNext(200, 'foo'), onCompleted(200) ]); t.end(); }); test('Observable.bindNodeCallback selector', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback( function (f, s, t, cb) { cb(null, f, s, t); }, null, function (f) { return f; })(1,2,3); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onCompleted(200) ]); t.end(); }); test('Observable.bindNodeCallback selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback( function (f, s, t, cb) { cb(null, f, s, t); }, null, function () { throw error; })(1,2,3); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.bindNodeCallback selector', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback( function (f, s, t, cb) { cb(null, f, s, t); }, null, function (f) { return f; })(1,2,3); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onCompleted(200) ]); t.end(); }); test('Observable.bindNodeCallback ctx', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback( function (cb) { t.equal(this, 42); cb(null); }, 42)(); }); reactiveAssert(t, results.messages, [ onNext(200, undefined), onCompleted(200) ]); t.end(); }); test('Observable.bindNodeCallback Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.bindNodeCallback(function (cb) { cb(error); })(); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.bindNodeCallback resubscribe', function (t) { var count = 0; var res = Observable.bindNodeCallback( function(cb) { cb(null, ++count); })(); res.subscribe(function (x) { t.equal(x, 1); }, function () { t.fail(); }, function () { t.ok(true); }); res.subscribe(function (x) { t.equal(x, 1); }, function () { t.fail(); }, function () { t.ok(true); }); t.equal(1, count); t.end(); }); RxJS-4.1.0/src/modular/test/buffer.js000066400000000000000000000261461266736161100174040ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ empty: require('../observable/empty'), 'throw': require('../observable/throw'), timer: require('../observable/timer') }); Observable.addToPrototype({ buffer: require('../observable/buffer'), delay: require('../observable/delay') }); test('Observable#buffer Boundaries Simple', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onNext(400, true), onNext(500, true), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.buffer(ys); }); reactiveAssert(t, results.messages, [ onNext(255, [3]), onNext(330, [4, 5]), onNext(350, [6]), onNext(400, [ ]), onNext(500, [7, 8, 9]), onNext(590, [10]), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#buffer Boundaries onCompleted Boundaries', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.buffer(ys); }); reactiveAssert(t, results.messages, [ onNext(255, [3]), onNext(330, [4, 5]), onNext(350, [6]), onNext(400, []), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#buffer Boundaries onError Source', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(380, 7), onError(400, ex) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.buffer(ys); }); reactiveAssert(t, results.messages, [ onNext(255, [3]), onNext(330, [4, 5]), onNext(350, [6]), onError(400, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#buffer Boundaries onError Boundaries', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onError(400, ex) ); var results = scheduler.startScheduler(function () { return xs.buffer(ys); }); reactiveAssert(t, results.messages, [ onNext(255, [3]), onNext(330, [4, 5]), onNext(350, [6]), onError(400, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#buffer Closings Basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.buffer(function () { return Observable.timer((window++) * 100, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(300, [ 3, 4 ]), onNext(500, [ 5, 6, 7, 8, 9 ]), onNext(590, [ 10 ]), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#buffer Closings Inner Subscriptions', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var closings = [ scheduler.createHotObservable( onNext(300, true), onNext(350, false), onCompleted(380) ), scheduler.createHotObservable( onNext(400, true), onNext(510, false), onNext(620, false) ), scheduler.createHotObservable( onCompleted(500) ), scheduler.createHotObservable( onNext(600, true) ) ]; var window = 0; var results = scheduler.startScheduler(function () { return xs.buffer(function () { return closings[window++]; }); }); reactiveAssert(t, results.messages, [ onNext(300, [3, 4 ]), onNext(400, [5, 6 ]), onNext(500, [7, 8, 9 ]), onNext(590, [10 ]), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); reactiveAssert(t, closings[0].subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, closings[1].subscriptions, [ subscribe(300, 400) ]); reactiveAssert(t, closings[2].subscriptions, [ subscribe(400, 500) ]); reactiveAssert(t, closings[3].subscriptions, [ subscribe(500, 590) ]); t.end(); }); test('Observable#buffer Closings Empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.buffer(function () { return Observable.empty().delay((window++) * 100, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(300, [3, 4]), onNext(500, [5, 6, 7, 8, 9]), onNext(590, [10]), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#buffer Closings Dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var window = 1; var results = scheduler.startScheduler( function () { return xs.buffer(function () { return Observable.timer((window++) * 100, scheduler); }); }, { disposed: 400 } ); reactiveAssert(t, results.messages, [ onNext(300, [ 3, 4 ]) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#buffer Closings Error', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onError(590, ex) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.buffer(function () { return Observable.timer((window++) * 100, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(300, [ 3, 4 ]), onNext(500, [ 5, 6, 7, 8, 9 ]), onError(590, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#buffer Closings Throw', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onError(590, new Error()) ); var results = scheduler.startScheduler(function () { return xs.buffer(function () { throw ex; }); }); reactiveAssert(t, results.messages, [ onError(200, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 200) ]); t.end(); }); test('Observable#buffer Closings Window Close Error', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onError(590, new Error()) ); var results = scheduler.startScheduler(function () { return xs.buffer(function () { return Observable['throw'](ex, scheduler); }); }); reactiveAssert(t, results.messages, [ onError(201, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 201) ]); t.end(); }); test('Observable#buffer Opening Closings Basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, 50), onNext(330, 100), onNext(350, 50), onNext(400, 90), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.buffer(ys, function (x) { return Observable.timer(x, null, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(305, [4 ]), onNext(400, [ ]), onNext(430, [6, 7, 8]), onNext(490, [7, 8, 9]), onCompleted(900) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 900) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 900) ]); t.end(); }); RxJS-4.1.0/src/modular/test/buffercount.js000066400000000000000000000112461266736161100204500ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ bufferCount: require('../observable/buffercount') }); test('Observable#bufferCount partial window', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.bufferCount(5); }); reactiveAssert(t, results.messages, [ onNext(250, [2,3,4,5]), onCompleted(250) ]); t.end(); }); test('Observable#bufferCount full windows', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.bufferCount(2); }); reactiveAssert(t, results.messages, [ onNext(220, [2,3]), onNext(240, [4,5]), onCompleted(250) ]); t.end(); }); test('Observable#bufferCount full and partial windows', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.bufferCount(3); }); reactiveAssert(t, results.messages, [ onNext(230, [2,3,4]), onNext(250, [5]), onCompleted(250) ]); t.end(); }); test('Observable#bufferCount Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error)); var results = scheduler.startScheduler(function () { return xs.bufferCount(5); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); test('Observable#bufferCount skip less', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.bufferCount(3, 1); }); reactiveAssert(t, results.messages, [ onNext(230, [2,3,4]), onNext(240, [3,4,5]), onNext(250, [4,5]), onNext(250, [5]), onCompleted(250) ]); t.end(); }); test('Observable#bufferCount skip more', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.bufferCount(2, 3); }); reactiveAssert(t, results.messages, [ onNext(220, [2,3]), onNext(250, [5]), onCompleted(250) ]); t.end(); }); test('Observable#bufferCount basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.bufferCount(3, 2); }); reactiveAssert(t, results.messages, [ onNext(280, [2,3,4]), onNext(350, [4,5,6]), onNext(420, [6,7,8]), onNext(600, [8,9]), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#bufferCount disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.bufferCount(3, 2); }, {disposed: 370 }); reactiveAssert(t, results.messages, [ onNext(280, [2,3,4]), onNext(350, [4,5,6]) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 370) ]); t.end(); }); RxJS-4.1.0/src/modular/test/buffertime.js000066400000000000000000000063621266736161100202610ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ bufferTime: require('../observable/buffertime') }); test('Observable#bufferTime Basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.bufferTime(100, 70, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, [2,3,4]), onNext(370, [4,5,6]), onNext(440, [6,7,8]), onNext(510, [8,9]), onNext(580, []), onNext(600, []), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#bufferTime Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onError(600, error)); var results = scheduler.startScheduler(function () { return xs.bufferTime(100, 70, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, [2,3,4]), onNext(370, [4,5,6]), onNext(440, [6,7,8]), onNext(510, [8,9]), onNext(580, []), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#bufferTime Disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.bufferTime(100, 70, scheduler); }, {disposed: 370}); reactiveAssert(t, results.messages, [ onNext(300, [2,3,4]) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 370) ]); t.end(); }); test('Observable#bufferTime Basic Same', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.bufferTime(100, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, [2,3,4]), onNext(400, [5,6,7]), onNext(500, [8,9]), onNext(600, []), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); RxJS-4.1.0/src/modular/test/buffertimeorcount.js000066400000000000000000000070121266736161100216640ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ bufferTimeOrCount: require('../observable/buffertimeorcount') }); test('Observable#bufferTimeOrCount basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(205, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(370, 7), onNext(420, 8), onNext(470, 9), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.bufferTimeOrCount(70, 3, scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, [1,2,3]), onNext(310, [4]), onNext(370, [5,6,7]), onNext(440, [8]), onNext(510, [9]), onNext(580, []), onNext(600, []), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#bufferTimeOrCount error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(205, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(370, 7), onNext(420, 8), onNext(470, 9), onError(600, error) ); var results = scheduler.startScheduler(function () { return xs.bufferTimeOrCount(70, 3, scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, [1,2,3]), onNext(310, [4]), onNext(370, [5,6,7]), onNext(440, [8]), onNext(510, [9]), onNext(580, []), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#bufferTimeOrCount disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(205, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(370, 7), onNext(420, 8), onNext(470, 9), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.bufferTimeOrCount(70, 3, scheduler); }, { disposed: 370 }); reactiveAssert(t, results.messages, [ onNext(240, [1,2,3]), onNext(310, [4]), onNext(370, [5,6,7]) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 370) ]); t.end(); }); test('Observable#bufferTimeOrCount multiple', function(t) { var scheduler = new TestScheduler(); var xs1 = scheduler.createHotObservable(onCompleted(700)) .bufferTimeOrCount(100, 3, scheduler); var xs2 = scheduler.createHotObservable(onCompleted(700)) .bufferTimeOrCount(150, 4, scheduler); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 370, function (){ xs1.subscribe(results1); xs2.subscribe(results2); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(470, []), onNext(570, []), onNext(670, []), onNext(700, []), onCompleted(700) ]); reactiveAssert(t, results2.messages, [ onNext(520, []), onNext(670, []), onNext(700, []), onCompleted(700) ]); t.end(); }); RxJS-4.1.0/src/modular/test/case.js000066400000000000000000000161051266736161100170400ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ 'case': require('../observable/case') }); test('Observable.case one', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ); var zs = scheduler.createHotObservable( onNext(230, 21), onNext(240, 22), onNext(290, 23), onCompleted(320) ); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { return 1; }, map, zs); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, []); reactiveAssert(t, zs.subscriptions, []); t.end(); }); test('Observable.case two', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ); var zs = scheduler.createHotObservable( onNext(230, 21), onNext(240, 22), onNext(290, 23), onCompleted(320) ); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { return 2; }, map, zs); }); reactiveAssert(t, results.messages, [ onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, []); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 310) ]); reactiveAssert(t, zs.subscriptions, []); t.end(); }); test('Observable.case three', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ); var zs = scheduler.createHotObservable( onNext(230, 21), onNext(240, 22), onNext(290, 23), onCompleted(320) ); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { return 3; }, map, zs); }); reactiveAssert(t, results.messages, [ onNext(230, 21), onNext(240, 22), onNext(290, 23), onCompleted(320) ]); reactiveAssert(t, xs.subscriptions, []); reactiveAssert(t, ys.subscriptions, []); reactiveAssert(t, zs.subscriptions, [ subscribe(200, 320) ]); t.end(); }); test('Observable.case Throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ); var zs = scheduler.createHotObservable( onNext(230, 21), onNext(240, 22), onNext(290, 23), onCompleted(320) ); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { throw error; }, map, zs); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); reactiveAssert(t, xs.subscriptions, []); reactiveAssert(t, ys.subscriptions, []); reactiveAssert(t, zs.subscriptions, []); t.end(); }); test('Observable.case with default one', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300)); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310)); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { return 1; }, map, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, []); t.end(); }); test('Observable.case with default two', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { return 2; }, map, scheduler); }); reactiveAssert(t, results.messages, [ onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, []); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 310) ]); t.end(); }); test('case with default three', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300)); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310)); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { return 3; }, map, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); reactiveAssert(t, xs.subscriptions, []); reactiveAssert(t, ys.subscriptions, []); t.end(); }); test('Observable.case with default throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(270, 3), onCompleted(300)); var ys = scheduler.createHotObservable( onNext(220, 11), onNext(250, 12), onNext(280, 13), onCompleted(310)); var map = { 1: xs, 2: ys }; var results = scheduler.startScheduler(function () { return Observable['case'](function () { throw error; }, map, scheduler); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); reactiveAssert(t, xs.subscriptions, []); reactiveAssert(t, ys.subscriptions, []); t.end(); }); RxJS-4.1.0/src/modular/test/catch.js000066400000000000000000000140531266736161100172070ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var create = require('../observable/create'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ 'catch': require('../observable/catch'), never: require('../observable/never') }); Observable.addToPrototype({ 'catch': require('../observable/catch') }); test('Observable.catch NoErrors', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(230) ); var o2 = scheduler.createHotObservable( onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onCompleted(230) ]); t.end(); }); test('Observable.catch never', function (t) { var scheduler = new TestScheduler(); var o1 = Observable.never(); var o2 = scheduler.createHotObservable( onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.catch empty', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var o2 = scheduler.createHotObservable( onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); t.end(); }); test('Observable.catch return', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var o2 = scheduler.createHotObservable( onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(230) ]); t.end(); }); test('Observable.catch error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, error) ); var o2 = scheduler.createHotObservable( onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable.catch error never', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, error) ); var o2 = Observable.never(); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3) ]); t.end(); }); test('Observable.catch error error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, new Error()) ); var o2 = scheduler.createHotObservable( onNext(240, 4), onError(250, error) ); var results = scheduler.startScheduler(function () { return o1['catch'](o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(240, 4), onError(250, error) ]); t.end(); }); test('Observable.catch multiple', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(215, error) ); var o2 = scheduler.createHotObservable( onNext(220, 3), onError(225, error) ); var o3 = scheduler.createHotObservable( onNext(230, 4), onCompleted(235) ); var results = scheduler.startScheduler(function () { return Observable['catch'](o1, o2, o3); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(235) ]); t.end(); }); test('Observable.catch does not lose subscription to underlying observable', function (t) { var subscribes = 0, unsubscribes = 0, tracer = create(function () { ++subscribes; return function () { ++unsubscribes; }; }), s; // Try it without catchError() s = tracer.subscribe(); t.equal(subscribes, 1, '1 subscribes'); t.equal(unsubscribes, 0, '0 unsubscribes'); s.dispose(); t.equal(subscribes, 1, 'After dispose: 1 subscribes'); t.equal(unsubscribes, 1, 'After dispose: 1 unsubscribes'); // Now try again with catchError(Observable): subscribes = unsubscribes = 0; s = tracer['catch'](Observable.never()).subscribe(); t.equal(subscribes, 1, 'catchError(Observable): 1 subscribes'); t.equal(unsubscribes, 0, 'catchError(Observable): 0 unsubscribes'); s.dispose(); t.equal(subscribes, 1, 'catchError(Observable): After dispose: 1 subscribes'); t.equal(unsubscribes, 1, 'catchError(Observable): After dispose: 1 unsubscribes'); // And now try again with catchError(function()): subscribes = unsubscribes = 0; s = tracer['catch'](function () { return Observable.never(); }).subscribe(); t.equal(subscribes, 1, 'catchError(function): 1 subscribes'); t.equal(unsubscribes, 0, 'catchError(function): 0 unsubscribes'); s.dispose(); t.equal(subscribes, 1, 'catchError(function): After dispose: 1 subscribes'); t.equal(unsubscribes, 1, 'catchError(function): After dispose: 1 unsubscribes'); // this one FAILS (unsubscribes is 0) t.end(); }); RxJS-4.1.0/src/modular/test/catchhandler.js000066400000000000000000000104231266736161100205420ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ 'throw': require('../observable/throw') }); Observable.addToPrototype({ catchHandler: require('../observable/catchhandler') }); test('Observable#catchHandler specific error caught', function (t) { var error = new Error(); var handlerCalled = false; var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, error) ); var o2 = scheduler.createHotObservable( onNext(240, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1.catchHandler(function () { handlerCalled = true; return o2; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(240, 4), onCompleted(250) ]); t.ok(handlerCalled); t.end(); }); test('Observable#catchHandler specific error caughtImmediate', function (t) { var handlerCalled = false; var scheduler = new TestScheduler(); var o2 = scheduler.createHotObservable( onNext(240, 4), onCompleted(250)); var results = scheduler.startScheduler(function () { return Observable['throw'](new Error()).catchHandler(function () { handlerCalled = true; return o2; }); }); reactiveAssert(t, results.messages, [ onNext(240, 4), onCompleted(250) ]); t.ok(handlerCalled); t.end(); }); test('Observable#catchHandler HandlerThrows', function (t) { var error = new Error(); var error2 = new Error(); var handlerCalled = false; var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, error) ); var results = scheduler.startScheduler(function () { return o1.catchHandler(function () { handlerCalled = true; throw error2; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onError(230, error2) ]); t.ok(handlerCalled); t.end(); }); test('Observable#catchHandler Nested OuterCatches', function (t) { var error = new Error(); var firstHandlerCalled = false; var secondHandlerCalled = false; var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(215, error) ); var o2 = scheduler.createHotObservable( onNext(220, 3), onCompleted(225) ); var o3 = scheduler.createHotObservable( onNext(220, 4), onCompleted(225) ); var results = scheduler.startScheduler(function () { return o1.catchHandler(function () { firstHandlerCalled = true; return o2; }).catchHandler(function () { secondHandlerCalled = true; return o3; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onCompleted(225) ]); t.ok(firstHandlerCalled); t.ok(!secondHandlerCalled); t.end(); }); test('Observable#catchHandler throw from nested catch', function (t) { var error = new Error(); var error2 = new Error(); var firstHandlerCalled = false; var secondHandlerCalled = false; var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(215, error) ); var o2 = scheduler.createHotObservable( onNext(220, 3), onError(225, error2) ); var o3 = scheduler.createHotObservable( onNext(230, 4), onCompleted(235)); var results = scheduler.startScheduler(function () { return o1.catchHandler(function (e) { firstHandlerCalled = true; t.equal(e, error); return o2; }).catchHandler(function (e) { secondHandlerCalled = true; t.equal(e, error2); return o3; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(235) ]); t.ok(firstHandlerCalled); t.ok(secondHandlerCalled); t.end(); }); RxJS-4.1.0/src/modular/test/combinelatest.js000066400000000000000000000341701266736161100207600ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ function add (x, y) { return x + y; } var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ combineLatest: require('../observable/combinelatest'), never: require('../observable/never') }); Observable.addToPrototype({ combineLatest: require('../observable/combinelatest') }); test('combineLatest never never', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('combineLatest never empty', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('combineLatest empty never', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('combineLatest empty empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('combineLatest empty return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onCompleted(215) ]); t.end(); }); test('combineLatest return empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onCompleted(215) ]); t.end(); }); test('combineLatest never return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('combineLatest return never', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(210) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('combineLatest return return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onNext(220, 2 + 3), onCompleted(240) ]); t.end(); }); test('combineLatest return return no selector', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2); }); reactiveAssert(t, results.messages, [ onNext(220, [2, 3]), onCompleted(240) ]); t.end(); }); test('combineLatest empty error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest error empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest return throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest throw return', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest throw throw', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onError(220, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error2) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error1) ]); t.end(); }); test('combineLatest ErrorThrow', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error2) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error1) ]); t.end(); }); test('combineLatest throw error', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error2) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error1) ]); t.end(); }); test('combineLatest never throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest throw never', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error)); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest some throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest throw some', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230)); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error)); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('combineLatest throw after complete left', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('combineLatest throw after complete right', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('combineLatest interleaved with tail', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onNext(230, 5), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onNext(220, 2 + 3), onNext(225, 3 + 4), onNext(230, 4 + 5), onNext(235, 4 + 6), onNext(240, 4 + 7), onCompleted(250) ]); t.end(); }); test('combineLatest consecutive', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onNext(235, 4 + 6), onNext(240, 4 + 7), onCompleted(250) ]); t.end(); }); test('combineLatest consecutive end with error left', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onError(230, error) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, add); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('combineLatest consecutive end with error right', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onError(245, error) ); var results = scheduler.startScheduler(function () { return e2.combineLatest(e1, add); }); reactiveAssert(t, results.messages, [ onNext(235, 4 + 6), onNext(240, 4 + 7), onError(245, error) ]); t.end(); }); test('combineLatest selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return e1.combineLatest(e2, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/compositedisposable.js000066400000000000000000000035601266736161100221760ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Disposable = require('../disposable'); var CompositeDisposable = require('../compositedisposable'); function noop() { } test('CompositeDisposable#add', function (t) { var d1 = Disposable.create(noop), d2 = Disposable.create(noop), g = new CompositeDisposable(d1); t.equal(1, g.length, 'should have a length of one'); g.add(d2); t.equal(2, g.length, 'should have a length of two after add'); t.end(); }); test('CompositeDisposable#add after dispose', function (t) { var disp1 = false; var disp2 = false; var d1 = Disposable.create(function () { disp1 = true; }); var d2 = Disposable.create(function () { disp2 = true; }); var g = new CompositeDisposable(d1); t.equal(1, g.length, 'should have a length of 1'); g.dispose(); t.ok(disp1, 'should be disposed'); t.equal(0, g.length, 'should have a length of 0'); g.add(d2); t.ok(disp2, 'should be disposed'); t.equal(0, g.length, 'should have a length of 0'); t.end(); }); test('CompositeDisposable#remove', function (t) { var disp1 = false; var disp2 = false; var d1 = Disposable.create(function () { disp1 = true; }); var d2 = Disposable.create(function () { disp2 = true; }); var g = new CompositeDisposable(d1, d2); t.equal(2, g.length, 'should have a length of two'); t.ok(g.remove(d1), 'remove() should return true for first disposable'); t.equal(1, g.length, 'should have a length of one'); t.ok(disp1, 'first should be disposed'); t.ok(g.remove(d2), 'remove() should return true for second disposable'); t.ok(disp2, 'second should be disposed'); var disp3 = false; var d3 = Disposable.create(function () { disp3 = true; }); t.ok(!g.remove(d3), 'remove() should return false for third disposable'); t.ok(!disp3, 'third should not have been disposed'); t.end(); }); RxJS-4.1.0/src/modular/test/concat.js000066400000000000000000000204461266736161100173770ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ concat: require('../observable/concat'), never: require('../observable/never') }); Observable.addToPrototype({ concat: require('../observable/concat') }); test('Observable.concat empty empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable.concat empty never', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.concat never empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e2.concat(e1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.concat never never', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.concat empty throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); test('Observable.concat throw empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('Observable.concat throw throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(250, new Error()) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('Observable.concat return empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('Observable.concat empty return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(240, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onNext(240, 2), onCompleted(250) ]); t.end(); }); test('Observable.concat return never', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('Observable.concat never return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e2.concat(e1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.concat return return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(240, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onNext(220, 2), onNext(240, 3), onCompleted(250) ]); t.end(); }); test('Observable.concat throw return', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(240, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('Observable.concat return throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onNext(220, 2), onError(250, error) ]); t.end(); }); test('Observable.concat some data on both sides', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(225) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.concat(e2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable.concat as arguments', function (t) { var scheduler = new TestScheduler(); var xs1 = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onNext(30, 3), onCompleted(40) ); var xs2 = scheduler.createColdObservable( onNext(10, 4), onNext(20, 5), onCompleted(30) ); var xs3 = scheduler.createColdObservable( onNext(10, 6), onNext(20, 7), onNext(30, 8), onNext(40, 9), onCompleted(50) ); var results = scheduler.startScheduler(function () { return Observable.concat(xs1, xs2, xs3); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(250, 4), onNext(260, 5), onNext(280, 6), onNext(290, 7), onNext(300, 8), onNext(310, 9), onCompleted(320) ]); reactiveAssert(t, xs1.subscriptions, [ subscribe(200, 240) ]); reactiveAssert(t, xs2.subscriptions, [ subscribe(240, 270) ]); reactiveAssert(t, xs3.subscriptions, [ subscribe(270, 320) ]); t.end(); }); RxJS-4.1.0/src/modular/test/connectableobservable.js000066400000000000000000000125541266736161100224530ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var ConnectableObservable = require('../observable/connectableobservable'); var Subject = require('../subject'); var Disposable = require('../disposable'); var inherits = require('inherits'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; function MySubject() { this.disposeOnMap = {}; this.subscribeCount = 0; this.disposed = false; Observable.call(this); } inherits(MySubject, Observable); MySubject.prototype._subscribe = function (o) { this.subscribeCount++; this.o = o; var self = this; return Disposable.create(function () { self.disposed = true; }); }; MySubject.prototype.disposeOn = function (value, disposable) { this.disposeOnMap[value] = disposable; }; MySubject.prototype.onNext = function (value) { this.o.onNext(value); this.disposeOnMap[value] && this.disposeOnMap[value].dispose(); }; MySubject.prototype.onError = function (e) { this.o.onError(e); }; MySubject.prototype.onCompleted = function () { this.o.onCompleted(); }; test('ConnectableObservable creation', function (t) { var y = 0; var s2 = new Subject(); var co2 = new ConnectableObservable(Observable.just(1), s2); co2.subscribe(function (x) { y = x; }); t.notEqual(1, y); co2.connect(); t.equal(1, y); t.end(); }); test('ConnectableObservable connected', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ); var subject = new MySubject(); var conn = new ConnectableObservable(xs, subject); conn.connect(); var results = scheduler.startScheduler(function () { return conn; }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ]); t.end(); }); test('ConnectableObservable not connected', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ); var subject = new MySubject(); var conn = new ConnectableObservable(xs, subject); var results = scheduler.startScheduler(function () { return conn; }); reactiveAssert(t, results.messages, []); t.end(); }); test('ConnectableObservable disconnected', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ); var subject = new MySubject(); var conn = new ConnectableObservable(xs, subject); var disconnect = conn.connect(); disconnect.dispose(); var results = scheduler.startScheduler(function () { return conn; }); reactiveAssert(t, results.messages, []); t.end(); }); test('ConnectableObservable disconnect future', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ); var subject = new MySubject(); var conn = new ConnectableObservable(xs, subject); subject.disposeOn(3, conn.connect()); var results = scheduler.startScheduler(function () { return conn; }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3) ]); t.end(); }); test('ConnectableObservable multiple non-overlapped connections', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onNext(270, 7), onNext(280, 8), onNext(290, 9), onCompleted(300) ); var subject = new Subject(); var conn = new ConnectableObservable(xs, subject); var c1; scheduler.scheduleAbsolute(null, 225, function () { c1 = conn.connect(); }); scheduler.scheduleAbsolute(null, 241, function () { c1.dispose(); }); scheduler.scheduleAbsolute(null, 245, function () { c1.dispose(); }); // idempotency test scheduler.scheduleAbsolute(null, 251, function () { c1.dispose(); }); // idempotency test scheduler.scheduleAbsolute(null, 260, function () { c1.dispose(); }); // idempotency test var c2; scheduler.scheduleAbsolute(null, 249, function () { c2 = conn.connect(); }); scheduler.scheduleAbsolute(null, 255, function () { c2.dispose(); }); scheduler.scheduleAbsolute(null, 265, function () { c2.dispose(); }); // idempotency test scheduler.scheduleAbsolute(null, 280, function () { c2.dispose(); }); // idempotency test var c3; scheduler.scheduleAbsolute(null, 275, function () { c3 = conn.connect(); }); scheduler.scheduleAbsolute(null, 295, function () { c3.dispose(); }); var results = scheduler.startScheduler(function () { return conn; }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(280, 8), onNext(290, 9) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(225, 241), subscribe(249, 255), subscribe(275, 295) ]); t.end(); }); RxJS-4.1.0/src/modular/test/controlled.js000066400000000000000000000463001266736161100202720ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ 'range': require('../observable/range'), 'throw': require('../observable/throw') }); Observable.addToPrototype({ concat: require('../observable/concat'), controlled: require('../observable/controlled') }); test('Observable#controlled gets some values', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(); scheduler.scheduleAbsolute(null, 200, function () { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 400, function () { controlled.request(5); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(400, 3), onNext(400, 4), onNext(400, 5), onNext(400, 6), onCompleted(500) ]); t.end(); }); test('Observable#controlled gets two sets of values', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(); scheduler.scheduleAbsolute(null, 200, function () { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 400, function () { controlled.request(3); }); scheduler.scheduleAbsolute(null, 450, function () { controlled.request(2); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(400, 3), onNext(400, 4), onNext(450, 5), onNext(450, 6), onCompleted(500) ]); t.end(); }); test('Observable#controlled fires on completed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var source = Observable.range(1, 2).controlled(); scheduler.scheduleAbsolute(null, 200, function(){ source.subscribe(results); }); scheduler.scheduleAbsolute(null, 300, function () { source.request(3); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(300, 2), onCompleted(300) ]); t.end(); }); test('Observable#controlled cancels inflight request', function (t) { var scheduler = new TestScheduler(); var source = scheduler.createHotObservable( onNext(400, 2), onNext(410, 3), onNext(420, 4) ).controlled(); var results = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 200, function(){ source.request(3); }); scheduler.scheduleAbsolute(null, 200, function(){ source.request(2); }); scheduler.scheduleAbsolute(null, 300, function(){ source.subscribe(results); }); scheduler.advanceBy(420); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(410, 3) ]); t.end(); }); test('Observable#controlled fires onError', function (t) { var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var error = new Error('expected'); var source = Observable.range(1, 2, scheduler) .concat(Observable['throw'](error, scheduler)) .controlled(); scheduler.scheduleAbsolute(null, 200, function(){ source.subscribe(results); }); scheduler.scheduleAbsolute(null, 300, function () { source.request(3); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(300, 2), onError(300, error) ]); t.end(); }); test('Observable#controlled drops messages with queue disabled', function (t) { var scheduler = new TestScheduler(); var source = scheduler.createHotObservable( onNext(400, 1), onNext(410, 2), onNext(420, 3), onNext(430, 4), onCompleted(500) ).controlled(false); var results = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 415, function(){ source.request(2); }); scheduler.scheduleAbsolute(null, 200, function(){ source.subscribe(results); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(420, 3), onNext(430, 4), onCompleted(500) ]); t.end(); }); test('Observable#controlled requests are scheduled', function (t) { var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(210, 0), onNext(220, 1), onNext(230, 2), onNext(240, 3), onNext(250, 4), onNext(260, 5), onNext(270, 6), onCompleted(280) ); var source = xs.controlled(); // process one event at a time scheduler.scheduleAbsolute(null, 200, function() { source.subscribe( function (x) { // alternate between immediate and delayed request(1), causes hanging if (x % 2) { //Immediate source.request(1); // request next } else { //Delayed scheduler.schedule(source, function (_, source) { source.request(1); // request next }); } results.onNext(x); }, function (e) { results.onError(e); }, function () { results.onCompleted(); } ); }); scheduler.scheduleAbsolute(null, 300, function() { source.request(1); // start by requesting first item }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(300, 0), onNext(301, 1), onNext(301, 2), onNext(302, 3), onNext(302, 4), onNext(303, 5), onNext(303, 6), onCompleted(303) ]); t.end(); }); test('Observable#controlled can request queued values passing true during construction', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(true); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 400, function() { controlled.request(5); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(400, 3), onNext(400, 4), onNext(400, 5), onNext(400, 6), onCompleted(500) ]); t.end(); }); test('Observable#controlled discards all values that occurred prior to calling request when passing false during construction', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onNext(450, 7), onCompleted(500) ); var controlled = xs.controlled(false); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 300, function() { controlled.request(2); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(301, 4), onNext(350, 5), onCompleted(500) ]); t.end(); }); test('Observable#controlled does not dequeue any values when requesting null, 0, or -1, or -5 items', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 400, function() { controlled.request(null); }); scheduler.scheduleAbsolute(null, 410, function() { controlled.request(0); }); scheduler.scheduleAbsolute(null, 420, function() { controlled.request(-1); }); scheduler.scheduleAbsolute(null, 430, function() { controlled.request(-5); }); scheduler.scheduleAbsolute(null, 440, function() { controlled.request(1); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(440, 2) ]); t.end(); }); test('Observable#controlled relays requested values when only some of them are queued up', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 300, function() { controlled.request(4); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(300, 3), onNext(301, 4), onNext(350, 5) ]); t.end(); }); test('Observable#controlled can terminate the request via dispose when it is partially delivered', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); var theRequest; scheduler.scheduleAbsolute(null, 300, function() { theRequest = controlled.request(4); }); scheduler.scheduleAbsolute(null, 310, function() { theRequest.dispose(); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(300, 3), onNext(301, 4) ]); t.end(); }); test('Observable#controlled relays queued values, non-queued values, and then a queued value again', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(320, 4), onNext(350, 5), onNext(399, 6), onNext(450, 7), onCompleted(500) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 300, function() { controlled.request(2); // queued values }); scheduler.scheduleAbsolute(null, 310, function() { controlled.request(2); // values that haven't arrived yet }); scheduler.scheduleAbsolute(null, 400, function() { controlled.request(1); // queued value again }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(300, 3), onNext(320, 4), onNext(350, 5), onNext(400, 6) ]); t.end(); }); test('Observable#controlled relays requested values that occured before an error occured', function (t) { var scheduler = new TestScheduler(); var error = new Error('expected'); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onError(250, error) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 500, function() { controlled.request(2); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(500, 2), onNext(500, 3), onError(500, error) ]); t.end(); }); test('Observable#controlled relays error immediately when requesting values after an error has occured when queue is empty', function (t) { var scheduler = new TestScheduler(); var error = new Error('expected'); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(300, 3), onError(400, error) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function() { controlled.request(2); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(350, 2), onNext(350, 3), onError(400, error) ]); t.end(); }); test('Observable#controlled relays completion immediately when requesting values after completion has occured when queue is empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(300, 3), onCompleted(400) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function() { controlled.request(2); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(350, 2), onNext(350, 3), onCompleted(400) ]); t.end(); }); test('Observable#controlled does not relay error when requesting values after an error has occured when queue is not empty', function (t) { var scheduler = new TestScheduler(); var unexpectedError = new Error('unexpected'); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(300, 3), onError(400, unexpectedError) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function() { controlled.request(1); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(350, 2) ]); t.end(); }); test('Observable#controlled does not relay completion when requesting values after completion has occured when queue is not empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(300, 3), onCompleted(400) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function() { controlled.request(1); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(350, 2) ]); t.end(); }); test('Observable#controlled ignores all values when queue is disabled but delivers completion immediately when it occurs', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); var controlled = xs.controlled(false); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 400, function() { controlled.request(5); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onCompleted(500) ]); t.end(); }); test('Observable#controlled ignores all values when queue is disabled but delivers error immediately when it occurs', function (t) { var scheduler = new TestScheduler(); var error = new Error('expected'); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onError(500, error) ); var controlled = xs.controlled(false); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe(results); }); scheduler.scheduleAbsolute(null, 400, function() { controlled.request(5); }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onError(500, error) ]); t.end(); }); test('Observable#controlled disposes partially delivered request when issuing a new one', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(450, 5), onNext(460, 6), onCompleted(500) ); var controlled = xs.controlled(); var results = scheduler.createObserver(); var subscription; scheduler.scheduleAbsolute(null, 200, function() { subscription = controlled.subscribe( function(x) { results.onNext(x); }, function(err) { results.onError(err); }, function() { results.onCompleted(); } ); }); scheduler.scheduleAbsolute(null, 400, function() { controlled.request(5); controlled.request(1); // cause the previous request that hasn't completed yet to get discarded }); scheduler.scheduleAbsolute(null, 1000, function() { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(400, 3), onNext(400, 4), onNext(450, 5) ]); t.end(); }); RxJS-4.1.0/src/modular/test/count.js000066400000000000000000000206021266736161100172520ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var range = require('../observable/range'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ count: require('../observable/count'), skip: require('../observable/skip'), take: require('../observable/take') }); test('Observable#count empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#count some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onCompleted(250) ]); t.end(); }); test('Observable#count throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.count(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#count never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.count(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#count predicate empty true', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(function () { return true; }); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate empty false', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.count(function () { return false; }); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate return true', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(function () { return true; }); }); reactiveAssert(t, results.messages, [ onNext(250, 1), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate return false', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(function () { return false; }); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate all matched', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(function (x) { return x < 10; }); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate none matched', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(function (x) { return x > 10; }); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate some even', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.count(function (x) { return x % 2 === 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#count predicate throw true', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.count(function () { return true; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#count predicate throw false', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.count(function () { return false; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#count predicate never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1)); var results = scheduler.startScheduler(function () { return xs.count(function () { return true; }); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#count predicate throws error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return xs.count(function (x) { if (x === 3) { throw error; } return true; }); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#count after range', function (t) { var scheduler = new TestScheduler(); var xs = range(1, 10, scheduler); var results = scheduler.startScheduler(function(){ return xs.count(); }); reactiveAssert(t, results.messages, [ onNext(211, 10), onCompleted(211) ]); t.end(); }); test('Observable#count After Skip', function (t) { var scheduler = new TestScheduler(); var xs = range(1, 10, scheduler).skip(1); var results = scheduler.startScheduler(function () { return xs.count(); }); reactiveAssert(t, results.messages, [ onNext(211, 9), onCompleted(211) ]); t.end(); }); test('Observable#count after take', function (t) { var scheduler = new TestScheduler(); var xs = range(1, 10, scheduler).take(1); var results = scheduler.startScheduler(function(){ return xs.count(); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onCompleted(201) ]); t.end(); }); RxJS-4.1.0/src/modular/test/create.js000066400000000000000000000107141266736161100173700ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var Disposable = require('../disposable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ create: require('../observable/create') }); function noop () { } test('Observable.create next', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { o.onNext(1); o.onNext(2); return Disposable.empty; }); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onNext(200, 2) ]); t.end(); }); test('Observable.create completed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { o.onCompleted(); o.onNext(100); o.onError(new Error()); o.onCompleted(); return Disposable.empty; }); }); reactiveAssert(t, results.messages, [ onCompleted(200) ]); t.end(); }); test('Observable.create Error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { o.onError(error); o.onNext(100); o.onError(new Error()); o.onCompleted(); return Disposable.empty; }); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.create noop next', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { o.onNext(1); o.onNext(2); return noop; }); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onNext(200, 2) ]); t.end(); }); test('Observable.create no op completed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { o.onCompleted(); o.onNext(100); o.onError(new Error()); o.onCompleted(); return noop; }); }); reactiveAssert(t, results.messages, [ onCompleted(200) ]); t.end(); }); test('Observable.create no op Error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { o.onError(error); o.onNext(100); o.onError('foo'); o.onCompleted(); return noop; }); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.create throws errors', function (t) { t.throws(function () { Observable.create(function () { throw new Error(); }).subscribe(); }); t.end(); }); test('Observable.create dispose', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.create(function (o) { var isStopped = false; o.onNext(1); o.onNext(2); scheduler.scheduleFuture(null, 600, function () { !isStopped && o.onNext(3); }); scheduler.scheduleFuture(null, 700, function () { !isStopped && o.onNext(4); }); scheduler.scheduleFuture(null, 900, function () { !isStopped && o.onNext(5); }); scheduler.scheduleFuture(null, 1100, function () { !isStopped && o.onNext(6); }); return function () { isStopped = true; }; }); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onNext(200, 2), onNext(800, 3), onNext(900, 4) ]); t.end(); }); test('Observable.create observer does not catch', function (t) { t.throws(function () { Observable.create(function (o) { o.onNext(1); }) .subscribe(function () { throw new Error(); }); }); t.throws(function () { Observable.create(function (o) { o.onError(new Error()); }) .subscribe(noop, function () { throw new Error(); }); }); t.throws(function () { Observable.create(function (o) { o.onCompleted(); }) .subscribe(noop, noop, function () { throw new Error(); }); }); t.end(); }); RxJS-4.1.0/src/modular/test/currentthreadscheduler.js000066400000000000000000000037551266736161100227050ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Scheduler = require('../scheduler'); Scheduler.queue.ensureTrampoline = function (action) { if (this.scheduleRequired()) { this.schedule(null, action); } else { action(); } }; test('current thread now', function (t) { var res = Scheduler.queue.now() - new Date().getTime(); t.ok(res < 1000); t.end(); }); test('current thread schedule action', function (t) { var ran = false; Scheduler.queue.schedule(null, function () { ran = true; }); t.ok(ran); t.end(); }); test('current thread schedule action error', function (t) { var error = new Error(); try { Scheduler.queue.schedule(error, function (_, e) { throw e; }); t.ok(false); } catch (e) { t.equal(e, error); } t.end(); }); test('current thread schedule nested', function (t) { var ran = false; Scheduler.queue.schedule(null, function () { Scheduler.queue.schedule(null, function () { ran = true; }); }); t.ok(ran); t.end(); }); test('current thread ensure trampoline', function (t) { var ran1 = false, ran2 = false; Scheduler.queue.ensureTrampoline(function () { Scheduler.queue.schedule(null, function () { ran1 = true; }); Scheduler.queue.schedule(null, function () { ran2 = true; }); }); t.ok(ran1); t.ok(ran2); t.end(); }); test('current thread ensure trampoline nested', function (t) { var ran1 = false, ran2 = false; Scheduler.queue.ensureTrampoline(function () { Scheduler.queue.ensureTrampoline(function () { ran1 = true; }); Scheduler.queue.ensureTrampoline(function () { ran2 = true; }); }); t.ok(ran1); t.ok(ran2); t.end(); }); test('current thread ensure trampoline and cancel', function (t) { var ran1 = false, ran2 = false; Scheduler.queue.ensureTrampoline(function () { Scheduler.queue.schedule(null, function () { ran1 = true; var d = Scheduler.queue.schedule(null, function () { ran2 = true; }); d.dispose(); }); }); t.ok(ran1); t.ok(!ran2); t.end(); }); RxJS-4.1.0/src/modular/test/debounce.js000066400000000000000000000310101266736161100177010ustar00rootroot00000000000000 'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ timer: require('../observable/timer') }); Observable.addToPrototype({ debounce: require('../observable/debounce') }); test('Observable#debounce empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 0), onCompleted(300) ); var results = scheduler.startScheduler(function () { return xs.debounce(10, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#debounce error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createHotObservable( onNext(150, 0), onError(300, error) ); var results = scheduler.startScheduler(function () { return xs.debounce(10, scheduler); }); reactiveAssert(t, results.messages, [ onError(300, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#debounce Never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 0) ); var results = scheduler.startScheduler(function () { return xs.debounce(10, scheduler); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#debounce all pass', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(300, 2), onNext(351, 3), onCompleted(400) ); var results = scheduler.startScheduler(function(){ return xs.debounce(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(350, 2), onNext(400, 3), onCompleted(400) ]); t.end(); }); test('Observable#debounce relative time all pass', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 0), onNext(210, 1), onNext(240, 2), onNext(270, 3), onNext(300, 4), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.debounce(function () { return Observable.timer(20, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(230, 1), onNext(260, 2), onNext(290, 3), onNext(320, 4), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#debounce relative time all pass error on end', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 0), onNext(210, 1), onNext(240, 2), onNext(270, 3), onNext(300, 4), onError(400, error) ); var results = scheduler.startScheduler(function () { return xs.debounce(function () { return Observable.timer(20, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(230, 1), onNext(260, 2), onNext(290, 3), onNext(320, 4), onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#debounce relative time all drop', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 0), onNext(210, 1), onNext(240, 2), onNext(270, 3), onNext(300, 4), onNext(330, 5), onNext(360, 6), onNext(390, 7), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.debounce(function () { return Observable.timer(40, scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(400, 7), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#debounce relative time all drop error on end', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 0), onNext(210, 1), onNext(240, 2), onNext(270, 3), onNext(300, 4), onNext(330, 5), onNext(360, 6), onNext(390, 7), onError(400, error) ); var results = scheduler.startScheduler(function () { return xs.debounce(40, scheduler); }); reactiveAssert(t, results.messages, [ onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#debounce duration DelayBehavior', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, -1), onNext(250, 0), onNext(280, 1), onNext(310, 2), onNext(350, 3), onNext(400, 4), onCompleted(550) ); var ys = [ scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)) ]; var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { return ys[x]; }); }); reactiveAssert(t, results.messages, [ onNext(250 + 20, 0), onNext(280 + 20, 1), onNext(310 + 20, 2), onNext(350 + 20, 3), onNext(400 + 20, 4), onCompleted(550) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 550)]); reactiveAssert(t, ys[0].subscriptions, [subscribe(250, 250 + 20)]); reactiveAssert(t, ys[1].subscriptions, [subscribe(280, 280 + 20)]); reactiveAssert(t, ys[2].subscriptions, [subscribe(310, 310 + 20)]); reactiveAssert(t, ys[3].subscriptions, [subscribe(350, 350 + 20)]); reactiveAssert(t, ys[4].subscriptions, [subscribe(400, 400 + 20)]); t.end(); }); test('Observable#debounce duration debounce behavior', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, -1), onNext(250, 0), onNext(280, 1), onNext(310, 2), onNext(350, 3), onNext(400, 4), onCompleted(550)); var ys = [ scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(40, 42), onNext(45, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(60, 42), onNext(65, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99))]; var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { return ys[x]; }); }); reactiveAssert(t, results.messages, [ onNext(250 + 20, 0), onNext(310 + 20, 2), onNext(400 + 20, 4), onCompleted(550) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 550)]); reactiveAssert(t, ys[0].subscriptions, [subscribe(250, 250 + 20)]); reactiveAssert(t, ys[1].subscriptions, [subscribe(280, 310)]); reactiveAssert(t, ys[2].subscriptions, [subscribe(310, 310 + 20)]); reactiveAssert(t, ys[3].subscriptions, [subscribe(350, 400)]); reactiveAssert(t, ys[4].subscriptions, [subscribe(400, 400 + 20)]); t.end(); }); test('Observable#debounce duration early completion', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, -1), onNext(250, 0), onNext(280, 1), onNext(310, 2), onNext(350, 3), onNext(400, 4), onCompleted(410)); var ys = [ scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(40, 42), onNext(45, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99)), scheduler.createColdObservable(onNext(60, 42), onNext(65, 99)), scheduler.createColdObservable(onNext(20, 42), onNext(25, 99))]; var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { return ys[x]; }); }); reactiveAssert(t, results.messages, [ onNext(250 + 20, 0), onNext(310 + 20, 2), onNext(410, 4), onCompleted(410) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 410)]); reactiveAssert(t, ys[0].subscriptions, [subscribe(250, 250 + 20)]); reactiveAssert(t, ys[1].subscriptions, [subscribe(280, 310)]); reactiveAssert(t, ys[2].subscriptions, [subscribe(310, 310 + 20)]); reactiveAssert(t, ys[3].subscriptions, [subscribe(350, 400)]); reactiveAssert(t, ys[4].subscriptions, [subscribe(400, 410)]); t.end(); }); test('Observable#debounce duration inner error', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550) ); var error = new Error(); var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { if (x < 4) { return scheduler.createColdObservable( onNext(x * 10, 'Ignore'), onNext(x * 10 + 5, 'Aargh!') ); } else { return scheduler.createColdObservable( onError(x * 10, error) ); } }); }); reactiveAssert(t, results.messages, [ onNext(250 + 2 * 10, 2), onNext(350 + 3 * 10, 3), onError(450 + 4 * 10, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 490) ]); t.end(); }); test('Observable#debounce duration outer error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onError(460, error)); var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { return scheduler.createColdObservable( onNext(x * 10, 'Ignore'), onNext(x * 10 + 5, 'Aargh!') ); }); }); reactiveAssert(t, results.messages, [ onNext(250 + 2 * 10, 2), onNext(350 + 3 * 10, 3), onError(460, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 460) ]); t.end(); }); test('Observable#debounce duration selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550) ); var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { if (x < 4) { return scheduler.createColdObservable( onNext(x * 10, 'Ignore'), onNext(x * 10 + 5, 'Aargh!') ); } throw error; }); }); reactiveAssert(t, results.messages, [ onNext(250 + 2 * 10, 2), onNext(350 + 3 * 10, 3), onError(450, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#debounce duration inner done delay behavior', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { return scheduler.createColdObservable(onCompleted(x * 10)); }); }); reactiveAssert(t, results.messages, [ onNext(250 + 2 * 10, 2), onNext(350 + 3 * 10, 3), onNext(450 + 4 * 10, 4), onCompleted(550) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#debounce duration inner done debounce behavior', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(280, 3), onNext(300, 4), onNext(400, 5), onNext(410, 6), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.debounce(function (x) { return scheduler.createColdObservable(onCompleted(x * 10)); }); }); reactiveAssert(t, results.messages, [ onNext(250 + 2 * 10, 2), onNext(300 + 4 * 10, 4), onNext(410 + 6 * 10, 6), onCompleted(550) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); RxJS-4.1.0/src/modular/test/defaultifempty.js000066400000000000000000000062361266736161100211530ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ defaultIfEmpty: require('../observable/defaultifempty') }); test('Observable#defaultIfEmpty never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.defaultIfEmpty(); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#defaultIfEmpty error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.defaultIfEmpty(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#defaultIfEmpty non-empty 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(280, 42), onNext(360, 43), onCompleted(420)); var results = scheduler.startScheduler(function () { return xs.defaultIfEmpty(); }); reactiveAssert(t, results.messages, [ onNext(280, 42), onNext(360, 43), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#defaultIfEmpty non-empty 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(280, 42), onNext(360, 43), onCompleted(420)); var results = scheduler.startScheduler(function () { return xs.defaultIfEmpty(-1); }); reactiveAssert(t, results.messages, [ onNext(280, 42), onNext(360, 43), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#defaultIfEmpty empty 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(420)); var results = scheduler.startScheduler(function () { return xs.defaultIfEmpty(null); }); reactiveAssert(t, results.messages, [ onNext(420, null), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#defaultIfEmpty empty 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(420)); var results = scheduler.startScheduler(function () { return xs.defaultIfEmpty(-1); }); reactiveAssert(t, results.messages, [ onNext(420, -1), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); RxJS-4.1.0/src/modular/test/defaultscheduler.js000066400000000000000000000017321266736161100214500ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Scheduler = require('../scheduler'); test('Scheduler.async now', function (t) { var res = Scheduler.async.now() - +new Date(); t.ok(res < 1000, 'Should be near zero'); t.end(); }); test('Scheduler.async schedule action', function (t) { Scheduler.async.schedule(true, function (s, state) { t.ok(state, 'should schedule action'); t.end(); }); }); test('Scheduler.async schedule relative', function (t) { Scheduler.async.scheduleFuture(+new Date(), 200, function (s, startTime) { var endTime = +new Date(); t.ok(endTime - startTime > 180, endTime - startTime); t.end(); }); }); test('Scheduler.async schedule action cancel', function (t) { var set = false; var d = Scheduler.async.scheduleFuture(null, 200, function () { set = true; }); d.dispose(); setTimeout(function () { t.ok(!set, 'after cancel should not be set'); t.end(); }, 400); }); RxJS-4.1.0/src/modular/test/defer.js000066400000000000000000000051401266736161100172070ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ defer: require('../observable/defer') }); test('Observable.defer complete', function (t) { var invoked = 0; var scheduler = new TestScheduler(); var xs; var results = scheduler.startScheduler(function () { return Observable.defer(function () { invoked++; xs = scheduler.createColdObservable( onNext(100, scheduler.clock), onCompleted(200)); return xs; }); }); reactiveAssert(t, results.messages, [ onNext(300, 200), onCompleted(400) ]); t.equal(1, invoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable.defer Error', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var xs; var results = scheduler.startScheduler(function () { return Observable.defer(function () { invoked++; xs = scheduler.createColdObservable( onNext(100, scheduler.clock), onError(200, error)); return xs; }); }); reactiveAssert(t, results.messages, [ onNext(300, 200), onError(400, error) ]); t.equal(1, invoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable.defer dispose', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs; var results = scheduler.startScheduler(function () { return Observable.defer(function () { invoked++; xs = scheduler.createColdObservable( onNext(100, scheduler.clock), onNext(200, invoked), onNext(1100, 1000)); return xs; }); }); reactiveAssert(t, results.messages, [ onNext(300, 200), onNext(400, 1) ]); t.equal(1, invoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable.defer throw', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.defer(function () { invoked++; throw error; }); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.equal(1, invoked); t.end(); }); RxJS-4.1.0/src/modular/test/delay.js000066400000000000000000000306221266736161100172230ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ delay: require('../observable/delay') }); test('Observable#delay relative time simple 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(100, scheduler); }); reactiveAssert(t, results.messages, [ onNext(350, 2), onNext(450, 3), onNext(550, 4), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay absolute time simple 1 implementation', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(new Date(300), scheduler); }); reactiveAssert(t, results.messages, [ onNext(350, 2), onNext(450, 3), onNext(550, 4), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay relative time simple 2 implementation', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(400, 3), onNext(500, 4), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay absolute time simple 2 implementation', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(400, 3), onNext(500, 4), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay relative time simple 3 implementation', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(150, scheduler); }); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(500, 3), onNext(600, 4), onCompleted(700) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay absolute time simple 3 implementation', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(new Date(350), scheduler); }); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(500, 3), onNext(600, 4), onCompleted(700) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay relative time error 1 implementation', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onError(550, error) ); var results = scheduler.startScheduler(function () { return xs.delay(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(400, 3), onNext(500, 4), onError(550, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay absolute time error 1 implementation', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onError(550, error)); var results = scheduler.startScheduler(function () { return xs.delay(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, 2), onNext(400, 3), onNext(500, 4), onError(550, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay relative time error 2 implementation', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onError(550, error) ); var results = scheduler.startScheduler(function () { return xs.delay(150, scheduler); }); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(500, 3), onError(550, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay absolute time error 2 implementation', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onNext(350, 3), onNext(450, 4), onError(550, error)); var results = scheduler.startScheduler(function () { return xs.delay(new Date(350), scheduler); }); reactiveAssert(t, results.messages, [ onNext(400, 2), onNext(500, 3), onError(550, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(550)); var results = scheduler.startScheduler(function () { return xs.delay(10, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(560) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(550, error)); var results = scheduler.startScheduler(function () { return xs.delay(10, scheduler); }); reactiveAssert(t, results.messages, [ onError(550, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); t.end(); }); test('Observable#delay never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1)); var results = scheduler.startScheduler(function () { return xs.delay(10, scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); // delay with selector test('Observable#delay duration simple 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 10), onNext(220, 30), onNext(230, 50), onNext(240, 35), onNext(250, 20), onCompleted(260)); var results = scheduler.startScheduler(function () { return xs.delay(function (x) { return scheduler.createColdObservable(onNext(x, '!')); }); }); reactiveAssert(t, results.messages, [ onNext(210 + 10, 10), onNext(220 + 30, 30), onNext(250 + 20, 20), onNext(240 + 35, 35), onNext(230 + 50, 50), onCompleted(280) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 260) ]); t.end(); }); test('Observable#delay duration simple 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onNext(250, 6), onCompleted(300) ); var ys = scheduler.createColdObservable( onNext(10, '!') ); var results = scheduler.startScheduler(function () { return xs.delay(function () { return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210 + 10, 2), onNext(220 + 10, 3), onNext(230 + 10, 4), onNext(240 + 10, 5), onNext(250 + 10, 6), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(210, 220), subscribe(220, 230), subscribe(230, 240), subscribe(240, 250), subscribe(250, 260) ]); t.end(); }); test('Observable#delay duration simple 3', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onNext(250, 6), onCompleted(300) ); var ys = scheduler.createColdObservable( onNext(100, '!') ); var results = scheduler.startScheduler(function () { return xs.delay(function () { return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210 + 100, 2), onNext(220 + 100, 3), onNext(230 + 100, 4), onNext(240 + 100, 5), onNext(250 + 100, 6), onCompleted(350) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(210, 310), subscribe(220, 320), subscribe(230, 330), subscribe(240, 340), subscribe(250, 350) ]); t.end(); }); test('Observable#delay duration simple 4 inner empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onNext(250, 6), onCompleted(300) ); var ys = scheduler.createColdObservable( onCompleted(100) ); var results = scheduler.startScheduler(function () { return xs.delay(function () { return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210 + 100, 2), onNext(220 + 100, 3), onNext(230 + 100, 4), onNext(240 + 100, 5), onNext(250 + 100, 6), onCompleted(350) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(210, 310), subscribe(220, 320), subscribe(230, 330), subscribe(240, 340), subscribe(250, 350) ]); t.end(); }); test('Observable#delay duration dispose 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onNext(250, 6), onCompleted(300) ); var ys = scheduler.createColdObservable( onNext(200, '!') ); var results = scheduler.startScheduler(function () { return xs.delay(function () { return ys; }); }, { disposed: 425 }); reactiveAssert(t, results.messages, [ onNext(210 + 200, 2), onNext(220 + 200, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(210, 410), subscribe(220, 420), subscribe(230, 425), subscribe(240, 425), subscribe(250, 425) ]); t.end(); }); test('Observable#delay duration dispose 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(400, 3), onCompleted(500)); var ys = scheduler.createColdObservable( onNext(50, '!')); var results = scheduler.startScheduler(function () { return xs.delay(function () { return ys; }); }, { disposed: 300 }); reactiveAssert(t, results.messages, [ onNext(210 + 50, 2) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(210, 260) ]); t.end(); }); RxJS-4.1.0/src/modular/test/delaysubscription.js000066400000000000000000000135211266736161100216670ustar00rootroot00000000000000'use strict'; 'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ delaySubscription: require('../observable/delaysubscription') }); test('Observable#delaySubscription relative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(50, 42), onNext(60, 43), onCompleted(70) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(30, scheduler); }); reactiveAssert(t, results.messages, [ onNext(280, 42), onNext(290, 43), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(230, 300) ]); t.end(); }); test('Observable#delaySubscription relative hot', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(20, scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, 4), onNext(240, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(220, 250) ]); t.end(); }); test('Observable#delaySubscription relative hot misses all', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(200, scheduler); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(400, 1000) ]); t.end(); }); test('Observable#delaySubscription relative hot cancel', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(20, scheduler); }, { disposed: 210 }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ ]); t.end(); }); test('Observable#delaySubscription relative error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(50, 42), onNext(60, 43), onError(70, error) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(30, scheduler); }); reactiveAssert(t, results.messages, [ onNext(280, 42), onNext(290, 43), onError(300, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(230, 300) ]); t.end(); }); test('Observable#delaySubscription absolute', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(50, 42), onNext(60, 43), onCompleted(70) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(new Date(230), scheduler); }); reactiveAssert(t, results.messages, [ onNext(280, 42), onNext(290, 43), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(230, 300) ]); t.end(); }); test('Observable#delaySubscription absolute hot', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(new Date(220), scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, 4), onNext(240, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(220, 250) ]); t.end(); }); test('Observable#delaySubscription relative hot misses all', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(new Date(400), scheduler); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(400, 1000) ]); t.end(); }); test('Observable#delaySubscription relative hot cancel', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(new Date(220), scheduler); }, { disposed: 210 }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ ]); t.end(); }); test('Observable#delaySubscription absolute error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(50, 42), onNext(60, 43), onError(70, error) ); var results = scheduler.startScheduler(function() { return xs.delaySubscription(new Date(230), scheduler); }); reactiveAssert(t, results.messages, [ onNext(280, 42), onNext(290, 43), onError(300, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(230, 300) ]); t.end(); }); RxJS-4.1.0/src/modular/test/disposable.js000066400000000000000000000012411266736161100202450ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Disposable = require('../disposable'); test('Disposable#create', function (t) { var disposable = Disposable.create(function () { }); t.ok(disposable, 'disposable should not be undefined'); t.end(); }); test('Disposable#dispose', function (t) { var disposed = false; var d = Disposable.create(function () { disposed = true; }); t.ok(!disposed, 'should not be disposed'); d.dispose(); t.ok(disposed, 'should be disposed'); t.end(); }); test('Disposable#empty', function (t) { var d = Disposable.empty; t.ok(d, 'should not be null'); d.dispose(); t.end(); }); RxJS-4.1.0/src/modular/test/distinct.js000066400000000000000000000056761266736161100177610ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ distinct: require('../observable/distinct') }); test('Observable#distinct default comparer all distinct', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(280, 4), onNext(300, 2), onNext(350, 1), onNext(380, 3), onNext(400, 5), onCompleted(420) ); var results = scheduler.startScheduler(function () { return xs.distinct(); }); reactiveAssert(t, results.messages, [ onNext(280, 4), onNext(300, 2), onNext(350, 1), onNext(380, 3), onNext(400, 5), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#distinct default comparer some duplicates', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(280, 4), onNext(300, 2), onNext(350, 2), onNext(380, 3), onNext(400, 4), onCompleted(420) ); var results = scheduler.startScheduler(function () { return xs.distinct(); }); reactiveAssert(t, results.messages, [ onNext(280, 4), onNext(300, 2), onNext(380, 3), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); function modComparer(mod) { return function (x, y) { return x % mod === y % mod; }; } test('Observable#distinct CustomComparer all distinct', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(280, 4), onNext(300, 2), onNext(350, 1), onNext(380, 3), onNext(400, 5), onCompleted(420) ); var results = scheduler.startScheduler(function () { return xs.distinct(null, modComparer(10)); }); reactiveAssert(t, results.messages, [ onNext(280, 4), onNext(300, 2), onNext(350, 1), onNext(380, 3), onNext(400, 5), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#distinct custom comparer some duplicates', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(280, 4), onNext(300, 2), onNext(350, 12), onNext(380, 3), onNext(400, 24), onCompleted(420) ); var results = scheduler.startScheduler(function () { return xs.distinct(null, modComparer(10)); }); reactiveAssert(t, results.messages, [ onNext(280, 4), onNext(300, 2), onNext(380, 3), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.end(); }); RxJS-4.1.0/src/modular/test/distinctuntilchanged.js000066400000000000000000000141711266736161100223350ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ distinctUntilChanged: require('../observable/distinctuntilchanged') }); test('Observable#distinctUntilChanged never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#distinctUntilChanged empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, [ onNext(220, 2), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error)); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); test('Observable#distinctUntilChanged all changes', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged all same', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 2), onNext(230, 2), onNext(240, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged some changes', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(215, 3), onNext(220, 3), onNext(225, 2), onNext(230, 2), onNext(230, 1), onNext(240, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 3), onNext(225, 2), onNext(230, 1), onNext(240, 2), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged comparer all equal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(null, function () { return true; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged comparer all different', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 2), onNext(230, 2), onNext(240, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(null, function () { return false; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 2), onNext(230, 2), onNext(240, 2), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged key selector evens', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 4), onNext(230, 3), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(function (x) { return x % 2 === 0; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onCompleted(250) ]); t.end(); }); test('Observable#distinctUntilChanged key selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#distinctUntilChanged comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.distinctUntilChanged(null, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/empty.js000066400000000000000000000023351266736161100172630ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'), onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ empty: require('../observable/empty') }); test('Observable.empty basic', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.empty(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable.empty disposed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.empty(scheduler); }, { disposed: 200 }); reactiveAssert(t, results.messages, []); t.end(); }); function noop () { } test('Observable.empty observer throws', function (t) { var scheduler = new TestScheduler(); var xs = Observable.empty(scheduler); xs.subscribe(noop, noop, function () { throw new Error(); }); t.throws(function () { scheduler.start(); }); t.end(); }); RxJS-4.1.0/src/modular/test/every.js000066400000000000000000000073441266736161100172640ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ every: require('../observable/every') }); test('Observable#every empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, true), onCompleted(250) ]); t.end(); }); test('Observable#every return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, true), onCompleted(250) ]); t.end(); }); test('Observable#every return no match', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(210, false), onCompleted(210) ]); t.end(); }); test('Observable#every none match', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onNext(220, -3), onNext(230, -4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(210, false), onCompleted(210) ]); t.end(); }); test('Observable#every some match', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onNext(220, 3), onNext(230, -4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(210, false), onCompleted(210) ]); t.end(); }); test('Observable#every all match', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, true), onCompleted(250) ]); t.end(); }); test('Observable#every throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#every never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.every(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, []); t.end(); }); RxJS-4.1.0/src/modular/test/filter.js000066400000000000000000000406621266736161100174170ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var SerialDisposable = require('../serialdisposable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe, created = ReactiveTest.created, subscribed = ReactiveTest.subscribed, disposed = ReactiveTest.disposed; Observable.addToPrototype({ filter: require('../observable/filter'), map: require('../observable/map') }); function isPrime(i) { if (i <= 1) { return false; } var max = Math.floor(Math.sqrt(i)); for (var j = 2; j <= max; ++j) { if (i % j === 0) { return false; } } return true; } test('Observable#filter complete', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630)); var results = scheduler.startScheduler(function () { return xs.filter(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(340, 5), onNext(390, 7), onNext(580, 11), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter true', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.filter(function () { invoked++; return true; }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter False', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x) { invoked++; return false; }); }); reactiveAssert(t, results.messages, [ onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter dispose', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x) { invoked++; return isPrime(x); }); }, { disposed: 400 }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(340, 5), onNext(390, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.equal(5, invoked); t.end(); }); test('Observable#filter error', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onError(600, error), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(340, 5), onNext(390, 7), onNext(580, 11), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter Throw', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x) { invoked++; if (x > 5) { throw error; } return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(340, 5), onError(380, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 380) ]); t.equal(4, invoked); t.end(); }); test('Observable#filter dispose in predicate', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.createObserver(); var d = new SerialDisposable(); var ys; scheduler.scheduleAbsolute(null, created, function () { return ys = xs.filter(function (x) { invoked++; if (x === 8) { d.dispose(); } return isPrime(x); }); }); scheduler.scheduleAbsolute(null, subscribed, function () { d.setDisposable(ys.subscribe(results)); }); scheduler.scheduleAbsolute(null, disposed, function () { d.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(340, 5), onNext(390, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.equal(6, invoked); t.end(); }); test('Observable#filter with index complete', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x, index) { invoked++; return isPrime(x + index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(390, 7), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter with index True', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x, index) { invoked++; return true; }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter with index false', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x, index) { invoked++; return false; }); }); reactiveAssert(t, results.messages, [ onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter with index dispose', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x, index) { invoked++; return isPrime(x + index * 10); }); }, { disposed: 400 }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(390, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.equal(5, invoked); t.end(); }); test('Observable#filter with index error', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onError(600, error), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x, index) { invoked++; return isPrime(x + index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(390, 7), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked); t.end(); }); test('Observable#filter with index throw', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs.filter(function (x, index) { invoked++; if (x > 5) { throw error; } return isPrime(x + index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onError(380, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 380) ]); t.equal(4, invoked); t.end(); }); test('Observable#filter with index dispose in predicate', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.createObserver(); var d = new SerialDisposable(); var ys; scheduler.scheduleAbsolute(null, created, function () { ys = xs.filter(function (x, index) { invoked++; if (x === 8) { d.dispose(); } return isPrime(x + index * 10); }); }); scheduler.scheduleAbsolute(null, subscribed, function () { d.setDisposable(ys.subscribe(results)); }); scheduler.scheduleAbsolute(null, disposed, function () { d.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(390, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.equal(6, invoked); t.end(); }); test('Observable#filter multiple subscribers', function (t) { var s = new TestScheduler(); var xs = s.createHotObservable(onCompleted(100)).filter(function () { return true; }); var o1 = s.createObserver(); var o2 = s.createObserver(); xs.subscribe(o1); xs.subscribe(o2); s.start(); t.equal(o1.messages.length, 1); t.equal(o2.messages.length, 1); t.end(); }); test('Observable#Filter and Filter Optimization', function (t) { var scheduler = new TestScheduler(); var invoked1 = 0; var invoked2 = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs .filter(function(x) { invoked1++; return x % 2 === 0; }) .filter(function(x) { invoked2++; return x % 3 === 0; }); }); reactiveAssert(t, results.messages, [ onNext(380, 6), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked1); t.equal(4, invoked2); t.end(); }); test('Observable#filter and Observable#filter thisArg', function (t) { var scheduler = new TestScheduler(); function Filterer() { this.filter1 = function(item) { return item % 2 === 0; }; this.filter2 = function(item) { return item % 3 === 0; }; } var filterer = new Filterer(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onNext(30, 3), onNext(40, 4), onNext(50, 5), onNext(60, 6), onNext(70, 7), onNext(80, 8), onNext(90, 9), onCompleted(100) ); var results = scheduler.startScheduler(function() { return xs .filter(function(x){ return this.filter1(x);}, filterer) .filter(function(x){ return this.filter2(x);}, filterer) .filter(function(x){ return this.filter1(x);}, filterer); }); reactiveAssert(t, results.messages, [ onNext(260, 6), onCompleted(300) ]); t.end(); }); test('Observable#filter and map optimization', function (t) { var scheduler = new TestScheduler(); var invoked1 = 0; var invoked2 = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs .filter(function(x) { invoked1++; return x % 2 === 0; }) .map(function(x) { invoked2++; return x * x; }); }); reactiveAssert(t, results.messages, [ onNext(270, 16), onNext(380, 36), onNext(450, 64), onNext(560, 100), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked1); t.equal(4, invoked2); t.end(); }); RxJS-4.1.0/src/modular/test/finally.js000066400000000000000000000071771266736161100175740ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ empty: require('../observable/empty'), 'throw': require('../observable/throw') }); Observable.addToPrototype({ 'finally': require('../observable/finally') }); test('Observable#finally has orders of effects', function (t) { var results = []; function noop () {} var someObservable = Observable.empty()['finally'](function () { results.push('invoked'); }); someObservable.subscribe(noop, noop, function () { results.push('completed'); }); t.equal(results[0], 'completed'); t.equal(results[1], 'invoked'); t.end(); }); test('Observable#finally calls finally before throwing', function (t) { var invoked = false; var someObservable = Observable['throw'](new Error())['finally'](function () { invoked = true; }); t.throws(function () { someObservable.subscribe(); }); t.ok(invoked, 'should have been invoked'); t.end(); }); test('Observable#finally only called once on empty', function (t) { var invokeCount = 0; var someObservable = Observable.empty()['finally'](function () { invokeCount++; }); var d = someObservable.subscribe(); d.dispose(); d.dispose(); t.equal(1, invokeCount); t.end(); }); test('Observable#finally called with empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var invoked = false; var results = scheduler.startScheduler(function () { return xs['finally'](function () { invoked = true; }); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.ok(invoked); t.end(); }); test('Observable#finally called with never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var invoked = false; var results = scheduler.startScheduler(function () { return xs['finally'](function () { invoked = true; }); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.ok(invoked); t.end(); }); test('Observable#finally called with single value', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var invoked = false; var results = scheduler.startScheduler(function () { return xs['finally'](function () { invoked = true; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.ok(invoked); t.end(); }); test('Observable#finally on throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var invoked = false; var results = scheduler.startScheduler(function () { return xs['finally'](function () { invoked = true; }); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.ok(invoked); t.end(); }); RxJS-4.1.0/src/modular/test/find.js000066400000000000000000000053531266736161100170500ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ find: require('../observable/find') }); test('Observable#find never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.find(function () { return true; }); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#find empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return xs.find(function () { return true; }); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('Observable#find single', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.find(function (x) { return x === 2; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(210) ]); t.end(); }); test('Observable#find not found', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.find(function (x) { return x === 3; }); }); reactiveAssert(t, results.messages, [ onCompleted(220) ]); t.end(); }); test('Observable#find error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error) ); var results = scheduler.startScheduler(function () { return xs.find(function (x) { return x === 3; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#find throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.find(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/findindex.js000066400000000000000000000054751266736161100201050ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ findIndex: require('../observable/findindex') }); test('findIndex never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.findIndex(function () { return true; }); }); reactiveAssert(t, results.messages, [ ]); t.end(); }); test('findIndex empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return xs.findIndex(function () { return true; }); }); reactiveAssert(t, results.messages, [ onNext(210, -1), onCompleted(210) ]); t.end(); }); test('findIndex single', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.findIndex(function (x) { return x === 2; }); }); reactiveAssert(t, results.messages, [ onNext(210, 0), onCompleted(210) ]); t.end(); }); test('Observable#findIndex not found', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.findIndex(function (x) { return x === 3; }); }); reactiveAssert(t, results.messages, [ onNext(220, -1), onCompleted(220) ]); t.end(); }); test('Observable#findIndex error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error) ); var results = scheduler.startScheduler(function () { return xs.findIndex(function (x) { return x === 3; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#findIndex throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.findIndex(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/first.js000066400000000000000000000201061266736161100172500ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var EmptyError = require('../internal/errors').EmptyError; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ first: require('../observable/first') }); // First Async test('Observable#first empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#first default', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler( function () { return xs.first({defaultValue: 42}); }); reactiveAssert(t, results.messages, [ onNext(250, 42), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#first one', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(210) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#first many', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(210) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#first Error', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, ex) ); var results = scheduler.startScheduler(function () { return xs.first(); }); reactiveAssert(t, results.messages, [ onError(210, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#first predicate', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(function (x) { return x % 2 === 1; }); }); reactiveAssert(t, results.messages, [ onNext(220, 3), onCompleted(220) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable#first Predicate Obj', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first({ predicate: function (x) { return x % 2 === 1; } }); }); reactiveAssert(t, results.messages, [ onNext(220, 3), onCompleted(220) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable#first Predicate thisArg', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(function (x) { t.equal(this, 42); return x % 2 === 1; }, 42); }); reactiveAssert(t, results.messages, [ onNext(220, 3), onCompleted(220) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable#first Predicate Obj thisArg', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first({ predicate: function (x) { t.equal(this, 42); return x % 2 === 1; }, thisArg: 42 }); }); reactiveAssert(t, results.messages, [ onNext(220, 3), onCompleted(220) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable#first Predicate None', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(function (x) { return x > 10; }); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#first Predicate Obj None', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first({ predicate: function (x) { return x > 10; } }); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#first Predicate Obj None Default', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first({ predicate: function (x) { return x > 10; }, defaultValue: 42 }); }); reactiveAssert(t, results.messages, [ onNext(250, 42), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#first Predicate Error', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, ex) ); var results = scheduler.startScheduler(function () { return xs.first(function (x) { return x % 2 === 1; }); }); reactiveAssert(t, results.messages, [ onError(220, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable#first PredicateThrows', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.first(function (x) { if (x < 4) { return false; } else { throw ex; } }); }); reactiveAssert(t, results.messages, [ onError(230, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); RxJS-4.1.0/src/modular/test/flatmap.js000066400000000000000000001012241266736161100175460ustar00rootroot00000000000000 'use strict'; /* jshint undef: true, unused: true */ /* globals Promise */ var test = require('tape'); var Observable = require('../observable'); var isEqual = require('../internal/isequal'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ fromArray: require('../observable/fromarray'), interval: require('../observable/interval') }); Observable.addToPrototype({ flatMap: require('../observable/flatmap'), map: require('../observable/map'), take: require('../observable/take') }); // Polyfilling require('lie/polyfill'); test('Observable#flatMap then complete promise', function (t) { var xs = Observable.fromArray([4,3,2,1]); var ys = Promise.resolve(42); var results = []; xs.flatMap(ys).subscribe( function (x) { results.push(x); }, function () { t.ok(false); t.end(); }, function () { t.ok(isEqual([42,42,42,42], results)); t.end(); }); }); test('Observable#flatMap then error Promise', function (t) { var xs = Observable.fromArray([4,3,2,1]); var ys = Promise.reject(42); xs.flatMap(ys).subscribe( function () { t.ok(false); t.end(); }, function (err) { t.equal(err, 42); t.end(); }, function () { t.ok(false); t.end(); }); }); test('Observable#flatMap selector complete Promise', function (t) { var xs = Observable.fromArray([4,3,2,1]); var results = []; xs.flatMap(function (x, i) { return Promise.resolve(x + i); }).subscribe( function (x) { results.push(x); }, function () { t.ok(false); t.end(); }, function () { t.ok(isEqual([4, 4, 4, 4], results)); t.end(); }); }); test('Observable#flatMap Selector error Promise', function (t) { var xs = Observable.fromArray([4,3,2,1]); xs.flatMap(function (x, i) { return Promise.reject(x + i); }).subscribe( function () { t.ok(false); t.end(); }, function (err) { t.equal(err, 4); t.end(); }, function () { t.ok(false); t.end(); }); }); test('Observable#flatMap result selector complete promise', function (t) { var xs = Observable.fromArray([4,3,2,1]); var results = []; xs.flatMap( function (x, i) { return Promise.resolve(x + i); }, function (x, y, i) { return x + y + i; }) .subscribe( function (x) { results.push(x); }, function () { t.ok(false); t.end(); }, function () { t.ok(isEqual([8, 8, 8, 8], results)); t.end(); }); }); test('Observable#flatMap result selector error promise', function (t) { var xs = Observable.fromArray([4,3,2,1]); xs.flatMap( function (x, i) { return Promise.reject(x + i); }, function (x, y, i) { return x + y + i; }) .subscribe( function () { t.ok(false); t.end(); }, function (err) { t.equal(err, 4); t.end(); }, function () { t.ok(false); t.end(); }); }); test('Observable#flatMap then complete complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onCompleted(500) ); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onNext(550, 'baz'), onNext(550, 'foo'), onNext(600, 'qux'), onNext(600, 'bar'), onNext(650, 'baz'), onNext(650, 'foo'), onNext(700, 'qux'), onNext(700, 'bar'), onNext(750, 'baz'), onNext(800, 'qux'), onCompleted(850) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 700) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 550), subscribe(400, 650), subscribe(500, 750), subscribe(600, 850) ]); t.end(); }); test('Observable#flatMap then complete complete 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onCompleted(700)); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onNext(550, 'baz'), onNext(550, 'foo'), onNext(600, 'qux'), onNext(600, 'bar'), onNext(650, 'baz'), onNext(650, 'foo'), onNext(700, 'qux'), onNext(700, 'bar'), onNext(750, 'baz'), onNext(800, 'qux'), onCompleted(900) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 900) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 550), subscribe(400, 650), subscribe(500, 750), subscribe(600, 850) ]); t.end(); }); test('Observable#flatMap then never complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onNext(500, 5), onNext(700, 0)); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onNext(550, 'baz'), onNext(550, 'foo'), onNext(600, 'qux'), onNext(600, 'bar'), onNext(650, 'baz'), onNext(650, 'foo'), onNext(700, 'qux'), onNext(700, 'bar'), onNext(750, 'baz'), onNext(750, 'foo'), onNext(800, 'qux'), onNext(800, 'bar'), onNext(850, 'baz'), onNext(900, 'qux'), onNext(950, 'foo') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 550), subscribe(400, 650), subscribe(500, 750), subscribe(600, 850), subscribe(700, 950), subscribe(900, 1000) ]); t.end(); }); test('Observable#flatMap then complete never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onCompleted(500)); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux')); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onNext(550, 'baz'), onNext(550, 'foo'), onNext(600, 'qux'), onNext(600, 'bar'), onNext(650, 'baz'), onNext(650, 'foo'), onNext(700, 'qux'), onNext(700, 'bar'), onNext(750, 'baz'), onNext(800, 'qux') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 700) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 1000), subscribe(400, 1000), subscribe(500, 1000), subscribe(600, 1000) ]); t.end(); }); test('Observable#flatMap then complete Error', function (t) { var ex = new Error('ex'); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onCompleted(500) ); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onError(300, ex) ); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onNext(550, 'baz'), onNext(550, 'foo'), onError(600, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 600), subscribe(400, 600), subscribe(500, 600), subscribe(600, 600) ]); t.end(); }); test('Observable#flatMap then error complete', function (t) { var ex = new Error('ex'); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onError(500, ex)); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onNext(550, 'baz'), onNext(550, 'foo'), onNext(600, 'qux'), onNext(600, 'bar'), onNext(650, 'baz'), onNext(650, 'foo'), onError(700, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 700) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 550), subscribe(400, 650), subscribe(500, 700), subscribe(600, 700) ]); t.end(); }); test('Observable#flatMap then error Error', function (t) { var ex = new Error('ex'); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 4), onNext(200, 2), onNext(300, 3), onNext(400, 1), onError(500, ex)); var ys = scheduler.createColdObservable( onNext(50, 'foo'), onNext(100, 'bar'), onNext(150, 'baz'), onNext(200, 'qux'), onError(250, ex)); var results = scheduler.startScheduler(function () { return xs.flatMap(ys); }); reactiveAssert(t, results.messages, [ onNext(350, 'foo'), onNext(400, 'bar'), onNext(450, 'baz'), onNext(450, 'foo'), onNext(500, 'qux'), onNext(500, 'bar'), onError(550, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 550) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(300, 550), subscribe(400, 550), subscribe(500, 550) ]); t.end(); }); test('Observable#flatMap complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onCompleted(460))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203), onCompleted(205))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable(onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100))), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return x; }); }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onNext(560, 301), onNext(580, 202), onNext(590, 203), onNext(600, 302), onNext(620, 303), onNext(740, 106), onNext(810, 304), onNext(860, 305), onNext(930, 401), onNext(940, 402), onCompleted(960) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 900) ]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [subscribe(300, 760)]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [subscribe(400, 605)]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, [subscribe(550, 960)]); reactiveAssert(t, xs.messages[5].value.value.subscriptions, [subscribe(750, 790)]); reactiveAssert(t, xs.messages[6].value.value.subscriptions, [subscribe(850, 950)]); t.end(); }); test('Observable#flatMap complete innerNotcomplete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onCompleted(460))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable(onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100))), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return x; }); }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onNext(560, 301), onNext(580, 202), onNext(590, 203), onNext(600, 302), onNext(620, 303), onNext(740, 106), onNext(810, 304), onNext(860, 305), onNext(930, 401), onNext(940, 402) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 900)]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [subscribe(300, 760)]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [subscribe(400, 1000)]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, [subscribe(550, 960)]); reactiveAssert(t, xs.messages[5].value.value.subscriptions, [subscribe(750, 790)]); reactiveAssert(t, xs.messages[6].value.value.subscriptions, [subscribe(850, 950)]); t.end(); }); test('Observable#flatMap complete outerNotcomplete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onCompleted(460))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203), onCompleted(205))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable(onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100)))); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return x; }); }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onNext(560, 301), onNext(580, 202), onNext(590, 203), onNext(600, 302), onNext(620, 303), onNext(740, 106), onNext(810, 304), onNext(860, 305), onNext(930, 401), onNext(940, 402) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 1000)]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [subscribe(300, 760)]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [subscribe(400, 605)]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, [subscribe(550, 960)]); reactiveAssert(t, xs.messages[5].value.value.subscriptions, [subscribe(750, 790)]); reactiveAssert(t, xs.messages[6].value.value.subscriptions, [subscribe(850, 950)]); t.end(); }); test('Observable#flatMap error outer', function (t) { var ex = new Error('ex'); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onCompleted(460))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203), onCompleted(205))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable(onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100))), onError(900, ex)); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return x; }); }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onNext(560, 301), onNext(580, 202), onNext(590, 203), onNext(600, 302), onNext(620, 303), onNext(740, 106), onNext(810, 304), onNext(860, 305), onError(900, ex) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 900)]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [subscribe(300, 760)]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [subscribe(400, 605)]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, [subscribe(550, 900)]); reactiveAssert(t, xs.messages[5].value.value.subscriptions, [subscribe(750, 790)]); reactiveAssert(t, xs.messages[6].value.value.subscriptions, [subscribe(850, 900)]); t.end(); }); test('Observable#flatMap error inner', function (t) { var ex = new Error('ex'); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onError(460, ex))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203), onCompleted(205))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable(onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100))), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return x; }); }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onNext(560, 301), onNext(580, 202), onNext(590, 203), onNext(600, 302), onNext(620, 303), onNext(740, 106), onError(760, ex) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 760)]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [subscribe(300, 760)]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [subscribe(400, 605)]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, [subscribe(550, 760)]); reactiveAssert(t, xs.messages[5].value.value.subscriptions, [subscribe(750, 760)]); reactiveAssert(t, xs.messages[6].value.value.subscriptions, []); t.end(); }); test('Observable#flatMap dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onCompleted(460))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203), onCompleted(205))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable(onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100))), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return x; }); }, { disposed: 700 }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onNext(560, 301), onNext(580, 202), onNext(590, 203), onNext(600, 302), onNext(620, 303) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 700)]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [subscribe(300, 700)]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [subscribe(400, 605)]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, [subscribe(550, 700)]); reactiveAssert(t, xs.messages[5].value.value.subscriptions, []); reactiveAssert(t, xs.messages[6].value.value.subscriptions, []); t.end(); }); test('Observable#flatMap Throw', function (t) { var invoked = 0; var ex = new Error('ex'); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(5, scheduler.createColdObservable(onError(1, new Error('ex1')))), onNext(105, scheduler.createColdObservable(onError(1, new Error('ex2')))), onNext(300, scheduler.createColdObservable( onNext(10, 102), onNext(90, 103), onNext(110, 104), onNext(190, 105), onNext(440, 106), onCompleted(460))), onNext(400, scheduler.createColdObservable( onNext(180, 202), onNext(190, 203), onCompleted(205))), onNext(550, scheduler.createColdObservable( onNext(10, 301), onNext(50, 302), onNext(70, 303), onNext(260, 304), onNext(310, 305), onCompleted(410))), onNext(750, scheduler.createColdObservable( onCompleted(40))), onNext(850, scheduler.createColdObservable( onNext(80, 401), onNext(90, 402), onCompleted(100))), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { invoked++; if (invoked === 3) { throw ex; } return x; }); }); reactiveAssert(t, results.messages, [ onNext(310, 102), onNext(390, 103), onNext(410, 104), onNext(490, 105), onError(550, ex) ]); reactiveAssert(t, xs.subscriptions, [subscribe(200, 550)]); reactiveAssert(t, xs.messages[2].value.value.subscriptions, [ subscribe(300, 550) ]); reactiveAssert(t, xs.messages[3].value.value.subscriptions, [ subscribe(400, 550) ]); reactiveAssert(t, xs.messages[4].value.value.subscriptions, []); reactiveAssert(t, xs.messages[5].value.value.subscriptions, []); reactiveAssert(t, xs.messages[6].value.value.subscriptions, []); t.end(); }); test('Observable#flatMap use function', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 4), onNext(220, 3), onNext(250, 5), onNext(270, 1), onCompleted(290) ); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return Observable.interval(10, scheduler).map(function () { return x; }).take(x); }); }); reactiveAssert(t, results.messages, [ onNext(220, 4), onNext(230, 3), onNext(230, 4), onNext(240, 3), onNext(240, 4), onNext(250, 3), onNext(250, 4), onNext(260, 5), onNext(270, 5), onNext(280, 1), onNext(280, 5), onNext(290, 5), onNext(300, 5), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 290) ]); t.end(); }); function arrayRepeat(value, times) { var results = []; for(var i = 0; i < times; i++) { results.push(value); } return results; } test('Observable#flatMap iterable complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var inners = []; var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { var ys = arrayRepeat(x, x); inners.push(ys); return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(210, 2), onNext(340, 4), onNext(340, 4), onNext(340, 4), onNext(340, 4), onNext(420, 3), onNext(420, 3), onNext(420, 3), onNext(510, 2), onNext(510, 2), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(4, inners.length); t.end(); }); test('Observable#flatMap Iterable complete result selector', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return arrayRepeat(x, x); }, function (x, y) { return x + y; }); }); reactiveAssert(t, results.messages, [ onNext(210, 4), onNext(210, 4), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(420, 6), onNext(420, 6), onNext(420, 6), onNext(510, 4), onNext(510, 4), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#flatMap iterable Error', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onError(600, ex) ); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return arrayRepeat(x, x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(210, 2), onNext(340, 4), onNext(340, 4), onNext(340, 4), onNext(340, 4), onNext(420, 3), onNext(420, 3), onNext(420, 3), onNext(510, 2), onNext(510, 2), onError(600, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#flatMap Iterable error result selector', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onError(600, ex) ); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { return arrayRepeat(x, x); }, function (x, y) { return x + y; }); }); reactiveAssert(t, results.messages, [ onNext(210, 4), onNext(210, 4), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(420, 6), onNext(420, 6), onNext(420, 6), onNext(510, 4), onNext(510, 4), onError(600, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#flatMap iterable dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var results = scheduler.startScheduler( function () { return xs.flatMap(function (x) { return arrayRepeat(x, x); }); }, { disposed: 350 } ); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(210, 2), onNext(340, 4), onNext(340, 4), onNext(340, 4), onNext(340, 4) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 350) ]); t.end(); }); test('Observable#flatMap iterable dispose result selector', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var results = scheduler.startScheduler( function () { return xs.flatMap(function (x) { return arrayRepeat(x, x); }, function (x, y) { return x + y; }); }, { disposed: 350 } ); reactiveAssert(t, results.messages, [ onNext(210, 4), onNext(210, 4), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(340, 8) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 350) ]); t.end(); }); test('Observable#flatMap iterable selector throws', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var invoked = 0; var ex = new Error(); var results = scheduler.startScheduler(function () { return xs.flatMap(function (x) { invoked++; if (invoked === 3) { throw ex; } return arrayRepeat(x, x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(210, 2), onNext(340, 4), onNext(340, 4), onNext(340, 4), onNext(340, 4), onError(420, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.equal(3, invoked); t.end(); }); test('Observable#flatMap iterable result selector throws', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var ex = new Error(); var inners = []; var results = scheduler.startScheduler(function () { return xs.flatMap( function (x) { var ys = arrayRepeat(x, x); inners.push(ys); return ys; }, function (x, y) { if (x === 3) { throw ex; } return x + y; } ); }); reactiveAssert(t, results.messages, [ onNext(210, 4), onNext(210, 4), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(340, 8), onError(420, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.equal(3, inners.length); t.end(); }); test('Observable#flatMap iterable selector throws result selector', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 2), onNext(340, 4), onNext(420, 3), onNext(510, 2), onCompleted(600) ); var invoked = 0; var ex = new Error(); var results = scheduler.startScheduler(function () { return xs.flatMap( function (x) { invoked++; if (invoked === 3) { throw ex; } return arrayRepeat(x, x); }, function (x, y) { return x + y; } ); }); reactiveAssert(t, results.messages, [ onNext(210, 4), onNext(210, 4), onNext(340, 8), onNext(340, 8), onNext(340, 8), onNext(340, 8), onError(420, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); t.equal(3, invoked); t.end(); }); RxJS-4.1.0/src/modular/test/forkjoin.js000066400000000000000000000161611266736161100177500ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ forkJoin: require('../observable/forkjoin') }); Observable.addToPrototype({ forkJoin: require('../observable/forkjoin') }); function add(x, y) { return x + y; } test('Observable.forkJoin n-ary parameters', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230)); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var o3 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 3), onNext(245, 5), onCompleted(270) ); var results = scheduler.startScheduler(function () { return Observable.forkJoin(o1, o2, o3); }); reactiveAssert(t, results.messages, [ onNext(270, [4,7,5]), onCompleted(270) ]); t.end(); }); test('Observable.forkJoin n-ary parameters empty', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var o3 = scheduler.createHotObservable( onCompleted(270) ); var results = scheduler.startScheduler(function () { return Observable.forkJoin(o1, o2, o3); }); reactiveAssert(t, results.messages, [ onCompleted(270) ]); t.end(); }); test('Observable.forkJoin n-ary parameters empty before end', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var o2 = scheduler.createHotObservable( onCompleted(235) ); var o3 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 3), onNext(245, 5), onCompleted(270)); var results = scheduler.startScheduler(function () { return Observable.forkJoin(o1, o2, o3); }); reactiveAssert(t, results.messages, [ onCompleted(235) ]); t.end(); }); test('Observable.forkJoin empty empty', function (t) { var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); t.end(); }); test('Observable.forkJoin none', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.forkJoin(); }); reactiveAssert(t, results.messages, [ onCompleted(200) ]); t.end(); }); test('Observable.forkJoin empty return', function (t) { var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); t.end(); }); test('Observable.forkJoin return empty', function (t) { var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230)); var e = scheduler.createHotObservable( onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable.forkJoin return return', function (t) { var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onNext(250, 2 + 3), onCompleted(250) ]); t.end(); }); test('Observable.forkJoin empty throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onError(210, error), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable.forkJoin throw empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onError(210, error), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable.forkJoin return throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onError(220, error), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.forkJoin throw return', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onError(220, error), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.forkJoin binary', function (t) { var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var e = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e.forkJoin(o, add); }); reactiveAssert(t, results.messages, [ onNext(250, 4 + 7), onCompleted(250) ]); t.end(); }); RxJS-4.1.0/src/modular/test/from.js000066400000000000000000000126031266736161100170670ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ from: require('../observable/from') }); test('Observable.from Array', function (t) { var array = [1, 2, 3, 4, 5]; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, null, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3), onNext(204, 4), onNext(205, 5), onCompleted(206) ]); t.end(); }); test('Observable.from Array disposed', function (t) { var array = [1, 2, 3, 4, 5]; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, null, null, scheduler); }, { disposed: 204 }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3) ]); t.end(); }); test('Observable.from array empty', function (t) { var array = []; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, null, null, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable.from with length', function (t) { var array = { length: 5 }; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, function (v, k) { return k; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 0), onNext(202, 1), onNext(203, 2), onNext(204, 3), onNext(205, 4), onCompleted(206) ]); t.end(); }); test('Observable.from With String', function (t) { var array = 'foo'; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, null, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 'f'), onNext(202, 'o'), onNext(203, 'o'), onCompleted(204) ]); t.end(); }); test('Observable.from with selector', function (t) { var array = [1,2,3]; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, function (x) { return x + x; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 2), onNext(202, 4), onNext(203, 6), onCompleted(204) ]); t.end(); }); test('Observable.from with selector error', function (t) { var array = [1,2,3]; var error = new Error('woops'); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, function () { throw error; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.from with selector some error', function (t) { var array = [1,2,3]; var error = new Error('woops'); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, function (x, i) { if (i > 1) { throw error; } return x + x; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 2), onNext(202, 4), onError(203, error) ]); t.end(); }); test('Observable.from With Selector And Context', function (t) { var array = [1,2,3]; var context = 42; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, function (x) { t.equal(this, context); return x + x; }, context, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 2), onNext(202, 4), onNext(203, 6), onCompleted(204) ]); t.end(); }); // Shim in iterator support var $iterator$ = (typeof global.Symbol === 'function' && global.Symbol.iterator) || '_es6shim_iterator_'; // Bug for mozilla version if (global.Set && typeof new global.Set()['@@iterator'] === 'function') { $iterator$ = '@@iterator'; } // Check for Map if (!!global.Map && new global.Map()[$iterator$] !== undefined) { test('Observable.from With Map', function (t) { var array = new global.Map([[1, 2], [2, 4], [4, 8]]); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, null, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, [1,2]), onNext(202, [2,4]), onNext(203, [4,8]), onCompleted(204) ]); t.end(); }); } if (!!global.Set && new global.Set()[$iterator$] !== undefined) { test('Observable.from With Set', function (t) { var array = new global.Set(['foo','bar','baz']); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.from(array, null, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 'foo'), onNext(202, 'bar'), onNext(203, 'baz'), onCompleted(204) ]); t.end(); }); } RxJS-4.1.0/src/modular/test/fromarray.js000066400000000000000000000035251266736161100201310ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ fromArray: require('../observable/fromarray') }); test('Observable.fromArray normal', function (t) { var array = [1, 2, 3, 4, 5]; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.fromArray(array, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3), onNext(204, 4), onNext(205, 5), onCompleted(206) ]); t.end(); }); test('Observable.fromArray empty', function (t) { var array = []; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.fromArray(array, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable.fromArray one', function (t) { var array = [1]; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.fromArray(array, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onCompleted(202) ]); t.end(); }); test('Observable.fromArray dispose', function (t) { var array = [1, 2, 3, 4, 5]; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.fromArray(array, scheduler); }, { disposed: 204 }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3) ]); t.end(); }); RxJS-4.1.0/src/modular/test/fromevent.js000066400000000000000000000215551266736161100201370ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var slice = Array.prototype.slice; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError; Observable.addToObject({ fromEvent: require('../observable/fromevent') }); /** Fake DOM Element */ function FakeDOMStandardElement(nodeName) { this.listeners = {}; this.nodeName = nodeName; this.addEventListenerCalled = false; this.removeEventListenerCalled = false; } FakeDOMStandardElement.prototype.addEventListener = function (eventName, handler, useCapture) { this.listeners[eventName] = handler; this.addEventListenerCalled = true; }; FakeDOMStandardElement.prototype.removeEventListener = function (eventName, handler, useCapture) { delete this.listeners[eventName]; this.removeEventListenerCalled = true; }; FakeDOMStandardElement.prototype.trigger = function (eventName) { var args = slice.call(arguments, 1); if (eventName in this.listeners) { this.listeners[eventName].apply(null, args); } }; test('Observable.fromEvent DOM Element', function (t) { var scheduler = new TestScheduler(); var element = new FakeDOMStandardElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addEventListenerCalled, true); t.equal(element.removeEventListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 42); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent(element, 'someEvent'); }); reactiveAssert(t, results.messages, [ onNext(220, 42) ]); t.equal(element.removeEventListenerCalled, true); t.end(); }); test('Observable.fromEvent DOM Element selector', function (t) { var scheduler = new TestScheduler(); var element = new FakeDOMStandardElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addEventListenerCalled, true); t.equal(element.removeEventListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent( element, 'someEvent', function (baz, quux) { return { foo: baz, bar: quux }; } ); }); reactiveAssert(t, results.messages, [ onNext(220, {foo: 'baz', bar: 'quux'}) ]); t.equal(element.removeEventListenerCalled, true); t.end(); }); test('Observable.fromEvent DOM Element selector throws', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var element = new FakeDOMStandardElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addEventListenerCalled, true); t.equal(element.removeEventListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent( element, 'someEvent', function () { throw error; } ); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.equal(element.removeEventListenerCalled, true); t.end(); }); /** Fake Node EventEmitter */ function FakeEventEmitter() { this.listeners = {}; this.addListenerCalled = false; this.removeListenerCalled = false; } FakeEventEmitter.prototype.addListener = function (eventName, handler, useCapture) { this.listeners[eventName] = handler; this.addListenerCalled = true; }; FakeEventEmitter.prototype.removeListener = function (eventName, handler, useCapture) { delete this.listeners[eventName]; this.removeListenerCalled = true; }; FakeEventEmitter.prototype.emit = function (eventName, eventData) { var args = slice.call(arguments, 1); if (eventName in this.listeners) { this.listeners[eventName].apply(null, args); } }; test('Observable.fromEvent EventEmitter', function (t) { var scheduler = new TestScheduler(); var element = new FakeEventEmitter(); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addListenerCalled, true); t.equal(element.removeListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.emit('someEvent', 42); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent(element, 'someEvent'); }); reactiveAssert(t, results.messages, [ onNext(220, 42) ]); t.equal(element.removeListenerCalled, true); t.end(); }); test('Observable.fromEvent EventEmitter selector', function (t) { var scheduler = new TestScheduler(); var element = new FakeEventEmitter(); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addListenerCalled, true); t.equal(element.removeListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.emit('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent( element, 'someEvent', function (baz, quux) { return { foo: baz, bar: quux }; } ); }); reactiveAssert(t, results.messages, [ onNext(220, {foo: 'baz', bar: 'quux'}) ]); t.equal(element.removeListenerCalled, true); t.end(); }); test('Observable.fromEvent EventEmitter selector throws', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var element = new FakeEventEmitter(); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addListenerCalled, true); t.equal(element.removeListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.emit('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent( element, 'someEvent', function () { throw error; } ); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.equal(element.removeListenerCalled, true); t.end(); }); /** Fake jQuery/Angular/Ember Element */ function FakeJQueryElement(nodeName) { this.listeners = {}; this.nodeName = nodeName; this.onCalled = false; this.offCalled = false; } FakeJQueryElement.prototype.on = function (eventName, handler) { this.listeners[eventName] = handler; this.onCalled = true; }; FakeJQueryElement.prototype.off = function (eventName, handler) { delete this.listeners[eventName]; this.offCalled = true; }; FakeJQueryElement.prototype.trigger = function (eventName) { var args = slice.call(arguments, 1); if (eventName in this.listeners) { this.listeners[eventName].apply(null, args); } }; test('Observable.fromEvent jQuery/Angular/Ember Element', function (t) { var scheduler = new TestScheduler(); var element = new FakeJQueryElement('foo'); scheduler.scheduleFuture(null, 210, function(){ t.equal(element.onCalled, true); t.equal(element.offCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 42); }); var results = scheduler.startScheduler(function() { return Observable.fromEvent(element, 'someEvent'); }); reactiveAssert(t, results.messages, [ onNext(220, 42) ]); t.equal(element.offCalled, true); t.end(); }); test('Observable.fromEvent jQuery/Angular/Ember Element selector', function (t) { var scheduler = new TestScheduler(); var element = new FakeJQueryElement('foo'); scheduler.scheduleFuture(null, 210, function(){ t.equal(element.onCalled, true); t.equal(element.offCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function(){ return Observable.fromEvent( element, 'someEvent', function (baz, quux) { return { foo: baz, bar: quux }; } ); }); reactiveAssert(t, results.messages, [ onNext(220, {foo: 'baz', bar: 'quux'}) ]); t.equal(element.offCalled, true); t.end(); }); test('Observable.fromEvent jQuery/Angular/Ember Element selector throws', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var element = new FakeJQueryElement('foo'); scheduler.scheduleFuture(null, 210, function(){ t.equal(element.onCalled, true); t.equal(element.offCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function(){ return Observable.fromEvent( element, 'someEvent', function () { throw error; } ); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.equal(element.offCalled, true); t.end(); }); RxJS-4.1.0/src/modular/test/fromeventpattern.js000066400000000000000000000121641266736161100215310ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var slice = Array.prototype.slice; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError; Observable.addToObject({ fromEventPattern: require('../observable/fromeventpattern') }); function FakeDojoElement(nodeName) { this.listeners = {}; this.nodeName = nodeName; this.onCalled = false; this.offCalled = false; } FakeDojoElement.prototype.on = function (eventName, handler) { this.listeners[eventName] = handler; this.onCalled = true; return new FakeDojoDisposable(this, eventName); }; FakeDojoElement.prototype.trigger = function (eventName) { var args = slice.call(arguments, 1); if (eventName in this.listeners) { this.listeners[eventName].apply(null, args); } }; function FakeDojoDisposable(parent, eventName) { this.parent = parent; this.eventName = eventName; } FakeDojoDisposable.prototype.disconnect = function () { delete this.parent.listeners[this.eventName]; this.parent.offCalled = true; }; test('fromEventPattern with return from add handler', function (t) { var scheduler = new TestScheduler(); var element = new FakeDojoElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.onCalled, true); t.equal(element.offCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 42); }); var results = scheduler.startScheduler(function() { return Observable.fromEventPattern( function (h) { return element.on('someEvent', h); }, function (_, d) { d.disconnect(); } ); }); reactiveAssert(t, results.messages, [ onNext(220, 42) ]); t.equal(element.offCalled, true); t.end(); }); /** Fake DOM Element */ function FakeDOMStandardElement(nodeName) { this.listeners = {}; this.nodeName = nodeName; this.addEventListenerCalled = false; this.removeEventListenerCalled = false; } FakeDOMStandardElement.prototype.addEventListener = function (eventName, handler, useCapture) { this.listeners[eventName] = handler; this.addEventListenerCalled = true; }; FakeDOMStandardElement.prototype.removeEventListener = function (eventName, handler, useCapture) { delete this.listeners[eventName]; this.removeEventListenerCalled = true; }; FakeDOMStandardElement.prototype.trigger = function (eventName) { var args = slice.call(arguments, 1); if (eventName in this.listeners) { this.listeners[eventName].apply(null, args); } }; test('Observable.fromEventPattern', function (t) { var scheduler = new TestScheduler(); var element = new FakeDOMStandardElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addEventListenerCalled, true); t.equal(element.removeEventListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 42); }); var results = scheduler.startScheduler(function() { return Observable.fromEventPattern( function (h) { element.addEventListener('someEvent', h); }, function (h) { element.removeEventListener('someEvent', h); } ); }); reactiveAssert(t, results.messages, [ onNext(220, 42) ]); t.equal(element.removeEventListenerCalled, true); t.end(); }); test('fromEventPattern selector', function (t) { var scheduler = new TestScheduler(); var element = new FakeDOMStandardElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addEventListenerCalled, true); t.equal(element.removeEventListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function() { return Observable.fromEventPattern( function (h) { element.addEventListener('someEvent', h); }, function (h) { element.removeEventListener('someEvent', h); }, function (baz, quux) { return { foo: baz, bar: quux }; } ); }); reactiveAssert(t, results.messages, [ onNext(220, {foo: 'baz', bar: 'quux'}) ]); t.equal(element.removeEventListenerCalled, true); t.end(); }); test('fromEventPattern selector throws', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var element = new FakeDOMStandardElement('foo'); scheduler.scheduleFuture(null, 210, function() { t.equal(element.addEventListenerCalled, true); t.equal(element.removeEventListenerCalled, false); }); scheduler.scheduleFuture(null, 220, function() { element.trigger('someEvent', 'baz', 'quux'); }); var results = scheduler.startScheduler(function() { return Observable.fromEventPattern( function (h) { element.addEventListener('someEvent', h); }, function (h) { element.removeEventListener('someEvent', h); }, function () { throw error; } ); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.equal(element.removeEventListenerCalled, true); t.end(); }); RxJS-4.1.0/src/modular/test/frompromise.js000066400000000000000000000061231266736161100204660ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; // Polyfilling require('lie/polyfill'); Observable.addToObject({ fromPromise: require('../observable/frompromise') }); test('Observable.fromPromise factory success mock', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createResolvedPromise(201, 1); var results = scheduler.startScheduler(function () { return Observable.fromPromise(function () { return xs; }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(202, 1), onCompleted(202) ]); t.end(); }); test('Observable.fromPromise factory failure mock', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createRejectedPromise(201, error); var results = scheduler.startScheduler(function () { return Observable.fromPromise(function () { return xs; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(202, error) ]); t.end(); }); test('Observable.fromPromise factory throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.fromPromise(function () { throw error; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.fromPromise success mock', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createResolvedPromise(201, 1); var results = scheduler.startScheduler(function () { return Observable.fromPromise(xs, scheduler); }); reactiveAssert(t, results.messages, [ onNext(202, 1), onCompleted(202) ]); t.end(); }); test('Observable.fromPromise failure mock', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createRejectedPromise(201, error); var results = scheduler.startScheduler(function () { return Observable.fromPromise(xs, scheduler); }); reactiveAssert(t, results.messages, [ onError(202, error) ]); t.end(); }); test('Observable.fromPromise success', function (t) { var promise = new Promise(function (resolve) { resolve(42); }); var source = Observable.fromPromise(promise); source.subscribe( function (x) { t.equal(42, x); }, function () { t.ok(false); }, function () { t.ok(true); t.end(); }); }); test('promise Failure', function (t) { var error = new Error('woops'); var promise = new Promise(function (resolve, reject) { reject(error); }); var source = Observable.fromPromise(promise); source.subscribe( function () { t.ok(false); }, function (err) { t.equal(err, error); t.end(); }, function () { t.ok(false); }); }); RxJS-4.1.0/src/modular/test/generate.js000066400000000000000000000052351266736161100177210ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ generate: require('../observable/generate') }); test('Observable.generate finite', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generate(0, function (x) { return x <= 3; }, function (x) { return x + 1; }, function (x) { return x; }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 0), onNext(202, 1), onNext(203, 2), onNext(204, 3), onCompleted(205) ]); t.end(); }); test('Observable.generate throw condition', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.generate(0, function () { throw error; }, function (x) { return x + 1; }, function (x) { return x; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generate throw result selector', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.generate(0, function () { return true; }, function (x) { return x + 1; }, function () { throw error; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generate throw iterate', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.generate(0, function () { return true; }, function () { throw error; }, function (x) { return x; }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 0), onError(202, error) ]); t.end(); }); test('Observable.generate dispose', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generate(0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }, scheduler); }, {disposed: 203 }); reactiveAssert(t, results.messages, [ onNext(201, 0), onNext(202, 1) ]); t.end(); }); RxJS-4.1.0/src/modular/test/generateabsolute.js000066400000000000000000000103461266736161100214570ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ generateAbsolute: require('../observable/generateabsolute') }); test('Observable.generateAbsolute absolute time finite', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateAbsolute(0, function (x) { return x <= 3; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return new Date(scheduler.now() + x + 1); }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(202, 0), onNext(204, 1), onNext(207, 2), onNext(211, 3), onCompleted(211) ]); t.end(); }); test('Observable.generateAbsolute absolute time throw condition', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateAbsolute(0, function () { throw error; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return new Date(scheduler.now() + x + 1); }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generateAbsolute absolute time throw result selector', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateAbsolute(0, function () { return true; }, function (x) { return x + 1; }, function () { throw error; }, function (x) { return new Date(scheduler.now() + x + 1); }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generateAbsolute absolute time throw iterate', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateAbsolute(0, function () { return true; }, function () { throw error; }, function (x) { return x; }, function (x) { return new Date(scheduler.now() + x + 1); }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(202, 0), onError(202, error) ]); t.end(); }); test('Observable.generateAbsolute absolute time throw time selector', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateAbsolute(0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }, function () { throw error; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generateAbsolute absolute time dispose', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateAbsolute(0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return new Date(scheduler.now() + x + 1); }, scheduler); }, { disposed: 210 }); reactiveAssert(t, results.messages, [ onNext(202, 0), onNext(204, 1), onNext(207, 2) ]); t.end(); }); test('generateWithAbsoluteTime resultSelection', function(t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function() { return Observable.generateAbsolute(0, function(x) { return x < 3; }, function(x) { return x + 1; }, function(x) { return 2 * x + 1; }, function(x) { return 10 * x; }, scheduler); }); reactiveAssert(t, results.messages, [onNext(202, 1), onNext(212, 3), onNext(232, 5), onCompleted(232)] ); t.end(); }); RxJS-4.1.0/src/modular/test/generaterelative.js000066400000000000000000000077461266736161100214660ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ generateRelative: require('../observable/generaterelative') }); test('Observable.generateRelative finite', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateRelative(0, function (x) { return x <= 3; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return x + 1; }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(202, 0), onNext(204, 1), onNext(207, 2), onNext(211, 3), onCompleted(211) ]); t.end(); }); test('Observable.generateRelative throw condition', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateRelative(0, function () { throw error; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return x + 1; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generateRelative throw result selector', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateRelative(0, function () { return true; }, function (x) { return x + 1; }, function () { throw error; }, function (x) { return x + 1; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generateRelative throw iterate', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateRelative(0, function () { return true; }, function () { throw error; }, function (x) { return x; }, function (x) { return x + 1; }, scheduler); }); reactiveAssert(t, results.messages, [ onNext(202, 0), onError(202, error) ]); t.end(); }); test('Observable.generateRelative throw time selector', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateRelative(0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }, function () { throw error; }, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.generateRelative dispose', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.generateRelative(0, function () { return true; }, function (x) { return x + 1; }, function (x) { return x; }, function (x) { return x + 1; }, scheduler); }, { disposed: 210 }); reactiveAssert(t, results.messages, [ onNext(202, 0), onNext(204, 1), onNext(207, 2) ]); t.end(); }); test('generaterelative resultSelection', function(t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function() { return Observable.generateRelative(0, function(x) { return x < 3; }, function(x) { return x + 1; }, function(x) { return 2 * x + 1; }, function(x) { return 10 * x; }, scheduler); }); reactiveAssert(t, results.messages, [onNext(202, 1), onNext(212, 3), onNext(232, 5), onCompleted(232)] ); t.end(); }); RxJS-4.1.0/src/modular/test/groupjoin.js000066400000000000000000000743641266736161100201540ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ groupJoin: require('../observable/groupjoin'), map: require('../observable/map'), mergeAll: require('../observable/mergeall') }); function TimeInterval(value, interval) { this.value = value; this.interval = interval; } function newTimer(l, t, scheduler) { var timer = scheduler.createColdObservable(onNext(t, 0), onCompleted(t)); l.push(timer); return timer; } test('groupJoin normal I', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 280)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var xsd = []; var ysd = []; var results = scheduler.startScheduler(function (){ return xs.groupJoin( ys, function (x) { return newTimer(xsd, x.interval, scheduler); }, function (y) { return newTimer(ysd, y.interval, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }) .mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onNext(830, '9rat'), onCompleted(990) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 990) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 990) ]); t.end(); }); test('groupJoin normal II', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 200)), onNext(720, new TimeInterval(8, 100)), onCompleted(721) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', (20))), onNext(217, new TimeInterval('bat', (1))), onNext(290, new TimeInterval('wag', (200))), onNext(300, new TimeInterval('pig', (10))), onNext(305, new TimeInterval('cup', (50))), onNext(600, new TimeInterval('yak', (90))), onNext(702, new TimeInterval('tin', (20))), onNext(712, new TimeInterval('man', (10))), onNext(722, new TimeInterval('rat', (200))), onNext(732, new TimeInterval('wig', (5))), onCompleted(990) ); var xsd = []; var ysd = []; var results = scheduler.startScheduler(function (){ return xs.groupJoin( ys, function (x) { return newTimer(xsd, x.interval, scheduler); }, function (y) { return newTimer(ysd, y.interval, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }) .mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(910) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 910) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 910) ]); t.end(); }); test('groupJoin normal III', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 280)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800)); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler).filter(function () { return false; }); }, function (y) { return Observable.timer(y.interval, null, scheduler).filter(function () { return false; }); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onNext(830, '9rat'), onCompleted(990) ]); t.end(); }); test('groupJoin normal IV', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 200)), onNext(720, new TimeInterval(8, 100)), onCompleted(990)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(980)); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(990) ]); t.end(); }); test('groupJoin normal V', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 200)), onNext(720, new TimeInterval(8, 100)), onCompleted(990)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(990) ]); t.end(); }); test('groupJoin normal VI', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 30)), onNext(720, new TimeInterval(8, 200)), onNext(830, new TimeInterval(9, 10)), onCompleted(850)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 20)), onNext(732, new TimeInterval('wig', 5)), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(920) ]); t.end(); }); test('groupJoin normal VII', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(210)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 20)), onNext(732, new TimeInterval('wig', 5)), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('groupJoin normal VIII', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 200)) ); var ys = scheduler.createHotObservable( onNext(220, new TimeInterval('hat', 100)), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(220, '0hat') ]); t.end(); }); test('groupJoin normal IX', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }, { disposed: 713 }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man') ]); t.end(); }); test('groupJoin Error I', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onError(310, error) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onError(310, error) ]); t.end(); }); test('groupJoin Error II', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onError(722, error) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onError(722, error) ]); t.end(); }); test('groupJoin Error III', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800)); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler).flatMap(x.value === 6 ? Observable['throw'](error) : Observable.empty()); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onError(725, error) ]); t.end(); }); test('groupJoin Error IV', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 19)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler).flatMap(y.value === 'tin' ? Observable['throw'](error) : Observable.empty()); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onError(721, error) ]); t.end(); }); test('groupJoin Error V', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { if (x.value >= 0) { throw error; } return Observable.empty(); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('groupJoin Error VI', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { if (y.value.length >= 0) { throw error; } return Observable.empty(); }, function (x, yy) { return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onError(215, error) ]); t.end(); }); test('groupJoin Error VII', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(215, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(210, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { if (x.value >= 0) { throw error; } return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onError(215, error) ]); t.end(); }); test('groupJoin Error VIII', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.groupJoin(ys, function (x) { return Observable.timer(x.interval, null, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler); }, function (x, yy) { if (x.value >= 0) { throw error; } return yy.map(function (y) { return x.value + y.value; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/historicalscheduler.js000066400000000000000000000206101266736161100221610ustar00rootroot00000000000000'use strict'; var test = require('tape'); var HistoricalScheduler = require('../scheduler/historicalscheduler'); var reactiveAssert = require('../testing/reactiveassert'); function time(days) { var d = new Date(1979,10,31,4,30,15); d.setUTCDate(d.getDate() + days); return d.getTime(); } function fromDays(days) { return 86400000 * days; } function Timestamped (value, timestamp) { this.value = value; this.timestamp = timestamp; } Timestamped.prototype.equals = function (other) { if (other == null) { return false; } return other.value === this.value && other.timestamp === this.timestamp; }; test('HistoricalScheduler constructor', function (t) { var s = new HistoricalScheduler(); t.equal(0, s.clock); t.equal(false, s.isEnabled); t.end(); }); test('HistoricalScheduler start and stop', function (t) { var s = new HistoricalScheduler(); var list = []; s.scheduleAbsolute(null, time(0), function () { list.push(new Timestamped(1, s.now())); }); s.scheduleAbsolute(null, time(1), function () { list.push(new Timestamped(2, s.now())); }); s.scheduleAbsolute(null, time(2), function () { s.stop(); }); s.scheduleAbsolute(null, time(3), function () { list.push(new Timestamped(3, s.now())); }); s.scheduleAbsolute(null, time(4), function () { s.stop(); }); s.scheduleAbsolute(null, time(5), function () { s.start(); }); s.scheduleAbsolute(null, time(6), function () { list.push(new Timestamped(4, s.now())); }); s.start(); t.equal(time(2), s.now()); t.equal(time(2), s.clock); s.start(); t.equal(time(4), s.now()); t.equal(time(4), s.clock); s.start(); t.equal(time(6), s.now()); t.equal(time(6), s.clock); s.start(); t.equal(time(6), s.now()); t.equal(time(6), s.clock); reactiveAssert(t, list, [ new Timestamped(1, time(0)), new Timestamped(2, time(1)), new Timestamped(3, time(3)), new Timestamped(4, time(6)) ]); t.end(); }); test('HistoricalScheduler order', function (t) { var s = new HistoricalScheduler(); var list = []; s.scheduleAbsolute(null, time(2), function () { list.push(new Timestamped(2, s.now())); }); s.scheduleAbsolute(null, time(3), function () { list.push(new Timestamped(3, s.now())); }); s.scheduleAbsolute(null, time(1), function () { list.push(new Timestamped(0, s.now())); }); s.scheduleAbsolute(null, time(1), function () { list.push(new Timestamped(1, s.now())); }); s.start(); reactiveAssert(t, list, [ new Timestamped(0, time(1)), new Timestamped(1, time(1)), new Timestamped(2, time(2)), new Timestamped(3, time(3)) ]); t.end(); }); test('HistoricalScheduler cancellation', function (t) { var s = new HistoricalScheduler(); var list = []; var d = s.scheduleAbsolute(null, time(2), function () { list.push(new Timestamped(2, s.now())); }); s.scheduleAbsolute(null, time(1), function () { list.push(new Timestamped(0, s.now())); d.dispose(); }); s.start(); reactiveAssert(t, list, [ new Timestamped(0, time(1)) ]); t.end(); }); test('HistoricalScheduler advance to', function (t) { var s = new HistoricalScheduler(); var list = []; s.scheduleAbsolute(null, time(0), function () { list.push(new Timestamped(0, s.now())); }); s.scheduleAbsolute(null, time(1), function () { list.push(new Timestamped(1, s.now())); }); s.scheduleAbsolute(null, time(2), function () { list.push(new Timestamped(2, s.now())); }); s.scheduleAbsolute(null, time(10), function () { list.push(new Timestamped(10, s.now())); }); s.scheduleAbsolute(null, time(11), function () { list.push(new Timestamped(11, s.now())); }); s.advanceTo(time(8)); t.equal(time(8), s.now()); t.equal(time(8), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)) ]); s.advanceTo(time(8)); t.equal(time(8), s.now()); t.equal(time(8), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)) ]); s.scheduleAbsolute(null, time(7), function () { list.push(new Timestamped(7, s.now())); }); s.scheduleAbsolute(null, time(8), function () { list.push(new Timestamped(8, s.now())); }); t.equal(time(8), s.now()); t.equal(time(8), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)) ]); s.advanceTo(time(10)); t.equal(time(10), s.now()); t.equal(time(10), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)), new Timestamped(7, time(8)), new Timestamped(8, time(8)), new Timestamped(10, time(10)) ]); s.advanceTo(time(100)); t.equal(time(100), s.now()); t.equal(time(100), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)), new Timestamped(7, time(8)), new Timestamped(8, time(8)), new Timestamped(10, time(10)), new Timestamped(11, time(11)) ]); t.end(); }); test('HistoricalScheduler advance by', function (t) { var s = new HistoricalScheduler(); var list = []; s.scheduleAbsolute(null, time(0), function () { list.push(new Timestamped(0, s.now())); }); s.scheduleAbsolute(null, time(1), function () { list.push(new Timestamped(1, s.now())); }); s.scheduleAbsolute(null, time(2), function () { list.push(new Timestamped(2, s.now())); }); s.scheduleAbsolute(null, time(10), function () { list.push(new Timestamped(10, s.now())); }); s.scheduleAbsolute(null, time(11), function () { list.push(new Timestamped(11, s.now())); }); s.advanceBy(time(8) - s.now()); t.equal(time(8), s.now()); t.equal(time(8), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)) ]); s.scheduleAbsolute(null, time(7), function () { list.push(new Timestamped(7, s.now())); }); s.scheduleAbsolute(null, time(8), function () { list.push(new Timestamped(8, s.now())); }); t.equal(time(8), s.now()); t.equal(time(8), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)) ]); s.advanceBy(0); t.equal(time(8), s.now()); t.equal(time(8), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)) ]); s.advanceBy(fromDays(2)); t.equal(time(10), s.now()); t.equal(time(10), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)), new Timestamped(7, time(8)), new Timestamped(8, time(8)), new Timestamped(10, time(10)) ]); s.advanceBy(fromDays(90)); t.equal(time(100), s.now()); t.equal(time(100), s.clock); reactiveAssert(t, list, [ new Timestamped(0, time(0)), new Timestamped(1, time(1)), new Timestamped(2, time(2)), new Timestamped(7, time(8)), new Timestamped(8, time(8)), new Timestamped(10, time(10)), new Timestamped(11, time(11)) ]); t.end(); }); test('HistoricalScheduler is enabled', function (t) { var s = new HistoricalScheduler(); t.equal(false, s.isEnabled); s.schedule(s, function (s) { t.equal(true, s.isEnabled); s.stop(); t.equal(false, s.isEnabled); }); t.equal(false, s.isEnabled); s.start(); t.equal(false, s.isEnabled); t.end(); }); test('HistoricalScheduler Sleep 1', function (t) { var now = new Date(1983, 2, 11, 12, 0, 0).getTime(); var s = new HistoricalScheduler(now); s.sleep(fromDays(1)); t.equal(now + fromDays(1), s.clock); t.end(); }); test('HistoricalScheduler sleep 2', function (t) { var s = new HistoricalScheduler(); var n = 0; s.scheduleRecursiveFuture(null, new Date(s.now() + 6000), function (_, rec) { s.sleep(3 * 6000); n++; rec(null, new Date(s.now() + 6000)); }); s.advanceTo(s.now() + (5 * 6000)); t.equal(2, n); t.end(); }); function reverseComparer (x, y) { return y - x; } test('HistoricalScheduler with comparer', function (t) { var now = new Date(); var s = new HistoricalScheduler(now, reverseComparer); var list = []; s.scheduleAbsolute(null, now - 1000, function () { list.push(1); }); s.scheduleAbsolute(null, now - 2000, function () { list.push(2); }); s.start(); reactiveAssert(t, list, [ 1, 2 ]); t.end(); }); RxJS-4.1.0/src/modular/test/ignoreelements.js000066400000000000000000000043261266736161100211470ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ ignoreElements: require('../observable/ignoreelements') }); test('Observable#ignoreElements basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9)); var results = scheduler.startScheduler(function () { return xs.ignoreElements(); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#ignoreElements Completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(610)); var results = scheduler.startScheduler(function () { return xs.ignoreElements(); }); reactiveAssert(t, results.messages, [ onCompleted(610) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 610) ]); t.end(); }); test('Observable#ignoreElements Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(610, error) ); var results = scheduler.startScheduler(function () { return xs.ignoreElements(); }); reactiveAssert(t, results.messages, [ onError(610, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 610) ]); t.end(); }); RxJS-4.1.0/src/modular/test/includes.js000066400000000000000000000155371266736161100177430ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ includes: require('../observable/includes') }); test('Observable#includes empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(42); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#includes return positive', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(2); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); test('Observable#includes return negative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(-2); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#includes some positive', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(3); }); reactiveAssert(t, results.messages, [ onNext(220, true), onCompleted(220) ]); t.end(); }); test('Observable#includes some negative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(-3); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#includes throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.includes(42); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#includes never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.includes(42); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#includes fromIndex less than zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.includes(42, -1); }); reactiveAssert(t, results.messages, [ onNext(200, false), onCompleted(200) ]); t.end(); }); test('Observable#includes fromIndex Infinity', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(2, Infinity); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); test('Observable#includes fromIndex zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(2, 0); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); test('Observable#includes fromIndex greater than zero misses', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(2, 1); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#includes fromIndex greater than zero no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ); var results = scheduler.startScheduler(function () { return xs.includes(2, 1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#includes fromIndex greater than zero hits', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(3, 1); }); reactiveAssert(t, results.messages, [ onNext(220, true), onCompleted(220) ]); t.end(); }); test('Observable#includes -0 equals 0', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -0), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(0); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); test('Observable#includes +0 equals 0', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, +0), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(0); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); test('Observable#includes NaN equals NaN', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, NaN), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.includes(NaN); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); RxJS-4.1.0/src/modular/test/indexof.js000066400000000000000000000146041266736161100175630ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ indexOf: require('../observable/indexof') }); test('Observable#indexOf empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(42); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#indexOf return positive', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(2); }); reactiveAssert(t, results.messages, [ onNext(210, 0), onCompleted(210) ]); t.end(); }); test('Observable#indexOf return negative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(-2); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#indexOf some positive', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(3); }); reactiveAssert(t, results.messages, [ onNext(220, 1), onCompleted(220) ]); t.end(); }); test('Observable#indexOf some negative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(-3); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#indexOf throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.indexOf(42); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#indexOf never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.indexOf(42); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#indexOf fromIndex less than zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.indexOf(42, -1); }); reactiveAssert(t, results.messages, [ onNext(200, -1), onCompleted(200) ]); t.end(); }); test('Observable#indexOf fromIndex Infinity', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(2, Infinity); }); reactiveAssert(t, results.messages, [ onNext(210, 0), onCompleted(210) ]); t.end(); }); test('Observable#indexOf fromIndex zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(2, 0); }); reactiveAssert(t, results.messages, [ onNext(210, 0), onCompleted(210) ]); t.end(); }); test('Observable#indexOf fromIndex greater than zero misses', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(2, 1); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#indexOf fromIndex greater than zero no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ); var results = scheduler.startScheduler(function () { return xs.indexOf(2, 1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#indexOf fromIndex greater than zero hits', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(3, 1); }); reactiveAssert(t, results.messages, [ onNext(220, 1), onCompleted(220) ]); t.end(); }); test('Observable#indexOf -0 equals 0', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -0), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(0); }); reactiveAssert(t, results.messages, [ onNext(210, 0), onCompleted(210) ]); t.end(); }); test('Observable#indexOf +0 equals 0', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, +0), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.indexOf(0); }); reactiveAssert(t, results.messages, [ onNext(210, 0), onCompleted(210) ]); t.end(); }); RxJS-4.1.0/src/modular/test/interval.js000066400000000000000000000044311266736161100177500ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext; Observable.addToObject({ interval: require('../observable/interval') }); test('Observable.interval relative time basic', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.interval(100, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, 0), onNext(400, 1), onNext(500, 2), onNext(600, 3), onNext(700, 4), onNext(800, 5), onNext(900, 6) ]); t.end(); }); test('Observable.interval relative time zero', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.interval(0, scheduler); }, { disposed: 210 }); reactiveAssert(t, results.messages, [ onNext(201, 0), onNext(202, 1), onNext(203, 2), onNext(204, 3), onNext(205, 4), onNext(206, 5), onNext(207, 6), onNext(208, 7), onNext(209, 8) ]); t.end(); }); test('Observable.interval relative time negative', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.interval(-1, scheduler); }, {disposed: 210 }); reactiveAssert(t, results.messages, [ onNext(201, 0), onNext(202, 1), onNext(203, 2), onNext(204, 3), onNext(205, 4), onNext(206, 5), onNext(207, 6), onNext(208, 7), onNext(209, 8) ]); t.end(); }); test('Observable.interval relative time disposed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.interval(1000, scheduler); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.interval relative time observer throws', function (t) { var scheduler = new TestScheduler(); var xs = Observable.interval(1, scheduler); xs.subscribe(function () { throw new Error(); }); t.throws(function () { return scheduler.start(); }); t.end(); }); RxJS-4.1.0/src/modular/test/isempty.js000066400000000000000000000042441266736161100176200ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ isEmpty: require('../observable/isempty') }); test('Observable#isEmpty empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.isEmpty(); }); reactiveAssert(t, results.messages, [ onNext(250, true), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#isEmpty return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.isEmpty(); }); reactiveAssert(t, results.messages, [ onNext(210, false), onCompleted(210) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#isEmpty throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.isEmpty(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#isEmpty never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1)); var results = scheduler.startScheduler(function () { return xs.isEmpty(); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/isequal.js000066400000000000000000000035671266736161100176000ustar00rootroot00000000000000'use strict'; var test = require('tape'); var isEqual = require('../internal/isequal'); test('isEqual bool equal', function (t) { t.ok(isEqual(true, true)); t.end(); }); test('isEqual bool inequal', function (t) { t.ok(!isEqual(true, false)); t.end(); }); test('isEqual number equal', function (t) { t.ok(isEqual(42, 42)); t.end(); }); test('isEqual number inequal', function (t) { t.ok(!isEqual(42, 0)); t.end(); }); test('isEqual number +0 equal to -0', function (t) { t.ok(isEqual(+0, -0)); t.end(); }); test('isEqual number NaN is equal to NaN', function (t) { t.ok(isEqual(NaN, NaN)); t.end(); }); test('isEqual number Infinity is equal to Infinity', function (t) { t.ok(isEqual(Infinity, Infinity)); t.end(); }); test('isEqual string equal', function (t) { t.ok(isEqual('foo', 'foo')); t.end(); }); test('isEqual string inequal', function (t) { t.ok(!isEqual('foo', 'bar')); t.end(); }); test('isEqual array equal', function (t) { t.ok(isEqual([1,2,3], [1,2,3])); t.end(); }); test('isEqual array inequal', function (t) { t.ok(!isEqual([1,2,3], ['foo', 'bar'])); t.end(); }); test('isEqual object equal', function (t) { t.ok(isEqual({foo: 'bar'}, {foo: 'bar'})); t.end(); }); test('isEqual object inequal', function (t) { t.ok(!isEqual({foo: 'bar'}, {foo: 'baz'})); t.end(); }); test('isEqual complex object equal', function (t) { t.ok(isEqual({foo: 'bar', baz: [1,2,3]}, {foo: 'bar', baz: [1,2,3]})); t.end(); }); test('isEqual complex object inequal', function (t) { t.ok(!isEqual({foo: 'bar', baz: [1,2,3]}, {foo: 'bar', baz: [4,5,6]})); t.end(); }); test('isEqual new object equal', function (t) { function Foo () { } t.ok(isEqual(new Foo(), new Foo())); t.end(); }); test('isEqual new object inequal', function (t) { function Foo () { } function Bar () { } t.ok(!isEqual(new Foo(), new Bar())); t.end(); }); RxJS-4.1.0/src/modular/test/join.js000066400000000000000000000660341266736161100170720ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ timer: require('../observable/timer') }); Observable.addToPrototype({ join: require('../observable/join') }); function TimeInterval(value, interval) { this.value = value; this.interval = interval; } test('join normal I', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onNext(830, '9rat'), onCompleted(900) ]); t.end(); }); test('join normal II', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 200)), onNext(720, new TimeInterval(8, 100)), onCompleted(721) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(990) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(910) ]); t.end(); }); test('join normal III', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800)); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, null, scheduler).filter(function () { return false; }); }, function (y) { return Observable.timer(y.interval, null, scheduler).filter(function () { return false; }); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onNext(830, '9rat'), onCompleted(900) ]); t.end(); }); test('join normal IV', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 200)), onNext(720, new TimeInterval(8, 100)), onCompleted(990) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(980) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(980) ]); t.end(); }); test('join normal V', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 200)), onNext(720, new TimeInterval(8, 100)), onCompleted(990)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(922) ]); t.end(); }); test('join normal VI', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 30)), onNext(720, new TimeInterval(8, 200)), onNext(830, new TimeInterval(9, 10)), onCompleted(850)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 20)), onNext(732, new TimeInterval('wig', 5)), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onNext(732, '7wig'), onNext(732, '8wig'), onCompleted(900) ]); t.end(); }); test('join normal VII', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }, { disposed: 713 }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man') ]); t.end(); }); test('join error I', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onError(310, error) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }, { disposed: 713 }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onError(310, error) ]); t.end(); }); test('join error II', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900)); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onError(722, error)); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onError(722, error) ]); t.end(); }); test('join error III', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, null, scheduler) .flatMap(x.value === 6 ? Observable['throw'](error) : Observable.empty()); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onNext(722, '6rat'), onNext(722, '7rat'), onNext(722, '8rat'), onError(725, error) ]); t.end(); }); test('join error IV', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 19)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, null, scheduler) .flatMap(y.value === 'tin' ? Observable['throw'](error) : Observable.empty()); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onNext(215, '0hat'), onNext(217, '0bat'), onNext(219, '1hat'), onNext(300, '3wag'), onNext(300, '3pig'), onNext(305, '3cup'), onNext(310, '4wag'), onNext(310, '4pig'), onNext(310, '4cup'), onNext(702, '6tin'), onNext(710, '7tin'), onNext(712, '6man'), onNext(712, '7man'), onNext(720, '8tin'), onNext(720, '8man'), onError(721, error) ]); t.end(); }); test('join error V', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { if (x.value >= 0) { throw error; } return Observable.empty(); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('join error VI', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { if (y.value.length >= 0) { throw error; } return Observable.empty(); }, function (x, y) { return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onError(215, error) ]); t.end(); }); test('join error VII', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { if (x.value >= 0) { throw error; } return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onError(215, error) ]); t.end(); }); test('join error VIII', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, new TimeInterval(0, 10)), onNext(219, new TimeInterval(1, 5)), onNext(240, new TimeInterval(2, 10)), onNext(300, new TimeInterval(3, 100)), onNext(310, new TimeInterval(4, 80)), onNext(500, new TimeInterval(5, 90)), onNext(700, new TimeInterval(6, 25)), onNext(710, new TimeInterval(7, 300)), onNext(720, new TimeInterval(8, 100)), onNext(830, new TimeInterval(9, 10)), onCompleted(900) ); var ys = scheduler.createHotObservable( onNext(215, new TimeInterval('hat', 20)), onNext(217, new TimeInterval('bat', 1)), onNext(290, new TimeInterval('wag', 200)), onNext(300, new TimeInterval('pig', 10)), onNext(305, new TimeInterval('cup', 50)), onNext(600, new TimeInterval('yak', 90)), onNext(702, new TimeInterval('tin', 20)), onNext(712, new TimeInterval('man', 10)), onNext(722, new TimeInterval('rat', 200)), onNext(732, new TimeInterval('wig', 5)), onCompleted(800) ); var results = scheduler.startScheduler(function () { return xs.join(ys, function (x) { return Observable.timer(x.interval, scheduler); }, function (y) { return Observable.timer(y.interval, scheduler); }, function (x, y) { if (x.value >= 0) { throw error; } return x.value + y.value; }); }); reactiveAssert(t, results.messages, [ onError(215, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/just.js000066400000000000000000000040701266736161100171100ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var SerialDisposable = require('../serialdisposable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ just: require('../observable/just') }); test('Observable.just basic', function (t) { var scheduler = new TestScheduler(); var res = scheduler.startScheduler(function () { return Observable.just(42, scheduler); }); reactiveAssert(t, res.messages, [ onNext(201, 42), onCompleted(201) ]); t.end(); }); test('Observable.just disposed', function (t) { var scheduler = new TestScheduler(); var res = scheduler.startScheduler(function () { return Observable.just(42, scheduler); }, { disposed: 200 }); reactiveAssert(t, res.messages, []); t.end(); }); test('Observable.just disposed after next', function (t) { var scheduler = new TestScheduler(); var d = new SerialDisposable(); var xs = Observable.just(42, scheduler); var res = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { d.setDisposable(xs.subscribe( function (x) { d.dispose(); res.onNext(x); }, function (e) { res.onError(e); }, function () { res.onCompleted(); } )); }); scheduler.start(); reactiveAssert(t, res.messages, [ onNext(101, 42) ]); t.end(); }); function noop () { } test('Observable.just Observer throws', function (t) { var scheduler1 = new TestScheduler(); var xs = Observable.just(1, scheduler1); xs.subscribe(function () { throw new Error(); }); t.throws(function () { scheduler1.start(); }); var scheduler2 = new TestScheduler(); var ys = Observable.just(1, scheduler2); ys.subscribe(noop, noop, function () { throw new Error(); }); t.throws(function () { scheduler2.start(); }); t.end(); }); RxJS-4.1.0/src/modular/test/last.js000066400000000000000000000166101266736161100170710ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var EmptyError = require('../internal/errors').EmptyError; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ last: require('../observable/last') }); test('Observable#last empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last default value', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last({defaultValue: 42}); }); reactiveAssert(t, results.messages, [ onNext(250, 42), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last one', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last many', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last error', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, ex) ); var results = scheduler.startScheduler(function () { return xs.last(); }); reactiveAssert(t, results.messages, [ onError(210, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#last predicate', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(function (x) { return x % 2 === 1; }); }); reactiveAssert(t, results.messages, [ onNext(250, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last obj predicate', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last({ predicate: function (x) { return x % 2 === 1; } }); }); reactiveAssert(t, results.messages, [ onNext(250, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last predicate thisArg', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(function (x) { t.equal(this, 42); return x % 2 === 1; }, 42); }); reactiveAssert(t, results.messages, [ onNext(250, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last obj predicate', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last({ predicate: function (x) { t.equal(this, 42); return x % 2 === 1; }, thisArg: 42 }); }); reactiveAssert(t, results.messages, [ onNext(250, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last predicate None', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(function (x) { return x > 10; }); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last obj predicate none default', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last({ predicate: function (x) { return x > 10; }, defaultValue: 42 }); }); reactiveAssert(t, results.messages, [ onNext(250, 42), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#last predicate throw', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, ex) ); var results = scheduler.startScheduler(function () { return xs.last(function (x) { return x % 2 === 1; }); }); reactiveAssert(t, results.messages, [ onError(210, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#last predicate throws', function (t) { var ex = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.last(function (x) { if (x < 4) { return x % 2 === 1; } throw ex; }); }); reactiveAssert(t, results.messages, [ onError(230, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); RxJS-4.1.0/src/modular/test/lastindexof.js000066400000000000000000000166761266736161100204620ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ lastIndexOf: require('../observable/lastindexof') }); test('Observable#lastIndexOf empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(42); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf return positive', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf return negative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(-2); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf some positive', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(3); }); reactiveAssert(t, results.messages, [ onNext(250, 1), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf some negative', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(-3); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(42); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#lastIndexOf never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(42); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#lastIndexOf fromIndex less than zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(42, -1); }); reactiveAssert(t, results.messages, [ onNext(200, -1), onCompleted(200) ]); t.end(); }); test('Observable#lastIndexOf fromIndex Infinity', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2, Infinity); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf fromIndex zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2, 0); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf fromIndex greater than zero misses', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2, 1); }); reactiveAssert(t, results.messages, [ onNext(250, -1), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf fromIndex greater than zero no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2, 1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#lastIndexOf fromIndex greater than zero hits', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(3, 1); }); reactiveAssert(t, results.messages, [ onNext(250, 1), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf -0 equals 0', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -0), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(0); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf +0 equals 0', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, +0), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(0); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf hits the last without end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 2), onNext(240, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); test('Observable#lastIndexOf hits the last with end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 2), onNext(240, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.lastIndexOf(2, 2); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); RxJS-4.1.0/src/modular/test/map.js000066400000000000000000000203701266736161100167010ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var SerialDisposable = require('../serialdisposable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe, disposed = ReactiveTest.disposed; Observable.addToPrototype({ map: require('../observable/map') }); // Function shortcuts function noop () { } function identity (x) { return x; } function throwError () { throw new Error(); } test('Observable#map throws', function (t) { t.throws(function () { Observable.just(1) .map(identity) .subscribe(throwError); }); t.throws(function () { Observable.throwError(new Error()) .map(function (x) { return x; }) .subscribe(noop, throwError); }); t.throws(function () { Observable.empty() .map(function (x) { return x; }) .subscribe(noop, noop, throwError); }); t.throws(function () { Observable.create(throwError) .map(identity) .subscribe(); }); t.end(); }); test('Observable#map with index dispose inside selector', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 4), onNext(200, 3), onNext(500, 2), onNext(600, 1) ); var invoked = 0; var results = scheduler.createObserver(); var d = new SerialDisposable(); d.setDisposable( xs.map(function(x, index) { invoked++; scheduler.clock > 400 && d.dispose(); return x + index * 10; }) .subscribe(results) ); scheduler.scheduleAbsolute(null, disposed, function () { d.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(100, 4), onNext(200, 13) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(0, 500) ]); t.equal(3, invoked); t.end(); }); test('Observable#map with index Completed', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(400), onNext(410, -1), onCompleted(420), onError(430, new Error()) ); var results = scheduler.startScheduler(function () { return xs.map(function (x, index) { invoked++; return (x + 1) + (index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(210, 5), onNext(240, 14), onNext(290, 23), onNext(350, 32), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.equal(4, invoked); t.end(); }); test('Observable#map with index not completed', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1) ); var results = scheduler.startScheduler(function () { return xs.map(function (x, index) { invoked++; return (x + 1) + (index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(210, 5), onNext(240, 14), onNext(290, 23), onNext(350, 32) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.equal(4, invoked); t.end(); }); test('Observable#map with index error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var invoked = 0; var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onError(400, error), onNext(410, -1), onCompleted(420), onError(430, new Error()) ); var results = scheduler.startScheduler(function () { return xs.map(function (x, index) { invoked++; return (x + 1) + (index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(210, 5), onNext(240, 14), onNext(290, 23), onNext(350, 32), onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.equal(4, invoked); t.end(); }); test('Observable#map selector throws', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var error = new Error(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(400), onNext(410, -1), onCompleted(420), onError(430, new Error()) ); var results = scheduler.startScheduler(function () { return xs.map(function (x, index) { invoked++; if (invoked === 3) { throw error; } return (x + 1) + (index * 10); }); }); reactiveAssert(t, results.messages, [ onNext(210, 5), onNext(240, 14), onError(290, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 290) ]); t.equal(3, invoked); t.end(); }); test('Observable#map value', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.map(-1); }); reactiveAssert(t, results.messages, [ onNext(210, -1), onNext(220, -1), onNext(230, -1), onNext(240, -1), onCompleted(250) ]); t.end(); }); test('Observable#map thisArg', function (t) { var scheduler = new TestScheduler(); var invoked = 0; var foo = 42; var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(400), onNext(410, -1), onCompleted(420), onError(430, new Error()) ); var results = scheduler.startScheduler(function () { return xs.map(function (x, index) { invoked++; t.equal(this, foo); return (x + 1) + (index * 10); }, 42); }); reactiveAssert(t, results.messages, [ onNext(210, 5), onNext(240, 14), onNext(290, 23), onNext(350, 32), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.equal(4, invoked); t.end(); }); test('Observable#map and map Optimization', function (t) { var scheduler = new TestScheduler(); var invoked1 = 0; var invoked2 = 0; var xs = scheduler.createHotObservable( onNext(110, 1), onNext(180, 2), onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600), onNext(610, 12), onError(620, new Error()), onCompleted(630) ); var results = scheduler.startScheduler(function () { return xs .map(function(x) { invoked1++; return x * 2; }) .map(function(x) { invoked2++; return x / 2; }); }); reactiveAssert(t, results.messages, [ onNext(230, 3), onNext(270, 4), onNext(340, 5), onNext(380, 6), onNext(390, 7), onNext(450, 8), onNext(470, 9), onNext(560, 10), onNext(580, 11), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(9, invoked1); t.equal(9, invoked2); t.end(); }); test('Observable#map and map thisArg', function(t) { var scheduler = new TestScheduler(); function Filterer() { this.selector1 = function(item) { return item + 2; }; this.selector2 = function(item) { return item * 3; }; } var filterer = new Filterer(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onNext(30, 3), onNext(40, 4), onCompleted(100) ); var results = scheduler.startScheduler(function() { return xs .map(function(x){ return this.selector1(x);}, filterer) .map(function(x){ return this.selector2(x);}, filterer) .map(function(x){ return this.selector1(x);}, filterer); }); reactiveAssert(t, results.messages, [ onNext(210, 11), onNext(220, 14), onNext(230, 17), onNext(240, 20), onCompleted(300) ]); t.end(); }); RxJS-4.1.0/src/modular/test/materialize.js000066400000000000000000000073631266736161100204410ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var Notification = require('../notification'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ never: require('../observable/never') }); Observable.addToPrototype({ dematerialize: require('../observable/dematerialize'), materialize: require('../observable/materialize') }); test('Observable#materialize never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.materialize(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#materialize empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.materialize(); }); reactiveAssert(t, results.messages, [ onNext(250, Notification.createOnCompleted()), onCompleted(250) ]); t.end(); }); test('Observable#materialize return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.materialize(); }); reactiveAssert(t, results.messages, [ onNext(210, Notification.createOnNext(2)), onNext(250, Notification.createOnCompleted()), onCompleted(250) ]); t.end(); }); test('Observable#materialize throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.materialize(); }); reactiveAssert(t, results.messages, [ onNext(250, Notification.createOnError(error)), onCompleted(250) ]); t.end(); }); test('Observable#materialize dematerialize never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.materialize().dematerialize(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#materialize dematerialize empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.materialize().dematerialize(); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable#materialize dematerialize return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.materialize().dematerialize(); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('Observable#materialize dematerialize throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error)); var results = scheduler.startScheduler(function () { return xs.materialize().dematerialize(); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/max.js000066400000000000000000000114711266736161100167130ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var EmptyError = require('../internal/errors').EmptyError; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ max: require('../observable/max') }); function reverseComparer(a, b) { return a > b ? -1 : a < b ? 1 : 0; } test('Observable#max number empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.max(); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); t.end(); }); test('Observable#max number Return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.max(); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); test('Observable#max number Some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 3), onNext(220, 4), onNext(230, 2), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.max(); }); reactiveAssert(t, results.messages, [ onNext(250, 4), onCompleted(250) ]); t.end(); }); test('Observable#max number throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error)); var results = scheduler.startScheduler(function () { return xs.max(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#max number Never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.max(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#max comparer empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.max(reverseComparer); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); t.end(); }); test('Observable#max comparer return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onNext(210, 'a'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.max(reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, 'a'), onCompleted(250) ]); t.end(); }); test('Observable#max comparer some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onNext(210, 'b'), onNext(220, 'c'), onNext(230, 'a'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.max(reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, 'a'), onCompleted(250) ]); t.end(); }); test('Observable#max comparer throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onError(210, error)); var results = scheduler.startScheduler(function () { return xs.max(reverseComparer); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#max comparer never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z') ); var results = scheduler.startScheduler(function () { return xs.max(reverseComparer); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#max comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onNext(210, 'b'), onNext(220, 'c'), onNext(230, 'a'), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.max(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/maxby.js000066400000000000000000000155111266736161100172450ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ maxBy: require('../observable/maxby') }); function reverseComparer(a, b) { return a > b ? -1 : a < b ? 1 : 0; } test('Observable#maxBy empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, []), onCompleted(250) ]); t.end(); }); test('Observable#maxBy return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 2, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'a' }]), onCompleted(250) ]); t.end(); }); test('Observable#maxBy some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 4, value: 'c' }), onNext(230, { key: 2, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 4, value: 'c' }]), onCompleted(250) ]); t.end(); }); test('Observable#maxBy multiple', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(215, { key: 2, value: 'd' }), onNext(220, { key: 3, value: 'c' }), onNext(225, { key: 2, value: 'y' }), onNext(230, { key: 4, value: 'a' }), onNext(235, { key: 4, value: 'r' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 4, value: 'a' }, { key: 4, value: 'r' }]), onCompleted(250) ]); t.end(); }); test('Observable#maxBy throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#maxBy never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#maxBy comparer empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, []), onCompleted(250) ]); t.end(); }); test('Observable#maxBy comparer return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 2, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'a' }]), onCompleted(250) ]); t.end(); }); test('Observable#maxBy comparer some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 4, value: 'c' }), onNext(230, { key: 2, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'a' }]), onCompleted(250) ]); t.end(); }); test('Observable#maxBy comparer throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#maxBy comparer never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#maxBy selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 2, value: 'c' }), onNext(230, { key: 4, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function () { throw error; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#maxBy comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 2, value: 'c' }), onNext(230, { key: 4, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.maxBy(function (x) { return x.key; }, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/merge.js000066400000000000000000000232651266736161100172310ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ empty: require('../observable/empty'), merge: require('../observable/merge'), never: require('../observable/never') }); Observable.addToPrototype({ merge: require('../observable/merge'), tap: require('../observable/tap') }); test('merge never 2', function (t) { var scheduler = new TestScheduler(); var n1 = Observable.never(); var n2 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, n1, n2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('merge never 3', function (t) { var scheduler = new TestScheduler(); var n1 = Observable.never(); var n2 = Observable.never(); var n3 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, n1, n2, n3); }); reactiveAssert(t, results.messages, []); t.end(); }); test('merge empty 2', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.empty(); var e2 = Observable.empty(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, e2); }); reactiveAssert(t, results.messages, [ onCompleted(203) ]); t.end(); }); test('merge empty 3', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.empty(); var e2 = Observable.empty(); var e3 = Observable.empty(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, e2, e3); }); reactiveAssert(t, results.messages, [ onCompleted(204) ]); t.end(); }); test('merge empty delayed 2 right last', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(240) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, e2); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('merge empty delayed 2 left last', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(240) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, e2); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('merge empty delayed 3 middle last', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(245) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var e3 = scheduler.createHotObservable( onNext(150, 1), onCompleted(240) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, e2, e3); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('merge empty never ', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(245) ); var n1 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, n1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('merge never empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(245) ); var n1 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, n1, e1); }); reactiveAssert(t, results.messages, []); t.end(); }); test('merge return never', function (t) { var scheduler = new TestScheduler(); var r1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(245) ); var n1 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, r1, n1); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('merge never return', function (t) { var scheduler = new TestScheduler(); var r1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(245) ); var n1 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, n1, r1); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('merge Error never ', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(245, error) ); var n1 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, n1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(245, error) ]); t.end(); }); test('merge never Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(245, error) ); var n1 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, n1, e1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(245, error) ]); t.end(); }); test('merge empty return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(245) ); var r1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, e1, r1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('merge return empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(245) ); var r1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, r1, e1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('merge lots 2', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 4), onNext(230, 6), onNext(240, 8), onCompleted(245) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 3), onNext(225, 5), onNext(235, 7), onNext(245, 9), onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, o1, o2); }).messages; t.equal(9, results.length); for (var i = 0; i < 8; i++) { t.ok(results[i].value.kind === 'N' && results[i].time === 210 + i * 5 && results[i].value.value === i + 2); } t.ok(results[8].value.kind === 'C' && results[8].time === 250); t.end(); }); test('merge lots 3', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(225, 5), onNext(240, 8), onCompleted(245) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 3), onNext(230, 6), onNext(245, 9), onCompleted(250) ); var o3 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 4), onNext(235, 7), onCompleted(240) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, o1, o2, o3); }).messages; t.equal(9, results.length); for (var i = 0; i < 8; i++) { t.ok(results[i].value.kind === 'N' && results[i].time === 210 + i * 5 && results[i].value.value === i + 2); } t.ok(results[8].value.kind === 'C' && results[8].time === 250); t.end(); }); test('merge Error left', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(245, error) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 3), onError(245, error) ]); t.end(); }); test('merge Error causes disposal', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var sourceNotDisposed = false; var o1 = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 1), onCompleted(250)) .tap(function () { return sourceNotDisposed = true; }); var results = scheduler.startScheduler(function () { return Observable.merge(scheduler, o1, o2); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.ok(!sourceNotDisposed); t.end(); }); RxJS-4.1.0/src/modular/test/mergeall.js000066400000000000000000000131311266736161100177110ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ /* globals Promise */ var test = require('tape'); var Observable = require('../observable'); var isEqual = require('../internal/isequal'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ fromArray: require('../observable/fromarray') }); Observable.addToPrototype({ mergeAll: require('../observable/mergeall') }); // Polyfilling require('lie/polyfill'); test('Observable#mergeAll Promise', function (t) { var sources = Observable.fromArray([ Promise.resolve(0), Promise.resolve(1), Promise.resolve(2), Promise.resolve(3), ]); var res = []; sources.mergeAll().subscribe( function (x) { res.push(x); }, function () { t.ok(false); }, function () { t.ok(isEqual([0,1,2,3], res)); t.end(); }); }); test('Observable#mergeAll Promise error', function (t) { var sources = Observable.fromArray([ Promise.resolve(0), Promise.reject(1), Promise.resolve(2), Promise.resolve(3), ]); var res = []; sources.mergeAll().subscribe( function (x) { res.push(x); }, function (err) { t.ok(res.length === 1); t.equal(1, err); t.end(); }); }); test('Observable#mergeAll Observable of Observable data', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230))), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50))), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onNext(120, 305), onCompleted(150))), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 103), onNext(410, 201), onNext(420, 104), onNext(420, 202), onNext(430, 203), onNext(440, 204), onNext(510, 105), onNext(510, 301), onNext(520, 106), onNext(520, 302), onNext(530, 303), onNext(540, 304), onNext(620, 305), onCompleted(650) ]); t.end(); }); test('Observable#mergeAll Observable of Observable data non-overlapped', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onCompleted(230))), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50))), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(50))), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204), onNext(510, 301), onNext(520, 302), onNext(530, 303), onNext(540, 304), onCompleted(600) ]); t.end(); }); test('Observable#mergeAll Observable of Observable inner throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onCompleted(230))), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onError(50, error))), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(50))), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204), onError(450, error) ]); t.end(); }); test('Observable#mergeAll Observable of Observable outer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onCompleted(230))), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50))), onError(500, error)); var results = scheduler.startScheduler(function () { return xs.mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204), onError(500, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/mergeconcat.js000066400000000000000000000167721266736161100204260ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ mergeConcat: require('../observable/mergeconcat') }); test('Observable#mergeConcat basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(200))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onCompleted(130))), onNext(320, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(2); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 6), onNext(440, 7), onNext(460, 8), onNext(670, 9), onNext(700, 10), onCompleted(760) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 760) ]); t.end(); }); test('Observable#mergeConcat basic Long', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(300))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onCompleted(130))), onNext(320, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(2); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 6), onNext(440, 7), onNext(460, 8), onNext(690, 9), onNext(720, 10), onCompleted(780) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 780) ]); t.end(); }); test('Observable#mergeConcat basic Wide', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(300))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onCompleted(130))), onNext(420, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onCompleted(450) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(3); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(280, 6), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 7), onNext(380, 8), onNext(630, 9), onNext(660, 10), onCompleted(720) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 720) ]); t.end(); }); test('Observable#mergeConcat basic late', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(300))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onCompleted(130))), onNext(420, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onCompleted(750) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(3); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(280, 6), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 7), onNext(380, 8), onNext(630, 9), onNext(660, 10), onCompleted(750) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 750) ]); t.end(); }); test('Observable#mergeConcat disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(200))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onCompleted(130))), onNext(320, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(2); }, { disposed: 450 }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 6), onNext(440, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#mergeConcat inner error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(200))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onCompleted(130))), onNext(320, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onError(400, error) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(2); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 6), onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#mergeConcat outer error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, scheduler.createColdObservable(onNext(50, 1), onNext(100, 2), onNext(120, 3), onCompleted(140))), onNext(260, scheduler.createColdObservable(onNext(20, 4), onNext(70, 5), onCompleted(200))), onNext(270, scheduler.createColdObservable(onNext(10, 6), onNext(90, 7), onNext(110, 8), onError(140, error))), onNext(320, scheduler.createColdObservable(onNext(210, 9), onNext(240, 10), onCompleted(300))), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.mergeConcat(2); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(280, 4), onNext(310, 2), onNext(330, 3), onNext(330, 5), onNext(360, 6), onNext(440, 7), onNext(460, 8), onError(490, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 490) ]); t.end(); }); RxJS-4.1.0/src/modular/test/mergedelayerror.js000066400000000000000000000237131266736161100213200ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; var CompositeError = require('../internal/errors').CompositeError; Observable.addToObject({ mergeDelayError: require('../observable/mergedelayerror') }); test('Observable.mergeDelayError never never', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1) ); var o2 = scheduler.createHotObservable( onNext(160, 1) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.mergeDelayError empty right', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onCompleted(260) ]); t.end(); }); test('Observable.mergeDelayError empty left', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(260) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onCompleted(250) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onCompleted(260) ]); t.end(); }); test('Observable.mergeDelayError empty middle', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(260) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onCompleted(250) ); var o3 = scheduler.createHotObservable( onNext(160, 1), onCompleted(270) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2, o3); }); reactiveAssert(t, results.messages, [ onCompleted(270) ]); t.end(); }); test('Observable.mergeDelayError empty never', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(260) ); var o2 = scheduler.createHotObservable( onNext(160, 1) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.mergeDelayError never empty', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.mergeDelayError return never', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var o2 = scheduler.createHotObservable( onNext(160, 1) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('Observable.mergeDelayError never return', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var o2 = scheduler.createHotObservable( onNext(160, 1) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o2, o1); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('Observable.mergeDelayError error never', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error) // error dropped ); var o2 = scheduler.createHotObservable( onNext(160, 1) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('Observable.mergeDelayError never error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error) // error dropped ); var o2 = scheduler.createHotObservable( onNext(160, 1) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o2, o1); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('Observable.mergeDelayError error empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(260, error) ]); t.end(); }); test('Observable.mergeDelayError empty error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o2, o1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(260, error) ]); t.end(); }); test('Observable.mergeDelayError no errors', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onNext(215, 2), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 2), onCompleted(260) ]); t.end(); }); test('Observable.mergeDelayError error error', function (t) { var error1 = new Error(); var error2 = new Error(); var composite = new CompositeError([error1, error2]); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error1) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onNext(215, 2), onError(260, error2) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o2, o1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 2), onError(260, composite) ]); t.end(); }); test('Observable.mergeDelayError error left', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error), onNext(270, 3), onCompleted(280) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onNext(215, 2), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 2), onError(260, error) ]); t.end(); }); test('Observable.mergeDelayError error right', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(250, error), onNext(270, 3), onCompleted(280) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onNext(215, 2), onCompleted(260) ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o2, o1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 2), onError(260, error) ]); t.end(); }); test('Observable.mergeDelayError infinite left error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onNext(215, 2), onNext(225, 3), onError(260, error) // Error dropped ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 2), onNext(220, 3), onNext(225, 3), onNext(230, 4) ]); t.end(); }); test('Observable.mergeDelayError infinite right error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4) ); var o2 = scheduler.createHotObservable( onNext(160, 1), onNext(215, 2), onNext(225, 3), onError(260, error) // Error dropped ); var results = scheduler.startScheduler(function() { return Observable.mergeDelayError(o2, o1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(215, 2), onNext(220, 3), onNext(225, 3), onNext(230, 4) ]); t.end(); }); RxJS-4.1.0/src/modular/test/min.js000066400000000000000000000106351266736161100167120ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var EmptyError = require('../internal/errors').EmptyError; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ min: require('../observable/min') }); function reverseComparer(a, b) { return a > b ? -1 : a < b ? 1 : 0; } test('Observable#min empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.min(); }); reactiveAssert(t, results.messages, [ onNext(250, function (n) { return n.error instanceof EmptyError; }) ]); t.end(); }); test('Observable#min return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.min(); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); test('Observable#min some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.min(); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); test('Observable#min throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.min(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#min never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1)); var results = scheduler.startScheduler(function () { return xs.min(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#min with comparer empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'a'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.min(reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, function (n) { return n.error instanceof EmptyError; }) ]); t.end(); }); test('Observable#min with comparer non-empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onNext(210, 'b'), onNext(220, 'c'), onNext(230, 'a'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.min(reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, 'c'), onCompleted(250) ]); t.end(); }); test('Observable#min with comparer throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.min(reverseComparer); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#min with comparer never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z') ); var results = scheduler.startScheduler(function () { return xs.min(reverseComparer); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#min with comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 'z'), onNext(210, 'b'), onNext(220, 'c'), onNext(230, 'a'), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.min(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/minby.js000066400000000000000000000155131266736161100172450ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ minBy: require('../observable/minby') }); function reverseComparer(a, b) { return a > b ? -1 : a < b ? 1 : 0; } test('Observable#minBy empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, []), onCompleted(250) ]); t.end(); }); test('Observable#minBy return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 2, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'a' }]), onCompleted(250) ]); t.end(); }); test('Observable#minBy some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 2, value: 'c' }), onNext(230, { key: 4, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'c' }]), onCompleted(250) ]); t.end(); }); test('Observable#minBy multiple', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(215, { key: 2, value: 'd' }), onNext(220, { key: 3, value: 'c' }), onNext(225, { key: 2, value: 'y' }), onNext(230, { key: 4, value: 'a' }), onNext(235, { key: 4, value: 'r' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'd' }, { key: 2, value: 'y' }]), onCompleted(250) ]); t.end(); }); test('Observable#minBy throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#minBy never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#minBy comparer empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, []), onCompleted(250) ]); t.end(); }); test('Observable#minBy comparer return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 2, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 2, value: 'a' }]), onCompleted(250) ]); t.end(); }); test('Observable#minBy comparer some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 20, value: 'c' }), onNext(230, { key: 4, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onNext(250, [{ key: 20, value: 'c' }]), onCompleted(250) ]); t.end(); }); test('Observable#minBy comparer throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#minBy comparer never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }, reverseComparer); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#minBy selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 2, value: 'c' }), onNext(230, { key: 4, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function () { throw error; }, reverseComparer); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#minBy comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, { key: 1, value: 'z' }), onNext(210, { key: 3, value: 'b' }), onNext(220, { key: 2, value: 'c' }), onNext(230, { key: 4, value: 'a' }), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.minBy(function (x) { return x.key; }, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/multicast.js000066400000000000000000000263171266736161100201400ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var Subject = require('../subject'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ create: require('../observable/create') }); Observable.addToPrototype({ multicast: require('../observable/multicast'), zip: require('../observable/zip') }); test('Observable#multicast hot 1', function (t) { var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d1 = c.subscribe(o); }); scheduler.scheduleAbsolute(null, 200, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 300, function () { d1.dispose(); }); scheduler.start(); reactiveAssert(t, o.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.end(); }); test('Observable#multicast hot 2', function (t) { var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 200, function () { d1 = c.subscribe(o); }); scheduler.scheduleAbsolute(null, 300, function () { d1.dispose(); }); scheduler.start(); reactiveAssert(t, o.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(100, 390) ]); t.end(); }); test('Observable#multicast hot 2', function (t) { var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390)); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 200, function () { d1 = c.subscribe(o); }); scheduler.scheduleAbsolute(null, 300, function () { d1.dispose(); }); scheduler.start(); reactiveAssert(t, o.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(100, 390) ]); t.end(); }); test('Observable#multicast hot 3', function (t) { var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 200, function () { d1 = c.subscribe(o); }); scheduler.scheduleAbsolute(null, 300, function () { d2.dispose(); }); scheduler.scheduleAbsolute(null, 335, function () { d2 = c.connect(); }); scheduler.start(); reactiveAssert(t, o.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(340, 7), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(100, 300), subscribe(335, 390) ]); t.end(); }); test('Observable#multicast hot 4', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onError(390, error) ); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 200, function () { d1 = c.subscribe(o); }); scheduler.scheduleAbsolute(null, 300, function () { d2.dispose(); }); scheduler.scheduleAbsolute(null, 335, function () { d2 = c.connect(); }); scheduler.start(); reactiveAssert(t, o.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(340, 7), onError(390, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(100, 300), subscribe(335, 390) ]); t.end(); }); test('Observable#multicast hot 5', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onError(390, error)); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { d1 = c.subscribe(o); }); scheduler.start(); reactiveAssert(t, o.messages, [ onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(100, 390) ]); t.end(); }); test('Observable#multicast hot 6', function (t) { var scheduler = new TestScheduler(); var s = new Subject(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var c; var o = scheduler.createObserver(); var d1; var d2; scheduler.scheduleAbsolute(null, 50, function () { c = xs.multicast(s); }); scheduler.scheduleAbsolute(null, 100, function () { d2 = c.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { d1 = c.subscribe(o); }); scheduler.start(); reactiveAssert(t, o.messages, [ onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(100, 390) ]); t.end(); }); test('Observable#multicast cold completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var results = scheduler.startScheduler(function () { return xs.multicast(function () { return new Subject(); }, function (ys) { return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.end(); }); test('Observable#multicast cold Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onError(390, error) ); var results = scheduler.startScheduler(function () { return xs.multicast( function () { return new Subject(); }, function (ys) { return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onError(390, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.end(); }); test('Observable#multicast cold dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7)); var results = scheduler.startScheduler(function () { return xs.multicast(function () { return new Subject(); }, function (ys) { return ys; }); }); reactiveAssert(t, results.messages, [ onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#multicast cold zip', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var results = scheduler.startScheduler(function () { return xs.multicast(function () { return new Subject(); }, function (ys) { return ys.zip(ys, function (a, b) { return a + b; }); }); }); reactiveAssert(t, results.messages, [ onNext(210, 6), onNext(240, 8), onNext(270, 10), onNext(330, 12), onNext(340, 14), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.end(); }); // adapted from issue Reactive-Extensions/RxJS#1112 test('multicast should not reconnect when stopped', function (t) { var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var calls = 0; function request(v) { calls++; return v * 2; } var xs = scheduler.createColdObservable( onNext(1, 1), onNext(2, 2), onNext(3, 3), onCompleted(4)); var c, s; scheduler.scheduleAbsolute(null, 300, function () { c = Observable.create(function (o) { return xs.subscribe( function (x) { o.onNext(request(x)); }, function (e) { o.onError(e); }, function () { o.onCompleted(); }); }).multicast(new Subject()); c.subscribe(results); s = c.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { s.dispose(); c.connect(); }); scheduler.start(); t.equal(calls, 3); reactiveAssert(t, results.messages, [ onNext(301, 2), onNext(302, 4), onNext(303, 6), onCompleted(304) ]); t.end(); }); RxJS-4.1.0/src/modular/test/narydisposable.js000066400000000000000000000034261266736161100211460ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Disposable = require('../disposable'); var NAryDisposable = require('../NAryDisposable'); test('NAryDisposable#constructor', function (t) { var disp1 = false; var disp2 = false; var disp3 = false; var d1 = Disposable.create(function () { disp1 = true; }); var d2 = Disposable.create(function () { disp2 = true; }); var d3 = Disposable.create(function () { disp3 = true; }); var b = new NAryDisposable([d1, d2, d3]); t.equal(b.isDisposed, false, 'should not be disposed'); t.equal(disp1, false, 'first should not be disposed'); t.equal(disp2, false, 'second should not be disposed'); t.equal(disp3, false, 'third should not be disposed'); t.end(); }); test('NAryDisposable#dispose', function (t) { var disp1 = false; var disp2 = false; var disp3 = false; var d1 = Disposable.create(function () { disp1 = true; }); var d2 = Disposable.create(function () { disp2 = true; }); var d3 = Disposable.create(function () { disp3 = true; }); var b = new NAryDisposable([d1, d2, d3]); t.equal(b.isDisposed, false, 'should not be disposed'); t.equal(disp1, false, 'first should not be disposed'); t.equal(disp2, false, 'second should not be disposed'); t.equal(disp1, false, 'third should not be disposed'); b.dispose(); t.equal(b.isDisposed, true, 'should be disposed'); t.equal(disp1, true, 'first should be disposed'); t.equal(disp2, true, 'second should be disposed'); t.equal(disp2, true, 'third should be disposed'); b.dispose(); t.equal(b.isDisposed, true, 'should be idempotent'); t.equal(disp1, true, 'first should be idempotent'); t.equal(disp2, true, 'second should be idempotent'); t.equal(disp2, true, 'third should be idempotent'); t.end(); }); RxJS-4.1.0/src/modular/test/never.js000066400000000000000000000011051266736161100172360ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); Observable.addToObject({ never: require('../observable/never') }); test('Observable.never basic', function (t) { var scheduler = new TestScheduler(); var xs = Observable.never(); var results = scheduler.createObserver(); xs.subscribe(results); scheduler.start(); reactiveAssert(t, results.messages, []); t.end(); }); RxJS-4.1.0/src/modular/test/notification.js000066400000000000000000000165251266736161100206210ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var Notification = require('../notification'); var Observer = require('../observer'); var test = require('tape'); var inherits = require('inherits'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; test('Notification.createOnNextc.constructor', function (t) { var n = Notification.createOnNext(42); t.equal('N', n.kind); t.equal(42, n.value); t.end(); }); test('Notification.createOnNext#toString', function (t) { var n1 = Notification.createOnNext(42); t.ok(n1.toString().indexOf('OnNext') !== -1); t.ok(n1.toString().indexOf('42') !== -1); t.end(); }); function CheckOnNextObserver() { Observer.call(this); this.value = null; } inherits(CheckOnNextObserver, Observer); CheckOnNextObserver.prototype.onNext = function (value) { return this.value = value; }; test('Notification.createOnNext#accept Observer', function (t) { var con = new CheckOnNextObserver(); var n1 = Notification.createOnNext(42); n1.accept(con); t.equal(42, con.value); t.end(); }); function AcceptObserver(onNext, onError, onCompleted) { Observer.call(this); this._onNext = onNext; this._onError = onError; this._onCompleted = onCompleted; } inherits(AcceptObserver, Observer); AcceptObserver.prototype.onNext = function (value) { return this._onNext(value); }; AcceptObserver.prototype.onError = function (exception) { return this._onError(exception); }; AcceptObserver.prototype.onCompleted = function () { return this._onCompleted(); }; test('Notification.createOnNext#accept Observer with result', function (t) { var n1 = Notification.createOnNext(42); var results = n1.accept(new AcceptObserver( function () { return 'OK'; }, function () { t.ok(false); return false; }, function () { t.ok(false); return false; })); t.equal('OK', results); t.end(); }); test('Notification.createOnNext#accept action', function (t) { var obs = false; var n1 = Notification.createOnNext(42); n1.accept( function () { obs = true; }, function () { t.ok(false); }, function () { t.ok(false); } ); t.ok(obs); t.end(); }); test('Notification.createOnNext#accept action with result', function (t) { var n1 = Notification.createOnNext(42); var results = n1.accept( function () { return 'OK'; }, function () { t.ok(false); }, function () { t.ok(false); } ); t.equal('OK', results); t.end(); }); test('Notification.createOnError.constructor', function (t) { var error = new Error(); var n = Notification.createOnError(error); t.equal('E', n.kind); t.equal(error, n.error); t.end(); }); test('Notification.createOnError#toString', function (t) { var error = new Error('woops'); var n1 = Notification.createOnError(error); t.ok(n1.toString().indexOf('OnError') !== -1); t.ok(n1.toString().indexOf('woops') !== -1); t.end(); }); function CheckOnErrorObserver() { Observer.call(this); this.error = null; } inherits(CheckOnErrorObserver, Observer); CheckOnErrorObserver.prototype.onError = function (err) { this.error = err; }; test('Notification.createOnError#accept(observer)', function (t) { var error = new Error(); var obs = new CheckOnErrorObserver(); var n1 = Notification.createOnError(error); n1.accept(obs); t.equal(error, obs.error); t.end(); }); test('Notification.createOnError#accept(observer) with result', function (t) { var error = new Error(); var n1 = Notification.createOnError(error); var results = n1.accept(new AcceptObserver( function () { t.ok(false); }, function () { return 'OK'; }, function () { t.ok(false); } )); t.equal('OK', results); t.end(); }); test('Notification.createOnError#accept(action)', function (t) { var error = new Error(); var obs = false; var n1 = Notification.createOnError(error); n1.accept( function () { t.ok(false); }, function () { obs = true; }, function () { t.ok(false); } ); t.ok(obs); t.end(); }); test('Notification.createOnError#accept(action) with result', function (t) { var error = new Error(); var n1 = Notification.createOnError(error); var results = n1.accept( function () { t.ok(false); }, function () { return 'OK'; }, function () { t.ok(false); } ); t.equal('OK', results); t.end(); }); test('Notification.createOnCompleted.constructor', function (t) { var n = Notification.createOnCompleted(); t.equal('C', n.kind); t.end(); }); test('Notification.createOnCompleted toString', function (t) { var n1 = Notification.createOnCompleted(); t.ok(n1.toString().indexOf('OnCompleted') !== -1); t.end(); }); function CheckOnCompletedObserver() { Observer.call(this); this.completed = false; } inherits(CheckOnCompletedObserver, Observer); CheckOnCompletedObserver.prototype.onCompleted = function () { this.completed = true; }; test('Notification.createOnCompleted#accept(observer)', function (t) { var obs = new CheckOnCompletedObserver(); var n1 = Notification.createOnCompleted(); n1.accept(obs); t.ok(obs.completed); t.end(); }); test('Notification.createOnCompleted#accept(observer) with result', function (t) { var n1 = Notification.createOnCompleted(); var results = n1.accept(new AcceptObserver( function () { t.ok(false); }, function () { t.ok(false); }, function () { return 'OK'; } )); t.equal('OK', results); t.end(); }); test('Notification.createOnCompleted#accept(action)', function (t) { var obs = false; var n1 = Notification.createOnCompleted(); n1.accept( function () { t.ok(false); }, function () { t.ok(false); }, function () { obs = true; } ); t.ok(obs); t.end(); }); test('Notification.createOnCompleted#accept(action) with result', function (t) { var n1 = Notification.createOnCompleted(); var results = n1.accept( function () { t.ok(false); }, function () { t.ok(false); }, function () { return 'OK'; } ); t.equal('OK', results); t.end(); }); test('toObservable empty', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Notification.createOnCompleted().toObservable(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Notification#toObservable just', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Notification.createOnNext(42).toObservable(scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 42), onCompleted(201) ]); t.end(); }); test('Notification#toObservable throwError', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Notification.createOnError(error).toObservable(scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/observeon.js000066400000000000000000000043051266736161100201260ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ observeOn: require('../observable/observeon') }); test('Observable#observeOn normal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.observeOn(scheduler); }); reactiveAssert(t, results.messages, [ onNext(211, 2), onCompleted(251) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 251) ]); t.end(); }); test('Observable#observeOn Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.observeOn(scheduler); }); reactiveAssert(t, results.messages, [ onError(211, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 211) ]); t.end(); }); test('Observable#observeOn empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.observeOn(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(251) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 251) ]); t.end(); }); test('Observable#observeOn never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.observeOn(scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/observer.js000066400000000000000000000172441266736161100177610ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observer = require('../observer'); var Notification = require('../notification'); Observer.addToObject({ create: require('../observer/create'), fromNotifier: require('../observer/fromnotifier'), }); Observer.addToPrototype({ asObserver: require('../observer/asobserver'), checked: require('../observer/checked'), toNotifier: require('../observer/tonotifier') }); function createObserver() { var obs = new Observer(); obs.onNext = function onNext(value) { this.hasOnNext = value; }; obs.onError = function onError (err) { this.hasOnError = err; }; obs.onCompleted = function onCompleted () { this.hasOnCompleted = true; }; return obs; } test('fromNotifier notification onNext', function (t) { var i = 0; var next = function (n) { t.equal(i++, 0); t.equal(n.kind, 'N'); t.equal(n.value, 42); t.end(); }; Observer.fromNotifier(next).onNext(42); }); test('fromNotifier notification onError', function (t) { var error = new Error(); var i = 0; var next = function (n) { t.equal(i++, 0); t.equal(n.kind, 'E'); t.equal(n.error, error); t.end(); }; Observer.fromNotifier(next).onError(error); }); test('fromNotifier Notification onCompleted', function (t) { var i = 0; var next = function (n) { t.equal(i++, 0); t.equal(n.kind, 'C'); t.end(); }; Observer.fromNotifier(next).onCompleted(); }); test('toNotifier forwards', function (t) { var obsn = new createObserver(); obsn.toNotifier()(Notification.createOnNext(42)); t.equal(obsn.hasOnNext, 42); var error = new Error(); var obse = new createObserver(); obse.toNotifier()(Notification.createOnError(error)); t.equal(error, obse.hasOnError); var obsc = new createObserver(); obsc.toNotifier()(Notification.createOnCompleted()); t.ok(obsc.hasOnCompleted); t.end(); }); test('Observer.create onNext', function (t) { var next = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }); res.onNext(42); t.ok(next); t.end(); res.onCompleted(); }); test('Observer.create OnNext has error', function (t) { var e_; var error = new Error(); var next = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }); res.onNext(42); t.ok(next); try { res.onError(error); t.ok(false); } catch (e) { e_ = e; } t.equal(error, e_); t.end(); }); test('Observer.create onNext onCompleted', function (t) { var next = false; var completed = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }, null, function () { completed = true; }); res.onNext(42); t.ok(next); t.ok(!completed); res.onCompleted(); t.ok(completed); t.end(); }); test('Observer.create onNext onCompleted has error', function (t) { var e_; var error = new Error(); var next = false; var completed = false; var res = Observer.create( function (x) { t.equal(42, x); next = true; }, null, function () { completed = true; } ); res.onNext(42); t.ok(next); t.ok(!completed); try { res.onError(error); t.ok(false); } catch (e) { e_ = e; } t.equal(error, e_); t.ok(!completed); t.end(); }); test('Observer.create onNext onError', function (t) { var error = new Error(); var next = true; var hasError = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }, function (e) { t.equal(error, e); hasError = true; }); res.onNext(42); t.ok(next); t.ok(!hasError); res.onError(error); t.ok(hasError); t.end(); }); test('Observer.create onNext onError hit completed', function (t) { var error = new Error(); var next = true; var hasError = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }, function (e) { t.equal(error, e); hasError = true; }); res.onNext(42); t.ok(next); t.ok(!hasError); res.onCompleted(); t.ok(!hasError); t.end(); }); test('Observer.create onNext onError onCompleted 1', function (t) { var error = new Error(); var next = true; var hasError = false; var completed = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }, function (e) { t.equal(error, e); hasError = true; }, function () { completed = true; }); res.onNext(42); t.ok(next); t.ok(!hasError); t.ok(!completed); res.onCompleted(); t.ok(completed); t.ok(!hasError); t.end(); }); test('Observer.create onNext onError onCompleted 2', function (t) { var error = new Error(); var next = true; var hasError = false; var completed = false; var res = Observer.create(function (x) { t.equal(42, x); next = true; }, function (e) { t.equal(error, e); hasError = true; }, function () { completed = true; }); res.onNext(42); t.ok(next); t.ok(!hasError); t.ok(!completed); res.onError(error); t.ok(!completed); t.ok(hasError); t.end(); }); test('Observer.asObserver hides', function (t) { var obs = new createObserver(); var res = obs.asObserver(); t.notEqual(obs, res); t.end(); }); test('asObserver Forwards', function (t) { var obsn = new createObserver(); obsn.asObserver().onNext(42); t.equal(obsn.hasOnNext, 42); var error = new Error(); var obse = new createObserver(); obse.asObserver().onError(error); t.equal(obse.hasOnError, error); var obsc = new createObserver(); obsc.asObserver().onCompleted(); t.ok(obsc.hasOnCompleted); t.end(); }); test('Observer.checked already terminated completed', function (t) { var m = 0, n = 0; var o = Observer.create(function () { m++; }, function () { t.ok(false); }, function () { n++; }).checked(); o.onNext(1); o.onNext(2); o.onCompleted(); t.throws(function () { o.onCompleted(); }); t.throws(function () { o.onError(new Error('error')); }); t.equal(2, m); t.equal(1, n); t.end(); }); test('Observer.checked already terminated error', function (t) { var m = 0, n = 0; var o = Observer.create(function () { m++; }, function () { n++; }, function () { t.ok(false); }).checked(); o.onNext(1); o.onNext(2); o.onError(new Error('error')); t.throws(function () { o.onCompleted(); }); t.throws(function () { o.onError(new Error('error')); }); t.equal(2, m); t.equal(1, n); t.end(); }); test('Observer.checked re-entrant next', function (t) { var n = 0; var o = Observer.create(function () { n++; t.throws(function () { o.onNext(9); }); t.throws(function () { o.onError(new Error('error')); }); t.throws(function () { o.onCompleted(); }); }, function () { t.ok(false); }, function () { t.ok(false); }).checked(); o.onNext(1); t.equal(1, n); t.end(); }); test('Observer.checked re-entrant error', function (t) { var n = 0; var o = Observer.create(function () { t.ok(false); }, function () { n++; t.throws(function () { o.onNext(9); }); t.throws(function () { o.onError(new Error('error')); }); t.throws(function () { o.onCompleted(); }); }, function () { t.ok(false); }).checked(); o.onError(new Error('error')); t.equal(1, n); t.end(); }); test('Observer.checked re-entrant completed', function (t) { var n = 0; var o = Observer.create(function () { t.ok(false); }, function () { t.ok(false); }, function () { n++; t.throws(function () { o.onNext(9); }); t.throws(function () { o.onError(new Error('error')); }); t.throws(function () { o.onCompleted(); }); }).checked(); o.onCompleted(); t.equal(1, n); t.end(); }); RxJS-4.1.0/src/modular/test/of.js000066400000000000000000000033611266736161100165310ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ of: require('../observable/of'), ofScheduled: require('../observable/ofscheduled') }); test('Observable.of', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.of(1,2,3,4,5); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onNext(200, 2), onNext(200, 3), onNext(200, 4), onNext(200, 5), onCompleted(200) ]); t.end(); }); test('Observable.of empty', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.of(); }); reactiveAssert(t, results.messages, [ onCompleted(200) ]); t.end(); }); test('Observable.ofScheduled', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.ofScheduled(scheduler, 1,2,3,4,5); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3), onNext(204, 4), onNext(205, 5), onCompleted(206) ]); t.end(); }); test('Observable.ofScheduled empty', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.ofScheduled(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); RxJS-4.1.0/src/modular/test/onerrorresumenext.js000066400000000000000000000115571266736161100217410ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ onErrorResumeNext: require('../observable/onerrorresumenext') }); Observable.addToPrototype({ onErrorResumeNext: require('../observable/onerrorresumenext') }); test('Observable.onErrorResumeNext error multiple', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, new Error()) ); var o2 = scheduler.createHotObservable( onNext(230, 4), onError(240, new Error()) ); var o3 = scheduler.createHotObservable( onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.onErrorResumeNext(o1, o2, o3); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 4), onCompleted(250) ]); t.end(); }); test('Observable.onErrorResumeNext empty return throw and more', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(205) ); var o2 = scheduler.createHotObservable( onNext(215, 2), onCompleted(220) ); var o3 = scheduler.createHotObservable( onNext(225, 3), onNext(230, 4), onCompleted(235) ); var o4 = scheduler.createHotObservable( onError(240, new Error()) ); var o5 = scheduler.createHotObservable( onNext(245, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return Observable.onErrorResumeNext(o1, o2, o3, o4, o5); }); reactiveAssert(t, results.messages, [ onNext(215, 2), onNext(225, 3), onNext(230, 4), onNext(245, 5), onCompleted(250) ]); t.end(); }); test('Observable.onErrorResumeNext single source throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onError(230, error) ); var results = scheduler.startScheduler(function () { return Observable.onErrorResumeNext(o1); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); t.end(); }); test('Observable.onErrorResumeNext end with never', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var o2 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.onErrorResumeNext(o1, o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2) ]); t.end(); }); test('Observable.onErrorResumeNext start with never', function (t) { var scheduler = new TestScheduler(); var o1 = Observable.never(); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return Observable.onErrorResumeNext(o1, o2); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.onErrorResumeNext no errors', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(230) ); var o2 = scheduler.createHotObservable( onNext(240, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1.onErrorResumeNext(o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(240, 4), onCompleted(250) ]); t.end(); }); test('Observable.onErrorResumeNext error', function (t) { var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, new Error()) ); var o2 = scheduler.createHotObservable( onNext(240, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1.onErrorResumeNext(o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(240, 4), onCompleted(250) ]); t.end(); }); test('Observable.onErrorResumeNext empty return throw and more', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var o2 = scheduler.createHotObservable( onError(230, error) ); var results = scheduler.startScheduler(function () { return o1.onErrorResumeNext(o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(230) ]); t.end(); }); RxJS-4.1.0/src/modular/test/pairs.js000066400000000000000000000030271266736161100172420ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ pairs: require('../observable/pairs') }); test('Observable.pairs empty', function (t) { var scheduler = new TestScheduler(); var xs = {}; var results = scheduler.startScheduler(function () { return Observable.pairs(xs, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable.pairs normal', function (t) { var scheduler = new TestScheduler(); var xs = {foo: 42, bar: 56, baz: 78}; var results = scheduler.startScheduler(function () { return Observable.pairs(xs, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, ['foo', 42]), onNext(202, ['bar', 56]), onNext(203, ['baz', 78]), onCompleted(204) ]); t.end(); }); test('Observable.pairs dispose', function (t) { var xs = {foo: 42, bar: 56, baz: 78, quux: 104}; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.pairs(xs, scheduler); }, { disposed: 204 }); reactiveAssert(t, results.messages, [ onNext(201, ['foo', 42]), onNext(202, ['bar', 56]), onNext(203, ['baz', 78]), ]); t.end(); }); RxJS-4.1.0/src/modular/test/pairwise.js000066400000000000000000000067401266736161100177540ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ pairwise: require('../observable/pairwise') }); test('Observable#pairwise empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onCompleted(210) ); var results = scheduler.startScheduler(function () { return xs.pairwise(); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#pairwise single', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onCompleted(220) ); var results = scheduler.startScheduler(function () { return xs.pairwise(); }); reactiveAssert(t, results.messages, [ onCompleted(220) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable#pairwise completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(360) ); var results = scheduler.startScheduler(function () { return xs.pairwise(); }); reactiveAssert(t, results.messages, [ onNext(240, [4,3]), onNext(290, [3, 2]), onNext(350, [2, 1]), onCompleted(360) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 360) ]); t.end(); }); test('Observable#pairwise not completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1) ); var results = scheduler.startScheduler(function () { return xs.pairwise(); }); reactiveAssert(t, results.messages, [ onNext(240, [4,3]), onNext(290, [3, 2]), onNext(350, [2, 1]) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#pairwise error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onError(290, error), onNext(350, 1), onCompleted(360) ); var results = scheduler.startScheduler(function () { return xs.pairwise(); }); reactiveAssert(t, results.messages, [ onNext(240, [4,3]), onError(290, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 290) ]); t.end(); }); test('Observable#pairwise disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(360) ); var results = scheduler.startScheduler(function () { return xs.pairwise(); }, { disposed: 280 }); reactiveAssert(t, results.messages, [ onNext(240, [4,3]) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 280) ]); t.end(); }); RxJS-4.1.0/src/modular/test/partition.js000066400000000000000000000203751266736161100201420ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ partition: require('../observable/partition') }); function isEven(num) { return +num % 2 === 0; } test('Observable#partition empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onCompleted(210) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, ReactiveTest.disposed, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onCompleted(210) ]); reactiveAssert(t, results2.messages, [ onCompleted(210) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210), subscribe(200, 210) ]); t.end(); }); test('Observable#partition single', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onCompleted(220) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, ReactiveTest.disposed, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(210, 4), onCompleted(220) ]); reactiveAssert(t, results2.messages, [ onCompleted(220) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220), subscribe(200, 220) ]); t.end(); }); test('Observable#partition each', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(220, 3), onCompleted(230) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, ReactiveTest.disposed, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(210, 4), onCompleted(230) ]); reactiveAssert(t, results2.messages, [ onNext(220, 3), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230), subscribe(200, 230) ]); t.end(); }); test('Observable#partition completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(360) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, ReactiveTest.disposed, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(210, 4), onNext(290, 2), onCompleted(360) ]); reactiveAssert(t, results2.messages, [ onNext(240, 3), onNext(350, 1), onCompleted(360) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 360), subscribe(200, 360) ]); t.end(); }); test('Observable#partition not completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, ReactiveTest.disposed, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(210, 4), onNext(290, 2) ]); reactiveAssert(t, results2.messages, [ onNext(240, 3), onNext(350, 1) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000), subscribe(200, 1000) ]); t.end(); }); test('Observable#partition error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onError(290, error), onNext(350, 1), onCompleted(360) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, ReactiveTest.disposed, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(210, 4), onError(290, error) ]); reactiveAssert(t, results2.messages, [ onNext(240, 3), onError(290, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 290), subscribe(200, 290) ]); t.end(); }); test('Observable#partition disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 5), onNext(210, 4), onNext(240, 3), onNext(290, 2), onNext(350, 1), onCompleted(360) ); var observables, subscription1, subscription2, results1 = scheduler.createObserver(), results2 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, ReactiveTest.created, function () { observables = xs.partition(isEven); }); scheduler.scheduleAbsolute(null, ReactiveTest.subscribed, function () { subscription1 = observables[0].subscribe(results1); subscription2 = observables[1].subscribe(results2); }); scheduler.scheduleAbsolute(null, 280, function () { subscription1.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(210, 4) ]); reactiveAssert(t, results2.messages, [ onNext(240, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 280), subscribe(200, 280) ]); t.end(); }); RxJS-4.1.0/src/modular/test/pausable.js000066400000000000000000000147531266736161100177300ustar00rootroot00000000000000var test = require('tape'); var Observable = require('../observable'); var Subject = require('../subject'); var Scheduler = require('../scheduler'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ pausable: require('../observable/pausable') }); test('Observable#pausable no skip', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausable(controller).subscribe(results); controller.onNext(true); }); scheduler.scheduleAbsolute(null, 205, function () { controller.onNext(false); }); scheduler.scheduleAbsolute(null, 209, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); t.end(); }); test('Observable#pausable skips', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausable(controller).subscribe(results); controller.onNext(true); }); scheduler.scheduleAbsolute(null, 300, function () { controller.onNext(false); }); scheduler.scheduleAbsolute(null, 400, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onCompleted(500) ]); t.end(); }); test('Observable#pausable error', function (t) { var subscription; var err = new Error(); var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(230, err), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausable(controller).subscribe(results); controller.onNext(true); }); scheduler.scheduleAbsolute(null, 300, function () { controller.onNext(false); }); scheduler.scheduleAbsolute(null, 400, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(230, err) ]); t.end(); }); test('Observable#pausable with observable controller and pause and unpause', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(270, 4), onNext(301, 5), onNext(350, 6), onNext(450, 7), onCompleted(500) ); var controller = scheduler.createHotObservable( onNext(201, true), onNext(220, false), onNext(250, true) ); var pausable = xs.pausable(controller); scheduler.scheduleAbsolute(null, 200, function () { subscription = pausable.subscribe(results); }); scheduler.scheduleAbsolute(null, 300, function () { pausable.pause(); }); scheduler.scheduleAbsolute(null, 400, function () { pausable.resume(); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(270, 4), onNext(450, 7), onCompleted(500) ]); t.end(); }); test('Observable#pausable with default controller and multiple subscriptions', function (t) { var paused, subscription, subscription2; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var results2 = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { paused = xs.pausable(); subscription = paused.subscribe(results); paused.resume(); }); scheduler.scheduleAbsolute(null, 240, function () { subscription2 = paused.subscribe(results2); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); reactiveAssert(t, results2.messages, [ onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); t.end(); }); test('pausable is unaffected by currentThread scheduler', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { Scheduler.currentThread.schedule(null, function () { subscription = xs.pausable(controller).subscribe(results); controller.onNext(true); }); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); t.end(); }); RxJS-4.1.0/src/modular/test/pausablebuffered.js000066400000000000000000000306211266736161100214230ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var Subject = require('../subject'); var Scheduler = require('../scheduler'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ just: require('../observable/just') }); Observable.addToPrototype({ pausableBuffered: require('../observable/pausablebuffered') }); test('Observable#pausableBuffered no skip', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausableBuffered(controller).subscribe(results); controller.onNext(true); }); scheduler.scheduleAbsolute(null, 205, function () { controller.onNext(false); }); scheduler.scheduleAbsolute(null, 209, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); t.end(); }); test('Observable#pausableBuffered skips', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausableBuffered(controller).subscribe(results); controller.onNext(true); }); scheduler.scheduleAbsolute(null, 300, function () { controller.onNext(false); }); scheduler.scheduleAbsolute(null, 400, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(400, 4), onNext(400, 5), onNext(400, 6), onCompleted(500) ]); t.end(); }); test('Observable#pausableBuffered error', function (t) { var subscription; var err = new Error(); var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(230, err), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausableBuffered(controller).subscribe(results); controller.onNext(true); }); scheduler.scheduleAbsolute(null, 300, function () { controller.onNext(false); }); scheduler.scheduleAbsolute(null, 400, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(230, err) ]); t.end(); }); test('Observable#pausableBuffered skip initial elements', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(230, 2), onNext(270, 3), onCompleted(400) ); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.pausableBuffered(controller).subscribe(results); controller.onNext(false); }); scheduler.scheduleAbsolute(null, 280, function () { controller.onNext(true); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(280, 2), onNext(280, 3), onCompleted(400) ]); t.end(); }); test('Observable#pausableBuffered with observable controller and pause and unpause', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onNext(450, 7), onNext(470, 8), onCompleted(500) ); var controller = scheduler.createHotObservable( onNext(201, true), onNext(300, false), onNext(400, true) ); var pausableBuffered = xs.pausableBuffered(controller); scheduler.scheduleAbsolute(null, 200, function () { subscription = pausableBuffered.subscribe(results); }); scheduler.scheduleAbsolute(null, 460, function () { pausableBuffered.pause(); }); scheduler.scheduleAbsolute(null, 480, function () { pausableBuffered.resume(); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(400, 4), onNext(400, 5), onNext(400, 6), onNext(450, 7), onNext(480, 8), onCompleted(500) ]); t.end(); }); test('Observable#pausableBuffered with immediate unpause', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(500) ); var controller = Observable.just(true); var pausableBuffered = xs.pausableBuffered(controller); scheduler.scheduleAbsolute(null, 200, function () { subscription = pausableBuffered.subscribe(results); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(500) ]); t.end(); }); test('Observable#pausableBuffered when finishing', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onNext(450, 7), onNext(470, 8), onCompleted(500) ); var controller = scheduler.createHotObservable( onNext(201, true), onNext(300, false), onNext(400, true) ); var pausableBuffered = xs.pausableBuffered(controller); scheduler.scheduleAbsolute(null, 200, function () { subscription = pausableBuffered.subscribe(results); }); scheduler.scheduleAbsolute(null, 460, function () { pausableBuffered.pause(); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(400, 4), onNext(400, 5), onNext(400, 6), onNext(450, 7) ]); t.end(); }); test('Observable#pausableBuffered with observable controller and pause and unpause after end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onNext(450, 7), onNext(470, 8), onCompleted(500) ); var controller = scheduler.createHotObservable( onNext(201, true), onNext(300, false), onNext(600, true) ); var results = scheduler.startScheduler(function () { return xs.pausableBuffered(controller); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(600, 4), onNext(600, 5), onNext(600, 6), onNext(600, 7), onNext(600, 8), onCompleted(600) ]); t.end(); }); test('Observable#pausableBuffered with observable controller and pause and unpause after error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onNext(450, 7), onNext(470, 8), onError(500, error) ); var controller = scheduler.createHotObservable( onNext(201, true), onNext(300, false), onNext(600, true) ); var results = scheduler.startScheduler(function () { return xs.pausableBuffered(controller); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(600, 4), onNext(600, 5), onNext(600, 6), onNext(600, 7), onNext(600, 8), onError(600, error) ]); t.end(); }); test('Observable#pausableBuffered with state change in subscriber', function (t) { var subscription; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(330, 5), onCompleted(500) ); var controller = new Subject(); var pausableBuffered = xs.pausableBuffered(controller); scheduler.scheduleAbsolute(null, 200, function () { subscription = pausableBuffered.subscribe( function(value){ results.onNext(value); controller.onNext(false); scheduler.scheduleRelative(null, 100, function () { controller.onNext(true); }); }, function (e) { results.onError(e); }, function () { results.onCompleted(); } ); controller.onNext(true); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(310, 3), onNext(310, 4), onNext(410, 5), onCompleted(500) ]); t.end(); }); test('pausableBuffered produces expected result', function (t) { var data = new Subject(); var signal = new Subject(); var p = data.pausableBuffered(signal); var results = []; p.subscribe(function (value) { results.push(value); }); data.onNext(1); signal.onNext(false); signal.onNext(true); t.deepEqual(results, [1]); t.end(); }); test('Observable#pausableBuffered with default controller and multiple subscriptions', function (t) { var paused, subscription, subscription2; var scheduler = new TestScheduler(); var results = scheduler.createObserver(); var results2 = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { paused = xs.pausableBuffered(); subscription = paused.subscribe(results); paused.resume(); }); scheduler.scheduleAbsolute(null, 240, function () { subscription2 = paused.subscribe(results2); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); subscription2.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); reactiveAssert(t, results2.messages, [ onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); t.end(); }); test('pausableBuffered is unaffected by currentThread scheduler', function (t) { var subscription; var scheduler = new TestScheduler(); var controller = new Subject(); var results = scheduler.createObserver(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ); scheduler.scheduleAbsolute(null, 200, function () { Scheduler.currentThread.schedule(null, function () { subscription = xs.pausableBuffered(controller).subscribe(results); controller.onNext(true); }); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(230, 3), onNext(301, 4), onNext(350, 5), onNext(399, 6), onCompleted(500) ]); t.end(); }); RxJS-4.1.0/src/modular/test/pluck.js000066400000000000000000000052351266736161100172450ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ pluck: require('../observable/pluck') }); test('Observable#pluck completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, {prop: 1}), onNext(210, {prop: 2}), onNext(240, {prop: 3}), onNext(290, {prop: 4}), onNext(350, {prop: 5}), onCompleted(400), onNext(410, {prop: -1}), onCompleted(420), onError(430, new Error('ex')) ); var results = scheduler.startScheduler(function () { return xs.pluck('prop'); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(240, 3), onNext(290, 4), onNext(350, 5), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('deep pluck nested completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, {a: {b: {c: 1}}}), onNext(210, {a: {b: {c: 2}}}), onNext(240, {a: {b: {c: 3}}}), onNext(290, {a: {b: {c: 4}}}), onNext(350, {a: {b: {c: 5}}}), onCompleted(400), onNext(410, {a: {b: {c: -1}}}), onCompleted(420), onError(430, new Error('ex')) ); var results = scheduler.startScheduler(function () { return xs.pluck('a', 'b', 'c'); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(240, 3), onNext(290, 4), onNext(350, 5), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('deep pluck nested edge cases', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, {a: {b: {c: 1}}}), onNext(210, {a: {b: 2}}), onNext(240, {a: {c: {c: 3}}}), onNext(290, {}), onNext(350, {a: {b: {c: 5}}}), onCompleted(400), onNext(410, {a: {b: {c: -1}}}), onCompleted(420), onError(430, new Error('ex')) ); var results = scheduler.startScheduler(function () { return xs.pluck('a', 'b', 'c'); }); reactiveAssert(t, results.messages, [ onNext(210, undefined), onNext(240, undefined), onNext(290, undefined), onNext(350, 5), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); RxJS-4.1.0/src/modular/test/publish.js000066400000000000000000000321701266736161100175730ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var ConnectableObservable = require('../observable/connectableobservable'); var Disposable = require('../disposable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var inherits = require('inherits'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe, created = ReactiveTest.created, subscribed = ReactiveTest.subscribed, disposed = ReactiveTest.disposed; Observable.addToObject({ defer: require('../observable/defer'), never: require('../observable/never') }); Observable.addToPrototype({ publish: require('../observable/publish'), zip: require('../observable/zip') }); function add(x, y) { return x + y; } test('Observable#publish Cold Zip', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(40, 0), onNext(90, 1), onNext(150, 2), onNext(210, 3), onNext(240, 4), onNext(270, 5), onNext(330, 6), onNext(340, 7), onCompleted(390) ); var results = scheduler.startScheduler(function () { return xs.publish(function (ys) { return ys.zip(ys, add); }); }); reactiveAssert(t, results.messages, [ onNext(210, 6), onNext(240, 8), onNext(270, 10), onNext(330, 12), onNext(340, 14), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.end(); }); function MySubject() { this._disposeOnMap = {}; this.subscribeCount = 0; this.disposed = false; Observable.call(this); } inherits(MySubject, Observable); MySubject.prototype._subscribe = function (o) { this.subscribeCount++; this._o = o; var self = this; return Disposable.create(function () { self.disposed = true; }); }; MySubject.prototype.disposeOn = function (value, disposable) { this._disposeOnMap[value] = disposable; }; MySubject.prototype.onNext = function (value) { this._o.onNext(value); this._disposeOnMap[value] && this._disposeOnMap[value].dispose(); }; MySubject.prototype.onError = function (exception) { this._o.onError(exception); }; MySubject.prototype.onCompleted = function () { this._o.onCompleted(); }; test('ConnectableObservable#refCount connects on first', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ); var subject = new MySubject(); var conn = new ConnectableObservable(xs, subject); var results = scheduler.startScheduler(function () { return conn.refCount(); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onCompleted(250) ]); t.ok(subject.disposed); t.end(); }); test('ConnectableObservable#refCount not connected', function (t) { var disconnected = false; var count = 0; var xs = Observable.defer(function () { count++; return Observable.create(function () { return function () { disconnected = true; }; }); }); var subject = new MySubject(); var conn = new ConnectableObservable(xs, subject); var refd = conn.refCount(); var dis1 = refd.subscribe(); t.equal(1, count); t.equal(1, subject.subscribeCount); t.ok(!disconnected); var dis2 = refd.subscribe(); t.equal(1, count); t.equal(2, subject.subscribeCount); t.ok(!disconnected); dis1.dispose(); t.ok(!disconnected); dis2.dispose(); t.ok(disconnected); disconnected = false; var dis3 = refd.subscribe(); t.equal(2, count); t.equal(3, subject.subscribeCount); t.ok(!disconnected); dis3.dispose(); t.ok(disconnected); t.end(); }); test('Observable#publish basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var ys; var subscription; var connection; var results = scheduler.createObserver(); scheduler.scheduleAbsolute(null, created, function () { ys = xs.publish(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(520, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#publish Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publish(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(520, 11), onNext(560, 20), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#publish complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publish(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(520, 11), onNext(560, 20), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#publish dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publish(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(340, 8) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#publish multiple connections', function (t) { var xs = Observable.never(); var ys = xs.publish(); var connection1 = ys.connect(); var connection2 = ys.connect(); t.ok(connection1 === connection2); connection1.dispose(); connection2.dispose(); var connection3 = ys.connect(); t.ok(connection1 !== connection3); connection3.dispose(); t.end(); }); test('Observable#publish function zip complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.publish(function (_xs) { return _xs.zip(_xs.skip(1), add); }); }); reactiveAssert(t, results.messages, [ onNext(280, 7), onNext(290, 5), onNext(340, 9), onNext(360, 13), onNext(370, 11), onNext(390, 13), onNext(410, 20), onNext(430, 15), onNext(450, 11), onNext(520, 20), onNext(560, 31), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#publish function zip error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.startScheduler(function () { return xs.publish(function (_xs) { return _xs.zip(_xs.skip(1), add); }); }); reactiveAssert(t, results.messages, [ onNext(280, 7), onNext(290, 5), onNext(340, 9), onNext(360, 13), onNext(370, 11), onNext(390, 13), onNext(410, 20), onNext(430, 15), onNext(450, 11), onNext(520, 20), onNext(560, 31), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#publish function zip dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.publish(function (_xs) { return _xs.zip(_xs.skip(1), add); }); }, { disposed: 470 }); reactiveAssert(t, results.messages, [ onNext(280, 7), onNext(290, 5), onNext(340, 9), onNext(360, 13), onNext(370, 11), onNext(390, 13), onNext(410, 20), onNext(430, 15), onNext(450, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 470) ]); t.end(); }); RxJS-4.1.0/src/modular/test/publishlast.js000066400000000000000000000220661266736161100204620ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe, created = ReactiveTest.created, subscribed = ReactiveTest.subscribed, disposed = ReactiveTest.disposed; Observable.addToObject({ never: require('../observable/never') }); Observable.addToPrototype({ publishLast: require('../observable/publishlast'), zip: require('../observable/zip') }); function add(x, y) { return x + y; } test('Observable#publishLast basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishLast(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#publishLast Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishLast(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#publishLast complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishLast(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(600, 20), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#publishLast dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishLast(); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#publishLast multiple connections', function (t) { var xs = Observable.never(); var ys = xs.publishLast(); var connection1 = ys.connect(); var connection2 = ys.connect(); t.ok(connection1 === connection2); connection1.dispose(); connection2.dispose(); var connection3 = ys.connect(); t.ok(connection1 !== connection3); t.end(); }); test('Observable#publishLast zip complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.publishLast(function (_xs) { return _xs.zip(_xs, add); }); }); reactiveAssert(t, results.messages, [ onNext(600, 40), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#publishLast zip Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.startScheduler(function () { return xs.publishLast(function (_xs) { return _xs.zip(_xs, add); }); }); reactiveAssert(t, results.messages, [ onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#publishLast zip dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.publishLast(function (_xs) { return _xs.zip(_xs, add); }); }, { disposed: 470 }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 470) ]); t.end(); }); RxJS-4.1.0/src/modular/test/publishvalue.js000066400000000000000000000243221266736161100206300ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe, created = ReactiveTest.created, disposed = ReactiveTest.disposed, subscribed = ReactiveTest.subscribed; Observable.addToPrototype({ publishValue: require('../observable/publishvalue'), skip: require('../observable/skip'), zip: require('../observable/zip') }); function add(x, y) { return x + y; } test('Observable#publishValue basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishValue(1979); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(200, 1979), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(520, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#publishValue error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishValue(1979); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(200, 1979), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(520, 11), onNext(560, 20), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#publishValue complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishValue(1979); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(200, 1979), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(520, 11), onNext(560, 20), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#publishValue dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var ys; var subscription; var connection; var results = scheduler.createObserver(); scheduler.scheduleAbsolute(null, created, function () { ys = xs.publishValue(1979); }); scheduler.scheduleAbsolute(null, subscribed, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, 350, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(200, 1979), onNext(340, 8) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#publishValue multiple connections', function (t) { var xs = Observable.never(); var ys = xs.publishValue(1979); var connection1 = ys.connect(); var connection2 = ys.connect(); t.ok(connection1 === connection2); connection1.dispose(); connection2.dispose(); var connection3 = ys.connect(); t.ok(connection1 !== connection3); t.end(); }); test('Observable#publishValue zip complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.publishValue(function (_xs) { return _xs.zip(_xs.skip(1), add); }, 1979); }); reactiveAssert(t, results.messages, [ onNext(220, 1982), onNext(280, 7), onNext(290, 5), onNext(340, 9), onNext(360, 13), onNext(370, 11), onNext(390, 13), onNext(410, 20), onNext(430, 15), onNext(450, 11), onNext(520, 20), onNext(560, 31), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#publishValue zip error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.startScheduler(function () { return xs.publishValue(function (_xs) { return _xs.zip(_xs.skip(1), add); }, 1979); }); reactiveAssert(t, results.messages, [ onNext(220, 1982), onNext(280, 7), onNext(290, 5), onNext(340, 9), onNext(360, 13), onNext(370, 11), onNext(390, 13), onNext(410, 20), onNext(430, 15), onNext(450, 11), onNext(520, 20), onNext(560, 31), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#publishValue zip dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.publishValue(function (_xs) { return _xs.zip(_xs.skip(1), add); }, 1979); }, { disposed: 470 }); reactiveAssert(t, results.messages, [ onNext(220, 1982), onNext(280, 7), onNext(290, 5), onNext(340, 9), onNext(360, 13), onNext(370, 11), onNext(390, 13), onNext(410, 20), onNext(430, 15), onNext(450, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 470) ]); t.end(); }); RxJS-4.1.0/src/modular/test/race.js000066400000000000000000000106331266736161100170370ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ race: require('../observable/race'), never: require('../observable/never') }); Observable.addToPrototype({ race: require('../observable/race'), tap: require('../observable/tap') }); test('Observable.race never 2', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = Observable.never(); var results = scheduler.startScheduler(function () { return l.race(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.race never 3', function (t) { var scheduler = new TestScheduler(); var n1 = Observable.never(); var n2 = Observable.never(); var n3 = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.race(n1, n2, n3); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.race never empty', function (t) { var scheduler = new TestScheduler(); var n = Observable.never(); var e = scheduler.createHotObservable( onNext(150, 1), onCompleted(225) ); var results = scheduler.startScheduler(function () { return n.race(e); }); reactiveAssert(t, results.messages, [ onCompleted(225) ]); t.end(); }); test('Observable.race empty never', function (t) { var scheduler = new TestScheduler(); var n = Observable.never(); var e = scheduler.createHotObservable( onNext(150, 1), onCompleted(225)); var results = scheduler.startScheduler(function () { return e.race(n); }); reactiveAssert(t, results.messages, [ onCompleted(225) ]); t.end(); }); test('Observable.race regular should dispose loser', function (t) { var scheduler = new TestScheduler(); var sourceNotDisposed = false; var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(240) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(250)).tap(function () { return sourceNotDisposed = true; }); var results = scheduler.startScheduler(function () { return o1.race(o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(240) ]); t.ok(!sourceNotDisposed); t.end(); }); test('Observable.race WinnerThrows', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var sourceNotDisposed = false; var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(250)).tap(function () { return sourceNotDisposed = true; }); var results = scheduler.startScheduler(function () { return o1.race(o2); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(220, error) ]); t.ok(!sourceNotDisposed); t.end(); }); test('Observable.race loser throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var sourceNotDisposed = false; var o1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onError(230, error)).tap(function () { return sourceNotDisposed = true; }); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return o1.race(o2); }); reactiveAssert(t, results.messages, [ onNext(210, 3), onCompleted(250) ]); t.ok(!sourceNotDisposed); t.end(); }); test('Observable.race throws before election', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var sourceNotDisposed = false; var o1 = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var o2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(250)).tap(function () { return sourceNotDisposed = true; }); var results = scheduler.startScheduler(function () { return o1.race(o2); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.ok(!sourceNotDisposed); t.end(); }); RxJS-4.1.0/src/modular/test/range.js000066400000000000000000000033171266736161100172220ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ range: require('../observable/range') }); test('Observable.range zero', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.range(0, 0, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable.range one', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.range(0, 1, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 0), onCompleted(202) ]); t.end(); }); test('Observable.range five', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.range(10, 5, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 10), onNext(202, 11), onNext(203, 12), onNext(204, 13), onNext(205, 14), onCompleted(206) ]); t.end(); }); test('Observable.range dispose', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.range(-10, 5, scheduler); }, { disposed: 204 }); reactiveAssert(t, results.messages, [ onNext(201, -10), onNext(202, -9), onNext(203, -8) ]); t.end(); }); RxJS-4.1.0/src/modular/test/reduce.js000066400000000000000000000125071266736161100173760ustar00rootroot00000000000000'use strict'; function add(x, y) { return x + y; } var test = require('tape'); var Observable = require('../observable'); var EmptyError = require('../internal/errors').EmptyError; var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ reduce: require('../observable/reduce') }); test('Observable#reduce with seed empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.reduce(add, 42); }); reactiveAssert(t, results.messages, [ onNext(250, 42), onCompleted(250) ]); t.end(); }); test('Observable#reduce with seed return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 24), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.reduce(add, 42); }); reactiveAssert(t, results.messages, [ onNext(250, 42 + 24), onCompleted(250) ]); t.end(); }); test('Observable#reduce with seed throws error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 24), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.reduce(function () { throw error; }, 42); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#reduce with seed throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.reduce(add, 42); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#reduce with seed never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.reduce(add, 42); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#reduce with seed range', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 0), onNext(220, 1), onNext(230, 2), onNext(240, 3), onNext(250, 4), onCompleted(260) ); var results = scheduler.startScheduler(function () { return xs.reduce(add, 42); }); reactiveAssert(t, results.messages, [ onNext(260, 10 + 42), onCompleted(260) ]); t.end(); }); test('Observable#reduce without seed empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.reduce(add); }); reactiveAssert(t, results.messages, [ onError(250, function (n) { return n.error instanceof EmptyError; }) ]); t.end(); }); test('Observable#reduce without seed return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 24), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.reduce(add); }); reactiveAssert(t, results.messages, [ onNext(250, 24), onCompleted(250) ]); t.end(); }); test('Observable#reduce without seed throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.reduce(add); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#reduce without seed never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.reduce(add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#reduce without seed range', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 0), onNext(220, 1), onNext(230, 2), onNext(240, 3), onNext(250, 4), onCompleted(260) ); var results = scheduler.startScheduler(function () { return xs.reduce(add); }); reactiveAssert(t, results.messages, [ onNext(260, 10), onCompleted(260) ]); t.end(); }); test('Observable#reduce without seed throws error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 24), onNext(220, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.reduce(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/refcountdisposable.js000066400000000000000000000036001266736161100220140ustar00rootroot00000000000000'use strict'; var test = require('tape'); var RefCountDisposable = require('../refcountdisposable'); function BooleanDisposable() { this.isDisposed = false; } BooleanDisposable.prototype.dispose = function () { !this.isDisposed && (this.isDisposed = true); }; test('RefCountDisposable single reference', function (t) { var d = new BooleanDisposable(); var r = new RefCountDisposable(d); t.notOk(d.isDisposed, 'should not be disposed'); r.dispose(); t.ok(d.isDisposed, 'should be disposed'); r.dispose(); t.ok(d.isDisposed, 'should still be disposed'); t.end(); }); test('RefCountDisposable ref counting', function (t) { var d = new BooleanDisposable(); var r = new RefCountDisposable(d); t.notOk(d.isDisposed, 'should not be disposed'); var d1 = r.getDisposable(); var d2 = r.getDisposable(); t.notOk(d.isDisposed, 'after two getDisposable() calls should not be disposed'); d1.dispose(); t.notOk(d.isDisposed, 'after one dispose() should not be disposed'); d2.dispose(); t.notOk(d.isDisposed, 'after two dispose() should be disposed'); r.dispose(); t.ok(d.isDisposed, 'the outer should be disposed'); t.ok(r.isDisposed, 'the ref counted should be disposed'); var d3 = r.getDisposable(); // CHECK d3.dispose(); t.end(); }); test('RefCountDisposable primary disposes first', function (t) { var d = new BooleanDisposable(); var r = new RefCountDisposable(d); t.notOk(d.isDisposed, 'should not be disposed after creation'); var d1 = r.getDisposable(); var d2 = r.getDisposable(); t.notOk(d.isDisposed, 'should not be disposed after two getDisposable() calls'); d1.dispose(); t.notOk(d.isDisposed, 'should not be disposed after one dispose() call'); r.dispose(); t.notOk(d.isDisposed, 'should not dispose outer if inner has refs'); d2.dispose(); t.ok(d.isDisposed, 'should dispose outer if dispose() called twice'); t.end(); }); RxJS-4.1.0/src/modular/test/repeat.js000066400000000000000000000206251266736161100174070ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ create: require('../observable/create'), just: require('../observable/just'), repeat: require('../observable/repeatvalue'), 'throw': require('../observable/throw') }); Observable.addToPrototype({ repeat: require('../observable/repeat') }); test('Observable#repeat value count zero', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.repeat(42, 0, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable#repeat value count one', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.repeat(42, 1, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 42), onCompleted(202) ]); t.end(); }); test('Observable#repeat value count ten', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.repeat(42, 10, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 42), onNext(202, 42), onNext(203, 42), onNext(204, 42), onNext(205, 42), onNext(206, 42), onNext(207, 42), onNext(208, 42), onNext(209, 42), onNext(210, 42), onCompleted(211) ]); t.end(); }); test('Observable#repeat value count dispose', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.repeat(42, 10, scheduler); }, { disposed: 207 }); reactiveAssert(t, results.messages, [ onNext(201, 42), onNext(202, 42), onNext(203, 42), onNext(204, 42), onNext(205, 42), onNext(206, 42) ]); t.end(); }); test('Observable#repeat value', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.repeat(42, -1, scheduler); }, { disposed: 207 }); reactiveAssert(t, results.messages, [ onNext(201, 42), onNext(202, 42), onNext(203, 42), onNext(204, 42), onNext(205, 42), onNext(206, 42) ]); t.end(); }); function noop() { } test('Observable#repeat Observable basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.repeat(); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onNext(550, 1), onNext(600, 2), onNext(650, 3), onNext(800, 1), onNext(850, 2), onNext(900, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450), subscribe(450, 700), subscribe(700, 950), subscribe(950, 1000) ]); t.end(); }); test('Observable#repeat Observable infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3)); var results = scheduler.startScheduler(function () { return xs.repeat(); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#repeat Observable error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onError(250, error)); var results = scheduler.startScheduler(function () { return xs.repeat(); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onError(450, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#repeat Observable throws', function (t) { var scheduler1 = new TestScheduler(); var xs = Observable.just(1, scheduler1).repeat(); xs.subscribe(function () { throw new Error(); }); t.throws(function () { scheduler1.start(); }); var scheduler2 = new TestScheduler(); var ys = Observable['throw'](new Error(), scheduler2).repeat(); ys.subscribe(noop, function () { throw new Error(); }); t.throws(function () { scheduler2.start(); }); var scheduler3 = new TestScheduler(); var zs = Observable.just(1, scheduler3).repeat(); var d = zs.subscribe(noop, noop, function () { throw new Error(); }); scheduler3.scheduleAbsolute(null, 210, function () { d.dispose(); }); scheduler3.start(); var xss = Observable.create(function () { throw new Error(); }).repeat(); t.throws(function () { xss.subscribe(); }); t.end(); }); test('Observable#repeat Observable repeat count Basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(5, 1), onNext(10, 2), onNext(15, 3), onCompleted(20)); var results = scheduler.startScheduler(function () { return xs.repeat(3); }); reactiveAssert(t, results.messages, [ onNext(205, 1), onNext(210, 2), onNext(215, 3), onNext(225, 1), onNext(230, 2), onNext(235, 3), onNext(245, 1), onNext(250, 2), onNext(255, 3), onCompleted(260) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220), subscribe(220, 240), subscribe(240, 260) ]); t.end(); }); test('Observable#repeat Observable repeat count dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(5, 1), onNext(10, 2), onNext(15, 3), onCompleted(20)); var results = scheduler.startScheduler(function () { return xs.repeat(3); }, { disposed: 231 }); reactiveAssert(t, results.messages, [ onNext(205, 1), onNext(210, 2), onNext(215, 3), onNext(225, 1), onNext(230, 2) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220), subscribe(220, 231) ]); t.end(); }); test('Observable#repeat Observable repeat count infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3) ); var results = scheduler.startScheduler(function () { return xs.repeat(3); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#repeat Observable repeat count error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.repeat(3); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onError(450, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#repeat Observable repeat count throws', function (t) { var scheduler1 = new TestScheduler(); var xs = Observable.just(1, scheduler1).repeat(3); xs.subscribe(function () { throw new Error(); }); t.throws(function () { return scheduler1.start(); }); var scheduler2 = new TestScheduler(); var ys = Observable['throw'](new Error(), scheduler2).repeat(3); ys.subscribe(noop, function () { throw new Error(); }); t.throws(function () { scheduler2.start(); }); var scheduler3 = new TestScheduler(); var zs = Observable.just(1, scheduler3).repeat(100); var d = zs.subscribe(noop, noop, function () { throw new Error(); }); scheduler3.scheduleAbsolute(null, 10, function () { d.dispose(); }); scheduler3.start(); var xss = Observable.create(function () { throw new Error(); }).repeat(3); t.throws(function () { xss.subscribe(); }); t.end(); }); RxJS-4.1.0/src/modular/test/repeatwhen.js000066400000000000000000000131431266736161100202660ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ empty: require('../observable/empty'), never: require('../observable/never') }); Observable.addToPrototype({ repeatWhen: require('../observable/repeatwhen'), scan: require('../observable/scan'), takeWhile: require('../observable/takewhile') }); test('Observable#repeatWhen never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function () { return Observable.empty(scheduler); }); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#repeatWhen Observable never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function () { return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#repeatWhen Observable never complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function () { return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#repeatWhen Observable Empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function() { return Observable.empty(scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onCompleted(450) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#repeatWhen Observable Next Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onError(30, error), onCompleted(40) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function(attempts) { return attempts.scan(function(count) { if(++count === 2) { throw error; } return count; }, 0); // returning any nexting observable should cause a continue }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onError(230, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#repeatWhen Observable complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onCompleted(30) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function() { return Observable.empty(scheduler); // a completing observable completes }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#repeatWhen Observable next complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onCompleted(30) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function(attempts) { return attempts.scan(function(count) { return count + 1; }, 0).takeWhile(function(count) { return count < 2; }); // returning any nexting observable should cause a continue }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(240, 1), onNext(250, 2), onCompleted(260) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230), subscribe(230, 260) ]); t.end(); }); test('Observable#repeatWhen Observable infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onCompleted(30) ); var results = scheduler.startScheduler(function () { return xs.repeatWhen(function(){ return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); RxJS-4.1.0/src/modular/test/replay.js000066400000000000000000000510171266736161100174220ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe, created = ReactiveTest.created, disposed = ReactiveTest.disposed; Observable.addToObject({ never: require('../observable/never') }); Observable.addToPrototype({ repeat: require('../observable/repeat'), replay: require('../observable/replay'), take: require('../observable/take') }); test('Observable#replay count basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, 3, null, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 5), onNext(452, 6), onNext(453, 7), onNext(521, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#replay count error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, 3, null, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 5), onNext(452, 6), onNext(453, 7), onNext(521, 11), onNext(561, 20), onError(601, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#replay count complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, 3, null, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 5), onNext(452, 6), onNext(453, 7), onNext(521, 11), onNext(561, 20), onCompleted(601) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#replay count dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600)); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, 3, null, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, 475, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 5), onNext(452, 6), onNext(453, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#replay count multiple connections', function (t) { var xs = Observable.never(); var ys = xs.replay(null, 3); var connection1 = ys.connect(); var connection2 = ys.connect(); t.ok(connection1 === connection2); connection1.dispose(); connection2.dispose(); var connection3 = ys.connect(); t.ok(connection1 !== connection3); t.end(); }); test('Observable#replay count function zip complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.replay(function (_xs) { return _xs.take(6).repeat(); }, 3, null, scheduler); }, {disposed: 610 }); reactiveAssert(t, results.messages, [ onNext(221, 3), onNext(281, 4), onNext(291, 1), onNext(341, 8), onNext(361, 5), onNext(371, 6), onNext(372, 8), onNext(373, 5), onNext(374, 6), onNext(391, 7), onNext(411, 13), onNext(431, 2), onNext(432, 7), onNext(433, 13), onNext(434, 2), onNext(451, 9), onNext(521, 11), onNext(561, 20), onNext(562, 9), onNext(563, 11), onNext(564, 20), onNext(602, 9), onNext(603, 11), onNext(604, 20), onNext(606, 9), onNext(607, 11), onNext(608, 20) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#replay count function zip error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.startScheduler(function () { return xs.replay(function (_xs) { return _xs.take(6).repeat(); }, 3, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(221, 3), onNext(281, 4), onNext(291, 1), onNext(341, 8), onNext(361, 5), onNext(371, 6), onNext(372, 8), onNext(373, 5), onNext(374, 6), onNext(391, 7), onNext(411, 13), onNext(431, 2), onNext(432, 7), onNext(433, 13), onNext(434, 2), onNext(451, 9), onNext(521, 11), onNext(561, 20), onNext(562, 9), onNext(563, 11), onNext(564, 20), onError(601, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#replay count function zip dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.replay(function (_xs) { return _xs.take(6).repeat(); }, 3, null, scheduler); }, { disposed: 470 }); reactiveAssert(t, results.messages, [ onNext(221, 3), onNext(281, 4), onNext(291, 1), onNext(341, 8), onNext(361, 5), onNext(371, 6), onNext(372, 8), onNext(373, 5), onNext(374, 6), onNext(391, 7), onNext(411, 13), onNext(431, 2), onNext(432, 7), onNext(433, 13), onNext(434, 2), onNext(451, 9) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 470) ]); t.end(); }); test('Observable#replay time basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, null, 150, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 8), onNext(452, 5), onNext(453, 6), onNext(454, 7), onNext(521, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#replay time error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, null, 75, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 7), onNext(521, 11), onNext(561, 20), onError(601, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#replay time complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600)); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, null, 85, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, disposed, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 6), onNext(452, 7), onNext(521, 11), onNext(561, 20), onCompleted(601) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 600) ]); t.end(); }); test('Observable#replay time dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.createObserver(); var ys; var subscription; var connection; scheduler.scheduleAbsolute(null, created, function () { ys = xs.replay(null, null, 100, scheduler); }); scheduler.scheduleAbsolute(null, 450, function () { subscription = ys.subscribe(results); }); scheduler.scheduleAbsolute(null, 475, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 400, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 500, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 550, function () { connection.dispose(); }); scheduler.scheduleAbsolute(null, 650, function () { connection = ys.connect(); }); scheduler.scheduleAbsolute(null, 800, function () { connection.dispose(); }); scheduler.start(); reactiveAssert(t, results.messages, [ onNext(451, 5), onNext(452, 6), onNext(453, 7) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(300, 400), subscribe(500, 550), subscribe(650, 800) ]); t.end(); }); test('Observable#replay time multiple connections', function (t) { var xs = Observable.never(); var ys = xs.replay(null, null, 100); var connection1 = ys.connect(); var connection2 = ys.connect(); t.ok(connection1 === connection2); connection1.dispose(); connection2.dispose(); var connection3 = ys.connect(); t.ok(connection1 !== connection3); t.end(); }); test('Observable#replay time function zip complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.replay(function (_xs) { return _xs.take(6).repeat(); }, null, 50, scheduler); }, { disposed: 610 }); reactiveAssert(t, results.messages, [ onNext(221, 3), onNext(281, 4), onNext(291, 1), onNext(341, 8), onNext(361, 5), onNext(371, 6), onNext(372, 8), onNext(373, 5), onNext(374, 6), onNext(391, 7), onNext(411, 13), onNext(431, 2), onNext(432, 7), onNext(433, 13), onNext(434, 2), onNext(451, 9), onNext(521, 11), onNext(561, 20), onNext(562, 11), onNext(563, 20), onNext(602, 20), onNext(604, 20), onNext(606, 20), onNext(608, 20) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#replay time function zip error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onError(600, error) ); var results = scheduler.startScheduler(function () { return xs.replay(function (_xs) { return _xs.take(6).repeat(); }, null, 50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(221, 3), onNext(281, 4), onNext(291, 1), onNext(341, 8), onNext(361, 5), onNext(371, 6), onNext(372, 8), onNext(373, 5), onNext(374, 6), onNext(391, 7), onNext(411, 13), onNext(431, 2), onNext(432, 7), onNext(433, 13), onNext(434, 2), onNext(451, 9), onNext(521, 11), onNext(561, 20), onNext(562, 11), onNext(563, 20), onError(601, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#replay time function zip dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 7), onNext(220, 3), onNext(280, 4), onNext(290, 1), onNext(340, 8), onNext(360, 5), onNext(370, 6), onNext(390, 7), onNext(410, 13), onNext(430, 2), onNext(450, 9), onNext(520, 11), onNext(560, 20), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.replay(function (_xs) { return _xs.take(6).repeat(); }, null, 50, scheduler); }, { disposed: 470 }); reactiveAssert(t, results.messages, [ onNext(221, 3), onNext(281, 4), onNext(291, 1), onNext(341, 8), onNext(361, 5), onNext(371, 6), onNext(372, 8), onNext(373, 5), onNext(374, 6), onNext(391, 7), onNext(411, 13), onNext(431, 2), onNext(432, 7), onNext(433, 13), onNext(434, 2), onNext(451, 9) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 470) ]); t.end(); }); RxJS-4.1.0/src/modular/test/replaysubject.js000066400000000000000000000324471266736161100210100ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var ReplaySubject = require('../replaysubject'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; test('ReplaySubject Infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onNext(630, 8), onNext(710, 9), onNext(870, 10), onNext(940, 11), onNext(1020, 12) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(3, 100, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(301, 3), onNext(302, 4), onNext(341, 5), onNext(411, 6), onNext(521, 7) ]); reactiveAssert(t, results2.messages, [ onNext(401, 5), onNext(411, 6), onNext(521, 7), onNext(631, 8) ]); reactiveAssert(t, results3.messages, [ onNext(901, 10), onNext(941, 11) ]); t.end(); }); test('ReplaySubject Infinite 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(280, -1), onNext(290, -2), onNext(340, 5), onNext(410, 6), onNext(520, 7), onNext(630, 8), onNext(710, 9), onNext(870, 10), onNext(940, 11), onNext(1020, 12) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(3, 100, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(301, 4), onNext(302, -1), onNext(303, -2), onNext(341, 5), onNext(411, 6), onNext(521, 7) ]); reactiveAssert(t, results2.messages, [ onNext(401, 5), onNext(411, 6), onNext(521, 7), onNext(631, 8) ]); reactiveAssert(t, results3.messages, [ onNext(901, 10), onNext(941, 11) ]); t.end(); }); test('ReplaySubject Finite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(3, 100, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(301, 3), onNext(302, 4), onNext(341, 5), onNext(411, 6), onNext(521, 7) ]); reactiveAssert(t, results2.messages, [ onNext(401, 5), onNext(411, 6), onNext(521, 7), onCompleted(631) ]); reactiveAssert(t, results3.messages, [ onCompleted(901) ]); t.end(); }); test('ReplaySubject Error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onError(630, error), onNext(640, 9), onCompleted(650), onError(660, new Error(new Error())) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(3, 100, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(301, 3), onNext(302, 4), onNext(341, 5), onNext(411, 6), onNext(521, 7) ]); reactiveAssert(t, results2.messages, [ onNext(401, 5), onNext(411, 6), onNext(521, 7), onError(631, error) ]); reactiveAssert(t, results3.messages, [ onError(901, error) ]); t.end(); }); test('ReplaySubject Canceled', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var subject, subscription, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(3, 100, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ ]); reactiveAssert(t, results2.messages, [ onCompleted(631) ]); reactiveAssert(t, results3.messages, [ onCompleted(901) ]); t.end(); }); test('ReplaySubject Disposed', function (t) { var scheduler = new TestScheduler(); var subject, subscription1, subscription2, subscription3; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(undefined, undefined, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { subscription1 = subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 300, function () { subscription2 = subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 400, function () { subscription3 = subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 500, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 600, function () { subject.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription3.dispose(); }); scheduler.scheduleAbsolute(null, 150, function () { subject.onNext(1); }); scheduler.scheduleAbsolute(null, 250, function () { subject.onNext(2); }); scheduler.scheduleAbsolute(null, 350, function () { subject.onNext(3); }); scheduler.scheduleAbsolute(null, 450, function () { subject.onNext(4); }); scheduler.scheduleAbsolute(null, 550, function () { subject.onNext(5); }); scheduler.scheduleAbsolute(null, 650, function () { t.throws(function () { subject.onNext(6); }); }); scheduler.scheduleAbsolute(null, 750, function () { t.throws(function () { subject.onCompleted(); }); }); scheduler.scheduleAbsolute(null, 850, function () { t.throws(function () { subject.onError(new Error()); }); }); scheduler.scheduleAbsolute(null, 950, function () { t.throws(function () { subject.subscribe(); }); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(201, 1), onNext(251, 2), onNext(351, 3), onNext(451, 4) ]); reactiveAssert(t, results2.messages, [ onNext(301, 1), onNext(302, 2), onNext(351, 3), onNext(451, 4), onNext(551, 5) ]); reactiveAssert(t, results3.messages, [ onNext(401, 1), onNext(402, 2), onNext(403, 3), onNext(451, 4), onNext(551, 5) ]); t.end(); }); test('ReplaySubject Dies out', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onCompleted(580) ); var subject; var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); var results4 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { subject = new ReplaySubject(Number.MAX_VALUE, 100, scheduler); }); scheduler.scheduleAbsolute(null, 200, function () { xs.subscribe(subject); }); scheduler.scheduleAbsolute(null, 300, function () { subject.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subject.subscribe(results2); }); scheduler.scheduleAbsolute(null, 600, function () { subject.subscribe(results3); }); scheduler.scheduleAbsolute(null, 900, function () { subject.subscribe(results4); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(301, 3), onNext(302, 4), onNext(341, 5), onNext(411, 6), onNext(521, 7), onCompleted(581) ]); reactiveAssert(t, results2.messages, [ onNext(401, 5), onNext(411, 6), onNext(521, 7), onCompleted(581) ]); reactiveAssert(t, results3.messages, [ onNext(601, 7), onCompleted(602) ]); reactiveAssert(t, results4.messages, [ onCompleted(901) ]); t.end(); }); RxJS-4.1.0/src/modular/test/retry.js000066400000000000000000000146541266736161100173010ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ create: require('../observable/create'), just: require('../observable/just'), 'throw': require('../observable/throw') }); Observable.addToPrototype({ retry: require('../observable/retry') }); function noop() { } test('Observable#retry Observable basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.retry(); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onCompleted(450) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#retry Observable infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3) ); var results = scheduler.startScheduler(function () { return xs.retry(); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#retry Observable error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.retry(); }, { disposed: 1100 }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onNext(550, 1), onNext(600, 2), onNext(650, 3), onNext(800, 1), onNext(850, 2), onNext(900, 3), onNext(1050, 1) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450), subscribe(450, 700), subscribe(700, 950), subscribe(950, 1100) ]); t.end(); }); test('Observable#retry Observable throws', function (t) { var scheduler1 = new TestScheduler(); var xs = Observable.just(1, scheduler1).retry(); xs.subscribe(function () { throw new Error(); }); t.throws(function () { return scheduler1.start(); }); var scheduler2 = new TestScheduler(); var ys = Observable['throw'](new Error(), scheduler2).retry(); var d = ys.subscribe(noop, function (err) { throw err; }); scheduler2.scheduleAbsolute(null, 210, function () { return d.dispose(); }); scheduler2.start(); var scheduler3 = new TestScheduler(); var zs = Observable.just(1, scheduler3).retry(); zs.subscribe(noop, noop, function () { throw new Error(); }); t.throws(function () { return scheduler3.start(); }); t.end(); }); test('Observable#retry Observable retry count basic', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createColdObservable( onNext(5, 1), onNext(10, 2), onNext(15, 3), onError(20, error) ); var results = scheduler.startScheduler(function () { return xs.retry(3); }); reactiveAssert(t, results.messages, [ onNext(205, 1), onNext(210, 2), onNext(215, 3), onNext(225, 1), onNext(230, 2), onNext(235, 3), onNext(245, 1), onNext(250, 2), onNext(255, 3), onError(260, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220), subscribe(220, 240), subscribe(240, 260) ]); t.end(); }); test('Observable#retry Observable retry count dispose', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createColdObservable( onNext(5, 1), onNext(10, 2), onNext(15, 3), onError(20, error) ); var results = scheduler.startScheduler(function () { return xs.retry(3); }, { disposed: 231 }); reactiveAssert(t, results.messages, [ onNext(205, 1), onNext(210, 2), onNext(215, 3), onNext(225, 1), onNext(230, 2) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 220), subscribe(220, 231) ]); t.end(); }); test('Observable#retry retry count dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3) ); var results = scheduler.startScheduler(function () { return xs.retry(3); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#retry Observable retry count dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.retry(3); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onCompleted(450) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#retry Observable retry count Throws', function (t) { var scheduler1 = new TestScheduler(); var xs = Observable.just(1, scheduler1).retry(3); xs.subscribe(function () { throw new Error(); }); t.throws(function () { return scheduler1.start(); }); var scheduler2 = new TestScheduler(); var ys = Observable['throw'](new Error(), scheduler2).retry(100); var d = ys.subscribe(noop, function (err) { throw err; }); scheduler2.scheduleAbsolute(null, 10, function () { return d.dispose(); }); scheduler2.start(); var scheduler3 = new TestScheduler(); var zs = Observable.just(1, scheduler3).retry(100); zs.subscribe(noop, noop, function () { throw new Error(); }); t.throws(function () { return scheduler3.start(); }); var xss = Observable.create(function () { throw new Error(); }).retry(100); t.throws(function () { return xss.subscribe(); }); t.end(); }); RxJS-4.1.0/src/modular/test/retrywhen.js000066400000000000000000000135431266736161100201570ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ empty: require('../observable/empty'), never: require('../observable/never') }); Observable.addToPrototype({ retryWhen: require('../observable/retrywhen'), scan: require('../observable/scan'), takeWhile: require('../observable/takewhile') }); test('Observable#retryWhen never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function () { return Observable.empty(scheduler); }); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#retryWhen Observable never', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function () { return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#retryWhen Observable never complete', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function () { return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#retryWhen Observable Empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(100, 1), onNext(150, 2), onNext(200, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function() { return Observable.empty(scheduler); }); }); reactiveAssert(t, results.messages, [ onNext(300, 1), onNext(350, 2), onNext(400, 3), onCompleted(450) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#retryWhen Observable Next Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onError(30, error), onCompleted(40) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function(attempts) { return attempts.scan(function(count) { if(++count === 2) { throw error; } return count; }, 0); // returning any nexting observable should cause a continue }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(240, 1), onNext(250, 2), onError(260, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230), subscribe(230, 260) ]); t.end(); }); test('Observable#retryWhen Observable complete', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onError(30, error), onCompleted(40) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function() { return Observable.empty(scheduler); // a completing observable completes }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#retryWhen Observable next complete', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onError(30, error), onCompleted(40) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function(attempts) { return attempts.scan(function(count) { return count + 1; }, 0).takeWhile(function(count) { return count < 2; }); // returning any nexting observable should cause a continue }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(240, 1), onNext(250, 2), onCompleted(260) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230), subscribe(230, 260) ]); t.end(); }); test('Observable#retryWhen Observable infinite', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createColdObservable( onNext(10, 1), onNext(20, 2), onError(30, error), onCompleted(40) ); var results = scheduler.startScheduler(function () { return xs.retryWhen(function(){ return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); RxJS-4.1.0/src/modular/test/sample.js000066400000000000000000000150251266736161100174060ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ sample: require('../observable/sample') }); test('Observable#sample regular', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(260, 4), onNext(300, 5), onNext(350, 6), onNext(380, 7), onCompleted(390) ); var results = scheduler.startScheduler(function () { return xs.sample(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onNext(300, 5), onNext(350, 6), onNext(400, 7), onCompleted(400) ]); t.end(); }); test('Observable#sample error in flight', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(260, 4), onNext(300, 5), onNext(310, 6), onError(330, error) ); var results = scheduler.startScheduler(function () { return xs.sample(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onNext(300, 5), onError(330, error) ]); t.end(); }); test('Observable#sample empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.sample(0, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable#sample Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.sample(0, scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#sample never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.sample(0, scheduler); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#sample sampler simple 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 3), onNext(290, 4), onNext(300, 5), onNext(310, 6), onCompleted(400) ); var ys = scheduler.createHotObservable( onNext(150, ''), onNext(210, 'bar'), onNext(250, 'foo'), onNext(260, 'qux'), onNext(320, 'baz'), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.sample(ys); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onNext(320, 6), onCompleted(500 /* on sampling boundaries only */) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 500) ]); t.end(); }); test('Observable#sample sampler simple 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 3), onNext(290, 4), onNext(300, 5), onNext(310, 6), onNext(360, 7), onCompleted(400) ); var ys = scheduler.createHotObservable( onNext(150, ''), onNext(210, 'bar'), onNext(250, 'foo'), onNext(260, 'qux'), onNext(320, 'baz'), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.sample(ys); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onNext(320, 6), onNext(500, 7), onCompleted(500 /* on sampling boundaries only */) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 500) ]); t.end(); }); test('Observable#sample sampler simple 3', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 3), onNext(290, 4), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(150, ''), onNext(210, 'bar'), onNext(250, 'foo'), onNext(260, 'qux'), onNext(320, 'baz'), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.sample(ys); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onNext(320, 4), onCompleted(320 /* on sampling boundaries only */) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 320) ]); t.end(); }); test('Observable#sample completes if earlier completes', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 3), onNext(290, 4), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(150, ''), onCompleted(210) ); var results = scheduler.startScheduler(function () { return xs.sample(ys); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#sample sampler source throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 3), onNext(290, 4), onNext(300, 5), onNext(310, 6), onError(320, error) ); var ys = scheduler.createHotObservable( onNext(150, ''), onNext(210, 'bar'), onNext(250, 'foo'), onNext(260, 'qux'), onNext(330, 'baz'), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.sample(ys); }); reactiveAssert(t, results.messages, [ onNext(250, 3), onError(320, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 320) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 320) ]); t.end(); }); RxJS-4.1.0/src/modular/test/scan.js000066400000000000000000000134231266736161100170510ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ function add(x, y) { return x + y; } var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ scan: require('../observable/scan') }); test('Observable#scan with seed throws error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 24), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.scan(function () { throw error; }, 42); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#scan with seed never', function (t) { var scheduler = new TestScheduler(); var seed = 42; var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.scan(add, seed); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#scan with seed empty', function (t) { var scheduler = new TestScheduler(); var seed = 42; var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.scan(add, seed); }); reactiveAssert(t, results.messages, [ onNext(250, 42), onCompleted(250) ]); t.end(); }); test('Observable#scan with seed return', function (t) { var scheduler = new TestScheduler(); var seed = 42; var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.scan(add, seed); }); reactiveAssert(t, results.messages, [ onNext(220, seed + 2), onCompleted(250) ]); t.end(); }); test('Observable#scan with seed throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var seed = 42; var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.scan(add, seed); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); test('Observable#scan with seed some data', function (t) { var scheduler = new TestScheduler(); var seed = 1; var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.scan(add, seed); }); reactiveAssert(t, results.messages, [ onNext(210, seed + 2), onNext(220, seed + 2 + 3), onNext(230, seed + 2 + 3 + 4), onNext(240, seed + 2 + 3 + 4 + 5), onCompleted(250) ]); t.end(); }); test('Observable#scan no seed never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.scan(function (acc, x) { return acc + x; }); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#scan no seed empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(onNext(150, 1), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.scan(function (acc, x) { return acc + x; }); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable#scan no seed return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.scan(function (acc, x) { acc === undefined && (acc = 0); return acc + x; }); }); reactiveAssert(t, results.messages, [ onNext(220, 2), onCompleted(250) ]); t.end(); }); test('Observable#scan no seed throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.scan(function (acc, x) { acc === undefined && (acc = 0); return acc + x; }); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); test('Observable#scan no seed some data', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250)); var results = scheduler.startScheduler(function () { return xs.scan(function (acc, x) { acc === undefined && (acc = 0); return acc + x; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 2 + 3), onNext(230, 2 + 3 + 4), onNext(240, 2 + 3 + 4 + 5), onCompleted(250) ]); t.end(); }); test('Observable#scan without seed throws error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.scan(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/scheduler.js000066400000000000000000000112121266736161100200750ustar00rootroot00000000000000'use strict'; var Scheduler = require('../scheduler'); var Disposable = require('../disposable'); var inherits = require('inherits'); var test = require('tape'); function MyScheduler(now) { if (now !== undefined) { this.now = function () { return now; }; } this.waitCycles = 0; Scheduler.call(this); } inherits(MyScheduler, Scheduler); MyScheduler.prototype.schedule = function (state, action) { return action(this, state); }; MyScheduler.prototype._scheduleFuture = function (state, dueTime, action) { var self = this; this.check(function (o) { return action(self, o); }, state, dueTime); this.waitCycles += dueTime; return action(this, state); }; test('scheduler schedule non-recursive', function (t) { var ms = new MyScheduler(); var res = false; ms.scheduleRecursive(null, function () { res = true; }); t.ok(res); t.end(); }); test('scheduler schedule recursive', function (t) { var ms = new MyScheduler(); var i = 0; ms.scheduleRecursive(null, function (_, a) { ++i < 10 && a(); }); t.equal(10, i); t.end(); }); test('scheduler schedule with time non-recursive', function (t) { var now = new Date(); var ms = new MyScheduler(now); var res = false; ms.check = function (a, s, t) { t.equal(t, 0); }; ms.scheduleFuture(null, now, function () { res = true; }); t.ok(res); t.equal(ms.waitCycles, 0); t.end(); }); test('scheduler schedule with absolute time recursive', function (t) { var now = new Date(); var i = 0; var ms = new MyScheduler(now); ms.check = function (a, s, t) { t.equal(t, 0); }; ms.scheduleRecursiveFuture(null, now, function (_, a) { ++i < 10 && a(null, now); }); t.equal(ms.waitCycles, 0); t.equal(10, i); t.end(); }); test('scheduler schedule with relative time non-recursive', function (t) { var now = new Date().getTime(); var ms = new MyScheduler(now); ms.check = function (a, s, t) { t.equal(t, 0); }; var res = false; ms.scheduleRecursiveFuture(null, 0, function () { res = true; }); t.ok(res); t.equal(ms.waitCycles, 0); t.end(); }); test('scheduler schedule with time recursive', function (t) { var now = +new Date(); var i = 0; var ms = new MyScheduler(now); ms.check = function (a, s, tt) { return t.ok(tt < 10); }; ms.scheduleRecursiveFuture(null, 0, function (_, a) { ++i < 10 && a(null, i); }); t.equal(ms.waitCycles, 45); t.equal(10, i); t.end(); }); test('catch builtin swallow shallow', function (t) { var swallow = Scheduler.immediate['catch'](function () { return true; }); swallow.schedule(null, function () { throw new Error('Should be swallowed'); }); t.ok(true); t.end(); }); test('catch builtin swallow recursive', function (t) { var swallow = Scheduler.immediate['catch'](function () { return true; }); swallow.schedule(42, function (self) { return self.schedule(null, function () { new Error('Should be swallowed'); }); }); t.ok(true); t.end(); }); function MyErrorScheduler(onError) { this._onError = onError; Scheduler.call(this); } inherits(MyErrorScheduler, Scheduler); MyErrorScheduler.prototype.schedule = function (state, action) { try { return action(this, state); } catch (e) { this._onError(e); return Disposable.empty; } }; MyErrorScheduler.prototype.schedulePeriodic = function (state, period, action) { Scheduler.immediate.schedule(this, function (_, self) { try { var s = state; for(var i = 0; true; i++) { if (i > 10) { break; } s = action(s); } } catch (e) { self._onError(e); } }); }; test('catch custom unhandled', function (t) { var err; var scheduler = new MyErrorScheduler(function (ex) { err = ex; }); scheduler ['catch'](function () { return true; }) .schedule(null, function () { throw new Error('Should be caught'); }); t.ok(!err); var ex1 = 'error'; scheduler ['catch'](function () { return ex1 instanceof Error; }) .schedule(null, function () { throw ex1; }); t.equal(err, ex1); t.end(); }); test('catch custom periodic caught', function (t) { var err; var scheduler = new MyErrorScheduler(function (ex) { err = ex; }); var catcher = scheduler['catch'](function () { return true; }); catcher.schedulePeriodic(42, 0, function () { throw new Error('Should be caught'); }); t.ok(!err); t.end(); }); test('catch custom periodic uncaught', function (t) { var ex = new Error('Error1'); var err; var scheduler = new MyErrorScheduler(function (e) { err = e; }); var catcher = scheduler['catch'](function (e) { return e instanceof String; }); catcher.schedulePeriodic(42, 0, function () { throw ex; }); t.equal(err, ex); t.end(); }); RxJS-4.1.0/src/modular/test/sequenceequal.js000066400000000000000000000412231266736161100207640ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ sequenceEqual: require('../observable/sequenceequal') }); test('Observable#sequenceEqual equal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onCompleted(720) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys); }); reactiveAssert(t, results.messages, [ onNext(720, true), onCompleted(720) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 720) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 720) ]); t.end(); }); test('Observable#sequenceEqual equal sym', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onCompleted(720) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs); }); reactiveAssert(t, results.messages, [ onNext(720, true), onCompleted(720) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 720) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 720) ]); t.end(); }); test('Observable#sequenceEqual not equal Left', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 0), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onCompleted(720) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys); }); reactiveAssert(t, results.messages, [ onNext(310, false), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 310) ]); t.end(); }); test('Observable#sequenceEqual not equal left sym', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 0), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onCompleted(720) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs); }); reactiveAssert(t, results.messages, [ onNext(310, false), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 310) ]); t.end(); }); test('Observable#sequenceEqual not equal right', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onNext(350, 8) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys); }); reactiveAssert(t, results.messages, [ onNext(510, false), onCompleted(510) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 510) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 510) ]); t.end(); }); test('Observable#sequenceEqual not equal right sym', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onNext(350, 8) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs); }); reactiveAssert(t, results.messages, [ onNext(510, false), onCompleted(510) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 510) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 510) ]); t.end(); }); test('Observable#sequenceEqual not equal 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onNext(490, 8), onNext(520, 9), onNext(580, 10), onNext(600, 11) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onNext(350, 9), onNext(400, 9), onNext(410, 10), onNext(490, 11), onNext(550, 12), onNext(560, 13) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys); }); reactiveAssert(t, results.messages, [ onNext(490, false), onCompleted(490) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 490) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 490) ]); t.end(); }); test('Observable#sequenceEqual not equal 2 sym', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onNext(490, 8), onNext(520, 9), onNext(580, 10), onNext(600, 11) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(280, 4), onNext(300, 5), onNext(330, 6), onNext(340, 7), onNext(350, 9), onNext(400, 9), onNext(410, 10), onNext(490, 11), onNext(550, 12), onNext(560, 13) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs); }); reactiveAssert(t, results.messages, [ onNext(490, false), onCompleted(490) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 490) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 490) ]); t.end(); }); test('Observable#sequenceEqual not equal 3', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onCompleted(330) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(400, 4), onCompleted(420) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys); }); reactiveAssert(t, results.messages, [ onNext(420, false), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#sequenceEqual not equal 3 sym', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onCompleted(330) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(400, 4), onCompleted(420) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs); }); reactiveAssert(t, results.messages, [ onNext(420, false), onCompleted(420) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable#sequenceEqual comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onCompleted(330) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(400, 4), onCompleted(420) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(270, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 270) ]); t.end(); }); test('Observable#sequenceEqual comparer throws sym', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onCompleted(330) ); var ys = scheduler.createHotObservable( onNext(90, 1), onNext(270, 3), onNext(400, 4), onCompleted(420) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(270, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 270) ]); t.end(); }); test('Observable#sequenceEqual not equal 4', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(250, 1), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(290, 1), onNext(310, 2), onCompleted(350) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual(ys); }); reactiveAssert(t, results.messages, [ onNext(310, false), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 310) ]); t.end(); }); test('Observable#sequenceEqual not equal 4 sym', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(250, 1), onCompleted(300) ); var ys = scheduler.createHotObservable( onNext(290, 1), onNext(310, 2), onCompleted(350) ); var results = scheduler.startScheduler(function () { return ys.sequenceEqual(xs); }); reactiveAssert(t, results.messages, [ onNext(310, false), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 310) ]); t.end(); }); // SequenceEqual Array test('Observable#sequenceEqual iterable equal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3, 4, 5, 6, 7]); }); reactiveAssert(t, results.messages, [ onNext(510, true), onCompleted(510) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 510) ]); t.end(); }); test('Observable#sequenceEqual iterable not equal elements', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3, 4, 9, 6, 7]); }); reactiveAssert(t, results.messages, [ onNext(310, false), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); t.end(); }); test('Observable#sequenceEqual iterable comparer equal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3 - 2, 4, 5, 6 + 42, 7 - 6], function (x, y) { return x % 2 === y % 2; }); }); reactiveAssert(t, results.messages, [ onNext(510, true), onCompleted(510) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 510) ]); t.end(); }); test('Observable#sequenceEqual iterable comparer not equal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3 - 2, 4, 5 + 9, 6 + 42, 7 - 6], function (x, y) { return x % 2 === y % 2; }); }); reactiveAssert(t, results.messages, [ onNext(310, false), onCompleted(310) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); t.end(); }); function throwComparer(value, exn) { return function (x, y) { if (x === value) { throw exn; } return x === y; }; } test('Observable#sequenceEqual iterable comparer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3, 4, 5, 6, 7], throwComparer(5, error)); }); reactiveAssert(t, results.messages, [ onError(310, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); t.end(); }); test('Observable#sequenceEqual iterable not equal too long', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3, 4, 5, 6, 7, 8]); }); reactiveAssert(t, results.messages, [ onNext(510, false), onCompleted(510) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 510) ]); t.end(); }); test('Observable#sequenceEqual iterable not equal too short', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onNext(310, 5), onNext(340, 6), onNext(450, 7), onCompleted(510) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3, 4, 5, 6]); }); reactiveAssert(t, results.messages, [ onNext(450, false), onCompleted(450) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 450) ]); t.end(); }); test('Observable#sequenceEqual iterable on error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(190, 2), onNext(240, 3), onNext(290, 4), onError(310, error) ); var results = scheduler.startScheduler(function () { return xs.sequenceEqual([3, 4]); }); reactiveAssert(t, results.messages, [ onError(310, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 310) ]); t.end(); }); RxJS-4.1.0/src/modular/test/serialdisposable.js000066400000000000000000000037241266736161100214550ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var SerialDisposable = require('../serialdisposable'); var Disposable = require('../disposable'); test('SerialDisposable#constructor', function (t) { var m = new SerialDisposable(); t.ok(!m.getDisposable(), 'should not have a disposable'); t.end(); }); test('SerialDisposable replace before dispose()', function (t) { var disp1 = false; var disp2 = false; var m = new SerialDisposable(); var d1 = Disposable.create(function () { disp1 = true; }); m.setDisposable(d1); t.equal(d1, m.getDisposable(), 'should have a disposable set'); t.ok(!disp1, 'should not be disposed'); var d2 = Disposable.create(function () { disp2 = true; }); m.setDisposable(d2); t.equal(d2, m.getDisposable(), 'should have a new disposable set'); t.ok(disp1, 'first should be disposed'); t.ok(!disp2, 'next should not be disposed'); t.end(); }); test('SerialDisposable replace after dispose', function (t) { var disp1 = false; var disp2 = false; var m = new SerialDisposable(); m.dispose(); var d1 = Disposable.create(function () { disp1 = true; }); m.setDisposable(d1); t.equal(null, m.getDisposable(), 'should not have a set disposable after dispose'); t.ok(disp1, 'should be disposed'); var d2 = Disposable.create(function () { disp2 = true; }); m.setDisposable(d2); t.equal(null, m.getDisposable(), 'should not have a set disposable after dispose'); t.ok(disp2, 'should be disposed'); t.end(); }); test('SerialDisposable#dispose', function (t) { var disp = false; var m = new SerialDisposable(); var d = Disposable.create(function () { disp = true; }); m.setDisposable(d); t.equal(d, m.getDisposable(), 'should have set the disposable'); t.ok(!disp, 'should not be disposed before dispose()'); m.dispose(); t.ok(disp, 'should be disposed after dispose()'); t.equal(null, m.getDisposable(), 'should clear the current disposable'); t.end(); }); RxJS-4.1.0/src/modular/test/singleassignmentdisposable.js000066400000000000000000000027631266736161100235520ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var SingleAssignmentDisposable = require('../singleassignmentdisposable'); var Disposable = require('../disposable'); test('SingleAssignmentDisposable setDisposable null', function (t) { var d = new SingleAssignmentDisposable(); d.setDisposable(null); t.equal(null, d.getDisposable(), 'getDisposable should return null'); t.end(); }); test('SingleAssignmentDisposable dispose after set', function (t) { var disposed = false, d = new SingleAssignmentDisposable(), dd = Disposable.create(function () { disposed = true; }); d.setDisposable(dd); t.equal(dd, d.getDisposable(), 'should have set the disposable via setDisposable'); t.ok(!disposed, 'should not be disposed'); d.dispose(); t.ok(disposed, 'should be disposed after dispose()'); d.dispose(); t.ok(disposed, 'should be idempotent after dispose()'); t.end(); }); test('SingleAssignmentDisposable dispose before setDisposable', function (t) { var disposed = false, d = new SingleAssignmentDisposable(), dd = Disposable.create(function () { disposed = true; }); t.ok(!disposed, 'should not be disposed'); d.dispose(); t.ok(!disposed, 'should not be disposed after disposed'); d.setDisposable(dd); t.ok(d.getDisposable() == null, 'should not set disposable'); t.ok(disposed, 'should be disposed after setDisposable'); d.dispose(); t.ok(disposed, 'calling dispose should dispose idempotent'); t.end(); }); RxJS-4.1.0/src/modular/test/skip.js000066400000000000000000000206411266736161100170730ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ skip: require('../observable/skip') }); test('Observable#skip complete after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.skip(20); }); reactiveAssert(t, results.messages, [ onCompleted(690) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip complete same', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.skip(17); }); reactiveAssert(t, results.messages, [ onCompleted(690) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip complete before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.skip(10); }); reactiveAssert(t, results.messages, [ onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip complete zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.skip(0); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip error after', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, error) ); var results = scheduler.startScheduler(function () { return xs.skip(20); }); reactiveAssert(t, results.messages, [ onError(690, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip error same', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, error) ); var results = scheduler.startScheduler(function () { return xs.skip(17); }); reactiveAssert(t, results.messages, [ onError(690, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip error before', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, error) ); var results = scheduler.startScheduler(function () { return xs.skip(3); }); reactiveAssert(t, results.messages, [ onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#skip dispose before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10) ); var results = scheduler.startScheduler(function () { return xs.skip(3); }, { disposed: 250 }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#skip dispose after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10) ); var results = scheduler.startScheduler(function () { return xs.skip(3); }, { disposed: 400 }); reactiveAssert(t, results.messages, [ onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); RxJS-4.1.0/src/modular/test/skiplast.js000066400000000000000000000154611266736161100177630ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ skipLast: require('../observable/skiplast') }); test('Observable#skipLast zero completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.skipLast(0); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#skipLast zero error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.skipLast(0); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#skipLast zero disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.skipLast(0); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#skipLast one completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.skipLast(1); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onNext(270, 3), onNext(310, 4), onNext(360, 5), onNext(380, 6), onNext(410, 7), onNext(590, 8), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#skipLast one error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.skipLast(1); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onNext(270, 3), onNext(310, 4), onNext(360, 5), onNext(380, 6), onNext(410, 7), onNext(590, 8), onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#skipLast one disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.skipLast(1); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onNext(270, 3), onNext(310, 4), onNext(360, 5), onNext(380, 6), onNext(410, 7), onNext(590, 8) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#skipLast three completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.skipLast(3); }); reactiveAssert(t, results.messages, [ onNext(310, 2), onNext(360, 3), onNext(380, 4), onNext(410, 5), onNext(590, 6), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#skipLast three error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.skipLast(3); }); reactiveAssert(t, results.messages, [ onNext(310, 2), onNext(360, 3), onNext(380, 4), onNext(410, 5), onNext(590, 6), onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#skipLast three disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.skipLast(3); }); reactiveAssert(t, results.messages, [ onNext(310, 2), onNext(360, 3), onNext(380, 4), onNext(410, 5), onNext(590, 6) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/skiplastwithtime.js000066400000000000000000000100341266736161100215250ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ skipLastWithTime: require('../observable/skiplastwithtime') }); test('Observable#skipLastWithTime zero 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipLastWithTime zero 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipLastWithTime some 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(15, scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, 1), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipLastWithTime some 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onNext(270, 7), onNext(280, 8), onNext(290, 9), onCompleted(300) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(45, scheduler); }); reactiveAssert(t, results.messages, [ onNext(260, 1), onNext(270, 2), onNext(280, 3), onNext(290, 4), onNext(300, 5), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#skipLastWithTime some all', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(45, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipLastWithTime error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(45, scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#skipLastWithTime never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.skipLastWithTime(50, scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/skipuntil.js000066400000000000000000000110711266736161100201440ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ never: require('../observable/never') }); Observable.addToPrototype({ skipUntil: require('../observable/skipuntil') }); test('Observable#skipUntil some data next', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = scheduler.createHotObservable( onNext(150, 1), onNext(225, 99), onCompleted(230) ); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, [ onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable#skipUntil some data error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = scheduler.createHotObservable( onNext(150, 1), onError(225, error) ); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, [ onError(225, error) ]); t.end(); }); test('Observable#skipUntil some data empty', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = scheduler.createHotObservable( onNext(150, 1), onCompleted(225) ); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#skipUntil never next', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = scheduler.createHotObservable( onNext(150, 1), onNext(225, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#skipUntil never error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var l = Observable.never(); var r = scheduler.createHotObservable( onNext(150, 1), onError(225, error)); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, [ onError(225, error) ]); t.end(); }); test('Observable#skipUntil some data never', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = Observable.never(); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#skipUntil never empty', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = scheduler.createHotObservable( onNext(150, 1), onCompleted(225) ); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#skipUntil never never', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = Observable.never(); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#skipUntil has completed causes disposal', function (t) { var scheduler = new TestScheduler(); var disposed = false; var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = Observable.create(function () { return function () { disposed = true; }; }); var results = scheduler.startScheduler(function () { return l.skipUntil(r); }); reactiveAssert(t, results.messages, []); t.ok(disposed); t.end(); }); RxJS-4.1.0/src/modular/test/skipuntilwithtime.js000066400000000000000000000072211266736161100217210ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ skipUntilWithTime: require('../observable/skipuntilwithtime') }); test('Observable#skipUntilWithTime zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipUntilWithTime(new Date(0), scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipUntilWithTime late', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipUntilWithTime(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipUntilWithTime error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.skipUntilWithTime(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#skipUntilWithTime never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(); var results = scheduler.startScheduler(function () { return xs.skipUntilWithTime(new Date(250), scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#skipUntil twice 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return xs .skipUntilWithTime(new Date(215), scheduler) .skipUntilWithTime(new Date(230), scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.end(); }); test('Observable#skipUntil twice 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return xs .skipUntilWithTime(new Date(230), scheduler) .skipUntilWithTime(new Date(215), scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.end(); }); RxJS-4.1.0/src/modular/test/skipwhile.js000066400000000000000000000174431266736161100201320ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ skipWhile: require('../observable/skipwhile') }); function isPrime(i) { if (i <= 1) { return false; } var max = Math.floor(Math.sqrt(i)); for (var j = 2; j <= max; ++j) { if (i % j === 0) { return false; } } return true; } test('Observable#skipWhile complete before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onCompleted(330), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onCompleted(330) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 330) ]); t.equal(4, invoked); t.end(); }); test('Observable#skipWhile complete after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(6, invoked); t.end(); }); test('Observable#skipWhile error before', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onError(270, error), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onError(270, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.equal(2, invoked); t.end(); }); test('Observable#skipWhile error after', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onError(600, error) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(6, invoked); t.end(); }); test('Observable#skipWhile dispose before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }, { disposed: 300 }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.equal(3, invoked); t.end(); }); test('Observable#skipWhile dispose after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }, { disposed: 470 }); reactiveAssert(t, results.messages, [ onNext(390, 4), onNext(410, 17), onNext(450, 8) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 470) ]); t.equal(6, invoked); t.end(); }); test('Observable#skipWhile zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(205, 100), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(205, 100), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.equal(1, invoked); t.end(); }); test('Observable#skipWhile throw', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var error = new Error(); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x) { invoked++; if (invoked === 3) { throw error; } return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onError(290, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 290) ]); t.equal(3, invoked); t.end(); }); test('Observable#skipWhile index', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.skipWhile(function (x, i) { return i < 5; }); }); reactiveAssert(t, results.messages, [ onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); RxJS-4.1.0/src/modular/test/skipwithtime.js000066400000000000000000000076721266736161100206570ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ skipWithTime: require('../observable/skipwithtime') }); test('Observable#skipWithTime zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipWithTime some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.skipWithTime(15, scheduler); }); reactiveAssert(t, results.messages, [ onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipWithTime late', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230)); var results = scheduler.startScheduler(function () { return xs.skipWithTime(50, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#skipWithTime error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.skipWithTime(50, scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#skipWithTime never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(); var results = scheduler.startScheduler(function () { return xs.skipWithTime(50, scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#skipWithTime twice 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return xs.skipWithTime(15, scheduler).skipWithTime(30, scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.end(); }); test('Observable#skipWithTime twice 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return xs.skipWithTime(30, scheduler).skipWithTime(15, scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.end(); }); RxJS-4.1.0/src/modular/test/slice.js000066400000000000000000000127031266736161100172240ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ slice: require('../observable/slice') }); test('Observable#slice arguments', function (t) { t.throws(function () { Observable.of(1,2,3).slice(-1); }); t.throws(function () { Observable.of(1,2,3).slice(0, -1); }); t.throws(function () { Observable.of(1,2,3).slice(25, 1); }); t.end(); }); test('Observable#slice never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.slice(0); }); reactiveAssert(t, results.messages, [ ]); t.end(); }); test('Observable#slice empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); t.end(); }); test('Observable#slice error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.slice(0); }); reactiveAssert(t, results.messages, [ onError(250, error) ]); t.end(); }); test('Observable#slice single no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); t.end(); }); test('Observable#slice single end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0, 1); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(220) ]); t.end(); }); test('Observable#slice multiple no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable#slice multiple one no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(1); }); reactiveAssert(t, results.messages, [ onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable#slice multiple no end error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, error), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onError(230, error) ]); t.end(); }); test('Observable#slice multiple end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0, 3); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(240) ]); t.end(); }); test('Observable#slice multiple one end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(1, 3); }); reactiveAssert(t, results.messages, [ onNext(220, 3), onNext(230, 4), onCompleted(240) ]); t.end(); }); test('Observable#slice multiple end error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onError(230, error), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.slice(0, 3); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onError(230, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/some.js000066400000000000000000000074611266736161100170750ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ some: require('../observable/some') }); test('Observable#some predicate empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#some predicate return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(210, true), onCompleted(210) ]); t.end(); }); test('Observable#some predicate return not match', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#some predicate SomeNoneMatch', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onNext(220, -3), onNext(230, -4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(250, false), onCompleted(250) ]); t.end(); }); test('Observable#some predicate some match', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onNext(220, 3), onNext(230, -4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onNext(220, true), onCompleted(220) ]); t.end(); }); test('Observable#some predicate throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#some predicate throws error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, -2), onNext(220, 3), onNext(230, -4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.some(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#some predicate never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.some(function (x) { return x > 0; }); }); reactiveAssert(t, results.messages, []); t.end(); }); RxJS-4.1.0/src/modular/test/start.js000066400000000000000000000047101266736161100172610ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ start: require('../observable/start'), startAsync: require('../observable/startAsync') }); function noop() {} // Polyfilling require('lie/polyfill'); test('Observable.startAsync', function (t) { var source = Observable.startAsync(function () { return new Promise(function (res) { res(42); }); }); source.subscribe(function (x) { t.equal(42, x); t.end(); }); }); test('Observable.startAsync Error', function (t) { var source = Observable.startAsync(function () { return new Promise(function (res, rej) { rej(42); }); }); source.subscribe(noop, function (err) { t.equal(42, err); t.end(); }); }); test('Observable.start action 2', function (t) { var scheduler = new TestScheduler(); var done = false; var results = scheduler.startScheduler(function () { return Observable.start(function () { done = true; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(200, undefined), onCompleted(200) ]); t.ok(done); t.end(); }); test('Observable.start function 2', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.start(function () { return 1; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onCompleted(200) ]); t.end(); }); test('Observable.start with error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.start(function () { throw error; }, null, scheduler); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); test('Observable.start with context', function (t) { var context = { value: 42 }; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.start(function () { return this.value; }, context, scheduler); }); reactiveAssert(t, results.messages, [ onNext(200, 42), onCompleted(200) ]); t.end(); }); RxJS-4.1.0/src/modular/test/startwith.js000066400000000000000000000066741266736161100201700ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Scheduler = require('../scheduler'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ startWith: require('../observable/startwith') }); test('Observable#startWith normal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.startWith(1); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onNext(220, 2), onCompleted(250) ]); t.end(); }); test('Observable#startWith never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.startWith(scheduler, 1); }); reactiveAssert(t, results.messages, [ onNext(201, 1) ]); t.end(); }); test('Observable#startWith empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.startWith(scheduler, 1); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onCompleted(250) ]); t.end(); }); test('Observable#startWith one', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.startWith(scheduler, 1); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(220, 2), onCompleted(250) ]); t.end(); }); test('Observable#startWith multiple', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.startWith(scheduler, 1, 2, 3); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3), onNext(220, 4), onCompleted(250) ]); t.end(); }); test('Observable#startWith error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.startWith(scheduler, 1, 2, 3); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(202, 2), onNext(203, 3), onError(250, error) ]); t.end(); }); test('Observable#startWith is unaffected by currentThread scheduler', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(250) ); var results; Scheduler.queue.schedule(null, function () { results = scheduler.startScheduler(function () { return xs.startWith(scheduler, 1); }); }); reactiveAssert(t, results.messages, [ onNext(201, 1), onNext(220, 2), onCompleted(250) ]); t.end(); }); RxJS-4.1.0/src/modular/test/stopandwait.js000066400000000000000000000074711266736161100204700ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ controlled: require('../observable/controlled') }); test('ControlledObservable#stopAndWait never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).stopAndWait(scheduler); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('ControlledObservable#stopAndWait empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).stopAndWait(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('ControlledObservable#stopAndWait basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).stopAndWait(scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('ControlledObservable#stopAndWait error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).stopAndWait(scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('ControlledObservable#stopAndWait infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).stopAndWait(scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('ControlledObservable#windowed disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onNext(250) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).stopAndWait(scheduler); }, { disposed: 235 }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 235) ]); t.end(); }); RxJS-4.1.0/src/modular/test/subject.js000066400000000000000000000200531266736161100175610ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Subject = require('../subject'); var Observable = require('../observable'); var Observer = require('../observer'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observer.addToObject({ create: require('../observer/create') }); Observable.addToObject({ just: require('../observable/just') }); Subject.addToObject({ create: require('../subject/create') }); test('Subject infinite', function (t) { var s, subscription, subscription1, subscription2, subscription3; var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onNext(630, 8), onNext(710, 9), onNext(870, 10), onNext(940, 11), onNext(1020, 12) ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { s = new Subject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(s); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = s.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = s.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = s.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(340, 5), onNext(410, 6), onNext(520, 7) ]); reactiveAssert(t, results2.messages, [ onNext(410, 6), onNext(520, 7), onNext(630, 8) ]); reactiveAssert(t, results3.messages, [ onNext(940, 11) ]); t.end(); }); test('Subject finite', function (t) { var s, subscription, subscription1, subscription2, subscription3; var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { s = new Subject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(s); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = s.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = s.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = s.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(340, 5), onNext(410, 6), onNext(520, 7) ]); reactiveAssert(t, results2.messages, [ onNext(410, 6), onNext(520, 7), onCompleted(630) ]); reactiveAssert(t, results3.messages, [ onCompleted(900) ]); t.end(); }); test('Subject error', function (t) { var s, subscription, subscription1, subscription2, subscription3; var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 1), onNext(110, 2), onNext(220, 3), onNext(270, 4), onNext(340, 5), onNext(410, 6), onNext(520, 7), onError(630, error), onNext(640, 9), onCompleted(650), onError(660, 'foo') ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { s = new Subject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(s); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = s.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = s.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = s.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, [ onNext(340, 5), onNext(410, 6), onNext(520, 7) ]); reactiveAssert(t, results2.messages, [ onNext(410, 6), onNext(520, 7), onError(630, error) ]); reactiveAssert(t, results3.messages, [ onError(900, error) ]); t.end(); }); test('Subject canceled', function (t) { var s, subscription, subscription1, subscription2, subscription3; var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(630), onNext(640, 9), onCompleted(650), onError(660, new Error()) ); var results1 = scheduler.createObserver(); var results2 = scheduler.createObserver(); var results3 = scheduler.createObserver(); scheduler.scheduleAbsolute(null, 100, function () { s = new Subject(); }); scheduler.scheduleAbsolute(null, 200, function () { subscription = xs.subscribe(s); }); scheduler.scheduleAbsolute(null, 1000, function () { subscription.dispose(); }); scheduler.scheduleAbsolute(null, 300, function () { subscription1 = s.subscribe(results1); }); scheduler.scheduleAbsolute(null, 400, function () { subscription2 = s.subscribe(results2); }); scheduler.scheduleAbsolute(null, 900, function () { subscription3 = s.subscribe(results3); }); scheduler.scheduleAbsolute(null, 600, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 700, function () { subscription2.dispose(); }); scheduler.scheduleAbsolute(null, 800, function () { subscription1.dispose(); }); scheduler.scheduleAbsolute(null, 950, function () { subscription3.dispose(); }); scheduler.start(); reactiveAssert(t, results1.messages, []); reactiveAssert(t, results2.messages, [onCompleted(630)]); reactiveAssert(t, results3.messages, [onCompleted(900)]); t.end(); }); test('Subject.create', function (t) { var _x, _ex, done = false; var v = Observer.create( function (x) { _x = x; }, function (ex) { _ex = ex; }, function () { done = true; }); var o = Observable.just(42); var s = Subject.create(v, o); s.subscribe(function (x) { _x = x; }); t.equal(42, _x); s.onNext(21); var e = new Error(); s.onError(e); t.equal(e, _ex); s.onCompleted(); t.ok(!done); t.end(); }); RxJS-4.1.0/src/modular/test/subscribeon.js000066400000000000000000000043301266736161100204400ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ subscribeOn: require('../observable/subscribeon') }); test('Observable#subscribeOn normal', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.subscribeOn(scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(201, 251) ]); t.end(); }); test('Observable#subscribeOn error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.subscribeOn(scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(201, 211) ]); t.end(); }); test('Observable#subscribeOn empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.subscribeOn(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(201, 251) ]); t.end(); }); test('Observable#subscribeOn never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.subscribeOn(scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(201, 1001) ]); t.end(); }); RxJS-4.1.0/src/modular/test/sum.js000066400000000000000000000055131266736161100167320ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ sum: require('../observable/sum') }); test('Observable#sum number empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.sum(); }); reactiveAssert(t, results.messages, [ onNext(250, 0), onCompleted(250) ]); t.end(); }); test('Observable#sum number return', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.sum(); }); reactiveAssert(t, results.messages, [ onNext(250, 2), onCompleted(250) ]); t.end(); }); test('Observable#sum number some', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.sum(); }); reactiveAssert(t, results.messages, [ onNext(250, 2 + 3 + 4), onCompleted(250) ]); t.end(); }); test('Observable#sum number throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.sum(); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#sum number never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.sum(); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#sum with selector regular number', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 'fo'), onNext(220, 'b'), onNext(230, 'qux'), onCompleted(240) ); var results = scheduler.startScheduler(function () { return xs.sum(function (x) { return x.length; }); }); reactiveAssert(t, results.messages, [ onNext(240, 6), onCompleted(240) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 240) ]); t.end(); }); RxJS-4.1.0/src/modular/test/switch.js000066400000000000000000000121621266736161100174250ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ fromArray: require('../observable/fromarray') }); Observable.addToPrototype({ 'switch': require('../observable/switch') }); test('Observable#switch Promise', function (t) { var sources = Observable.fromArray([ Promise.resolve(0), Promise.resolve(1), Promise.resolve(2), Promise.resolve(3) ]); sources['switch']().subscribe(function (x) { t.equal(3, x); t.end(); }); }); test('Observable#switch Promise error', function (t) { var sources = Observable.fromArray([ Promise.resolve(0), Promise.resolve(1), Promise.reject(2), Promise.resolve(3) ]); sources['switch']().subscribe(function (x) { t.equal(3, x); t.end(); }, function (err) { t.equal(2, err); t.end(); }); }); test('Observable#switch Data', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50)) ), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(150)) ), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs['switch'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204), onNext(510, 301), onNext(520, 302), onNext(530, 303), onNext(540, 304), onCompleted(650) ]); t.end(); }); test('Observable#switch inner throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onError(50, error)) ), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(150)) ), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs['switch'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204), onError(450, error) ]); t.end(); }); test('Observable#switch outer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50)) ), onError(500, error) ); var results = scheduler.startScheduler(function () { return xs['switch'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 201), onNext(420, 202), onNext(430, 203), onNext(440, 204), onError(500, error) ]); t.end(); }); test('Observable#switch no inner', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs['switch'](); }); reactiveAssert(t, results.messages, [ onCompleted(500) ]); t.end(); }); test('Observable#switch inner completes', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onCompleted(540) ); var results = scheduler.startScheduler(function () { return xs['switch'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 103), onNext(420, 104), onNext(510, 105), onNext(520, 106), onCompleted(540) ]); t.end(); }); RxJS-4.1.0/src/modular/test/switchfirst.js000066400000000000000000000120731266736161100204760ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ fromArray: require('../observable/fromarray') }); Observable.addToPrototype({ 'switchFirst': require('../observable/switchfirst') }); test('Observable#switchFirst Promise', function (t) { var sources = Observable.fromArray([ Promise.resolve(0), Promise.resolve(1), Promise.resolve(2), Promise.resolve(3) ]); sources['switchFirst']().subscribe(function (x) { t.equal(0, x); t.end(); }); }); test('Observable#switchFirst Promise error', function (t) { var sources = Observable.fromArray([ Promise.resolve(0), Promise.resolve(1), Promise.reject(2), Promise.resolve(3) ]); sources['switchFirst']().subscribe(function (x) { t.equal(0, x); t.end(); }, function (err) { t.equal(2, err); t.end(); }); }); test('Observable#switchFirst Data', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50)) ), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(150)) ), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs['switchFirst'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 103), onNext(420, 104), onNext(510, 105), onNext(520, 106), onCompleted(600) ]); t.end(); }); test('Observable#switchFirst inner throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onError(50, error)) ), onNext(500, scheduler.createColdObservable( onNext(10, 301), onNext(20, 302), onNext(30, 303), onNext(40, 304), onCompleted(150)) ), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs['switchFirst'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 103), onNext(420, 104), onNext(510, 105), onNext(520, 106), onCompleted(600) ]); t.end(); }); test('Observable#switchFirst outer throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onNext(400, scheduler.createColdObservable( onNext(10, 201), onNext(20, 202), onNext(30, 203), onNext(40, 204), onCompleted(50)) ), onError(500, error) ); var results = scheduler.startScheduler(function () { return xs['switchFirst'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 103), onNext(420, 104), onError(500, error) ]); t.end(); }); test('Observable#switchFirst no inner', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs['switchFirst'](); }); reactiveAssert(t, results.messages, [ onCompleted(500) ]); t.end(); }); test('Observable#switchFirst inner completes', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(300, scheduler.createColdObservable( onNext(10, 101), onNext(20, 102), onNext(110, 103), onNext(120, 104), onNext(210, 105), onNext(220, 106), onCompleted(230)) ), onCompleted(540) ); var results = scheduler.startScheduler(function () { return xs['switchFirst'](); }); reactiveAssert(t, results.messages, [ onNext(310, 101), onNext(320, 102), onNext(410, 103), onNext(420, 104), onNext(510, 105), onNext(520, 106), onCompleted(540) ]); t.end(); }); RxJS-4.1.0/src/modular/test/take.js000066400000000000000000000207371266736161100170570ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ take: require('../observable/take') }); test('Observable#take complete after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.take(20); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#take complete same', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.take(17); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(630) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 630) ]); t.end(); }); test('Observable#take complete before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(690) ); var results = scheduler.startScheduler(function () { return xs.take(10); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onCompleted(415) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 415) ]); t.end(); }); test('Observable#take error after', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, error) ); var results = scheduler.startScheduler(function () { return xs.take(20); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 690) ]); t.end(); }); test('Observable#take error same', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, new Error()) ); var results = scheduler.startScheduler(function () { return xs.take(17); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onCompleted(630) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 630) ]); t.end(); }); test('Observable#take error before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10), onError(690, new Error())); var results = scheduler.startScheduler(function () { return xs.take(3); }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onCompleted(270) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.end(); }); test('Observable#take dispose before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10) ); var results = scheduler.startScheduler(function () { return xs.take(3); }, { disposed: 250 }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#take dispose after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(70, 6), onNext(150, 4), onNext(210, 9), onNext(230, 13), onNext(270, 7), onNext(280, 1), onNext(300, -1), onNext(310, 3), onNext(340, 8), onNext(370, 11), onNext(410, 15), onNext(415, 16), onNext(460, 72), onNext(510, 76), onNext(560, 32), onNext(570, -100), onNext(580, -3), onNext(590, 5), onNext(630, 10) ); var results = scheduler.startScheduler(function () { return xs.take(3); }, { disposed: 400 }); reactiveAssert(t, results.messages, [ onNext(210, 9), onNext(230, 13), onNext(270, 7), onCompleted(270) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.end(); }); RxJS-4.1.0/src/modular/test/takelast.js000066400000000000000000000133131266736161100177330ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ takeLast: require('../observable/takelast') }); test('Observable#takeLast zero completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.takeLast(0); }); reactiveAssert(t, results.messages, [ onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLast zero error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.takeLast(0); }); reactiveAssert(t, results.messages, [ onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLast zero disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.takeLast(0); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#takeLast one completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.takeLast(1); }); reactiveAssert(t, results.messages, [ onNext(650, 9), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLast one error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.takeLast(1); }); reactiveAssert(t, results.messages, [ onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLast one disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.takeLast(1); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#takeLast three completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.takeLast(3); }); reactiveAssert(t, results.messages, [ onNext(650, 7), onNext(650, 8), onNext(650, 9), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLast three error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.takeLast(3); }); reactiveAssert(t, results.messages, [ onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLast three disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.takeLast(3); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/takelastbuffer.js000066400000000000000000000134721266736161100211330ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ takeLastBuffer: require('../observable/takelastbuffer') }); test('Observable#takeLastBuffer zero completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(0); }); reactiveAssert(t, results.messages, [ onNext(650, []), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLastBuffer zero error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(0); }); reactiveAssert(t, results.messages, [ onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLastBuffer zero disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(0); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#takeLastBuffer one completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(1); }); reactiveAssert(t, results.messages, [ onNext(650, [9]), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLastBuffer one error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(1); }); reactiveAssert(t, results.messages, [ onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLastBuffer one disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(1); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#takeLastBuffer three completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onCompleted(650) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(3); }); reactiveAssert(t, results.messages, [ onNext(650, [7, 8, 9]), onCompleted(650) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLastBuffer three error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9), onError(650, error) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(3); }); reactiveAssert(t, results.messages, [ onError(650, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 650) ]); t.end(); }); test('Observable#takeLastBuffer three disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(180, 1), onNext(210, 2), onNext(250, 3), onNext(270, 4), onNext(310, 5), onNext(360, 6), onNext(380, 7), onNext(410, 8), onNext(590, 9) ); var results = scheduler.startScheduler(function () { return xs.takeLastBuffer(3); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/takelastbufferwithtime.js000066400000000000000000000121001266736161100226710ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ takeLastBufferWithTime: require('../observable/takelastbufferwithtime') }); test('Observable#takeLastBufferWithTime zero 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, []), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeLastBufferWithTime zero 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, []), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeLastBufferWithTime some 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(25, scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, [2,3]), onCompleted(240) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 240) ]); t.end(); }); test('Observable#takeLastBufferWithTime some 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(300) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(25, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, []), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#takeLastBufferWithTime some 3', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onNext(270, 7), onNext(280, 8), onNext(290, 9), onCompleted(300) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(45, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, [6,7,8,9]), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#takeLastBufferWithTime some 4', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(250, 3), onNext(280, 4), onNext(290, 5), onNext(300, 6), onCompleted(350) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(25, scheduler); }); reactiveAssert(t, results.messages, [ onNext(350, []), onCompleted(350) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 350) ]); t.end(); }); test('Observable#takeLastBufferWithTime All', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, [1,2]), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeLastBufferWithTime Error', function (t) { var scheduler = new TestScheduler(); var ex = new Error(); var xs = scheduler.createHotObservable(onError(210, ex)); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(50, scheduler); }); reactiveAssert(t, results.messages, [ onError(210, ex) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#takeLastBufferWithTime never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(); var results = scheduler.startScheduler(function () { return xs.takeLastBufferWithTime(50, scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/takelastwithtime.js000066400000000000000000000117551266736161100215160ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ takeLastWithTime: require('../observable/takelastwithtime') }); test('Observable#takeLastWithTime zero 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeLastWithTime zero 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(0, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeLastWithTime some 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(25, scheduler); }); reactiveAssert(t, results.messages, [ onNext(240, 2), onNext(240, 3), onCompleted(240) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 240) ]); t.end(); }); test('Observable#takeLastWithTime some 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(300) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(25, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#takeLastWithTime some 3', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onNext(270, 7), onNext(280, 8), onNext(290, 9), onCompleted(300) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(45, scheduler); }); reactiveAssert(t, results.messages, [ onNext(300, 6), onNext(300, 7), onNext(300, 8), onNext(300, 9), onCompleted(300) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.end(); }); test('Observable#takeLastWithTime some 4', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(240, 2), onNext(250, 3), onNext(280, 4), onNext(290, 5), onNext(300, 6), onCompleted(350) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(25, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(350) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 350) ]); t.end(); }); test('Observable#takeLastWithTime all', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(50, scheduler); }); reactiveAssert(t, results.messages, [ onNext(230, 1), onNext(230, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeLastWithTime error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(50, scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#takeLastWithTime never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.takeLastWithTime(50, scheduler); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/takeuntil.js000066400000000000000000000142361266736161100201300ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ never: require('../observable/never') }); Observable.addToPrototype({ takeUntil: require('../observable/takeuntil'), tap: require('../observable/tap') }); test('Observable#takeUntil preempt some data next', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = scheduler.createHotObservable( onNext(150, 1), onNext(225, 99), onCompleted(230) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onCompleted(225) ]); t.end(); }); test('Observable#takeUntil preempt some data error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = scheduler.createHotObservable( onNext(150, 1), onError(225, error) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onError(225, error) ]); t.end(); }); test('Observable#takeUntil no preempt some data empty', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = scheduler.createHotObservable( onNext(150, 1), onCompleted(225) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable#takeUntil no preempt some data never', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var r = Observable.never(); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); t.end(); }); test('Observable#takeUntil preempt never next', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = scheduler.createHotObservable( onNext(150, 1), onNext(225, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onCompleted(225) ]); t.end(); }); test('Observable#takeUntil preempt never error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var l = Observable.never(); var r = scheduler.createHotObservable( onNext(150, 1), onError(225, error) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onError(225, error) ]); t.end(); }); test('Observable#takeUntil no preempt never empty', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = scheduler.createHotObservable( onNext(150, 1), onCompleted(225) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#takeUntil no preempt never never', function (t) { var scheduler = new TestScheduler(); var l = Observable.never(); var r = Observable.never(); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#takeUntil preempt before first produced', function (t) { var scheduler = new TestScheduler(); var l = scheduler.createHotObservable( onNext(150, 1), onNext(230, 2), onCompleted(240) ); var r = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('Observable#takeUntil preempt before first produced remain silent and proper disposed', function (t) { var scheduler = new TestScheduler(); var sourceNotDisposed = false; var l = scheduler.createHotObservable( onNext(150, 1), onError(215, new Error()), onCompleted(240) ).tap(function () { sourceNotDisposed = true; }); var r = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.ok(!sourceNotDisposed); t.end(); }); test('Observable#takeUntil no preempt after last produced proper disposed signal', function (t) { var scheduler = new TestScheduler(); var signalNotDisposed = false; var l = scheduler.createHotObservable( onNext(150, 1), onNext(230, 2), onCompleted(240) ); var r = scheduler.createHotObservable( onNext(150, 1), onNext(250, 2), onCompleted(260) ).tap(function () { signalNotDisposed = true; }); var results = scheduler.startScheduler(function () { return l.takeUntil(r); }); reactiveAssert(t, results.messages, [ onNext(230, 2), onCompleted(240) ]); t.ok(!signalNotDisposed); t.end(); }); RxJS-4.1.0/src/modular/test/takeuntilwithtime.js000066400000000000000000000072661266736161100217100ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ takeUntilWithTime: require('../observable/takeuntilwithtime') }); test('Observable#takeUntilWithTime zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeUntilWithTime(new Date(0), scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 201) ]); t.end(); }); test('Observable#takeUntilWithTime late', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onCompleted(230) ); var results = scheduler.startScheduler(function () { return xs.takeUntilWithTime(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onCompleted(230) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable#takeUntilWithTime error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return xs.takeUntilWithTime(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable#takeUntilWithTime never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable(); var results = scheduler.startScheduler(function () { return xs.takeUntilWithTime(new Date(250), scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('Observable#takeUntilWithTime twice 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return xs .takeUntilWithTime(new Date(255), scheduler) .takeUntilWithTime(new Date(235), scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(235) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 235) ]); t.end(); }); test('Observable#takeUntilWithTime twice 2', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return xs .takeUntilWithTime(new Date(235), scheduler) .takeUntilWithTime(new Date(255), scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(235) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 235) ]); t.end(); }); RxJS-4.1.0/src/modular/test/takewhile.js000066400000000000000000000176461266736161100201150ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ takeWhile: require('../observable/takewhile') }); function isPrime(i) { if (i <= 1) { return false; } var max = Math.floor(Math.sqrt(i)); for (var j = 2; j <= max; ++j) { if (i % j === 0) { return false; } } return true; } test('Observable#takeWhile complete before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onCompleted(330), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onCompleted(330) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 330) ]); t.equal(4, invoked); t.end(); }); test('Observable#takeWhile complete after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.equal(6, invoked); t.end(); }); test('Observable#takeWhile error before', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onError(270, error), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onError(270, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 270) ]); t.equal(2, invoked); t.end(); }); test('Observable#takeWhile error after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onError(600, new Error()) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.equal(6, invoked); t.end(); }); test('Observable#takeWhile dispose before', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }, { disposed: 300 }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onNext(290, 13) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 300) ]); t.equal(3, invoked); t.end(); }); test('Observable#takeWhile dispose after', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }, { disposed: 400 }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onCompleted(390) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 390) ]); t.equal(6, invoked); t.end(); }); test('Observable#takeWhile zero', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(205, 100), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; return isPrime(x); }); }, { disposed: 300 }); reactiveAssert(t, results.messages, [ onCompleted(205) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 205) ]); t.equal(1, invoked); t.end(); }); test('Observable#takeWhile throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var invoked = 0; var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x) { invoked++; if (invoked === 3) { throw error; } return isPrime(x); }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(260, 5), onError(290, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 290) ]); t.equal(3, invoked); t.end(); }); test('Observable#takeWhile index', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, -1), onNext(110, -1), onNext(205, 100), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onNext(350, 7), onNext(390, 4), onNext(410, 17), onNext(450, 8), onNext(500, 23), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.takeWhile(function (x, i) { return i < 5; }); }); reactiveAssert(t, results.messages, [ onNext(205, 100), onNext(210, 2), onNext(260, 5), onNext(290, 13), onNext(320, 3), onCompleted(350) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 350) ]); t.end(); }); RxJS-4.1.0/src/modular/test/tap.js000066400000000000000000000253471266736161100167210ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var create = require('../observer/create'); var noop = require('../helpers/noop'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ tap: require('../observable/tap') }); test('Observable#tap should see all values', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var i = 0; var sum = 2 + 3 + 4 + 5; scheduler.startScheduler(function () { return xs.tap(function (x) { i++; return sum -= x; }); }); t.equal(4, i); t.equal(0, sum); t.end(); }); test('Observable#tap plain action', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var i = 0; scheduler.startScheduler(function () { return xs.tap(function () { return i++; }); }); t.equal(4, i); t.end(); }); test('Observable#tap next completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var i = 0; var sum = 2 + 3 + 4 + 5; var completed = false; scheduler.startScheduler(function () { return xs.tap(function (x) { i++; sum -= x; }, null, function () { completed = true; }); }); t.equal(4, i); t.equal(0, sum); t.ok(completed); t.end(); }); test('Observable#tap next completed never', function (t) { var scheduler = new TestScheduler(); var i = 0; var completed = false; var xs = scheduler.createHotObservable( onNext(150, 1) ); scheduler.startScheduler(function () { return xs.tap(function () { i++; }, null, function () { completed = true; }); }); t.equal(0, i); t.ok(!completed); t.end(); }); test('Observable#tap next error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ); var i = 0; var sum = 2 + 3 + 4 + 5; var sawError = false; scheduler.startScheduler(function () { return xs.tap(function (x) { i++; sum -= x; }, function (e) { sawError = e === error; }); }); t.equal(4, i); t.equal(0, sum); t.ok(sawError); t.end(); }); test('Observable#tap next error not', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var i = 0; var sum = 2 + 3 + 4 + 5; var sawError = false; scheduler.startScheduler(function () { return xs.tap(function (x) { i++; sum -= x; }, function () { sawError = true; }); }); t.equal(4, i); t.equal(0, sum); t.ok(!sawError); t.end(); }); test('Observable#tap next error completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var i = 0; var sum = 2 + 3 + 4 + 5; var sawError = false; var hasCompleted = false; scheduler.startScheduler(function () { return xs.tap(function (x) { i++; sum -= x; }, function () { sawError = true; }, function () { hasCompleted = true; }); }); t.equal(4, i); t.equal(0, sum); t.ok(!sawError); t.ok(hasCompleted); t.end(); }); test('Observable#tap next completed error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ); var i = 0; var sum = 2 + 3 + 4 + 5; var sawError = false; var hasCompleted = false; scheduler.startScheduler(function () { return xs.tap(function (x) { i++; sum -= x; }, function () { sawError = true; }, function () { hasCompleted = true; }); }); t.equal(4, i); t.equal(0, sum); t.ok(sawError); t.ok(!hasCompleted); t.end(); }); test('Observable#tap next error completed never', function (t) { var scheduler = new TestScheduler(); var i = 0; var sawError = false; var hasCompleted = false; var xs = scheduler.createHotObservable( onNext(150, 1) ); scheduler.startScheduler(function () { return xs.tap(function () { i++; }, function () { sawError = true; }, function () { hasCompleted = true; }); }); t.equal(0, i); t.ok(!sawError); t.ok(!hasCompleted); t.end(); }); test('Observable#tap observer some data with error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ); var i = 0; var sum = 2 + 3 + 4 + 5; var sawError = false; var hasCompleted = false; scheduler.startScheduler(function () { return xs.tap(create(function (x) { i++; sum -= x; }, function (e) { sawError = e === error; }, function () { hasCompleted = true; })); }); t.equal(4, i); t.equal(0, sum); t.ok(sawError); t.ok(!hasCompleted); t.end(); }); test('Observable#tap next throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#tap next completed next throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(function () { throw error; }, null, noop); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#tap next competed completed throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(noop, null, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(250, error) ]); t.end(); }); test('Observable#tap next error next throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(function () { throw error; }, noop); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#tap next error error throws', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error1) ); var results = scheduler.startScheduler(function () { return xs.tap(noop, function () { throw error2; }); }); reactiveAssert(t, results.messages, [ onError(210, error2) ]); t.end(); }); test('Observable#tap next error completed next throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(function () { throw error; }, noop, noop); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#tap next error completed error throws', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error1) ); var results = scheduler.startScheduler(function () { return xs.tap(noop, function () { throw error2; }, noop); }); reactiveAssert(t, results.messages, [ onError(210, error2) ]); t.end(); }); test('Observable#tap next error completed completed throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(noop, noop, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(250, error) ]); t.end(); }); test('Observable#tap observer next throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(create(function () { throw error; }, noop, noop)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#tap observer error throws', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(210, error1) ); var results = scheduler.startScheduler(function () { return xs.tap(create(noop, function () { throw error2; }, noop)); }); reactiveAssert(t, results.messages, [ onError(210, error2) ]); t.end(); }); test('Observable#tap observer completed throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.tap(create(noop, noop, function () { throw error; })); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(250, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/throttle.js000066400000000000000000000060031266736161100177660ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ throttle: require('../observable/throttle') }); test('Observable#throttle completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(250, 3), onNext(310, 4), onNext(350, 5), onNext(410, 6), onNext(450, 7), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.throttle(200, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(410, 6), onCompleted(500) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 500) ]); t.end(); }); test('Observable#throttle never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.throttle(200, scheduler); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable#throttle empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.throttle(200, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(500) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 500) ]); t.end(); }); test('Observable#throttle error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(250, 3), onNext(310, 4), onNext(350, 5), onError(410, error), onNext(450, 7), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.throttle(200, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onError(410, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 410) ]); t.end(); }); test('Observable#throttle no end', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(250, 3), onNext(310, 4), onNext(350, 5), onNext(410, 6), onNext(450, 7) ); var results = scheduler.startScheduler(function () { return xs.throttle(200, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(410, 6) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/throw.js000066400000000000000000000024231266736161100172660ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onError = ReactiveTest.onError; Observable.addToObject({ 'throw': require('../observable/throw') }); function noop () { } test('Observable.throw basic', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var results = scheduler.startScheduler(function () { return Observable['throw'](error, scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable.throw disposed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable['throw'](new Error(), scheduler); }, { disposed: 200 }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.throw observer throws', function (t) { var scheduler = new TestScheduler(); var xs = Observable['throw'](new Error(), scheduler); xs.subscribe(noop, function () { throw new Error(); }); t.throws(function () { scheduler.start(); }); t.end(); }); RxJS-4.1.0/src/modular/test/timeinterval.js000066400000000000000000000045321266736161100206310ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ timeInterval: require('../observable/timeinterval') }); function TimeInterval(value, interval) { this.value = value; this.interval = interval; } test('Observable#timeInterval regular', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(260, 4), onNext(300, 5), onNext(350, 6), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.timeInterval(scheduler).map(function (x) { return new TimeInterval(x.value, x.interval); }); }); reactiveAssert(t, results.messages, [ onNext(210, new TimeInterval(2, 10)), onNext(230, new TimeInterval(3, 20)), onNext(260, new TimeInterval(4, 30)), onNext(300, new TimeInterval(5, 40)), onNext(350, new TimeInterval(6, 50)), onCompleted(400) ]); t.end(); }); test('Observable#timeInterval empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(201) ); var results = scheduler.startScheduler(function () { return xs.timeInterval(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable#timeInterval error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(201, error) ); var results = scheduler.startScheduler(function () { return xs.timeInterval(scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable#timeInterval never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.timeInterval(scheduler); }); reactiveAssert(t, results.messages, []); t.end(); }); RxJS-4.1.0/src/modular/test/timer.js000066400000000000000000000047511266736161100172510ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ timer: require('../observable/timer') }); function noop () { } test('Observable.timer one shot relative time basic', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.timer(300, scheduler); }); reactiveAssert(t, results.messages, [ onNext(500, 0), onCompleted(500) ]); t.end(); }); test('Observable.timer one shot relative time zero', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.timer(0, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 0), onCompleted(201) ]); t.end(); }); test('Observable.timer one shot relative time negative', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.timer(-1, scheduler); }); reactiveAssert(t, results.messages, [ onNext(201, 0), onCompleted(201) ]); t.end(); }); test('Observable.timer one shot relative time disposed', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.timer(1000, scheduler); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.timer one shot relative time observer throws', function (t) { var scheduler1 = new TestScheduler(); var xs = Observable.timer(1, scheduler1); xs.subscribe(function () { throw new Error(); }); t.throws(function () { scheduler1.start(); }); var scheduler2 = new TestScheduler(); var ys = Observable.timer(1, scheduler2); ys.subscribe(noop, noop, function () { throw new Error(); }); t.throws(function () { scheduler2.start(); }); t.end(); }); test('Observable.timer relative start and periodically repeat', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function() { return Observable.timer(300, 100, scheduler); }); reactiveAssert(t, results.messages, [ onNext(500, 0), onNext(600, 1), onNext(700, 2), onNext(800, 3), onNext(900, 4) ]); t.end(); }); RxJS-4.1.0/src/modular/test/timestamp.js000066400000000000000000000044601266736161100201310ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToPrototype({ timestamp: require('../observable/timestamp') }); function Timestamp(value, timestamp) { this.value = value; this.timestamp = timestamp; } test('Observable#timestamp regular', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(230, 3), onNext(260, 4), onNext(300, 5), onNext(350, 6), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.timestamp(scheduler).map(function (x) { return new Timestamp(x.value, x.timestamp); }); }); reactiveAssert(t, results.messages, [ onNext(210, new Timestamp(2, 210)), onNext(230, new Timestamp(3, 230)), onNext(260, new Timestamp(4, 260)), onNext(300, new Timestamp(5, 300)), onNext(350, new Timestamp(6, 350)), onCompleted(400) ]); t.end(); }); test('Observable#timestamp empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(201) ); var results = scheduler.startScheduler(function () { return xs.timestamp(scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(201) ]); t.end(); }); test('Observable#timestamp error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onError(201, error) ); var results = scheduler.startScheduler(function () { return xs.timestamp(scheduler); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); t.end(); }); test('Observable#timestamp never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.timestamp(scheduler); }); reactiveAssert(t, results.messages, []); t.end(); }); RxJS-4.1.0/src/modular/test/toarray.js000066400000000000000000000037311266736161100176070ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ toArray: require('../observable/toarray') }); test('Observable#toArray completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onCompleted(660) ); var results = scheduler.startScheduler(function () { return xs.toArray(); }); reactiveAssert(t, results.messages, [ onNext(660, [2,3,4,5]), onCompleted(660) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 660) ]); t.end(); }); test('Observable#toArray error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onError(660, error) ); var results = scheduler.startScheduler(function () { return xs.toArray(); }); reactiveAssert(t, results.messages, [ onError(660, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 660) ]); t.end(); }); test('Observable#toArray disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5) ); var results = scheduler.startScheduler(function () { return xs.toArray(); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/toasync.js000066400000000000000000000056031266736161100176060ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ toAsync: require('../observable/toasync') }); test('Observable.toAsync context', function (t) { var context = { value: 42 }; var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function (x) { return this.value + x; }, context, scheduler)(42); }); reactiveAssert(t, results.messages, [ onNext(200, 84), onCompleted(200) ]); t.end(); }); test('Observable.toAsync 0', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function () { return 0; }, null, scheduler)(); }); reactiveAssert(t, results.messages, [ onNext(200, 0), onCompleted(200) ]); t.end(); }); test('Observable.toAsync 1', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function (x) { return x; }, null, scheduler)(1); }); reactiveAssert(t, results.messages, [ onNext(200, 1), onCompleted(200) ]); t.end(); }); test('Observable.toAsync 2', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function (x, y) { return x + y; }, null, scheduler)(1, 2); }); reactiveAssert(t, results.messages, [ onNext(200, 3), onCompleted(200) ]); t.end(); }); test('Observable.toAsync 3', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function (x, y, z) { return x + y + z; }, null, scheduler)(1, 2, 3); }); reactiveAssert(t, results.messages, [ onNext(200, 6), onCompleted(200) ]); t.end(); }); test('Observable.toAsync 4', function (t) { var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function (a, b, c, d) { return a + b + c + d; }, null, scheduler)(1, 2, 3, 4); }); reactiveAssert(t, results.messages, [ onNext(200, 10), onCompleted(200) ]); t.end(); }); test('Observable.toAsync error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var results = scheduler.startScheduler(function () { return Observable.toAsync(function () { throw error; }, null, scheduler)(); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/tomap.js000066400000000000000000000071651266736161100172530ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ toMap: require('../observable/tomap') }); function extractValues(x) { var arr = []; x.forEach(function (value, key) { arr.push(key, value); }); return arr; } test('Observable#toMap completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onCompleted(660) ); var results = scheduler.startScheduler(function () { return xs.toMap(function (x) { return x * 2; }, function (x) { return x * 4; }).map(extractValues); }); reactiveAssert(t, results.messages, [ onNext(660, [4, 8, 6, 12, 8, 16, 10, 20]), onCompleted(660) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 660) ]); t.end(); }); test('Observable#toMap error', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onError(660, error) ); var results = scheduler.startScheduler(function () { return xs.toMap(function (x) { return x * 2; }, function (x) { return x * 4; }).map(extractValues); }); reactiveAssert(t, results.messages, [ onError(660, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 660) ]); t.end(); }); test('Observable#toMap key selector throws', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.toMap(function (x) { if (x < 4) { return x * 2; } else { throw error; } }, function (x) { return x * 4; }).map(extractValues); }); reactiveAssert(t, results.messages, [ onError(440, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 440) ]); t.end(); }); test('Observable#toMap element selector throws', function (t) { var scheduler = new TestScheduler(); var error = new Error(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onCompleted(600) ); var results = scheduler.startScheduler(function () { return xs.toMap(function (x) { return x * 2; }, function (x) { if (x < 4) { return x * 4; } else { throw error; } }).map(extractValues); }); reactiveAssert(t, results.messages, [ onError(440, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 440) ]); t.end(); }); test('Observable#toMap disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5) ); var results = scheduler.startScheduler(function () { return xs.toMap(function (x) { return x * 2; }, function (x) { return x * 4; }).map(extractValues); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/topromise.js000066400000000000000000000016161266736161100201470ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var LocalPromise = require('lie'); Observable.addToObject({ just: require('../observable/just'), 'throw': require('../observable/throw') }); Observable.addToPrototype({ toPromise: require('../observable/topromise') }); test('Observable#toPromise success', function (t) { var source = Observable.just(42); var promise = source.toPromise(LocalPromise); promise.then( function (value) { t.equal(42, value); t.end(); }, function () { t.fail(); } ); }); test('Observable#toPromise Failure', function (t) { var error = new Error('woops'); var source = Observable['throw'](error); var promise = source.toPromise(LocalPromise); promise.then( function () { t.fail(); }, function (reason) { t.equal(error, reason); t.end(); } ); }); RxJS-4.1.0/src/modular/test/toset.js000066400000000000000000000042261266736161100172640ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ map: require('../observable/map'), toSet: require('../observable/toset') }); function extractValues(x) { var arr = []; x.forEach(function (item) { arr.push(item); }); return arr; } test('Observable#toSet completed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onCompleted(660) ); var results = scheduler.startScheduler(function () { return xs.toSet().map(extractValues); }); reactiveAssert(t, results.messages, [ onNext(660, [2,3,4,5]), onCompleted(660) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 660) ]); t.end(); }); test('Observable#toSet error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5), onError(660, error) ); var results = scheduler.startScheduler(function () { return xs.toSet().map(extractValues); }); reactiveAssert(t, results.messages, [ onError(660, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 660) ]); t.end(); }); test('Observable#toSet disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(110, 1), onNext(220, 2), onNext(330, 3), onNext(440, 4), onNext(550, 5) ); var results = scheduler.startScheduler(function () { return xs.toSet().map(extractValues); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); RxJS-4.1.0/src/modular/test/transduce.js000066400000000000000000000000001266736161100201000ustar00rootroot00000000000000RxJS-4.1.0/src/modular/test/using.js000066400000000000000000000121321266736161100172460ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ using: require('../observable/using') }); test('Observable.using null', function (t) { var xs, _d, disposable; var scheduler = new TestScheduler(); var disposeInvoked = 0; var createInvoked = 0; var results = scheduler.startScheduler(function () { return Observable.using(function () { disposeInvoked++; disposable = null; return disposable; }, function (d) { _d = d; createInvoked++; xs = scheduler.createColdObservable( onNext(100, scheduler.clock), onCompleted(200)); return xs; }); }); t.equal(disposable, _d); reactiveAssert(t, results.messages, [ onNext(300, 200), onCompleted(400) ]); t.equal(1, createInvoked); t.equal(1, disposeInvoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.equal(disposable, null); t.end(); }); test('Observable.using complete', function (t) { var disposable, xs, _d; var scheduler = new TestScheduler(); var disposeInvoked = 0; var createInvoked = 0; var results = scheduler.startScheduler(function () { return Observable.using(function () { disposeInvoked++; disposable = scheduler.createDisposable(); return disposable; }, function (d) { _d = d; createInvoked++; xs = scheduler.createColdObservable(onNext(100, scheduler.clock), onCompleted(200)); return xs; }); }); t.equal(disposable, _d); reactiveAssert(t, results.messages, [ onNext(300, 200), onCompleted(400) ]); t.equal(1, createInvoked); t.equal(1, disposeInvoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, disposable.disposes, [ 200, 400 ]); t.end(); }); test('Observable.using error', function (t) { var disposable, xs, _d; var scheduler = new TestScheduler(); var disposeInvoked = 0; var createInvoked = 0; var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.using(function () { disposeInvoked++; disposable = scheduler.createDisposable(); return disposable; }, function (d) { _d = d; createInvoked++; xs = scheduler.createColdObservable( onNext(100, scheduler.clock), onError(200, error)); return xs; }); }); t.equal(disposable, _d); reactiveAssert(t, results.messages, [ onNext(300, 200), onError(400, error) ]); t.equal(1, createInvoked); t.equal(1, disposeInvoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400)] ); reactiveAssert(t, disposable.disposes, [200, 400]); t.end(); }); test('Observable.using dispose', function (t) { var disposable, xs, _d; var scheduler = new TestScheduler(); var disposeInvoked = 0; var createInvoked = 0; var results = scheduler.startScheduler(function () { return Observable.using(function () { disposeInvoked++; disposable = scheduler.createDisposable(); return disposable; }, function (d) { _d = d; createInvoked++; xs = scheduler.createColdObservable( onNext(100, scheduler.clock), onNext(1000, scheduler.clock + 1)); return xs; }); }); t.equal(disposable, _d); reactiveAssert(t, results.messages, [ onNext(300, 200) ]); t.equal(1, createInvoked); t.equal(1, disposeInvoked); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); reactiveAssert(t, disposable.disposes, [200, 1000]); t.end(); }); test('Observable.using throw resource selector', function (t) { var scheduler = new TestScheduler(); var disposeInvoked = 0; var createInvoked = 0; var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.using(function () { disposeInvoked++; throw error; }, function () { createInvoked++; return Observable.never(); }); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.equal(0, createInvoked); t.equal(1, disposeInvoked); t.end(); }); test('Observable.using throw resource usage', function (t) { var disposable; var scheduler = new TestScheduler(); var disposeInvoked = 0; var createInvoked = 0; var error = new Error(); var results = scheduler.startScheduler(function () { return Observable.using(function () { disposeInvoked++; disposable = scheduler.createDisposable(); return disposable; }, function () { createInvoked++; throw error; }); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); t.equal(1, createInvoked); t.equal(1, disposeInvoked); reactiveAssert(t, disposable.disposes, [200, 200]); t.end(); }); RxJS-4.1.0/src/modular/test/when.js000066400000000000000000000454231266736161100170730ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ never: require('../observable/never'), when: require('../observable/when') }); Observable.addToPrototype({ and: require('../observable/and'), thenDo: require('../observable/thendo') }); function throwError(error) { return function () { throw error; }; } function multiply (x, y) { return x * y; } function subtract (x, y) { return x - y; } function add () { var sum = 0; for (var i = 0, len = arguments.length; i < len; i++) { sum += arguments[i]; } return sum; } test('Observable#when then 1', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onCompleted(220) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.thenDo(function (a) { return a; })); }); reactiveAssert(t, results.messages, [ onNext(210, 1), onCompleted(220) ]); t.end(); }); test('Observable#when then 1 error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(210, error) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.thenDo(function (a) { return a; })); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when then 1 throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onCompleted(220) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 2', function (t) { var N = 2; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 2 error', function (t) { var error = new Error(); var N = 2; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 2 throws', function (t) { var error = new Error(); var N = 2; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 3', function (t) { var N = 3; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 3 error', function (t) { var error = new Error(); var N = 3; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 3 throws', function (t) { var error = new Error(); var N = 3; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 4', function (t) { var N = 4; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 4 error', function (t) { var error = new Error(); var N = 4; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 4 throws', function (t) { var error = new Error(); var N = 4; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 5', function (t) { var N = 5; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 5 error', function (t) { var error = new Error(); var N = 5; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 5 throws', function (t) { var error = new Error(); var N = 5; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 6', function (t) { var N = 6; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 6 error', function (t) { var error = new Error(); var N = 6; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 6 throws', function (t) { var error = new Error(); var N = 6; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 7', function (t) { var N = 7; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 7 error', function (t) { var error = new Error(); var N = 7; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 7 throws', function (t) { var error = new Error(); var N = 7; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 8', function (t) { var N = 8; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).and(obs[7]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 8 error', function (t) { var error = new Error(); var N = 8; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).and(obs[7]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 8 throws', function (t) { var error = new Error(); var N = 8; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).and(obs[7]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when and 9', function (t) { var N = 9; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).and(obs[7]).and(obs[8]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(210, N), onCompleted(220) ]); t.end(); }); test('Observable#when and 9 error', function (t) { var error = new Error(); var N = 9; for (var i = 0; i < N; i++) { var scheduler = new TestScheduler(); var obs = []; for (var j = 0; j < N; j++) { if (j === i) { obs.push(scheduler.createHotObservable(onError(210, error))); } else { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).and(obs[7]).and(obs[8]).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); } t.end(); }); test('Observable#when then 9 throws', function (t) { var error = new Error(); var N = 9; var scheduler = new TestScheduler(); var obs = []; for (var i = 0; i < N; i++) { obs.push(scheduler.createHotObservable(onNext(210, 1), onCompleted(220))); } var results = scheduler.startScheduler(function () { return Observable.when(obs[0].and(obs[1]).and(obs[2]).and(obs[3]).and(obs[4]).and(obs[5]).and(obs[6]).and(obs[7]).and(obs[8]).thenDo(throwError(error))); }); reactiveAssert(t, results.messages, [ onError(210, error) ]); t.end(); }); test('Observable#when when multiple data symmetric', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(240) ); var ys = scheduler.createHotObservable( onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.and(ys).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(240, 1 + 4), onNext(250, 2 + 5), onNext(260, 3 + 6), onCompleted(270) ]); t.end(); }); test('Observable#when when multiple data asymmetric', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(240) ); var ys = scheduler.createHotObservable( onNext(240, 4), onNext(250, 5), onCompleted(270) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.and(ys).thenDo(add)); }); reactiveAssert(t, results.messages, [ onNext(240, 1 + 4), onNext(250, 2 + 5), onCompleted(270) ]); t.end(); }); test('Observable#when when empty empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onCompleted(240) ); var ys = scheduler.createHotObservable( onCompleted(270) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.and(ys).thenDo(add)); }); reactiveAssert(t, results.messages, [ onCompleted(270) ]); t.end(); }); test('Observable#when when never never', function (t) { var scheduler = new TestScheduler(); var xs = Observable.never(); var ys = Observable.never(); var results = scheduler.startScheduler(function () { return Observable.when(xs.and(ys).thenDo(add)); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#when when throw non-empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onError(240, error) ); var ys = scheduler.createHotObservable( onCompleted(270) ); var results = scheduler.startScheduler(function () { return Observable.when(xs.and(ys).thenDo(add)); }); reactiveAssert(t, results.messages, [ onError(240, error) ]); t.end(); }); test('Observable#when complicated when', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(210, 1), onNext(220, 2), onNext(230, 3), onCompleted(240) ); var ys = scheduler.createHotObservable( onNext(240, 4), onNext(250, 5), onNext(260, 6), onCompleted(270) ); var zs = scheduler.createHotObservable( onNext(220, 7), onNext(230, 8), onNext(240, 9), onCompleted(300) ); var results = scheduler.startScheduler(function () { return Observable.when( xs.and(ys).thenDo(add), xs.and(zs).thenDo(multiply), ys.and(zs).thenDo(subtract) ); }); reactiveAssert(t, results.messages, [ onNext(220, 1 * 7), onNext(230, 2 * 8), onNext(240, 3 + 4), onNext(250, 5 - 9), onCompleted(300) ]); t.end(); }); RxJS-4.1.0/src/modular/test/window.js000066400000000000000000000370361266736161100174420ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ timer: require('../observable/timer') }); Observable.addToPrototype({ map: require('../observable/map'), mergeAll: require('../observable/mergeall'), window: require('../observable/window') }); test('Observable#window closings basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.window(function () { return Observable.timer(window++ * 100, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '0 4'), onNext(310, '1 5'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(420, '1 8'), onNext(470, '1 9'), onNext(550, '2 10'), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#window closings Dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.window(function () { return Observable.timer(window++ * 100, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }, { disposed: 400 }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '0 4'), onNext(310, '1 5'), onNext(340, '1 6') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#window closings Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onError(590, error) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.window(function () { return Observable.timer(window++ * 100, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '0 4'), onNext(310, '1 5'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(420, '1 8'), onNext(470, '1 9'), onNext(550, '2 10'), onError(590, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#window closings Throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var results = scheduler.startScheduler(function () { return xs.window(function () { throw error; }) .map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }) .mergeAll(); }); reactiveAssert(t, results.messages, [ onError(200, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 200) ]); t.end(); }); test('Observable#window closings window close error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590)); var results = scheduler.startScheduler(function () { return xs.window(function () { return Observable['throw'](error, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onError(201, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 201) ]); t.end(); }); test('Observable#window closings default', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var window = 1; var results = scheduler.startScheduler(function () { return xs.window(function () { return Observable.timer(window++ * 100, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '0 4'), onNext(310, '1 5'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(420, '1 8'), onNext(470, '1 9'), onNext(550, '2 10'), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#window opening closings basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, 50), onNext(330, 100), onNext(350, 50), onNext(400, 90), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.window(ys, function (x) { return Observable.timer(x, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(260, '0 4'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(410, '3 7'), onNext(420, '1 8'), onNext(420, '3 8'), onNext(470, '3 9'), onCompleted(900) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 900) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 900) ]); t.end(); }); test('Observable#window opening closings throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590)); var ys = scheduler.createHotObservable( onNext(255, 50), onNext(330, 100), onNext(350, 50), onNext(400, 90), onCompleted(900)); var results = scheduler.startScheduler(function () { return xs.window(ys, function () { throw error; }) .map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onError(255, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 255) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 255) ]); t.end(); }); test('Observable#window opening closings dispose', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, 50), onNext(330, 100), onNext(350, 50), onNext(400, 90), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.window(ys, function (x) { return Observable.timer(x, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }, { disposed: 415 }); reactiveAssert(t, results.messages, [ onNext(260, '0 4'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(410, '3 7') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 415) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 415) ]); t.end(); }); test('Observable#window opening closings data error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onError(415, error) ); var ys = scheduler.createHotObservable( onNext(255, 50), onNext(330, 100), onNext(350, 50), onNext(400, 90), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.window(ys, function (x) { return Observable.timer(x, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(260, '0 4'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(410, '3 7'), onError(415, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 415) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 415) ]); t.end(); }); test('Observable#window opening closings window error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, 50), onNext(330, 100), onNext(350, 50), onNext(400, 90), onError(415, error) ); var results = scheduler.startScheduler(function () { return xs.window(ys, function (x) { return Observable.timer(x, scheduler); }).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(260, '0 4'), onNext(340, '1 6'), onNext(410, '1 7'), onNext(410, '3 7'), onError(415, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 415) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 415) ]); t.end(); }); test('Observable#window_Boundaries_Simple', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onNext(400, true), onNext(500, true), onCompleted(900) ); var results = scheduler.startScheduler(function () { return xs.window(ys).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '1 4'), onNext(310, '1 5'), onNext(340, '2 6'), onNext(410, '4 7'), onNext(420, '4 8'), onNext(470, '4 9'), onNext(550, '5 10'), onCompleted(590) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 590) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 590) ]); t.end(); }); test('Observable#window boundaries onCompleted boundaries', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onCompleted(400) ); var results = scheduler.startScheduler(function () { return xs.window(ys).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '1 4'), onNext(310, '1 5'), onNext(340, '2 6'), onCompleted(400) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#window boundaries onError source', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(380, 7), onError(400, error) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onCompleted(500) ); var results = scheduler.startScheduler(function () { return xs.window(ys).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '1 4'), onNext(310, '1 5'), onNext(340, '2 6'), onNext(380, '3 7'), onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 400) ]); t.end(); }); test('Observable#window boundaries onError boundaries', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(90, 1), onNext(180, 2), onNext(250, 3), onNext(260, 4), onNext(310, 5), onNext(340, 6), onNext(410, 7), onNext(420, 8), onNext(470, 9), onNext(550, 10), onCompleted(590) ); var ys = scheduler.createHotObservable( onNext(255, true), onNext(330, true), onNext(350, true), onError(400, error) ); var results = scheduler.startScheduler(function () { return xs.window(ys).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(250, '0 3'), onNext(260, '1 4'), onNext(310, '1 5'), onNext(340, '2 6'), onError(400, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 400) ]); reactiveAssert(t, ys.subscriptions, [ subscribe(200, 400) ]); t.end(); }); RxJS-4.1.0/src/modular/test/windowcount.js000066400000000000000000000064421266736161100205100ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ map: require('../observable/map'), mergeAll: require('../observable/mergeall'), windowCount: require('../observable/windowcount') }); test('Observable#windowCount basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowCount(3, 2).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(280, '1 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(350, '2 6'), onNext(380, '2 7'), onNext(420, '2 8'), onNext(420, '3 8'), onNext(470, '3 9'), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#windowCount disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowCount(3, 2).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }, { disposed: 370 }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(280, '1 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(350, '2 6') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 370) ]); t.end(); }); test('Observable#windowCount error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onError(600, error)); var results = scheduler.startScheduler(function () { return xs.windowCount(3, 2).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(280, '1 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(350, '2 6'), onNext(380, '2 7'), onNext(420, '2 8'), onNext(420, '3 8'), onNext(470, '3 9'), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); RxJS-4.1.0/src/modular/test/windowed.js000066400000000000000000000074521266736161100177520ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ controlled: require('../observable/controlled') }); test('ControlledObservable#windowed never', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).windowed(5, scheduler); }); reactiveAssert(t, results.messages, [ ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('ControlledObservable#windowed empty', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).windowed(5, scheduler); }); reactiveAssert(t, results.messages, [ onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('ControlledObservable#windowed basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).windowed(5, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onCompleted(250) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('ControlledObservable#windowed error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).windowed(5, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onError(250, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 250) ]); t.end(); }); test('ControlledObservable#windowed infinite', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).windowed(5, scheduler); }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('ControlledObservable#windowed disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5), onNext(250) ); var results = scheduler.startScheduler(function () { return xs.controlled(true, scheduler).windowed(5, scheduler); }, { disposed: 235 }); reactiveAssert(t, results.messages, [ onNext(210, 2), onNext(220, 3), onNext(230, 4) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 235) ]); t.end(); }); RxJS-4.1.0/src/modular/test/windowtime.js000066400000000000000000000151431266736161100203140ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ just: require('../observable/just') }); Observable.addToPrototype({ concat: require('../observable/concat'), map: require('../observable/map'), mergeAll: require('../observable/mergeall'), windowTime: require('../observable/windowtime') }); test('Observable#windowTime basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(240, 3), onNext(270, 4), onNext(320, 5), onNext(360, 6), onNext(390, 7), onNext(410, 8), onNext(460, 9), onNext(470, 10), onCompleted(490) ); var results = scheduler.startScheduler(function () { return xs.windowTime(100, scheduler).map(function (ys, i) { return ys.map(function (y) { return i + ' ' + y; }).concat(Observable.just(i + ' end')); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(270, '0 4'), onNext(300, '0 end'), onNext(320, '1 5'), onNext(360, '1 6'), onNext(390, '1 7'), onNext(400, '1 end'), onNext(410, '2 8'), onNext(460, '2 9'), onNext(470, '2 10'), onNext(490, '2 end'), onCompleted(490) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 490) ]); t.end(); }); test('Observable#windowTime basic both', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(240, 3), onNext(270, 4), onNext(320, 5), onNext(360, 6), onNext(390, 7), onNext(410, 8), onNext(460, 9), onNext(470, 10), onCompleted(490)); var results = scheduler.startScheduler(function () { return xs.windowTime(100, 50, scheduler).map(function (ys, i) { return ys.map(function (y) { return i + ' ' + y; }).concat(Observable.just(i + ' end')); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(270, '0 4'), onNext(270, '1 4'), onNext(300, '0 end'), onNext(320, '1 5'), onNext(320, '2 5'), onNext(350, '1 end'), onNext(360, '2 6'), onNext(360, '3 6'), onNext(390, '2 7'), onNext(390, '3 7'), onNext(400, '2 end'), onNext(410, '3 8'), onNext(410, '4 8'), onNext(450, '3 end'), onNext(460, '4 9'), onNext(460, '5 9'), onNext(470, '4 10'), onNext(470, '5 10'), onNext(490, '4 end'), onNext(490, '5 end'), onCompleted(490) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 490) ]); t.end(); }); test('Observable#windowTime basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowTime(100, 70, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(280, '1 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(350, '2 6'), onNext(380, '2 7'), onNext(420, '2 8'), onNext(420, '3 8'), onNext(470, '3 9'), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#windowTime Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onError(600, error)); var results = scheduler.startScheduler(function () { return xs.windowTime(100, 70, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(280, '1 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(350, '2 6'), onNext(380, '2 7'), onNext(420, '2 8'), onNext(420, '3 8'), onNext(470, '3 9'), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#windowTime disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowTime(100, 70, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }, { disposed: 370 }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(280, '1 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(350, '2 6') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 370) ]); t.end(); }); test('Observable#windowTime basic same', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(100, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(380, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowTime(100, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '0 4'), onNext(320, '1 5'), onNext(350, '1 6'), onNext(380, '1 7'), onNext(420, '2 8'), onNext(470, '2 9'), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); RxJS-4.1.0/src/modular/test/windowtimeorcount.js000066400000000000000000000064261266736161100217320ustar00rootroot00000000000000'use strict'; var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToPrototype({ map: require('../observable/map'), mergeAll: require('../observable/mergeall'), windowTimeOrCount: require('../observable/windowtimeorcount') }); test('Observable#windowTimeOrCount basic', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(205, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(370, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowTimeOrCount(70, 3, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(205, '0 1'), onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '1 4'), onNext(320, '2 5'), onNext(350, '2 6'), onNext(370, '2 7'), onNext(420, '3 8'), onNext(470, '4 9'), onCompleted(600) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#windowTimeOrCount Error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(205, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(370, 7), onNext(420, 8), onNext(470, 9), onError(600, error)); var results = scheduler.startScheduler(function () { return xs.windowTimeOrCount(70, 3, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }); reactiveAssert(t, results.messages, [ onNext(205, '0 1'), onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '1 4'), onNext(320, '2 5'), onNext(350, '2 6'), onNext(370, '2 7'), onNext(420, '3 8'), onNext(470, '4 9'), onError(600, error) ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 600) ]); t.end(); }); test('Observable#windowTimeOrCount disposed', function (t) { var scheduler = new TestScheduler(); var xs = scheduler.createHotObservable( onNext(205, 1), onNext(210, 2), onNext(240, 3), onNext(280, 4), onNext(320, 5), onNext(350, 6), onNext(370, 7), onNext(420, 8), onNext(470, 9), onCompleted(600)); var results = scheduler.startScheduler(function () { return xs.windowTimeOrCount(70, 3, scheduler).map(function (w, i) { return w.map(function (x) { return i + ' ' + x; }); }).mergeAll(); }, { disposed: 370 }); reactiveAssert(t, results.messages, [ onNext(205, '0 1'), onNext(210, '0 2'), onNext(240, '0 3'), onNext(280, '1 4'), onNext(320, '2 5'), onNext(350, '2 6'), onNext(370, '2 7') ]); reactiveAssert(t, xs.subscriptions, [ subscribe(200, 370) ]); t.end(); }); RxJS-4.1.0/src/modular/test/withlatestfrom.js000066400000000000000000000362251266736161100212060ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ function add (x, y) { return x + y; } var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted; Observable.addToObject({ never: require('../observable/never') }); Observable.addToPrototype({ withLatestFrom: require('../observable/withlatestfrom') }); test('Observable#withLatestFrom never never', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#withLatestFrom never empty', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#withLatestFrom empty never', function (t) { var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('Observable#withLatestFrom emptyempty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('Observable#withLatestFrom empty return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('Observable#withLatestFrom return empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onCompleted(220) ]); t.end(); }); test('Observable#withLatestFrom never return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onCompleted(220) ]); t.end(); }); test('Observable#withLatestFrom return never', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(210) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable#withLatestFrom return return', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onNext(220, 2 + 3), onCompleted(230) ]); t.end(); }); test('Observable#withLatestFrom empty error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom error empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom return throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom throw return', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom throw throw', function (t) { var error1 = new Error('error1'); var error2 = new Error('error2'); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onError(220, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error2) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error1) ]); t.end(); }); test('Observable#withLatestFrom error throw', function (t) { var error1 = new Error('error1'); var error2 = new Error('error2'); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error2) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error1) ]); t.end(); }); test('Observable#withLatestFrom throw error', function (t) { var error1 = new Error('error1'); var error2 = new Error('error2'); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onError(220, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error2) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error1) ]); t.end(); }); test('Observable#withLatestFrom never throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom throw never', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom some throw', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom throw some', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable#withLatestFrom throw after complete left', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onCompleted(220) ]); t.end(); }); test('Observable#withLatestFrom throw after complete right', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(230, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('Observable#withLatestFrom interleaved with tail', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onNext(230, 5), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onNext(220, 3 + 2), onNext(230, 5 + 4), onNext(235, 6 + 4), onNext(240, 7 + 4), onCompleted(250) ]); t.end(); }); test('Observable#withLatestFrom consecutive', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(235, 4), onCompleted(240) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(225, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onNext(235, 4 + 6), onCompleted(240) ]); t.end(); }); test('Observable#withLatestFrom consecutive array', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(235, 4), onCompleted(240) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(225, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2); }); reactiveAssert(t, results.messages, [ onNext(235, [4,6]), onCompleted(240) ]); t.end(); }); test('Observable#withLatestFrom consecutive end with error left', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onError(230, error) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, add); }); reactiveAssert(t, results.messages, [ onError(230, error) ]); t.end(); }); test('Observable#withLatestFrom consecutive end with error right', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onError(245, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1, add); }); reactiveAssert(t, results.messages, [ onNext(235, 4 + 6), onNext(240, 4 + 7), onError(245, error) ]); t.end(); }); test('Observable#withLatestFrom consecutive end with error right array', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(235, 6), onNext(240, 7), onError(245, error) ); var results = scheduler.startScheduler(function () { return e2.withLatestFrom(e1); }); reactiveAssert(t, results.messages, [ onNext(235, [6,4]), onNext(240, [7,4]), onError(245, error) ]); t.end(); }); test('Observable#withLatestFrom selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return e1.withLatestFrom(e2, function () { throw error; }); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); RxJS-4.1.0/src/modular/test/zip.js000066400000000000000000000476501266736161100167400ustar00rootroot00000000000000'use strict'; /* jshint undef: true, unused: true */ function add (x, y) { return x + y; } var test = require('tape'); var Observable = require('../observable'); var TestScheduler = require('../testing/testscheduler'); var reactiveAssert = require('../testing/reactiveassert'); var ReactiveTest = require('../testing/reactivetest'); var onNext = ReactiveTest.onNext, onError = ReactiveTest.onError, onCompleted = ReactiveTest.onCompleted, subscribe = ReactiveTest.subscribe; Observable.addToObject({ never: require('../observable/never'), zip: require('../observable/zip') }); Observable.addToPrototype({ zip: require('../observable/zip'), zipIterable: require('../observable/zipiterable') }); test('Observable.zip n-ary symmetric', function (t) { var scheduler = new TestScheduler(); var e0 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 1), onNext(250, 4), onCompleted(420) ); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 5), onCompleted(410) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 3), onNext(260, 6), onCompleted(400) ); var results = scheduler.startScheduler(function () { return Observable.zip(e0, e1, e2); }); reactiveAssert(t, results.messages, [ onNext(230, [1, 2, 3]), onNext(260, [4, 5, 6]), onCompleted(420) ]); reactiveAssert(t, e0.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e1.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e2.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable.zip n-ary symmetric selector', function (t) { var scheduler = new TestScheduler(); var e0 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 1), onNext(250, 4), onCompleted(420) ); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 5), onCompleted(410) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 3), onNext(260, 6), onCompleted(400) ); var results = scheduler.startScheduler(function () { return Observable.zip(e0, e1, e2, function (r0, r1, r2) { return [r0, r1, r2]; }); }); reactiveAssert(t, results.messages, [ onNext(230, [1, 2, 3]), onNext(260, [4, 5, 6]), onCompleted(420) ]); reactiveAssert(t, e0.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e1.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e2.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable.zip n-ary array symmetric', function (t) { var scheduler = new TestScheduler(); var e0 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 1), onNext(250, 4), onCompleted(420) ); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 5), onCompleted(410) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 3), onNext(260, 6), onCompleted(400) ); var results = scheduler.startScheduler(function () { return Observable.zip(e0, e1, e2); }); reactiveAssert(t, results.messages, [ onNext(230, [1, 2, 3]), onNext(260, [4, 5, 6]), onCompleted(420) ]); reactiveAssert(t, e0.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e1.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e2.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable.zip n-ary symmetric array selector', function (t) { var scheduler = new TestScheduler(); var e0 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 1), onNext(250, 4), onCompleted(420) ); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 2), onNext(240, 5), onCompleted(410) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(230, 3), onNext(260, 6), onCompleted(400) ); var results = scheduler.startScheduler(function () { return Observable.zip(e0, e1, e2, function (r0, r1, r2) { return [r0, r1, r2]; }); }); reactiveAssert(t, results.messages, [ onNext(230, [1, 2, 3]), onNext(260, [4, 5, 6]), onCompleted(420) ]); reactiveAssert(t, e0.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e1.subscriptions, [ subscribe(200, 420) ]); reactiveAssert(t, e2.subscriptions, [ subscribe(200, 420) ]); t.end(); }); test('Observable.zip never never', function (t) { var scheduler = new TestScheduler(); var o1 = Observable.never(); var o2 = Observable.never(); var results = scheduler.startScheduler(function () { return o1.zip(o2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.zip never empty', function (t) { var scheduler = new TestScheduler(); var o1 = Observable.never(); var o2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return o1.zip(o2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.zip empty empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); t.end(); }); test('Observable.zip empty non-empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, [ onCompleted(215) ]); t.end(); }); test('Observable.zip non-empty empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return e2.zip(e1, add); }); reactiveAssert(t, results.messages, [ onCompleted(215) ]); t.end(); }); test('Observable.zip never non-empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e2.zip(e1, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.zip non-empty never', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var e2 = Observable.never(); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, []); t.end(); }); test('Observable.zip non-empty non-empty', function (t) { var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onCompleted(240) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, [ onNext(220, 2 + 3), onCompleted(240) ]); t.end(); }); test('Observable.zip empty error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.zip error empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.zip(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.zip never error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, [onError(220, error)]); t.end(); }); test('Observable.zip error never', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = Observable.never(); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.zip(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.zip error error', function (t) { var error1 = new Error(); var error2 = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onError(230, error1) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error2) ); var results = scheduler.startScheduler(function () { return e2.zip(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error2) ]); t.end(); }); test('Observable.zip some error', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.zip error some', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var results = scheduler.startScheduler(function () { return e2.zip(e1, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); t.end(); }); test('Observable.zip some data asymmetric 1', function (t) { var i; var scheduler = new TestScheduler(); var msgs1 = (function () { var results = []; for (i = 0; i < 5; i++) { results.push(onNext(205 + i * 5, i)); } return results; })(); var msgs2 = (function () { var results = []; for (i = 0; i < 10; i++) { results.push(onNext(205 + i * 8, i)); } return results; })(); var len = Math.min(msgs1.length, msgs2.length); var e1 = scheduler.createHotObservable(msgs1); var e2 = scheduler.createHotObservable(msgs2); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }).messages; t.equal(len, results.length); for (i = 0; i < len; i++) { var sum = msgs1[i].value.value + msgs2[i].value.value; var time = Math.max(msgs1[i].time, msgs2[i].time); t.ok(results[i].value.kind === 'N' && results[i].time === time && results[i].value.value === sum); } t.end(); }); test('Observable.zip some data asymmetric 2', function (t) { var i; var scheduler = new TestScheduler(); var msgs1 = (function () { var results = []; for (i = 0; i < 10; i++) { results.push(onNext(205 + i * 5, i)); } return results; })(); var msgs2 = (function () { var results = []; for (i = 0; i < 5; i++) { results.push(onNext(205 + i * 8, i)); } return results; })(); var len = Math.min(msgs1.length, msgs2.length); var e1 = scheduler.createHotObservable(msgs1); var e2 = scheduler.createHotObservable(msgs2); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }).messages; t.equal(len, results.length); for (i = 0; i < len; i++) { var sum = msgs1[i].value.value + msgs2[i].value.value; var time = Math.max(msgs1[i].time, msgs2[i].time); t.ok(results[i].value.kind === 'N' && results[i].time === time && results[i].value.value === sum); } t.end(); }); test('Observable.zip some data symmetric', function (t) { var i; var scheduler = new TestScheduler(); var msgs1 = (function () { var results = []; for (i = 0; i < 10; i++) { results.push(onNext(205 + i * 5, i)); } return results; })(); var msgs2 = (function () { var results = []; for (i = 0; i < 10; i++) { results.push(onNext(205 + i * 8, i)); } return results; })(); var len = Math.min(msgs1.length, msgs2.length); var e1 = scheduler.createHotObservable(msgs1); var e2 = scheduler.createHotObservable(msgs2); var results = scheduler.startScheduler(function () { return e1.zip(e2, add); }).messages; t.equal(len, results.length); for (i = 0; i < len; i++) { var sum = msgs1[i].value.value + msgs2[i].value.value; var time = Math.max(msgs1[i].time, msgs2[i].time); t.ok(results[i].value.kind === 'N' && results[i].time === time && results[i].value.value === sum); } t.end(); }); test('Observable.zip selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var e1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(240) ); var e2 = scheduler.createHotObservable( onNext(150, 1), onNext(220, 3), onNext(230, 5), onCompleted(250) ); var results = scheduler.startScheduler(function () { return e1.zip(e2, function (x, y) { if (y === 5) { throw error; } else { return x + y; } }); }); reactiveAssert(t, results.messages, [ onNext(220, 2 + 3), onError(230, error) ]); t.end(); }); test('Observable.zip right completes first', function (t) { var scheduler = new TestScheduler(); var o = scheduler.createHotObservable( onNext(150, 1), onNext(215, 4), onCompleted(225) ); var e = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onCompleted(220) ); var results = scheduler.startScheduler(function () { return o.zip(e, add); }); reactiveAssert(t, results.messages, [ onNext(215, 6), onCompleted(225) ]); reactiveAssert(t, o.subscriptions, [ subscribe(200, 225) ]); reactiveAssert(t, e.subscriptions, [ subscribe(200, 225) ]); t.end(); }); test('Observable.zipIterable never empty', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1) ); var n2 = []; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable.zipIterable empty empty', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var n2 = []; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable.zipIterable empty non-empty', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onCompleted(210) ); var n2 = [2]; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onCompleted(210) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 210) ]); t.end(); }); test('Observable.zipIterable non-empty empty', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(220) ); var n2 = []; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onCompleted(215) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 215) ]); t.end(); }); test('Observable.zipIterable never non-empty', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1) ); var n2 = [2]; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, []); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable.zipIterable non-empty non-empty', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onCompleted(230) ); var n2 = [3]; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onNext(215, 2 + 3), onCompleted(230) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 230) ]); t.end(); }); test('Observable.zipIterable error empty', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var n2 = []; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable.zipIterable error some', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onError(220, error) ); var n2 = [2]; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onError(220, error) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 220) ]); t.end(); }); test('Observable.zipIterable some data both sides', function (t) { var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onNext(210, 2), onNext(220, 3), onNext(230, 4), onNext(240, 5) ); var n2 = [5, 4, 3, 2]; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, add); }); reactiveAssert(t, results.messages, [ onNext(210, 7), onNext(220, 7), onNext(230, 7), onNext(240, 7) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 1000) ]); t.end(); }); test('Observable.zipIterable selector throws', function (t) { var error = new Error(); var scheduler = new TestScheduler(); var n1 = scheduler.createHotObservable( onNext(150, 1), onNext(215, 2), onNext(225, 4), onCompleted(240) ); var n2 = [3, 5]; var results = scheduler.startScheduler(function () { return n1.zipIterable(n2, function (x, y) { if (y === 5) { throw error; } return x + y; }); }); reactiveAssert(t, results.messages, [ onNext(215, 2 + 3), onError(225, error) ]); reactiveAssert(t, n1.subscriptions, [ subscribe(200, 225) ]); t.end(); }); RxJS-4.1.0/src/modular/testing/000077500000000000000000000000001266736161100162625ustar00rootroot00000000000000RxJS-4.1.0/src/modular/testing/coldobservable.js000066400000000000000000000023751266736161100216150ustar00rootroot00000000000000'use strict'; var CompositeDisposable = require('../compositedisposable'); var Disposable = require('../disposable'); var Observable = require('../observable'); var Subscription = require('./subscription'); var inherits = require('inherits'); function ColdObservable(scheduler, messages) { Observable.call(this); this.scheduler = scheduler; this.messages = messages; this.subscriptions = []; } inherits(ColdObservable, Observable); ColdObservable.prototype._subscribe = function (o) { var message, notification, observable = this; this.subscriptions.push(new Subscription(this.scheduler.clock)); var index = this.subscriptions.length - 1; var d = new CompositeDisposable(); for (var i = 0, len = this.messages.length; i < len; i++) { message = this.messages[i]; notification = message.value; (function (innerNotification) { d.add(observable.scheduler.scheduleRelative(null, message.time, function () { innerNotification.accept(o); return Disposable.empty; })); })(notification); } return Disposable.create(function () { observable.subscriptions[index] = new Subscription(observable.subscriptions[index].subscribe, observable.scheduler.clock); d.dispose(); }); }; module.exports = ColdObservable; RxJS-4.1.0/src/modular/testing/hotobservable.js000066400000000000000000000026251266736161100214640ustar00rootroot00000000000000'use strict'; var Disposable = require('../disposable'); var Observable = require('../observable'); var Subscription = require('./subscription'); var inherits = require('inherits'); function HotObservable(scheduler, messages) { Observable.call(this); var message, notification, observable = this; this.scheduler = scheduler; this.messages = messages; this.subscriptions = []; this.observers = []; for (var i = 0, len = this.messages.length; i < len; i++) { message = this.messages[i]; notification = message.value; (function (innerNotification) { scheduler.scheduleAbsolute(null, message.time, function () { var obs = observable.observers.slice(0); for (var j = 0, jLen = obs.length; j < jLen; j++) { innerNotification.accept(obs[j]); } return Disposable.empty; }); })(notification); } } inherits(HotObservable, Observable); HotObservable.prototype._subscribe = function (o) { var observable = this; this.observers.push(o); this.subscriptions.push(new Subscription(this.scheduler.clock)); var index = this.subscriptions.length - 1; return Disposable.create(function () { var idx = observable.observers.indexOf(o); observable.observers.splice(idx, 1); observable.subscriptions[index] = new Subscription(observable.subscriptions[index].subscribe, observable.scheduler.clock); }); }; module.exports = HotObservable; RxJS-4.1.0/src/modular/testing/mockdisposable.js000066400000000000000000000004321266736161100216160ustar00rootroot00000000000000'use strict'; function MockDisposable (scheduler) { this.scheduler = scheduler; this.disposes = []; this.disposes.push(this.scheduler.clock); } MockDisposable.prototype.dispose = function () { this.disposes.push(this.scheduler.clock); }; module.exports = MockDisposable; RxJS-4.1.0/src/modular/testing/mockobserver.js000066400000000000000000000014261266736161100213240ustar00rootroot00000000000000'use strict'; var Notification = require('../notification'); var Observer = require('../observer'); var Recorded = require('./recorded'); var inherits = require('inherits'); function MockObserver(scheduler) { Observer.call(this); this.scheduler = scheduler; this.messages = []; } inherits(MockObserver, Observer); MockObserver.prototype.onNext = function (value) { this.messages.push(new Recorded(this.scheduler.clock, Notification.createOnNext(value))); }; MockObserver.prototype.onError = function (e) { this.messages.push(new Recorded(this.scheduler.clock, Notification.createOnError(e))); }; MockObserver.prototype.onCompleted = function () { this.messages.push(new Recorded(this.scheduler.clock, Notification.createOnCompleted())); }; module.exports = MockObserver; RxJS-4.1.0/src/modular/testing/mockpromise.js000066400000000000000000000037361266736161100211610ustar00rootroot00000000000000'use strict'; var Disposable = require('../disposable'); var ReactiveTest = require('./reactivetest'); var Subscription = require('./subscription'); var create = require('../observer/create'); function MockPromise(scheduler, messages) { var self = this; this.scheduler = scheduler; this.messages = messages; this.subscriptions = []; this.observers = []; for (var i = 0, len = this.messages.length; i < len; i++) { var message = this.messages[i], notification = message.value; (function (innerNotification) { scheduler.scheduleAbsolute(null, message.time, function () { var obs = self.observers.slice(0); for (var j = 0, jLen = obs.length; j < jLen; j++) { innerNotification.accept(obs[j]); } return Disposable.empty; }); })(notification); } } MockPromise.prototype.then = function (onResolved, onRejected) { var self = this; this.subscriptions.push(new Subscription(this.scheduler.clock)); var index = this.subscriptions.length - 1; var newPromise; var observer = create( function (x) { var retValue = onResolved(x); if (retValue && typeof retValue.then === 'function') { newPromise = retValue; } else { var ticks = self.scheduler.clock; newPromise = new MockPromise(self.scheduler, [ReactiveTest.onNext(ticks, undefined), ReactiveTest.onCompleted(ticks)]); } var idx = self.observers.indexOf(observer); self.observers.splice(idx, 1); self.subscriptions[index] = new Subscription(self.subscriptions[index].subscribe, self.scheduler.clock); }, function (err) { onRejected(err); var idx = self.observers.indexOf(observer); self.observers.splice(idx, 1); self.subscriptions[index] = new Subscription(self.subscriptions[index].subscribe, self.scheduler.clock); } ); this.observers.push(observer); return newPromise || new MockPromise(this.scheduler, this.messages); }; module.exports = MockPromise; RxJS-4.1.0/src/modular/testing/reactiveassert.js000066400000000000000000000014131266736161100216430ustar00rootroot00000000000000'use strict'; var isEqual = require('../internal/isequal'); function createMessage(actual, expected) { return 'Expected: [' + expected.toString() + '] Actual: [' + actual.toString() + ']'; } module.exports = function assertEqual (t, actual, expected) { var i, isOk = true; if (expected.length !== actual.length) { return t.ok(false, 'Not equal length.' + createMessage(actual, expected)); } for (i = 0; i < expected.length; i++) { var e = expected[i], a = actual[i]; // ALlow for predicates if (e.value && typeof e.value.predicate === 'function') { isOk = e.time === a.time && e.value.predicate(a.value); } else { isOk = isEqual(e, a); } if (!isOk) { break; } } t.ok(isOk, createMessage(actual, expected)); }; RxJS-4.1.0/src/modular/testing/reactivetest.js000066400000000000000000000057521266736161100213330ustar00rootroot00000000000000'use strict'; var Notification = require('../notification'); var Recorded = require('./recorded'); var Subscription = require('./subscription'); function OnNextPredicate(predicate) { this.predicate = predicate; } OnNextPredicate.prototype.equals = function (other) { if (other === this) { return true; } if (other == null) { return false; } if (other.kind !== 'N') { return false; } return this.predicate(other.value); }; function OnErrorPredicate(predicate) { this.predicate = predicate; } OnErrorPredicate.prototype.equals = function (other) { if (other === this) { return true; } if (other == null) { return false; } if (other.kind !== 'E') { return false; } return this.predicate(other.error); }; module.exports = { /** Default virtual time used for creation of observable sequences in unit tests. */ created: 100, /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: 200, /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: 1000, /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext: function (ticks, value) { return typeof value === 'function' ? new Recorded(ticks, new OnNextPredicate(value)) : new Recorded(ticks, Notification.createOnNext(value)); }, /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError: function (ticks, error) { return typeof error === 'function' ? new Recorded(ticks, new OnErrorPredicate(error)) : new Recorded(ticks, Notification.createOnError(error)); }, /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted: function (ticks) { return new Recorded(ticks, Notification.createOnCompleted()); }, /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe: function (start, end) { return new Subscription(start, end); } }; RxJS-4.1.0/src/modular/testing/recorded.js000066400000000000000000000021271266736161100204110ustar00rootroot00000000000000'use strict'; var isEqual = require('../internal/isequal'); /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ function Recorded (time, value, comparer) { this.time = time; this.value = value; this.comparer = comparer || isEqual; } /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ Recorded.prototype.equals = function (other) { return this.time === other.time && this.comparer(this.value, other.value); }; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ Recorded.prototype.toString = function () { return this.value.toString() + '@' + this.time; }; module.exports = Recorded; RxJS-4.1.0/src/modular/testing/subscription.js000066400000000000000000000021441266736161100213450ustar00rootroot00000000000000'use strict'; /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ function Subscription (start, end) { this.subscribe = start; this.unsubscribe = end || Number.MAX_VALUE; } /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ Subscription.prototype.equals = function (other) { return this.subscribe === other.subscribe && this.unsubscribe === other.unsubscribe; }; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ Subscription.prototype.toString = function () { return '(' + this.subscribe + ', ' + (this.unsubscribe === Number.MAX_VALUE ? 'Infinite' : this.unsubscribe) + ')'; }; module.exports = Subscription; RxJS-4.1.0/src/modular/testing/testscheduler.js000066400000000000000000000144151266736161100215030ustar00rootroot00000000000000'use strict'; var ColdObservable = require('./coldobservable'); var Disposable = require('../disposable'); var HotObservable = require('./hotobservable'); var MockObserver = require('./mockobserver'); var MockPromise = require('./mockpromise'); var MockDisposable = require('./mockdisposable'); var ReactiveTest = require('./reactivetest'); var VirtualTimeScheduler = require('../scheduler/virtualtimescheduler'); var inherits = require('inherits'); function baseComparer(x, y) { return x > y ? 1 : (x < y ? -1 : 0); } function TestScheduler() { VirtualTimeScheduler.call(this, 0, baseComparer); } inherits(TestScheduler, VirtualTimeScheduler); /** * Schedules an action to be executed at the specified virtual time. * * @param state State passed to the action to be executed. * @param dueTime Absolute virtual time at which to execute the action. * @param action Action to be executed. * @return Disposable object used to cancel the scheduled action (best effort). */ TestScheduler.prototype.scheduleAbsolute = function (state, dueTime, action) { dueTime <= this.clock && (dueTime = this.clock + 1); return VirtualTimeScheduler.prototype.scheduleAbsolute.call(this, state, dueTime, action); }; /** * Adds a relative virtual time to an absolute virtual time value. * * @param absolute Absolute virtual time value. * @param relative Relative virtual time value to add. * @return Resulting absolute virtual time sum value. */ TestScheduler.prototype.add = function (absolute, relative) { return absolute + relative; }; /** * Converts the absolute virtual time value to a DateTimeOffset value. * * @param absolute Absolute virtual time value to convert. * @return Corresponding DateTimeOffset value. */ TestScheduler.prototype.toAbsoluteTime = function (absolute) { return new Date(absolute).getTime(); }; /** * Converts the TimeSpan value to a relative virtual time value. * * @param timeSpan TimeSpan value to convert. * @return Corresponding relative virtual time value. */ TestScheduler.prototype.toRelativeTime = function (timeSpan) { return timeSpan; }; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ TestScheduler.prototype.startScheduler = function (createFn, settings) { settings || (settings = {}); settings.created == null && (settings.created = ReactiveTest.created); settings.subscribed == null && (settings.subscribed = ReactiveTest.subscribed); settings.disposed == null && (settings.disposed = ReactiveTest.disposed); var observer = this.createObserver(), source, subscription; this.scheduleAbsolute(null, settings.created, function () { source = createFn(); return Disposable.empty; }); this.scheduleAbsolute(null, settings.subscribed, function () { subscription = source.subscribe(observer); return Disposable.empty; }); this.scheduleAbsolute(null, settings.disposed, function () { subscription.dispose(); return Disposable.empty; }); this.start(); return observer; }; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ TestScheduler.prototype.createHotObservable = function () { var len = arguments.length, args; if (Array.isArray(arguments[0])) { args = arguments[0]; } else { args = new Array(len); for (var i = 0; i < len; i++) { args[i] = arguments[i]; } } return new HotObservable(this, args); }; /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ TestScheduler.prototype.createColdObservable = function () { var len = arguments.length, args; if (Array.isArray(arguments[0])) { args = arguments[0]; } else { args = new Array(len); for (var i = 0; i < len; i++) { args[i] = arguments[i]; } } return new ColdObservable(this, args); }; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ TestScheduler.prototype.createResolvedPromise = function (ticks, value) { return new MockPromise(this, [ReactiveTest.onNext(ticks, value), ReactiveTest.onCompleted(ticks)]); }; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ TestScheduler.prototype.createRejectedPromise = function (ticks, reason) { return new MockPromise(this, [ReactiveTest.onError(ticks, reason)]); }; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ TestScheduler.prototype.createObserver = function () { return new MockObserver(this); }; /** * Creates a disposable that records subscriptions and unsubscriptions. * @return A Disposable that has the absolute time for subscription and unsubscriptions. */ TestScheduler.prototype.createDisposable = function () { return new MockDisposable(this); }; module.exports = TestScheduler; RxJS-4.1.0/src/modular/webpack.config.js000066400000000000000000000004011266736161100200160ustar00rootroot00000000000000'use strict'; module.exports = { module: { loaders: [ { test: /\.js$/, loaders: ['babel-loader'], exclude: /node_modules/ } ] }, output: { library: 'rx', libraryTarget: 'umd' }, resolve: { extensions: ['', '.js'] } }; RxJS-4.1.0/src/modular/webpack.config.production.js000066400000000000000000000005341266736161100222120ustar00rootroot00000000000000'use strict'; var webpack = require('webpack'); var baseConfig = require('./webpack.config.js'); var config = Object.create(baseConfig); config.plugins = [ new webpack.optimize.OccurenceOrderPlugin(), new webpack.optimize.UglifyJsPlugin({ compressor: { screw_ie8: true, warnings: false } }) ]; module.exports = config; RxJS-4.1.0/travis.sh000066400000000000000000000040421266736161100142170ustar00rootroot00000000000000repo="https://${GH_TOKEN}@github.com/$TRAVIS_REPO_SLUG.git" # If this is a pull request, we dont want to continue if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then echo "Nothing to do on a pull request" exit 0 fi # All Pull requests are to the branch called incoming-pr # If this is not that branch, the rest of the script is irrelevant if [ "$TRAVIS_BRANCH" != "incoming-pr" ] ; then echo "Nothing to do on the master branch" exit 0 fi git fetch git branch --all # This part of the script is run before installing deps or tests if [ "$1" = "before" ] ; then # So this is incoming-pr branch. Need to check if this is exactly same as the master # If it is, this branch does not have anything new, so no need to try and build it incoming_commit=$(git rev-parse HEAD) git checkout --orphan master git pull origin master --depth=1 master_commit=$(git rev-parse HEAD) if [ "$incoming_commit" = "$master_commit" ] ; then echo "Not required to build this as this is same as the master branch" exit 1 else git checkout incoming-pr echo "Current branch is - $(git rev-parse HEAD)" exit 0 fi fi git checkout incoming-pr if [ "$1" = "merge" ] ; then # If the build was successful, travis after-success will send merge echo "Merging incoming-pr to master" git checkout master git merge incoming-pr --log git push $repo master -q 2> /dev/null else # If build failed, travis after-failure will send ./travis.sh revert echo "Reverting dev branch to what master was" # Save the current changes to a new branch echo "Creating a new branch for failed build - incoming-pr-fail-$TRAVIS_BUILD_ID" git checkout -b incoming-pr-fail-$TRAVIS_BUILD_ID git push $repo incoming-pr-fail-$TRAVIS_BUILD_ID -q 2> /dev/null git checkout master fi echo "Making incoming-pr same as master" # Merge or revert is done, so make incoming-pr branch at par with master # This is done to make it ready for accepting the next pull request git push $repo --delete incoming-pr -q 2> /dev/null git branch -D incoming-pr git branch incoming-pr git push $repo incoming-pr -q 2> /dev/null RxJS-4.1.0/ts/000077500000000000000000000000001266736161100130015ustar00rootroot00000000000000RxJS-4.1.0/ts/core/000077500000000000000000000000001266736161100137315ustar00rootroot00000000000000RxJS-4.1.0/ts/core/abstractobserver.ts000066400000000000000000000032131266736161100176530ustar00rootroot00000000000000/// /// module Rx { export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } } (function() { var iObserver: Rx.IObserver; var abstractObserver: Rx.internals.AbstractObserver; iObserver = abstractObserver; }); RxJS-4.1.0/ts/core/anonymousobservable.ts000066400000000000000000000004371266736161100204020ustar00rootroot00000000000000/// module Rx { export interface AnonymousObservable extends Observable { } } (function() { var observable: Rx.Observable; var anonymousObservable: Rx.AnonymousObservable; observable = anonymousObservable; }); RxJS-4.1.0/ts/core/anonymousobserver.ts000066400000000000000000000026601266736161100201050ustar00rootroot00000000000000/// module Rx { /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; } (function() { var iObserver: Rx.IObserver; var anonymousObserver: Rx.AnonymousObserver; iObserver = anonymousObserver; }); RxJS-4.1.0/ts/core/backpressure/000077500000000000000000000000001266736161100164225ustar00rootroot00000000000000RxJS-4.1.0/ts/core/backpressure/controlled.ts000066400000000000000000000021001266736161100211300ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Attaches a controller to the observable sequence with the ability to queue. * @example * var source = Rx.Observable.interval(100).controlled(); * source.request(3); // Reads 3 values * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request * @param {Scheduler} scheduler determines how the requests will be scheduled * @returns {Observable} The observable sequence which only propagates values on request. */ controlled(enableQueue?: boolean, scheduler?: IScheduler): ControlledObservable; } export interface ControlledObservable extends Observable { request(numberOfItems?: number): IDisposable; } } (function() { var o: Rx.Observable; var c = o.controlled(); var d: Rx.IDisposable = c.request(); d = c.request(); d = c.request(5); }); RxJS-4.1.0/ts/core/backpressure/pausable.ts000066400000000000000000000016541266736161100205740ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausable(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausable(pauser?: Observable): PausableObservable; } export interface PausableObservable extends Observable { pause(): void; resume(): void; } } (function() { var o: Rx.Observable; var b: Rx.Observable; var c = o.pausable(); var c = o.pausable(b); c.pause(); c.resume(); }) RxJS-4.1.0/ts/core/backpressure/pausablebuffered.ts000066400000000000000000000015471266736161100223000ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, * and yields the values that were buffered while paused. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausableBuffered(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausableBuffered(pauser?: Observable): PausableObservable; } } (function() { var o: Rx.Observable; var b: Rx.Observable; var c = o.pausableBuffered(); var c = o.pausableBuffered(b); }) RxJS-4.1.0/ts/core/backpressure/pauser.ts000066400000000000000000000005421266736161100202720ustar00rootroot00000000000000module Rx { /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } } (function() { var p: Rx.Pauser; p.pause; p.resume; }) RxJS-4.1.0/ts/core/backpressure/stopandwait.ts000066400000000000000000000007311266736161100213300ustar00rootroot00000000000000/// module Rx { export interface ControlledObservable { /** * Attaches a stop and wait observable to the current observable. * @returns {Observable} A stop and wait observable. */ stopAndWait(): Observable; } } (function() { var observer: Rx.Observable; var controlledObserver: Rx.ControlledObservable; observer = controlledObserver.stopAndWait(); }) RxJS-4.1.0/ts/core/backpressure/windowed.ts000066400000000000000000000011071266736161100206110ustar00rootroot00000000000000/// module Rx { export interface ControlledObservable { /** * Creates a sliding windowed observable based upon the window size. * @param {Number} windowSize The number of items in the window * @returns {Observable} A windowed observable based upon the window size. */ windowed(windowSize: number): Observable; } } (function() { var observer: Rx.Observable; var controlledObserver: Rx.ControlledObservable; observer = controlledObserver.windowed(1); }) RxJS-4.1.0/ts/core/checkedobserver.ts000066400000000000000000000005221266736161100174360ustar00rootroot00000000000000/// module Rx { export interface CheckedObserver extends Observer { checkAccess(): void; } } (function() { var iObserver: Rx.IObserver; var checkedObserver: Rx.CheckedObserver; iObserver = checkedObserver; checkedObserver.checkAccess(); }); RxJS-4.1.0/ts/core/concurrency/000077500000000000000000000000001266736161100162635ustar00rootroot00000000000000RxJS-4.1.0/ts/core/concurrency/currentthreadscheduler.ts000066400000000000000000000005711266736161100234070ustar00rootroot00000000000000/// module Rx { export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } } (function() { var a: Rx.ICurrentThreadScheduler; a.scheduleRequired(); a = Rx.Scheduler.currentThread; }) RxJS-4.1.0/ts/core/concurrency/defaultscheduler.ts000066400000000000000000000004021266736161100221520ustar00rootroot00000000000000/// module Rx { export interface SchedulerStatic { default: IScheduler; async: IScheduler; } } (function() { var s : Rx.IScheduler; s = Rx.Scheduler.async; s = Rx.Scheduler.default; }) RxJS-4.1.0/ts/core/concurrency/historicalscheduler.ts000066400000000000000000000013001266736161100226650ustar00rootroot00000000000000/// module Rx { export interface HistoricalScheduler extends VirtualTimeScheduler { } export var HistoricalScheduler: { /** * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ new (initialClock: number, comparer: _Comparer): HistoricalScheduler; }; } (function() { var a: Rx.HistoricalScheduler = new Rx.HistoricalScheduler(1, (a, b) => 1); }) RxJS-4.1.0/ts/core/concurrency/immediatescheduler.ts000066400000000000000000000003171266736161100224710ustar00rootroot00000000000000/// module Rx { export interface SchedulerStatic { immediate: IScheduler; } } (function() { var s : Rx.IScheduler; s = Rx.Scheduler.immediate; }) RxJS-4.1.0/ts/core/concurrency/scheduleditem.ts000066400000000000000000000027041266736161100214550ustar00rootroot00000000000000/// /// module Rx { export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } } (function() { var item = new Rx.internals.ScheduledItem(Rx.Scheduler.default, {}, (sc, s) => Rx.Disposable.create(() => {}), 100); var item = new Rx.internals.ScheduledItem(Rx.Scheduler.default, {}, (sc, s) => Rx.Disposable.create(() => {}), 100, (x, y) => 500); item.scheduler item.state; item.action; item.dueTime; item.comparer; item.disposable; item.invoke(); var n: number = item.compareTo(item); var b: boolean = item.isCancelled(); var d : Rx.IDisposable= item.invokeCore(); }) RxJS-4.1.0/ts/core/concurrency/scheduleperiodicrecursive.ts000066400000000000000000000011231266736161100240730ustar00rootroot00000000000000/// module Rx { export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } } (function() { var item = new Rx.internals.SchedulePeriodicRecursive(undefined, undefined, undefined, undefined); var d : Rx.IDisposable = item.start(); }) RxJS-4.1.0/ts/core/concurrency/scheduler.periodic.ts000066400000000000000000000016451266736161100224140ustar00rootroot00000000000000/// module Rx { export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } } (function() { var s : Rx.IScheduler; var d : Rx.IDisposable = s.schedulePeriodic('state', 100, (s) => s); }) RxJS-4.1.0/ts/core/concurrency/scheduler.recursive.ts000066400000000000000000000033311266736161100226170ustar00rootroot00000000000000/// module Rx { export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } } (function() { var s: Rx.IScheduler; var d: Rx.IDisposable = s.scheduleRecursive('state', (s, a) => Rx.Disposable.empty); var d: Rx.IDisposable = s.scheduleRecursiveFuture('state', 100, (s, a) => Rx.Disposable.empty); }) RxJS-4.1.0/ts/core/concurrency/scheduler.ts000066400000000000000000000042311266736161100206110ustar00rootroot00000000000000/// module Rx { export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; } (function() { var s: Rx.IScheduler; var d: Rx.IDisposable = s.schedule('state', (sh, s ) => Rx.Disposable.empty); var d: Rx.IDisposable = s.scheduleFuture('state', 100, (sh, s ) => Rx.Disposable.empty); var n : () => number = Rx.Scheduler.now; var a : number = Rx.Scheduler.normalize(1000); }) RxJS-4.1.0/ts/core/concurrency/scheduler.wrappers.ts000066400000000000000000000011561266736161100224560ustar00rootroot00000000000000/// module Rx { export interface IScheduler { /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ catch(handler: Function): IScheduler; } } (function() { var s : Rx.IScheduler = Rx.Scheduler.default.catch(() => {}); }) RxJS-4.1.0/ts/core/concurrency/virtualtimescheduler.ts000066400000000000000000000052741266736161100231070ustar00rootroot00000000000000/// /// /// module Rx { export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } } (function() { interface TA { } interface TR { } var vts: Rx.VirtualTimeScheduler; var b: boolean = vts.isEnabled; var a: TA = vts.add(100, 500); var n: number = vts.toAbsoluteTime(1000); var r: TR = vts.toRelativeTime(1000); var d: Rx.IDisposable = vts.start(); vts.stop(); vts.advanceTo(null); vts.advanceBy(null); vts.sleep(null); var i: Rx.internals.ScheduledItem = vts.getNext(); b = vts.isEnabled; }) RxJS-4.1.0/ts/core/disposables/000077500000000000000000000000001266736161100162415ustar00rootroot00000000000000RxJS-4.1.0/ts/core/disposables/booleandisposable.ts000066400000000000000000000024541266736161100223030ustar00rootroot00000000000000/// module Rx { export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; } (function() { var sad: Rx.SingleAssignmentDisposable = new Rx.SingleAssignmentDisposable(); sad.dispose(); sad.isDisposed; var d = sad.getDisposable(); sad.setDisposable(d); var sad: Rx.SerialDisposable = new Rx.SerialDisposable(); sad.dispose(); sad.isDisposed; var d = sad.getDisposable(); sad.setDisposable(d); }); RxJS-4.1.0/ts/core/disposables/compositedisposable.ts000066400000000000000000000031021266736161100226550ustar00rootroot00000000000000/// module Rx { /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; } (function() { var cd = new Rx.CompositeDisposable(); var cd = new Rx.CompositeDisposable(Rx.Disposable.create(() => { })); var cd = new Rx.CompositeDisposable([Rx.Disposable.create(() => { })]); cd.add(Rx.Disposable.create(() => { })); cd.remove(Rx.Disposable.create(() => { })); cd.dispose(); cd.isDisposed; }) RxJS-4.1.0/ts/core/disposables/disposable.ts000066400000000000000000000033711266736161100207420ustar00rootroot00000000000000module Rx { export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; } (function() { var id: Rx.IDisposable; var d : Rx.Disposable; id.dispose(); d.dispose(); d.isDisposed; Rx.Disposable.create(() => {}) Rx.Disposable.empty; Rx.Disposable.isDisposable(d); }) RxJS-4.1.0/ts/core/disposables/refcountdisposable.ts000066400000000000000000000024431266736161100225070ustar00rootroot00000000000000/// module Rx { /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; } (function() { var d = Rx.Disposable.create(() => {}); var rcd = new Rx.RefCountDisposable(d); d = rcd.getDisposable(); rcd.dispose(); rcd.isDisposed; }) RxJS-4.1.0/ts/core/es5.ts000066400000000000000000000016421266736161100150000ustar00rootroot00000000000000module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike; /** * Promise A+ */ export interface Promise { then(onFulfilled: (value: T) => R|Promise, onRejected: (error: any) => Promise): Promise; then(onFulfilled: (value: T) => R|Promise, onRejected?: (error: any) => R): Promise; } /** * Promise A+ */ export interface IPromise extends Promise { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } } RxJS-4.1.0/ts/core/es6-iterable.d.ts000066400000000000000000000123471266736161100170140ustar00rootroot00000000000000interface Symbol { /** Returns a string representation of an object. */ toString(): string; /** Returns the primitive value of the specified object. */ valueOf(): Object; [Symbol.toStringTag]: string; } interface SymbolConstructor { /** * A reference to the prototype. */ prototype: Symbol; /** * Returns a new unique Symbol value. * @param description Description of the new Symbol object. */ (description?: string|number): symbol; /** * Returns a Symbol object from the global symbol registry matching the given key if found. * Otherwise, returns a new symbol with this key. * @param key key to search for. */ for(key: string): symbol; /** * Returns a key from the global symbol registry matching the given Symbol if found. * Otherwise, returns a undefined. * @param sym Symbol to find the key for. */ keyFor(sym: symbol): string; // Well-known Symbols /** * A method that determines if a constructor object recognizes an object as one of the * constructor’s instances. Called by the semantics of the instanceof operator. */ hasInstance: symbol; /** * A Boolean value that if true indicates that an object should flatten to its array elements * by Array.prototype.concat. */ isConcatSpreadable: symbol; /** * A method that returns the default iterator for an object. Called by the semantics of the * for-of statement. */ iterator: symbol; /** * A regular expression method that matches the regular expression against a string. Called * by the String.prototype.match method. */ match: symbol; /** * A regular expression method that replaces matched substrings of a string. Called by the * String.prototype.replace method. */ replace: symbol; /** * A regular expression method that returns the index within a string that matches the * regular expression. Called by the String.prototype.search method. */ search: symbol; /** * A function valued property that is the constructor function that is used to create * derived objects. */ species: symbol; /** * A regular expression method that splits a string at the indices that match the regular * expression. Called by the String.prototype.split method. */ split: symbol; /** * A method that converts an object to a corresponding primitive value.Called by the ToPrimitive * abstract operation. */ toPrimitive: symbol; /** * A String value that is used in the creation of the default string description of an object. * Called by the built-in method Object.prototype.toString. */ toStringTag: symbol; /** * An Object whose own property names are property names that are excluded from the with * environment bindings of the associated objects. */ unscopables: symbol; } declare var Symbol: SymbolConstructor; interface IteratorResult { done: boolean; value?: T; } interface Iterator { next(value?: any): IteratorResult; return?(value?: any): IteratorResult; throw?(e?: any): IteratorResult; } interface Iterable { [Symbol.iterator](): Iterator; } interface IterableIterator extends Iterator { [Symbol.iterator](): IterableIterator; } interface WeakMap { clear(): void; delete(key: K): boolean; get(key: K): V; has(key: K): boolean; set(key: K, value?: V): WeakMap; } interface WeakMapConstructor { new (): WeakMap; prototype: WeakMap; } declare var WeakMap: WeakMapConstructor; interface Map { clear(): void; delete(key: K): boolean; entries(): IterableIterator<[K, V]>; forEach(callbackfn: (value: V, index: K, map: Map) => void, thisArg?: any): void; get(key: K): V; has(key: K): boolean; keys(): IterableIterator; set(key: K, value?: V): Map; size: number; values(): IterableIterator; [Symbol.iterator]():IterableIterator<[K,V]>; [Symbol.toStringTag]: string; } interface MapConstructor { new (): Map; new (iterable: Iterable<[K, V]>): Map; prototype: Map; } declare var Map: MapConstructor; interface Set { add(value: T): Set; clear(): void; delete(value: T): boolean; entries(): IterableIterator<[T, T]>; forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; has(value: T): boolean; keys(): IterableIterator; size: number; values(): IterableIterator; [Symbol.iterator]():IterableIterator; [Symbol.toStringTag]: string; } interface SetConstructor { new (): Set; new (iterable: Iterable): Set; prototype: Set; } declare var Set: SetConstructor; interface WeakSet { add(value: T): WeakSet; clear(): void; delete(value: T): boolean; has(value: T): boolean; [Symbol.toStringTag]: string; } interface WeakSetConstructor { new (): WeakSet; new (iterable: Iterable): WeakSet; prototype: WeakSet; } declare var WeakSet: WeakSetConstructor; RxJS-4.1.0/ts/core/es6-promise.d.ts000066400000000000000000000073451266736161100167050ustar00rootroot00000000000000 interface PromiseLike { /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of which ever callback is executed. */ then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): PromiseLike; then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): PromiseLike; } /** * Represents the completion of an asynchronous operation */ interface Promise { /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of which ever callback is executed. */ then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; /** * Attaches a callback for only the rejection of the Promise. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of the callback. */ catch(onrejected?: (reason: any) => T | PromiseLike): Promise; catch(onrejected?: (reason: any) => void): Promise; [Symbol.toStringTag]: string; } interface PromiseConstructor { /** * A reference to the prototype. */ prototype: Promise; /** * Creates a new Promise. * @param executor A callback used to initialize the promise. This callback is passed two arguments: * a resolve callback used resolve the promise with a value or the result of another promise, * and a reject callback used to reject the promise with a provided reason or error. */ new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; /** * Creates a Promise that is resolved with an array of results when all of the provided Promises * resolve, or rejected when any Promise is rejected. * @param values An array of Promises. * @returns A new Promise. */ all(values: Iterable>): Promise; /** * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved * or rejected. * @param values An array of Promises. * @returns A new Promise. */ race(values: Iterable>): Promise; /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ reject(reason: any): Promise; /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ reject(reason: any): Promise; /** * Creates a new resolved promise for the provided value. * @param value A promise. * @returns A promise whose internal state matches the provided promise. */ resolve(value: T | PromiseLike): Promise; /** * Creates a new resolved promise . * @returns A resolved promise. */ resolve(): Promise; [Symbol.species]: Function; } declare var Promise: PromiseConstructor; RxJS-4.1.0/ts/core/es6.ts000066400000000000000000000015141266736161100147770ustar00rootroot00000000000000/// /// module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike | Iterable; /** * Promise A+ */ export interface Promise extends PromiseLike { } /** * Promise A+ */ export interface IPromise extends PromiseLike { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } } RxJS-4.1.0/ts/core/internal/000077500000000000000000000000001266736161100155455ustar00rootroot00000000000000RxJS-4.1.0/ts/core/internal/bindcallback.ts000066400000000000000000000003301266736161100205020ustar00rootroot00000000000000module Rx { export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } } (function() { Rx.internals.bindCallback(() => {}, null, 100); }); RxJS-4.1.0/ts/core/internal/errors.ts000066400000000000000000000020041266736161100174250ustar00rootroot00000000000000module Rx { export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } } RxJS-4.1.0/ts/core/internal/isequal.ts000066400000000000000000000002701266736161100175570ustar00rootroot00000000000000module Rx { export module internals { export var isEqual : (left: any, right: any) => boolean; } } (function() { var b : boolean = Rx.internals.isEqual(1, 1); }); RxJS-4.1.0/ts/core/internal/priorityqueue.ts000066400000000000000000000024301266736161100210420ustar00rootroot00000000000000/// module Rx { export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } } (function() { var queue = new Rx.internals.PriorityQueue(100); var n : number = queue.length var b : boolean = queue.isHigherPriority(1, 100); queue.percolate(100); queue.heapify(100); var item: Rx.internals.ScheduledItem = queue.peek(); queue.removeAt(100); var item: Rx.internals.ScheduledItem = queue.dequeue(); queue.enqueue(item); b = queue.remove(item); n = Rx.internals.PriorityQueue.count; }); RxJS-4.1.0/ts/core/internal/util.ts000066400000000000000000000011441266736161100170720ustar00rootroot00000000000000/// /// module Rx { export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } } (function() { Rx.internals.inherits(null, null); Rx.internals.addProperties({}, 1, 2, 3); var o: Rx.Observable = Rx.internals.addRef(>{}, new Rx.SingleAssignmentDisposable()); }); RxJS-4.1.0/ts/core/joins/000077500000000000000000000000001266736161100150535ustar00rootroot00000000000000RxJS-4.1.0/ts/core/joins/pattern.ts000066400000000000000000000200661266736161100171040ustar00rootroot00000000000000/// /// module Rx { export interface Pattern2 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern3; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2) => TR): Plan; } interface Pattern3 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern4; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3) => TR): Plan; } interface Pattern4 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern5; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4) => TR): Plan; } interface Pattern5 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern6; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TR): Plan; } interface Pattern6 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern7; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TR): Plan; } interface Pattern7 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern8; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TR): Plan; } interface Pattern8 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern9; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TR): Plan; } interface Pattern9 { /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TR): Plan; } } RxJS-4.1.0/ts/core/joins/plan.ts000066400000000000000000000000531266736161100163530ustar00rootroot00000000000000module Rx { export class Plan { } } RxJS-4.1.0/ts/core/linq/000077500000000000000000000000001266736161100146745ustar00rootroot00000000000000RxJS-4.1.0/ts/core/linq/connectableobservable.ts000066400000000000000000000005551266736161100215730ustar00rootroot00000000000000/// module Rx { export interface ConnectableObservable extends Observable { connect(): IDisposable; refCount(): Observable; } } (function() { var co: Rx.ConnectableObservable; var d : Rx.IDisposable = co.connect(); var o : Rx.Observable = co.refCount(); }); RxJS-4.1.0/ts/core/linq/groupedobservable.ts000066400000000000000000000005741266736161100207640ustar00rootroot00000000000000/// module Rx { export interface GroupedObservable extends Observable { key: TKey; underlyingObservable: Observable; } } (function() { var go: Rx.GroupedObservable; var k: string = go.key; var o : Rx.Observable = go.underlyingObservable; }); RxJS-4.1.0/ts/core/linq/observable/000077500000000000000000000000001266736161100170205ustar00rootroot00000000000000RxJS-4.1.0/ts/core/linq/observable/amb.ts000066400000000000000000000020731266736161100201310ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } } (function() { var p : Rx.Promise; var o : Rx.Observable; var io : Rx.IObservable; var any: Rx.Observable = Rx.Observable.amb(p, o, io, p, o, io); var any: Rx.Observable = Rx.Observable.amb(p, p); var any: Rx.Observable = Rx.Observable.amb(o, o); var any: Rx.Observable = Rx.Observable.amb(io, io); }); RxJS-4.1.0/ts/core/linq/observable/ambproto.ts000066400000000000000000000012711266736161100212140ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } } (function() { var r : Rx.Observable; var o : Rx.Observable; var io : Rx.IObservable; var p : Rx.Promise; r = r.amb(o); r = r.amb(io); r = r.amb(p); }); RxJS-4.1.0/ts/core/linq/observable/and.ts000066400000000000000000000015671266736161100201430ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Creates a pattern that matches when both observable sequences have an available value. * * @param right Observable sequence to match with the current sequence. * @return {Pattern} Pattern object that matches when both observable sequences have an available value. */ and(right: Observable): Pattern2; } } (function() { var r: Rx.Observable; interface A { } var a: Rx.Observable; interface B { } var b: Rx.Observable; interface C { } var c: Rx.Observable; var n: Rx.Observable = Rx.Observable.when( r.and(a).and(b).and(c).thenDo((r, a, b, c) => { return 123; }) ); }); RxJS-4.1.0/ts/core/linq/observable/asobservable.ts000066400000000000000000000006551266736161100220460ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } } (function() { var s : Rx.Subject; var o : Rx.Observable = s.asObservable(); }); RxJS-4.1.0/ts/core/linq/observable/average.ts000066400000000000000000000015761266736161100210130ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the average of the sequence of values. */ average(keySelector?: _Selector, thisArg?: any): Observable; } } (function () { var os : Rx.Observable; var on : Rx.Observable; on.average(); os.average((v, i, s) => v.length + i); os.average((v, i, s) => v.length + i, {}); }); RxJS-4.1.0/ts/core/linq/observable/buffer.ts000066400000000000000000000053521266736161100206460ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferClosingSelector: () => Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable, bufferClosingSelector: () => Observable): Observable; } } (function() { var o : Rx.Observable; var open : Rx.Observable; var so : Rx.Observable = o.buffer(open); so = o.buffer(() => Rx.Observable.timer(100)); so = o.buffer(open, () => Rx.Observable.timer(100)); }); RxJS-4.1.0/ts/core/linq/observable/bufferwithcount.ts000066400000000000000000000013621266736161100226100ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } } (function() { var o : Rx.Observable; var so : Rx.Observable = o.bufferWithCount(100); so = o.bufferWithCount(100, 5); }); RxJS-4.1.0/ts/core/linq/observable/bufferwithtime.ts000066400000000000000000000041371266736161100224210ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable; /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var so: Rx.Observable = o.bufferWithTime(100); so = o.bufferWithTime(100, 5); var so: Rx.Observable = o.bufferWithTime(100, Rx.Scheduler.async); so = o.bufferWithTime(100, 5, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/bufferwithtimeorcount.ts000066400000000000000000000017341266736161100240330ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a buffer. * @param {Number} count Maximum element count of a buffer. * @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var so: Rx.Observable = o.bufferWithTimeOrCount(100, 200); var so: Rx.Observable = o.bufferWithTimeOrCount(100, 200, Rx.Scheduler.default); }) RxJS-4.1.0/ts/core/linq/observable/case.ts000066400000000000000000000047401266736161100203100ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => string, sources: { [key: string]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => number, sources: { [key: number]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var p: Rx.Promise; var e: Rx.Observable; var on: Rx.Observable; var pn: Rx.Promise; var en: Rx.Observable; var so : { [key: string]: Rx.ObservableOrPromise; } = {}; so['abc'] = p; so['def'] = e; so['xyz'] = o; var no : { [key: number]: Rx.ObservableOrPromise; } = {} no[1] = pn; no[2] = en; no[3] = on; o = Rx.Observable.case(() => 'abc', so) o = Rx.Observable.case(() => 'abc', so, e) o = Rx.Observable.case(() => 'abc', so, Rx.Scheduler.async); on = Rx.Observable.case(() => 1, no) on = Rx.Observable.case(() => 2, no, en); on = Rx.Observable.case(() => 3, no, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/catch.ts000066400000000000000000000024521266736161100204550ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } } (function() { var o : Rx.Observable; var io : Rx.IObservable; var p : Rx.Promise; var t = [o, p, o, p, io]; o = Rx.Observable.catch(o, p, o, p, io); o = Rx.Observable.catch(...t); o = Rx.Observable.catch(t); }); RxJS-4.1.0/ts/core/linq/observable/catchproto.ts000066400000000000000000000031711266736161100215400ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var io: Rx.IObservable; var p: Rx.Promise; o = o.catch((e) => o); o = o.catch((e) => io); o = o.catch((e) => p); o = o.catch(o); o = o.catch(io); o = o.catch(p); }); RxJS-4.1.0/ts/core/linq/observable/combinelatest.ts000066400000000000000000000214021266736161100222200ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } } (function() { var o: Rx.Observable; var io: Rx.IObservable; var so: Rx.Subject; var p: Rx.Promise<{ a: string }>; var r: Rx.Observable<{ vo: boolean, vio: string, vp: { a: string }, vso: number }> = Rx.Observable.combineLatest(o, io, p, so, (vo, vio, vp, vso) => ({ vo, vio, vp, vso })); var rr : Rx.Observable = Rx.Observable.combineLatest([o, io, so, p], (items) => 5); }); RxJS-4.1.0/ts/core/linq/observable/combinelatestproto.ts000066400000000000000000000222211266736161100233040ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } } (function() { var o: Rx.Observable; var io: Rx.IObservable; var so: Rx.Subject; var p: Rx.Promise<{ a: string }>; var r: Rx.Observable<{ vo: boolean, vio: string, vp: { a: string }, vso: number }> = o.combineLatest(io, p, so, (vo, vio, vp, vso) => ({ vo, vio, vp, vso })); var rr : Rx.Observable = o.combineLatest([io, so, p], (v1, items) => 5); }); RxJS-4.1.0/ts/core/linq/observable/concat.ts000066400000000000000000000022021266736161100206330ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } } (function() { var o: Rx.Observable; var io: Rx.IObservable; var so: Rx.Subject; var p: Rx.Promise; var o: Rx.Observable = Rx.Observable.concat(o, io, so, p); var o: Rx.Observable = Rx.Observable.concat([o, io, so, p]); }); RxJS-4.1.0/ts/core/linq/observable/concatall.ts000066400000000000000000000007431266736161100213340ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } } (function() { var o: Rx.Observable>; var oo : Rx.Observable = o.concatAll(); }); RxJS-4.1.0/ts/core/linq/observable/concatmap.ts000066400000000000000000000371701266736161100213450ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } (function() { var os: Rx.Observable; var on: Rx.Observable; on = os.concatMap((v, i) => Rx.Observable.range(0, i)); os = os.concatMap(z => Rx.Observable.just('abc').toPromise()); on = os.concatMap(z => [1, 2, 3]); os = os.concatMap((v, i) => Rx.Observable.range(0, i), (v1, v2, i) => v2.toString()); on = os.concatMap(z => Rx.Observable.just('abc').toPromise(), (v1, v2, i) => i); on = os.concatMap(z => [1, 2, 3], (v1, v2, i) => i); os.concatMap(on); os = os.concatMap(Rx.Observable.range(0, 5), (v1, v2, i) => v2.toString()); on = os.concatMap(Rx.Observable.just('abc').toPromise(), (v1, v2, i) => i); on = os.concatMap([1, 2, 3], (v1, v2, i) => i); on = os.selectConcat((v, i) => Rx.Observable.range(0, i)); on = os.selectConcat((v, i) => Rx.Observable.range(0, i)); os = os.selectConcat(z => Rx.Observable.just('abc').toPromise()); on = os.selectConcat(z => [1, 2, 3]); os = os.selectConcat((v, i) => Rx.Observable.range(0, i), (v1, v2, i) => v2.toString()); on = os.selectConcat(z => Rx.Observable.just('abc').toPromise(), (v1, v2, i) => i); on = os.selectConcat(z => [1, 2, 3], (v1, v2, i) => i); os.selectConcat(on); os = os.selectConcat(Rx.Observable.range(0, 5), (v1, v2, i) => v2.toString()); on = os.selectConcat(Rx.Observable.just('abc').toPromise(), (v1, v2, i) => i); on = os.selectConcat([1, 2, 3], (v1, v2, i) => i); }); RxJS-4.1.0/ts/core/linq/observable/concatmapobserver.ts000066400000000000000000000054571266736161100231200ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ concatMapObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectConcatObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; } } (function() { var os: Rx.Observable; var on: Rx.Observable; os.concatMapObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty()); os.selectConcatObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty()); os.concatMapObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty(), {}); os.selectConcatObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty(), {}); }); RxJS-4.1.0/ts/core/linq/observable/concatproto.ts000066400000000000000000000012171266736161100217240ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } } (function() { var o: Rx.Observable; var io: Rx.IObservable; var so: Rx.Subject; var p: Rx.Promise; var o: Rx.Observable = o.concat(o, io, so, p); }); RxJS-4.1.0/ts/core/linq/observable/count.ts000066400000000000000000000021241266736161100205170ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence containing a value that represents how many elements in the specified observable sequence satisfy a condition if provided, else the count of items. * @example * res = source.count(); * res = source.count(function (x) { return x > 3; }); * @param {Function} [predicate]A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function if provided, else the count of items in the sequence. */ count(predicate?: _Predicate, thisArg?: any): Observable; } } (function () { var os : Rx.Observable; var on : Rx.Observable; on.count(); os.count((v, i, s) => false); os.count((v, i, s) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/create.ts000066400000000000000000000021761266736161100206410ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } } (function () { var o : Rx.Observable; o = Rx.Observable.create(o => {}); o = Rx.Observable.create(o => Rx.Disposable.empty); o = Rx.Observable.create(o => () => {}); }); RxJS-4.1.0/ts/core/linq/observable/debounce.ts000066400000000000000000000024151266736161100211560ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } } (function () { var o: Rx.Observable; o.debounce(100); o.debounce(100, Rx.Scheduler.async); o.debounce(x => Rx.Observable.just(x.length)); }); RxJS-4.1.0/ts/core/linq/observable/defaultifempty.ts000066400000000000000000000015271266736161100224170ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } } (function () { var o: Rx.Observable; o.defaultIfEmpty(); o.defaultIfEmpty('default'); }); RxJS-4.1.0/ts/core/linq/observable/defer.ts000066400000000000000000000016041266736161100204560ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } } (function () { var o: Rx.Observable; Rx.Observable.defer(() => o); Rx.Observable.defer(() => o.toPromise()); }); RxJS-4.1.0/ts/core/linq/observable/delay.ts000066400000000000000000000077741266736161100205050ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } } (function () { var o: Rx.Observable; o.delay(1000); o.delay(new Date()); o.delay(1000, Rx.Scheduler.async); o.delay(new Date(), Rx.Scheduler.async); o.delay(x => Rx.Observable.timer(x.length)); o.delay(Rx.Observable.timer(1000), x => Rx.Observable.timer(x.length)); o.delay(x => Rx.Observable.timer(x.length).toPromise()); }); RxJS-4.1.0/ts/core/linq/observable/delaysubscription.ts000066400000000000000000000020111266736161100231250ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. * * @example * 1 - res = source.delaySubscription(5000); // 5s * 2 - res = source.delaySubscription(5000, Rx.Scheduler.default); // 5 seconds * * @param {Number} dueTime Relative or absolute time shift of the subscription. * @param {Scheduler} [scheduler] Scheduler to run the subscription delay timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delaySubscription(dueTime: number, scheduler?: IScheduler): Observable; } } (function () { var o: Rx.Observable; o.delaySubscription(1000); o.delaySubscription(1000, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/dematerialize.ts000066400000000000000000000007711266736161100222140ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } } (function () { var o : Rx.Observable; o.dematerialize(); }); RxJS-4.1.0/ts/core/linq/observable/distinct.ts000066400000000000000000000023431266736161100212130ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } } (function () { var o : Rx.Observable; o = o.distinct(); o = o.distinct(x => x.length); o = o.distinct(x => x.length, x => x.toString() + '' + x); }); RxJS-4.1.0/ts/core/linq/observable/distinctuntilchanged.ts000066400000000000000000000024451266736161100236040ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } } (function () { var o : Rx.Observable; o = o.distinctUntilChanged(); o = o.distinctUntilChanged(x => x.length); o = o.distinctUntilChanged(x => x.length, (x, y) => true); }); RxJS-4.1.0/ts/core/linq/observable/dowhile.ts000066400000000000000000000012541266736161100210250ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Repeats source as long as condition holds emulating a do while loop. * * @param {Function} condition The condition which determines if the source will be repeated. * @param {Observable} source The observable sequence that will be run if the condition function returns true. * @returns {Observable} An observable sequence which is repeated as long as the condition holds. */ doWhile(condition: () => boolean): Observable; } } (function () { var o : Rx.Observable; o = o.doWhile(() => false); }); RxJS-4.1.0/ts/core/linq/observable/elementat.ts000066400000000000000000000012241266736161100213450ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the element at a specified index in a sequence or default value if not found. * @param {Number} index The zero-based index of the element to retrieve. * @param {Any} [defaultValue] The default value to use if elementAt does not find a value. * @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence. */ elementAt(index: number): Observable; } } (function () { var o : Rx.Observable; o = o.elementAt(5); }); RxJS-4.1.0/ts/core/linq/observable/empty.ts000066400000000000000000000013711266736161100205300ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } } (function () { var o : Rx.Observable; o = Rx.Observable.empty(); o = Rx.Observable.empty(Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/every.ts000066400000000000000000000014771266736161100205330ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Determines whether all elements of an observable sequence satisfy a condition. * @param {Function} [predicate] A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. */ every(predicate?: _Predicate, thisArg?: any): Observable; // alias for all } } (function () { var o : Rx.Observable; var b : Rx.Observable; b = o.every(); b = o.every(() => true); b = o.every(() => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/expand.ts000066400000000000000000000017341266736161100206540ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Expands an observable sequence by recursively invoking selector. * * @param {Function} selector Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. * @param {Scheduler} [scheduler] Scheduler on which to perform the expansion. If not provided, this defaults to the current thread scheduler. * @returns {Observable} An observable sequence containing all the elements produced by the recursive expansion. */ expand(selector: (item: T) => Observable, scheduler?: IScheduler): Observable; } } (function () { var o : Rx.Observable; o = o.expand(i => Rx.Observable.return(i + 1)); o = o.expand(i => Rx.Observable.return(i + 1), Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/filter.ts000066400000000000000000000035401266736161100206570ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Filters the elements of an observable sequence based on a predicate by incorporating the element's index. * * @example * var res = source.where(function (value) { return value < 10; }); * var res = source.where(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each source element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains elements from the input sequence that satisfy the condition. */ where(predicate: _Predicate, thisArg?: any): Observable; /** * Filters the elements of an observable sequence based on a predicate by incorporating the element's index. * * @example * var res = source.where(function (value) { return value < 10; }); * var res = source.where(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each source element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains elements from the input sequence that satisfy the condition. */ filter(predicate: _Predicate, thisArg?: any): Observable; } } (function () { var o : Rx.Observable; o = o.where(i => true); o = o.where(i => true, {}); o = o.filter(i => true); o = o.filter(i => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/finally.ts000066400000000000000000000017701266736161100210330ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } } (function () { var o : Rx.Observable; o = o.finally(() => {}); o = o.ensure(() => {}); }); RxJS-4.1.0/ts/core/linq/observable/find.ts000066400000000000000000000015251266736161100203130ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, undefined. */ find(predicate: _Predicate, thisArg?: any): Observable; } } (function () { var o : Rx.Observable; o = o.find((x) => true); o = o.find((x) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/findindex.ts000066400000000000000000000017031266736161100213410ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Searches for an element that matches the conditions defined by the specified predicate, and returns * an Observable sequence with the zero-based index of the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. */ findIndex(predicate: _Predicate, thisArg?: any): Observable; } } (function () { var o : Rx.Observable; o = o.findIndex((x) => true); o = o.findIndex((x) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/first.ts000066400000000000000000000012311266736161100205140ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence. * @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence. */ first(predicate?: _Predicate, thisArg?: any): Observable; } } (function () { var o : Rx.Observable; o = o.first((x) => true); o = o.first((x) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/flatmap.ts000066400000000000000000000403241266736161100210170ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } (function() { var o: Rx.Observable; var n: Rx.Observable; n = o.flatMap(x => Rx.Observable.from([1, 2, 3])); n = o.flatMap(x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMap(x => [1, 2, 3]); n = o.flatMap((x, z, b) => Rx.Observable.from([1, 2, 3]), (x, y, a, b) => y); n = o.flatMap(x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMap(x => [1, 2, 3], (x, y) => y); n = o.flatMap(Rx.Observable.from([1, 2, 3])); n = o.flatMap(Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMap([1, 2, 3]); n = o.flatMap(Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMap(Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMap([1, 2, 3], (x, y) => y); n = o.selectMany(x => Rx.Observable.from([1, 2, 3])); n = o.selectMany(x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectMany(x => [1, 2, 3]); n = o.selectMany(x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectMany(x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectMany(x => [1, 2, 3], (x, y) => y); n = o.selectMany(Rx.Observable.from([1, 2, 3])); n = o.selectMany(Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectMany([1, 2, 3]); n = o.selectMany(Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectMany(Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectMany([1, 2, 3], (x, y) => y); }); RxJS-4.1.0/ts/core/linq/observable/flatmapfirst.ts000066400000000000000000000245601266736161100220730ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } (function() { var o: Rx.Observable; var n: Rx.Observable; n = o.flatMapFirst(x => Rx.Observable.from([1, 2, 3])); n = o.flatMapFirst(x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMapFirst(x => [1, 2, 3]); n = o.flatMapFirst(x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMapFirst(x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMapFirst(x => [1, 2, 3], (x, y) => y); n = o.flatMapFirst(Rx.Observable.from([1, 2, 3])); n = o.flatMapFirst(Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMapFirst([1, 2, 3]); n = o.flatMapFirst(Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMapFirst(Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMapFirst([1, 2, 3], (x, y) => y); n = o.selectSwitchFirst(x => Rx.Observable.from([1, 2, 3])); n = o.selectSwitchFirst(x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectSwitchFirst(x => [1, 2, 3]); n = o.selectSwitchFirst(x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectSwitchFirst(x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectSwitchFirst(x => [1, 2, 3], (x, y) => y); n = o.selectSwitchFirst(Rx.Observable.from([1, 2, 3])); n = o.selectSwitchFirst(Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectSwitchFirst([1, 2, 3]); n = o.selectSwitchFirst(Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectSwitchFirst(Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectSwitchFirst([1, 2, 3], (x, y) => y); }); RxJS-4.1.0/ts/core/linq/observable/flatmaplatest.ts000066400000000000000000000237471266736161100222460ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } (function() { var o: Rx.Observable; var n: Rx.Observable; n = o.flatMapLatest(x => Rx.Observable.from([1, 2, 3])); n = o.flatMapLatest(x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMapLatest(x => [1, 2, 3]); n = o.flatMapLatest(x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMapLatest(x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMapLatest(x => [1, 2, 3], (x, y) => y); n = o.flatMapLatest(Rx.Observable.from([1, 2, 3])); n = o.flatMapLatest(Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMapLatest([1, 2, 3]); n = o.flatMapLatest(Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMapLatest(Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMapLatest([1, 2, 3], (x, y) => y); n = o.selectSwitch(x => Rx.Observable.from([1, 2, 3])); n = o.selectSwitch(x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectSwitch(x => [1, 2, 3]); n = o.selectSwitch(x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectSwitch(x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectSwitch(x => [1, 2, 3], (x, y) => y); n = o.selectSwitch(Rx.Observable.from([1, 2, 3])); n = o.selectSwitch(Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectSwitch([1, 2, 3]); n = o.selectSwitch(Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectSwitch(Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectSwitch([1, 2, 3], (x, y) => y); }); RxJS-4.1.0/ts/core/linq/observable/flatmapwithmaxconcurrent.ts000066400000000000000000000425701266736161100245310ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } (function() { var o: Rx.Observable; var n: Rx.Observable; n = o.flatMapWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3])); n = o.flatMapWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMapWithMaxConcurrent(1, x => [1, 2, 3]); n = o.flatMapWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMapWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMapWithMaxConcurrent(1, x => [1, 2, 3], (x, y) => y); n = o.flatMapWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3])); n = o.flatMapWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3]).toPromise()); n = o.flatMapWithMaxConcurrent(1, [1, 2, 3]); n = o.flatMapWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.flatMapWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.flatMapWithMaxConcurrent(1, [1, 2, 3], (x, y) => y); n = o.selectManyWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3])); n = o.selectManyWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectManyWithMaxConcurrent(1, x => [1, 2, 3]); n = o.selectManyWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectManyWithMaxConcurrent(1, x => Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectManyWithMaxConcurrent(1, x => [1, 2, 3], (x, y) => y); n = o.selectManyWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3])); n = o.selectManyWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3]).toPromise()); n = o.selectManyWithMaxConcurrent(1, [1, 2, 3]); n = o.selectManyWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3]), (x, y) => y); n = o.selectManyWithMaxConcurrent(1, Rx.Observable.from([1, 2, 3]).toPromise(), (x, y) => y); n = o.selectManyWithMaxConcurrent(1, [1, 2, 3], (x, y) => y); }); RxJS-4.1.0/ts/core/linq/observable/for.ts000066400000000000000000000030011266736161100201500ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; } } (function() { Rx.Observable.for(['a'], x => x); Rx.Observable.forIn(['a'], x => x); }); RxJS-4.1.0/ts/core/linq/observable/forkjoin.ts000066400000000000000000000022331266736161100212110ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(sources: ObservableOrPromise[]): Observable; /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(...args: ObservableOrPromise[]): Observable; } } (function () { var a : Rx.Observable; var b : Rx.Promise; Rx.Observable.forkJoin(a, b); Rx.Observable.forkJoin([a, b]); }); RxJS-4.1.0/ts/core/linq/observable/forkjoinproto.ts000066400000000000000000000015471266736161100223040ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Runs two observable sequences in parallel and combines their last elemenets. * * @param {Observable} second Second observable sequence. * @param {Function} resultSelector Result selector function to invoke with the last elements of both sequences. * @returns {Observable} An observable sequence with the result of calling the selector function with the last elements of both input sequences. */ forkJoin(second: ObservableOrPromise, resultSelector: (left: T, right: TSecond) => TResult): Observable; } } (function () { var a : Rx.Observable; var b : Rx.Observable; a = a.forkJoin(b, (a, b) => a); b = a.forkJoin(b, (a, b) => b); }); RxJS-4.1.0/ts/core/linq/observable/from.ts000066400000000000000000000033071266736161100203360ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } } (function () { var a : Rx.Observable; var b : Rx.Promise; Rx.Observable.from([1,2,3]); Rx.Observable.from([1,2,3], x => x + 1); Rx.Observable.from([1,2,3], x => x + 1, {}); Rx.Observable.from([1,2,3], x => x + 1, {}, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/fromarray.ts000066400000000000000000000014041266736161100213710ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } } (function () { Rx.Observable.fromArray([1,2,3]); Rx.Observable.fromArray([1,2,3], Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/fromcallback.ts000066400000000000000000000226121266736161100220130ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: Function, context: any, selector: Function): (...args: any[]) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => Observable; } } RxJS-4.1.0/ts/core/linq/observable/fromevent.ts000066400000000000000000000031551266736161100214010ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList. * @param {Object} element The DOMElement or NodeList to attach a listener. * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ fromEvent(element: EventTarget, eventName: string, selector?: (arguments: any[]) => T): Observable; /** * Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList. * @param {Object} element The DOMElement or NodeList to attach a listener. * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ fromEvent(element: { on: (name: string, cb: (e: any) => any) => void; off: (name: string, cb: (e: any) => any) => void }, eventName: string, selector?: (arguments: any[]) => T): Observable; } } RxJS-4.1.0/ts/core/linq/observable/fromeventpattern.ts000066400000000000000000000014661266736161100230020ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Creates an observable sequence from an event emitter via an addHandler/removeHandler pair. * @param {Function} addHandler The function to add a handler to the emitter. * @param {Function} [removeHandler] The optional function to remove a handler from an emitter. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence which wraps an event from an event emitter */ fromEventPattern(addHandler: (handler: Function) => void, removeHandler: (handler: Function) => void, selector?: (arguments: any[]) => T): Observable; } } RxJS-4.1.0/ts/core/linq/observable/fromnodecallback.ts000066400000000000000000000214701266736161100226620ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: Function, context?: any, selector?: Function): (...args: any[]) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => Observable; } } RxJS-4.1.0/ts/core/linq/observable/frompromise.ts000066400000000000000000000010051266736161100217260ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Converts a Promise to an Observable sequence * @param {Promise} An ES6 Compliant promise. * @returns {Observable} An Observable sequence which wraps the existing promise success and failure. */ fromPromise(promise: Promise): Observable; } } (function () { var p : Rx.Promise; var o : Rx.Observable = Rx.Observable.fromPromise(p); }) RxJS-4.1.0/ts/core/linq/observable/generate.ts000066400000000000000000000026231266736161100211650ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } } RxJS-4.1.0/ts/core/linq/observable/generatewithabsolutetime.ts000066400000000000000000000031201266736161100244700ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithAbsoluteTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return new Date(); } * }); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning Date values. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithAbsoluteTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => Date, scheduler?: IScheduler): Observable; } } RxJS-4.1.0/ts/core/linq/observable/generatewithrelativetime.ts000066400000000000000000000031431266736161100244720ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithRelativeTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return 500; } * ); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning integer values denoting milliseconds. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithRelativeTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => number, scheduler?: IScheduler): Observable; } } RxJS-4.1.0/ts/core/linq/observable/groupby.ts000066400000000000000000000044471266736161100210700ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, skipElementSelector?: boolean, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, keySerializer?: (key: TKey) => string): Observable>; } } RxJS-4.1.0/ts/core/linq/observable/groupbyuntil.ts000066400000000000000000000067451266736161100221470ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, skipElementSelector: boolean, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; } } RxJS-4.1.0/ts/core/linq/observable/groupjoin.ts000066400000000000000000000032201266736161100214010ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations, and groups the results. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. The first parameter passed to the function is an element of the left sequence. The second parameter passed to the function is an observable sequence with elements from the right sequence that overlap with the left sequence's element. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ groupJoin( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: Observable) => TResult): Observable; } } RxJS-4.1.0/ts/core/linq/observable/if.ts000066400000000000000000000025541266736161100177740ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Determines whether an observable collection contains values. * * @example * 1 - res = Rx.Observable.if(condition, obs1); * 2 - res = Rx.Observable.if(condition, obs1, obs2); * 3 - res = Rx.Observable.if(condition, obs1, scheduler); * @param {Function} condition The condition which determines if the thenSource or elseSource will be run. * @param {Observable} thenSource The observable sequence or Promise that will be run if the condition function returns true. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the condition function returns false. If this is not provided, it defaults to Rx.Observabe.Empty with the specified scheduler. * @returns {Observable} An observable sequence which is either the thenSource or elseSource. */ if(condition: () => boolean, thenSource: ObservableOrPromise, elseSourceOrScheduler?: ObservableOrPromise | IScheduler): Observable; } } (function () { var o : Rx.Observable; Rx.Observable.if(() => false, o); Rx.Observable.if(() => false, o, o); Rx.Observable.if(() => false, o, Rx.Scheduler.async); }) RxJS-4.1.0/ts/core/linq/observable/ignoreelements.ts000066400000000000000000000007401266736161100224110ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } } (function () { var o : Rx.Observable; o.ignoreElements(); }); RxJS-4.1.0/ts/core/linq/observable/includes.ts000066400000000000000000000014171266736161100212010ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Determines whether an observable sequence includes a specified element with an optional equality comparer. * @param searchElement The value to locate in the source sequence. * @param {Number} [fromIndex] An equality comparer to compare elements. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence includes an element that has the specified value from the given index. */ includes(value: T, comparer?: _Comparer): Observable; } } (function () { var o : Rx.Observable; var b : Rx.Observable = o.includes('a'); }); RxJS-4.1.0/ts/core/linq/observable/indexof.ts000066400000000000000000000015011266736161100210210ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the first index at which a given element can be found in the observable sequence, or -1 if it is not present. * @param {Any} searchElement Element to locate in the array. * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. * @returns {Observable} And observable sequence containing the first index at which a given element can be found in the observable sequence, or -1 if it is not present. */ indexOf(element: T, fromIndex?: number): Observable; } } (function () { var o : Rx.Observable; var b : Rx.Observable = o.indexOf('a'); var b : Rx.Observable = o.indexOf('a', 1); }); RxJS-4.1.0/ts/core/linq/observable/interval.ts000066400000000000000000000017071266736161100212210ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } } (function () { var o : Rx.Observable; o = Rx.Observable.interval(100); o = Rx.Observable.interval(100, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/isempty.ts000066400000000000000000000007251266736161100210660ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Determines whether an observable sequence is empty. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence is empty. */ isEmpty(): Observable; } } (function () { var o : Rx.Observable; var b : Rx.Observable = o.isEmpty(); }); RxJS-4.1.0/ts/core/linq/observable/join.ts000066400000000000000000000027571266736161100203420ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters passed to the function correspond with the elements from the left and right source sequences for which overlap occurs. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ join( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: TRight) => TResult): Observable; } } RxJS-4.1.0/ts/core/linq/observable/jortsort.ts000066400000000000000000000010301266736161100212500ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * jortSort checks if your inputs are sorted. Note that this is only for a sequence with an end. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ jortSort(): Observable; } } (function () { var o : Rx.Observable; var b : Rx.Observable = o.jortSort(); }); RxJS-4.1.0/ts/core/linq/observable/jortsortuntil.ts000066400000000000000000000010541266736161100223320ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * jortSort checks if your inputs are sorted until another Observable sequence fires. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ jortSortUntil(other: TOther): Observable; } } (function () { var o : Rx.Observable; var b : Rx.Observable = o.jortSortUntil(o); }); RxJS-4.1.0/ts/core/linq/observable/just.ts000066400000000000000000000031201266736161100203510ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } } (function () { var a : Rx.Observable; var b : Rx.Observable; b = Rx.Observable.return(1); a = Rx.Observable.return('a', Rx.Scheduler.async); b = Rx.Observable.just(1); a = Rx.Observable.just('a', Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/last.ts000066400000000000000000000011301266736161100203260ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element. * @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate. */ last(predicate?: _Predicate, thisArg?: any): Observable; } } (function () { var o : Rx.Observable; o = o.last((x) => true); o = o.last((x) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/let.ts000066400000000000000000000017101266736161100201530ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. * This operator allows for a fluent style of writing queries that use the same sequence multiple times. * * @param {Function} selector Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ let(selector: (source: Observable) => Observable): Observable; } } (function () { var a : Rx.Observable; var b : Rx.Observable; a.let(x => x.concat(Rx.Observable.just('a'))); }); RxJS-4.1.0/ts/core/linq/observable/manyselect.ts000066400000000000000000000025161266736161100215400ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ manySelect(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ extend(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var oo: Rx.Observable> = o.extend(x => x.first()); var oo: Rx.Observable> = o.manySelect(x => x.first()); }); RxJS-4.1.0/ts/core/linq/observable/map.ts000066400000000000000000000030001266736161100201360ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } } (function () { var o : Rx.Observable; o = o.map((x) => true); o = o.map((x) => true, {}); o = o.select((x) => true); o = o.select((x) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/materialize.ts000066400000000000000000000007431266736161100217020ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } } (function () { var o : Rx.Observable; o = o.materialize(); }); RxJS-4.1.0/ts/core/linq/observable/max.ts000066400000000000000000000014151266736161100201560ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the maximum value in an observable sequence according to the specified comparer. * @example * var res = source.max(); * var res = source.max(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the maximum element in the source sequence. */ max(comparer?: _Comparer): Observable; } } (function () { var o : Rx.Observable; var a : Rx.Observable; o = o.max(); o = a.max((x, y) => x.length - y.length); }); RxJS-4.1.0/ts/core/linq/observable/maxby.ts000066400000000000000000000032171266736161100205130ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ maxBy(keySelector: (item: T) => TKey, comparer: _Comparer): Observable; /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ maxBy(keySelector: (item: T) => number): Observable; } } (function () { var o : Rx.Observable<{value:number}>; var a : Rx.Observable<{value: string}>; o = o.maxBy(x => x.value); a = a.maxBy(x => x.value, (x, y) => x.length - y.length); }); RxJS-4.1.0/ts/core/linq/observable/merge.ts000066400000000000000000000037161266736161100204760ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } } (function() { var o: Rx.Observable; var p: Rx.Promise; o = Rx.Observable.merge(o, p, o, p); o = Rx.Observable.merge([o, p, o, p]); o = Rx.Observable.merge(Rx.Scheduler.async, o, p, o, p); o = Rx.Observable.merge(Rx.Scheduler.async, [o, p, o, p]); }); RxJS-4.1.0/ts/core/linq/observable/mergeall.ts000066400000000000000000000007231266736161100211620ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } } (function() { var o: Rx.Observable>; var oo : Rx.Observable = o.mergeAll(); }); RxJS-4.1.0/ts/core/linq/observable/mergeconcat.ts000066400000000000000000000032441266736161100216620ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var oo: Rx.Observable>; var p: Rx.Promise; o = oo.merge(1); o = o.merge(p); o = o.merge(o); }); RxJS-4.1.0/ts/core/linq/observable/mergedelayerror.ts000066400000000000000000000040341266736161100225610ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } } (function() { var o: Rx.Observable; var p: Rx.Promise; Rx.Observable.mergeDelayError(o, p, o, p); Rx.Observable.mergeDelayError([o, p, o, p]); }) RxJS-4.1.0/ts/core/linq/observable/min.ts000066400000000000000000000014721266736161100201570ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the minimum element in an observable sequence according to the optional comparer else a default greater than less than check. * @example * var res = source.min(); * var res = source.min(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the minimum element in the source sequence. */ min(comparer?: _Comparer): Observable; } } (function () { var o : Rx.Observable; var a : Rx.Observable; o = o.min(); o = a.min((x, y) => x.length - y.length); }); RxJS-4.1.0/ts/core/linq/observable/minby.ts000066400000000000000000000032111266736161100205030ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ minBy(keySelector: (item: T) => TKey, comparer: _Comparer): Observable; /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ minBy(keySelector: (item: T) => number): Observable; } } (function () { var o : Rx.Observable<{value:number}>; var a : Rx.Observable<{value: string}>; o = o.minBy(x => x.value); a = a.minBy(x => x.value, (x, y) => x.length - y.length); }); RxJS-4.1.0/ts/core/linq/observable/multicast.ts000066400000000000000000000066431266736161100214060ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; oc = o.multicast(is); oc = o.multicast(s); oc = o.multicast(() => s); o = o.multicast(is, a => a.asObservable()); o = o.multicast(s, a => a.asObservable()); o = o.multicast(() => s, a => a.asObservable()); }); RxJS-4.1.0/ts/core/linq/observable/never.ts000066400000000000000000000010431266736161100205050ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } } (function () { var o : Rx.Observable; o = Rx.Observable.never(); }); RxJS-4.1.0/ts/core/linq/observable/observeon.ts000066400000000000000000000015121266736161100213710ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } } (function () { var o : Rx.Observable; o = o.observeOn(Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/of.ts000066400000000000000000000021031266736161100177700ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } } (function() { var o: Rx.Observable; o = Rx.Observable.of(1, 2, 3, 4, 5); o = Rx.Observable.ofWithScheduler(Rx.Scheduler.async, 1, 2, 3, 4, 5); }); RxJS-4.1.0/ts/core/linq/observable/ofarraychanges.ts000066400000000000000000000014361266736161100223700ustar00rootroot00000000000000/// module Rx { export interface ArrayObserveChange { type: string; object: T[]; name?: string; oldValue?: T; index?: number; removed?: T[]; added?: number; } export interface ObservableStatic { /** * Creates an Observable sequence from changes to an array using Array.observe. * @param {Array} array An array to observe changes. * @returns {Observable} An observable sequence containing changes to an array from Array.observe. */ ofArrayChanges(obj: T[]): Observable>; } } (function () { var o : Rx.Observable>; o = Rx.Observable.ofArrayChanges([]); }); RxJS-4.1.0/ts/core/linq/observable/ofobjectchanges.ts000066400000000000000000000013171266736161100225160ustar00rootroot00000000000000/// module Rx { export interface ObjectObserveChange { type: string; object: T; name: string; oldValue?: any; } export interface ObservableStatic { /** * Creates an Observable sequence from changes to an object using Object.observe. * @param {Object} obj An object to observe changes. * @returns {Observable} An observable sequence containing changes to an object from Object.observe. */ ofObjectChanges(obj: T): Observable>; } } (function () { var o : Rx.Observable>; o = Rx.Observable.ofObjectChanges({}); }); RxJS-4.1.0/ts/core/linq/observable/onerrorresumenext.ts000066400000000000000000000025161266736161100232020ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } } (function() { var o: Rx.Observable; var p: Rx.Promise; o = Rx.Observable.onErrorResumeNext(o, p, o, p); o = Rx.Observable.onErrorResumeNext([o, p, o, p]); }); RxJS-4.1.0/ts/core/linq/observable/onerrorresumenextproto.ts000066400000000000000000000013621266736161100242640ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var p: Rx.Promise; o = o.onErrorResumeNext(p); o = o.onErrorResumeNext(o); }); RxJS-4.1.0/ts/core/linq/observable/pairs.ts000066400000000000000000000026371266736161100205160ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } } (function() { var n: Rx.Observable<[number, string]>; var s: Rx.Observable<[string, number]>; s = Rx.Observable.pairs(<{ [key: string]: number }>{}); s = Rx.Observable.pairs(<{ [key: string]: number }>{}, Rx.Scheduler.default); n = Rx.Observable.pairs(<{ [key: number]: string }>{}); n = Rx.Observable.pairs(<{ [key: number]: string }>{}, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/pairwise.ts000066400000000000000000000014171266736161100212160ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns a new observable that triggers on the second and subsequent triggerings of the input observable. * The Nth triggering of the input observable passes the arguments from the N-1th and Nth triggering as a pair. * The argument passed to the N-1th triggering is held in hidden internal state until the Nth triggering occurs. * @returns {Observable} An observable that triggers on successive pairs of observations from the input observable as an array. */ pairwise(): Observable<[T, T]>; } } (function () { var o : Rx.Observable; var r : Rx.Observable<[number, number]>; r = o.pairwise(); }); RxJS-4.1.0/ts/core/linq/observable/partition.ts000066400000000000000000000023001266736161100213740ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns two observables which partition the observations of the source by the given function. * The first will trigger observations for those values for which the predicate returns true. * The second will trigger observations for those values where the predicate returns false. * The predicate is executed once for each subscribed observer. * Both also propagate all error observations arising from the source and each completes * when the source completes. * @param {Function} predicate * The function to determine which output Observable will trigger a particular observation. * @returns {Array} * An array of observables. The first triggers when the predicate returns true, * and the second triggers when the predicate returns false. */ partition(predicate: _Predicate, thisArg?: any): [Observable, Observable]; } } (function() { var o: Rx.Observable; var r: [Rx.Observable, Rx.Observable]; r = o.partition(x => x % 2 === 0); }); RxJS-4.1.0/ts/core/linq/observable/pipe.ts000066400000000000000000000006231266736161100203260ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Pipes the existing Observable sequence into a Node.js Stream. * @param {Stream} dest The destination Node.js stream. * @returns {Stream} The destination stream. */ pipe(dest: TDest): TDest; // TODO: Add link to node.d.ts some where } } RxJS-4.1.0/ts/core/linq/observable/pluck.ts000066400000000000000000000010761266736161100205120ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } } (function() { var o: Rx.Observable<{}>; var n: Rx.Observable; n = o.pluck('abc'); }); RxJS-4.1.0/ts/core/linq/observable/publish.ts000066400000000000000000000044401266736161100210400ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; oc = o.publish(); o = o.publish(a => a.asObservable()); }); RxJS-4.1.0/ts/core/linq/observable/publishlast.ts000066400000000000000000000045051266736161100217260ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; oc = o.publishLast(); o = o.publishLast(a => a.asObservable()); }); RxJS-4.1.0/ts/core/linq/observable/publishvalue.ts000066400000000000000000000054541266736161100221030ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; oc = o.publishValue(12); o = o.publishValue(a => a.asObservable(), 12); }); RxJS-4.1.0/ts/core/linq/observable/range.ts000066400000000000000000000021311266736161100204610ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable = Rx.Observable.range(1, 2); o = Rx.Observable.range(1, 2, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/reduce.ts000066400000000000000000000031451266736161100206420ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. * For aggregation behavior with incremental intermediate results, see Observable.scan. * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Any} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing a single element with the final accumulator value. */ reduce(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. * For aggregation behavior with incremental intermediate results, see Observable.scan. * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Any} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing a single element with the final accumulator value. */ reduce(accumulator: _Accumulator, seed?: T): Observable; } } (function() { var o: Rx.Observable; o = o.reduce((a, x) => a * x); o = o.reduce((a, x) => a * x, 1); }); RxJS-4.1.0/ts/core/linq/observable/repeat.ts000066400000000000000000000025031266736161100206500ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; Rx.Observable.repeat(42, 4, Rx.Scheduler.async); Rx.Observable.repeat(42, null, Rx.Scheduler.async); Rx.Observable.repeat(42); }); RxJS-4.1.0/ts/core/linq/observable/repeatproto.ts000066400000000000000000000012241266736161100217330ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } } (function() { var o: Rx.Observable; o.repeat(); o.repeat(42); }); RxJS-4.1.0/ts/core/linq/observable/replay.ts000066400000000000000000000070211266736161100206640ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; o = o.replay(null, 1, 2, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/retry.ts000066400000000000000000000016471266736161100205450ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } } (function() { var o: Rx.Observable; o.retry(); o.retry(42); }); RxJS-4.1.0/ts/core/linq/observable/retrywhen.ts000066400000000000000000000016601266736161100214220ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } } (function() { var o: Rx.Observable; o.retryWhen(() => Rx.Observable.of(1)); }); RxJS-4.1.0/ts/core/linq/observable/sample.ts000066400000000000000000000070231266736161100206530ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; o.sample(100); o.sample(100, Rx.Scheduler.async); o.sample(Rx.Observable.interval(100)); o.sample(Rx.Observable.interval(100), Rx.Scheduler.async); o.throttleLatest(100); o.throttleLatest(100, Rx.Scheduler.async); o.throttleLatest(Rx.Observable.interval(100)); o.throttleLatest(Rx.Observable.interval(100), Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/scan.ts000066400000000000000000000034141266736161100203160ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } } (function() { var o: Rx.Observable; o = o.scan((a, x) => a * x); o = o.scan((a, x) => a * x, 1); }); RxJS-4.1.0/ts/core/linq/observable/selectmanyobserver.ts000066400000000000000000000053661266736161100233160ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectManyObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ flatMapObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; } } (function() { var os: Rx.Observable; var on: Rx.Observable; os.flatMapObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty()); os.selectManyObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty()); os.flatMapObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty(), {}); os.selectManyObserver((v, i) => Rx.Observable.just(i), (e) => Rx.Observable.just(e), () => Rx.Observable.empty(), {}); }); RxJS-4.1.0/ts/core/linq/observable/sequenceequal.ts000066400000000000000000000046431266736161100222370ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. * * @example * var res = res = source.sequenceEqual([1,2,3]); * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); * @param {Observable} second Second observable sequence or array to compare. * @param {Function} [comparer] Comparer used to compare elements of both sequences. * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. */ sequenceEqual(second: ObservableOrPromise | ArrayOrIterable, comparer?: _Comparer): Observable; /** * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. * * @example * var res = res = source.sequenceEqual([1,2,3]); * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); * @param {Observable} second Second observable sequence or array to compare. * @param {Function} [comparer] Comparer used to compare elements of both sequences. * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. */ sequenceEqual(second: ObservableOrPromise | ArrayOrIterable, comparer: _Comparer): Observable; } } (function () { var o : Rx.Observable; var o2 : Rx.Observable; var b : Rx.Observable; b = o.sequenceEqual(o2); }); RxJS-4.1.0/ts/core/linq/observable/share.ts000066400000000000000000000016061266736161100204750ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; o = o.share(); }); RxJS-4.1.0/ts/core/linq/observable/sharereplay.ts000066400000000000000000000031351266736161100217110ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; o = o.shareReplay(); o = o.shareReplay(1); o = o.shareReplay(1,2); o = o.shareReplay(1,2, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/sharevalue.ts000066400000000000000000000020441266736161100215270ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; o = o.shareValue(12); }); RxJS-4.1.0/ts/core/linq/observable/single.ts000066400000000000000000000017411266736161100206540ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the only element of an observable sequence that satisfies the condition in the optional predicate, and reports an exception if there is not exactly one element in the observable sequence. * @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate. */ single(predicate?: _Predicate, thisArg?: any): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; o = o.single(); o = o.single(x => true); }); RxJS-4.1.0/ts/core/linq/observable/singleinstance.ts000066400000000000000000000013741266736161100224030ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } } (function() { var o: Rx.Observable; var oc: Rx.ConnectableObservable; var is: Rx.ISubject; var s: Rx.Subject; var a: Rx.Observable; o = o.singleInstance(); }); RxJS-4.1.0/ts/core/linq/observable/skip.ts000066400000000000000000000011331266736161100203340ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } } (function() { var o: Rx.Observable; o = o.skip(1); }); RxJS-4.1.0/ts/core/linq/observable/skiplast.ts000066400000000000000000000015211266736161100212210ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } } (function() { var o: Rx.Observable; o = o.skipLast(1); }); RxJS-4.1.0/ts/core/linq/observable/skiplastwithtime.ts000066400000000000000000000026001266736161100227730ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * * 1 - res = source.skipLastWithTime(5000); * 2 - res = source.skipLastWithTime(5000, scheduler); * * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for skipping elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the end of the source sequence. */ skipLastWithTime(duration: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; o = o.skipLastWithTime(1); o = o.skipLastWithTime(1, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/skipuntil.ts000066400000000000000000000013471266736161100214170ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var o2: Rx.Observable; o = o.skipUntil(o2); }); RxJS-4.1.0/ts/core/linq/observable/skipuntilwithtime.ts000066400000000000000000000045101266736161100231650ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(startTime: Date, scheduler?: IScheduler): Observable; /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var o2: Rx.Observable; o = o.skipUntilWithTime(new Date()); o = o.skipUntilWithTime(new Date(), Rx.Scheduler.default); o = o.skipUntilWithTime(1000); o = o.skipUntilWithTime(1000, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/skipwhile.ts000066400000000000000000000020471266736161100213720ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } } RxJS-4.1.0/ts/core/linq/observable/skipwithtime.ts000066400000000000000000000030171266736161100221120ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.skipWithTime(5000, [optional scheduler]); * * @description * Specifying a zero value for duration doesn't guarantee no elements will be dropped from the start of the source sequence. * This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded * may not execute immediately, despite the zero due time. * * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the duration. * @param {Number} duration Duration for skipping elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the start of the source sequence. */ skipWithTime(duration: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; o = o.skipWithTime(1); o = o.skipWithTime(100, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/some.ts000066400000000000000000000015251266736161100203360ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence. * @param {Function} [predicate] A function to test each element for a condition. * @returns {Observable} An observable sequence containing a single element determining whether any elements in the source sequence pass the test in the specified predicate if given, else if any items are in the sequence. */ some(predicate?: _Predicate, thisArg?: any): Observable; // alias for any } } (function () { var os : Rx.Observable; var on : Rx.Observable; on.some(); os.some((v, i, s) => true); os.some((v, i, s) => true, {}); }); RxJS-4.1.0/ts/core/linq/observable/spawn.ts000066400000000000000000000003051266736161100205160ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { wrap(fn: Function): Observable; spawn(fn: Function): Observable; } } RxJS-4.1.0/ts/core/linq/observable/start.ts000066400000000000000000000031761266736161100205340ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence. * * @example * var res = Rx.Observable.start(function () { console.log('hello'); }); * var res = Rx.Observable.start(function () { console.log('hello'); }, Rx.Scheduler.timeout); * var res = Rx.Observable.start(function () { this.log('hello'); }, Rx.Scheduler.timeout, console); * * @param {Function} func Function to run asynchronously. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Observable} An observable sequence exposing the function's result value, or an exception. * * Remarks * * The function is called immediately, not during the subscription of the resulting sequence. * * Multiple subscriptions to the resulting sequence can observe the function's result. */ start(func: () => T, scheduler?: IScheduler, context?: any): Observable; } } (function () { var o : Rx.Observable = Rx.Observable.start(() => 'abc'); var o : Rx.Observable = Rx.Observable.start(() => 'abc', Rx.Scheduler.default); var o : Rx.Observable = Rx.Observable.start(() => 'abc', Rx.Scheduler.default, {}); }); RxJS-4.1.0/ts/core/linq/observable/startasync.ts000066400000000000000000000011651266736161100215660ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Invokes the asynchronous function, surfacing the result through an observable sequence. * @param {Function} functionAsync Asynchronous function which returns a Promise to run. * @returns {Observable} An observable sequence exposing the function's result value, or an exception. */ startAsync(functionAsync: () => IPromise): Observable; } } (function () { var o : Rx.Observable = Rx.Observable.startAsync(() => Rx.Observable.just('a').toPromise()); }); RxJS-4.1.0/ts/core/linq/observable/startwith.ts000066400000000000000000000024621266736161100214250ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } } (function() { var o: Rx.Observable; o = o.startWith(1, 2, 3, 4, 5); o = o.startWith(Rx.Scheduler.async, 1, 2, 3, 4, 5); }); RxJS-4.1.0/ts/core/linq/observable/subscribeon.ts000066400000000000000000000020101266736161100216770ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } } (function() { var o: Rx.Observable; o = o.subscribeOn(Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/sum.ts000066400000000000000000000016261266736161100202010ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Computes the sum of a sequence of values that are obtained by invoking an optional transform function on each element of the input sequence, else if not specified computes the sum on each item in the sequence. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the sum of the values in the source sequence. */ sum(keySelector?: _Selector, thisArg?: any): Observable; } } (function () { var os : Rx.Observable; var on : Rx.Observable; on.sum(); os.sum((v, i, s) => v.length + i); os.sum((v, i, s) => v.length + i, {}); }); RxJS-4.1.0/ts/core/linq/observable/switch.ts000066400000000000000000000017641266736161100207010ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } } (function() { var o: Rx.Observable>; var or: Rx.Observable; or = o.switch(); or = o.switchLatest(); }); RxJS-4.1.0/ts/core/linq/observable/switchfirst.ts000066400000000000000000000011021266736161100217330ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Performs a exclusive waiting for the first to finish before subscribing to another observable. * Observables that come in between subscriptions will be dropped on the floor. * @returns {Observable} A exclusive observable with only the results that happen when subscribed. */ switchFirst(): T; } } (function() { var o: Rx.Observable>; var or: Rx.Observable; or = o.switchFirst(); }); RxJS-4.1.0/ts/core/linq/observable/take.ts000066400000000000000000000017061266736161100203200ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case /// module Rx { export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } } (function() { var o: Rx.Observable; o = o.takeLast(1); }); RxJS-4.1.0/ts/core/linq/observable/takelastbuffer.ts000066400000000000000000000015761266736161100224030ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } } (function() { var o: Rx.Observable; var o2: Rx.Observable; o2 = o.takeLastBuffer(1); }); RxJS-4.1.0/ts/core/linq/observable/takelastbufferwithtime.ts000066400000000000000000000025371266736161100241540ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Returns an array with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence containing a single array with the elements taken during the specified duration from the end of the source sequence. */ takeLastBufferWithTime(duration: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var o2: Rx.Observable; o2 = o.takeLastBufferWithTime(1); o2 = o.takeLastBufferWithTime(1, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/takelastwithtime.ts000066400000000000000000000025271266736161100227610ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the end of the source sequence. */ takeLastWithTime(duration: number, timerScheduler?: IScheduler, loopScheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; o = o.takeLastWithTime(1); o = o.takeLastWithTime(1, Rx.Scheduler.async, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/takeuntil.ts000066400000000000000000000013431266736161100213710ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } } (function() { var o: Rx.Observable; var o2: Rx.Observable; o = o.skipUntil(o2); }); RxJS-4.1.0/ts/core/linq/observable/takeuntilwithtime.ts000066400000000000000000000031701266736161100231440ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(endTime: Date, scheduler?: IScheduler): Observable; /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; var o2: Rx.Observable; o = o.skipUntilWithTime(new Date()); o = o.skipUntilWithTime(new Date(), Rx.Scheduler.default); o = o.skipUntilWithTime(1000); o = o.skipUntilWithTime(1000, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/takewhile.ts000066400000000000000000000014341266736161100213470ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Returns elements from an observable sequence as long as a specified condition is true. * The element's index is used in the logic of the predicate function. * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence that occur before the element at which the test no longer passes. */ takeWhile(predicate: _Predicate, thisArg?: any): Observable; } } RxJS-4.1.0/ts/core/linq/observable/takewithtime.ts000066400000000000000000000025251266736161100220730ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.takeWithTime(5000, [optional scheduler]); * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the start of the source sequence. */ takeWithTime(duration: number, scheduler?: IScheduler): Observable; } } (function() { var o: Rx.Observable; o = o.takeWithTime(1); o = o.takeWithTime(100, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/tap.ts000066400000000000000000000207201266736161100201550ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } } (function() { var o: Rx.Observable; var or: Rx.Observer; o.do(or); o.tap(or); o.do((v) => {}, e => {}, () => {}); o.tap((v) => {}, e => {}, () => {}); o.doOnNext((v) => { }); o.tapOnNext((v) => { }); o.doOnError((e) => { }); o.tapOnError((e) => { }); o.doOnCompleted(() => { }); o.tapOnCompleted(() => { }); o.doOnNext((v) => { }, {}); o.tapOnNext((v) => { }, {}); o.doOnError((e) => { }, {}); o.tapOnError((e) => { }, {}); o.doOnCompleted(() => { }, {}); o.tapOnCompleted(() => { }, {}); }); RxJS-4.1.0/ts/core/linq/observable/thendo.ts000066400000000000000000000010521266736161100206470ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Matches when the observable sequence has an available value and projects the value. * * @param {Function} selector Selector that will be invoked for values in the source sequence. * @returns {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T) => TR): Plan; } } RxJS-4.1.0/ts/core/linq/observable/throttle.ts000066400000000000000000000016071266736161100212410ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } } (function () { var o: Rx.Observable; o.throttle(100); o.throttle(100, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/throw.ts000066400000000000000000000030641266736161100205360ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } } (function () { var o : Rx.Observable; o = Rx.Observable.throw(new Error()); o = Rx.Observable.throw(new Error(), Rx.Scheduler.async); o = Rx.Observable.throw('abc'); o = Rx.Observable.throw('abc', Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/timeinterval.ts000066400000000000000000000016361266736161100221010ustar00rootroot00000000000000/// /// module Rx { export interface TimeInterval { value: T; interval: number; } export interface Observable { /** * Records the time interval between consecutive values in an observable sequence. * * @example * 1 - res = source.timeInterval(); * 2 - res = source.timeInterval(Rx.Scheduler.timeout); * * @param [scheduler] Scheduler used to compute time intervals. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence with time interval information on values. */ timeInterval(scheduler?: IScheduler): Observable>; } } (function () { var o : Rx.Observable; var t : Rx.Observable>; t = o.timeInterval(Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/timeout.ts000066400000000000000000000132321266736161100210570ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } } (function () { var o: Rx.Observable; o.timeout(100); o.timeout(100, Rx.Scheduler.default); o.timeout(new Date()); o.timeout(new Date(), Rx.Scheduler.default); o.timeout(100, o); o.timeout(new Date(), o); o.timeout(100, o, Rx.Scheduler.async); o.timeout(new Date(), o, Rx.Scheduler.async); o.timeout(x => Rx.Observable.interval(1000)); o.timeout(x => Rx.Observable.interval(1000), Rx.Observable.just('100')); o.timeout(Rx.Observable.interval(1000), x => Rx.Observable.interval(1000)); o.timeout(Rx.Observable.interval(1000), x => Rx.Observable.interval(1000), Rx.Observable.just('100')); }); RxJS-4.1.0/ts/core/linq/observable/timer.ts000066400000000000000000000040701266736161100205110ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } } (function () { var o : Rx.Observable; o = Rx.Observable.timer(100); o = Rx.Observable.timer(100, 100); o = Rx.Observable.timer(100, 100, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/timestamp.ts000066400000000000000000000017001266736161100213710ustar00rootroot00000000000000/// /// module Rx { export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } } (function () { var o : Rx.Observable; var t : Rx.Observable>; t = o.timestamp(Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/toarray.ts000066400000000000000000000007341266736161100210550ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } } (function () { var o : Rx.Observable; var t : Rx.Observable; t = o.toArray(); }); RxJS-4.1.0/ts/core/linq/observable/toasync.ts000066400000000000000000000105641266736161100210560ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: () => TResult, context?: any, scheduler?: IScheduler): () => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2, arg3: T3) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; } } (function() { var o: () => Rx.Observable; var o2: (a: any) => Rx.Observable; var o3: (a: any, b: any) => Rx.Observable; var o4: (a: any, b: any, c: any) => Rx.Observable; o = Rx.Observable.toAsync(() => 'abc'); o2 = Rx.Observable.toAsync((a) => 'abc'); o3 = Rx.Observable.toAsync((a, b) => 'abc'); o4 = Rx.Observable.toAsync((a, b, c) => 'abc'); o = Rx.Observable.toAsync(() => 'abc', {}, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/tomap.ts000066400000000000000000000024161266736161100205130ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Converts the observable sequence to a Map if it exists. * @param {Function} keySelector A function which produces the key for the Map. * @param {Function} [elementSelector] An optional function which produces the element for the Map. If not present, defaults to the value from the observable sequence. * @returns {Observable} An observable sequence with a single value of a Map containing the values from the observable sequence. */ toMap(keySelector: (value: T) => TKey): Observable>; /** * Converts the observable sequence to a Map if it exists. * @param {Function} keySelector A function which produces the key for the Map. * @param {Function} [elementSelector] An optional function which produces the element for the Map. If not present, defaults to the value from the observable sequence. * @returns {Observable} An observable sequence with a single value of a Map containing the values from the observable sequence. */ toMap(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement): Observable>; } } RxJS-4.1.0/ts/core/linq/observable/topromise.ts000066400000000000000000000032721266736161100214150ustar00rootroot00000000000000/// module Rx { export interface Observable { /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise(promiseCtor?: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }): IPromise; /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise>(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): TPromise; }): TPromise; } } (function () { var o : Rx.Observable; var t : Rx.Promise; t = o.toPromise(); }); RxJS-4.1.0/ts/core/linq/observable/toset.ts000066400000000000000000000005611266736161100205300ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Converts the observable sequence to a Set if it exists. * @returns {Observable} An observable sequence with a single value of a Set containing the values from the observable sequence. */ toSet() : Observable< Set>; } } RxJS-4.1.0/ts/core/linq/observable/transduce.ts000066400000000000000000000006631266736161100213650ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Executes a transducer to transform the observable sequence * @param {Transducer} transducer A transducer to execute * @returns {Observable} An Observable sequence containing the results from the transducer. */ transduce(transducer: any): any; //TODO: Setup transducer } } RxJS-4.1.0/ts/core/linq/observable/using.ts000066400000000000000000000016521266736161100205210ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } } (function () { var s : Rx.Observable; var r : Rx.Disposable; s = Rx.Observable.using(() => r, () => s); }); RxJS-4.1.0/ts/core/linq/observable/when.ts000066400000000000000000000010321266736161100203250ustar00rootroot00000000000000/// /// module Rx { export interface ObservableStatic { /** * Joins together the results from several patterns. * * @param plans A series of plans (specified as an Array of as a series of arguments) created by use of the Then operator on patterns. * @returns {Observable} Observable sequence with the results form matching several patterns. */ when(plan: Plan): Observable; } } RxJS-4.1.0/ts/core/linq/observable/while.ts000066400000000000000000000026311266736161100205020ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; } } (function () { var o :Rx.Observable; o = Rx.Observable.while(() => true, Rx.Observable.just(1)); }); RxJS-4.1.0/ts/core/linq/observable/window.ts000066400000000000000000000054621266736161100207060ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowClosingSelector: () => Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable, windowClosingSelector: () => Observable): Observable>; } } (function() { var o : Rx.Observable; var open : Rx.Observable; var so : Rx.Observable> = o.window(open); so = o.window(() => Rx.Observable.timer(100)); so = o.window(open, () => Rx.Observable.timer(100)); }); RxJS-4.1.0/ts/core/linq/observable/windowwithcount.ts000066400000000000000000000015571266736161100226540ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } } (function() { var o : Rx.Observable; var so : Rx.Observable> = o.windowWithTime(100); so = o.windowWithCount(100, 5); }); RxJS-4.1.0/ts/core/linq/observable/windowwithtime.ts000066400000000000000000000042221266736161100224520ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable>; /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, scheduler?: IScheduler): Observable>; } } (function() { var o: Rx.Observable; var so: Rx.Observable> = o.windowWithTime(100); so = o.windowWithTime(100, 5); var so: Rx.Observable> = o.windowWithTime(100, Rx.Scheduler.async); so = o.windowWithTime(100, 5, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/linq/observable/windowwithtimeorcount.ts000066400000000000000000000020011266736161100240550ustar00rootroot00000000000000/// /// module Rx { export interface Observable { /** * Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a window. * @param {Number} count Maximum element count of a window. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable>; } } (function() { var o: Rx.Observable; var so: Rx.Observable> = o.windowWithTimeOrCount(100, 200); var so: Rx.Observable> = o.windowWithTimeOrCount(100, 200, Rx.Scheduler.default); }); RxJS-4.1.0/ts/core/linq/observable/withlatestfrom.ts000066400000000000000000000142361266736161100224520ustar00rootroot00000000000000/// module Rx { export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } } (function() { var o: Rx.Observable; var io: Rx.IObservable; var so: Rx.Subject; var p: Rx.Promise<{ a: string }>; var r: Rx.Observable<{ vo: boolean, vio: string, vp: { a: string }, vso: number }> = o.withLatestFrom(io, p, so, (vo, vio, vp, vso) => ({ vo, vio, vp, vso })); var rr : Rx.Observable = o.withLatestFrom([io, so, p], (v1, items) => 5); }); RxJS-4.1.0/ts/core/linq/observable/zip.ts000066400000000000000000000360121266736161100201740ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } } RxJS-4.1.0/ts/core/linq/observable/zipiterable.ts000066400000000000000000000016611266736161100217060ustar00rootroot00000000000000/// module Rx { export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } } RxJS-4.1.0/ts/core/notification.ts000066400000000000000000000075541266736161100170020ustar00rootroot00000000000000/// /// /// /// module Rx { /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; } (function() { var notification: Rx.Notification = new Rx.Notification(undefined, undefined, undefined, undefined, undefined, undefined); var observer: Rx.IObserver; notification.accept(observer); notification.accept((n) => n.toString(), (e) => e, () => false.toString()); var observable: Rx.Observable = notification.toObservable(); var observable: Rx.Observable = notification.toObservable(Rx.Scheduler.currentThread); Rx.Notification.createOnNext(() => true); Rx.Notification.createOnError(new Error('a')); Rx.Notification.createOnCompleted(); }); RxJS-4.1.0/ts/core/observable.ts000066400000000000000000000176331266736161100164370ustar00rootroot00000000000000/// /// /// module Rx { export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; } (function() { var observer: Rx.IObserver; var observable: Rx.Observable; observable.subscribe(observer); observable.subscribe((v) => {}); observable.subscribe((v) => {}, (e) => {}); observable.subscribe((v) => {}, (e) => {}, () => {}); observable.subscribeOnNext((v) => {}); observable.subscribeOnNext((v) => {}, {}); observable.subscribeOnError((v) => {}); observable.subscribeOnError((v) => {}, {}); observable.subscribeOnCompleted(() => {}); observable.subscribeOnCompleted(() => {}, {}); observable.forEach(observer); observable.forEach((v) => {}); observable.forEach((v) => {}, (e) => {}); observable.forEach((v) => {}, (e) => {}, () => {}); Rx.Observable.isObservable({}); }); RxJS-4.1.0/ts/core/observer-extras.ts000066400000000000000000000051671266736161100174450ustar00rootroot00000000000000/// /// /// module Rx { export interface Observer { /** * Creates a notification callback from an observer. * @returns The action that forwards its input notification to the underlying observer. */ toNotifier(): (notification: Notification) => void; /** * Hides the identity of an observer. * @returns An observer that hides the identity of the specified observer. */ asObserver(): Observer; /** * Checks access to the observer for grammar violations. This includes checking for multiple OnError or OnCompleted calls, as well as reentrancy in any of the observer methods. * If a violation is detected, an Error is thrown from the offending observer method call. * @returns An observer that checks callbacks invocations against the observer grammar and, if the checks pass, forwards those to the specified observer. */ checked(): CheckedObserver; /** * Schedules the invocation of observer methods on the given scheduler. * @param {Scheduler} scheduler Scheduler to schedule observer messages on. * @returns {Observer} Observer whose messages are scheduled on the given scheduler. */ notifyOn(scheduler: IScheduler): Observer; } export interface ObserverStatic { /** * Creates an observer from a notification callback. * * @static * @memberOf Observer * @param {Function} handler Action that handles a notification. * @returns The observer object that invokes the specified handler using a notification corresponding to each message it receives. */ fromNotifier(handler: (notification: Notification, thisArg?: any) => void): Observer; } } (function() { var observer: Rx.Observer; var n: (notification: Rx.Notification) => void = observer.toNotifier(); var o: Rx.Observer = observer.asObserver(); var c: Rx.CheckedObserver = observer.checked(); o = observer.notifyOn(Rx.Scheduler.immediate); var so : Rx.Observer = Rx.Observer.fromNotifier((n) => { // Handle next calls if (n.kind === 'N') { console.log('Next: ' + n.value); } // Handle error calls if (n.kind === 'E') { console.log('Error: ' + n.exception); } // Handle completed if (n.kind === 'C') { console.log('Completed') } }); }); RxJS-4.1.0/ts/core/observer-lite.ts000066400000000000000000000046401266736161100170670ustar00rootroot00000000000000/// /// module Rx { /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; } (function() { var iobserver: Rx.IObserver; var observer: Rx.Observer; iobserver.onNext(false); iobserver.onError(new Error('a')); iobserver.onCompleted(); observer.onNext(false); observer.onError(new Error('a')); observer.onCompleted(); var so: Rx.Observer = Rx.Observer.create((v) => 1); so = Rx.Observer.create((v) => 1, (e) => { }); so = Rx.Observer.create((v) => 1, (e) => { }, () => { }); }); RxJS-4.1.0/ts/core/observer.ts000066400000000000000000000004301266736161100161250ustar00rootroot00000000000000/// module Rx { export interface Observer { makeSafe(disposable: IDisposable): Observer; } } (function() { var observer: Rx.Observer; observer = observer.makeSafe(Rx.Disposable.create(() => {})); }); RxJS-4.1.0/ts/core/scheduledobserver.ts000066400000000000000000000004661266736161100200170ustar00rootroot00000000000000/// module Rx { export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } } (function() { var observer: Rx.internals.ScheduledObserver; observer.ensureActive(); }); RxJS-4.1.0/ts/core/subjects/000077500000000000000000000000001266736161100155535ustar00rootroot00000000000000RxJS-4.1.0/ts/core/subjects/anonymoussubject.ts000066400000000000000000000013351266736161100215350ustar00rootroot00000000000000/// module Rx { export interface AnonymousSubject extends Subject { } interface AnonymousSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AnonymousSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AnonymousSubject: AnonymousSubjectStatic; } (function() { var s : Rx.AnonymousSubject = new Rx.AnonymousSubject(); }); RxJS-4.1.0/ts/core/subjects/asyncsubject.ts000066400000000000000000000013021266736161100206140ustar00rootroot00000000000000/// module Rx { export interface AsyncSubject extends Subject { } interface AsyncSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AsyncSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AsyncSubject: AsyncSubjectStatic; } (function() { var s : Rx.AsyncSubject = new Rx.AsyncSubject(); }); RxJS-4.1.0/ts/core/subjects/behaviorsubject.ts000066400000000000000000000024701266736161100213050ustar00rootroot00000000000000/// module Rx { export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; } (function() { var s : Rx.BehaviorSubject = new Rx.BehaviorSubject(false); var b : boolean = s.getValue(); }); RxJS-4.1.0/ts/core/subjects/replaysubject.ts000066400000000000000000000024511266736161100210010ustar00rootroot00000000000000/// /// module Rx { export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; } (function() { var s : Rx.ReplaySubject = new Rx.ReplaySubject(); var s : Rx.ReplaySubject = new Rx.ReplaySubject(10); var s : Rx.ReplaySubject = new Rx.ReplaySubject(10, 10); var s : Rx.ReplaySubject = new Rx.ReplaySubject(10, 10, Rx.Scheduler.async); }); RxJS-4.1.0/ts/core/subjects/subject.ts000066400000000000000000000036771266736161100175770ustar00rootroot00000000000000/// /// /// module Rx { /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed observers. */ export interface ISubject extends IObservable, IObserver, IDisposable { hasObservers(): boolean; } export interface Subject extends Observable, Observer, IDisposable { hasObservers(): boolean; /** Is this value disposed. */ isDisposed: boolean; } interface SubjectStatic { /** * Creates a subject. */ new (): Subject; /** * Creates a subject from the specified observer and observable. * @param {Observer} observer The observer used to send messages to the subject. * @param {Observable} observable The observable used to subscribe to messages sent from the subject. * @returns {Subject} Subject implemented using the given observer and observable. */ create(observer?: IObserver, observable?: IObservable): Subject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed observers. */ export var Subject: SubjectStatic; } (function() { var is: Rx.ISubject = new Rx.Subject(); var s : Rx.Subject = new Rx.Subject(); is.hasObservers(); s.hasObservers(); s.isDisposed; var iob : Rx.IObserver = s; var io : Rx.IObservable = s; var ob : Rx.Observer = s; var o : Rx.Observable = s; var d : Rx.IDisposable = s; var ns : Rx.ISubject = Rx.Subject.create(iob, io); var ns : Rx.ISubject = Rx.Subject.create(ob, o); }); RxJS-4.1.0/ts/core/testing/000077500000000000000000000000001266736161100154065ustar00rootroot00000000000000RxJS-4.1.0/ts/core/testing/mockdisposable.ts000066400000000000000000000004601266736161100207550ustar00rootroot00000000000000 // var MockDisposable = Rx.MockDisposable = function (scheduler) { // this.scheduler = scheduler; // this.disposes = []; // this.disposes.push(this.scheduler.clock); // }; // // MockDisposable.prototype.dispose = function () { // this.disposes.push(this.scheduler.clock); // }; RxJS-4.1.0/ts/core/testing/mockobserver.ts000066400000000000000000000010521266736161100204550ustar00rootroot00000000000000/// /// /// module Rx { export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; } (function() { var o : Rx.MockObserver; var r: Rx.Recorded[] = o.messages; var oo : Rx.IObserver = o; }); RxJS-4.1.0/ts/core/testing/reactivetest.ts000066400000000000000000000100451266736161100204600ustar00rootroot00000000000000/// /// module Rx { export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } } (function() { var n : number = Rx.ReactiveTest.created; var n : number = Rx.ReactiveTest.subscribed; var n : number = Rx.ReactiveTest.disposed; var r : Rx.Recorded = Rx.ReactiveTest.onNext(100, 'abc'); var r : Rx.Recorded = Rx.ReactiveTest.onNext(100, (v: any) => false); var r : Rx.Recorded = Rx.ReactiveTest.onError(100, new Error('abc')); var r : Rx.Recorded = Rx.ReactiveTest.onError(100, (v: any) => true); var r : Rx.Recorded = Rx.ReactiveTest.onCompleted(100); var s : Rx.Subscription = Rx.ReactiveTest.subscribe(100); var s : Rx.Subscription = Rx.ReactiveTest.subscribe(100, 200); }); RxJS-4.1.0/ts/core/testing/recorded.ts000066400000000000000000000026211266736161100175460ustar00rootroot00000000000000module Rx { export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; } (function() { var r: Rx.Recorded = new Rx.Recorded(100, 'abc'); var r: Rx.Recorded = new Rx.Recorded(100, 'abc', (x, y) => false); var b: boolean = r.equals(r); var s: string = r.toString(); var t: number = r.time; var a: any = r.value; }); RxJS-4.1.0/ts/core/testing/subscription.ts000066400000000000000000000024011266736161100204770ustar00rootroot00000000000000module Rx { export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; } (function() { var s: Rx.Subscription = new Rx.Subscription(100); var s: Rx.Subscription = new Rx.Subscription(100, 200); var b: boolean = s.equals(s); var st: string = s.toString(); }); RxJS-4.1.0/ts/core/testing/testscheduler.ts000066400000000000000000000123021266736161100206320ustar00rootroot00000000000000/// /// /// /// module Rx { export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } } (function() { var ts : Rx.TestScheduler = new Rx.TestScheduler(); var o : Rx.Observable = ts.createColdObservable(new Rx.Recorded(100, '5')); var o : Rx.Observable = ts.createHotObservable(new Rx.Recorded(100, '5')); var ob : Rx.MockObserver = ts.createObserver(); var p : Rx.Promise = ts.createResolvedPromise(100, false); var p : Rx.Promise = ts.createRejectedPromise(100, false); var ob = ts.startWithTiming(() => Rx.Observable.create(null), 100, 200, 300); var ob = ts.startWithDispose(() => Rx.Observable.create(null), 300); var ob = ts.startWithCreate(() => Rx.Observable.create(null)); }); RxJS-4.1.0/ts/es6-promise.es6.d.ts000066400000000000000000000073451266736161100164510ustar00rootroot00000000000000 interface PromiseLike { /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of which ever callback is executed. */ then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): PromiseLike; then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): PromiseLike; } /** * Represents the completion of an asynchronous operation */ interface Promise { /** * Attaches callbacks for the resolution and/or rejection of the Promise. * @param onfulfilled The callback to execute when the Promise is resolved. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of which ever callback is executed. */ then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => TResult | PromiseLike): Promise; then(onfulfilled?: (value: T) => TResult | PromiseLike, onrejected?: (reason: any) => void): Promise; /** * Attaches a callback for only the rejection of the Promise. * @param onrejected The callback to execute when the Promise is rejected. * @returns A Promise for the completion of the callback. */ catch(onrejected?: (reason: any) => T | PromiseLike): Promise; catch(onrejected?: (reason: any) => void): Promise; [Symbol.toStringTag]: string; } interface PromiseConstructor { /** * A reference to the prototype. */ prototype: Promise; /** * Creates a new Promise. * @param executor A callback used to initialize the promise. This callback is passed two arguments: * a resolve callback used resolve the promise with a value or the result of another promise, * and a reject callback used to reject the promise with a provided reason or error. */ new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): Promise; /** * Creates a Promise that is resolved with an array of results when all of the provided Promises * resolve, or rejected when any Promise is rejected. * @param values An array of Promises. * @returns A new Promise. */ all(values: Iterable>): Promise; /** * Creates a Promise that is resolved or rejected when any of the provided Promises are resolved * or rejected. * @param values An array of Promises. * @returns A new Promise. */ race(values: Iterable>): Promise; /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ reject(reason: any): Promise; /** * Creates a new rejected promise for the provided reason. * @param reason The reason the promise was rejected. * @returns A new rejected Promise. */ reject(reason: any): Promise; /** * Creates a new resolved promise for the provided value. * @param value A promise. * @returns A promise whose internal state matches the provided promise. */ resolve(value: T | PromiseLike): Promise; /** * Creates a new resolved promise . * @returns A resolved promise. */ resolve(): Promise; [Symbol.species]: Function; } declare var Promise: PromiseConstructor; RxJS-4.1.0/ts/iterable.es6.d.ts000066400000000000000000000123471266736161100160650ustar00rootroot00000000000000interface Symbol { /** Returns a string representation of an object. */ toString(): string; /** Returns the primitive value of the specified object. */ valueOf(): Object; [Symbol.toStringTag]: string; } interface SymbolConstructor { /** * A reference to the prototype. */ prototype: Symbol; /** * Returns a new unique Symbol value. * @param description Description of the new Symbol object. */ (description?: string|number): symbol; /** * Returns a Symbol object from the global symbol registry matching the given key if found. * Otherwise, returns a new symbol with this key. * @param key key to search for. */ for(key: string): symbol; /** * Returns a key from the global symbol registry matching the given Symbol if found. * Otherwise, returns a undefined. * @param sym Symbol to find the key for. */ keyFor(sym: symbol): string; // Well-known Symbols /** * A method that determines if a constructor object recognizes an object as one of the * constructor’s instances. Called by the semantics of the instanceof operator. */ hasInstance: symbol; /** * A Boolean value that if true indicates that an object should flatten to its array elements * by Array.prototype.concat. */ isConcatSpreadable: symbol; /** * A method that returns the default iterator for an object. Called by the semantics of the * for-of statement. */ iterator: symbol; /** * A regular expression method that matches the regular expression against a string. Called * by the String.prototype.match method. */ match: symbol; /** * A regular expression method that replaces matched substrings of a string. Called by the * String.prototype.replace method. */ replace: symbol; /** * A regular expression method that returns the index within a string that matches the * regular expression. Called by the String.prototype.search method. */ search: symbol; /** * A function valued property that is the constructor function that is used to create * derived objects. */ species: symbol; /** * A regular expression method that splits a string at the indices that match the regular * expression. Called by the String.prototype.split method. */ split: symbol; /** * A method that converts an object to a corresponding primitive value.Called by the ToPrimitive * abstract operation. */ toPrimitive: symbol; /** * A String value that is used in the creation of the default string description of an object. * Called by the built-in method Object.prototype.toString. */ toStringTag: symbol; /** * An Object whose own property names are property names that are excluded from the with * environment bindings of the associated objects. */ unscopables: symbol; } declare var Symbol: SymbolConstructor; interface IteratorResult { done: boolean; value?: T; } interface Iterator { next(value?: any): IteratorResult; return?(value?: any): IteratorResult; throw?(e?: any): IteratorResult; } interface Iterable { [Symbol.iterator](): Iterator; } interface IterableIterator extends Iterator { [Symbol.iterator](): IterableIterator; } interface WeakMap { clear(): void; delete(key: K): boolean; get(key: K): V; has(key: K): boolean; set(key: K, value?: V): WeakMap; } interface WeakMapConstructor { new (): WeakMap; prototype: WeakMap; } declare var WeakMap: WeakMapConstructor; interface Map { clear(): void; delete(key: K): boolean; entries(): IterableIterator<[K, V]>; forEach(callbackfn: (value: V, index: K, map: Map) => void, thisArg?: any): void; get(key: K): V; has(key: K): boolean; keys(): IterableIterator; set(key: K, value?: V): Map; size: number; values(): IterableIterator; [Symbol.iterator]():IterableIterator<[K,V]>; [Symbol.toStringTag]: string; } interface MapConstructor { new (): Map; new (iterable: Iterable<[K, V]>): Map; prototype: Map; } declare var Map: MapConstructor; interface Set { add(value: T): Set; clear(): void; delete(value: T): boolean; entries(): IterableIterator<[T, T]>; forEach(callbackfn: (value: T, index: T, set: Set) => void, thisArg?: any): void; has(value: T): boolean; keys(): IterableIterator; size: number; values(): IterableIterator; [Symbol.iterator]():IterableIterator; [Symbol.toStringTag]: string; } interface SetConstructor { new (): Set; new (iterable: Iterable): Set; prototype: Set; } declare var Set: SetConstructor; interface WeakSet { add(value: T): WeakSet; clear(): void; delete(value: T): boolean; has(value: T): boolean; [Symbol.toStringTag]: string; } interface WeakSetConstructor { new (): WeakSet; new (iterable: Iterable): WeakSet; prototype: WeakSet; } declare var WeakSet: WeakSetConstructor; RxJS-4.1.0/ts/rx.aggregates.d.ts000066400000000000000000000376541266736161100163530ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. * For aggregation behavior with incremental intermediate results, see Observable.scan. * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Any} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing a single element with the final accumulator value. */ reduce(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. * For aggregation behavior with incremental intermediate results, see Observable.scan. * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Any} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing a single element with the final accumulator value. */ reduce(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence. * @param {Function} [predicate] A function to test each element for a condition. * @returns {Observable} An observable sequence containing a single element determining whether any elements in the source sequence pass the test in the specified predicate if given, else if any items are in the sequence. */ some(predicate?: _Predicate, thisArg?: any): Observable; // alias for any } export interface Observable { /** * Determines whether an observable sequence is empty. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence is empty. */ isEmpty(): Observable; } export interface Observable { /** * Determines whether all elements of an observable sequence satisfy a condition. * @param {Function} [predicate] A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. */ every(predicate?: _Predicate, thisArg?: any): Observable; // alias for all } export interface Observable { /** * Determines whether an observable sequence includes a specified element with an optional equality comparer. * @param searchElement The value to locate in the source sequence. * @param {Number} [fromIndex] An equality comparer to compare elements. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence includes an element that has the specified value from the given index. */ includes(value: T, comparer?: _Comparer): Observable; } export interface Observable { /** * Returns an observable sequence containing a value that represents how many elements in the specified observable sequence satisfy a condition if provided, else the count of items. * @example * res = source.count(); * res = source.count(function (x) { return x > 3; }); * @param {Function} [predicate]A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function if provided, else the count of items in the sequence. */ count(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns the first index at which a given element can be found in the observable sequence, or -1 if it is not present. * @param {Any} searchElement Element to locate in the array. * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. * @returns {Observable} And observable sequence containing the first index at which a given element can be found in the observable sequence, or -1 if it is not present. */ indexOf(element: T, fromIndex?: number): Observable; } export interface Observable { /** * Computes the sum of a sequence of values that are obtained by invoking an optional transform function on each element of the input sequence, else if not specified computes the sum on each item in the sequence. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the sum of the values in the source sequence. */ sum(keySelector?: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ minBy(keySelector: (item: T) => TKey, comparer: _Comparer): Observable; /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ minBy(keySelector: (item: T) => number): Observable; } export interface Observable { /** * Returns the minimum element in an observable sequence according to the optional comparer else a default greater than less than check. * @example * var res = source.min(); * var res = source.min(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the minimum element in the source sequence. */ min(comparer?: _Comparer): Observable; } export interface Observable { /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ maxBy(keySelector: (item: T) => TKey, comparer: _Comparer): Observable; /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ maxBy(keySelector: (item: T) => number): Observable; } export interface Observable { /** * Returns the maximum value in an observable sequence according to the specified comparer. * @example * var res = source.max(); * var res = source.max(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the maximum element in the source sequence. */ max(comparer?: _Comparer): Observable; } export interface Observable { /** * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the average of the sequence of values. */ average(keySelector?: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. * * @example * var res = res = source.sequenceEqual([1,2,3]); * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); * @param {Observable} second Second observable sequence or array to compare. * @param {Function} [comparer] Comparer used to compare elements of both sequences. * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. */ sequenceEqual(second: ObservableOrPromise | ArrayOrIterable, comparer?: _Comparer): Observable; /** * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. * * @example * var res = res = source.sequenceEqual([1,2,3]); * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); * @param {Observable} second Second observable sequence or array to compare. * @param {Function} [comparer] Comparer used to compare elements of both sequences. * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. */ sequenceEqual(second: ObservableOrPromise | ArrayOrIterable, comparer: _Comparer): Observable; } export interface Observable { /** * Returns the element at a specified index in a sequence or default value if not found. * @param {Number} index The zero-based index of the element to retrieve. * @param {Any} [defaultValue] The default value to use if elementAt does not find a value. * @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence. */ elementAt(index: number): Observable; } export interface Observable { /** * Returns the only element of an observable sequence that satisfies the condition in the optional predicate, and reports an exception if there is not exactly one element in the observable sequence. * @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate. */ single(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence. * @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence. */ first(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element. * @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate. */ last(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, undefined. */ find(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Searches for an element that matches the conditions defined by the specified predicate, and returns * an Observable sequence with the zero-based index of the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. */ findIndex(predicate: _Predicate, thisArg?: any): Observable; } } declare module "rx.aggregates" { export = Rx; } RxJS-4.1.0/ts/rx.aggregates.es6.d.ts000066400000000000000000000426671266736161100170470ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. * For aggregation behavior with incremental intermediate results, see Observable.scan. * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Any} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing a single element with the final accumulator value. */ reduce(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence, returning the result of the aggregation as a single element in the result sequence. The specified seed value is used as the initial accumulator value. * For aggregation behavior with incremental intermediate results, see Observable.scan. * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Any} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing a single element with the final accumulator value. */ reduce(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Determines whether any element of an observable sequence satisfies a condition if present, else if any items are in the sequence. * @param {Function} [predicate] A function to test each element for a condition. * @returns {Observable} An observable sequence containing a single element determining whether any elements in the source sequence pass the test in the specified predicate if given, else if any items are in the sequence. */ some(predicate?: _Predicate, thisArg?: any): Observable; // alias for any } export interface Observable { /** * Determines whether an observable sequence is empty. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence is empty. */ isEmpty(): Observable; } export interface Observable { /** * Determines whether all elements of an observable sequence satisfy a condition. * @param {Function} [predicate] A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element determining whether all elements in the source sequence pass the test in the specified predicate. */ every(predicate?: _Predicate, thisArg?: any): Observable; // alias for all } export interface Observable { /** * Determines whether an observable sequence includes a specified element with an optional equality comparer. * @param searchElement The value to locate in the source sequence. * @param {Number} [fromIndex] An equality comparer to compare elements. * @returns {Observable} An observable sequence containing a single element determining whether the source sequence includes an element that has the specified value from the given index. */ includes(value: T, comparer?: _Comparer): Observable; } export interface Observable { /** * Returns an observable sequence containing a value that represents how many elements in the specified observable sequence satisfy a condition if provided, else the count of items. * @example * res = source.count(); * res = source.count(function (x) { return x > 3; }); * @param {Function} [predicate]A function to test each element for a condition. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with a number that represents how many elements in the input sequence satisfy the condition in the predicate function if provided, else the count of items in the sequence. */ count(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns the first index at which a given element can be found in the observable sequence, or -1 if it is not present. * @param {Any} searchElement Element to locate in the array. * @param {Number} [fromIndex] The index to start the search. If not specified, defaults to 0. * @returns {Observable} And observable sequence containing the first index at which a given element can be found in the observable sequence, or -1 if it is not present. */ indexOf(element: T, fromIndex?: number): Observable; } export interface Observable { /** * Computes the sum of a sequence of values that are obtained by invoking an optional transform function on each element of the input sequence, else if not specified computes the sum on each item in the sequence. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the sum of the values in the source sequence. */ sum(keySelector?: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ minBy(keySelector: (item: T) => TKey, comparer: _Comparer): Observable; /** * Returns the elements in an observable sequence with the minimum key value according to the specified comparer. * @example * var res = source.minBy(function (x) { return x.value; }); * var res = source.minBy(function (x) { return x.value; }, function (x, y) { return x - y; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a minimum key value. */ minBy(keySelector: (item: T) => number): Observable; } export interface Observable { /** * Returns the minimum element in an observable sequence according to the optional comparer else a default greater than less than check. * @example * var res = source.min(); * var res = source.min(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the minimum element in the source sequence. */ min(comparer?: _Comparer): Observable; } export interface Observable { /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ maxBy(keySelector: (item: T) => TKey, comparer: _Comparer): Observable; /** * Returns the elements in an observable sequence with the maximum key value according to the specified comparer. * @example * var res = source.maxBy(function (x) { return x.value; }); * var res = source.maxBy(function (x) { return x.value; }, function (x, y) { return x - y;; }); * @param {Function} keySelector Key selector function. * @param {Function} [comparer] Comparer used to compare key values. * @returns {Observable} An observable sequence containing a list of zero or more elements that have a maximum key value. */ maxBy(keySelector: (item: T) => number): Observable; } export interface Observable { /** * Returns the maximum value in an observable sequence according to the specified comparer. * @example * var res = source.max(); * var res = source.max(function (x, y) { return x.value - y.value; }); * @param {Function} [comparer] Comparer used to compare elements. * @returns {Observable} An observable sequence containing a single element with the maximum element in the source sequence. */ max(comparer?: _Comparer): Observable; } export interface Observable { /** * Computes the average of an observable sequence of values that are in the sequence or obtained by invoking a transform function on each element of the input sequence if present. * @param {Function} [selector] A transform function to apply to each element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence containing a single element with the average of the sequence of values. */ average(keySelector?: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. * * @example * var res = res = source.sequenceEqual([1,2,3]); * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); * @param {Observable} second Second observable sequence or array to compare. * @param {Function} [comparer] Comparer used to compare elements of both sequences. * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. */ sequenceEqual(second: ObservableOrPromise | ArrayOrIterable, comparer?: _Comparer): Observable; /** * Determines whether two sequences are equal by comparing the elements pairwise using a specified equality comparer. * * @example * var res = res = source.sequenceEqual([1,2,3]); * var res = res = source.sequenceEqual([{ value: 42 }], function (x, y) { return x.value === y.value; }); * 3 - res = source.sequenceEqual(Rx.Observable.returnValue(42)); * 4 - res = source.sequenceEqual(Rx.Observable.returnValue({ value: 42 }), function (x, y) { return x.value === y.value; }); * @param {Observable} second Second observable sequence or array to compare. * @param {Function} [comparer] Comparer used to compare elements of both sequences. * @returns {Observable} An observable sequence that contains a single element which indicates whether both sequences are of equal length and their corresponding elements are equal according to the specified equality comparer. */ sequenceEqual(second: ObservableOrPromise | ArrayOrIterable, comparer: _Comparer): Observable; } export interface Observable { /** * Returns the element at a specified index in a sequence or default value if not found. * @param {Number} index The zero-based index of the element to retrieve. * @param {Any} [defaultValue] The default value to use if elementAt does not find a value. * @returns {Observable} An observable sequence that produces the element at the specified position in the source sequence. */ elementAt(index: number): Observable; } export interface Observable { /** * Returns the only element of an observable sequence that satisfies the condition in the optional predicate, and reports an exception if there is not exactly one element in the observable sequence. * @param {Function} [predicate] A predicate function to evaluate for elements in the source sequence. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} Sequence containing the single element in the observable sequence that satisfies the condition in the predicate. */ single(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns the first element of an observable sequence that satisfies the condition in the predicate if present else the first item in the sequence. * @returns {Observable} Sequence containing the first element in the observable sequence that satisfies the condition in the predicate if provided, else the first item in the sequence. */ first(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns the last element of an observable sequence that satisfies the condition in the predicate if specified, else the last element. * @returns {Observable} Sequence containing the last element in the observable sequence that satisfies the condition in the predicate. */ last(predicate?: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the first element that matches the conditions defined by the specified predicate, if found; otherwise, undefined. */ find(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Searches for an element that matches the conditions defined by the specified predicate, and returns * an Observable sequence with the zero-based index of the first occurrence within the entire Observable sequence. * @param {Function} predicate The predicate that defines the conditions of the element to search for. * @param {Any} [thisArg] Object to use as `this` when executing the predicate. * @returns {Observable} An Observable sequence with the zero-based index of the first occurrence of an element that matches the conditions defined by match, if found; otherwise, –1. */ findIndex(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Converts the observable sequence to a Set if it exists. * @returns {Observable} An observable sequence with a single value of a Set containing the values from the observable sequence. */ toSet() : Observable< Set>; } export interface Observable { /** * Converts the observable sequence to a Map if it exists. * @param {Function} keySelector A function which produces the key for the Map. * @param {Function} [elementSelector] An optional function which produces the element for the Map. If not present, defaults to the value from the observable sequence. * @returns {Observable} An observable sequence with a single value of a Map containing the values from the observable sequence. */ toMap(keySelector: (value: T) => TKey): Observable>; /** * Converts the observable sequence to a Map if it exists. * @param {Function} keySelector A function which produces the key for the Map. * @param {Function} [elementSelector] An optional function which produces the element for the Map. If not present, defaults to the value from the observable sequence. * @returns {Observable} An observable sequence with a single value of a Map containing the values from the observable sequence. */ toMap(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement): Observable>; } } declare module "rx.aggregates" { export = Rx; } RxJS-4.1.0/ts/rx.all.d.ts000066400000000000000000012410441266736161100150010ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike; /** * Promise A+ */ export interface Promise { then(onFulfilled: (value: T) => R|Promise, onRejected: (error: any) => Promise): Promise; then(onFulfilled: (value: T) => R|Promise, onRejected?: (error: any) => R): Promise; } /** * Promise A+ */ export interface IPromise extends Promise { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } export module internals { export var isEqual : (left: any, right: any) => boolean; } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export interface IScheduler { /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ catch(handler: Function): IScheduler; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; export interface Observer { makeSafe(disposable: IDisposable): Observer; } export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface CheckedObserver extends Observer { checkAccess(): void; } export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } export interface ObservableStatic { /** * Converts a Promise to an Observable sequence * @param {Promise} An ES6 Compliant promise. * @returns {Observable} An Observable sequence which wraps the existing promise success and failure. */ fromPromise(promise: Promise): Observable; } export interface Observable { /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise(promiseCtor?: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }): IPromise; /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise>(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): TPromise; }): TPromise; } export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } export interface ArrayObserveChange { type: string; object: T[]; name?: string; oldValue?: T; index?: number; removed?: T[]; added?: number; } export interface ObservableStatic { /** * Creates an Observable sequence from changes to an array using Array.observe. * @param {Array} array An array to observe changes. * @returns {Observable} An observable sequence containing changes to an array from Array.observe. */ ofArrayChanges(obj: T[]): Observable>; } export interface ObjectObserveChange { type: string; object: T; name: string; oldValue?: any; } export interface ObservableStatic { /** * Creates an Observable sequence from changes to an object using Object.observe. * @param {Object} obj An object to observe changes. * @returns {Observable} An observable sequence containing changes to an object from Object.observe. */ ofObjectChanges(obj: T): Observable>; } export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ concatMapObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectConcatObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; } export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, skipElementSelector: boolean, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, skipElementSelector?: boolean, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, keySerializer?: (key: TKey) => string): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectManyObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ flatMapObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters passed to the function correspond with the elements from the left and right source sequences for which overlap occurs. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ join( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: TRight) => TResult): Observable; } export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations, and groups the results. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. The first parameter passed to the function is an element of the left sequence. The second parameter passed to the function is an observable sequence with elements from the right sequence that overlap with the left sequence's element. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ groupJoin( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: Observable) => TResult): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferClosingSelector: () => Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable, bufferClosingSelector: () => Observable): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowClosingSelector: () => Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable, windowClosingSelector: () => Observable): Observable>; } export interface Observable { /** * Returns a new observable that triggers on the second and subsequent triggerings of the input observable. * The Nth triggering of the input observable passes the arguments from the N-1th and Nth triggering as a pair. * The argument passed to the N-1th triggering is held in hidden internal state until the Nth triggering occurs. * @returns {Observable} An observable that triggers on successive pairs of observations from the input observable as an array. */ pairwise(): Observable<[T, T]>; } export interface Observable { /** * Returns two observables which partition the observations of the source by the given function. * The first will trigger observations for those values for which the predicate returns true. * The second will trigger observations for those values where the predicate returns false. * The predicate is executed once for each subscribed observer. * Both also propagate all error observations arising from the source and each completes * when the source completes. * @param {Function} predicate * The function to determine which output Observable will trigger a particular observation. * @returns {Array} * An array of observables. The first triggers when the predicate returns true, * and the second triggers when the predicate returns false. */ partition(predicate: _Predicate, thisArg?: any): [Observable, Observable]; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. * This operator allows for a fluent style of writing queries that use the same sequence multiple times. * * @param {Function} selector Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ let(selector: (source: Observable) => Observable): Observable; } export interface ObservableStatic { /** * Determines whether an observable collection contains values. * * @example * 1 - res = Rx.Observable.if(condition, obs1); * 2 - res = Rx.Observable.if(condition, obs1, obs2); * 3 - res = Rx.Observable.if(condition, obs1, scheduler); * @param {Function} condition The condition which determines if the thenSource or elseSource will be run. * @param {Observable} thenSource The observable sequence or Promise that will be run if the condition function returns true. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the condition function returns false. If this is not provided, it defaults to Rx.Observabe.Empty with the specified scheduler. * @returns {Observable} An observable sequence which is either the thenSource or elseSource. */ if(condition: () => boolean, thenSource: ObservableOrPromise, elseSourceOrScheduler?: ObservableOrPromise | IScheduler): Observable; } export interface ObservableStatic { /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; } export interface ObservableStatic { /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; } export interface Observable { /** * Repeats source as long as condition holds emulating a do while loop. * * @param {Function} condition The condition which determines if the source will be repeated. * @param {Observable} source The observable sequence that will be run if the condition function returns true. * @returns {Observable} An observable sequence which is repeated as long as the condition holds. */ doWhile(condition: () => boolean): Observable; } export interface ObservableStatic { /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => string, sources: { [key: string]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => number, sources: { [key: number]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; } export interface Observable { /** * Expands an observable sequence by recursively invoking selector. * * @param {Function} selector Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. * @param {Scheduler} [scheduler] Scheduler on which to perform the expansion. If not provided, this defaults to the current thread scheduler. * @returns {Observable} An observable sequence containing all the elements produced by the recursive expansion. */ expand(selector: (item: T) => Observable, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(sources: ObservableOrPromise[]): Observable; /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(...args: ObservableOrPromise[]): Observable; } export interface Observable { /** * Runs two observable sequences in parallel and combines their last elemenets. * * @param {Observable} second Second observable sequence. * @param {Function} resultSelector Result selector function to invoke with the last elements of both sequences. * @returns {Observable} An observable sequence with the result of calling the selector function with the last elements of both input sequences. */ forkJoin(second: ObservableOrPromise, resultSelector: (left: T, right: TSecond) => TResult): Observable; } export interface Observable { /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ manySelect(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ extend(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; } export class Plan { } export interface Pattern2 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern3; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2) => TR): Plan; } interface Pattern3 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern4; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3) => TR): Plan; } interface Pattern4 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern5; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4) => TR): Plan; } interface Pattern5 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern6; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TR): Plan; } interface Pattern6 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern7; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TR): Plan; } interface Pattern7 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern8; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TR): Plan; } interface Pattern8 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern9; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TR): Plan; } interface Pattern9 { /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TR): Plan; } export interface Observable { /** * Creates a pattern that matches when both observable sequences have an available value. * * @param right Observable sequence to match with the current sequence. * @return {Pattern} Pattern object that matches when both observable sequences have an available value. */ and(right: Observable): Pattern2; } export interface Observable { /** * Matches when the observable sequence has an available value and projects the value. * * @param {Function} selector Selector that will be invoked for values in the source sequence. * @returns {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T) => TR): Plan; } export interface ObservableStatic { /** * Joins together the results from several patterns. * * @param plans A series of plans (specified as an Array of as a series of arguments) created by use of the Then operator on patterns. * @returns {Observable} Observable sequence with the results form matching several patterns. */ when(plan: Plan): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable>; /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a window. * @param {Number} count Maximum element count of a window. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable; /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a buffer. * @param {Number} count Maximum element count of a buffer. * @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable; } export interface TimeInterval { value: T; interval: number; } export interface Observable { /** * Records the time interval between consecutive values in an observable sequence. * * @example * 1 - res = source.timeInterval(); * 2 - res = source.timeInterval(Rx.Scheduler.timeout); * * @param [scheduler] Scheduler used to compute time intervals. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence with time interval information on values. */ timeInterval(scheduler?: IScheduler): Observable>; } export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithAbsoluteTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return new Date(); } * }); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning Date values. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithAbsoluteTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => Date, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithRelativeTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return 500; } * ); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning integer values denoting milliseconds. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithRelativeTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. * * @example * 1 - res = source.delaySubscription(5000); // 5s * 2 - res = source.delaySubscription(5000, Rx.Scheduler.default); // 5 seconds * * @param {Number} dueTime Relative or absolute time shift of the subscription. * @param {Scheduler} [scheduler] Scheduler to run the subscription delay timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delaySubscription(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * * 1 - res = source.skipLastWithTime(5000); * 2 - res = source.skipLastWithTime(5000, scheduler); * * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for skipping elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the end of the source sequence. */ skipLastWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the end of the source sequence. */ takeLastWithTime(duration: number, timerScheduler?: IScheduler, loopScheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an array with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence containing a single array with the elements taken during the specified duration from the end of the source sequence. */ takeLastBufferWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.takeWithTime(5000, [optional scheduler]); * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the start of the source sequence. */ takeWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.skipWithTime(5000, [optional scheduler]); * * @description * Specifying a zero value for duration doesn't guarantee no elements will be dropped from the start of the source sequence. * This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded * may not execute immediately, despite the zero due time. * * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the duration. * @param {Number} duration Duration for skipping elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the start of the source sequence. */ skipWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(startTime: Date, scheduler?: IScheduler): Observable; /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(endTime: Date, scheduler?: IScheduler): Observable; /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Executes a transducer to transform the observable sequence * @param {Transducer} transducer A transducer to execute * @returns {Observable} An Observable sequence containing the results from the transducer. */ transduce(transducer: any): any; //TODO: Setup transducer } export interface Observable { /** * Performs a exclusive waiting for the first to finish before subscribing to another observable. * Observables that come in between subscriptions will be dropped on the floor. * @returns {Observable} A exclusive observable with only the results that happen when subscribed. */ switchFirst(): T; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } export interface HistoricalScheduler extends VirtualTimeScheduler { } export var HistoricalScheduler: { /** * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ new (initialClock: number, comparer: _Comparer): HistoricalScheduler; }; export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } export interface AnonymousObservable extends Observable { } export interface GroupedObservable extends Observable { key: TKey; underlyingObservable: Observable; } export interface AsyncSubject extends Subject { } interface AsyncSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AsyncSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AsyncSubject: AsyncSubjectStatic; export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; export interface AnonymousSubject extends Subject { } interface AnonymousSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AnonymousSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AnonymousSubject: AnonymousSubjectStatic; /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } } declare module "rx" { export = Rx; } declare module "rx.all" { export = Rx; } RxJS-4.1.0/ts/rx.all.es6.d.ts000066400000000000000000012436001266736161100154750ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike | Iterable; /** * Promise A+ */ export interface Promise extends PromiseLike { } /** * Promise A+ */ export interface IPromise extends PromiseLike { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } export module internals { export var isEqual : (left: any, right: any) => boolean; } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export interface IScheduler { /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ catch(handler: Function): IScheduler; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; export interface Observer { makeSafe(disposable: IDisposable): Observer; } export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface CheckedObserver extends Observer { checkAccess(): void; } export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } export interface ObservableStatic { /** * Converts a Promise to an Observable sequence * @param {Promise} An ES6 Compliant promise. * @returns {Observable} An Observable sequence which wraps the existing promise success and failure. */ fromPromise(promise: Promise): Observable; } export interface Observable { /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise(promiseCtor?: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }): IPromise; /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise>(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): TPromise; }): TPromise; } export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } export interface ArrayObserveChange { type: string; object: T[]; name?: string; oldValue?: T; index?: number; removed?: T[]; added?: number; } export interface ObservableStatic { /** * Creates an Observable sequence from changes to an array using Array.observe. * @param {Array} array An array to observe changes. * @returns {Observable} An observable sequence containing changes to an array from Array.observe. */ ofArrayChanges(obj: T[]): Observable>; } export interface ObjectObserveChange { type: string; object: T; name: string; oldValue?: any; } export interface ObservableStatic { /** * Creates an Observable sequence from changes to an object using Object.observe. * @param {Object} obj An object to observe changes. * @returns {Observable} An observable sequence containing changes to an object from Object.observe. */ ofObjectChanges(obj: T): Observable>; } export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ concatMapObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectConcatObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; } export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, skipElementSelector: boolean, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, skipElementSelector?: boolean, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, keySerializer?: (key: TKey) => string): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectManyObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ flatMapObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters passed to the function correspond with the elements from the left and right source sequences for which overlap occurs. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ join( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: TRight) => TResult): Observable; } export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations, and groups the results. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. The first parameter passed to the function is an element of the left sequence. The second parameter passed to the function is an observable sequence with elements from the right sequence that overlap with the left sequence's element. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ groupJoin( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: Observable) => TResult): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferClosingSelector: () => Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable, bufferClosingSelector: () => Observable): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowClosingSelector: () => Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable, windowClosingSelector: () => Observable): Observable>; } export interface Observable { /** * Returns a new observable that triggers on the second and subsequent triggerings of the input observable. * The Nth triggering of the input observable passes the arguments from the N-1th and Nth triggering as a pair. * The argument passed to the N-1th triggering is held in hidden internal state until the Nth triggering occurs. * @returns {Observable} An observable that triggers on successive pairs of observations from the input observable as an array. */ pairwise(): Observable<[T, T]>; } export interface Observable { /** * Returns two observables which partition the observations of the source by the given function. * The first will trigger observations for those values for which the predicate returns true. * The second will trigger observations for those values where the predicate returns false. * The predicate is executed once for each subscribed observer. * Both also propagate all error observations arising from the source and each completes * when the source completes. * @param {Function} predicate * The function to determine which output Observable will trigger a particular observation. * @returns {Array} * An array of observables. The first triggers when the predicate returns true, * and the second triggers when the predicate returns false. */ partition(predicate: _Predicate, thisArg?: any): [Observable, Observable]; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. * This operator allows for a fluent style of writing queries that use the same sequence multiple times. * * @param {Function} selector Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ let(selector: (source: Observable) => Observable): Observable; } export interface ObservableStatic { /** * Determines whether an observable collection contains values. * * @example * 1 - res = Rx.Observable.if(condition, obs1); * 2 - res = Rx.Observable.if(condition, obs1, obs2); * 3 - res = Rx.Observable.if(condition, obs1, scheduler); * @param {Function} condition The condition which determines if the thenSource or elseSource will be run. * @param {Observable} thenSource The observable sequence or Promise that will be run if the condition function returns true. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the condition function returns false. If this is not provided, it defaults to Rx.Observabe.Empty with the specified scheduler. * @returns {Observable} An observable sequence which is either the thenSource or elseSource. */ if(condition: () => boolean, thenSource: ObservableOrPromise, elseSourceOrScheduler?: ObservableOrPromise | IScheduler): Observable; } export interface ObservableStatic { /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; } export interface ObservableStatic { /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; } export interface Observable { /** * Repeats source as long as condition holds emulating a do while loop. * * @param {Function} condition The condition which determines if the source will be repeated. * @param {Observable} source The observable sequence that will be run if the condition function returns true. * @returns {Observable} An observable sequence which is repeated as long as the condition holds. */ doWhile(condition: () => boolean): Observable; } export interface ObservableStatic { /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => string, sources: { [key: string]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => number, sources: { [key: number]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; } export interface Observable { /** * Expands an observable sequence by recursively invoking selector. * * @param {Function} selector Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. * @param {Scheduler} [scheduler] Scheduler on which to perform the expansion. If not provided, this defaults to the current thread scheduler. * @returns {Observable} An observable sequence containing all the elements produced by the recursive expansion. */ expand(selector: (item: T) => Observable, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(sources: ObservableOrPromise[]): Observable; /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(...args: ObservableOrPromise[]): Observable; } export interface Observable { /** * Runs two observable sequences in parallel and combines their last elemenets. * * @param {Observable} second Second observable sequence. * @param {Function} resultSelector Result selector function to invoke with the last elements of both sequences. * @returns {Observable} An observable sequence with the result of calling the selector function with the last elements of both input sequences. */ forkJoin(second: ObservableOrPromise, resultSelector: (left: T, right: TSecond) => TResult): Observable; } export interface Observable { /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ manySelect(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ extend(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; } export class Plan { } export interface Pattern2 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern3; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2) => TR): Plan; } interface Pattern3 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern4; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3) => TR): Plan; } interface Pattern4 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern5; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4) => TR): Plan; } interface Pattern5 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern6; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TR): Plan; } interface Pattern6 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern7; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TR): Plan; } interface Pattern7 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern8; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TR): Plan; } interface Pattern8 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern9; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TR): Plan; } interface Pattern9 { /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TR): Plan; } export interface Observable { /** * Creates a pattern that matches when both observable sequences have an available value. * * @param right Observable sequence to match with the current sequence. * @return {Pattern} Pattern object that matches when both observable sequences have an available value. */ and(right: Observable): Pattern2; } export interface Observable { /** * Matches when the observable sequence has an available value and projects the value. * * @param {Function} selector Selector that will be invoked for values in the source sequence. * @returns {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T) => TR): Plan; } export interface ObservableStatic { /** * Joins together the results from several patterns. * * @param plans A series of plans (specified as an Array of as a series of arguments) created by use of the Then operator on patterns. * @returns {Observable} Observable sequence with the results form matching several patterns. */ when(plan: Plan): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable>; /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a window. * @param {Number} count Maximum element count of a window. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable; /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a buffer. * @param {Number} count Maximum element count of a buffer. * @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable; } export interface TimeInterval { value: T; interval: number; } export interface Observable { /** * Records the time interval between consecutive values in an observable sequence. * * @example * 1 - res = source.timeInterval(); * 2 - res = source.timeInterval(Rx.Scheduler.timeout); * * @param [scheduler] Scheduler used to compute time intervals. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence with time interval information on values. */ timeInterval(scheduler?: IScheduler): Observable>; } export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithAbsoluteTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return new Date(); } * }); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning Date values. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithAbsoluteTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => Date, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithRelativeTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return 500; } * ); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning integer values denoting milliseconds. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithRelativeTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. * * @example * 1 - res = source.delaySubscription(5000); // 5s * 2 - res = source.delaySubscription(5000, Rx.Scheduler.default); // 5 seconds * * @param {Number} dueTime Relative or absolute time shift of the subscription. * @param {Scheduler} [scheduler] Scheduler to run the subscription delay timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delaySubscription(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * * 1 - res = source.skipLastWithTime(5000); * 2 - res = source.skipLastWithTime(5000, scheduler); * * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for skipping elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the end of the source sequence. */ skipLastWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the end of the source sequence. */ takeLastWithTime(duration: number, timerScheduler?: IScheduler, loopScheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an array with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence containing a single array with the elements taken during the specified duration from the end of the source sequence. */ takeLastBufferWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.takeWithTime(5000, [optional scheduler]); * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the start of the source sequence. */ takeWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.skipWithTime(5000, [optional scheduler]); * * @description * Specifying a zero value for duration doesn't guarantee no elements will be dropped from the start of the source sequence. * This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded * may not execute immediately, despite the zero due time. * * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the duration. * @param {Number} duration Duration for skipping elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the start of the source sequence. */ skipWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(startTime: Date, scheduler?: IScheduler): Observable; /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(endTime: Date, scheduler?: IScheduler): Observable; /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Executes a transducer to transform the observable sequence * @param {Transducer} transducer A transducer to execute * @returns {Observable} An Observable sequence containing the results from the transducer. */ transduce(transducer: any): any; //TODO: Setup transducer } export interface Observable { /** * Performs a exclusive waiting for the first to finish before subscribing to another observable. * Observables that come in between subscriptions will be dropped on the floor. * @returns {Observable} A exclusive observable with only the results that happen when subscribed. */ switchFirst(): T; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } export interface HistoricalScheduler extends VirtualTimeScheduler { } export var HistoricalScheduler: { /** * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ new (initialClock: number, comparer: _Comparer): HistoricalScheduler; }; export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } export interface AnonymousObservable extends Observable { } export interface GroupedObservable extends Observable { key: TKey; underlyingObservable: Observable; } export interface AsyncSubject extends Subject { } interface AsyncSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AsyncSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AsyncSubject: AsyncSubjectStatic; export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; export interface AnonymousSubject extends Subject { } interface AnonymousSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AnonymousSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AnonymousSubject: AnonymousSubjectStatic; /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } } declare module "rx" { export = Rx; } declare module "rx.all" { export = Rx; } RxJS-4.1.0/ts/rx.async.d.ts000066400000000000000000000637461266736161100153600ustar00rootroot00000000000000declare module Rx { export interface ObservableStatic { wrap(fn: Function): Observable; spawn(fn: Function): Observable; } export interface ObservableStatic { /** * Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence. * * @example * var res = Rx.Observable.start(function () { console.log('hello'); }); * var res = Rx.Observable.start(function () { console.log('hello'); }, Rx.Scheduler.timeout); * var res = Rx.Observable.start(function () { this.log('hello'); }, Rx.Scheduler.timeout, console); * * @param {Function} func Function to run asynchronously. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Observable} An observable sequence exposing the function's result value, or an exception. * * Remarks * * The function is called immediately, not during the subscription of the resulting sequence. * * Multiple subscriptions to the resulting sequence can observe the function's result. */ start(func: () => T, scheduler?: IScheduler, context?: any): Observable; } export interface ObservableStatic { /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: () => TResult, context?: any, scheduler?: IScheduler): () => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2, arg3: T3) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; } export interface ObservableStatic { /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: Function, context: any, selector: Function): (...args: any[]) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => Observable; } export interface ObservableStatic { /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: Function, context?: any, selector?: Function): (...args: any[]) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => Observable; } export interface ObservableStatic { /** * Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList. * @param {Object} element The DOMElement or NodeList to attach a listener. * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ fromEvent(element: EventTarget, eventName: string, selector?: (arguments: any[]) => T): Observable; /** * Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList. * @param {Object} element The DOMElement or NodeList to attach a listener. * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ fromEvent(element: { on: (name: string, cb: (e: any) => any) => void; off: (name: string, cb: (e: any) => any) => void }, eventName: string, selector?: (arguments: any[]) => T): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from an event emitter via an addHandler/removeHandler pair. * @param {Function} addHandler The function to add a handler to the emitter. * @param {Function} [removeHandler] The optional function to remove a handler from an emitter. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence which wraps an event from an event emitter */ fromEventPattern(addHandler: (handler: Function) => void, removeHandler: (handler: Function) => void, selector?: (arguments: any[]) => T): Observable; } export interface ObservableStatic { /** * Invokes the asynchronous function, surfacing the result through an observable sequence. * @param {Function} functionAsync Asynchronous function which returns a Promise to run. * @returns {Observable} An observable sequence exposing the function's result value, or an exception. */ startAsync(functionAsync: () => IPromise): Observable; } } declare module "rx.async" { export = Rx; } RxJS-4.1.0/ts/rx.async.es6.d.ts000066400000000000000000000637461266736161100160540ustar00rootroot00000000000000declare module Rx { export interface ObservableStatic { wrap(fn: Function): Observable; spawn(fn: Function): Observable; } export interface ObservableStatic { /** * Invokes the specified function asynchronously on the specified scheduler, surfacing the result through an observable sequence. * * @example * var res = Rx.Observable.start(function () { console.log('hello'); }); * var res = Rx.Observable.start(function () { console.log('hello'); }, Rx.Scheduler.timeout); * var res = Rx.Observable.start(function () { this.log('hello'); }, Rx.Scheduler.timeout, console); * * @param {Function} func Function to run asynchronously. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Observable} An observable sequence exposing the function's result value, or an exception. * * Remarks * * The function is called immediately, not during the subscription of the resulting sequence. * * Multiple subscriptions to the resulting sequence can observe the function's result. */ start(func: () => T, scheduler?: IScheduler, context?: any): Observable; } export interface ObservableStatic { /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: () => TResult, context?: any, scheduler?: IScheduler): () => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2, arg3: T3) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts the function into an asynchronous function. Each invocation of the resulting asynchronous function causes an invocation of the original synchronous function on the specified scheduler. * @param {Function} function Function to convert to an asynchronous function. * @param {Scheduler} [scheduler] Scheduler to run the function on. If not specified, defaults to Scheduler.timeout. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @returns {Function} Asynchronous function. */ toAsync(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => TResult, context?: any, scheduler?: IScheduler): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; } export interface ObservableStatic { /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: Function, context: any, selector: Function): (...args: any[]) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => Observable; /** * Converts a callback function to an observable sequence. * * @param {Function} function Function with a callback as the last parameter to convert to an Observable sequence. * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback to produce a single item to yield on next. * @returns {Function} A function, when executed with the required parameters minus the callback, produces an Observable sequence with a single value of the arguments to the callback as an array. */ fromCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, callback: (result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => Observable; } export interface ObservableStatic { /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: Function, context?: any, selector?: Function): (...args: any[]) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8) => Observable; /** * Converts a Node.js callback style function to an observable sequence. This must be in function (err, ...) format. * @param {Function} func The function to call * @param {Mixed} [context] The context for the func parameter to be executed. If not specified, defaults to undefined. * @param {Function} [selector] A selector which takes the arguments from the callback minus the error to produce a single item to yield on next. * @returns {Function} An async function which when applied, returns an observable sequence with the callback arguments as an array. */ fromNodeCallback(func: (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9, callback: (err: any, result: TResult) => any) => any, context?: any, selector?: Function): (arg1: T1, arg2: T2, arg3: T3, arg4: T4, arg5: T5, arg6: T6, arg7: T7, arg8: T8, arg9: T9) => Observable; } export interface ObservableStatic { /** * Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList. * @param {Object} element The DOMElement or NodeList to attach a listener. * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ fromEvent(element: EventTarget, eventName: string, selector?: (arguments: any[]) => T): Observable; /** * Creates an observable sequence by adding an event listener to the matching DOMElement or each item in the NodeList. * @param {Object} element The DOMElement or NodeList to attach a listener. * @param {String} eventName The event name to attach the observable sequence. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence of events from the specified element and the specified event. */ fromEvent(element: { on: (name: string, cb: (e: any) => any) => void; off: (name: string, cb: (e: any) => any) => void }, eventName: string, selector?: (arguments: any[]) => T): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from an event emitter via an addHandler/removeHandler pair. * @param {Function} addHandler The function to add a handler to the emitter. * @param {Function} [removeHandler] The optional function to remove a handler from an emitter. * @param {Function} [selector] A selector which takes the arguments from the event handler to produce a single item to yield on next. * @returns {Observable} An observable sequence which wraps an event from an event emitter */ fromEventPattern(addHandler: (handler: Function) => void, removeHandler: (handler: Function) => void, selector?: (arguments: any[]) => T): Observable; } export interface ObservableStatic { /** * Invokes the asynchronous function, surfacing the result through an observable sequence. * @param {Function} functionAsync Asynchronous function which returns a Promise to run. * @returns {Observable} An observable sequence exposing the function's result value, or an exception. */ startAsync(functionAsync: () => IPromise): Observable; } } declare module "rx.async" { export = Rx; } RxJS-4.1.0/ts/rx.backpressure.d.ts000066400000000000000000000066201266736161100167200ustar00rootroot00000000000000declare module Rx { /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausable(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausable(pauser?: Observable): PausableObservable; } export interface PausableObservable extends Observable { pause(): void; resume(): void; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, * and yields the values that were buffered while paused. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausableBuffered(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausableBuffered(pauser?: Observable): PausableObservable; } export interface Observable { /** * Attaches a controller to the observable sequence with the ability to queue. * @example * var source = Rx.Observable.interval(100).controlled(); * source.request(3); // Reads 3 values * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request * @param {Scheduler} scheduler determines how the requests will be scheduled * @returns {Observable} The observable sequence which only propagates values on request. */ controlled(enableQueue?: boolean, scheduler?: IScheduler): ControlledObservable; } export interface ControlledObservable extends Observable { request(numberOfItems?: number): IDisposable; } export interface ControlledObservable { /** * Attaches a stop and wait observable to the current observable. * @returns {Observable} A stop and wait observable. */ stopAndWait(): Observable; } export interface ControlledObservable { /** * Creates a sliding windowed observable based upon the window size. * @param {Number} windowSize The number of items in the window * @returns {Observable} A windowed observable based upon the window size. */ windowed(windowSize: number): Observable; } export interface Observable { /** * Pipes the existing Observable sequence into a Node.js Stream. * @param {Stream} dest The destination Node.js stream. * @returns {Stream} The destination stream. */ pipe(dest: TDest): TDest; // TODO: Add link to node.d.ts some where } } declare module "rx.backpressure" { export = Rx; } RxJS-4.1.0/ts/rx.backpressure.es6.d.ts000066400000000000000000000066201266736161100174140ustar00rootroot00000000000000declare module Rx { /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausable(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausable(pauser?: Observable): PausableObservable; } export interface PausableObservable extends Observable { pause(): void; resume(): void; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, * and yields the values that were buffered while paused. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausableBuffered(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausableBuffered(pauser?: Observable): PausableObservable; } export interface Observable { /** * Attaches a controller to the observable sequence with the ability to queue. * @example * var source = Rx.Observable.interval(100).controlled(); * source.request(3); // Reads 3 values * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request * @param {Scheduler} scheduler determines how the requests will be scheduled * @returns {Observable} The observable sequence which only propagates values on request. */ controlled(enableQueue?: boolean, scheduler?: IScheduler): ControlledObservable; } export interface ControlledObservable extends Observable { request(numberOfItems?: number): IDisposable; } export interface ControlledObservable { /** * Attaches a stop and wait observable to the current observable. * @returns {Observable} A stop and wait observable. */ stopAndWait(): Observable; } export interface ControlledObservable { /** * Creates a sliding windowed observable based upon the window size. * @param {Number} windowSize The number of items in the window * @returns {Observable} A windowed observable based upon the window size. */ windowed(windowSize: number): Observable; } export interface Observable { /** * Pipes the existing Observable sequence into a Node.js Stream. * @param {Stream} dest The destination Node.js stream. * @returns {Stream} The destination stream. */ pipe(dest: TDest): TDest; // TODO: Add link to node.d.ts some where } } declare module "rx.backpressure" { export = Rx; } RxJS-4.1.0/ts/rx.binding.d.ts000066400000000000000000000433731266736161100156470ustar00rootroot00000000000000declare module Rx { export interface ConnectableObservable extends Observable { connect(): IDisposable; refCount(): Observable; } export interface Observable { /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } } declare module "rx.binding" { export = Rx; } RxJS-4.1.0/ts/rx.binding.es6.d.ts000066400000000000000000000433731266736161100163430ustar00rootroot00000000000000declare module Rx { export interface ConnectableObservable extends Observable { connect(): IDisposable; refCount(): Observable; } export interface Observable { /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } } declare module "rx.binding" { export = Rx; } RxJS-4.1.0/ts/rx.coincidence.d.ts000066400000000000000000000365031266736161100164750ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters passed to the function correspond with the elements from the left and right source sequences for which overlap occurs. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ join( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: TRight) => TResult): Observable; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, skipElementSelector: boolean, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; } export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations, and groups the results. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. The first parameter passed to the function is an element of the left sequence. The second parameter passed to the function is an observable sequence with elements from the right sequence that overlap with the left sequence's element. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ groupJoin( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: Observable) => TResult): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferClosingSelector: () => Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable, bufferClosingSelector: () => Observable): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowClosingSelector: () => Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable, windowClosingSelector: () => Observable): Observable>; } export interface Observable { /** * Returns a new observable that triggers on the second and subsequent triggerings of the input observable. * The Nth triggering of the input observable passes the arguments from the N-1th and Nth triggering as a pair. * The argument passed to the N-1th triggering is held in hidden internal state until the Nth triggering occurs. * @returns {Observable} An observable that triggers on successive pairs of observations from the input observable as an array. */ pairwise(): Observable<[T, T]>; } export interface Observable { /** * Returns two observables which partition the observations of the source by the given function. * The first will trigger observations for those values for which the predicate returns true. * The second will trigger observations for those values where the predicate returns false. * The predicate is executed once for each subscribed observer. * Both also propagate all error observations arising from the source and each completes * when the source completes. * @param {Function} predicate * The function to determine which output Observable will trigger a particular observation. * @returns {Array} * An array of observables. The first triggers when the predicate returns true, * and the second triggers when the predicate returns false. */ partition(predicate: _Predicate, thisArg?: any): [Observable, Observable]; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, skipElementSelector?: boolean, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, keySerializer?: (key: TKey) => string): Observable>; } export interface GroupedObservable extends Observable { key: TKey; underlyingObservable: Observable; } } declare module "rx.coincidence" { export = Rx; } RxJS-4.1.0/ts/rx.coincidence.es6.d.ts000066400000000000000000000365031266736161100171710ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any two overlapping elements of the left and right observable sequences. The parameters passed to the function correspond with the elements from the left and right source sequences for which overlap occurs. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ join( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: TRight) => TResult): Observable; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, skipElementSelector: boolean, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function. * A duration selector function is used to control the lifetime of groups. When a group expires, it receives an OnCompleted notification. When a new element with the same * key value as a reclaimed group occurs, the group will be reborn with a new lifetime request. * * @example * var res = observable.groupByUntil(function (x) { return x.id; }, null, function () { return Rx.Observable.never(); }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function () { return Rx.Observable.never(); }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} durationSelector A function to signal the expiration of a group. * @returns {Observable} * A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. * If a group's lifetime expires, a new group with the same key value can be created once an element with such a key value is encoutered. * */ groupByUntil(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, durationSelector: (group: GroupedObservable) => Observable, keySerializer?: (key: TKey) => string): Observable>; } export interface Observable { /** * Correlates the elements of two sequences based on overlapping durations, and groups the results. * * @param {Observable} right The right observable sequence to join elements for. * @param {Function} leftDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the left observable sequence, used to determine overlap. * @param {Function} rightDurationSelector A function to select the duration (expressed as an observable sequence) of each element of the right observable sequence, used to determine overlap. * @param {Function} resultSelector A function invoked to compute a result element for any element of the left sequence with overlapping elements from the right observable sequence. The first parameter passed to the function is an element of the left sequence. The second parameter passed to the function is an observable sequence with elements from the right sequence that overlap with the left sequence's element. * @returns {Observable} An observable sequence that contains result elements computed from source elements that have an overlapping duration. */ groupJoin( right: Observable, leftDurationSelector: (leftItem: T) => Observable, rightDurationSelector: (rightItem: TRight) => Observable, resultSelector: (leftItem: T, rightItem: Observable) => TResult): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferClosingSelector: () => Observable): Observable; /** * Projects each element of an observable sequence into zero or more buffers. * @param {Mixed} bufferOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [bufferClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ buffer(bufferOpenings: Observable, bufferClosingSelector: () => Observable): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowClosingSelector: () => Observable): Observable>; /** * Projects each element of an observable sequence into zero or more windows. * * @param {Mixed} windowOpeningsOrClosingSelector Observable sequence whose elements denote the creation of new windows, or, a function invoked to define the boundaries of the produced windows (a new window is started when the previous one is closed, resulting in non-overlapping windows). * @param {Function} [windowClosingSelector] A function invoked to define the closing of each produced window. If a closing selector function is specified for the first parameter, this parameter is ignored. * @returns {Observable} An observable sequence of windows. */ window(windowOpenings: Observable, windowClosingSelector: () => Observable): Observable>; } export interface Observable { /** * Returns a new observable that triggers on the second and subsequent triggerings of the input observable. * The Nth triggering of the input observable passes the arguments from the N-1th and Nth triggering as a pair. * The argument passed to the N-1th triggering is held in hidden internal state until the Nth triggering occurs. * @returns {Observable} An observable that triggers on successive pairs of observations from the input observable as an array. */ pairwise(): Observable<[T, T]>; } export interface Observable { /** * Returns two observables which partition the observations of the source by the given function. * The first will trigger observations for those values for which the predicate returns true. * The second will trigger observations for those values where the predicate returns false. * The predicate is executed once for each subscribed observer. * Both also propagate all error observations arising from the source and each completes * when the source completes. * @param {Function} predicate * The function to determine which output Observable will trigger a particular observation. * @returns {Array} * An array of observables. The first triggers when the predicate returns true, * and the second triggers when the predicate returns false. */ partition(predicate: _Predicate, thisArg?: any): [Observable, Observable]; } export interface Observable { /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, skipElementSelector?: boolean, keySerializer?: (key: TKey) => string): Observable>; /** * Groups the elements of an observable sequence according to a specified key selector function and comparer and selects the resulting elements by using a specified function. * * @example * var res = observable.groupBy(function (x) { return x.id; }); * 2 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }); * 3 - observable.groupBy(function (x) { return x.id; }), function (x) { return x.name; }, function (x) { return x.toString(); }); * @param {Function} keySelector A function to extract the key for each element. * @param {Function} [elementSelector] A function to map each source element to an element in an observable group. * @returns {Observable} A sequence of observable groups, each of which corresponds to a unique key value, containing all elements that share that same key value. */ groupBy(keySelector: (value: T) => TKey, elementSelector: (value: T) => TElement, keySerializer?: (key: TKey) => string): Observable>; } export interface GroupedObservable extends Observable { key: TKey; underlyingObservable: Observable; } } declare module "rx.coincidence" { export = Rx; } RxJS-4.1.0/ts/rx.core.binding.d.ts000066400000000000000000000424401266736161100165700ustar00rootroot00000000000000declare module Rx { export interface ConnectableObservable extends Observable { connect(): IDisposable; refCount(): Observable; } export interface Observable { /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; } declare module "rx.core.binding" { export = Rx; } RxJS-4.1.0/ts/rx.core.binding.es6.d.ts000066400000000000000000000424401266736161100172640ustar00rootroot00000000000000declare module Rx { export interface ConnectableObservable extends Observable { connect(): IDisposable; refCount(): Observable; } export interface Observable { /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; } declare module "rx.core.binding" { export = Rx; } RxJS-4.1.0/ts/rx.core.d.ts000066400000000000000000000566521266736161100151710ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike; /** * Promise A+ */ export interface Promise { then(onFulfilled: (value: T) => R|Promise, onRejected: (error: any) => Promise): Promise; then(onFulfilled: (value: T) => R|Promise, onRejected?: (error: any) => R): Promise; } /** * Promise A+ */ export interface IPromise extends Promise { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } export interface CheckedObserver extends Observer { checkAccess(): void; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface AnonymousObservable extends Observable { } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } } declare module "rx" { export = Rx; } RxJS-4.1.0/ts/rx.core.es6.d.ts000066400000000000000000000563731266736161100156650ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike | Iterable; /** * Promise A+ */ export interface Promise extends PromiseLike { } /** * Promise A+ */ export interface IPromise extends PromiseLike { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } export interface CheckedObserver extends Observer { checkAccess(): void; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface AnonymousObservable extends Observable { } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } } declare module "rx" { export = Rx; } RxJS-4.1.0/ts/rx.core.testing.d.ts000066400000000000000000000301351266736161100166310ustar00rootroot00000000000000declare module Rx { export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } } declare module "rx.core.testing" { export = Rx; } RxJS-4.1.0/ts/rx.core.testing.es6.d.ts000066400000000000000000000301351266736161100173250ustar00rootroot00000000000000declare module Rx { export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } } declare module "rx.core.testing" { export = Rx; } RxJS-4.1.0/ts/rx.d.ts000066400000000000000000005162071266736161100142370ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike; /** * Promise A+ */ export interface Promise { then(onFulfilled: (value: T) => R|Promise, onRejected: (error: any) => Promise): Promise; then(onFulfilled: (value: T) => R|Promise, onRejected?: (error: any) => R): Promise; } /** * Promise A+ */ export interface IPromise extends Promise { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } export module internals { export var isEqual : (left: any, right: any) => boolean; } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export interface IScheduler { /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ catch(handler: Function): IScheduler; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; export interface Observer { makeSafe(disposable: IDisposable): Observer; } export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface CheckedObserver extends Observer { checkAccess(): void; } export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } export interface ObservableStatic { /** * Converts a Promise to an Observable sequence * @param {Promise} An ES6 Compliant promise. * @returns {Observable} An Observable sequence which wraps the existing promise success and failure. */ fromPromise(promise: Promise): Observable; } export interface Observable { /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise(promiseCtor?: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }): IPromise; /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise>(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): TPromise; }): TPromise; } export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ concatMapObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectConcatObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; } export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectManyObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ flatMapObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike | Iterable; /** * Promise A+ */ export interface Promise extends PromiseLike { } /** * Promise A+ */ export interface IPromise extends PromiseLike { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } export module internals { export var isEqual : (left: any, right: any) => boolean; } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export interface IScheduler { /** * Returns a scheduler that wraps the original scheduler, adding exception handling for scheduled actions. * @param {Function} handler Handler that's run if an exception is caught. The exception will be rethrown if the handler returns false. * @returns {Scheduler} Wrapper around the original scheduler, enforcing exception handling. */ catch(handler: Function): IScheduler; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; export interface Observer { makeSafe(disposable: IDisposable): Observer; } export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export interface CheckedObserver extends Observer { checkAccess(): void; } export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } export interface ObservableStatic { /** * Converts a Promise to an Observable sequence * @param {Promise} An ES6 Compliant promise. * @returns {Observable} An Observable sequence which wraps the existing promise success and failure. */ fromPromise(promise: Promise): Observable; } export interface Observable { /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise(promiseCtor?: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }): IPromise; /* * Converts an existing observable sequence to an ES6 Compatible Promise * @example * var promise = Rx.Observable.return(42).toPromise(RSVP.Promise); * * // With config * Rx.config.Promise = RSVP.Promise; * var promise = Rx.Observable.return(42).toPromise(); * @param {Function} [promiseCtor] The constructor of the promise. If not provided, it looks for it in Rx.config.Promise. * @returns {Promise} An ES6 compatible promise with the last value from the observable sequence. */ toPromise>(promiseCtor: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): TPromise; }): TPromise; } export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ concatMapObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and concats the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectConcatObserver(onNext: (value: T, i: number) => ObservableOrPromise, onError: (error: any) => ObservableOrPromise, onCompleted: () => ObservableOrPromise, thisArg?: any): Observable; } export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } export interface Observable { /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ selectManyObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; /** * Projects each notification of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * @param {Function} onNext A transform function to apply to each element; the second parameter of the function represents the index of the source element. * @param {Function} onError A transform function to apply when an error occurs in the source sequence. * @param {Function} onCompleted A transform function to apply when the end of the source sequence is reached. * @param {Any} [thisArg] An optional "this" to use to invoke each transform. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function corresponding to each notification in the input sequence. */ flatMapObserver(onNext: (value: T, index: number) => Observable, onError: (exception: any) => Observable, onCompleted: () => Observable, thisArg?: any): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case { /** * Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. * This operator allows for a fluent style of writing queries that use the same sequence multiple times. * * @param {Function} selector Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ let(selector: (source: Observable) => Observable): Observable; } export interface ObservableStatic { /** * Determines whether an observable collection contains values. * * @example * 1 - res = Rx.Observable.if(condition, obs1); * 2 - res = Rx.Observable.if(condition, obs1, obs2); * 3 - res = Rx.Observable.if(condition, obs1, scheduler); * @param {Function} condition The condition which determines if the thenSource or elseSource will be run. * @param {Observable} thenSource The observable sequence or Promise that will be run if the condition function returns true. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the condition function returns false. If this is not provided, it defaults to Rx.Observabe.Empty with the specified scheduler. * @returns {Observable} An observable sequence which is either the thenSource or elseSource. */ if(condition: () => boolean, thenSource: ObservableOrPromise, elseSourceOrScheduler?: ObservableOrPromise | IScheduler): Observable; } export interface ObservableStatic { /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; } export interface ObservableStatic { /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; } export interface Observable { /** * Repeats source as long as condition holds emulating a do while loop. * * @param {Function} condition The condition which determines if the source will be repeated. * @param {Observable} source The observable sequence that will be run if the condition function returns true. * @returns {Observable} An observable sequence which is repeated as long as the condition holds. */ doWhile(condition: () => boolean): Observable; } export interface ObservableStatic { /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => string, sources: { [key: string]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => number, sources: { [key: number]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; } export interface Observable { /** * Expands an observable sequence by recursively invoking selector. * * @param {Function} selector Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. * @param {Scheduler} [scheduler] Scheduler on which to perform the expansion. If not provided, this defaults to the current thread scheduler. * @returns {Observable} An observable sequence containing all the elements produced by the recursive expansion. */ expand(selector: (item: T) => Observable, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(sources: ObservableOrPromise[]): Observable; /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(...args: ObservableOrPromise[]): Observable; } export interface Observable { /** * Runs two observable sequences in parallel and combines their last elemenets. * * @param {Observable} second Second observable sequence. * @param {Function} resultSelector Result selector function to invoke with the last elements of both sequences. * @returns {Observable} An observable sequence with the result of calling the selector function with the last elements of both input sequences. */ forkJoin(second: ObservableOrPromise, resultSelector: (left: T, right: TSecond) => TResult): Observable; } export interface Observable { /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ manySelect(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ extend(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; } export interface Observable { /** * Performs a exclusive waiting for the first to finish before subscribing to another observable. * Observables that come in between subscriptions will be dropped on the floor. * @returns {Observable} A exclusive observable with only the results that happen when subscribed. */ switchFirst(): T; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } declare module "rx.experimental" { export = Rx; } RxJS-4.1.0/ts/rx.experimental.es6.d.ts000066400000000000000000001045471266736161100174270ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on the source sequence, without sharing subscriptions. * This operator allows for a fluent style of writing queries that use the same sequence multiple times. * * @param {Function} selector Selector function which can use the source sequence as many times as needed, without sharing subscriptions to the source sequence. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ let(selector: (source: Observable) => Observable): Observable; } export interface ObservableStatic { /** * Determines whether an observable collection contains values. * * @example * 1 - res = Rx.Observable.if(condition, obs1); * 2 - res = Rx.Observable.if(condition, obs1, obs2); * 3 - res = Rx.Observable.if(condition, obs1, scheduler); * @param {Function} condition The condition which determines if the thenSource or elseSource will be run. * @param {Observable} thenSource The observable sequence or Promise that will be run if the condition function returns true. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the condition function returns false. If this is not provided, it defaults to Rx.Observabe.Empty with the specified scheduler. * @returns {Observable} An observable sequence which is either the thenSource or elseSource. */ if(condition: () => boolean, thenSource: ObservableOrPromise, elseSourceOrScheduler?: ObservableOrPromise | IScheduler): Observable; } export interface ObservableStatic { /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; /** * Concatenates the observable sequences obtained by running the specified result selector for each element in source. * There is an alias for this method called 'forIn' for browsers (sources: T[], resultSelector: _Selector, thisArg?: any): Observable; } export interface ObservableStatic { /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; /** * Repeats source as long as condition holds emulating a while loop. * There is an alias for this method called 'whileDo' for browsers (condition: () => boolean, source: ObservableOrPromise): Observable; } export interface Observable { /** * Repeats source as long as condition holds emulating a do while loop. * * @param {Function} condition The condition which determines if the source will be repeated. * @param {Observable} source The observable sequence that will be run if the condition function returns true. * @returns {Observable} An observable sequence which is repeated as long as the condition holds. */ doWhile(condition: () => boolean): Observable; } export interface ObservableStatic { /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => string, sources: { [key: string]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; /** * Uses selector to determine which source in sources to use. * @param {Function} selector The function which extracts the value for to test in a case statement. * @param {Array} sources A object which has keys which correspond to the case statement labels. * @param {Observable} [elseSource] The observable sequence or Promise that will be run if the sources are not matched. If this is not provided, it defaults to Rx.Observabe.empty with the specified scheduler. * * @returns {Observable} An observable sequence which is determined by a case statement. */ case(selector: () => number, sources: { [key: number]: ObservableOrPromise; }, schedulerOrElseSource?: IScheduler | ObservableOrPromise): Observable; } export interface Observable { /** * Expands an observable sequence by recursively invoking selector. * * @param {Function} selector Selector function to invoke for each produced element, resulting in another sequence to which the selector will be invoked recursively again. * @param {Scheduler} [scheduler] Scheduler on which to perform the expansion. If not provided, this defaults to the current thread scheduler. * @returns {Observable} An observable sequence containing all the elements produced by the recursive expansion. */ expand(selector: (item: T) => Observable, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(sources: ObservableOrPromise[]): Observable; /** * Runs all observable sequences in parallel and collect their last elements. * * @example * 1 - res = Rx.Observable.forkJoin([obs1, obs2]); * 1 - res = Rx.Observable.forkJoin(obs1, obs2, ...); * @returns {Observable} An observable sequence with an array collecting the last elements of all the input sequences. */ forkJoin(...args: ObservableOrPromise[]): Observable; } export interface Observable { /** * Runs two observable sequences in parallel and combines their last elemenets. * * @param {Observable} second Second observable sequence. * @param {Function} resultSelector Result selector function to invoke with the last elements of both sequences. * @returns {Observable} An observable sequence with the result of calling the selector function with the last elements of both input sequences. */ forkJoin(second: ObservableOrPromise, resultSelector: (left: T, right: TSecond) => TResult): Observable; } export interface Observable { /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ manySelect(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; /** * Comonadic bind operator. * @param {Function} selector A transform function to apply to each element. * @param {Object} scheduler Scheduler used to execute the operation. If not specified, defaults to the ImmediateScheduler. * @returns {Observable} An observable sequence which results from the comonadic bind operation. */ extend(selector: _Selector, TResult>, scheduler?: IScheduler): Observable; } export interface Observable { /** * Performs a exclusive waiting for the first to finish before subscribing to another observable. * Observables that come in between subscriptions will be dropped on the floor. * @returns {Observable} A exclusive observable with only the results that happen when subscribed. */ switchFirst(): T; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ selectSwitchFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence which performs a exclusive waiting for the first to finish before subscribing to another observable. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time performs a exclusive waiting for the first to finish before subscribing to another observable. */ flatMapFirst(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectManyWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.flatMapWithMaxConcurrent(5, Rx.Observable.fromArray([1,2,3])); * @param selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMapWithMaxConcurrent(maxConcurrent: number, selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } } declare module "rx.experimental" { export = Rx; } RxJS-4.1.0/ts/rx.joinpatterns.d.ts000066400000000000000000000225441266736161100167520ustar00rootroot00000000000000declare module Rx { export class Plan { } export interface Pattern2 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern3; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2) => TR): Plan; } interface Pattern3 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern4; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3) => TR): Plan; } interface Pattern4 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern5; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4) => TR): Plan; } interface Pattern5 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern6; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TR): Plan; } interface Pattern6 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern7; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TR): Plan; } interface Pattern7 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern8; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TR): Plan; } interface Pattern8 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern9; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TR): Plan; } interface Pattern9 { /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TR): Plan; } export interface Observable { /** * Creates a pattern that matches when both observable sequences have an available value. * * @param right Observable sequence to match with the current sequence. * @return {Pattern} Pattern object that matches when both observable sequences have an available value. */ and(right: Observable): Pattern2; } export interface Observable { /** * Matches when the observable sequence has an available value and projects the value. * * @param {Function} selector Selector that will be invoked for values in the source sequence. * @returns {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T) => TR): Plan; } export interface ObservableStatic { /** * Joins together the results from several patterns. * * @param plans A series of plans (specified as an Array of as a series of arguments) created by use of the Then operator on patterns. * @returns {Observable} Observable sequence with the results form matching several patterns. */ when(plan: Plan): Observable; } } declare module "rx.joinpatterns" { export = Rx; } RxJS-4.1.0/ts/rx.joinpatterns.es6.d.ts000066400000000000000000000225441266736161100174460ustar00rootroot00000000000000declare module Rx { export class Plan { } export interface Pattern2 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern3; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2) => TR): Plan; } interface Pattern3 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern4; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3) => TR): Plan; } interface Pattern4 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern5; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4) => TR): Plan; } interface Pattern5 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern6; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TR): Plan; } interface Pattern6 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern7; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TR): Plan; } interface Pattern7 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern8; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TR): Plan; } interface Pattern8 { /** * Creates a pattern that matches the current plan matches and when the specified observable sequences has an available value. * @param other Observable sequence to match in addition to the current pattern. * @return {Pattern} Pattern object that matches when all observable sequences in the pattern have an available value. */ and(other: Observable): Pattern9; /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TR): Plan; } interface Pattern9 { /** * Matches when all observable sequences in the pattern (specified using a chain of and operators) have an available value and projects the values. * @param {Function} selector Selector that will be invoked with available values from the source sequences, in the same order of the sequences in the pattern. * @return {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TR): Plan; } export interface Observable { /** * Creates a pattern that matches when both observable sequences have an available value. * * @param right Observable sequence to match with the current sequence. * @return {Pattern} Pattern object that matches when both observable sequences have an available value. */ and(right: Observable): Pattern2; } export interface Observable { /** * Matches when the observable sequence has an available value and projects the value. * * @param {Function} selector Selector that will be invoked for values in the source sequence. * @returns {Plan} Plan that produces the projected values, to be fed (with other plans) to the when operator. */ thenDo(selector: (item1: T) => TR): Plan; } export interface ObservableStatic { /** * Joins together the results from several patterns. * * @param plans A series of plans (specified as an Array of as a series of arguments) created by use of the Then operator on patterns. * @returns {Observable} Observable sequence with the results form matching several patterns. */ when(plan: Plan): Observable; } } declare module "rx.joinpatterns" { export = Rx; } RxJS-4.1.0/ts/rx.lite.d.ts000066400000000000000000006427761266736161100152060ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike; /** * Promise A+ */ export interface Promise { then(onFulfilled: (value: T) => R|Promise, onRejected: (error: any) => Promise): Promise; then(onFulfilled: (value: T) => R|Promise, onRejected?: (error: any) => R): Promise; } /** * Promise A+ */ export interface IPromise extends Promise { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } export module internals { export var isEqual : (left: any, right: any) => boolean; } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausable(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausable(pauser?: Observable): PausableObservable; } export interface PausableObservable extends Observable { pause(): void; resume(): void; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, * and yields the values that were buffered while paused. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausableBuffered(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausableBuffered(pauser?: Observable): PausableObservable; } export interface Observable { /** * Attaches a controller to the observable sequence with the ability to queue. * @example * var source = Rx.Observable.interval(100).controlled(); * source.request(3); // Reads 3 values * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request * @param {Scheduler} scheduler determines how the requests will be scheduled * @returns {Observable} The observable sequence which only propagates values on request. */ controlled(enableQueue?: boolean, scheduler?: IScheduler): ControlledObservable; } export interface ControlledObservable extends Observable { request(numberOfItems?: number): IDisposable; } export interface Observable { /** * Pipes the existing Observable sequence into a Node.js Stream. * @param {Stream} dest The destination Node.js stream. * @returns {Stream} The destination stream. */ pipe(dest: TDest): TDest; // TODO: Add link to node.d.ts some where } export interface Observable { /** * Executes a transducer to transform the observable sequence * @param {Transducer} transducer A transducer to execute * @returns {Observable} An Observable sequence containing the results from the transducer. */ transduce(transducer: any): any; //TODO: Setup transducer } export interface AnonymousObservable extends Observable { } export interface AsyncSubject extends Subject { } interface AsyncSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AsyncSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AsyncSubject: AsyncSubjectStatic; export interface AnonymousSubject extends Subject { } interface AnonymousSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AnonymousSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AnonymousSubject: AnonymousSubjectStatic; export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } } declare module "rx" { export = Rx; } declare module "rx.lite" { export = Rx; } RxJS-4.1.0/ts/rx.lite.es6.d.ts000066400000000000000000006425171266736161100156730ustar00rootroot00000000000000declare module Rx { // Type alias for observables and promises export type ObservableOrPromise = IObservable | Observable | Promise; export type ArrayLike = Array | { length: number;[index: number]: T; }; // Type alias for arrays and array like objects export type ArrayOrIterable = ArrayLike | Iterable; /** * Promise A+ */ export interface Promise extends PromiseLike { } /** * Promise A+ */ export interface IPromise extends PromiseLike { } /** * Represents a push-style collection. */ export interface IObservable { } /** * Represents a push-style collection. */ export interface Observable extends IObservable { } export module internals { export interface EmptyError extends Error { message: string; } export interface EmptyErrorStatic { new (): EmptyError; } export interface ObjectDisposedError extends Error { message: string; } export interface ObjectDisposedErrorStatic { new (): ObjectDisposedError; } export interface ArgumentOutOfRangeError extends Error { message: string; } export interface ArgumentOutOfRangeErrorStatic { new (): ArgumentOutOfRangeError; } export interface NotSupportedError extends Error { message: string; } export interface NotSupportedErrorStatic { new (): NotSupportedError; } export interface NotImplementedError extends Error { message: string; } export interface NotImplementedErrorStatic { new (): NotImplementedError; } } export module helpers { export var notImplemented: () => internals.NotImplementedError; export var notSupported: () => internals.NotSupportedError; } export module internals { export var bindCallback: (func: Function, thisArg: any, argCount: number) => Function; } export module internals { export var isEqual : (left: any, right: any) => boolean; } export interface IDisposable { dispose(): void; } export interface Disposable extends IDisposable { /** Is this value disposed. */ isDisposed?: boolean; } interface DisposableStatic { /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ new (action: () => void): Disposable; /** * Creates a disposable object that invokes the specified action when disposed. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. * @return {Disposable} The disposable object that runs the given action upon disposal. */ create(action: () => void): Disposable; /** * Gets the disposable that does nothing when disposed. */ empty: IDisposable; /** * Validates whether the given object is a disposable * @param {Object} Object to test whether it has a dispose method * @returns {Boolean} true if a disposable object, else false. */ isDisposable(d: any): boolean; } /** * Provides a set of static methods for creating Disposables. * @param {Function} dispose Action to run during the first call to dispose. The action is guaranteed to be run at most once. */ export var Disposable: DisposableStatic; export module config { export var Promise: { new (resolver: (resolvePromise: (value: T) => void, rejectPromise: (reason: any) => void) => void): IPromise; }; } export module helpers { export var noop: () => void; export var notDefined: (value: any) => boolean; export var identity: (value: T) => T; export var defaultNow: () => number; export var defaultComparer: (left: any, right: any) => boolean; export var defaultSubComparer: (left: any, right: any) => number; export var defaultKeySerializer: (key: any) => string; export var defaultError: (err: any) => void; export var isPromise: (p: any) => boolean; export var asArray: (...args: T[]) => T[]; export var not: (value: any) => boolean; export var isFunction: (value: any) => boolean; } export type _Selector = (value: T, index: number, observable: Observable) => TResult; export type _ValueOrSelector = TResult | _Selector; export type _Predicate = _Selector; export type _Comparer = (value1: T, value2: T) => TResult; export type _Accumulator = (acc: TAcc, value: T) => TAcc; export module special { export type _FlatMapResultSelector = (value: T1, selectorValue: T2, index: number, selectorOther: number) => TResult; } export interface IObservable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface Observable { /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ subscribe(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onNext The function to invoke on each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnNext(onNext: (value: T) => void, thisArg?: any): IDisposable; /** * Subscribes to an exceptional condition in the sequence with an optional "this" argument. * @param {Function} onError The function to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnError(onError: (exception: any) => void, thisArg?: any): IDisposable; /** * Subscribes to the next value in the sequence with an optional "this" argument. * @param {Function} onCompleted The function to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Disposable} A disposable handling the subscriptions and unsubscriptions. */ subscribeOnCompleted(onCompleted: () => void, thisArg?: any): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(observer: IObserver): IDisposable; /** * Subscribes an o to the observable sequence. * @param {Mixed} [oOrOnNext] The object that is to receive notifications or an action to invoke for each element in the observable sequence. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. * @returns {Diposable} A disposable handling the subscriptions and unsubscriptions. */ forEach(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): IDisposable; } export interface ObservableStatic { /** * Determines whether the given object is an Observable * @param {Any} An object to determine whether it is an Observable * @returns {Boolean} true if an Observable, else false. */ isObservable(o: any): boolean; } export var Observable: ObservableStatic; export module internals { export var inherits: (child: any, parent: any) => void; export var addProperties: (obj: any, ...sources: any[]) => void; export var addRef: (xs: Observable, r: { getDisposable(): IDisposable; }) => Observable; } /** * Represents a group of disposable resources that are disposed together. * @constructor */ export interface CompositeDisposable extends Disposable { /** * Adds a disposable to the CompositeDisposable or disposes the disposable if the CompositeDisposable is disposed. * @param {Mixed} item Disposable to add. */ add(item: IDisposable): void; /** * Removes and disposes the first occurrence of a disposable from the CompositeDisposable. * @param {Mixed} item Disposable to remove. * @returns {Boolean} true if found; false otherwise. */ remove(item: IDisposable): void; } interface CompositeDisposableStatic { /** * Represents a group of disposable resources that are disposed together. * @constructor */ new (...disposables: Rx.IDisposable[]): CompositeDisposable; /** * Represents a group of disposable resources that are disposed together. * @constructor */ new(disposables: Rx.IDisposable[]): CompositeDisposable; } export var CompositeDisposable: CompositeDisposableStatic; export interface SingleAssignmentDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SingleAssignmentDisposableStatic { new() : SingleAssignmentDisposable; } export var SingleAssignmentDisposable : SingleAssignmentDisposableStatic; export interface SerialDisposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; getDisposable(): IDisposable; setDisposable(value: IDisposable): void; } interface SerialDisposableStatic { new() : SerialDisposable; } export var SerialDisposable : SerialDisposableStatic; /** * Represents a disposable resource that only disposes its underlying disposable resource when all dependent disposable objects have been disposed. */ export interface RefCountDisposable extends Disposable { /** Performs the task of cleaning up resources. */ dispose(): void; /** Is this value disposed. */ isDisposed: boolean; /** * Returns a dependent disposable that when disposed decreases the refcount on the underlying disposable. * @returns {Disposable} A dependent disposable contributing to the reference count that manages the underlying disposable's lifetime. */ getDisposable(): IDisposable; } interface RefCountDisposableStatic { /** * Initializes a new instance of the RefCountDisposable with the specified disposable. * @constructor * @param {Disposable} disposable Underlying disposable. */ new(disposable: IDisposable): RefCountDisposable; } export var RefCountDisposable : RefCountDisposableStatic; export interface IScheduler { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Schedules an action to be executed. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ schedule(state: TState, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; /** * Schedules an action to be executed after dueTime. * @param state State passed to the action to be executed. * @param {Function} action Action to be executed. * @param {Number} dueTime Relative time after which to execute the action. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleFuture(state: TState, dueTime: number | Date, action: (scheduler: IScheduler, state: TState) => IDisposable): IDisposable; } export interface SchedulerStatic { /** Gets the current time according to the local machine's system clock. */ now(): number; /** * Normalizes the specified TimeSpan value to a positive value. * @param {Number} timeSpan The time span value to normalize. * @returns {Number} The specified TimeSpan value if it is zero or positive; otherwise, 0 */ normalize(timeSpan: number): number; /** Determines whether the given object is a scheduler */ isScheduler(s: any): boolean; } /** Provides a set of static properties to access commonly used schedulers. */ export var Scheduler: SchedulerStatic; export module internals { export interface ScheduledItem { scheduler: IScheduler; state: TTime; action: (scheduler: IScheduler, state: any) => IDisposable; dueTime: TTime; comparer: (x: TTime, y: TTime) => number; disposable: SingleAssignmentDisposable; invoke(): void; compareTo(other: ScheduledItem): number; isCancelled(): boolean; invokeCore(): IDisposable; } interface ScheduledItemStatic { new (scheduler: IScheduler, state: any, action: (scheduler: IScheduler, state: any) => IDisposable, dueTime: TTime, comparer?: _Comparer):ScheduledItem; } export var ScheduledItem: ScheduledItemStatic } export interface IScheduler { /** * Schedules an action to be executed recursively. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in recursive invocation state. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursive(state: TState, action: (state: TState, action: (state: TState) => void) => void): IDisposable; /** * Schedules an action to be executed recursively after a specified relative due time. * @param {Mixed} state State passed to the action to be executed. * @param {Function} action Action to execute recursively. The last parameter passed to the action is used to trigger recursive scheduling of the action, passing in the recursive due time and invocation state. * @param {Number}dueTime Relative time after which to execute the action for the first time. * @returns {Disposable} The disposable object used to cancel the scheduled action (best effort). */ scheduleRecursiveFuture(state: TState, dueTime: TTime, action: (state: TState, action: (state: TState, dueTime: TTime) => void) => void): IDisposable; } export interface IScheduler { /** * Schedules a periodic piece of work by dynamically discovering the scheduler's capabilities. The periodic task will be scheduled using window.setInterval for the base implementation. * @param {Mixed} state Initial state passed to the action upon the first iteration. * @param {Number} period Period for running the work periodically. * @param {Function} action Action to be executed, potentially updating the state. * @returns {Disposable} The disposable object used to cancel the scheduled recurring action (best effort). */ schedulePeriodic(state: TState, period: number, action: (state: TState) => TState): IDisposable; } export interface SchedulerStatic { immediate: IScheduler; } export interface ICurrentThreadScheduler extends IScheduler { scheduleRequired(): boolean; } export interface SchedulerStatic { currentThread: ICurrentThreadScheduler; } export module internals { export interface SchedulePeriodicRecursive { start(): IDisposable; } interface SchedulePeriodicRecursiveStatic { new (scheduler: any, state: any, period: any, action: any) : SchedulePeriodicRecursive; } export var SchedulePeriodicRecursive: SchedulePeriodicRecursiveStatic; } export interface SchedulerStatic { default: IScheduler; async: IScheduler; } export module internals { // Priority Queue for Scheduling export interface PriorityQueue { length: number; isHigherPriority(left: number, right: number): boolean; percolate(index: number): void; heapify(index: number): void; peek(): ScheduledItem; removeAt(index: number): void; dequeue(): ScheduledItem; enqueue(item: ScheduledItem): void; remove(item: ScheduledItem): boolean; } interface PriorityQueueStatic { new (capacity: number) : PriorityQueue; count: number; } export var PriorityQueue : PriorityQueueStatic; } /** * Supports push-style iteration over an observable sequence. */ export interface IObserver { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } export interface ObserverStatic { /** * Creates an observer from the specified OnNext, along with optional OnError, and OnCompleted actions. * @param {Function} [onNext] Observer's OnNext action implementation. * @param {Function} [onError] Observer's OnError action implementation. * @param {Function} [onCompleted] Observer's OnCompleted action implementation. * @returns {Observer} The observer object implemented using the given actions. */ create(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observer; } /** * Supports push-style iteration over an observable sequence. */ export var Observer: ObserverStatic; /** * Represents a notification to an observer. */ export interface Notification { /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(observer: IObserver): void; /** * Invokes the delegate corresponding to the notification or the observer's method corresponding to the notification and returns the produced result. * * @memberOf Notification * @param {Any} observerOrOnNext Delegate to invoke for an OnNext notification or Observer to invoke the notification on.. * @param {Function} onError Delegate to invoke for an OnError notification. * @param {Function} onCompleted Delegate to invoke for an OnCompleted notification. * @returns {Any} Result produced by the observation. */ accept(onNext: (value: T) => TResult, onError: (exception: any) => TResult, onCompleted: () => TResult): TResult; /** * Returns an observable sequence with a single notification. * * @memberOf Notifications * @param {Scheduler} [scheduler] Scheduler to send out the notification calls on. * @returns {Observable} The observable sequence that surfaces the behavior of the notification upon subscription. */ toObservable(scheduler?: IScheduler): Observable; hasValue: boolean; equals(other: Notification): boolean; kind: string; value: T; error: any; } interface NotificationStatic { new (kind: any, value: any, exception: any, accept: any, acceptObservable: any, toString: any) : Notification; /** * Creates an object that represents an OnNext notification to an observer. * @param {Any} value The value contained in the notification. * @returns {Notification} The OnNext notification containing the value. */ createOnNext(value: T): Notification; /** * Creates an object that represents an OnError notification to an observer. * @param {Any} error The exception contained in the notification. * @returns {Notification} The OnError notification containing the exception. */ createOnError(exception: any): Notification; /** * Creates an object that represents an OnCompleted notification to an observer. * @returns {Notification} The OnCompleted notification. */ createOnCompleted(): Notification; } export var Notification : NotificationStatic; export module internals { /** * Abstract base class for implementations of the Observer class. * This base class enforces the grammar of observers where OnError and OnCompleted are terminal messages. */ export interface AbstractObserver extends Rx.IObserver, Rx.IDisposable { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; isStopped: boolean; /** * Disposes the observer, causing it to transition to the stopped state. */ dispose(): void; fail(e: any): boolean; // Must be implemented by other observers next(value: T): void; error(error: any): void; completed(): void; } interface AbstractObserverStatic { new (): AbstractObserver; } export var AbstractObserver: AbstractObserverStatic } /** * Class to create an Observer instance from delegate-based implementations of the on* methods. */ export interface AnonymousObserver extends Observer { /** * Notifies the observer of a new element in the sequence. * @param {Any} value Next element in the sequence. */ onNext(value: T): void; /** * Notifies the observer that an exception has occurred. * @param {Any} error The error that has occurred. */ onError(exception: any): void; /** * Notifies the observer of the end of the sequence. */ onCompleted(): void; } interface AnonymousObserverStatic { /** * Creates an observer from the specified OnNext, OnError, and OnCompleted actions. * @param {Any} onNext Observer's OnNext action implementation. * @param {Any} onError Observer's OnError action implementation. * @param {Any} onCompleted Observer's OnCompleted action implementation. */ new (onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): AnonymousObserver; } export var AnonymousObserver : AnonymousObserverStatic; export module internals { export interface ScheduledObserver extends Observer { ensureActive(): void; } } export interface Observable { /** * Creates an array from an observable sequence. * @returns {Observable} An observable sequence containing a single element with a list containing all the elements of the source sequence. */ toArray(): Observable; } export interface ObservableStatic { /** * Creates an observable sequence from a specified subscribe method implementation. * @example * var res = Rx.Observable.create(function (observer) { return function () { } ); * var res = Rx.Observable.create(function (observer) { return Rx.Disposable.empty; } ); * var res = Rx.Observable.create(function (observer) { } ); * @param {Function} subscribe Implementation of the resulting observable sequence's subscribe method, returning a function that will be wrapped in a Disposable. * @returns {Observable} The observable sequence with the specified implementation for the Subscribe method. */ create(subscribe: (observer: Observer) => IDisposable | Function | void): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that invokes the specified factory function whenever a new observer subscribes. * * @example * var res = Rx.Observable.defer(function () { return Rx.Observable.fromArray([1,2,3]); }); * @param {Function} observableFactory Observable factory function to invoke for each observer that subscribes to the resulting sequence or Promise. * @returns {Observable} An observable sequence whose observers trigger an invocation of the given observable factory function. */ defer(observableFactory: () => ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Returns an empty observable sequence, using the specified scheduler to send out the single OnCompleted message. * * @example * var res = Rx.Observable.empty(); * var res = Rx.Observable.empty(Rx.Scheduler.timeout); * @param {Scheduler} [scheduler] Scheduler to send the termination call on. * @returns {Observable} An observable sequence with no elements. */ empty(scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable): Observable; /** * This method creates a new Observable sequence from an array-like or iterable object. * @param {Any} arrayLike An array-like or iterable object to convert to an Observable sequence. * @param {Function} [mapFn] Map function to call on every element of the array. * @param {Any} [thisArg] The context to use calling the mapFn if provided. * @param {Scheduler} [scheduler] Optional scheduler to use for scheduling. If not provided, defaults to Scheduler.currentThread. */ from(array: ArrayOrIterable, mapFn: (value: T, index: number) => TResult, thisArg?: any, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Converts an array to an observable sequence, using an optional scheduler to enumerate the array. * @deprecated use Observable.from or Observable.of * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} The observable sequence whose elements are pulled from the given enumerable sequence. */ fromArray(array: ArrayLike, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns a non-terminating observable sequence, which can be used to denote an infinite duration (e.g. when using reactive joins). * @returns {Observable} An observable sequence whose observers will never get called. */ never(): Observable; } export interface ObservableStatic { /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ of(...values: T[]): Observable; /** * This method creates a new Observable instance with a variable number of arguments, regardless of number or type of the arguments. * @param {Scheduler} scheduler A scheduler to use for scheduling the arguments. * @returns {Observable} The observable sequence whose elements are pulled from the given arguments. */ ofWithScheduler(scheduler?: IScheduler, ...values: T[]): Observable; } export interface ObservableStatic { /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: string]: T }, scheduler?: IScheduler): Observable<[string, T]>; /** * Convert an object into an observable sequence of [key, value] pairs. * @param {Object} obj The object to inspect. * @param {Scheduler} [scheduler] Scheduler to run the enumeration of the input sequence on. * @returns {Observable} An observable sequence of [key, value] pairs from the object. */ pairs(obj: { [key: number]: T }, scheduler?: IScheduler): Observable<[number, T]>; } export interface ObservableStatic { /** * Generates an observable sequence of integral numbers within a specified range, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.range(0, 10); * var res = Rx.Observable.range(0, 10, Rx.Scheduler.timeout); * @param {Number} start The value of the first integer in the sequence. * @param {Number} count The number of sequential integers to generate. * @param {Scheduler} [scheduler] Scheduler to run the generator loop on. If not specified, defaults to Scheduler.currentThread. * @returns {Observable} An observable sequence that contains a range of sequential integral numbers. */ range(start: number, count: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence that repeats the given element the specified number of times, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.repeat(42); * var res = Rx.Observable.repeat(42, 4); * 3 - res = Rx.Observable.repeat(42, 4, Rx.Scheduler.timeout); * 4 - res = Rx.Observable.repeat(42, null, Rx.Scheduler.timeout); * @param {Mixed} value Element to repeat. * @param {Number} repeatCount [Optiona] Number of times to repeat the element. If not specified, repeats indefinitely. * @param {Scheduler} scheduler Scheduler to run the producer loop on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} An observable sequence that repeats the given element the specified number of times. */ repeat(value: T, repeatCount?: number | void, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that contains a single element, using the specified scheduler to send out observer messages. * There is an alias called 'just' or browsers (value: T, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: Error, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that terminates with an exception, using the specified scheduler to send out the single onError message. * @param {Mixed} error An object used for the sequence's termination. * @param {Scheduler} scheduler Scheduler to send the exceptional termination call on. If not specified, defaults to Scheduler.immediate. * @returns {Observable} The observable sequence that terminates exceptionally with the specified exception object. */ throw(exception: any, scheduler?: IScheduler): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(handler: (exception: any) => ObservableOrPromise): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Mixed} handlerOrSecond Exception handler function that returns an observable sequence given the error that occurred in the first sequence, or a second observable sequence used to produce results when an error occurred in the first sequence. * @returns {Observable} An observable sequence containing the first sequence's elements, followed by the elements of the handler sequence in case an exception occurred. */ catch(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated by an exception with the next observable sequence. * @param {Array | Arguments} args Arguments or an array to use as the next sequence if an error occurs. * @returns {Observable} An observable sequence containing elements from consecutive source sequences until a source sequence terminates successfully. */ catch(...sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * This can be in the form of an argument list of observables or an array. * * @example * 1 - obs = observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, eventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(first: ObservableOrPromise, second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever any of the observable sequences or Promises produces an element. * * @example * 1 - obs = Rx.Observable.combineLatest(obs1, obs2, obs3, function (o1, o2, o3) { return o1 + o2 + o3; }); * 2 - obs = Rx.Observable.combineLatest([obs1, obs2, obs3], function (o1, o2, o3) { return o1 + o2 + o3; }); * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ combineLatest(souces: ObservableOrPromise[], resultSelector: (...otherValues: TOther[]) => TResult): Observable; } export interface Observable { /** * Concatenates all the observable sequences. This takes in either an array or variable arguments to concatenate. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(...sources: ObservableOrPromise[]): Observable; /** * Concatenates all the observable sequences. * @param {Array | Arguments} args Arguments or an array to concat to the observable sequence. * @returns {Observable} An observable sequence that contains the elements of each given sequence, in sequential order. */ concat(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Concatenates an observable sequence of observable sequences. * @returns {Observable} An observable sequence that contains the elements of each observed inner sequence, in sequential order. */ concatAll(): T; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(maxConcurrent: number): T; /** * Merges an observable sequence of observable sequences into an observable sequence, limiting the number of concurrent subscriptions to inner sequences. * Or merges two observable sequences into a single observable sequence. * * @example * 1 - merged = sources.merge(1); * 2 - merged = source.merge(otherSource); * @param {Mixed} [maxConcurrentOrOther] Maximum number of inner observable sequences being subscribed to concurrently or the second observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ merge(other: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, ...sources: ObservableOrPromise[]): Observable; /** * Merges all the observable sequences into a single observable sequence. * The scheduler is optional and if not specified, the immediate scheduler is used. * @returns {Observable} The observable sequence that merges the elements of the observable sequences. */ merge(scheduler: IScheduler, sources: ObservableOrPromise[]): Observable; } export interface ObservableStatic { /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(...sources: ObservableOrPromise[]): Observable; /** * Flattens an Observable that emits Observables into one Observable, in a way that allows an Observer to * receive all successfully emitted items from all of the source Observables without being interrupted by * an error notification from one of them. * * This behaves like Observable.prototype.mergeAll except that if any of the merged Observables notify of an * error via the Observer's onError, mergeDelayError will refrain from propagating that * error notification until all of the merged Observables have finished emitting items. * @param {Array | Arguments} args Arguments or an array to merge. * @returns {Observable} an Observable that emits all of the items emitted by the Observables emitted by the Observable */ mergeDelayError(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Merges an observable sequence of observable sequences into an observable sequence. * @returns {Observable} The observable sequence that merges the elements of the inner sequences. */ mergeAll(): T; } export interface Observable { /** * Returns the values from the source observable sequence only after the other observable sequence produces a value. * @param {Observable | Promise} other The observable sequence or Promise that triggers propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence starting from the point the other sequence triggered propagation. */ skipUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switch(): T; /** * Transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @returns {Observable} The observable sequence that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ switchLatest(): T; } export interface Observable { /** * Returns the values from the source observable sequence until the other observable sequence produces a value. * @param {Observable | Promise} other Observable sequence or Promise that terminates propagation of elements of the source sequence. * @returns {Observable} An observable sequence containing the elements of the source sequence up to the point the other sequence interrupted further propagation. */ takeUntil(other: ObservableOrPromise): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, resultSelector: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function only when the (first) source observable sequence produces an element. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ withLatestFrom(souces: ObservableOrPromise[], resultSelector: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(sources: ObservableOrPromise[], resultSelector?: (item1: T1, ...right: T2[]) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, ObservableOrPromise: Observable, resultSelector?: (item1: T1, item2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: Observable, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences have produced an element at a corresponding index. * @param arguments Observable sources. * @param {Function} resultSelector Function to invoke for each series of elements at corresponding indexes in the sources. * @returns {Observable} An observable sequence containing the result of combining elements of the sources using the specified result selector function. */ zip(source1: ObservableOrPromise, source2: ObservableOrPromise, source3: ObservableOrPromise, source4: ObservableOrPromise, source5: ObservableOrPromise, source6: ObservableOrPromise, source7: ObservableOrPromise, source8: ObservableOrPromise, source9: ObservableOrPromise, resultSelector?: (item1: T1, item2: T2, item3: T3, item4: T4, item5: T5, item6: T6, item7: T7, item8: T8, item9: T9) => TResult): Observable; } export interface Observable { /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, resultSelector?: (v1: T, v2: T2) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(second: ObservableOrPromise, third: ObservableOrPromise, fourth: ObservableOrPromise, fifth: ObservableOrPromise, sixth: ObservableOrPromise, seventh: ObservableOrPromise, eighth: ObservableOrPromise, ninth: ObservableOrPromise, resultSelector?: (v1: T, v2: T2, v3: T3, v4: T4, v5: T5, v6: T6, v7: T7, v8: T8, v9: T9) => TResult): Observable; /** * Merges the specified observable sequences into one observable sequence by using the selector function whenever all of the observable sequences or an array have produced an element at a corresponding index. * The last element in the arguments must be a function to invoke for each series of elements at corresponding indexes in the args. * @returns {Observable} An observable sequence containing the result of combining elements of the args using the specified result selector function. */ zip(souces: ObservableOrPromise[], resultSelector?: (firstValue: T, ...otherValues: TOther[]) => TResult): Observable; } export interface ObservableStatic { /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(...sources: Observable[]): Observable; /** * Merges the specified observable sequences into one observable sequence by emitting a list with the elements of the observable sequences at corresponding indexes. * @param arguments Observable sources. * @returns {Observable} An observable sequence containing lists of elements at corresponding indexes. */ zipIterable(sources: Observable[]): Observable; } export interface Observable { /** * Hides the identity of an observable sequence. * @returns {Observable} An observable sequence that hides the identity of the source sequence. */ asObservable(): Observable; } export interface Observable { /** * Dematerializes the explicit notification values of an observable sequence as implicit notifications. * @returns {Observable} An observable sequence exhibiting the behavior corresponding to the source sequence's notification values. */ dematerialize(): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct contiguous elements according to the keySelector and the comparer. * * var obs = observable.distinctUntilChanged(); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }); * var obs = observable.distinctUntilChanged(function (x) { return x.id; }, function (x, y) { return x === y; }); * * @param {Function} [keySelector] A function to compute the comparison key for each element. If not provided, it projects the value. * @param {Function} [comparer] Equality comparer for computed key values. If not provided, defaults to an equality comparer function. * @returns {Observable} An observable sequence only containing the distinct contiguous elements, based on a computed key value, from the source sequence. */ distinctUntilChanged(keySelector?: (value: T) => TValue, comparer?: _Comparer): Observable; } export interface Observable { /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(observer: Observer): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ do(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence and invokes an action upon graceful or exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function | Observer} observerOrOnNext Action to invoke for each element in the observable sequence or an observer. * @param {Function} [onError] Action to invoke upon exceptional termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @param {Function} [onCompleted] Action to invoke upon graceful termination of the observable sequence. Used if only the observerOrOnNext parameter is also a function. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tap(onNext?: (value: T) => void, onError?: (exception: any) => void, onCompleted?: () => void): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ doOnCompleted(onCompleted: () => void, thisArg?: any): Observable; /** * Invokes an action for each element in the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onNext Action to invoke for each element in the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnNext(onNext: (value: T) => void, thisArg?: any): Observable; /** * Invokes an action upon exceptional termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onError Action to invoke upon exceptional termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnError(onError: (exception: any) => void, thisArg?: any): Observable; /** * Invokes an action upon graceful termination of the observable sequence. * This method can be used for debugging, logging, etc. of query behavior by intercepting the message stream to run arbitrary actions for messages on the pipeline. * @param {Function} onCompleted Action to invoke upon graceful termination of the observable sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} The source sequence with the side-effecting behavior applied. */ tapOnCompleted(onCompleted: () => void, thisArg?: any): Observable; } export interface Observable { /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ finally(action: () => void): Observable; /** * Invokes a specified action after the source observable sequence terminates gracefully or exceptionally. * @param {Function} finallyAction Action to invoke after the source observable sequence terminates. * @returns {Observable} Source sequence with the action-invoking termination behavior applied. */ ensure(action: () => void): Observable; } export interface Observable { /** * Ignores all elements in an observable sequence leaving only the termination messages. * @returns {Observable} An empty observable sequence that signals termination, successful or exceptional, of the source sequence. */ ignoreElements(): Observable; } export interface Observable { /** * Materializes the implicit notifications of an observable sequence as explicit notification values. * @returns {Observable} An observable sequence containing the materialized notification values from the source sequence. */ materialize(): Observable; } export interface Observable { /** * Repeats the observable sequence a specified number of times. If the repeat count is not specified, the sequence repeats indefinitely. * @param {Number} [repeatCount] Number of times to repeat the sequence. If not provided, repeats the sequence indefinitely. * @returns {Observable} The observable sequence producing the elements of the given sequence repeatedly. */ repeat(repeatCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence the specified number of times or until it successfully terminates. If the retry count is not specified, it retries indefinitely. * Note if you encounter an error and want it to retry once, then you must use .retry(2); * * @example * var res = retried = retry.repeat(); * var res = retried = retry.repeat(2); * @param {Number} [retryCount] Number of times to retry the sequence. If not provided, retry the sequence indefinitely. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retry(retryCount?: number): Observable; } export interface Observable { /** * Repeats the source observable sequence upon error each time the notifier emits or until it successfully terminates. * if the notifier completes, the observable sequence completes. * * @example * var timer = Observable.timer(500); * var source = observable.retryWhen(timer); * @param {Observable} [notifier] An observable that triggers the retries or completes the observable with onNext or onCompleted respectively. * @returns {Observable} An observable sequence producing the elements of the given sequence repeatedly until it terminates successfully. */ retryWhen(notifier: (errors: Observable) => Observable): Observable; } export interface Observable { /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: TAcc): Observable; /** * Applies an accumulator function over an observable sequence and returns each intermediate result. The optional seed value is used as the initial accumulator value. * For aggregation behavior with no intermediate results, see Observable.aggregate. * @example * var res = source.scan(function (acc, x) { return acc + x; }); * var res = source.scan(function (acc, x) { return acc + x; }, 0); * @param {Function} accumulator An accumulator function to be invoked on each element. * @param {Mixed} [seed] The initial accumulator value. * @returns {Observable} An observable sequence containing the accumulated values. */ scan(accumulator: _Accumulator, seed?: T): Observable; } export interface Observable { /** * Bypasses a specified number of elements at the end of an observable sequence. * @description * This operator accumulates a queue with a length enough to store the first `count` elements. As more elements are * received, elements are taken from the front of the queue and produced on the result sequence. This causes elements to be delayed. * @param count Number of elements to bypass at the end of the source sequence. * @returns {Observable} An observable sequence containing the source sequence elements except for the bypassed ones at the end. */ skipLast(count: number): Observable; } export interface Observable { /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(...values: T[]): Observable; /** * Prepends a sequence of values to an observable sequence with an optional scheduler and an argument list of values to prepend. * @example * var res = source.startWith(1, 2, 3); * var res = source.startWith(Rx.Scheduler.timeout, 1, 2, 3); * @param {Arguments} args The specified values to prepend to the observable sequence * @returns {Observable} The source sequence prepended with the specified values. */ startWith(scheduler: IScheduler, ...values: T[]): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the end of an observable sequence. * @description * This operator accumulates a buffer with a length enough to store elements count elements. Upon completion of * the source sequence, this buffer is drained on the result sequence. This causes the elements to be delayed. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing the specified number of elements from the end of the source sequence. */ takeLast(count: number): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ concatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.concatMap(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.concatMap(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the * source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectConcat(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ select(selector: _Selector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new form by incorporating the element's index. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source. */ map(selector: _Selector, thisArg?: any): Observable; } export interface Observable { /** * Retrieves the value of a specified nested property from all elements in * the Observable sequence. * @param {Arguments} arguments The nested properties to pluck. * @returns {Observable} Returns a new Observable sequence of property values. */ pluck(prop: string): Observable; } export interface Observable { /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ flatMap(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * One of the Following: * Projects each element of an observable sequence to an observable sequence and merges the resulting observable sequences into one observable sequence. * * @example * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }); * Or: * Projects each element of an observable sequence to an observable sequence, invokes the result selector for the source element and each of the corresponding inner sequence's elements, and merges the results into one observable sequence. * * var res = source.selectMany(function (x) { return Rx.Observable.range(0, x); }, function (x, y) { return x + y; }); * Or: * Projects each element of the source observable sequence to the other observable sequence and merges the resulting observable sequences into one observable sequence. * * var res = source.selectMany(Rx.Observable.fromArray([1,2,3])); * @param {Function} selector A transform function to apply to each element or an observable sequence to project each element from the source sequence onto which could be either an observable or Promise. * @param {Function} [resultSelector] A transform function to apply to each element of the intermediate sequence. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the one-to-many transform function collectionSelector on each element of the input sequence and then mapping each of those sequence elements and their corresponding source element to a result element. */ selectMany(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ selectSwitch(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; /** * Projects each element of an observable sequence into a new sequence of observable sequences by incorporating the element's index and then * transforms an observable sequence of observable sequences into an observable sequence producing values only from the most recent observable sequence. * @param {Function} selector A transform function to apply to each source element; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence whose elements are the result of invoking the transform function on each element of source producing an Observable of Observable sequences * and that at any point in time produces the elements of the most recent inner observable sequence that has been received. */ flatMapLatest(selector: _ValueOrSelector>, resultSelector: special._FlatMapResultSelector, thisArg?: any): Observable; } export interface Observable { /** * Bypasses a specified number of elements in an observable sequence and then returns the remaining elements. * @param {Number} count The number of elements to skip before returning the remaining elements. * @returns {Observable} An observable sequence that contains the elements that occur after the specified index in the input sequence. */ skip(count: number): Observable; } export interface Observable { /** * Bypasses elements in an observable sequence as long as a specified condition is true and then returns the remaining elements. * The element's index is used in the logic of the predicate function. * * var res = source.skipWhile(function (value) { return value < 10; }); * var res = source.skipWhile(function (value, index) { return value < 10 || index < 10; }); * @param {Function} predicate A function to test each element for a condition; the second parameter of the function represents the index of the source element. * @param {Any} [thisArg] Object to use as this when executing callback. * @returns {Observable} An observable sequence that contains the elements from the input sequence starting at the first element in the linear series that does not pass the test specified by predicate. */ skipWhile(predicate: _Predicate, thisArg?: any): Observable; } export interface Observable { /** * Returns a specified number of contiguous elements from the start of an observable sequence, using the specified scheduler for the edge case of take(0). * * var res = source.take(5); * var res = source.take(0, Rx.Scheduler.timeout); * @param {Number} count The number of elements to return. * @param {Scheduler} [scheduler] Scheduler used to produce an OnCompleted message in case | (() => ISubject)): ConnectableObservable; /** * Multicasts the source sequence notifications through an instantiated subject into all uses of the sequence within a selector function. Each * subscription to the resulting sequence causes a separate multicast invocation, exposing the sequence resulting from the selector function's * invocation. For specializations with fixed subject types, see Publish, PublishLast, and Replay. * * @example * 1 - res = source.multicast(observable); * 2 - res = source.multicast(function () { return new Subject(); }, function (x) { return x; }); * * @param {Function|Subject} subjectOrSubjectSelector * Factory function to create an intermediate subject through which the source sequence's elements will be multicast to the selector function. * Or: * Subject to push source elements into. * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence subject to the policies enforced by the created subject. Specified only if (subjectSelector: ISubject | (() => ISubject), selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of Multicast using a regular Subject. * * @example * var resres = source.publish(); * var res = source.publish(function (x) { return x; }); * * @param {Function} [selector] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all notifications of the source from the time of the subscription on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publish(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. * This operator is a specialization of publish which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ share(): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence containing only the last notification. * This operator is a specialization of Multicast using a AsyncSubject. * * @example * var res = source.publishLast(); * var res = source.publishLast(function (x) { return x; }); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will only receive the last notification of the source. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishLast(selector: (source: ConnectableObservable) => Observable): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(initialValue: T): ConnectableObservable; /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence and starts with initialValue. * This operator is a specialization of Multicast using a BehaviorSubject. * * @example * var res = source.publishValue(42); * var res = source.publishValue(function (x) { return x.select(function (y) { return y * y; }) }, 42); * * @param {Function} [selector] Optional selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive immediately receive the initial value, followed by all notifications of the source from the time of the subscription on. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ publishValue(selector: (source: ConnectableObservable) => Observable, initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence and starts with an initialValue. * This operator is a specialization of publishValue which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * @param {Mixed} initialValue Initial value received by observers upon subscription. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareValue(initialValue: T): Observable; } export interface Observable { /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector?: void, bufferSize?: number, window?: number, scheduler?: IScheduler): ConnectableObservable; // hack to catch first omitted parameter /** * Returns an observable sequence that is the result of invoking the selector on a connectable observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of Multicast using a ReplaySubject. * * @example * var res = source.replay(null, 3); * var res = source.replay(null, 3, 500); * var res = source.replay(null, 3, 500, scheduler); * var res = source.replay(function (x) { return x.take(6).repeat(); }, 3, 500, scheduler); * * @param selector [Optional] Selector function which can use the multicasted source sequence as many times as needed, without causing multiple subscriptions to the source sequence. Subscribers to the given source will receive all the notifications of the source subject to the specified replay buffer trimming policy. * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param windowSize [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence within a selector function. */ replay(selector: (source: ConnectableObservable) => Observable, bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence replaying notifications subject to a maximum time length for the replay buffer. * This operator is a specialization of replay which creates a subscription when the number of observers goes from zero to one, then shares that subscription with all subsequent observers until the number of observers returns to zero, at which point the subscription is disposed. * * @example * var res = source.shareReplay(3); * var res = source.shareReplay(3, 500); * var res = source.shareReplay(3, 500, scheduler); * * @param bufferSize [Optional] Maximum element count of the replay buffer. * @param window [Optional] Maximum time length of the replay buffer. * @param scheduler [Optional] Scheduler where connected observers within the selector function will be invoked on. * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source sequence. */ shareReplay(bufferSize?: number, window?: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausable(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausable(pauser?: Observable): PausableObservable; } export interface PausableObservable extends Observable { pause(): void; resume(): void; } export interface Observable { /** * Pauses the underlying observable sequence based upon the observable sequence which yields true/false, * and yields the values that were buffered while paused. * @example * var pauser = new Rx.Subject(); * var source = Rx.Observable.interval(100).pausableBuffered(pauser); * @param {Observable} pauser The observable sequence used to pause the underlying sequence. * @returns {Observable} The observable sequence which is paused based upon the pauser. */ pausableBuffered(pauser?: Observable): PausableObservable; } export interface Observable { /** * Attaches a controller to the observable sequence with the ability to queue. * @example * var source = Rx.Observable.interval(100).controlled(); * source.request(3); // Reads 3 values * @param {bool} enableQueue truthy value to determine if values should be queued pending the next request * @param {Scheduler} scheduler determines how the requests will be scheduled * @returns {Observable} The observable sequence which only propagates values on request. */ controlled(enableQueue?: boolean, scheduler?: IScheduler): ControlledObservable; } export interface ControlledObservable extends Observable { request(numberOfItems?: number): IDisposable; } export interface Observable { /** * Pipes the existing Observable sequence into a Node.js Stream. * @param {Stream} dest The destination Node.js stream. * @returns {Stream} The destination stream. */ pipe(dest: TDest): TDest; // TODO: Add link to node.d.ts some where } export interface Observable { /** * Executes a transducer to transform the observable sequence * @param {Transducer} transducer A transducer to execute * @returns {Observable} An Observable sequence containing the results from the transducer. */ transduce(transducer: any): any; //TODO: Setup transducer } export interface AnonymousObservable extends Observable { } export interface AsyncSubject extends Subject { } interface AsyncSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AsyncSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AsyncSubject: AsyncSubjectStatic; export interface AnonymousSubject extends Subject { } interface AnonymousSubjectStatic { /** * Creates a subject that can only receive one value and that value is cached for all future observations. * @constructor */ new (): AnonymousSubject; } /** * Represents the result of an asynchronous operation. * The last value before the OnCompleted notification, or the error received through OnError, is sent to all subscribed observers. */ export var AnonymousSubject: AnonymousSubjectStatic; export interface BehaviorSubject extends Subject { /** * Gets the current value or throws an exception. * Value is frozen after onCompleted is called. * After onError is called always throws the specified exception. * An exception is always thrown after dispose is called. * @returns {Mixed} The initial value passed to the constructor until onNext is called; after which, the last value passed to onNext. */ getValue(): T; } interface BehaviorSubjectStatic { /** * Initializes a new instance of the BehaviorSubject class which creates a subject that caches its last value and starts with the specified value. * @param {Mixed} value Initial value sent to observers when no other value has been received by the subject yet. */ new (initialValue: T): BehaviorSubject; } /** * Represents a value that changes over time. * Observers can subscribe to the subject to receive the last (or initial) value and all subsequent notifications. */ export var BehaviorSubject: BehaviorSubjectStatic; export interface ReplaySubject extends Subject { } interface ReplaySubjectStatic { /** * Initializes a new instance of the ReplaySubject class with the specified buffer size, window size and scheduler. * @param {Number} [bufferSize] Maximum element count of the replay buffer. * @param {Number} [windowSize] Maximum time length of the replay buffer. * @param {Scheduler} [scheduler] Scheduler the observers are invoked on. */ new (bufferSize?: number, window?: number, scheduler?: IScheduler): ReplaySubject; } /** * Represents an object that is both an observable sequence as well as an observer. * Each notification is broadcasted to all subscribed and future observers, subject to buffer trimming policies. */ export var ReplaySubject: ReplaySubjectStatic; /** * Used to pause and resume streams. */ export interface Pauser { /** * Pauses the underlying sequence. */ pause(): void; /** * Resumes the underlying sequence. */ resume(): void; } } declare module "rx" { export = Rx; } declare module "rx.lite" { export = Rx; } RxJS-4.1.0/ts/rx.lite.extras.d.ts000066400000000000000000000276231266736161100164770ustar00rootroot00000000000000declare module Rx { export interface Observer { /** * Creates a notification callback from an observer. * @returns The action that forwards its input notification to the underlying observer. */ toNotifier(): (notification: Notification) => void; /** * Hides the identity of an observer. * @returns An observer that hides the identity of the specified observer. */ asObserver(): Observer; /** * Checks access to the observer for grammar violations. This includes checking for multiple OnError or OnCompleted calls, as well as reentrancy in any of the observer methods. * If a violation is detected, an Error is thrown from the offending observer method call. * @returns An observer that checks callbacks invocations against the observer grammar and, if the checks pass, forwards those to the specified observer. */ checked(): CheckedObserver; /** * Schedules the invocation of observer methods on the given scheduler. * @param {Scheduler} scheduler Scheduler to schedule observer messages on. * @returns {Observer} Observer whose messages are scheduled on the given scheduler. */ notifyOn(scheduler: IScheduler): Observer; } export interface ObserverStatic { /** * Creates an observer from a notification callback. * * @static * @memberOf Observer * @param {Function} handler Action that handles a notification. * @returns The observer object that invokes the specified handler using a notification corresponding to each message it receives. */ fromNotifier(handler: (notification: Notification, thisArg?: any) => void): Observer; } export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } } declare module "rx.lite.extras" { export = Rx; } RxJS-4.1.0/ts/rx.lite.extras.es6.d.ts000066400000000000000000000276231266736161100171730ustar00rootroot00000000000000declare module Rx { export interface Observer { /** * Creates a notification callback from an observer. * @returns The action that forwards its input notification to the underlying observer. */ toNotifier(): (notification: Notification) => void; /** * Hides the identity of an observer. * @returns An observer that hides the identity of the specified observer. */ asObserver(): Observer; /** * Checks access to the observer for grammar violations. This includes checking for multiple OnError or OnCompleted calls, as well as reentrancy in any of the observer methods. * If a violation is detected, an Error is thrown from the offending observer method call. * @returns An observer that checks callbacks invocations against the observer grammar and, if the checks pass, forwards those to the specified observer. */ checked(): CheckedObserver; /** * Schedules the invocation of observer methods on the given scheduler. * @param {Scheduler} scheduler Scheduler to schedule observer messages on. * @returns {Observer} Observer whose messages are scheduled on the given scheduler. */ notifyOn(scheduler: IScheduler): Observer; } export interface ObserverStatic { /** * Creates an observer from a notification callback. * * @static * @memberOf Observer * @param {Function} handler Action that handles a notification. * @returns The observer object that invokes the specified handler using a notification corresponding to each message it receives. */ fromNotifier(handler: (notification: Notification, thisArg?: any) => void): Observer; } export interface Observable { /** * Wraps the source sequence in order to run its observer callbacks on the specified scheduler. * * This only invokes observer callbacks on a scheduler. In case the subscription and/or unsubscription actions have side-effects * that require to be run on a scheduler, use subscribeOn. * * @param {Scheduler} scheduler Scheduler to notify observers on. * @returns {Observable} The source sequence whose observations happen on the specified scheduler. */ observeOn(scheduler: IScheduler): Observable; } export interface Observable { /** * Wraps the source sequence in order to run its subscription and unsubscription logic on the specified scheduler. This operation is not commonly used; * see the remarks section for more information on the distinction between subscribeOn and observeOn. * This only performs the side-effects of subscription and unsubscription on the specified scheduler. In order to invoke observer * callbacks on a scheduler, use observeOn. * @param {Scheduler} scheduler Scheduler to perform subscription and unsubscription actions on. * @returns {Observable} The source sequence whose subscriptions and unsubscriptions happen on the specified scheduler. */ subscribeOn(scheduler: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by running a state-driven loop producing the sequence's elements, using the specified scheduler to send out observer messages. * * @example * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }); * var res = Rx.Observable.generate(0, function (x) { return x < 10; }, function (x) { return x + 1; }, function (x) { return x; }, Rx.Scheduler.timeout); * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not provided, defaults to Scheduler.currentThread. * @returns {Observable} The generated sequence. */ generate(initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Constructs an observable sequence that depends on a resource object, whose lifetime is tied to the resulting observable sequence's lifetime. * @param {Function} resourceFactory Factory function to obtain a resource object. * @param {Function} observableFactory Factory function to obtain an observable sequence that depends on the obtained resource. * @returns {Observable} An observable sequence whose lifetime controls the lifetime of the dependent resource object. */ using(resourceFactory: () => TResource, observableFactory: (resource: TResource) => Observable): Observable; } export interface Observable { /** * Propagates the observable sequence or Promise that reacts first. * @param {Observable} rightSource Second observable sequence or Promise. * @returns {Observable} {Observable} An observable sequence that surfaces either of the given sequences, whichever reacted first. */ amb(observable: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(observables: ObservableOrPromise[]): Observable; /** * Propagates the observable sequence or Promise that reacts first. * @returns {Observable} An observable sequence that surfaces any of the given sequences, whichever reacted first. */ amb(...observables: ObservableOrPromise[]): Observable; } export interface Observable { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * @param {Observable} second Second observable sequence used to produce results after the first sequence terminates. * @returns {Observable} An observable sequence that concatenates the first and second sequence, even if the first sequence terminates exceptionally. */ onErrorResumeNext(second: ObservableOrPromise): Observable; } export interface ObservableStatic { /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(...sources: ObservableOrPromise[]): Observable; /** * Continues an observable sequence that is terminated normally or by an exception with the next observable sequence. * * @example * 1 - res = Rx.Observable.onErrorResumeNext(xs, ys, zs); * 1 - res = Rx.Observable.onErrorResumeNext([xs, ys, zs]); * @returns {Observable} An observable sequence that concatenates the source sequences, even if a sequence terminates exceptionally. */ onErrorResumeNext(sources: ObservableOrPromise[]): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on element count information. * @param {Number} count Length of each buffer. * @param {Number} [skip] Number of elements to skip between creation of consecutive buffers. If not provided, defaults to the count. * @returns {Observable} An observable sequence of buffers. */ bufferWithCount(count: number, skip?: number): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on element count information. * * var res = xs.windowWithCount(10); * var res = xs.windowWithCount(10, 1); * @param {Number} count Length of each window. * @param {Number} [skip] Number of elements to skip between creation of consecutive windows. If not specified, defaults to the count. * @returns {Observable} An observable sequence of windows. */ windowWithCount(count: number, skip?: number): Observable>; } export interface Observable { /** * Returns an array with the specified number of contiguous elements from the end of an observable sequence. * * @description * This operator accumulates a buffer with a length enough to store count elements. Upon completion of the * source sequence, this buffer is produced on the result sequence. * @param {Number} count Number of elements to take from the end of the source sequence. * @returns {Observable} An observable sequence containing a single array with the specified number of elements from the end of the source sequence. */ takeLastBuffer(count: number): Observable; } export interface Observable { /** * Returns the elements of the specified sequence or the specified value in a singleton sequence if the sequence is empty. * * var res = obs = xs.defaultIfEmpty(); * 2 - obs = xs.defaultIfEmpty(false); * * @memberOf Observable# * @param defaultValue The value to return if the sequence is empty. If not provided, this defaults to null. * @returns {Observable} An observable sequence that contains the specified default value if the source is empty; otherwise, the elements of the source itself. */ defaultIfEmpty(defaultValue?: T): Observable; } export interface Observable { /** * Returns an observable sequence that contains only distinct elements according to the keySelector and the comparer. * Usage of this operator should be considered carefully due to the maintenance of an internal lookup structure which can grow large. * * @example * var res = obs = xs.distinct(); * 2 - obs = xs.distinct(function (x) { return x.id; }); * 2 - obs = xs.distinct(function (x) { return x.id; }, function (a,b) { return a === b; }); * @param {Function} [keySelector] A function to compute the comparison key for each element. * @param {Function} [comparer] Used to compare items in the collection. * @returns {Observable} An observable sequence only containing the distinct elements, based on a computed key value, from the source sequence. */ distinct(keySelector?: (value: T) => TKey, keySerializer?: (key: TKey) => string): Observable; } export interface Observable { /** * Returns an observable sequence that shares a single subscription to the underlying sequence. This observable sequence * can be resubscribed to, even if all prior subscriptions have ended. (unlike `.publish().refCount()`) * @returns {Observable} An observable sequence that contains the elements of a sequence produced by multicasting the source. */ singleInstance(): Observable; } } declare module "rx.lite.extras" { export = Rx; } RxJS-4.1.0/ts/rx.sorting.d.ts000066400000000000000000000014701266736161100157120ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * jortSort checks if your inputs are sorted. Note that this is only for a sequence with an end. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ jortSort(): Observable; } export interface Observable { /** * jortSort checks if your inputs are sorted until another Observable sequence fires. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ jortSortUntil(other: TOther): Observable; } } declare module "rx.sorting" { export = Rx; } RxJS-4.1.0/ts/rx.sorting.es6.d.ts000066400000000000000000000014701266736161100164060ustar00rootroot00000000000000declare module Rx { export interface Observable { /** * jortSort checks if your inputs are sorted. Note that this is only for a sequence with an end. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ jortSort(): Observable; } export interface Observable { /** * jortSort checks if your inputs are sorted until another Observable sequence fires. * See http://jort.technology/ for full details. * @returns {Observable} An observable which has a single value of true if sorted, else false. */ jortSortUntil(other: TOther): Observable; } } declare module "rx.sorting" { export = Rx; } RxJS-4.1.0/ts/rx.testing.d.ts000066400000000000000000000240331266736161100157020ustar00rootroot00000000000000declare module Rx { export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } } declare module "rx.testing" { export = Rx; } RxJS-4.1.0/ts/rx.testing.es6.d.ts000066400000000000000000000240331266736161100163760ustar00rootroot00000000000000declare module Rx { export interface Subscription { /** * Checks whether the given subscription is equal to the current instance. * @param other Subscription object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Subscription): boolean; /** * Returns a string representation of the current Subscription value. * @returns {String} String representation of the current Subscription value. */ toString(): string; } interface SubscriptionStatic { /** * Creates a new subscription object with the given virtual subscription and unsubscription time. * * @constructor * @param {Number} subscribe Virtual time at which the subscription occurred. * @param {Number} unsubscribe Virtual time at which the unsubscription occurred. */ new (subscribeAt: number, unsubscribeAt?: number): Subscription; } export var Subscription: SubscriptionStatic; export interface Recorded { /** * Checks whether the given recorded object is equal to the current instance. * * @param {Recorded} other Recorded object to check for equality. * @returns {Boolean} true if both objects are equal; false otherwise. */ equals(other: Recorded): boolean; /** * Returns a string representation of the current Recorded value. * * @returns {String} String representation of the current Recorded value. */ toString(): string; time: number; value: any; } interface RecordedStatic { /** * Creates a new object recording the production of the specified value at the given virtual time. * * @constructor * @param {Number} time Virtual time the value was produced on. * @param {Mixed} value Value that was produced. * @param {Function} comparer An optional comparer. */ new (time: number, value: any, equalityComparer?: _Comparer): Recorded; } export var Recorded: RecordedStatic; export var ReactiveTest: { /** Default virtual time used for creation of observable sequences in unit tests. */ created: number; /** Default virtual time used to subscribe to observable sequences in unit tests. */ subscribed: number; /** Default virtual time used to dispose subscriptions in unit tests. */ disposed: number; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, value: any): Recorded; /** * Factory method for an OnNext notification record at a given time with a given value or a predicate function. * * 1 - ReactiveTest.onNext(200, 42); * 2 - ReactiveTest.onNext(200, function (x) { return x.length == 2; }); * * @param ticks Recorded virtual time the OnNext notification occurs. * @param value Recorded value stored in the OnNext notification or a predicate. * @return Recorded OnNext notification. */ onNext(ticks: number, predicate: (value: any) => boolean): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, exception: any): Recorded; /** * Factory method for an OnError notification record at a given time with a given error. * * 1 - ReactiveTest.onNext(200, new Error('error')); * 2 - ReactiveTest.onNext(200, function (e) { return e.message === 'error'; }); * * @param ticks Recorded virtual time the OnError notification occurs. * @param exception Recorded exception stored in the OnError notification. * @return Recorded OnError notification. */ onError(ticks: number, predicate: (exception: any) => boolean): Recorded; /** * Factory method for an OnCompleted notification record at a given time. * * @param ticks Recorded virtual time the OnCompleted notification occurs. * @return Recorded OnCompleted notification. */ onCompleted(ticks: number): Recorded; /** * Factory method for a subscription record based on a given subscription and disposal time. * * @param start Virtual time indicating when the subscription was created. * @param end Virtual time indicating when the subscription was disposed. * @return Subscription object. */ subscribe(subscribeAt: number, unsubscribeAt?: number): Subscription; } export interface MockObserver extends Observer { messages: Recorded[]; } interface MockObserverStatic extends ObserverStatic { new (scheduler: IScheduler): MockObserver; } export var MockObserver: MockObserverStatic; export interface TestScheduler extends VirtualTimeScheduler { /** * Creates a cold observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified virtual time offsets from the sequence subscription time. * @return Cold observable sequence that can be used to assert the timing of subscriptions and notifications. */ createColdObservable(...records: Recorded[]): Observable; /** * Creates a hot observable using the specified timestamped notification messages either as an array or arguments. * @param messages Notifications to surface through the created sequence at their specified absolute virtual times. * @return Hot observable sequence that can be used to assert the timing of subscriptions and notifications. */ createHotObservable(...records: Recorded[]): Observable; /** * Creates an observer that records received notification messages and timestamps those. * @return Observer that can be used to assert the timing of received notifications. */ createObserver(): MockObserver; /** * Creates a resolved promise with the given value and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} value The value to yield at the given tick. * @returns {MockPromise} A mock Promise which fulfills with the given value. */ createResolvedPromise(ticks: number, value: T): IPromise; /** * Creates a rejected promise with the given reason and ticks * @param {Number} ticks The absolute time of the resolution. * @param {Any} reason The reason for rejection to yield at the given tick. * @returns {MockPromise} A mock Promise which rejects with the given reason. */ createRejectedPromise(ticks: number, value: T): IPromise; /** * Starts the test scheduler and uses the specified virtual times to invoke the factory function, subscribe to the resulting sequence, and dispose the subscription. * * @param create Factory method to create an observable sequence. * @param created Virtual time at which to invoke the factory to create an observable sequence. * @param subscribed Virtual time at which to subscribe to the created observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithTiming(create: () => Observable, createdAt: number, subscribedAt: number, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses the specified virtual time to dispose the subscription to the sequence obtained through the factory function. * Default virtual times are used for factory invocation and sequence subscription. * * @param create Factory method to create an observable sequence. * @param disposed Virtual time at which to dispose the subscription. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithDispose(create: () => Observable, disposedAt: number): MockObserver; /** * Starts the test scheduler and uses default virtual times to invoke the factory function, to subscribe to the resulting sequence, and to dispose the subscription. * * @param create Factory method to create an observable sequence. * @return Observer with timestamped recordings of notification messages that were received during the virtual time window when the subscription to the source sequence was active. */ startWithCreate(create: () => Observable): MockObserver; } export var TestScheduler: { new (): TestScheduler; } } declare module "rx.testing" { export = Rx; } RxJS-4.1.0/ts/rx.time.d.ts000066400000000000000000001043101266736161100151600ustar00rootroot00000000000000declare module Rx { export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable>; /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a window. * @param {Number} count Maximum element count of a window. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable; /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a buffer. * @param {Number} count Maximum element count of a buffer. * @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable; } export interface TimeInterval { value: T; interval: number; } export interface Observable { /** * Records the time interval between consecutive values in an observable sequence. * * @example * 1 - res = source.timeInterval(); * 2 - res = source.timeInterval(Rx.Scheduler.timeout); * * @param [scheduler] Scheduler used to compute time intervals. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence with time interval information on values. */ timeInterval(scheduler?: IScheduler): Observable>; } export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithAbsoluteTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return new Date(); } * }); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning Date values. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithAbsoluteTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => Date, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithRelativeTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return 500; } * ); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning integer values denoting milliseconds. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithRelativeTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. * * @example * 1 - res = source.delaySubscription(5000); // 5s * 2 - res = source.delaySubscription(5000, Rx.Scheduler.default); // 5 seconds * * @param {Number} dueTime Relative or absolute time shift of the subscription. * @param {Scheduler} [scheduler] Scheduler to run the subscription delay timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delaySubscription(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * * 1 - res = source.skipLastWithTime(5000); * 2 - res = source.skipLastWithTime(5000, scheduler); * * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for skipping elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the end of the source sequence. */ skipLastWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the end of the source sequence. */ takeLastWithTime(duration: number, timerScheduler?: IScheduler, loopScheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an array with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence containing a single array with the elements taken during the specified duration from the end of the source sequence. */ takeLastBufferWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.takeWithTime(5000, [optional scheduler]); * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the start of the source sequence. */ takeWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.skipWithTime(5000, [optional scheduler]); * * @description * Specifying a zero value for duration doesn't guarantee no elements will be dropped from the start of the source sequence. * This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded * may not execute immediately, despite the zero due time. * * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the duration. * @param {Number} duration Duration for skipping elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the start of the source sequence. */ skipWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(startTime: Date, scheduler?: IScheduler): Observable; /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(endTime: Date, scheduler?: IScheduler): Observable; /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } } declare module "rx.time" { export = Rx; } RxJS-4.1.0/ts/rx.time.es6.d.ts000066400000000000000000001043101266736161100156540ustar00rootroot00000000000000declare module Rx { export interface ObservableStatic { /** * Returns an observable sequence that produces a value after each period. * * @example * 1 - res = Rx.Observable.interval(1000); * 2 - res = Rx.Observable.interval(1000, Rx.Scheduler.timeout); * * @param {Number} period Period for producing the values in the resulting sequence (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, Rx.Scheduler.timeout is used. * @returns {Observable} An observable sequence that produces a value after each period. */ interval(period: number, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, period: number, scheduler?: IScheduler): Observable; /** * Returns an observable sequence that produces a value after dueTime has elapsed and then after each period. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) at which to produce the first value. * @param {Mixed} [periodOrScheduler] Period to produce subsequent values (specified as an integer denoting milliseconds), or the scheduler to run the timer on. If not specified, the resulting timer is not recurring. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence that produces a value after due time has elapsed and then each period. */ timer(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: Date, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence by dueTime. The relative time intervals between the values are preserved. * * @example * 1 - res = Rx.Observable.delay(new Date()); * 2 - res = Rx.Observable.delay(new Date(), Rx.Scheduler.timeout); * * 3 - res = Rx.Observable.delay(5000); * 4 - res = Rx.Observable.delay(5000, 1000, Rx.Scheduler.timeout); * @memberOf Observable# * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) by which to shift the observable sequence. * @param {Scheduler} [scheduler] Scheduler to run the delay timers on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delay(dueTime: number, scheduler?: IScheduler): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(delayDurationSelector: (item: T) => ObservableOrPromise): Observable; /** * Time shifts the observable sequence based on a subscription delay and a delay selector function for each element. * * @example * 1 - res = source.delayWithSelector(function (x) { return Rx.Scheduler.timer(5000); }); // with selector only * 1 - res = source.delayWithSelector(Rx.Observable.timer(2000), function (x) { return Rx.Observable.timer(x); }); // with delay and selector * * @param {Observable} [subscriptionDelay] Sequence indicating the delay for the subscription to the source. * @param {Function} delayDurationSelector Selector function to retrieve a sequence indicating the delay for each given element. * @returns {Observable} Time-shifted sequence. */ delay(subscriptionDelay: Observable, delayDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Ignores values from an observable sequence which are followed by another value before dueTime. * @param {Number} dueTime Duration of the debounce period for each value (specified as an integer denoting milliseconds). * @param {Scheduler} [scheduler] Scheduler to run the debounce timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The debounced sequence. */ debounce(dueTime: number, scheduler?: IScheduler): Observable; /** * Ignores values from an observable sequence which are followed by another value within a computed throttle duration. * @param {Function} durationSelector Selector function to retrieve a sequence indicating the throttle duration for each given element. * @returns {Observable} The debounced sequence. */ debounce(debounceDurationSelector: (item: T) => ObservableOrPromise): Observable; } export interface Observable { /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable>; /** * Projects each element of an observable sequence into zero or more windows which are produced based on timing information. * @param {Number} timeSpan Length of each window (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive windows (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent windows. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTime(timeSpan: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into a window that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a window. * @param {Number} count Maximum element count of a window. * @param {Scheduler} [scheduler] Scheduler to run windowing timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of windows. */ windowWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable>; } export interface Observable { /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, timeShift: number, scheduler?: IScheduler): Observable; /** * Projects each element of an observable sequence into zero or more buffers which are produced based on timing information. * @param {Number} timeSpan Length of each buffer (specified as an integer denoting milliseconds). * @param {Mixed} [timeShiftOrScheduler] Interval between creation of consecutive buffers (specified as an integer denoting milliseconds), or an optional scheduler parameter. If not specified, the time shift corresponds to the timeSpan parameter, resulting in non-overlapping adjacent buffers. * @param {Scheduler} [scheduler] Scheduler to run buffer timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTime(timeSpan: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Projects each element of an observable sequence into a buffer that is completed when either it's full or a given amount of time has elapsed. * @param {Number} timeSpan Maximum time length of a buffer. * @param {Number} count Maximum element count of a buffer. * @param {Scheduler} [scheduler] Scheduler to run bufferin timers on. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence of buffers. */ bufferWithTimeOrCount(timeSpan: number, count: number, scheduler?: IScheduler): Observable; } export interface TimeInterval { value: T; interval: number; } export interface Observable { /** * Records the time interval between consecutive values in an observable sequence. * * @example * 1 - res = source.timeInterval(); * 2 - res = source.timeInterval(Rx.Scheduler.timeout); * * @param [scheduler] Scheduler used to compute time intervals. If not specified, the timeout scheduler is used. * @returns {Observable} An observable sequence with time interval information on values. */ timeInterval(scheduler?: IScheduler): Observable>; } export interface Timestamp { value: T; timestamp: number; } export interface Observable { /** * Records the timestamp for each value in an observable sequence. * * @example * 1 - res = source.timestamp(); // produces { value: x, timestamp: ts } * 2 - res = source.timestamp(Rx.Scheduler.default); * * @param {Scheduler} [scheduler] Scheduler used to compute timestamps. If not specified, the default scheduler is used. * @returns {Observable} An observable sequence with timestamp information on values. */ timestamp(scheduler?: IScheduler): Observable>; } export interface Observable { /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(intervalOrSampler: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ sample(sampler: Observable, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(interval: number, scheduler?: IScheduler): Observable; /** * Samples the observable sequence at each interval. * * @example * 1 - res = source.sample(sampleObservable); // Sampler tick sequence * 2 - res = source.sample(5000); // 5 seconds * 2 - res = source.sample(5000, Rx.Scheduler.timeout); // 5 seconds * * @param {Mixed} intervalOrSampler Interval at which to sample (specified as an integer denoting milliseconds) or Sampler Observable. * @param {Scheduler} [scheduler] Scheduler to run the sampling timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Sampled observable sequence. */ throttleLatest(sampler: Observable, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: Date, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence or the other observable sequence if dueTime elapses. * @param {Number} dueTime Absolute (specified as a Date object) or relative time (specified as an integer denoting milliseconds) when a timeout occurs. * @param {Observable} [other] Sequence to return in case of a timeout. If not specified, a timeout error throwing sequence will be used. * @param {Scheduler} [scheduler] Scheduler to run the timeout timers on. If not specified, the timeout scheduler is used. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(dueTime: number, other?: Observable, scheduler?: IScheduler): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} other Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(timeoutdurationSelector: (item: T) => Observable, other: Observable): Observable; /** * Returns the source observable sequence, switching to the other observable sequence if a timeout is signaled. * @param {Observable} [firstTimeout] Observable sequence that represents the timeout for the first element. If not provided, this defaults to Observable.never(). * @param {Function} timeoutDurationSelector Selector to retrieve an observable sequence that represents the timeout between the current element and the next element. * @param {Observable} [other] Sequence to return in case of a timeout. If not provided, this is set to Observable.throwException(). * @returns {Observable} The source sequence switching to the other sequence in case of a timeout. */ timeout(firstTimeout: Observable, timeoutdurationSelector: (item: T) => Observable, other?: Observable): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithAbsoluteTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return new Date(); } * }); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning Date values. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithAbsoluteTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => Date, scheduler?: IScheduler): Observable; } export interface ObservableStatic { /** * Generates an observable sequence by iterating a state from an initial state until the condition fails. * * @example * res = source.generateWithRelativeTime(0, * function (x) { return return true; }, * function (x) { return x + 1; }, * function (x) { return x; }, * function (x) { return 500; } * ); * * @param {Mixed} initialState Initial state. * @param {Function} condition Condition to terminate generation (upon returning false). * @param {Function} iterate Iteration step function. * @param {Function} resultSelector Selector function for results produced in the sequence. * @param {Function} timeSelector Time selector function to control the speed of values being produced each iteration, returning integer values denoting milliseconds. * @param {Scheduler} [scheduler] Scheduler on which to run the generator loop. If not specified, the timeout scheduler is used. * @returns {Observable} The generated sequence. */ generateWithRelativeTime( initialState: TState, condition: (state: TState) => boolean, iterate: (state: TState) => TState, resultSelector: (state: TState) => TResult, timeSelector: (state: TState) => number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Time shifts the observable sequence by delaying the subscription with the specified relative time duration, using the specified scheduler to run timers. * * @example * 1 - res = source.delaySubscription(5000); // 5s * 2 - res = source.delaySubscription(5000, Rx.Scheduler.default); // 5 seconds * * @param {Number} dueTime Relative or absolute time shift of the subscription. * @param {Scheduler} [scheduler] Scheduler to run the subscription delay timer on. If not specified, the timeout scheduler is used. * @returns {Observable} Time-shifted sequence. */ delaySubscription(dueTime: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * * 1 - res = source.skipLastWithTime(5000); * 2 - res = source.skipLastWithTime(5000, scheduler); * * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for skipping elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the end of the source sequence. */ skipLastWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns elements within the specified duration from the end of the observable source sequence, using the specified schedulers to run timers and to drain the collected elements. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the end of the source sequence. */ takeLastWithTime(duration: number, timerScheduler?: IScheduler, loopScheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an array with the elements within the specified duration from the end of the observable source sequence, using the specified scheduler to run timers. * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the end of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence containing a single array with the elements taken during the specified duration from the end of the source sequence. */ takeLastBufferWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.takeWithTime(5000, [optional scheduler]); * @description * This operator accumulates a queue with a length enough to store elements received during the initial duration window. * As more elements are received, elements older than the specified duration are taken from the queue and produced on the * result sequence. This causes elements to be delayed with duration. * @param {Number} duration Duration for taking elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements taken during the specified duration from the start of the source sequence. */ takeWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements for the specified duration from the start of the observable source sequence, using the specified scheduler to run timers. * * @example * 1 - res = source.skipWithTime(5000, [optional scheduler]); * * @description * Specifying a zero value for duration doesn't guarantee no elements will be dropped from the start of the source sequence. * This is a side-effect of the asynchrony introduced by the scheduler, where the action that causes callbacks from the source sequence to be forwarded * may not execute immediately, despite the zero due time. * * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the duration. * @param {Number} duration Duration for skipping elements from the start of the sequence. * @param {Scheduler} scheduler Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped during the specified duration from the start of the source sequence. */ skipWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(startTime: Date, scheduler?: IScheduler): Observable; /** * Skips elements from the observable source sequence until the specified start time, using the specified scheduler to run timers. * Errors produced by the source sequence are always forwarded to the result sequence, even if the error occurs before the start time. * * @examples * 1 - res = source.skipUntilWithTime(new Date(), [scheduler]); * 2 - res = source.skipUntilWithTime(5000, [scheduler]); * @param {Date|Number} startTime Time to start taking elements from the source sequence. If this value is less than or equal to Date(), no elements will be skipped. * @param {Scheduler} [scheduler] Scheduler to run the timer on. If not specified, defaults to Rx.Scheduler.timeout. * @returns {Observable} An observable sequence with the elements skipped until the specified start time. */ skipUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(endTime: Date, scheduler?: IScheduler): Observable; /** * Takes elements for the specified duration until the specified end time, using the specified scheduler to run timers. * @param {Number | Date} endTime Time to stop taking elements from the source sequence. If this value is less than or equal to new Date(), the result stream will complete immediately. * @param {Scheduler} [scheduler] Scheduler to run the timer on. * @returns {Observable} An observable sequence with the elements taken until the specified end time. */ takeUntilWithTime(duration: number, scheduler?: IScheduler): Observable; } export interface Observable { /** * Returns an Observable that emits only the first item emitted by the source Observable during sequential time windows of a specified duration. * @param {Number} windowDuration time to wait before emitting another item after emitting the last item * @param {Scheduler} [scheduler] the Scheduler to use internally to manage the timers that handle timeout for each item. If not provided, defaults to Scheduler.timeout. * @returns {Observable} An Observable that performs the throttle operation. */ throttle(windowDuration: number, scheduler?: IScheduler): Observable; } } declare module "rx.time" { export = Rx; } RxJS-4.1.0/ts/rx.virtualtime.d.ts000066400000000000000000000052431266736161100165740ustar00rootroot00000000000000declare module Rx { export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } export interface HistoricalScheduler extends VirtualTimeScheduler { } export var HistoricalScheduler: { /** * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ new (initialClock: number, comparer: _Comparer): HistoricalScheduler; }; } declare module "rx.virtualtime" { export = Rx; } RxJS-4.1.0/ts/rx.virtualtime.es6.d.ts000066400000000000000000000052431266736161100172700ustar00rootroot00000000000000declare module Rx { export interface VirtualTimeScheduler extends IScheduler { /** * Adds a relative time value to an absolute time value. * @param {Number} absolute Absolute virtual time value. * @param {Number} relative Relative virtual time value to add. * @return {Number} Resulting absolute virtual time sum value. */ add(from: TAbsolute, by: TRelative): TAbsolute; /** * Converts an absolute time to a number * @param {Any} The absolute time. * @returns {Number} The absolute time in ms */ toAbsoluteTime(duetime: TAbsolute): number; /** * Converts the TimeSpan value to a relative virtual time value. * @param {Number} timeSpan TimeSpan value to convert. * @return {Number} Corresponding relative virtual time value. */ toRelativeTime(duetime: number): TRelative; /** * Starts the virtual time scheduler. */ start(): IDisposable; /** * Stops the virtual time scheduler. */ stop(): void; /** * Advances the scheduler's clock to the specified time, running all work till that point. * @param {Number} time Absolute time to advance the scheduler's clock to. */ advanceTo(time: TAbsolute): void; /** * Advances the scheduler's clock by the specified relative time, running all work scheduled for that timespan. * @param {Number} time Relative time to advance the scheduler's clock by. */ advanceBy(time: TRelative): void; /** * Advances the scheduler's clock by the specified relative time. * @param {Number} time Relative time to advance the scheduler's clock by. */ sleep(time: TRelative): void; isEnabled: boolean; /** * Gets the next scheduled item to be executed. * @returns {ScheduledItem} The next scheduled item. */ getNext(): internals.ScheduledItem; } export interface HistoricalScheduler extends VirtualTimeScheduler { } export var HistoricalScheduler: { /** * Creates a new historical scheduler with the specified initial clock value. * @constructor * @param {Number} initialClock Initial value for the clock. * @param {Function} comparer Comparer to determine causality of events based on absolute time. */ new (initialClock: number, comparer: _Comparer): HistoricalScheduler; }; } declare module "rx.virtualtime" { export = Rx; } RxJS-4.1.0/ts/tsconfig.json000066400000000000000000000236431266736161100155200ustar00rootroot00000000000000{ "version": "1.5.0-beta", "compilerOptions": { "target": "es5", "module": "commonjs", "isolatedModules": false, "jsx": "react", "experimentalDecorators": true, "emitDecoratorMetadata": true, "declaration": false, "noImplicitAny": true, "removeComments": true, "noLib": false, "preserveConstEnums": true, "suppressImplicitAnyIndexErrors": true }, "compileOnSave": false, "filesGlob": [ "./**/*.ts", "!./core/es*.ts", "!./**/*.d.ts" ], "files": [ "core/abstractobserver.ts", "core/anonymousobservable.ts", "core/anonymousobserver.ts", "core/backpressure/controlled.ts", "core/backpressure/pausable.ts", "core/backpressure/pausablebuffered.ts", "core/backpressure/pauser.ts", "core/backpressure/stopandwait.ts", "core/backpressure/windowed.ts", "core/checkedobserver.ts", "core/concurrency/currentthreadscheduler.ts", "core/concurrency/defaultscheduler.ts", "core/concurrency/historicalscheduler.ts", "core/concurrency/immediatescheduler.ts", "core/concurrency/scheduleditem.ts", "core/concurrency/scheduleperiodicrecursive.ts", "core/concurrency/scheduler.periodic.ts", "core/concurrency/scheduler.recursive.ts", "core/concurrency/scheduler.ts", "core/concurrency/scheduler.wrappers.ts", "core/concurrency/virtualtimescheduler.ts", "core/disposables/booleandisposable.ts", "core/disposables/compositedisposable.ts", "core/disposables/disposable.ts", "core/disposables/refcountdisposable.ts", "core/internal/bindcallback.ts", "core/internal/errors.ts", "core/internal/isequal.ts", "core/internal/priorityqueue.ts", "core/internal/util.ts", "core/joins/pattern.ts", "core/joins/plan.ts", "core/linq/connectableobservable.ts", "core/linq/groupedobservable.ts", "core/linq/observable/amb.ts", "core/linq/observable/ambproto.ts", "core/linq/observable/and.ts", "core/linq/observable/asobservable.ts", "core/linq/observable/average.ts", "core/linq/observable/buffer.ts", "core/linq/observable/bufferwithcount.ts", "core/linq/observable/bufferwithtime.ts", "core/linq/observable/bufferwithtimeorcount.ts", "core/linq/observable/case.ts", "core/linq/observable/catch.ts", "core/linq/observable/catchproto.ts", "core/linq/observable/combinelatest.ts", "core/linq/observable/combinelatestproto.ts", "core/linq/observable/concat.ts", "core/linq/observable/concatall.ts", "core/linq/observable/concatmap.ts", "core/linq/observable/concatmapobserver.ts", "core/linq/observable/concatproto.ts", "core/linq/observable/count.ts", "core/linq/observable/create.ts", "core/linq/observable/debounce.ts", "core/linq/observable/defaultifempty.ts", "core/linq/observable/defer.ts", "core/linq/observable/delay.ts", "core/linq/observable/delaysubscription.ts", "core/linq/observable/dematerialize.ts", "core/linq/observable/distinct.ts", "core/linq/observable/distinctuntilchanged.ts", "core/linq/observable/dowhile.ts", "core/linq/observable/elementat.ts", "core/linq/observable/empty.ts", "core/linq/observable/every.ts", "core/linq/observable/expand.ts", "core/linq/observable/filter.ts", "core/linq/observable/finally.ts", "core/linq/observable/find.ts", "core/linq/observable/findindex.ts", "core/linq/observable/first.ts", "core/linq/observable/flatmap.ts", "core/linq/observable/flatmapfirst.ts", "core/linq/observable/flatmaplatest.ts", "core/linq/observable/flatmapwithmaxconcurrent.ts", "core/linq/observable/for.ts", "core/linq/observable/forkjoin.ts", "core/linq/observable/forkjoinproto.ts", "core/linq/observable/from.ts", "core/linq/observable/fromarray.ts", "core/linq/observable/fromcallback.ts", "core/linq/observable/fromevent.ts", "core/linq/observable/fromeventpattern.ts", "core/linq/observable/fromnodecallback.ts", "core/linq/observable/frompromise.ts", "core/linq/observable/generate.ts", "core/linq/observable/generatewithabsolutetime.ts", "core/linq/observable/generatewithrelativetime.ts", "core/linq/observable/groupby.ts", "core/linq/observable/groupbyuntil.ts", "core/linq/observable/groupjoin.ts", "core/linq/observable/if.ts", "core/linq/observable/ignoreelements.ts", "core/linq/observable/includes.ts", "core/linq/observable/indexof.ts", "core/linq/observable/interval.ts", "core/linq/observable/isempty.ts", "core/linq/observable/join.ts", "core/linq/observable/jortsort.ts", "core/linq/observable/jortsortuntil.ts", "core/linq/observable/just.ts", "core/linq/observable/last.ts", "core/linq/observable/let.ts", "core/linq/observable/manyselect.ts", "core/linq/observable/map.ts", "core/linq/observable/materialize.ts", "core/linq/observable/max.ts", "core/linq/observable/maxby.ts", "core/linq/observable/merge.ts", "core/linq/observable/mergeall.ts", "core/linq/observable/mergedelayerror.ts", "core/linq/observable/mergeproto.ts", "core/linq/observable/min.ts", "core/linq/observable/minby.ts", "core/linq/observable/multicast.ts", "core/linq/observable/never.ts", "core/linq/observable/observeon.ts", "core/linq/observable/of.ts", "core/linq/observable/ofarraychanges.ts", "core/linq/observable/ofobjectchanges.ts", "core/linq/observable/onerrorresumenext.ts", "core/linq/observable/onerrorresumenextproto.ts", "core/linq/observable/pairs.ts", "core/linq/observable/pairwise.ts", "core/linq/observable/partition.ts", "core/linq/observable/pipe.ts", "core/linq/observable/pluck.ts", "core/linq/observable/publish.ts", "core/linq/observable/publishlast.ts", "core/linq/observable/publishvalue.ts", "core/linq/observable/range.ts", "core/linq/observable/reduce.ts", "core/linq/observable/repeat.ts", "core/linq/observable/repeatproto.ts", "core/linq/observable/replay.ts", "core/linq/observable/retry.ts", "core/linq/observable/retrywhen.ts", "core/linq/observable/sample.ts", "core/linq/observable/scan.ts", "core/linq/observable/selectmanyobserver.ts", "core/linq/observable/sequenceequal.ts", "core/linq/observable/share.ts", "core/linq/observable/sharereplay.ts", "core/linq/observable/sharevalue.ts", "core/linq/observable/single.ts", "core/linq/observable/singleinstance.ts", "core/linq/observable/skip.ts", "core/linq/observable/skiplast.ts", "core/linq/observable/skiplastwithtime.ts", "core/linq/observable/skipuntil.ts", "core/linq/observable/skipuntilwithtime.ts", "core/linq/observable/skipwhile.ts", "core/linq/observable/skipwithtime.ts", "core/linq/observable/some.ts", "core/linq/observable/spawn.ts", "core/linq/observable/start.ts", "core/linq/observable/startasync.ts", "core/linq/observable/startwith.ts", "core/linq/observable/subscribeon.ts", "core/linq/observable/sum.ts", "core/linq/observable/switch.ts", "core/linq/observable/switchfirst.ts", "core/linq/observable/take.ts", "core/linq/observable/takelast.ts", "core/linq/observable/takelastbuffer.ts", "core/linq/observable/takelastbufferwithtime.ts", "core/linq/observable/takelastwithtime.ts", "core/linq/observable/takeuntil.ts", "core/linq/observable/takeuntilwithtime.ts", "core/linq/observable/takewhile.ts", "core/linq/observable/takewithtime.ts", "core/linq/observable/tap.ts", "core/linq/observable/thendo.ts", "core/linq/observable/throttle.ts", "core/linq/observable/throw.ts", "core/linq/observable/timeinterval.ts", "core/linq/observable/timeout.ts", "core/linq/observable/timer.ts", "core/linq/observable/timestamp.ts", "core/linq/observable/toarray.ts", "core/linq/observable/toasync.ts", "core/linq/observable/tomap.ts", "core/linq/observable/topromise.ts", "core/linq/observable/toset.ts", "core/linq/observable/transduce.ts", "core/linq/observable/using.ts", "core/linq/observable/when.ts", "core/linq/observable/while.ts", "core/linq/observable/window.ts", "core/linq/observable/windowwithcount.ts", "core/linq/observable/windowwithtime.ts", "core/linq/observable/windowwithtimeorcount.ts", "core/linq/observable/withlatestfrom.ts", "core/linq/observable/zip.ts", "core/linq/observable/zipiterable.ts", "core/linq/observable/zipproto.ts", "core/notification.ts", "core/observable.ts", "core/observer-extras.ts", "core/observer-lite.ts", "core/observer.ts", "core/scheduledobserver.ts", "core/subjects/anonymoussubject.ts", "core/subjects/asyncsubject.ts", "core/subjects/behaviorsubject.ts", "core/subjects/replaysubject.ts", "core/subjects/subject.ts", "core/testing/mockdisposable.ts", "core/testing/mockobserver.ts", "core/testing/reactivetest.ts", "core/testing/recorded.ts", "core/testing/subscription.ts", "core/testing/testscheduler.ts" ], "exclude": [] }