{"version":3,"file":"polyfills.f8941fbd01b3bf5a.js","mappings":"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CA,gBACA,qBACA,wBACA,0BAOEC,GAAyB,CAAC,YAAa,gBAAiB,YAAa,oBAAqB,mBA6D1FC,GAAkB,CAAC,QACnBC,GAAqB,CAAC,OAAQ,QAAS,QAAS,OAAQ,SAAU,SAAU,gBAC5EC,GAAoB,CAAC,SAAU,SAAU,SACzCC,GAA2B,CAC7B,YAAa,WAAY,QAAS,QAAS,OAAQ,WAAY,UAAW,UAC1E,oBAEEC,GAAqB,CAAC,gBAAiB,WAAY,QAAS,UAAW,QAAS,UAAW,gBAAiB,SAC5GC,GAAsB,CAAC,QAAS,QAAS,OAAQ,WACjDC,GAAmB,CAAC,QAAS,WAC7BC,GApNgC,CAClC,QACA,kBACA,eACA,qBACA,WACA,cACA,OACA,SACA,UACA,iBACA,SACA,mBACA,oBACA,iBACA,YACA,QACA,QACA,cACA,aACA,WACA,OACA,UACA,YACA,WACA,YACA,WACA,OACA,iBACA,UACA,QACA,QACA,QACA,UACA,WACA,oBACA,QACA,UACA,UACA,WACA,QACA,OACA,YACA,aACA,iBACA,qBACA,YACA,aACA,aACA,YACA,WACA,YACA,UACA,aACA,oBACA,QACA,OACA,UACA,gBACA,cACA,eACA,eACA,oBACA,uBACA,4BACA,mBACA,sBACA,yBACA,cACA,WACA,cACA,YACA,WACA,aACA,QACA,SACA,SACA,SACA,UACA,SACA,kBACA,cACA,OACA,OACA,UACA,SACA,UACA,aACA,eACA,cACA,YACA,aACA,WACA,mBACA,gBACA,UACA,SAoH6CltC,OAbzB,CAAC,uBAAwB,mBAAoB,6BAC9C,CAAC,eAAgB,qBACf,CAAC,UAvGC,CACvB,qBAAsB,sBAAuB,mBAAoB,SAAU,mBAC3E,sBAAuB,yBAA0B,qBAAsB,kBACvE,qBAAsB,wBAAyB,oBAAqB,mBACpE,mBAAoB,UA8GuGysC,GA5EjG,CAC1B,aAAc,YAAa,cAAe,OAAQ,MAAO,QAAS,YAAa,UAC/E,iBAAkB,SAAU,gBAAiB,kBAAmB,qBAChE,2BAA4B,uBAAwB,uBAG5B,CACxB,WACA,cACA,cACA,iBACA,mBACA,kBACA,eACA,aACA,gBACA,gBACA,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","names":["__globalThis","globalThis","__window","window","__self","self","WorkerGlobalScope","_global","global","$localize","messageParts","expressions","translate","translation","message","stripBlock","raw","i","length","messagePart","rawMessagePart","charAt","substring","cooked","cookedIndex","rawIndex","Error","findEndOfBlock","__Zone_disable_requestAnimationFrame","__Zone_disable_on_property","__zone_symbol__UNPATCHED_EVENTS","document","exportName","undefined","assign","VENDOR_PREFIXES","TEST_ELEMENT","createElement","round","Math","abs","now","Date","fn","timeout","context","setTimeout","bindFn","arg","Array","isArray","each","obj","iterator","forEach","call","hasOwnProperty","method","name","deprecationMessage","e","stack","replace","log","console","warn","apply","this","arguments","Object","target","TypeError","output","index","source","nextKey","extend","deprecate","dest","src","merge","keys","child","base","properties","childP","baseP","prototype","create","constructor","_super","val","args","val1","val2","types","handler","splitStr","type","addEventListener","removeEventListener","node","parent","parentNode","str","find","indexOf","trim","split","findByKey","slice","key","sort","results","values","inArray","push","a","b","property","prefix","prop","camelProp","toUpperCase","_uniqueId","element","doc","ownerDocument","defaultView","parentWindow","SUPPORT_TOUCH","SUPPORT_POINTER_EVENTS","prefixed","SUPPORT_ONLY_TOUCH","test","navigator","userAgent","INPUT_TYPE_TOUCH","INPUT_TYPE_MOUSE","PROPS_XY","PROPS_CLIENT_XY","manager","callback","options","inputTarget","domHandler","ev","boolOrFn","enable","init","eventType","input","pointersLen","pointers","changedPointersLen","changedPointers","isFirst","isFinal","INPUT_END","session","pointersLength","firstInput","simpleCloneInputData","H","firstMultiple","offsetCenter","center","getCenter","timeStamp","deltaTime","angle","getAngle","distance","getDistance","offset","offsetDelta","prevDelta","prevInput","x","deltaX","y","deltaY","computeDeltaXY","offsetDirection","getDirection","overallVelocity","getVelocity","overallVelocityX","overallVelocityY","scale","start","end","getScale","rotation","getRotation","maxPointers","v","velocity","velocityX","velocityY","direction","last","lastInterval","computeIntervalInputData","hasParent","srcEvent","computeInputData","emit","recognize","clientX","clientY","DIRECTION_DOWN","p1","p2","props","sqrt","atan2","PI","Input","evEl","addEventListeners","evTarget","evWin","getWindowForElement","destroy","removeEventListeners","MOUSE_INPUT_MAP","mousedown","mousemove","mouseup","MOUSE_ELEMENT_EVENTS","MOUSE_WINDOW_EVENTS","pressed","inherit","MouseInput","button","which","pointerType","POINTER_INPUT_MAP","pointerdown","pointermove","pointerup","pointercancel","pointerout","IE10_POINTER_TYPE_ENUM","POINTER_ELEMENT_EVENTS","POINTER_WINDOW_EVENTS","store","pointerEvents","MSPointerEvent","PointerEvent","PointerEventInput","removePointer","eventTypeNormalized","toLowerCase","isTouch","storeIndex","pointerId","rt","splice","SINGLE_TOUCH_INPUT_MAP","touchstart","touchmove","touchend","touchcancel","SINGLE_TOUCH_TARGET_EVENTS","SINGLE_TOUCH_WINDOW_EVENTS","started","all","toArray","touches","changed","changedTouches","uniqueArray","concat","SingleTouchInput","normalizeSingleTouches","TOUCH_INPUT_MAP","TOUCH_TARGET_EVENTS","targetIds","allTouches","INPUT_START","identifier","targetTouches","changedTargetTouches","filter","touch","TouchInput","mouse","primaryTouch","lastTouches","eventData","setLastTouch","lastTouch","lts","DEDUP_TIMEOUT","t","dx","dy","getTouches","TouchMouseInput","inputEvent","inputData","isMouse","sourceCapabilities","firesTouchEvents","recordTouches","isSyntheticEvent","PREFIXED_TOUCH_ACTION","style","NATIVE_TOUCH_ACTION","TOUCH_ACTION_COMPUTE","TOUCH_ACTION_MANIPULATION","TOUCH_ACTION_NONE","TOUCH_ACTION_PAN_X","TOUCH_ACTION_PAN_Y","TOUCH_ACTION_MAP","touchMap","cssSupports","CSS","supports","getTouchActionProps","value","set","defaults","id","uniqueId","ifUndefined","state","simultaneous","requireFail","otherRecognizer","recognizer","get","Recognizer","AttrRecognizer","pX","pY","_timer","_input","pTime","pCenter","count","recognizers","Hammer","preset","Manager","handlers","oldCssProps","inputClass","he","Re","Dt","inputHandler","createInputInstance","touchAction","TouchAction","toggleCssProps","item","add","recognizeWith","requireFailure","cssProps","r","compute","actions","update","getTouchAction","inStr","hasPanX","hasPanY","TOUCH_ACTION_AUTO","cleanTouchActions","join","preventDefaults","prevented","hasNone","DIRECTION_LEFT","DIRECTION_UP","preventSrc","preventDefault","invokeArrayArg","getRecognizerByNameIfManager","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","stateStr","additionalEvent","tryEmit","canEmit","STATE_FAILED","inputDataClone","reset","STATE_RECOGNIZED","process","STATE_BEGAN","attrTest","optionPointers","isRecognized","isValid","PanRecognizer","threshold","DIRECTION_HORIZONTAL","directionTest","hasMoved","directionStr","PinchRecognizer","PressRecognizer","time","validPointers","validMovement","validTime","setTimeoutContext","clearTimeout","RotateRecognizer","SwipeRecognizer","TapRecognizer","taps","interval","posThreshold","validTouchTime","failTimeout","validInterval","validMultiTap","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","stop","force","stopped","STOP","curRecognizer","existing","remove","on","events","off","data","gestureEvent","createEvent","initEvent","gesture","dispatchEvent","triggerDomEvent","INPUT_MOVE","INPUT_CANCEL","STATE_POSSIBLE","STATE_CHANGED","STATE_ENDED","STATE_CANCELLED","DIRECTION_NONE","DIRECTION_RIGHT","DIRECTION_VERTICAL","DIRECTION_ALL","Tap","Pan","Swipe","Pinch","Rotate","Press","define","performanceTimestampProvider","delegate","performance","timestampProvider","animationFramesFactory","DEFAULT_ANIMATION_FRAMES","schedule","animationFrameProvider","Observable","subscriber","subscription","Subscription","provider","run","timestamp","next","elapsed","closed","Subject","_checkFinalizedStatuses","hasError","_hasValue","_value","thrownError","isStopped","_isComplete","error","complete","super","VirtualTimeScheduler","AsyncScheduler","schedulerActionCtor","VirtualAction","maxFrames","Infinity","frame","flush","action","delay","shift","execute","unsubscribe","AsyncAction","scheduler","work","Number","isFinite","active","requestAsyncId","sortActions","recycleAsyncId","_execute","config","hasConfig","Promise","resolve","reject","subscribe","E","defaultValue","EmptyError","ArgumentOutOfRangeError","createErrorClass","NotFoundError","SequenceError","isNodeStyle","callbackFunc","resultSelector","isScheduler","bindCallbackInternals","pipe","mapOneOrManyArgs","subscribeOn","observeOn","subject","AsyncSubject","uninitialized","subs","isAsync","isComplete","err","DEFAULT_CONFIG","connector","resetOnDisconnect","connection","result","connect","defer","addHandler","removeHandler","fromEventPattern","retValue","isFunction","initialStateOrOptions","condition","iterate","resultSelectorOrScheduler","initialState","identity","scheduleIterable","gen","trueResult","falseResult","sources","nextSources","argsOrArgArray","operate","remaining","subscribeNext","nextSource","innerFrom","innerSub","OperatorSubscriber","noop","onErrorResumeNextWith","EMPTY","from","entries","pred","thisArg","predicate","not","raceInit","subscriptions","s","n","resourceFactory","observableFactory","resource","closingNotifier","currentBuffer","bufferSize","startBufferEvery","buffers","toEmit","buffer","arrRemove","bufferTimeSpan","otherArgs","asyncScheduler","bufferCreationInterval","m","maxBufferSize","bufferRecords","restartOnEmit","record","startBuffer","executeSchedule","bufferTimeSubscriber","recordsCopy","openings","closingSelector","openValue","closingSubscription","emitBuffer","closingSubscriber","openBuffer","accumulator","seed","scanInternals","arrReducer","arr","reduce","joinFn","project","mergeMap","joinAllInternals","combineLatest","combineAll","combineLatestAll","popResultSelector","combineLatestInit","otherSources","innerObservable","concatMap","popScheduler","concatAll","total","durationSelector","hasValue","lastValue","durationSubscriber","keySelector","flushes","distinctKeys","Set","has","clear","compare","distinctUntilChanged","hasDefaultValue","take","defaultIfEmpty","throwIfEmpty","of","inner","exhaust","exhaustAll","concurrent","mergeInternals","createFind","findIndex","comparer","flatMap","popNumber","mergeAll","prev","hasPrev","p","initialValue","BehaviorSubject","ConnectableObservable","windowTime","selectorOrScheduler","selector","multicast","ReplaySubject","countOrConfig","sourceSub","soFar","resubscribe","notifier","timer","notifierSubscriber","subscribeToSource","syncUnsub","F","completions$","syncResub","isNotifierComplete","isMainComplete","checkComplete","subscribeForRepeatWhen","configOrCount","resetOnSuccess","subscribeForRetry","resub","errors$","subscribeForRetryWhen","period","sample","compareTo","comparator","aState","bState","isEqual","createSubscriber","selfState","otherState","sequenceEqualSubscriber","singleValue","seenValue","skipCount","ring","seen","valueIndex","oldValue","taking","skipSubscriber","switchMap","_","innerValue","defaultThrottleConfig","leading","trailing","sendValue","throttled","endThrottling","send","cleanupThrottling","startThrottle","duration","duration$","throttle","async","scan","current","map","TimeInterval","due","withObservable","first","_with","isValidDate","with","dateTimestampProvider","windowBoundaries","windowSubject","asObservable","errorHandler","windowSize","startWindowEvery","startEvery","windows","starts","c","windowTimeSpan","windowCreationInterval","maxWindowSize","windowRecords","restartOnClose","closeWindow","startWindow","loop","cb","terminate","consumer","handleError","windowsCopy","openWindow","zip","otherInputs","zipStatic","getValue","_subscribe","_throwIfClosed","NotificationKind","kind","observe","observer","observeNotification","do","nextHandler","completeHandler","accept","nextOrObserver","S","toObservable","throwError","Notification","completeNotification","notification","O","lift","operator","observable","observerOrNext","Subscriber","isObserver","isSubscription","isSubscriber","SafeSubscriber","errorContext","_trySubscribe","sink","promiseCtor","getPromiseCtor","U","Symbol_observable","operations","pipeFromArray","toPromise","g","_bufferSize","_windowTime","_timestampProvider","_infiniteTimeWindow","max","_buffer","_trimBuffer","_innerSubscribe","copy","adjustedBufferSize","Scheduler","AnonymousSubject","ObjectUnsubscribedError","observers","observed","EMPTY_SUBSCRIPTION","destination","COMPLETE_NOTIFICATION","createNotification","Z","EMPTY_OBSERVER","handleStoppedNotification","nextNotification","_next","errorNotification","_error","_complete","bind","wrapForErrorHandling","defaultErrorHandler","instance","captureError","reportUnhandledError","onStoppedNotification","timeoutProvider","initialTeardown","errors","_parentage","UnsubscriptionError","_teardowns","teardown","execTeardown","D","_hasParent","_addParent","includes","_removeParent","empty","onUnhandledError","useDeprecatedSynchronousErrorHandling","useDeprecatedNextContext","subjectFactory","hasLift","getSubject","_subject","_teardown","_refCount","_connection","refCount","higherOrderRefCount","observables","argsArgArrayOrObject","createObject","valueTransform","maybeSchedule","remainingFirstValues","hasFirstValue","emptyScheduled","remainingCompletions","remainingEmissions","sourceIndex","scheduled","nodeEventEmitterMethods","eventTargetMethods","jqueryMethods","eventName","fromEvent","isEventTarget","methodName","addListener","removeListener","isNodeStyleEventEmitter","toCommonHandlerRegistry","isJQueryStyleEventEmitter","isArrayLike","subTarget","isInteropObservable","obs","fromInteropObservable","array","fromArrayLike","isPromise","promise","then","fromPromise","isAsyncIterable","fromAsyncIterable","isIterable","iterable","fromIterable","isReadableStreamLike","readableStream","readableStreamLikeToAsyncGenerator","fromReadableStreamLike","createInvalidObservableTypeError","asyncIterable","asyncIterable_1","Ft","catch","NEVER","errorOrErrorFactory","errorFactory","dueTime","intervalOrScheduler","intervalDuration","completed","every","some","onNext","onComplete","onError","onFinalize","o","endDuration","cleanupDuration","audit","handledResult","catchError","u","subscribable","fromSubscribable","activeTask","lastTime","targetTime","emitWhenIdle","delayWhen","delayDurationSelector","subscriptionDelay","ignoreElements","mapTo","defaultCompare","previousKey","currentKey","exhaustMap","ii","outerValue","elementOrOptions","groups","Map","notify","groupBySourceSubscriber","GroupBySubscriber","group","grouped","groupSubject","groupSubscriber","activeGroups","teardownAttempted","createGroupedObservable","delete","takeLast","onBeforeNext","expand","innerSubScheduler","additionalTeardown","outerNext","doInnerSub","innerComplete","bufferedValue","subjectOrSubjectFactory","currentProp","refCounter","sharedConnection","conn","hasSeed","emitOnNext","emitBeforeComplete","hasState","resetOnError","resetOnComplete","resetOnRefCountZero","wrapperSource","resetConnection","hasCompleted","hasErrored","cancelReset","resetAndUnsubscribe","handleReset","configOrBufferSize","d","share","innerSubscriber","innerIndex","outerIndex","inclusive","tapObserver","isUnsub","finalize","defaultErrorFactory","TimeoutError","info","schedulerArg","timeoutErrorFactory","meta","originalSourceSubscription","timerSubscription","startTimer","inputs","len","otherValues","ready","Symbol_iterator","done","return","Symbol","asyncIterator","scheduleObservable","scheduleArray","schedulePromise","scheduleAsyncIterable","scheduleReadableStreamLike","intervalProvider","setInterval","clearInterval","handle","Action","pending","_id","_scheduler","_delay","errorValue","errored","SchedulerAction","_active","animationFrameScheduler","flushId","_scheduled","animationFrame","request","requestAnimationFrame","cancel","cancelAnimationFrame","resolved","nextHandle","activeHandles","Immediate","setImmediate","findAndClearHandle","clearImmediate","immediateProvider","L","asapScheduler","asap","queueScheduler","queue","getSymbolIterator","toString","pop","getPrototypeOf","objectProto","getKeys","isPOJO","createImpl","ctorFunc","isRoot","errorThrown","parentSubscription","repeat","scheduleSubscription","f","isNaN","reader","getReader","read","releaseLock","liftedSource","callOrApply","fns","rxjs","require","Zone","__load_patch","api","symbol","__symbol__","errorSource","completeSource","ObjectDefineProperties","defineProperties","patchMethod","_zone","operatorDelegate","operatorSelf","operatorArgs","ObservablePrototype","writable","configurable","_zoneSource","_zoneSubscribe","proto","R","tearDown_1","zone_1","_zoneSubjectFactory","factory","zone","_zoneUnsubscribe","_unsubscribe","_zoneUnsubscribeCleared","defineProperty","_zoneDestination","subscriptionZone","patchSubscriber","mark","label","measure","symbolPrefix","__Zone_symbol_prefix","checkDuplicate","zoneSpec","_parent","_name","_properties","_zoneDelegate","ZoneDelegate","patches","ZoneAwarePromise","root","_currentZoneFrame","currentTask","_currentTask","ignoreDuplicate","perfName","_api","performanceMeasure","getZoneWith","fork","wrap","_callback","intercept","runGuarded","applyThis","applyArgs","invoke","runTask","task","NO_ZONE","notScheduled","eventTask","macroTask","reEntryGuard","running","_transitionTo","runCount","previousTask","isPeriodic","cancelFn","invokeTask","unknown","_updateTaskCount","scheduleTask","newZone","scheduling","zoneDelegates","_zoneDelegates","scheduleMicroTask","customSchedule","ZoneTask","microTask","scheduleMacroTask","customCancel","scheduleEventTask","cancelTask","canceling","DELEGATE_ZS","onHasTask","hasTaskState","hasTask","onScheduleTask","onInvokeTask","onCancelTask","parentDelegate","_taskCounts","_parentDelegate","_forkZS","onFork","_forkDlgt","_forkCurrZone","_interceptZS","onIntercept","_interceptDlgt","_interceptCurrZone","_invokeZS","onInvoke","_invokeDlgt","_invokeCurrZone","_handleErrorZS","onHandleError","_handleErrorDlgt","_handleErrorCurrZone","_scheduleTaskZS","_scheduleTaskDlgt","_scheduleTaskCurrZone","_invokeTaskZS","_invokeTaskDlgt","_invokeTaskCurrZone","_cancelTaskZS","_cancelTaskDlgt","_cancelTaskCurrZone","_hasTaskZS","_hasTaskDlgt","_hasTaskDlgtOwner","_hasTaskCurrZone","zoneSpecHasTask","targetZone","returnTask","scheduleFn","isEmpty","counts","change","_state","useG","_numberOfNestedTaskFrames","drainMicroTaskQueue","cancelScheduleRequest","toState","fromState1","fromState2","handleId","toJSON","symbolSetTimeout","symbolPromise","symbolThen","nativeMicroTaskQueuePromise","_microTaskQueue","_isDrainingMicrotaskQueue","nativeThen","microtaskDrainDone","currentZoneFrame","showUncaughtError","patchEventTarget","patchOnProperties","bindArguments","patchThen","patchMacroTask","patchEventPrototype","isIEOrEdge","getGlobalObjects","ObjectDefineProperty","ObjectGetOwnPropertyDescriptor","ObjectCreate","ArraySlice","patchClass","wrapWithCurrentZone","filterProperties","attachOriginToPatched","_redefineProperty","patchCallbacks","getOwnPropertyDescriptor","ObjectGetPrototypeOf","ADD_EVENT_LISTENER_STR","REMOVE_EVENT_LISTENER_STR","ZONE_SYMBOL_ADD_EVENT_LISTENER","ZONE_SYMBOL_REMOVE_EVENT_LISTENER","TRUE_STR","FALSE_STR","ZONE_SYMBOL_PREFIX","zoneSymbol","isWindowExists","internalWindow","NULL_ON_PROP_VALUE","propertyDesc","isWebWorker","isNode","isBrowser","HTMLElement","isMix","zoneSymbolEventNames","wrapFn","eventNameSymbol","listener","errorEvent","filename","lineno","colno","desc","enumerable","onPropPatchedSymbol","originalDescGet","originalDescSet","substr","newValue","previousValue","REMOVE_ATTRIBUTE","removeAttribute","patchProperty","onProperties","j","originalInstanceKey","className","OriginalClass","patchFn","delegateName","isPropertyWritable","patchDelegate","funcName","metaCreator","setNative","cbIdx","scheduleMacroTaskWithCurrentZone","patched","original","isDetectedIEOrEdge","ieOrEdge","ua","_uncaughtPromiseErrors","isDisableWrappingUncaughtPromiseRejection","rejection","uncaughtPromiseError","throwOriginal","handleUnhandledRejection","UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL","symbolState","symbolValue","symbolFinally","symbolParentPromiseValue","symbolParentPromiseState","UNRESOLVED","REJECTED","resolvePromise","CURRENT_TASK_TRACE_SYMBOL","onceWrapper","wasCalled","wrappedFunction","once","clearRejectedNoCatch","makeResolver","trace","creationTrace","scheduleResolveOrReject","JSON","stringify","readableObjectToString","REJECTION_HANDLED_HANDLER","chainPromise","onFulfilled","onRejected","promiseState","forwardResolution","forwardRejection","parentPromiseValue","isFinallyPromise","static","ZONE_AWARE_PROMISE_TO_STRING","res","rej","isThenable","onResolve","onReject","allWithCallback","thenCallback","status","errorCallback","reason","unresolvedCount","resolvedValues","curValueIndex","thenErr","executor","toStringTag","species","C","finally","onFinally","race","NativePromise","symbolThenPatched","Ctor","originalThen","wrapped","resultPromise","ctor","zoneify","originalFunctionToString","Function","ORIGINAL_DELEGATE_SYMBOL","PROMISE_SYMBOL","ERROR_SYMBOL","newFunctionToString","originalDelegate","nativePromise","nativeError","originalObjectToString","passiveSupported","OPTIMIZED_ZONE_EVENT_TASK_DATA","zoneSymbolEventNames$1","globalSources","EVENT_NAME_SYMBOL_REGX","RegExp","IMMEDIATE_PROPAGATION_SYMBOL","eventNameToString","falseEventName","trueEventName","symbolCapture","apis","patchOptions","ADD_EVENT_LISTENER","REMOVE_EVENT_LISTENER","rm","LISTENERS_EVENT_LISTENER","listeners","REMOVE_ALL_LISTENERS_EVENT_LISTENER","rmAll","zoneSymbolAddEventListener","ADD_EVENT_LISTENER_SOURCE","isRemoved","handleEvent","globalZoneAwareCallback","tasks","copyTasks","globalZoneAwareCaptureCallback","useGlobalCallback","validateHandler","vh","chkDup","returnTarget","taskData","nativeAddEventListener","nativeRemoveEventListener","nativeListeners","nativeRemoveAllListeners","nativePrependEventListener","passive","capture","prepend","isExisting","symbolEventNames","symbolEventName","existingTasks","existingTask","allRemoved","diff","typeOfDelegate","unpatchedEvents","passiveEvents","makeAddListener","nativeListener","addSource","customScheduleFn","customCancelFn","transferEventName","isHandleEvent","buildEventListenerOptions","ge","prepareEventNames","constructorName","targetSource","vt","unshift","PREPEND_EVENT_LISTENER","nt","findEventTasks","captureTasks","removeTasks","match","exec","evtName","patchEventTargetMethods","foundTasks","captureFalseTasks","captureTrueTasks","Event","targetName","callbacks","nativeDelegate","opts","descriptor","windowEventNames","mediaElementEventNames","frameEventNames","frameSetEventNames","marqueeEventNames","XMLHttpRequestEventNames","IDBIndexEventNames","websocketEventNames","workerEventNames","eventNames","ignoreProperties","tip","ip","targetIgnoreProperties","op","SYMBOL_BLACK_LISTED_EVENTS","SYMBOL_UNPATCHED_EVENTS","taskSymbol","setName","cancelName","nameSuffix","clearNative","tasksByHandleId","clearTask","ref","unref","Ot","legacyPatch","patchTimer","blockingMethods","patchEvent","EVENT_TARGET","EventTarget","eventTargetPatch","XMLHttpRequestEventTarget","supportsWebSocket","WebSocket","__Zone_ignore_on_properties","ignoreErrorProperties","isIE","patchFilteredProperties","Document","SVGElement","Element","HTMLMediaElement","HTMLFrameSetElement","HTMLBodyElement","HTMLFrameElement","HTMLIFrameElement","HTMLMarqueeElement","Worker","XMLHttpRequest","IDBIndex","IDBRequest","IDBOpenDBRequest","IDBDatabase","IDBTransaction","IDBCursor","propertyDescriptorPatch","customElements","patchCustomElements","XMLHttpRequestPrototype","oriAddListener","oriRemoveListener","XMLHttpRequestEventTargetPrototype","READY_STATE_CHANGE","SCHEDULED","XHR_SCHEDULED","XHR_ERROR_BEFORE_SCHEDULED","XHR_LISTENER","newListener","readyState","DONE","aborted","loadTasks","oriInvoke","storedTask","XHR_TASK","sendNative","abortNative","openNative","XHR_SYNC","XHR_URL","fetchTaskAborting","fetchTaskScheduling","url","placeholderCallback","findPendingTask","patchXHR","geolocation","fnNames","patchPrototype","PromiseRejectionEvent","evt","findPromiseRejectionHandler","__proto__","V","X","et","xt","bt","trys","k","ye","Vt","Jt"],"sourceRoot":"webpack:///","sources":["../packages/localize/src/localize/src/global.ts","../packages/localize/src/localize/src/localize.ts","../packages/localize/init/index.ts","./src/polyfills.ts","./src/zone-flags.ts","./node_modules/hammerjs/hammer.js","./node_modules/rxjs/src/internal/scheduler/performanceTimestampProvider.ts","./node_modules/rxjs/src/internal/observable/dom/animationFrames.ts","./node_modules/rxjs/src/internal/AsyncSubject.ts","./node_modules/rxjs/src/internal/scheduler/VirtualTimeScheduler.ts","./node_modules/rxjs/src/internal/lastValueFrom.ts","./node_modules/rxjs/src/internal/util/ArgumentOutOfRangeError.ts","./node_modules/rxjs/src/internal/util/NotFoundError.ts","./node_modules/rxjs/src/internal/util/SequenceError.ts","./node_modules/rxjs/src/internal/observable/bindCallbackInternals.ts","./node_modules/rxjs/src/internal/observable/bindCallback.ts","./node_modules/rxjs/src/internal/observable/bindNodeCallback.ts","./node_modules/rxjs/src/internal/observable/connectable.ts","./node_modules/rxjs/src/internal/observable/fromEventPattern.ts","./node_modules/rxjs/src/internal/observable/generate.ts","./node_modules/rxjs/src/internal/observable/iif.ts","./node_modules/rxjs/src/internal/observable/onErrorResumeNext.ts","./node_modules/rxjs/src/internal/operators/onErrorResumeNext.ts","./node_modules/rxjs/src/internal/observable/pairs.ts","./node_modules/rxjs/src/internal/util/not.ts","./node_modules/rxjs/src/internal/observable/partition.ts","./node_modules/rxjs/src/internal/observable/race.ts","./node_modules/rxjs/src/internal/observable/range.ts","./node_modules/rxjs/src/internal/observable/using.ts","./node_modules/rxjs/src/internal/operators/buffer.ts","./node_modules/rxjs/src/internal/operators/bufferCount.ts","./node_modules/rxjs/src/internal/operators/bufferTime.ts","./node_modules/rxjs/src/internal/operators/bufferToggle.ts","./node_modules/rxjs/src/internal/operators/bufferWhen.ts","./node_modules/rxjs/src/internal/operators/reduce.ts","./node_modules/rxjs/src/internal/operators/toArray.ts","./node_modules/rxjs/src/internal/operators/joinAllInternals.ts","./node_modules/rxjs/src/internal/operators/combineLatestAll.ts","./node_modules/rxjs/src/internal/operators/combineAll.ts","./node_modules/rxjs/src/internal/operators/combineLatest.ts","./node_modules/rxjs/src/internal/operators/combineLatestWith.ts","./node_modules/rxjs/src/internal/operators/concatMapTo.ts","./node_modules/rxjs/src/internal/operators/concatWith.ts","./node_modules/rxjs/src/internal/operators/concat.ts","./node_modules/rxjs/src/internal/operators/count.ts","./node_modules/rxjs/src/internal/operators/debounce.ts","./node_modules/rxjs/src/internal/operators/distinct.ts","./node_modules/rxjs/src/internal/operators/distinctUntilKeyChanged.ts","./node_modules/rxjs/src/internal/operators/elementAt.ts","./node_modules/rxjs/src/internal/operators/endWith.ts","./node_modules/rxjs/src/internal/operators/every.ts","./node_modules/rxjs/src/internal/operators/exhaustAll.ts","./node_modules/rxjs/src/internal/operators/exhaust.ts","./node_modules/rxjs/src/internal/operators/expand.ts","./node_modules/rxjs/src/internal/operators/find.ts","./node_modules/rxjs/src/internal/operators/findIndex.ts","./node_modules/rxjs/src/internal/operators/isEmpty.ts","./node_modules/rxjs/src/internal/operators/max.ts","./node_modules/rxjs/src/internal/operators/flatMap.ts","./node_modules/rxjs/src/internal/operators/mergeMapTo.ts","./node_modules/rxjs/src/internal/operators/mergeScan.ts","./node_modules/rxjs/src/internal/operators/mergeWith.ts","./node_modules/rxjs/src/internal/operators/merge.ts","./node_modules/rxjs/src/internal/operators/min.ts","./node_modules/rxjs/src/internal/operators/pairwise.ts","./node_modules/rxjs/src/internal/operators/publishBehavior.ts","./node_modules/rxjs/src/internal/operators/publishLast.ts","./node_modules/rxjs/src/internal/operators/publishReplay.ts","./node_modules/rxjs/src/internal/operators/raceWith.ts","./node_modules/rxjs/src/internal/operators/repeat.ts","./node_modules/rxjs/src/internal/operators/repeatWhen.ts","./node_modules/rxjs/src/internal/operators/retry.ts","./node_modules/rxjs/src/internal/operators/retryWhen.ts","./node_modules/rxjs/src/internal/operators/sample.ts","./node_modules/rxjs/src/internal/operators/sampleTime.ts","./node_modules/rxjs/src/internal/operators/sequenceEqual.ts","./node_modules/rxjs/src/internal/operators/single.ts","./node_modules/rxjs/src/internal/operators/skipLast.ts","./node_modules/rxjs/src/internal/operators/skipUntil.ts","./node_modules/rxjs/src/internal/operators/skipWhile.ts","./node_modules/rxjs/src/internal/operators/switchAll.ts","./node_modules/rxjs/src/internal/operators/switchMapTo.ts","./node_modules/rxjs/src/internal/operators/switchScan.ts","./node_modules/rxjs/src/internal/operators/throttle.ts","./node_modules/rxjs/src/internal/operators/throttleTime.ts","./node_modules/rxjs/src/internal/operators/timeInterval.ts","./node_modules/rxjs/src/internal/operators/timeoutWith.ts","./node_modules/rxjs/src/internal/operators/timestamp.ts","./node_modules/rxjs/src/internal/operators/window.ts","./node_modules/rxjs/src/internal/operators/windowCount.ts","./node_modules/rxjs/src/internal/operators/windowTime.ts","./node_modules/rxjs/src/internal/operators/windowToggle.ts","./node_modules/rxjs/src/internal/operators/windowWhen.ts","./node_modules/rxjs/src/internal/operators/zipAll.ts","./node_modules/rxjs/src/internal/operators/zipWith.ts","./node_modules/rxjs/src/internal/operators/zip.ts","./node_modules/rxjs/src/internal/BehaviorSubject.ts","./node_modules/rxjs/src/internal/Notification.ts","./node_modules/rxjs/src/internal/Observable.ts","./node_modules/rxjs/src/internal/ReplaySubject.ts","./node_modules/rxjs/src/internal/Scheduler.ts","./node_modules/rxjs/src/internal/Subject.ts","./node_modules/rxjs/src/internal/NotificationFactories.ts","./node_modules/rxjs/src/internal/Subscriber.ts","./node_modules/rxjs/src/internal/Subscription.ts","./node_modules/rxjs/src/internal/config.ts","./node_modules/rxjs/src/internal/firstValueFrom.ts","./node_modules/rxjs/src/internal/observable/ConnectableObservable.ts","./node_modules/rxjs/src/internal/observable/combineLatest.ts","./node_modules/rxjs/src/internal/observable/concat.ts","./node_modules/rxjs/src/internal/observable/defer.ts","./node_modules/rxjs/src/internal/observable/empty.ts","./node_modules/rxjs/src/internal/observable/forkJoin.ts","./node_modules/rxjs/src/internal/observable/from.ts","./node_modules/rxjs/src/internal/observable/fromEvent.ts","./node_modules/rxjs/src/internal/observable/innerFrom.ts","./node_modules/rxjs/src/internal/observable/interval.ts","./node_modules/rxjs/src/internal/observable/merge.ts","./node_modules/rxjs/src/internal/observable/never.ts","./node_modules/rxjs/src/internal/observable/of.ts","./node_modules/rxjs/src/internal/observable/throwError.ts","./node_modules/rxjs/src/internal/observable/timer.ts","./node_modules/rxjs/src/internal/observable/zip.ts","./node_modules/rxjs/src/internal/operators/OperatorSubscriber.ts","./node_modules/rxjs/src/internal/operators/audit.ts","./node_modules/rxjs/src/internal/operators/auditTime.ts","./node_modules/rxjs/src/internal/operators/catchError.ts","./node_modules/rxjs/src/internal/operators/concatAll.ts","./node_modules/rxjs/src/internal/operators/concatMap.ts","./node_modules/rxjs/src/internal/operators/connect.ts","./node_modules/rxjs/src/internal/observable/fromSubscribable.ts","./node_modules/rxjs/src/internal/operators/debounceTime.ts","./node_modules/rxjs/src/internal/operators/defaultIfEmpty.ts","./node_modules/rxjs/src/internal/operators/delay.ts","./node_modules/rxjs/src/internal/operators/delayWhen.ts","./node_modules/rxjs/src/internal/operators/dematerialize.ts","./node_modules/rxjs/src/internal/operators/distinctUntilChanged.ts","./node_modules/rxjs/src/internal/operators/exhaustMap.ts","./node_modules/rxjs/src/internal/operators/filter.ts","./node_modules/rxjs/src/internal/operators/finalize.ts","./node_modules/rxjs/src/internal/operators/first.ts","./node_modules/rxjs/src/internal/operators/groupBy.ts","./node_modules/rxjs/src/internal/operators/ignoreElements.ts","./node_modules/rxjs/src/internal/operators/last.ts","./node_modules/rxjs/src/internal/operators/map.ts","./node_modules/rxjs/src/internal/operators/mapTo.ts","./node_modules/rxjs/src/internal/operators/materialize.ts","./node_modules/rxjs/src/internal/operators/mergeAll.ts","./node_modules/rxjs/src/internal/operators/mergeInternals.ts","./node_modules/rxjs/src/internal/operators/mergeMap.ts","./node_modules/rxjs/src/internal/operators/multicast.ts","./node_modules/rxjs/src/internal/operators/observeOn.ts","./node_modules/rxjs/src/internal/operators/pluck.ts","./node_modules/rxjs/src/internal/operators/publish.ts","./node_modules/rxjs/src/internal/operators/refCount.ts","./node_modules/rxjs/src/internal/operators/scan.ts","./node_modules/rxjs/src/internal/operators/scanInternals.ts","./node_modules/rxjs/src/internal/operators/share.ts","./node_modules/rxjs/src/internal/operators/shareReplay.ts","./node_modules/rxjs/src/internal/operators/skip.ts","./node_modules/rxjs/src/internal/operators/startWith.ts","./node_modules/rxjs/src/internal/operators/subscribeOn.ts","./node_modules/rxjs/src/internal/operators/switchMap.ts","./node_modules/rxjs/src/internal/operators/take.ts","./node_modules/rxjs/src/internal/operators/takeLast.ts","./node_modules/rxjs/src/internal/operators/takeUntil.ts","./node_modules/rxjs/src/internal/operators/takeWhile.ts","./node_modules/rxjs/src/internal/operators/tap.ts","./node_modules/rxjs/src/internal/operators/throwIfEmpty.ts","./node_modules/rxjs/src/internal/operators/timeout.ts","./node_modules/rxjs/src/internal/operators/withLatestFrom.ts","./node_modules/rxjs/src/internal/scheduled/scheduleIterable.ts","./node_modules/rxjs/src/internal/scheduled/scheduleAsyncIterable.ts","./node_modules/rxjs/src/internal/scheduled/scheduled.ts","./node_modules/rxjs/src/internal/scheduled/scheduleObservable.ts","./node_modules/rxjs/src/internal/scheduled/scheduleArray.ts","./node_modules/rxjs/src/internal/scheduled/schedulePromise.ts","./node_modules/rxjs/src/internal/scheduled/scheduleReadableStreamLike.ts","./node_modules/rxjs/src/internal/scheduler/Action.ts","./node_modules/rxjs/src/internal/scheduler/intervalProvider.ts","./node_modules/rxjs/src/internal/scheduler/AsyncAction.ts","./node_modules/rxjs/src/internal/scheduler/AsyncScheduler.ts","./node_modules/rxjs/src/internal/scheduler/animationFrame.ts","./node_modules/rxjs/src/internal/scheduler/AnimationFrameScheduler.ts","./node_modules/rxjs/src/internal/scheduler/AnimationFrameAction.ts","./node_modules/rxjs/src/internal/scheduler/animationFrameProvider.ts","./node_modules/rxjs/src/internal/util/Immediate.ts","./node_modules/rxjs/src/internal/scheduler/immediateProvider.ts","./node_modules/rxjs/src/internal/scheduler/asap.ts","./node_modules/rxjs/src/internal/scheduler/AsapScheduler.ts","./node_modules/rxjs/src/internal/scheduler/AsapAction.ts","./node_modules/rxjs/src/internal/scheduler/async.ts","./node_modules/rxjs/src/internal/scheduler/dateTimestampProvider.ts","./node_modules/rxjs/src/internal/scheduler/queue.ts","./node_modules/rxjs/src/internal/scheduler/QueueScheduler.ts","./node_modules/rxjs/src/internal/scheduler/QueueAction.ts","./node_modules/rxjs/src/internal/scheduler/timeoutProvider.ts","./node_modules/rxjs/src/internal/symbol/iterator.ts","./node_modules/rxjs/src/internal/symbol/observable.ts","./node_modules/rxjs/src/internal/util/EmptyError.ts","./node_modules/rxjs/src/internal/util/ObjectUnsubscribedError.ts","./node_modules/rxjs/src/internal/util/UnsubscriptionError.ts","./node_modules/rxjs/src/internal/util/args.ts","./node_modules/rxjs/src/internal/util/argsArgArrayOrObject.ts","./node_modules/rxjs/src/internal/util/argsOrArgArray.ts","./node_modules/rxjs/src/internal/util/arrRemove.ts","./node_modules/rxjs/src/internal/util/createErrorClass.ts","./node_modules/rxjs/src/internal/util/createObject.ts","./node_modules/rxjs/src/internal/util/errorContext.ts","./node_modules/rxjs/src/internal/util/executeSchedule.ts","./node_modules/rxjs/src/internal/util/identity.ts","./node_modules/rxjs/src/internal/util/isArrayLike.ts","./node_modules/rxjs/src/internal/util/isAsyncIterable.ts","./node_modules/rxjs/src/internal/util/isDate.ts","./node_modules/rxjs/src/internal/util/isFunction.ts","./node_modules/rxjs/src/internal/util/isInteropObservable.ts","./node_modules/rxjs/src/internal/util/isIterable.ts","./node_modules/rxjs/src/internal/util/isObservable.ts","./node_modules/rxjs/src/internal/util/isPromise.ts","./node_modules/rxjs/src/internal/util/isReadableStreamLike.ts","./node_modules/rxjs/src/internal/util/isScheduler.ts","./node_modules/rxjs/src/internal/util/lift.ts","./node_modules/rxjs/src/internal/util/mapOneOrManyArgs.ts","./node_modules/rxjs/src/internal/util/noop.ts","./node_modules/rxjs/src/internal/util/pipe.ts","./node_modules/rxjs/src/internal/util/reportUnhandledError.ts","./node_modules/rxjs/src/internal/util/throwUnobservableError.ts","./node_modules/zone.js/dist/zone-patch-rxjs.js","./node_modules/zone.js/fesm2015/zone.js","./node_modules/tslib/tslib.es6.js"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n// **********************************************************************************************\n// This code to access the global object is mostly copied from `packages/core/src/util/global.ts`\n\ndeclare global {\n // The definition of `WorkerGlobalScope` must be compatible with the one in `lib.webworker.d.ts`,\n // because all files under `packages/` are compiled together as part of the\n // [legacy-unit-tests-saucelabs][1] CI job, including the `lib.webworker.d.ts` typings brought in\n // by [service-worker/worker/src/service-worker.d.ts][2].\n //\n // [1]:\n // https://github.com/angular/angular/blob/ffeea63f43e6a7fd46be4a8cd5a5d254c98dea08/.circleci/config.yml#L681\n // [2]:\n // https://github.com/angular/angular/blob/316dc2f12ce8931f5ff66fa5f8da21c0d251a337/packages/service-worker/worker/src/service-worker.d.ts#L9\n interface WorkerGlobalScope extends EventTarget, WindowOrWorkerGlobalScope {}\n\n var WorkerGlobalScope: {prototype: WorkerGlobalScope; new (): WorkerGlobalScope;};\n}\n\nconst __globalThis = typeof globalThis !== 'undefined' && globalThis;\nconst __window = typeof window !== 'undefined' && window;\nconst __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&\n self instanceof WorkerGlobalScope && self;\nconst __global = typeof global !== 'undefined' && global;\n// Always use __globalThis if available; this is the spec-defined global variable across all\n// environments.\n// Then fallback to __global first; in Node tests both __global and __window may be defined.\nexport const _global: any = __globalThis || __global || __window || __self;\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\n/** @nodoc */\nexport interface LocalizeFn {\n (messageParts: TemplateStringsArray, ...expressions: readonly any[]): string;\n\n /**\n * A function that converts an input \"message with expressions\" into a translated \"message with\n * expressions\".\n *\n * The conversion may be done in place, modifying the array passed to the function, so\n * don't assume that this has no side-effects.\n *\n * The expressions must be passed in since it might be they need to be reordered for\n * different translations.\n */\n translate?: TranslateFn;\n /**\n * The current locale of the translated messages.\n *\n * The compile-time translation inliner is able to replace the following code:\n *\n * ```\n * typeof $localize !== \"undefined\" && $localize.locale\n * ```\n *\n * with a string literal of the current locale. E.g.\n *\n * ```\n * \"fr\"\n * ```\n */\n locale?: string;\n}\n\n/** @nodoc */\nexport interface TranslateFn {\n (messageParts: TemplateStringsArray,\n expressions: readonly any[]): [TemplateStringsArray, readonly any[]];\n}\n\n/**\n * Tag a template literal string for localization.\n *\n * For example:\n *\n * ```ts\n * $localize `some string to localize`\n * ```\n *\n * **Providing meaning, description and id**\n *\n * You can optionally specify one or more of `meaning`, `description` and `id` for a localized\n * string by pre-pending it with a colon delimited block of the form:\n *\n * ```ts\n * $localize`:meaning|description@@id:source message text`;\n *\n * $localize`:meaning|:source message text`;\n * $localize`:description:source message text`;\n * $localize`:@@id:source message text`;\n * ```\n *\n * This format is the same as that used for `i18n` markers in Angular templates. See the\n * [Angular i18n guide](guide/i18n-common-prepare#mark-text-in-component-template).\n *\n * **Naming placeholders**\n *\n * If the template literal string contains expressions, then the expressions will be automatically\n * associated with placeholder names for you.\n *\n * For example:\n *\n * ```ts\n * $localize `Hi ${name}! There are ${items.length} items.`;\n * ```\n *\n * will generate a message-source of `Hi {$PH}! There are {$PH_1} items`.\n *\n * The recommended practice is to name the placeholder associated with each expression though.\n *\n * Do this by providing the placeholder name wrapped in `:` characters directly after the\n * expression. These placeholder names are stripped out of the rendered localized string.\n *\n * For example, to name the `items.length` expression placeholder `itemCount` you write:\n *\n * ```ts\n * $localize `There are ${items.length}:itemCount: items`;\n * ```\n *\n * **Escaping colon markers**\n *\n * If you need to use a `:` character directly at the start of a tagged string that has no\n * metadata block, or directly after a substitution expression that has no name you must escape\n * the `:` by preceding it with a backslash:\n *\n * For example:\n *\n * ```ts\n * // message has a metadata block so no need to escape colon\n * $localize `:some description::this message starts with a colon (:)`;\n * // no metadata block so the colon must be escaped\n * $localize `\\:this message starts with a colon (:)`;\n * ```\n *\n * ```ts\n * // named substitution so no need to escape colon\n * $localize `${label}:label:: ${}`\n * // anonymous substitution so colon must be escaped\n * $localize `${label}\\: ${}`\n * ```\n *\n * **Processing localized strings:**\n *\n * There are three scenarios:\n *\n * * **compile-time inlining**: the `$localize` tag is transformed at compile time by a\n * transpiler, removing the tag and replacing the template literal string with a translated\n * literal string from a collection of translations provided to the transpilation tool.\n *\n * * **run-time evaluation**: the `$localize` tag is a run-time function that replaces and\n * reorders the parts (static strings and expressions) of the template literal string with strings\n * from a collection of translations loaded at run-time.\n *\n * * **pass-through evaluation**: the `$localize` tag is a run-time function that simply evaluates\n * the original template literal string without applying any translations to the parts. This\n * version is used during development or where there is no need to translate the localized\n * template literals.\n *\n * @param messageParts a collection of the static parts of the template string.\n * @param expressions a collection of the values of each placeholder in the template string.\n * @returns the translated string, with the `messageParts` and `expressions` interleaved together.\n *\n * @globalApi\n * @publicApi\n */\nexport const $localize: LocalizeFn = function(\n messageParts: TemplateStringsArray, ...expressions: readonly any[]) {\n if ($localize.translate) {\n // Don't use array expansion here to avoid the compiler adding `__read()` helper unnecessarily.\n const translation = $localize.translate(messageParts, expressions);\n messageParts = translation[0];\n expressions = translation[1];\n }\n let message = stripBlock(messageParts[0], messageParts.raw[0]);\n for (let i = 1; i < messageParts.length; i++) {\n message += expressions[i - 1] + stripBlock(messageParts[i], messageParts.raw[i]);\n }\n return message;\n};\n\nconst BLOCK_MARKER = ':';\n\n/**\n * Strip a delimited \"block\" from the start of the `messagePart`, if it is found.\n *\n * If a marker character (:) actually appears in the content at the start of a tagged string or\n * after a substitution expression, where a block has not been provided the character must be\n * escaped with a backslash, `\\:`. This function checks for this by looking at the `raw`\n * messagePart, which should still contain the backslash.\n *\n * @param messagePart The cooked message part to process.\n * @param rawMessagePart The raw message part to check.\n * @returns the message part with the placeholder name stripped, if found.\n * @throws an error if the block is unterminated\n */\nfunction stripBlock(messagePart: string, rawMessagePart: string) {\n return rawMessagePart.charAt(0) === BLOCK_MARKER ?\n messagePart.substring(findEndOfBlock(messagePart, rawMessagePart) + 1) :\n messagePart;\n}\n\n/**\n * Find the end of a \"marked block\" indicated by the first non-escaped colon.\n *\n * @param cooked The cooked string (where escaped chars have been processed)\n * @param raw The raw string (where escape sequences are still in place)\n *\n * @returns the index of the end of block marker\n * @throws an error if the block is unterminated\n */\nfunction findEndOfBlock(cooked: string, raw: string): number {\n /***********************************************************************************************\n * This function is repeated in `src/utils/messages.ts` and the two should be kept in sync.\n * The reason is that this file is marked as having side-effects, and if we import `messages.ts`\n * into it, the whole of `src/utils` will be included in this bundle and none of the functions\n * will be tree shaken.\n ***********************************************************************************************/\n for (let cookedIndex = 1, rawIndex = 1; cookedIndex < cooked.length; cookedIndex++, rawIndex++) {\n if (raw[rawIndex] === '\\\\') {\n rawIndex++;\n } else if (cooked[cookedIndex] === BLOCK_MARKER) {\n return cookedIndex;\n }\n }\n throw new Error(`Unterminated $localize metadata block in \"${raw}\".`);\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\nimport {$localize, _global, LocalizeFn} from '../src/localize';\n\nexport {$localize, LocalizeFn, TranslateFn} from '../src/localize';\n\n// Attach $localize to the global context, as a side-effect of this module.\n_global.$localize = $localize;\n\n// `declare global` allows us to escape the current module and place types on the global namespace\ndeclare global {\n /**\n * Tag a template literal string for localization.\n *\n * For example:\n *\n * ```ts\n * $localize `some string to localize`\n * ```\n *\n * **Providing meaning, description and id**\n *\n * You can optionally specify one or more of `meaning`, `description` and `id` for a localized\n * string by pre-pending it with a colon delimited block of the form:\n *\n * ```ts\n * $localize`:meaning|description@@id:source message text`;\n *\n * $localize`:meaning|:source message text`;\n * $localize`:description:source message text`;\n * $localize`:@@id:source message text`;\n * ```\n *\n * This format is the same as that used for `i18n` markers in Angular templates. See the\n * [Angular 18n guide](guide/i18n-common-prepare#mark-text-in-component-template).\n *\n * **Naming placeholders**\n *\n * If the template literal string contains expressions, then the expressions will be automatically\n * associated with placeholder names for you.\n *\n * For example:\n *\n * ```ts\n * $localize `Hi ${name}! There are ${items.length} items.`;\n * ```\n *\n * will generate a message-source of `Hi {$PH}! There are {$PH_1} items`.\n *\n * The recommended practice is to name the placeholder associated with each expression though.\n *\n * Do this by providing the placeholder name wrapped in `:` characters directly after the\n * expression. These placeholder names are stripped out of the rendered localized string.\n *\n * For example, to name the `items.length` expression placeholder `itemCount` you write:\n *\n * ```ts\n * $localize `There are ${items.length}:itemCount: items`;\n * ```\n *\n * **Escaping colon markers**\n *\n * If you need to use a `:` character directly at the start of a tagged string that has no\n * metadata block, or directly after a substitution expression that has no name you must escape\n * the `:` by preceding it with a backslash:\n *\n * For example:\n *\n * ```ts\n * // message has a metadata block so no need to escape colon\n * $localize `:some description::this message starts with a colon (:)`;\n * // no metadata block so the colon must be escaped\n * $localize `\\:this message starts with a colon (:)`;\n * ```\n *\n * ```ts\n * // named substitution so no need to escape colon\n * $localize `${label}:label:: ${}`\n * // anonymous substitution so colon must be escaped\n * $localize `${label}\\: ${}`\n * ```\n *\n * **Processing localized strings:**\n *\n * There are three scenarios:\n *\n * * **compile-time inlining**: the `$localize` tag is transformed at compile time by a\n * transpiler, removing the tag and replacing the template literal string with a translated\n * literal string from a collection of translations provided to the transpilation tool.\n *\n * * **run-time evaluation**: the `$localize` tag is a run-time function that replaces and\n * reorders the parts (static strings and expressions) of the template literal string with strings\n * from a collection of translations loaded at run-time.\n *\n * * **pass-through evaluation**: the `$localize` tag is a run-time function that simply evaluates\n * the original template literal string without applying any translations to the parts. This\n * version is used during development or where there is no need to translate the localized\n * template literals.\n *\n * @param messageParts a collection of the static parts of the template string.\n * @param expressions a collection of the values of each placeholder in the template string.\n * @returns the translated string, with the `messageParts` and `expressions` interleaved together.\n */\n const $localize: LocalizeFn;\n}\n","/***************************************************************************************************\r\n * Load `$localize` onto the global scope - used if i18n tags appear in Angular templates.\r\n */\r\nimport '@angular/localize/init';\r\n/**\r\n * This file includes polyfills needed by Angular and is loaded before the app.\r\n * You can add your own extra polyfills to this file.\r\n *\r\n * This file is divided into 2 sections:\r\n * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers.\r\n * 2. Application imports. Files imported after ZoneJS that should be loaded before your main\r\n * file.\r\n *\r\n * The current setup is for so-called \"evergreen\" browsers; the last versions of browsers that\r\n * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera),\r\n * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile.\r\n *\r\n * Learn more in https://angular.io/guide/browser-support\r\n */\r\n\r\n/***************************************************************************************************\r\n * BROWSER POLYFILLS\r\n */\r\n\r\n/**\r\n * By default, zone.js will patch all possible macroTask and DomEvents\r\n * user can disable parts of macroTask/DomEvents patch by setting following flags\r\n * because those flags need to be set before `zone.js` being loaded, and webpack\r\n * will put import in the top of bundle, so user need to create a separate file\r\n * in this directory (for example: zone-flags.ts), and put the following flags\r\n * into that file, and then add the following code before importing zone.js.\r\n * import './zone-flags.ts';\r\n *\r\n * The flags allowed in zone-flags.ts are listed here.\r\n *\r\n * The following flags will work for all browsers.\r\n *\r\n * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame\r\n * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick\r\n * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames\r\n *\r\n * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js\r\n * with the following flag, it will bypass `zone.js` patch for IE/Edge\r\n *\r\n * (window as any).__Zone_enable_cross_context_check = true;\r\n *\r\n */\r\n\r\n/***************************************************************************************************\r\n * Zone JS is required by default for Angular itself.\r\n */\r\nimport 'zone.js'; // Included with Angular CLI.\r\nimport 'zone.js/dist/zone-patch-rxjs'; // Import RxJS patch to make sure RxJS runs in the correct zone\r\nimport './zone-flags.ts';\r\n\r\n/***************************************************************************************************\r\n * Hammer is a open-source library that can recognize gestures made by touch, mouse and pointerEvents. \r\n */\r\nimport 'hammerjs';\r\n\r\n/***************************************************************************************************\r\n * The Intersection Observer API provides a way to asynchronously observe changes in the intersection of a \r\n * target element with an ancestor element or with a top-level document's viewport. \r\n */\r\n// import 'intersection-observer';\r\n\r\n/***************************************************************************************************\r\n * APPLICATION IMPORTS\r\n */\r\n\r\n// Add global to window, assigning the value of window itself.\r\n(window as any).global = window;\r\n","(window as any).__Zone_disable_requestAnimationFrame = true;\r\n(window as any).__Zone_disable_on_property = true;\r\n(window as any).__Zone_disable_requestAnimationFrame = true;\r\n(window as any).__zone_symbol__UNPATCHED_EVENTS = [\r\n 'load',\r\n 'unload',\r\n 'scroll',\r\n 'mousedown',\r\n 'mouseup',\r\n 'mouseover',\r\n 'mouseout',\r\n 'mousemove',\r\n 'mouseenter',\r\n 'click',\r\n 'dbclick',\r\n 'resize',\r\n 'pointerover',\r\n 'pointerenter',\r\n 'pointerdown',\r\n 'pointermove',\r\n 'pointerup',\r\n 'pointerout',\r\n 'pointerleave'\r\n];\r\n","/*! Hammer.JS - v2.0.7 - 2016-04-22\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n(function(window, document, exportName, undefined) {\n 'use strict';\n\nvar VENDOR_PREFIXES = ['', 'webkit', 'Moz', 'MS', 'ms', 'o'];\nvar TEST_ELEMENT = document.createElement('div');\n\nvar TYPE_FUNCTION = 'function';\n\nvar round = Math.round;\nvar abs = Math.abs;\nvar now = Date.now;\n\n/**\n * set a timeout with a given scope\n * @param {Function} fn\n * @param {Number} timeout\n * @param {Object} context\n * @returns {number}\n */\nfunction setTimeoutContext(fn, timeout, context) {\n return setTimeout(bindFn(fn, context), timeout);\n}\n\n/**\n * if the argument is an array, we want to execute the fn on each entry\n * if it aint an array we don't want to do a thing.\n * this is used by all the methods that accept a single and array argument.\n * @param {*|Array} arg\n * @param {String} fn\n * @param {Object} [context]\n * @returns {Boolean}\n */\nfunction invokeArrayArg(arg, fn, context) {\n if (Array.isArray(arg)) {\n each(arg, context[fn], context);\n return true;\n }\n return false;\n}\n\n/**\n * walk objects and arrays\n * @param {Object} obj\n * @param {Function} iterator\n * @param {Object} context\n */\nfunction each(obj, iterator, context) {\n var i;\n\n if (!obj) {\n return;\n }\n\n if (obj.forEach) {\n obj.forEach(iterator, context);\n } else if (obj.length !== undefined) {\n i = 0;\n while (i < obj.length) {\n iterator.call(context, obj[i], i, obj);\n i++;\n }\n } else {\n for (i in obj) {\n obj.hasOwnProperty(i) && iterator.call(context, obj[i], i, obj);\n }\n }\n}\n\n/**\n * wrap a method with a deprecation warning and stack trace\n * @param {Function} method\n * @param {String} name\n * @param {String} message\n * @returns {Function} A new function wrapping the supplied method.\n */\nfunction deprecate(method, name, message) {\n var deprecationMessage = 'DEPRECATED METHOD: ' + name + '\\n' + message + ' AT \\n';\n return function() {\n var e = new Error('get-stack-trace');\n var stack = e && e.stack ? e.stack.replace(/^[^\\(]+?[\\n$]/gm, '')\n .replace(/^\\s+at\\s+/gm, '')\n .replace(/^Object.\\s*\\(/gm, '{anonymous}()@') : 'Unknown Stack Trace';\n\n var log = window.console && (window.console.warn || window.console.log);\n if (log) {\n log.call(window.console, deprecationMessage, stack);\n }\n return method.apply(this, arguments);\n };\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} target\n * @param {...Object} objects_to_assign\n * @returns {Object} target\n */\nvar assign;\nif (typeof Object.assign !== 'function') {\n assign = function assign(target) {\n if (target === undefined || target === null) {\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var output = Object(target);\n for (var index = 1; index < arguments.length; index++) {\n var source = arguments[index];\n if (source !== undefined && source !== null) {\n for (var nextKey in source) {\n if (source.hasOwnProperty(nextKey)) {\n output[nextKey] = source[nextKey];\n }\n }\n }\n }\n return output;\n };\n} else {\n assign = Object.assign;\n}\n\n/**\n * extend object.\n * means that properties in dest will be overwritten by the ones in src.\n * @param {Object} dest\n * @param {Object} src\n * @param {Boolean} [merge=false]\n * @returns {Object} dest\n */\nvar extend = deprecate(function extend(dest, src, merge) {\n var keys = Object.keys(src);\n var i = 0;\n while (i < keys.length) {\n if (!merge || (merge && dest[keys[i]] === undefined)) {\n dest[keys[i]] = src[keys[i]];\n }\n i++;\n }\n return dest;\n}, 'extend', 'Use `assign`.');\n\n/**\n * merge the values from src in the dest.\n * means that properties that exist in dest will not be overwritten by src\n * @param {Object} dest\n * @param {Object} src\n * @returns {Object} dest\n */\nvar merge = deprecate(function merge(dest, src) {\n return extend(dest, src, true);\n}, 'merge', 'Use `assign`.');\n\n/**\n * simple class inheritance\n * @param {Function} child\n * @param {Function} base\n * @param {Object} [properties]\n */\nfunction inherit(child, base, properties) {\n var baseP = base.prototype,\n childP;\n\n childP = child.prototype = Object.create(baseP);\n childP.constructor = child;\n childP._super = baseP;\n\n if (properties) {\n assign(childP, properties);\n }\n}\n\n/**\n * simple function bind\n * @param {Function} fn\n * @param {Object} context\n * @returns {Function}\n */\nfunction bindFn(fn, context) {\n return function boundFn() {\n return fn.apply(context, arguments);\n };\n}\n\n/**\n * let a boolean value also be a function that must return a boolean\n * this first item in args will be used as the context\n * @param {Boolean|Function} val\n * @param {Array} [args]\n * @returns {Boolean}\n */\nfunction boolOrFn(val, args) {\n if (typeof val == TYPE_FUNCTION) {\n return val.apply(args ? args[0] || undefined : undefined, args);\n }\n return val;\n}\n\n/**\n * use the val2 when val1 is undefined\n * @param {*} val1\n * @param {*} val2\n * @returns {*}\n */\nfunction ifUndefined(val1, val2) {\n return (val1 === undefined) ? val2 : val1;\n}\n\n/**\n * addEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction addEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.addEventListener(type, handler, false);\n });\n}\n\n/**\n * removeEventListener with multiple events at once\n * @param {EventTarget} target\n * @param {String} types\n * @param {Function} handler\n */\nfunction removeEventListeners(target, types, handler) {\n each(splitStr(types), function(type) {\n target.removeEventListener(type, handler, false);\n });\n}\n\n/**\n * find if a node is in the given parent\n * @method hasParent\n * @param {HTMLElement} node\n * @param {HTMLElement} parent\n * @return {Boolean} found\n */\nfunction hasParent(node, parent) {\n while (node) {\n if (node == parent) {\n return true;\n }\n node = node.parentNode;\n }\n return false;\n}\n\n/**\n * small indexOf wrapper\n * @param {String} str\n * @param {String} find\n * @returns {Boolean} found\n */\nfunction inStr(str, find) {\n return str.indexOf(find) > -1;\n}\n\n/**\n * split string on whitespace\n * @param {String} str\n * @returns {Array} words\n */\nfunction splitStr(str) {\n return str.trim().split(/\\s+/g);\n}\n\n/**\n * find if a array contains the object using indexOf or a simple polyFill\n * @param {Array} src\n * @param {String} find\n * @param {String} [findByKey]\n * @return {Boolean|Number} false when not found, or the index\n */\nfunction inArray(src, find, findByKey) {\n if (src.indexOf && !findByKey) {\n return src.indexOf(find);\n } else {\n var i = 0;\n while (i < src.length) {\n if ((findByKey && src[i][findByKey] == find) || (!findByKey && src[i] === find)) {\n return i;\n }\n i++;\n }\n return -1;\n }\n}\n\n/**\n * convert array-like objects to real arrays\n * @param {Object} obj\n * @returns {Array}\n */\nfunction toArray(obj) {\n return Array.prototype.slice.call(obj, 0);\n}\n\n/**\n * unique array with objects based on a key (like 'id') or just by the array's value\n * @param {Array} src [{id:1},{id:2},{id:1}]\n * @param {String} [key]\n * @param {Boolean} [sort=False]\n * @returns {Array} [{id:1},{id:2}]\n */\nfunction uniqueArray(src, key, sort) {\n var results = [];\n var values = [];\n var i = 0;\n\n while (i < src.length) {\n var val = key ? src[i][key] : src[i];\n if (inArray(values, val) < 0) {\n results.push(src[i]);\n }\n values[i] = val;\n i++;\n }\n\n if (sort) {\n if (!key) {\n results = results.sort();\n } else {\n results = results.sort(function sortUniqueArray(a, b) {\n return a[key] > b[key];\n });\n }\n }\n\n return results;\n}\n\n/**\n * get the prefixed property\n * @param {Object} obj\n * @param {String} property\n * @returns {String|Undefined} prefixed\n */\nfunction prefixed(obj, property) {\n var prefix, prop;\n var camelProp = property[0].toUpperCase() + property.slice(1);\n\n var i = 0;\n while (i < VENDOR_PREFIXES.length) {\n prefix = VENDOR_PREFIXES[i];\n prop = (prefix) ? prefix + camelProp : property;\n\n if (prop in obj) {\n return prop;\n }\n i++;\n }\n return undefined;\n}\n\n/**\n * get a unique id\n * @returns {number} uniqueId\n */\nvar _uniqueId = 1;\nfunction uniqueId() {\n return _uniqueId++;\n}\n\n/**\n * get the window object of an element\n * @param {HTMLElement} element\n * @returns {DocumentView|Window}\n */\nfunction getWindowForElement(element) {\n var doc = element.ownerDocument || element;\n return (doc.defaultView || doc.parentWindow || window);\n}\n\nvar MOBILE_REGEX = /mobile|tablet|ip(ad|hone|od)|android/i;\n\nvar SUPPORT_TOUCH = ('ontouchstart' in window);\nvar SUPPORT_POINTER_EVENTS = prefixed(window, 'PointerEvent') !== undefined;\nvar SUPPORT_ONLY_TOUCH = SUPPORT_TOUCH && MOBILE_REGEX.test(navigator.userAgent);\n\nvar INPUT_TYPE_TOUCH = 'touch';\nvar INPUT_TYPE_PEN = 'pen';\nvar INPUT_TYPE_MOUSE = 'mouse';\nvar INPUT_TYPE_KINECT = 'kinect';\n\nvar COMPUTE_INTERVAL = 25;\n\nvar INPUT_START = 1;\nvar INPUT_MOVE = 2;\nvar INPUT_END = 4;\nvar INPUT_CANCEL = 8;\n\nvar DIRECTION_NONE = 1;\nvar DIRECTION_LEFT = 2;\nvar DIRECTION_RIGHT = 4;\nvar DIRECTION_UP = 8;\nvar DIRECTION_DOWN = 16;\n\nvar DIRECTION_HORIZONTAL = DIRECTION_LEFT | DIRECTION_RIGHT;\nvar DIRECTION_VERTICAL = DIRECTION_UP | DIRECTION_DOWN;\nvar DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;\n\nvar PROPS_XY = ['x', 'y'];\nvar PROPS_CLIENT_XY = ['clientX', 'clientY'];\n\n/**\n * create new input type manager\n * @param {Manager} manager\n * @param {Function} callback\n * @returns {Input}\n * @constructor\n */\nfunction Input(manager, callback) {\n var self = this;\n this.manager = manager;\n this.callback = callback;\n this.element = manager.element;\n this.target = manager.options.inputTarget;\n\n // smaller wrapper around the handler, for the scope and the enabled state of the manager,\n // so when disabled the input events are completely bypassed.\n this.domHandler = function(ev) {\n if (boolOrFn(manager.options.enable, [manager])) {\n self.handler(ev);\n }\n };\n\n this.init();\n\n}\n\nInput.prototype = {\n /**\n * should handle the inputEvent data and trigger the callback\n * @virtual\n */\n handler: function() { },\n\n /**\n * bind the events\n */\n init: function() {\n this.evEl && addEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && addEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && addEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n },\n\n /**\n * unbind the events\n */\n destroy: function() {\n this.evEl && removeEventListeners(this.element, this.evEl, this.domHandler);\n this.evTarget && removeEventListeners(this.target, this.evTarget, this.domHandler);\n this.evWin && removeEventListeners(getWindowForElement(this.element), this.evWin, this.domHandler);\n }\n};\n\n/**\n * create new input type manager\n * called by the Manager constructor\n * @param {Hammer} manager\n * @returns {Input}\n */\nfunction createInputInstance(manager) {\n var Type;\n var inputClass = manager.options.inputClass;\n\n if (inputClass) {\n Type = inputClass;\n } else if (SUPPORT_POINTER_EVENTS) {\n Type = PointerEventInput;\n } else if (SUPPORT_ONLY_TOUCH) {\n Type = TouchInput;\n } else if (!SUPPORT_TOUCH) {\n Type = MouseInput;\n } else {\n Type = TouchMouseInput;\n }\n return new (Type)(manager, inputHandler);\n}\n\n/**\n * handle input events\n * @param {Manager} manager\n * @param {String} eventType\n * @param {Object} input\n */\nfunction inputHandler(manager, eventType, input) {\n var pointersLen = input.pointers.length;\n var changedPointersLen = input.changedPointers.length;\n var isFirst = (eventType & INPUT_START && (pointersLen - changedPointersLen === 0));\n var isFinal = (eventType & (INPUT_END | INPUT_CANCEL) && (pointersLen - changedPointersLen === 0));\n\n input.isFirst = !!isFirst;\n input.isFinal = !!isFinal;\n\n if (isFirst) {\n manager.session = {};\n }\n\n // source event is the normalized value of the domEvents\n // like 'touchstart, mouseup, pointerdown'\n input.eventType = eventType;\n\n // compute scale, rotation etc\n computeInputData(manager, input);\n\n // emit secret event\n manager.emit('hammer.input', input);\n\n manager.recognize(input);\n manager.session.prevInput = input;\n}\n\n/**\n * extend the data with some usable properties like scale, rotate, velocity etc\n * @param {Object} manager\n * @param {Object} input\n */\nfunction computeInputData(manager, input) {\n var session = manager.session;\n var pointers = input.pointers;\n var pointersLength = pointers.length;\n\n // store the first input to calculate the distance and direction\n if (!session.firstInput) {\n session.firstInput = simpleCloneInputData(input);\n }\n\n // to compute scale and rotation we need to store the multiple touches\n if (pointersLength > 1 && !session.firstMultiple) {\n session.firstMultiple = simpleCloneInputData(input);\n } else if (pointersLength === 1) {\n session.firstMultiple = false;\n }\n\n var firstInput = session.firstInput;\n var firstMultiple = session.firstMultiple;\n var offsetCenter = firstMultiple ? firstMultiple.center : firstInput.center;\n\n var center = input.center = getCenter(pointers);\n input.timeStamp = now();\n input.deltaTime = input.timeStamp - firstInput.timeStamp;\n\n input.angle = getAngle(offsetCenter, center);\n input.distance = getDistance(offsetCenter, center);\n\n computeDeltaXY(session, input);\n input.offsetDirection = getDirection(input.deltaX, input.deltaY);\n\n var overallVelocity = getVelocity(input.deltaTime, input.deltaX, input.deltaY);\n input.overallVelocityX = overallVelocity.x;\n input.overallVelocityY = overallVelocity.y;\n input.overallVelocity = (abs(overallVelocity.x) > abs(overallVelocity.y)) ? overallVelocity.x : overallVelocity.y;\n\n input.scale = firstMultiple ? getScale(firstMultiple.pointers, pointers) : 1;\n input.rotation = firstMultiple ? getRotation(firstMultiple.pointers, pointers) : 0;\n\n input.maxPointers = !session.prevInput ? input.pointers.length : ((input.pointers.length >\n session.prevInput.maxPointers) ? input.pointers.length : session.prevInput.maxPointers);\n\n computeIntervalInputData(session, input);\n\n // find the correct target\n var target = manager.element;\n if (hasParent(input.srcEvent.target, target)) {\n target = input.srcEvent.target;\n }\n input.target = target;\n}\n\nfunction computeDeltaXY(session, input) {\n var center = input.center;\n var offset = session.offsetDelta || {};\n var prevDelta = session.prevDelta || {};\n var prevInput = session.prevInput || {};\n\n if (input.eventType === INPUT_START || prevInput.eventType === INPUT_END) {\n prevDelta = session.prevDelta = {\n x: prevInput.deltaX || 0,\n y: prevInput.deltaY || 0\n };\n\n offset = session.offsetDelta = {\n x: center.x,\n y: center.y\n };\n }\n\n input.deltaX = prevDelta.x + (center.x - offset.x);\n input.deltaY = prevDelta.y + (center.y - offset.y);\n}\n\n/**\n * velocity is calculated every x ms\n * @param {Object} session\n * @param {Object} input\n */\nfunction computeIntervalInputData(session, input) {\n var last = session.lastInterval || input,\n deltaTime = input.timeStamp - last.timeStamp,\n velocity, velocityX, velocityY, direction;\n\n if (input.eventType != INPUT_CANCEL && (deltaTime > COMPUTE_INTERVAL || last.velocity === undefined)) {\n var deltaX = input.deltaX - last.deltaX;\n var deltaY = input.deltaY - last.deltaY;\n\n var v = getVelocity(deltaTime, deltaX, deltaY);\n velocityX = v.x;\n velocityY = v.y;\n velocity = (abs(v.x) > abs(v.y)) ? v.x : v.y;\n direction = getDirection(deltaX, deltaY);\n\n session.lastInterval = input;\n } else {\n // use latest velocity info if it doesn't overtake a minimum period\n velocity = last.velocity;\n velocityX = last.velocityX;\n velocityY = last.velocityY;\n direction = last.direction;\n }\n\n input.velocity = velocity;\n input.velocityX = velocityX;\n input.velocityY = velocityY;\n input.direction = direction;\n}\n\n/**\n * create a simple clone from the input used for storage of firstInput and firstMultiple\n * @param {Object} input\n * @returns {Object} clonedInputData\n */\nfunction simpleCloneInputData(input) {\n // make a simple copy of the pointers because we will get a reference if we don't\n // we only need clientXY for the calculations\n var pointers = [];\n var i = 0;\n while (i < input.pointers.length) {\n pointers[i] = {\n clientX: round(input.pointers[i].clientX),\n clientY: round(input.pointers[i].clientY)\n };\n i++;\n }\n\n return {\n timeStamp: now(),\n pointers: pointers,\n center: getCenter(pointers),\n deltaX: input.deltaX,\n deltaY: input.deltaY\n };\n}\n\n/**\n * get the center of all the pointers\n * @param {Array} pointers\n * @return {Object} center contains `x` and `y` properties\n */\nfunction getCenter(pointers) {\n var pointersLength = pointers.length;\n\n // no need to loop when only one touch\n if (pointersLength === 1) {\n return {\n x: round(pointers[0].clientX),\n y: round(pointers[0].clientY)\n };\n }\n\n var x = 0, y = 0, i = 0;\n while (i < pointersLength) {\n x += pointers[i].clientX;\n y += pointers[i].clientY;\n i++;\n }\n\n return {\n x: round(x / pointersLength),\n y: round(y / pointersLength)\n };\n}\n\n/**\n * calculate the velocity between two points. unit is in px per ms.\n * @param {Number} deltaTime\n * @param {Number} x\n * @param {Number} y\n * @return {Object} velocity `x` and `y`\n */\nfunction getVelocity(deltaTime, x, y) {\n return {\n x: x / deltaTime || 0,\n y: y / deltaTime || 0\n };\n}\n\n/**\n * get the direction between two points\n * @param {Number} x\n * @param {Number} y\n * @return {Number} direction\n */\nfunction getDirection(x, y) {\n if (x === y) {\n return DIRECTION_NONE;\n }\n\n if (abs(x) >= abs(y)) {\n return x < 0 ? DIRECTION_LEFT : DIRECTION_RIGHT;\n }\n return y < 0 ? DIRECTION_UP : DIRECTION_DOWN;\n}\n\n/**\n * calculate the absolute distance between two points\n * @param {Object} p1 {x, y}\n * @param {Object} p2 {x, y}\n * @param {Array} [props] containing x and y keys\n * @return {Number} distance\n */\nfunction getDistance(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n\n return Math.sqrt((x * x) + (y * y));\n}\n\n/**\n * calculate the angle between two coordinates\n * @param {Object} p1\n * @param {Object} p2\n * @param {Array} [props] containing x and y keys\n * @return {Number} angle\n */\nfunction getAngle(p1, p2, props) {\n if (!props) {\n props = PROPS_XY;\n }\n var x = p2[props[0]] - p1[props[0]],\n y = p2[props[1]] - p1[props[1]];\n return Math.atan2(y, x) * 180 / Math.PI;\n}\n\n/**\n * calculate the rotation degrees between two pointersets\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} rotation\n */\nfunction getRotation(start, end) {\n return getAngle(end[1], end[0], PROPS_CLIENT_XY) + getAngle(start[1], start[0], PROPS_CLIENT_XY);\n}\n\n/**\n * calculate the scale factor between two pointersets\n * no scale is 1, and goes down to 0 when pinched together, and bigger when pinched out\n * @param {Array} start array of pointers\n * @param {Array} end array of pointers\n * @return {Number} scale\n */\nfunction getScale(start, end) {\n return getDistance(end[0], end[1], PROPS_CLIENT_XY) / getDistance(start[0], start[1], PROPS_CLIENT_XY);\n}\n\nvar MOUSE_INPUT_MAP = {\n mousedown: INPUT_START,\n mousemove: INPUT_MOVE,\n mouseup: INPUT_END\n};\n\nvar MOUSE_ELEMENT_EVENTS = 'mousedown';\nvar MOUSE_WINDOW_EVENTS = 'mousemove mouseup';\n\n/**\n * Mouse events input\n * @constructor\n * @extends Input\n */\nfunction MouseInput() {\n this.evEl = MOUSE_ELEMENT_EVENTS;\n this.evWin = MOUSE_WINDOW_EVENTS;\n\n this.pressed = false; // mousedown state\n\n Input.apply(this, arguments);\n}\n\ninherit(MouseInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function MEhandler(ev) {\n var eventType = MOUSE_INPUT_MAP[ev.type];\n\n // on start we want to have the left mouse button down\n if (eventType & INPUT_START && ev.button === 0) {\n this.pressed = true;\n }\n\n if (eventType & INPUT_MOVE && ev.which !== 1) {\n eventType = INPUT_END;\n }\n\n // mouse must be down\n if (!this.pressed) {\n return;\n }\n\n if (eventType & INPUT_END) {\n this.pressed = false;\n }\n\n this.callback(this.manager, eventType, {\n pointers: [ev],\n changedPointers: [ev],\n pointerType: INPUT_TYPE_MOUSE,\n srcEvent: ev\n });\n }\n});\n\nvar POINTER_INPUT_MAP = {\n pointerdown: INPUT_START,\n pointermove: INPUT_MOVE,\n pointerup: INPUT_END,\n pointercancel: INPUT_CANCEL,\n pointerout: INPUT_CANCEL\n};\n\n// in IE10 the pointer types is defined as an enum\nvar IE10_POINTER_TYPE_ENUM = {\n 2: INPUT_TYPE_TOUCH,\n 3: INPUT_TYPE_PEN,\n 4: INPUT_TYPE_MOUSE,\n 5: INPUT_TYPE_KINECT // see https://twitter.com/jacobrossi/status/480596438489890816\n};\n\nvar POINTER_ELEMENT_EVENTS = 'pointerdown';\nvar POINTER_WINDOW_EVENTS = 'pointermove pointerup pointercancel';\n\n// IE10 has prefixed support, and case-sensitive\nif (window.MSPointerEvent && !window.PointerEvent) {\n POINTER_ELEMENT_EVENTS = 'MSPointerDown';\n POINTER_WINDOW_EVENTS = 'MSPointerMove MSPointerUp MSPointerCancel';\n}\n\n/**\n * Pointer events input\n * @constructor\n * @extends Input\n */\nfunction PointerEventInput() {\n this.evEl = POINTER_ELEMENT_EVENTS;\n this.evWin = POINTER_WINDOW_EVENTS;\n\n Input.apply(this, arguments);\n\n this.store = (this.manager.session.pointerEvents = []);\n}\n\ninherit(PointerEventInput, Input, {\n /**\n * handle mouse events\n * @param {Object} ev\n */\n handler: function PEhandler(ev) {\n var store = this.store;\n var removePointer = false;\n\n var eventTypeNormalized = ev.type.toLowerCase().replace('ms', '');\n var eventType = POINTER_INPUT_MAP[eventTypeNormalized];\n var pointerType = IE10_POINTER_TYPE_ENUM[ev.pointerType] || ev.pointerType;\n\n var isTouch = (pointerType == INPUT_TYPE_TOUCH);\n\n // get index of the event in the store\n var storeIndex = inArray(store, ev.pointerId, 'pointerId');\n\n // start and mouse must be down\n if (eventType & INPUT_START && (ev.button === 0 || isTouch)) {\n if (storeIndex < 0) {\n store.push(ev);\n storeIndex = store.length - 1;\n }\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n removePointer = true;\n }\n\n // it not found, so the pointer hasn't been down (so it's probably a hover)\n if (storeIndex < 0) {\n return;\n }\n\n // update the event in the store\n store[storeIndex] = ev;\n\n this.callback(this.manager, eventType, {\n pointers: store,\n changedPointers: [ev],\n pointerType: pointerType,\n srcEvent: ev\n });\n\n if (removePointer) {\n // remove from the store\n store.splice(storeIndex, 1);\n }\n }\n});\n\nvar SINGLE_TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar SINGLE_TOUCH_TARGET_EVENTS = 'touchstart';\nvar SINGLE_TOUCH_WINDOW_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Touch events input\n * @constructor\n * @extends Input\n */\nfunction SingleTouchInput() {\n this.evTarget = SINGLE_TOUCH_TARGET_EVENTS;\n this.evWin = SINGLE_TOUCH_WINDOW_EVENTS;\n this.started = false;\n\n Input.apply(this, arguments);\n}\n\ninherit(SingleTouchInput, Input, {\n handler: function TEhandler(ev) {\n var type = SINGLE_TOUCH_INPUT_MAP[ev.type];\n\n // should we handle the touch events?\n if (type === INPUT_START) {\n this.started = true;\n }\n\n if (!this.started) {\n return;\n }\n\n var touches = normalizeSingleTouches.call(this, ev, type);\n\n // when done, reset the started state\n if (type & (INPUT_END | INPUT_CANCEL) && touches[0].length - touches[1].length === 0) {\n this.started = false;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction normalizeSingleTouches(ev, type) {\n var all = toArray(ev.touches);\n var changed = toArray(ev.changedTouches);\n\n if (type & (INPUT_END | INPUT_CANCEL)) {\n all = uniqueArray(all.concat(changed), 'identifier', true);\n }\n\n return [all, changed];\n}\n\nvar TOUCH_INPUT_MAP = {\n touchstart: INPUT_START,\n touchmove: INPUT_MOVE,\n touchend: INPUT_END,\n touchcancel: INPUT_CANCEL\n};\n\nvar TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';\n\n/**\n * Multi-user touch events input\n * @constructor\n * @extends Input\n */\nfunction TouchInput() {\n this.evTarget = TOUCH_TARGET_EVENTS;\n this.targetIds = {};\n\n Input.apply(this, arguments);\n}\n\ninherit(TouchInput, Input, {\n handler: function MTEhandler(ev) {\n var type = TOUCH_INPUT_MAP[ev.type];\n var touches = getTouches.call(this, ev, type);\n if (!touches) {\n return;\n }\n\n this.callback(this.manager, type, {\n pointers: touches[0],\n changedPointers: touches[1],\n pointerType: INPUT_TYPE_TOUCH,\n srcEvent: ev\n });\n }\n});\n\n/**\n * @this {TouchInput}\n * @param {Object} ev\n * @param {Number} type flag\n * @returns {undefined|Array} [all, changed]\n */\nfunction getTouches(ev, type) {\n var allTouches = toArray(ev.touches);\n var targetIds = this.targetIds;\n\n // when there is only one touch, the process can be simplified\n if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {\n targetIds[allTouches[0].identifier] = true;\n return [allTouches, allTouches];\n }\n\n var i,\n targetTouches,\n changedTouches = toArray(ev.changedTouches),\n changedTargetTouches = [],\n target = this.target;\n\n // get target touches from touches\n targetTouches = allTouches.filter(function(touch) {\n return hasParent(touch.target, target);\n });\n\n // collect touches\n if (type === INPUT_START) {\n i = 0;\n while (i < targetTouches.length) {\n targetIds[targetTouches[i].identifier] = true;\n i++;\n }\n }\n\n // filter changed touches to only contain touches that exist in the collected target ids\n i = 0;\n while (i < changedTouches.length) {\n if (targetIds[changedTouches[i].identifier]) {\n changedTargetTouches.push(changedTouches[i]);\n }\n\n // cleanup removed touches\n if (type & (INPUT_END | INPUT_CANCEL)) {\n delete targetIds[changedTouches[i].identifier];\n }\n i++;\n }\n\n if (!changedTargetTouches.length) {\n return;\n }\n\n return [\n // merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'\n uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),\n changedTargetTouches\n ];\n}\n\n/**\n * Combined touch and mouse input\n *\n * Touch has a higher priority then mouse, and while touching no mouse events are allowed.\n * This because touch devices also emit mouse events while doing a touch.\n *\n * @constructor\n * @extends Input\n */\n\nvar DEDUP_TIMEOUT = 2500;\nvar DEDUP_DISTANCE = 25;\n\nfunction TouchMouseInput() {\n Input.apply(this, arguments);\n\n var handler = bindFn(this.handler, this);\n this.touch = new TouchInput(this.manager, handler);\n this.mouse = new MouseInput(this.manager, handler);\n\n this.primaryTouch = null;\n this.lastTouches = [];\n}\n\ninherit(TouchMouseInput, Input, {\n /**\n * handle mouse and touch events\n * @param {Hammer} manager\n * @param {String} inputEvent\n * @param {Object} inputData\n */\n handler: function TMEhandler(manager, inputEvent, inputData) {\n var isTouch = (inputData.pointerType == INPUT_TYPE_TOUCH),\n isMouse = (inputData.pointerType == INPUT_TYPE_MOUSE);\n\n if (isMouse && inputData.sourceCapabilities && inputData.sourceCapabilities.firesTouchEvents) {\n return;\n }\n\n // when we're in a touch event, record touches to de-dupe synthetic mouse event\n if (isTouch) {\n recordTouches.call(this, inputEvent, inputData);\n } else if (isMouse && isSyntheticEvent.call(this, inputData)) {\n return;\n }\n\n this.callback(manager, inputEvent, inputData);\n },\n\n /**\n * remove the event listeners\n */\n destroy: function destroy() {\n this.touch.destroy();\n this.mouse.destroy();\n }\n});\n\nfunction recordTouches(eventType, eventData) {\n if (eventType & INPUT_START) {\n this.primaryTouch = eventData.changedPointers[0].identifier;\n setLastTouch.call(this, eventData);\n } else if (eventType & (INPUT_END | INPUT_CANCEL)) {\n setLastTouch.call(this, eventData);\n }\n}\n\nfunction setLastTouch(eventData) {\n var touch = eventData.changedPointers[0];\n\n if (touch.identifier === this.primaryTouch) {\n var lastTouch = {x: touch.clientX, y: touch.clientY};\n this.lastTouches.push(lastTouch);\n var lts = this.lastTouches;\n var removeLastTouch = function() {\n var i = lts.indexOf(lastTouch);\n if (i > -1) {\n lts.splice(i, 1);\n }\n };\n setTimeout(removeLastTouch, DEDUP_TIMEOUT);\n }\n}\n\nfunction isSyntheticEvent(eventData) {\n var x = eventData.srcEvent.clientX, y = eventData.srcEvent.clientY;\n for (var i = 0; i < this.lastTouches.length; i++) {\n var t = this.lastTouches[i];\n var dx = Math.abs(x - t.x), dy = Math.abs(y - t.y);\n if (dx <= DEDUP_DISTANCE && dy <= DEDUP_DISTANCE) {\n return true;\n }\n }\n return false;\n}\n\nvar PREFIXED_TOUCH_ACTION = prefixed(TEST_ELEMENT.style, 'touchAction');\nvar NATIVE_TOUCH_ACTION = PREFIXED_TOUCH_ACTION !== undefined;\n\n// magical touchAction value\nvar TOUCH_ACTION_COMPUTE = 'compute';\nvar TOUCH_ACTION_AUTO = 'auto';\nvar TOUCH_ACTION_MANIPULATION = 'manipulation'; // not implemented\nvar TOUCH_ACTION_NONE = 'none';\nvar TOUCH_ACTION_PAN_X = 'pan-x';\nvar TOUCH_ACTION_PAN_Y = 'pan-y';\nvar TOUCH_ACTION_MAP = getTouchActionProps();\n\n/**\n * Touch Action\n * sets the touchAction property or uses the js alternative\n * @param {Manager} manager\n * @param {String} value\n * @constructor\n */\nfunction TouchAction(manager, value) {\n this.manager = manager;\n this.set(value);\n}\n\nTouchAction.prototype = {\n /**\n * set the touchAction value on the element or enable the polyfill\n * @param {String} value\n */\n set: function(value) {\n // find out the touch-action by the event handlers\n if (value == TOUCH_ACTION_COMPUTE) {\n value = this.compute();\n }\n\n if (NATIVE_TOUCH_ACTION && this.manager.element.style && TOUCH_ACTION_MAP[value]) {\n this.manager.element.style[PREFIXED_TOUCH_ACTION] = value;\n }\n this.actions = value.toLowerCase().trim();\n },\n\n /**\n * just re-set the touchAction value\n */\n update: function() {\n this.set(this.manager.options.touchAction);\n },\n\n /**\n * compute the value for the touchAction property based on the recognizer's settings\n * @returns {String} value\n */\n compute: function() {\n var actions = [];\n each(this.manager.recognizers, function(recognizer) {\n if (boolOrFn(recognizer.options.enable, [recognizer])) {\n actions = actions.concat(recognizer.getTouchAction());\n }\n });\n return cleanTouchActions(actions.join(' '));\n },\n\n /**\n * this method is called on each input cycle and provides the preventing of the browser behavior\n * @param {Object} input\n */\n preventDefaults: function(input) {\n var srcEvent = input.srcEvent;\n var direction = input.offsetDirection;\n\n // if the touch action did prevented once this session\n if (this.manager.session.prevented) {\n srcEvent.preventDefault();\n return;\n }\n\n var actions = this.actions;\n var hasNone = inStr(actions, TOUCH_ACTION_NONE) && !TOUCH_ACTION_MAP[TOUCH_ACTION_NONE];\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_Y];\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X) && !TOUCH_ACTION_MAP[TOUCH_ACTION_PAN_X];\n\n if (hasNone) {\n //do not prevent defaults if this is a tap gesture\n\n var isTapPointer = input.pointers.length === 1;\n var isTapMovement = input.distance < 2;\n var isTapTouchTime = input.deltaTime < 250;\n\n if (isTapPointer && isTapMovement && isTapTouchTime) {\n return;\n }\n }\n\n if (hasPanX && hasPanY) {\n // `pan-x pan-y` means browser handles all scrolling/panning, do not prevent\n return;\n }\n\n if (hasNone ||\n (hasPanY && direction & DIRECTION_HORIZONTAL) ||\n (hasPanX && direction & DIRECTION_VERTICAL)) {\n return this.preventSrc(srcEvent);\n }\n },\n\n /**\n * call preventDefault to prevent the browser's default behavior (scrolling in most cases)\n * @param {Object} srcEvent\n */\n preventSrc: function(srcEvent) {\n this.manager.session.prevented = true;\n srcEvent.preventDefault();\n }\n};\n\n/**\n * when the touchActions are collected they are not a valid value, so we need to clean things up. *\n * @param {String} actions\n * @returns {*}\n */\nfunction cleanTouchActions(actions) {\n // none\n if (inStr(actions, TOUCH_ACTION_NONE)) {\n return TOUCH_ACTION_NONE;\n }\n\n var hasPanX = inStr(actions, TOUCH_ACTION_PAN_X);\n var hasPanY = inStr(actions, TOUCH_ACTION_PAN_Y);\n\n // if both pan-x and pan-y are set (different recognizers\n // for different directions, e.g. horizontal pan but vertical swipe?)\n // we need none (as otherwise with pan-x pan-y combined none of these\n // recognizers will work, since the browser would handle all panning\n if (hasPanX && hasPanY) {\n return TOUCH_ACTION_NONE;\n }\n\n // pan-x OR pan-y\n if (hasPanX || hasPanY) {\n return hasPanX ? TOUCH_ACTION_PAN_X : TOUCH_ACTION_PAN_Y;\n }\n\n // manipulation\n if (inStr(actions, TOUCH_ACTION_MANIPULATION)) {\n return TOUCH_ACTION_MANIPULATION;\n }\n\n return TOUCH_ACTION_AUTO;\n}\n\nfunction getTouchActionProps() {\n if (!NATIVE_TOUCH_ACTION) {\n return false;\n }\n var touchMap = {};\n var cssSupports = window.CSS && window.CSS.supports;\n ['auto', 'manipulation', 'pan-y', 'pan-x', 'pan-x pan-y', 'none'].forEach(function(val) {\n\n // If css.supports is not supported but there is native touch-action assume it supports\n // all values. This is the case for IE 10 and 11.\n touchMap[val] = cssSupports ? window.CSS.supports('touch-action', val) : true;\n });\n return touchMap;\n}\n\n/**\n * Recognizer flow explained; *\n * All recognizers have the initial state of POSSIBLE when a input session starts.\n * The definition of a input session is from the first input until the last input, with all it's movement in it. *\n * Example session for mouse-input: mousedown -> mousemove -> mouseup\n *\n * On each recognizing cycle (see Manager.recognize) the .recognize() method is executed\n * which determines with state it should be.\n *\n * If the recognizer has the state FAILED, CANCELLED or RECOGNIZED (equals ENDED), it is reset to\n * POSSIBLE to give it another change on the next cycle.\n *\n * Possible\n * |\n * +-----+---------------+\n * | |\n * +-----+-----+ |\n * | | |\n * Failed Cancelled |\n * +-------+------+\n * | |\n * Recognized Began\n * |\n * Changed\n * |\n * Ended/Recognized\n */\nvar STATE_POSSIBLE = 1;\nvar STATE_BEGAN = 2;\nvar STATE_CHANGED = 4;\nvar STATE_ENDED = 8;\nvar STATE_RECOGNIZED = STATE_ENDED;\nvar STATE_CANCELLED = 16;\nvar STATE_FAILED = 32;\n\n/**\n * Recognizer\n * Every recognizer needs to extend from this class.\n * @constructor\n * @param {Object} options\n */\nfunction Recognizer(options) {\n this.options = assign({}, this.defaults, options || {});\n\n this.id = uniqueId();\n\n this.manager = null;\n\n // default is enable true\n this.options.enable = ifUndefined(this.options.enable, true);\n\n this.state = STATE_POSSIBLE;\n\n this.simultaneous = {};\n this.requireFail = [];\n}\n\nRecognizer.prototype = {\n /**\n * @virtual\n * @type {Object}\n */\n defaults: {},\n\n /**\n * set options\n * @param {Object} options\n * @return {Recognizer}\n */\n set: function(options) {\n assign(this.options, options);\n\n // also update the touchAction, in case something changed about the directions/enabled state\n this.manager && this.manager.touchAction.update();\n return this;\n },\n\n /**\n * recognize simultaneous with an other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n recognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'recognizeWith', this)) {\n return this;\n }\n\n var simultaneous = this.simultaneous;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (!simultaneous[otherRecognizer.id]) {\n simultaneous[otherRecognizer.id] = otherRecognizer;\n otherRecognizer.recognizeWith(this);\n }\n return this;\n },\n\n /**\n * drop the simultaneous link. it doesnt remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRecognizeWith: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRecognizeWith', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n delete this.simultaneous[otherRecognizer.id];\n return this;\n },\n\n /**\n * recognizer can only run when an other is failing\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n requireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'requireFailure', this)) {\n return this;\n }\n\n var requireFail = this.requireFail;\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n if (inArray(requireFail, otherRecognizer) === -1) {\n requireFail.push(otherRecognizer);\n otherRecognizer.requireFailure(this);\n }\n return this;\n },\n\n /**\n * drop the requireFailure link. it does not remove the link on the other recognizer.\n * @param {Recognizer} otherRecognizer\n * @returns {Recognizer} this\n */\n dropRequireFailure: function(otherRecognizer) {\n if (invokeArrayArg(otherRecognizer, 'dropRequireFailure', this)) {\n return this;\n }\n\n otherRecognizer = getRecognizerByNameIfManager(otherRecognizer, this);\n var index = inArray(this.requireFail, otherRecognizer);\n if (index > -1) {\n this.requireFail.splice(index, 1);\n }\n return this;\n },\n\n /**\n * has require failures boolean\n * @returns {boolean}\n */\n hasRequireFailures: function() {\n return this.requireFail.length > 0;\n },\n\n /**\n * if the recognizer can recognize simultaneous with an other recognizer\n * @param {Recognizer} otherRecognizer\n * @returns {Boolean}\n */\n canRecognizeWith: function(otherRecognizer) {\n return !!this.simultaneous[otherRecognizer.id];\n },\n\n /**\n * You should use `tryEmit` instead of `emit` directly to check\n * that all the needed recognizers has failed before emitting.\n * @param {Object} input\n */\n emit: function(input) {\n var self = this;\n var state = this.state;\n\n function emit(event) {\n self.manager.emit(event, input);\n }\n\n // 'panstart' and 'panmove'\n if (state < STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n\n emit(self.options.event); // simple 'eventName' events\n\n if (input.additionalEvent) { // additional event(panleft, panright, pinchin, pinchout...)\n emit(input.additionalEvent);\n }\n\n // panend and pancancel\n if (state >= STATE_ENDED) {\n emit(self.options.event + stateStr(state));\n }\n },\n\n /**\n * Check that all the require failure recognizers has failed,\n * if true, it emits a gesture event,\n * otherwise, setup the state to FAILED.\n * @param {Object} input\n */\n tryEmit: function(input) {\n if (this.canEmit()) {\n return this.emit(input);\n }\n // it's failing anyway\n this.state = STATE_FAILED;\n },\n\n /**\n * can we emit?\n * @returns {boolean}\n */\n canEmit: function() {\n var i = 0;\n while (i < this.requireFail.length) {\n if (!(this.requireFail[i].state & (STATE_FAILED | STATE_POSSIBLE))) {\n return false;\n }\n i++;\n }\n return true;\n },\n\n /**\n * update the recognizer\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n // make a new copy of the inputData\n // so we can change the inputData without messing up the other recognizers\n var inputDataClone = assign({}, inputData);\n\n // is is enabled and allow recognizing?\n if (!boolOrFn(this.options.enable, [this, inputDataClone])) {\n this.reset();\n this.state = STATE_FAILED;\n return;\n }\n\n // reset when we've reached the end\n if (this.state & (STATE_RECOGNIZED | STATE_CANCELLED | STATE_FAILED)) {\n this.state = STATE_POSSIBLE;\n }\n\n this.state = this.process(inputDataClone);\n\n // the recognizer has recognized a gesture\n // so trigger an event\n if (this.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED | STATE_CANCELLED)) {\n this.tryEmit(inputDataClone);\n }\n },\n\n /**\n * return the state of the recognizer\n * the actual recognizing happens in this method\n * @virtual\n * @param {Object} inputData\n * @returns {Const} STATE\n */\n process: function(inputData) { }, // jshint ignore:line\n\n /**\n * return the preferred touch-action\n * @virtual\n * @returns {Array}\n */\n getTouchAction: function() { },\n\n /**\n * called when the gesture isn't allowed to recognize\n * like when another is being recognized or it is disabled\n * @virtual\n */\n reset: function() { }\n};\n\n/**\n * get a usable string, used as event postfix\n * @param {Const} state\n * @returns {String} state\n */\nfunction stateStr(state) {\n if (state & STATE_CANCELLED) {\n return 'cancel';\n } else if (state & STATE_ENDED) {\n return 'end';\n } else if (state & STATE_CHANGED) {\n return 'move';\n } else if (state & STATE_BEGAN) {\n return 'start';\n }\n return '';\n}\n\n/**\n * direction cons to string\n * @param {Const} direction\n * @returns {String}\n */\nfunction directionStr(direction) {\n if (direction == DIRECTION_DOWN) {\n return 'down';\n } else if (direction == DIRECTION_UP) {\n return 'up';\n } else if (direction == DIRECTION_LEFT) {\n return 'left';\n } else if (direction == DIRECTION_RIGHT) {\n return 'right';\n }\n return '';\n}\n\n/**\n * get a recognizer by name if it is bound to a manager\n * @param {Recognizer|String} otherRecognizer\n * @param {Recognizer} recognizer\n * @returns {Recognizer}\n */\nfunction getRecognizerByNameIfManager(otherRecognizer, recognizer) {\n var manager = recognizer.manager;\n if (manager) {\n return manager.get(otherRecognizer);\n }\n return otherRecognizer;\n}\n\n/**\n * This recognizer is just used as a base for the simple attribute recognizers.\n * @constructor\n * @extends Recognizer\n */\nfunction AttrRecognizer() {\n Recognizer.apply(this, arguments);\n}\n\ninherit(AttrRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof AttrRecognizer\n */\n defaults: {\n /**\n * @type {Number}\n * @default 1\n */\n pointers: 1\n },\n\n /**\n * Used to check if it the recognizer receives valid input, like input.distance > 10.\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {Boolean} recognized\n */\n attrTest: function(input) {\n var optionPointers = this.options.pointers;\n return optionPointers === 0 || input.pointers.length === optionPointers;\n },\n\n /**\n * Process the input and return the state for the recognizer\n * @memberof AttrRecognizer\n * @param {Object} input\n * @returns {*} State\n */\n process: function(input) {\n var state = this.state;\n var eventType = input.eventType;\n\n var isRecognized = state & (STATE_BEGAN | STATE_CHANGED);\n var isValid = this.attrTest(input);\n\n // on cancel input and we've recognized before, return STATE_CANCELLED\n if (isRecognized && (eventType & INPUT_CANCEL || !isValid)) {\n return state | STATE_CANCELLED;\n } else if (isRecognized || isValid) {\n if (eventType & INPUT_END) {\n return state | STATE_ENDED;\n } else if (!(state & STATE_BEGAN)) {\n return STATE_BEGAN;\n }\n return state | STATE_CHANGED;\n }\n return STATE_FAILED;\n }\n});\n\n/**\n * Pan\n * Recognized when the pointer is down and moved in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PanRecognizer() {\n AttrRecognizer.apply(this, arguments);\n\n this.pX = null;\n this.pY = null;\n}\n\ninherit(PanRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PanRecognizer\n */\n defaults: {\n event: 'pan',\n threshold: 10,\n pointers: 1,\n direction: DIRECTION_ALL\n },\n\n getTouchAction: function() {\n var direction = this.options.direction;\n var actions = [];\n if (direction & DIRECTION_HORIZONTAL) {\n actions.push(TOUCH_ACTION_PAN_Y);\n }\n if (direction & DIRECTION_VERTICAL) {\n actions.push(TOUCH_ACTION_PAN_X);\n }\n return actions;\n },\n\n directionTest: function(input) {\n var options = this.options;\n var hasMoved = true;\n var distance = input.distance;\n var direction = input.direction;\n var x = input.deltaX;\n var y = input.deltaY;\n\n // lock to axis?\n if (!(direction & options.direction)) {\n if (options.direction & DIRECTION_HORIZONTAL) {\n direction = (x === 0) ? DIRECTION_NONE : (x < 0) ? DIRECTION_LEFT : DIRECTION_RIGHT;\n hasMoved = x != this.pX;\n distance = Math.abs(input.deltaX);\n } else {\n direction = (y === 0) ? DIRECTION_NONE : (y < 0) ? DIRECTION_UP : DIRECTION_DOWN;\n hasMoved = y != this.pY;\n distance = Math.abs(input.deltaY);\n }\n }\n input.direction = direction;\n return hasMoved && distance > options.threshold && direction & options.direction;\n },\n\n attrTest: function(input) {\n return AttrRecognizer.prototype.attrTest.call(this, input) &&\n (this.state & STATE_BEGAN || (!(this.state & STATE_BEGAN) && this.directionTest(input)));\n },\n\n emit: function(input) {\n\n this.pX = input.deltaX;\n this.pY = input.deltaY;\n\n var direction = directionStr(input.direction);\n\n if (direction) {\n input.additionalEvent = this.options.event + direction;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Pinch\n * Recognized when two or more pointers are moving toward (zoom-in) or away from each other (zoom-out).\n * @constructor\n * @extends AttrRecognizer\n */\nfunction PinchRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(PinchRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'pinch',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.scale - 1) > this.options.threshold || this.state & STATE_BEGAN);\n },\n\n emit: function(input) {\n if (input.scale !== 1) {\n var inOut = input.scale < 1 ? 'in' : 'out';\n input.additionalEvent = this.options.event + inOut;\n }\n this._super.emit.call(this, input);\n }\n});\n\n/**\n * Press\n * Recognized when the pointer is down for x ms without any movement.\n * @constructor\n * @extends Recognizer\n */\nfunction PressRecognizer() {\n Recognizer.apply(this, arguments);\n\n this._timer = null;\n this._input = null;\n}\n\ninherit(PressRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PressRecognizer\n */\n defaults: {\n event: 'press',\n pointers: 1,\n time: 251, // minimal time of the pointer to be pressed\n threshold: 9 // a minimal movement is ok, but keep it low\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_AUTO];\n },\n\n process: function(input) {\n var options = this.options;\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTime = input.deltaTime > options.time;\n\n this._input = input;\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (!validMovement || !validPointers || (input.eventType & (INPUT_END | INPUT_CANCEL) && !validTime)) {\n this.reset();\n } else if (input.eventType & INPUT_START) {\n this.reset();\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.time, this);\n } else if (input.eventType & INPUT_END) {\n return STATE_RECOGNIZED;\n }\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function(input) {\n if (this.state !== STATE_RECOGNIZED) {\n return;\n }\n\n if (input && (input.eventType & INPUT_END)) {\n this.manager.emit(this.options.event + 'up', input);\n } else {\n this._input.timeStamp = now();\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Rotate\n * Recognized when two or more pointer are moving in a circular motion.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction RotateRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(RotateRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof RotateRecognizer\n */\n defaults: {\n event: 'rotate',\n threshold: 0,\n pointers: 2\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_NONE];\n },\n\n attrTest: function(input) {\n return this._super.attrTest.call(this, input) &&\n (Math.abs(input.rotation) > this.options.threshold || this.state & STATE_BEGAN);\n }\n});\n\n/**\n * Swipe\n * Recognized when the pointer is moving fast (velocity), with enough distance in the allowed direction.\n * @constructor\n * @extends AttrRecognizer\n */\nfunction SwipeRecognizer() {\n AttrRecognizer.apply(this, arguments);\n}\n\ninherit(SwipeRecognizer, AttrRecognizer, {\n /**\n * @namespace\n * @memberof SwipeRecognizer\n */\n defaults: {\n event: 'swipe',\n threshold: 10,\n velocity: 0.3,\n direction: DIRECTION_HORIZONTAL | DIRECTION_VERTICAL,\n pointers: 1\n },\n\n getTouchAction: function() {\n return PanRecognizer.prototype.getTouchAction.call(this);\n },\n\n attrTest: function(input) {\n var direction = this.options.direction;\n var velocity;\n\n if (direction & (DIRECTION_HORIZONTAL | DIRECTION_VERTICAL)) {\n velocity = input.overallVelocity;\n } else if (direction & DIRECTION_HORIZONTAL) {\n velocity = input.overallVelocityX;\n } else if (direction & DIRECTION_VERTICAL) {\n velocity = input.overallVelocityY;\n }\n\n return this._super.attrTest.call(this, input) &&\n direction & input.offsetDirection &&\n input.distance > this.options.threshold &&\n input.maxPointers == this.options.pointers &&\n abs(velocity) > this.options.velocity && input.eventType & INPUT_END;\n },\n\n emit: function(input) {\n var direction = directionStr(input.offsetDirection);\n if (direction) {\n this.manager.emit(this.options.event + direction, input);\n }\n\n this.manager.emit(this.options.event, input);\n }\n});\n\n/**\n * A tap is ecognized when the pointer is doing a small tap/click. Multiple taps are recognized if they occur\n * between the given interval and position. The delay option can be used to recognize multi-taps without firing\n * a single tap.\n *\n * The eventData from the emitted event contains the property `tapCount`, which contains the amount of\n * multi-taps being recognized.\n * @constructor\n * @extends Recognizer\n */\nfunction TapRecognizer() {\n Recognizer.apply(this, arguments);\n\n // previous time and center,\n // used for tap counting\n this.pTime = false;\n this.pCenter = false;\n\n this._timer = null;\n this._input = null;\n this.count = 0;\n}\n\ninherit(TapRecognizer, Recognizer, {\n /**\n * @namespace\n * @memberof PinchRecognizer\n */\n defaults: {\n event: 'tap',\n pointers: 1,\n taps: 1,\n interval: 300, // max time between the multi-tap taps\n time: 250, // max time of the pointer to be down (like finger on the screen)\n threshold: 9, // a minimal movement is ok, but keep it low\n posThreshold: 10 // a multi-tap can be a bit off the initial position\n },\n\n getTouchAction: function() {\n return [TOUCH_ACTION_MANIPULATION];\n },\n\n process: function(input) {\n var options = this.options;\n\n var validPointers = input.pointers.length === options.pointers;\n var validMovement = input.distance < options.threshold;\n var validTouchTime = input.deltaTime < options.time;\n\n this.reset();\n\n if ((input.eventType & INPUT_START) && (this.count === 0)) {\n return this.failTimeout();\n }\n\n // we only allow little movement\n // and we've reached an end event, so a tap is possible\n if (validMovement && validTouchTime && validPointers) {\n if (input.eventType != INPUT_END) {\n return this.failTimeout();\n }\n\n var validInterval = this.pTime ? (input.timeStamp - this.pTime < options.interval) : true;\n var validMultiTap = !this.pCenter || getDistance(this.pCenter, input.center) < options.posThreshold;\n\n this.pTime = input.timeStamp;\n this.pCenter = input.center;\n\n if (!validMultiTap || !validInterval) {\n this.count = 1;\n } else {\n this.count += 1;\n }\n\n this._input = input;\n\n // if tap count matches we have recognized it,\n // else it has began recognizing...\n var tapCount = this.count % options.taps;\n if (tapCount === 0) {\n // no failing requirements, immediately trigger the tap event\n // or wait as long as the multitap interval to trigger\n if (!this.hasRequireFailures()) {\n return STATE_RECOGNIZED;\n } else {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_RECOGNIZED;\n this.tryEmit();\n }, options.interval, this);\n return STATE_BEGAN;\n }\n }\n }\n return STATE_FAILED;\n },\n\n failTimeout: function() {\n this._timer = setTimeoutContext(function() {\n this.state = STATE_FAILED;\n }, this.options.interval, this);\n return STATE_FAILED;\n },\n\n reset: function() {\n clearTimeout(this._timer);\n },\n\n emit: function() {\n if (this.state == STATE_RECOGNIZED) {\n this._input.tapCount = this.count;\n this.manager.emit(this.options.event, this._input);\n }\n }\n});\n\n/**\n * Simple way to create a manager with a default set of recognizers.\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Hammer(element, options) {\n options = options || {};\n options.recognizers = ifUndefined(options.recognizers, Hammer.defaults.preset);\n return new Manager(element, options);\n}\n\n/**\n * @const {string}\n */\nHammer.VERSION = '2.0.7';\n\n/**\n * default settings\n * @namespace\n */\nHammer.defaults = {\n /**\n * set if DOM events are being triggered.\n * But this is slower and unused by simple implementations, so disabled by default.\n * @type {Boolean}\n * @default false\n */\n domEvents: false,\n\n /**\n * The value for the touchAction property/fallback.\n * When set to `compute` it will magically set the correct value based on the added recognizers.\n * @type {String}\n * @default compute\n */\n touchAction: TOUCH_ACTION_COMPUTE,\n\n /**\n * @type {Boolean}\n * @default true\n */\n enable: true,\n\n /**\n * EXPERIMENTAL FEATURE -- can be removed/changed\n * Change the parent input target element.\n * If Null, then it is being set the to main element.\n * @type {Null|EventTarget}\n * @default null\n */\n inputTarget: null,\n\n /**\n * force an input class\n * @type {Null|Function}\n * @default null\n */\n inputClass: null,\n\n /**\n * Default recognizer setup when calling `Hammer()`\n * When creating a new Manager these will be skipped.\n * @type {Array}\n */\n preset: [\n // RecognizerClass, options, [recognizeWith, ...], [requireFailure, ...]\n [RotateRecognizer, {enable: false}],\n [PinchRecognizer, {enable: false}, ['rotate']],\n [SwipeRecognizer, {direction: DIRECTION_HORIZONTAL}],\n [PanRecognizer, {direction: DIRECTION_HORIZONTAL}, ['swipe']],\n [TapRecognizer],\n [TapRecognizer, {event: 'doubletap', taps: 2}, ['tap']],\n [PressRecognizer]\n ],\n\n /**\n * Some CSS properties can be used to improve the working of Hammer.\n * Add them to this method and they will be set when creating a new Manager.\n * @namespace\n */\n cssProps: {\n /**\n * Disables text selection to improve the dragging gesture. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userSelect: 'none',\n\n /**\n * Disable the Windows Phone grippers when pressing an element.\n * @type {String}\n * @default 'none'\n */\n touchSelect: 'none',\n\n /**\n * Disables the default callout shown when you touch and hold a touch target.\n * On iOS, when you touch and hold a touch target such as a link, Safari displays\n * a callout containing information about the link. This property allows you to disable that callout.\n * @type {String}\n * @default 'none'\n */\n touchCallout: 'none',\n\n /**\n * Specifies whether zooming is enabled. Used by IE10>\n * @type {String}\n * @default 'none'\n */\n contentZooming: 'none',\n\n /**\n * Specifies that an entire element should be draggable instead of its contents. Mainly for desktop browsers.\n * @type {String}\n * @default 'none'\n */\n userDrag: 'none',\n\n /**\n * Overrides the highlight color shown when the user taps a link or a JavaScript\n * clickable element in iOS. This property obeys the alpha value, if specified.\n * @type {String}\n * @default 'rgba(0,0,0,0)'\n */\n tapHighlightColor: 'rgba(0,0,0,0)'\n }\n};\n\nvar STOP = 1;\nvar FORCED_STOP = 2;\n\n/**\n * Manager\n * @param {HTMLElement} element\n * @param {Object} [options]\n * @constructor\n */\nfunction Manager(element, options) {\n this.options = assign({}, Hammer.defaults, options || {});\n\n this.options.inputTarget = this.options.inputTarget || element;\n\n this.handlers = {};\n this.session = {};\n this.recognizers = [];\n this.oldCssProps = {};\n\n this.element = element;\n this.input = createInputInstance(this);\n this.touchAction = new TouchAction(this, this.options.touchAction);\n\n toggleCssProps(this, true);\n\n each(this.options.recognizers, function(item) {\n var recognizer = this.add(new (item[0])(item[1]));\n item[2] && recognizer.recognizeWith(item[2]);\n item[3] && recognizer.requireFailure(item[3]);\n }, this);\n}\n\nManager.prototype = {\n /**\n * set options\n * @param {Object} options\n * @returns {Manager}\n */\n set: function(options) {\n assign(this.options, options);\n\n // Options that need a little more setup\n if (options.touchAction) {\n this.touchAction.update();\n }\n if (options.inputTarget) {\n // Clean up existing event listeners and reinitialize\n this.input.destroy();\n this.input.target = options.inputTarget;\n this.input.init();\n }\n return this;\n },\n\n /**\n * stop recognizing for this session.\n * This session will be discarded, when a new [input]start event is fired.\n * When forced, the recognizer cycle is stopped immediately.\n * @param {Boolean} [force]\n */\n stop: function(force) {\n this.session.stopped = force ? FORCED_STOP : STOP;\n },\n\n /**\n * run the recognizers!\n * called by the inputHandler function on every movement of the pointers (touches)\n * it walks through all the recognizers and tries to detect the gesture that is being made\n * @param {Object} inputData\n */\n recognize: function(inputData) {\n var session = this.session;\n if (session.stopped) {\n return;\n }\n\n // run the touch-action polyfill\n this.touchAction.preventDefaults(inputData);\n\n var recognizer;\n var recognizers = this.recognizers;\n\n // this holds the recognizer that is being recognized.\n // so the recognizer's state needs to be BEGAN, CHANGED, ENDED or RECOGNIZED\n // if no recognizer is detecting a thing, it is set to `null`\n var curRecognizer = session.curRecognizer;\n\n // reset when the last recognizer is recognized\n // or when we're in a new session\n if (!curRecognizer || (curRecognizer && curRecognizer.state & STATE_RECOGNIZED)) {\n curRecognizer = session.curRecognizer = null;\n }\n\n var i = 0;\n while (i < recognizers.length) {\n recognizer = recognizers[i];\n\n // find out if we are allowed try to recognize the input for this one.\n // 1. allow if the session is NOT forced stopped (see the .stop() method)\n // 2. allow if we still haven't recognized a gesture in this session, or the this recognizer is the one\n // that is being recognized.\n // 3. allow if the recognizer is allowed to run simultaneous with the current recognized recognizer.\n // this can be setup with the `recognizeWith()` method on the recognizer.\n if (session.stopped !== FORCED_STOP && ( // 1\n !curRecognizer || recognizer == curRecognizer || // 2\n recognizer.canRecognizeWith(curRecognizer))) { // 3\n recognizer.recognize(inputData);\n } else {\n recognizer.reset();\n }\n\n // if the recognizer has been recognizing the input as a valid gesture, we want to store this one as the\n // current active recognizer. but only if we don't already have an active recognizer\n if (!curRecognizer && recognizer.state & (STATE_BEGAN | STATE_CHANGED | STATE_ENDED)) {\n curRecognizer = session.curRecognizer = recognizer;\n }\n i++;\n }\n },\n\n /**\n * get a recognizer by its event name.\n * @param {Recognizer|String} recognizer\n * @returns {Recognizer|Null}\n */\n get: function(recognizer) {\n if (recognizer instanceof Recognizer) {\n return recognizer;\n }\n\n var recognizers = this.recognizers;\n for (var i = 0; i < recognizers.length; i++) {\n if (recognizers[i].options.event == recognizer) {\n return recognizers[i];\n }\n }\n return null;\n },\n\n /**\n * add a recognizer to the manager\n * existing recognizers with the same event name will be removed\n * @param {Recognizer} recognizer\n * @returns {Recognizer|Manager}\n */\n add: function(recognizer) {\n if (invokeArrayArg(recognizer, 'add', this)) {\n return this;\n }\n\n // remove existing\n var existing = this.get(recognizer.options.event);\n if (existing) {\n this.remove(existing);\n }\n\n this.recognizers.push(recognizer);\n recognizer.manager = this;\n\n this.touchAction.update();\n return recognizer;\n },\n\n /**\n * remove a recognizer by name or instance\n * @param {Recognizer|String} recognizer\n * @returns {Manager}\n */\n remove: function(recognizer) {\n if (invokeArrayArg(recognizer, 'remove', this)) {\n return this;\n }\n\n recognizer = this.get(recognizer);\n\n // let's make sure this recognizer exists\n if (recognizer) {\n var recognizers = this.recognizers;\n var index = inArray(recognizers, recognizer);\n\n if (index !== -1) {\n recognizers.splice(index, 1);\n this.touchAction.update();\n }\n }\n\n return this;\n },\n\n /**\n * bind event\n * @param {String} events\n * @param {Function} handler\n * @returns {EventEmitter} this\n */\n on: function(events, handler) {\n if (events === undefined) {\n return;\n }\n if (handler === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n handlers[event] = handlers[event] || [];\n handlers[event].push(handler);\n });\n return this;\n },\n\n /**\n * unbind event, leave emit blank to remove all handlers\n * @param {String} events\n * @param {Function} [handler]\n * @returns {EventEmitter} this\n */\n off: function(events, handler) {\n if (events === undefined) {\n return;\n }\n\n var handlers = this.handlers;\n each(splitStr(events), function(event) {\n if (!handler) {\n delete handlers[event];\n } else {\n handlers[event] && handlers[event].splice(inArray(handlers[event], handler), 1);\n }\n });\n return this;\n },\n\n /**\n * emit event to the listeners\n * @param {String} event\n * @param {Object} data\n */\n emit: function(event, data) {\n // we also want to trigger dom events\n if (this.options.domEvents) {\n triggerDomEvent(event, data);\n }\n\n // no handlers, so skip it all\n var handlers = this.handlers[event] && this.handlers[event].slice();\n if (!handlers || !handlers.length) {\n return;\n }\n\n data.type = event;\n data.preventDefault = function() {\n data.srcEvent.preventDefault();\n };\n\n var i = 0;\n while (i < handlers.length) {\n handlers[i](data);\n i++;\n }\n },\n\n /**\n * destroy the manager and unbinds all events\n * it doesn't unbind dom events, that is the user own responsibility\n */\n destroy: function() {\n this.element && toggleCssProps(this, false);\n\n this.handlers = {};\n this.session = {};\n this.input.destroy();\n this.element = null;\n }\n};\n\n/**\n * add/remove the css properties as defined in manager.options.cssProps\n * @param {Manager} manager\n * @param {Boolean} add\n */\nfunction toggleCssProps(manager, add) {\n var element = manager.element;\n if (!element.style) {\n return;\n }\n var prop;\n each(manager.options.cssProps, function(value, name) {\n prop = prefixed(element.style, name);\n if (add) {\n manager.oldCssProps[prop] = element.style[prop];\n element.style[prop] = value;\n } else {\n element.style[prop] = manager.oldCssProps[prop] || '';\n }\n });\n if (!add) {\n manager.oldCssProps = {};\n }\n}\n\n/**\n * trigger dom event\n * @param {String} event\n * @param {Object} data\n */\nfunction triggerDomEvent(event, data) {\n var gestureEvent = document.createEvent('Event');\n gestureEvent.initEvent(event, true, true);\n gestureEvent.gesture = data;\n data.target.dispatchEvent(gestureEvent);\n}\n\nassign(Hammer, {\n INPUT_START: INPUT_START,\n INPUT_MOVE: INPUT_MOVE,\n INPUT_END: INPUT_END,\n INPUT_CANCEL: INPUT_CANCEL,\n\n STATE_POSSIBLE: STATE_POSSIBLE,\n STATE_BEGAN: STATE_BEGAN,\n STATE_CHANGED: STATE_CHANGED,\n STATE_ENDED: STATE_ENDED,\n STATE_RECOGNIZED: STATE_RECOGNIZED,\n STATE_CANCELLED: STATE_CANCELLED,\n STATE_FAILED: STATE_FAILED,\n\n DIRECTION_NONE: DIRECTION_NONE,\n DIRECTION_LEFT: DIRECTION_LEFT,\n DIRECTION_RIGHT: DIRECTION_RIGHT,\n DIRECTION_UP: DIRECTION_UP,\n DIRECTION_DOWN: DIRECTION_DOWN,\n DIRECTION_HORIZONTAL: DIRECTION_HORIZONTAL,\n DIRECTION_VERTICAL: DIRECTION_VERTICAL,\n DIRECTION_ALL: DIRECTION_ALL,\n\n Manager: Manager,\n Input: Input,\n TouchAction: TouchAction,\n\n TouchInput: TouchInput,\n MouseInput: MouseInput,\n PointerEventInput: PointerEventInput,\n TouchMouseInput: TouchMouseInput,\n SingleTouchInput: SingleTouchInput,\n\n Recognizer: Recognizer,\n AttrRecognizer: AttrRecognizer,\n Tap: TapRecognizer,\n Pan: PanRecognizer,\n Swipe: SwipeRecognizer,\n Pinch: PinchRecognizer,\n Rotate: RotateRecognizer,\n Press: PressRecognizer,\n\n on: addEventListeners,\n off: removeEventListeners,\n each: each,\n merge: merge,\n extend: extend,\n assign: assign,\n inherit: inherit,\n bindFn: bindFn,\n prefixed: prefixed\n});\n\n// this prevents errors when Hammer is loaded in the presence of an AMD\n// style loader but by script tag, not by the loader.\nvar freeGlobal = (typeof window !== 'undefined' ? window : (typeof self !== 'undefined' ? self : {})); // jshint ignore:line\nfreeGlobal.Hammer = Hammer;\n\nif (typeof define === 'function' && define.amd) {\n define(function() {\n return Hammer;\n });\n} else if (typeof module != 'undefined' && module.exports) {\n module.exports = Hammer;\n} else {\n window[exportName] = Hammer;\n}\n\n})(window, document, 'Hammer');\n","import { TimestampProvider } from '../types';\n\ninterface PerformanceTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const performanceTimestampProvider: PerformanceTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (performanceTimestampProvider.delegate || performance).now();\n },\n delegate: undefined,\n};\n","import { Observable } from '../../Observable';\nimport { Subscription } from '../../Subscription';\nimport { TimestampProvider } from \"../../types\";\nimport { performanceTimestampProvider } from '../../scheduler/performanceTimestampProvider';\nimport { animationFrameProvider } from '../../scheduler/animationFrameProvider';\n\n/**\n * An observable of animation frames\n *\n * Emits the the amount of time elapsed since subscription and the timestamp on each animation frame.\n * Defaults to milliseconds provided to the requestAnimationFrame's callback. Does not end on its own.\n *\n * Every subscription will start a separate animation loop. Since animation frames are always scheduled\n * by the browser to occur directly before a repaint, scheduling more than one animation frame synchronously\n * should not be much different or have more overhead than looping over an array of events during\n * a single animation frame. However, if for some reason the developer would like to ensure the\n * execution of animation-related handlers are all executed during the same task by the engine,\n * the `share` operator can be used.\n *\n * This is useful for setting up animations with RxJS.\n *\n * ### Example\n *\n * Tweening a div to move it on the screen\n *\n * ```ts\n * import { animationFrames } from 'rxjs';\n * import { map, takeWhile, endWith } from 'rxjs/operators';\n *\n * function tween(start: number, end: number, duration: number) {\n * const diff = end - start;\n * return animationFrames().pipe(\n * // Figure out what percentage of time has passed\n * map(({elapsed}) => elapsed / duration),\n * // Take the vector while less than 100%\n * takeWhile(v => v < 1),\n * // Finish with 100%\n * endWith(1),\n * // Calculate the distance traveled between start and end\n * map(v => v * diff + start)\n * );\n * }\n *\n * // Setup a div for us to move around\n * const div = document.createElement('div');\n * document.body.appendChild(div);\n * div.style.position = 'absolute';\n * div.style.width = '40px';\n * div.style.height = '40px';\n * div.style.backgroundColor = 'lime';\n * div.style.transform = 'translate3d(10px, 0, 0)';\n *\n * tween(10, 200, 4000).subscribe(x => {\n * div.style.transform = `translate3d(${x}px, 0, 0)`;\n * });\n * ```\n *\n * ### Example\n *\n * Providing a custom timestamp provider\n *\n * ```ts\n * import { animationFrames, TimestampProvider } from 'rxjs';\n *\n * // A custom timestamp provider\n * let now = 0;\n * const customTSProvider: TimestampProvider = {\n * now() { return now++; }\n * };\n *\n * const source$ = animationFrames(customTSProvider);\n *\n * // Log increasing numbers 0...1...2... on every animation frame.\n * source$.subscribe(({ elapsed }) => console.log(elapsed));\n * ```\n *\n * @param timestampProvider An object with a `now` method that provides a numeric timestamp\n */\nexport function animationFrames(timestampProvider?: TimestampProvider) {\n return timestampProvider ? animationFramesFactory(timestampProvider) : DEFAULT_ANIMATION_FRAMES;\n}\n\n/**\n * Does the work of creating the observable for `animationFrames`.\n * @param timestampProvider The timestamp provider to use to create the observable\n */\nfunction animationFramesFactory(timestampProvider?: TimestampProvider) {\n const { schedule } = animationFrameProvider;\n return new Observable<{ timestamp: number, elapsed: number }>(subscriber => {\n const subscription = new Subscription();\n // If no timestamp provider is specified, use performance.now() - as it\n // will return timestamps 'compatible' with those passed to the run\n // callback and won't be affected by NTP adjustments, etc.\n const provider = timestampProvider || performanceTimestampProvider;\n // Capture the start time upon subscription, as the run callback can remain\n // queued for a considerable period of time and the elapsed time should\n // represent the time elapsed since subscription - not the time since the\n // first rendered animation frame.\n const start = provider.now();\n const run = (timestamp: DOMHighResTimeStamp | number) => {\n // Use the provider's timestamp to calculate the elapsed time. Note that\n // this means - if the caller hasn't passed a provider - that\n // performance.now() will be used instead of the timestamp that was\n // passed to the run callback. The reason for this is that the timestamp\n // passed to the callback can be earlier than the start time, as it\n // represents the time at which the browser decided it would render any\n // queued frames - and that time can be earlier the captured start time.\n const now = provider.now();\n subscriber.next({\n timestamp: timestampProvider ? now : timestamp,\n elapsed: now - start\n });\n if (!subscriber.closed) {\n subscription.add(schedule(run));\n }\n };\n subscription.add(schedule(run));\n return subscription;\n });\n}\n\n/**\n * In the common case, where the timestamp provided by the rAF API is used,\n * we use this shared observable to reduce overhead.\n */\nconst DEFAULT_ANIMATION_FRAMES = animationFramesFactory();\n","import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\n\n/**\n * A variant of Subject that only emits a value when it completes. It will emit\n * its latest value to all its observers on completion.\n *\n * @class AsyncSubject\n */\nexport class AsyncSubject extends Subject {\n private _value: T | null = null;\n private _hasValue = false;\n private _isComplete = false;\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, _hasValue, _value, thrownError, isStopped, _isComplete } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped || _isComplete) {\n _hasValue && subscriber.next(_value!);\n subscriber.complete();\n }\n }\n\n next(value: T): void {\n if (!this.isStopped) {\n this._value = value;\n this._hasValue = true;\n }\n }\n\n complete(): void {\n const { _hasValue, _value, _isComplete } = this;\n if (!_isComplete) {\n this._isComplete = true;\n _hasValue && super.next(_value!);\n super.complete();\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { SchedulerAction } from '../types';\n\nexport class VirtualTimeScheduler extends AsyncScheduler {\n /** @deprecated Not used in VirtualTimeScheduler directly. Will be removed in v8. */\n static frameTimeFactor = 10;\n\n /**\n * The current frame for the state of the virtual scheduler instance. The the difference\n * between two \"frames\" is synonymous with the passage of \"virtual time units\". So if\n * you record `scheduler.frame` to be `1`, then later, observe `scheduler.frame` to be at `11`,\n * that means `10` virtual time units have passed.\n */\n public frame: number = 0;\n\n /**\n * Used internally to examine the current virtual action index being processed.\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n public index: number = -1;\n\n /**\n * This creates an instance of a `VirtualTimeScheduler`. Experts only. The signature of\n * this constructor is likely to change in the long run.\n *\n * @param schedulerActionCtor The type of Action to initialize when initializing actions during scheduling.\n * @param maxFrames The maximum number of frames to process before stopping. Used to prevent endless flush cycles.\n */\n constructor(schedulerActionCtor: typeof AsyncAction = VirtualAction as any, public maxFrames: number = Infinity) {\n super(schedulerActionCtor, () => this.frame);\n }\n\n /**\n * Prompt the Scheduler to execute all of its queued actions, therefore\n * clearing its queue.\n * @return {void}\n */\n public flush(): void {\n const { actions, maxFrames } = this;\n let error: any;\n let action: AsyncAction | undefined;\n\n while ((action = actions[0]) && action.delay <= maxFrames) {\n actions.shift();\n this.frame = action.delay;\n\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n }\n\n if (error) {\n while ((action = actions.shift())) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n\nexport class VirtualAction extends AsyncAction {\n protected active: boolean = true;\n\n constructor(\n protected scheduler: VirtualTimeScheduler,\n protected work: (this: SchedulerAction, state?: T) => void,\n protected index: number = (scheduler.index += 1)\n ) {\n super(scheduler, work);\n this.index = scheduler.index = index;\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (Number.isFinite(delay)) {\n if (!this.id) {\n return super.schedule(state, delay);\n }\n this.active = false;\n // If an action is rescheduled, we save allocations by mutating its state,\n // pushing it to the end of the scheduler queue, and recycling the action.\n // But since the VirtualTimeScheduler is used for testing, VirtualActions\n // must be immutable so they can be inspected later.\n const action = new VirtualAction(this.scheduler, this.work);\n this.add(action);\n return action.schedule(state, delay);\n } else {\n // If someone schedules something with Infinity, it'll never happen. So we\n // don't even schedule it.\n return Subscription.EMPTY;\n }\n }\n\n protected requestAsyncId(scheduler: VirtualTimeScheduler, id?: any, delay: number = 0): any {\n this.delay = scheduler.frame + delay;\n const { actions } = scheduler;\n actions.push(this);\n (actions as Array>).sort(VirtualAction.sortActions);\n return true;\n }\n\n protected recycleAsyncId(scheduler: VirtualTimeScheduler, id?: any, delay: number = 0): any {\n return undefined;\n }\n\n protected _execute(state: T, delay: number): any {\n if (this.active === true) {\n return super._execute(state, delay);\n }\n }\n\n private static sortActions(a: VirtualAction, b: VirtualAction) {\n if (a.delay === b.delay) {\n if (a.index === b.index) {\n return 0;\n } else if (a.index > b.index) {\n return 1;\n } else {\n return -1;\n }\n } else if (a.delay > b.delay) {\n return 1;\n } else {\n return -1;\n }\n }\n}\n","import { Observable } from './Observable';\nimport { EmptyError } from './util/EmptyError';\n\nexport interface LastValueFromConfig {\n defaultValue: T;\n}\n\nexport function lastValueFrom(source: Observable, config: LastValueFromConfig): Promise;\nexport function lastValueFrom(source: Observable): Promise;\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * waiting for it to complete, and resolving the returned promise with the\n * last value from the observed stream.\n *\n * If the observable stream completes before any values were emitted, the\n * returned promise will reject with {@link EmptyError} or will resolve\n * with the default value if a default was specified.\n *\n * If the observable stream emits an error, the returned promise will reject\n * with that error.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * ### Example\n *\n * Wait for the last value from a stream and emit it from a promise in\n * an async function.\n *\n * ```ts\n * import { interval, lastValueFrom } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * async function execute() {\n * const source$ = interval(2000).pipe(take(10));\n * const finalNumber = await lastValueFrom(source$);\n * console.log(`The final number is ${finalNumber}`);\n * }\n *\n * execute();\n *\n * // Expected output:\n * // \"The final number is 9\"\n * ```\n *\n * @see {@link firstValueFrom}\n *\n * @param source the observable to convert to a promise\n * @param config a configuration object to define the `defaultValue` to use if the source completes without emitting a value\n */\nexport function lastValueFrom(source: Observable, config?: LastValueFromConfig): Promise {\n const hasConfig = typeof config === 'object';\n return new Promise((resolve, reject) => {\n let _hasValue = false;\n let _value: T;\n source.subscribe({\n next: (value) => {\n _value = value;\n _hasValue = true;\n },\n error: reject,\n complete: () => {\n if (_hasValue) {\n resolve(_value);\n } else if (hasConfig) {\n resolve(config!.defaultValue);\n } else {\n reject(new EmptyError());\n }\n },\n });\n });\n}\n","import { createErrorClass } from './createErrorClass';\n\nexport interface ArgumentOutOfRangeError extends Error {}\n\nexport interface ArgumentOutOfRangeErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ArgumentOutOfRangeError;\n}\n\n/**\n * An error thrown when an element was queried at a certain index of an\n * Observable, but no such index or position exists in that sequence.\n *\n * @see {@link elementAt}\n * @see {@link take}\n * @see {@link takeLast}\n *\n * @class ArgumentOutOfRangeError\n */\nexport const ArgumentOutOfRangeError: ArgumentOutOfRangeErrorCtor = createErrorClass(\n (_super) =>\n function ArgumentOutOfRangeErrorImpl(this: any) {\n _super(this);\n this.name = 'ArgumentOutOfRangeError';\n this.message = 'argument out of range';\n }\n);\n","import { createErrorClass } from './createErrorClass';\n\nexport interface NotFoundError extends Error {}\n\nexport interface NotFoundErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (message: string): NotFoundError;\n}\n\n/**\n * An error thrown when a value or values are missing from an\n * observable sequence.\n *\n * @see {@link operators/single}\n *\n * @class NotFoundError\n */\nexport const NotFoundError: NotFoundErrorCtor = createErrorClass(\n (_super) =>\n function NotFoundErrorImpl(this: any, message: string) {\n _super(this);\n this.name = 'NotFoundError';\n this.message = message;\n }\n);\n","import { createErrorClass } from './createErrorClass';\n\nexport interface SequenceError extends Error {}\n\nexport interface SequenceErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (message: string): SequenceError;\n}\n\n/**\n * An error thrown when something is wrong with the sequence of\n * values arriving on the observable.\n *\n * @see {@link operators/single}\n *\n * @class SequenceError\n */\nexport const SequenceError: SequenceErrorCtor = createErrorClass(\n (_super) =>\n function SequenceErrorImpl(this: any, message: string) {\n _super(this);\n this.name = 'SequenceError';\n this.message = message;\n }\n);\n","import { SchedulerLike } from '../types';\nimport { isScheduler } from '../util/isScheduler';\nimport { Observable } from '../Observable';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { observeOn } from '../operators/observeOn';\nimport { AsyncSubject } from '../AsyncSubject';\n\nexport function bindCallbackInternals(\n isNodeStyle: boolean,\n callbackFunc: any,\n resultSelector?: any,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable {\n if (resultSelector) {\n if (isScheduler(resultSelector)) {\n scheduler = resultSelector;\n } else {\n // The user provided a result selector.\n return function (this: any, ...args: any[]) {\n return (bindCallbackInternals(isNodeStyle, callbackFunc, scheduler) as any)\n .apply(this, args)\n .pipe(mapOneOrManyArgs(resultSelector as any));\n };\n }\n }\n\n // If a scheduler was passed, use our `subscribeOn` and `observeOn` operators\n // to compose that behavior for the user.\n if (scheduler) {\n return function (this: any, ...args: any[]) {\n return (bindCallbackInternals(isNodeStyle, callbackFunc) as any)\n .apply(this, args)\n .pipe(subscribeOn(scheduler!), observeOn(scheduler!));\n };\n }\n\n return function (this: any, ...args: any[]): Observable {\n // We're using AsyncSubject, because it emits when it completes,\n // and it will play the value to all late-arriving subscribers.\n const subject = new AsyncSubject();\n\n // If this is true, then we haven't called our function yet.\n let uninitialized = true;\n return new Observable((subscriber) => {\n // Add our subscriber to the subject.\n const subs = subject.subscribe(subscriber);\n\n if (uninitialized) {\n uninitialized = false;\n // We're going to execute the bound function\n // This bit is to signal that we are hitting the callback asychronously.\n // Because we don't have any anti-\"Zalgo\" gaurantees with whatever\n // function we are handed, we use this bit to figure out whether or not\n // we are getting hit in a callback synchronously during our call.\n let isAsync = false;\n\n // This is used to signal that the callback completed synchronously.\n let isComplete = false;\n\n // Call our function that has a callback. If at any time during this\n // call, an error is thrown, it will be caught by the Observable\n // subscription process and sent to the consumer.\n callbackFunc.apply(\n // Pass the appropriate `this` context.\n this,\n [\n // Pass the arguments.\n ...args,\n // And our callback handler.\n (...results: any[]) => {\n if (isNodeStyle) {\n // If this is a node callback, shift the first value off of the\n // results and check it, as it is the error argument. By shifting,\n // we leave only the argument(s) we want to pass to the consumer.\n const err = results.shift();\n if (err != null) {\n subject.error(err);\n // If we've errored, we can stop processing this function\n // as there's nothing else to do. Just return to escape.\n return;\n }\n }\n // If we have one argument, notify the consumer\n // of it as a single value, otherwise, if there's more than one, pass\n // them as an array. Note that if there are no arguments, `undefined`\n // will be emitted.\n subject.next(1 < results.length ? results : results[0]);\n // Flip this flag, so we know we can complete it in the synchronous\n // case below.\n isComplete = true;\n // If we're not asynchronous, we need to defer the `complete` call\n // until after the call to the function is over. This is because an\n // error could be thrown in the function after it calls our callback,\n // and if that is the case, if we complete here, we are unable to notify\n // the consumer than an error occured.\n if (isAsync) {\n subject.complete();\n }\n },\n ]\n );\n // If we flipped `isComplete` during the call, we resolved synchronously,\n // notify complete, because we skipped it in the callback to wait\n // to make sure there were no errors during the call.\n if (isComplete) {\n subject.complete();\n }\n\n // We're no longer synchronous. If the callback is called at this point\n // we can notify complete on the spot.\n isAsync = true;\n }\n\n // Return the subscription fron adding our subscriber to the subject.\n return subs;\n });\n };\n}\n","/* @prettier */\nimport { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { bindCallbackInternals } from './bindCallbackInternals';\n\nexport function bindCallback(\n callbackFunc: (...args: any[]) => void,\n resultSelector: (...args: any[]) => any,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable;\n\n// args is the arguments array and we push the callback on the rest tuple since the rest parameter must be last (only item) in a parameter list\nexport function bindCallback(\n callbackFunc: (...args: [...A, (...res: R) => void]) => void,\n schedulerLike?: SchedulerLike\n): (...arg: A) => Observable;\n\n/**\n * Converts a callback API to a function that returns an Observable.\n *\n * Give it a function `f` of type `f(x, callback)` and\n * it will return a function `g` that when called as `g(x)` will output an\n * Observable.\n *\n * `bindCallback` is not an operator because its input and output are not\n * Observables. The input is a function `func` with some parameters. The\n * last parameter must be a callback function that `func` calls when it is\n * done.\n *\n * The output of `bindCallback` is a function that takes the same parameters\n * as `func`, except the last one (the callback). When the output function\n * is called with arguments it will return an Observable. If function `func`\n * calls its callback with one argument, the Observable will emit that value.\n * If on the other hand the callback is called with multiple values the resulting\n * Observable will emit an array with said values as arguments.\n *\n * It is **very important** to remember that input function `func` is not called\n * when the output function is, but rather when the Observable returned by the output\n * function is subscribed. This means if `func` makes an AJAX request, that request\n * will be made every time someone subscribes to the resulting Observable, but not before.\n *\n * The last optional parameter - `scheduler` - can be used to control when the call\n * to `func` happens after someone subscribes to Observable, as well as when results\n * passed to callback will be emitted. By default, the subscription to an Observable calls `func`\n * synchronously, but using {@link asyncScheduler} as the last parameter will defer the call to `func`,\n * just like wrapping the call in `setTimeout` with a timeout of `0` would. If you were to use the async Scheduler\n * and call `subscribe` on the output Observable, all function calls that are currently executing\n * will end before `func` is invoked.\n *\n * By default, results passed to the callback are emitted immediately after `func` invokes the callback.\n * In particular, if the callback is called synchronously, then the subscription of the resulting Observable\n * will call the `next` function synchronously as well. If you want to defer that call,\n * you may use {@link asyncScheduler} just as before. This means that by using `Scheduler.async` you can\n * ensure that `func` always calls its callback asynchronously, thus avoiding terrifying Zalgo.\n *\n * Note that the Observable created by the output function will always emit a single value\n * and then complete immediately. If `func` calls the callback multiple times, values from subsequent\n * calls will not appear in the stream. If you need to listen for multiple calls,\n * you probably want to use {@link fromEvent} or {@link fromEventPattern} instead.\n *\n * If `func` depends on some context (`this` property) and is not already bound, the context of `func`\n * will be the context that the output function has at call time. In particular, if `func`\n * is called as a method of some objec and if `func` is not already bound, in order to preserve the context\n * it is recommended that the context of the output function is set to that object as well.\n *\n * If the input function calls its callback in the \"node style\" (i.e. first argument to callback is\n * optional error parameter signaling whether the call failed or not), {@link bindNodeCallback}\n * provides convenient error handling and probably is a better choice.\n * `bindCallback` will treat such functions the same as any other and error parameters\n * (whether passed or not) will always be interpreted as regular callback argument.\n *\n * ## Examples\n *\n * ### Convert jQuery's getJSON to an Observable API\n * ```ts\n * import { bindCallback } from 'rxjs';\n * import * as jQuery from 'jquery';\n *\n * // Suppose we have jQuery.getJSON('/my/url', callback)\n * const getJSONAsObservable = bindCallback(jQuery.getJSON);\n * const result = getJSONAsObservable('/my/url');\n * result.subscribe(x => console.log(x), e => console.error(e));\n * ```\n *\n * ### Receive an array of arguments passed to a callback\n * ```ts\n * import { bindCallback } from 'rxjs';\n *\n * const someFunction = (cb) => {\n * cb(5, 'some string', {someProperty: 'someValue'})\n * };\n *\n * const boundSomeFunction = bindCallback(someFunction);\n * boundSomeFunction(12, 10).subscribe(values => {\n * console.log(values); // [22, 2]\n * });\n * ```\n *\n * ### Compare behaviour with and without async Scheduler\n * ```ts\n * import { bindCallback, asyncScheduler } from 'rxjs';\n *\n * function iCallMyCallbackSynchronously(cb) {\n * cb();\n * }\n *\n * const boundSyncFn = bindCallback(iCallMyCallbackSynchronously);\n * const boundAsyncFn = bindCallback(iCallMyCallbackSynchronously, null, asyncScheduler);\n *\n * boundSyncFn().subscribe(() => console.log('I was sync!'));\n * boundAsyncFn().subscribe(() => console.log('I was async!'));\n * console.log('This happened...');\n *\n * // Logs:\n * // I was sync!\n * // This happened...\n * // I was async!\n * ```\n *\n * ### Use bindCallback on an object method\n * ```ts\n * import { bindCallback } from 'rxjs';\n *\n * const boundMethod = bindCallback(someObject.methodWithCallback);\n * boundMethod\n * .call(someObject) // make sure methodWithCallback has access to someObject\n * .subscribe(subscriber);\n * ```\n *\n * @see {@link bindNodeCallback}\n * @see {@link from}\n *\n * @param {function} func A function with a callback as the last parameter.\n * @param {SchedulerLike} [scheduler] The scheduler on which to schedule the\n * callbacks.\n * @return {function(...params: *): Observable} A function which returns the\n * Observable that delivers the same values the callback would deliver.\n */\nexport function bindCallback(\n callbackFunc: (...args: [...any[], (...res: any) => void]) => void,\n resultSelector?: ((...args: any[]) => any) | SchedulerLike,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable {\n return bindCallbackInternals(false, callbackFunc, resultSelector, scheduler);\n}\n","/* @prettier */\nimport { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { bindCallbackInternals } from './bindCallbackInternals';\n\nexport function bindNodeCallback(\n callbackFunc: (...args: any[]) => void,\n resultSelector: (...args: any[]) => any,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable;\n\n// args is the arguments array and we push the callback on the rest tuple since the rest parameter must be last (only item) in a parameter list\nexport function bindNodeCallback(\n callbackFunc: (...args: [...A, (err: any, ...res: R) => void]) => void,\n schedulerLike?: SchedulerLike\n): (...arg: A) => Observable;\n\n/**\n * Converts a Node.js-style callback API to a function that returns an\n * Observable.\n *\n * It's just like {@link bindCallback}, but the\n * callback is expected to be of type `callback(error, result)`.\n *\n * `bindNodeCallback` is not an operator because its input and output are not\n * Observables. The input is a function `func` with some parameters, but the\n * last parameter must be a callback function that `func` calls when it is\n * done. The callback function is expected to follow Node.js conventions,\n * where the first argument to the callback is an error object, signaling\n * whether call was successful. If that object is passed to callback, it means\n * something went wrong.\n *\n * The output of `bindNodeCallback` is a function that takes the same\n * parameters as `func`, except the last one (the callback). When the output\n * function is called with arguments, it will return an Observable.\n * If `func` calls its callback with error parameter present, Observable will\n * error with that value as well. If error parameter is not passed, Observable will emit\n * second parameter. If there are more parameters (third and so on),\n * Observable will emit an array with all arguments, except first error argument.\n *\n * Note that `func` will not be called at the same time output function is,\n * but rather whenever resulting Observable is subscribed. By default call to\n * `func` will happen synchronously after subscription, but that can be changed\n * with proper `scheduler` provided as optional third parameter. {@link SchedulerLike}\n * can also control when values from callback will be emitted by Observable.\n * To find out more, check out documentation for {@link bindCallback}, where\n * {@link SchedulerLike} works exactly the same.\n *\n * As in {@link bindCallback}, context (`this` property) of input function will be set to context\n * of returned function, when it is called.\n *\n * After Observable emits value, it will complete immediately. This means\n * even if `func` calls callback again, values from second and consecutive\n * calls will never appear on the stream. If you need to handle functions\n * that call callbacks multiple times, check out {@link fromEvent} or\n * {@link fromEventPattern} instead.\n *\n * Note that `bindNodeCallback` can be used in non-Node.js environments as well.\n * \"Node.js-style\" callbacks are just a convention, so if you write for\n * browsers or any other environment and API you use implements that callback style,\n * `bindNodeCallback` can be safely used on that API functions as well.\n *\n * Remember that Error object passed to callback does not have to be an instance\n * of JavaScript built-in `Error` object. In fact, it does not even have to an object.\n * Error parameter of callback function is interpreted as \"present\", when value\n * of that parameter is truthy. It could be, for example, non-zero number, non-empty\n * string or boolean `true`. In all of these cases resulting Observable would error\n * with that value. This means usually regular style callbacks will fail very often when\n * `bindNodeCallback` is used. If your Observable errors much more often then you\n * would expect, check if callback really is called in Node.js-style and, if not,\n * switch to {@link bindCallback} instead.\n *\n * Note that even if error parameter is technically present in callback, but its value\n * is falsy, it still won't appear in array emitted by Observable.\n *\n * ## Examples\n * ### Read a file from the filesystem and get the data as an Observable\n * ```ts\n * import * as fs from 'fs';\n * const readFileAsObservable = bindNodeCallback(fs.readFile);\n * const result = readFileAsObservable('./roadNames.txt', 'utf8');\n * result.subscribe(x => console.log(x), e => console.error(e));\n * ```\n *\n * ### Use on function calling callback with multiple arguments\n * ```ts\n * someFunction((err, a, b) => {\n * console.log(err); // null\n * console.log(a); // 5\n * console.log(b); // \"some string\"\n * });\n * const boundSomeFunction = bindNodeCallback(someFunction);\n * boundSomeFunction()\n * .subscribe(value => {\n * console.log(value); // [5, \"some string\"]\n * });\n * ```\n *\n * ### Use on function calling callback in regular style\n * ```ts\n * someFunction(a => {\n * console.log(a); // 5\n * });\n * const boundSomeFunction = bindNodeCallback(someFunction);\n * boundSomeFunction()\n * .subscribe(\n * value => {} // never gets called\n * err => console.log(err) // 5\n * );\n * ```\n *\n * @see {@link bindCallback}\n * @see {@link from}\n *\n * @param {function} func Function with a Node.js-style callback as the last parameter.\n * @param {SchedulerLike} [scheduler] The scheduler on which to schedule the\n * callbacks.\n * @return {function(...params: *): Observable} A function which returns the\n * Observable that delivers the same values the Node.js callback would\n * deliver.\n */\nexport function bindNodeCallback(\n callbackFunc: (...args: [...any[], (err: any, ...res: any) => void]) => void,\n resultSelector?: ((...args: any[]) => any) | SchedulerLike,\n scheduler?: SchedulerLike\n): (...args: any[]) => Observable {\n return bindCallbackInternals(true, callbackFunc, resultSelector, scheduler);\n}\n","import { Connectable, ObservableInput, SubjectLike } from '../types';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\nimport { Observable } from '../Observable';\nimport { defer } from './defer';\n\nexport interface ConnectableConfig {\n /**\n * A factory function used to create the Subject through which the source\n * is multicast. By default this creates a {@link Subject}.\n */\n connector: () => SubjectLike;\n /**\n * If true, the resulting observable will reset internal state upon disconnetion\n * and return to a \"cold\" state. This allows the resulting observable to be\n * reconnected.\n * If false, upon disconnection, the connecting subject will remain the\n * connecting subject, meaning the resulting observable will not go \"cold\" again,\n * and subsequent repeats or resubscriptions will resubscribe to that same subject.\n */\n resetOnDisconnect?: boolean;\n}\n\n/**\n * The default configuration for `connectable`.\n */\nconst DEFAULT_CONFIG: ConnectableConfig = {\n connector: () => new Subject(),\n resetOnDisconnect: true,\n};\n\n/**\n * Creates an observable that multicasts once `connect()` is called on it.\n *\n * @param source The observable source to make connectable.\n * @param config The configuration object for `connectable`.\n * @returns A \"connectable\" observable, that has a `connect()` method, that you must call to\n * connect the source to all consumers through the subject provided as the connector.\n */\nexport function connectable(source: ObservableInput, config: ConnectableConfig = DEFAULT_CONFIG): Connectable {\n // The subscription representing the connection.\n let connection: Subscription | null = null;\n const { connector, resetOnDisconnect = true } = config;\n let subject = connector();\n\n const result: any = new Observable((subscriber) => {\n return subject.subscribe(subscriber);\n });\n\n // Define the `connect` function. This is what users must call\n // in order to \"connect\" the source to the subject that is\n // multicasting it.\n result.connect = () => {\n if (!connection || connection.closed) {\n connection = defer(() => source).subscribe(subject);\n if (resetOnDisconnect) {\n connection.add(() => (subject = connector()));\n }\n }\n return connection;\n };\n\n return result;\n}\n","import { Observable } from '../Observable';\nimport { isFunction } from '../util/isFunction';\nimport { NodeEventHandler } from './fromEvent';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\n\n/* tslint:disable:max-line-length */\nexport function fromEventPattern(\n addHandler: (handler: NodeEventHandler) => any,\n removeHandler?: (handler: NodeEventHandler, signal?: any) => void\n): Observable;\nexport function fromEventPattern(\n addHandler: (handler: NodeEventHandler) => any,\n removeHandler?: (handler: NodeEventHandler, signal?: any) => void,\n resultSelector?: (...args: any[]) => T\n): Observable;\n/* tslint:enable:max-line-length */\n\n/**\n * Creates an Observable from an arbitrary API for registering event handlers.\n *\n * When that method for adding event handler was something {@link fromEvent}\n * was not prepared for.\n *\n * ![](fromEventPattern.png)\n *\n * `fromEventPattern` allows you to convert into an Observable any API that supports registering handler functions\n * for events. It is similar to {@link fromEvent}, but far\n * more flexible. In fact, all use cases of {@link fromEvent} could be easily handled by\n * `fromEventPattern` (although in slightly more verbose way).\n *\n * This operator accepts as a first argument an `addHandler` function, which will be injected with\n * handler parameter. That handler is actually an event handler function that you now can pass\n * to API expecting it. `addHandler` will be called whenever Observable\n * returned by the operator is subscribed, so registering handler in API will not\n * necessarily happen when `fromEventPattern` is called.\n *\n * After registration, every time an event that we listen to happens,\n * Observable returned by `fromEventPattern` will emit value that event handler\n * function was called with. Note that if event handler was called with more\n * than one argument, second and following arguments will not appear in the Observable.\n *\n * If API you are using allows to unregister event handlers as well, you can pass to `fromEventPattern`\n * another function - `removeHandler` - as a second parameter. It will be injected\n * with the same handler function as before, which now you can use to unregister\n * it from the API. `removeHandler` will be called when consumer of resulting Observable\n * unsubscribes from it.\n *\n * In some APIs unregistering is actually handled differently. Method registering an event handler\n * returns some kind of token, which is later used to identify which function should\n * be unregistered or it itself has method that unregisters event handler.\n * If that is the case with your API, make sure token returned\n * by registering method is returned by `addHandler`. Then it will be passed\n * as a second argument to `removeHandler`, where you will be able to use it.\n *\n * If you need access to all event handler parameters (not only the first one),\n * or you need to transform them in any way, you can call `fromEventPattern` with optional\n * third parameter - project function which will accept all arguments passed to\n * event handler when it is called. Whatever is returned from project function will appear on\n * resulting stream instead of usual event handlers first argument. This means\n * that default project can be thought of as function that takes its first parameter\n * and ignores the rest.\n *\n * ## Example\n * ### Emits clicks happening on the DOM document\n *\n * ```ts\n * import { fromEventPattern } from 'rxjs';\n *\n * function addClickHandler(handler) {\n * document.addEventListener('click', handler);\n * }\n *\n * function removeClickHandler(handler) {\n * document.removeEventListener('click', handler);\n * }\n *\n * const clicks = fromEventPattern(\n * addClickHandler,\n * removeClickHandler\n * );\n * clicks.subscribe(x => console.log(x));\n *\n * // Whenever you click anywhere in the browser, DOM MouseEvent\n * // object will be logged.\n * ```\n *\n * ## Example\n * ### Use with API that returns cancellation token\n *\n * ```ts\n * import { fromEventPattern } from 'rxjs';\n *\n * const token = someAPI.registerEventHandler(function() {});\n * someAPI.unregisterEventHandler(token); // this APIs cancellation method accepts\n * // not handler itself, but special token.\n *\n * const someAPIObservable = fromEventPattern(\n * function(handler) { return someAPI.registerEventHandler(handler); }, // Note that we return the token here...\n * function(handler, token) { someAPI.unregisterEventHandler(token); } // ...to then use it here.\n * );\n * ```\n *\n * ## Example\n * ### Use with project function\n *\n * ```ts\n * import { fromEventPattern } from 'rxjs';\n *\n * someAPI.registerEventHandler((eventType, eventMessage) => {\n * console.log(eventType, eventMessage); // Logs \"EVENT_TYPE\" \"EVENT_MESSAGE\" to console.\n * });\n *\n * const someAPIObservable = fromEventPattern(\n * handler => someAPI.registerEventHandler(handler),\n * handler => someAPI.unregisterEventHandler(handler)\n * (eventType, eventMessage) => eventType + \" --- \" + eventMessage // without that function only \"EVENT_TYPE\"\n * ); // would be emitted by the Observable\n *\n * someAPIObservable.subscribe(value => console.log(value));\n *\n * // Logs:\n * // \"EVENT_TYPE --- EVENT_MESSAGE\"\n * ```\n *\n * @see {@link fromEvent}\n * @see {@link bindCallback}\n * @see {@link bindNodeCallback}\n *\n * @param {function(handler: Function): any} addHandler A function that takes\n * a `handler` function as argument and attaches it somehow to the actual\n * source of events.\n * @param {function(handler: Function, token?: any): void} [removeHandler] A function that\n * takes a `handler` function as an argument and removes it from the event source. If `addHandler`\n * returns some kind of token, `removeHandler` function will have it as a second parameter.\n * @param {function(...args: any): T} [project] A function to\n * transform results. It takes the arguments from the event handler and\n * should return a single value.\n * @return {Observable} Observable which, when an event happens, emits first parameter\n * passed to registered event handler. Alternatively it emits whatever project function returns\n * at that moment.\n */\nexport function fromEventPattern(\n addHandler: (handler: NodeEventHandler) => any,\n removeHandler?: (handler: NodeEventHandler, signal?: any) => void,\n resultSelector?: (...args: any[]) => T\n): Observable {\n if (resultSelector) {\n return fromEventPattern(addHandler, removeHandler).pipe(mapOneOrManyArgs(resultSelector));\n }\n\n return new Observable((subscriber) => {\n const handler = (...e: T[]) => subscriber.next(e.length === 1 ? e[0] : e);\n const retValue = addHandler(handler);\n return isFunction(removeHandler) ? () => removeHandler(handler, retValue) : undefined;\n });\n}\n","import { Observable } from '../Observable';\nimport { identity } from '../util/identity';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { isScheduler } from '../util/isScheduler';\nimport { defer } from './defer';\nimport { scheduleIterable } from '../scheduled/scheduleIterable';\n\ntype ConditionFunc = (state: S) => boolean;\ntype IterateFunc = (state: S) => S;\ntype ResultFunc = (state: S) => T;\n\nexport interface GenerateBaseOptions {\n /**\n * Initial state.\n */\n initialState: S;\n /**\n * Condition function that accepts state and returns boolean.\n * When it returns false, the generator stops.\n * If not specified, a generator never stops.\n */\n condition?: ConditionFunc;\n /**\n * Iterate function that accepts state and returns new state.\n */\n iterate: IterateFunc;\n /**\n * SchedulerLike to use for generation process.\n * By default, a generator starts immediately.\n */\n scheduler?: SchedulerLike;\n}\n\nexport interface GenerateOptions extends GenerateBaseOptions {\n /**\n * Result selection function that accepts state and returns a value to emit.\n */\n resultSelector: ResultFunc;\n}\n\n/**\n * Generates an observable sequence by running a state-driven loop\n * producing the sequence's elements, using the specified scheduler\n * to send out observer messages.\n *\n * ![](generate.png)\n *\n * ## Examples\n *\n * ### Produces sequences of number\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(0, x => x < 3, x => x + 1, x => x);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * ```\n *\n * ### Use asap scheduler\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(1, x => x < 5, x => x * 2, x => x + 1, asap);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 2\n * // 3\n * // 5\n * ```\n *\n * @see {@link from}\n * @see {@link Observable}\n *\n * @param {S} initialState Initial state.\n * @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).\n * @param {function (state: S): S} iterate Iteration step function.\n * @param {function (state: S): T} resultSelector Selector function for results produced in the sequence. (deprecated)\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} on which to run the generator loop. If not provided, defaults to emit immediately.\n * @returns {Observable} The generated sequence.\n * @deprecated Instead of passing separate arguments, use the options argument. Signatures taking separate arguments will be removed in v8.\n */\nexport function generate(\n initialState: S,\n condition: ConditionFunc,\n iterate: IterateFunc,\n resultSelector: ResultFunc,\n scheduler?: SchedulerLike\n): Observable;\n\n/**\n * Generates an Observable by running a state-driven loop\n * that emits an element on each iteration.\n *\n * Use it instead of nexting values in a for loop.\n *\n * ![](generate.png)\n *\n * `generate` allows you to create a stream of values generated with a loop very similar to\n * a traditional for loop. The first argument of `generate` is a beginning value. The second argument\n * is a function that accepts this value and tests if some condition still holds. If it does,\n * then the loop continues, if not, it stops. The third value is a function which takes the\n * previously defined value and modifies it in some way on each iteration. Note how these three parameters\n * are direct equivalents of three expressions in a traditional for loop: the first expression\n * initializes some state (for example, a numeric index), the second tests if the loop can perform the next\n * iteration (for example, if the index is lower than 10) and the third states how the defined value\n * will be modified on every step (for example, the index will be incremented by one).\n *\n * Return value of a `generate` operator is an Observable that on each loop iteration\n * emits a value. First of all, the condition function is ran. If it returns true, then the Observable\n * emits the currently stored value (initial value at the first iteration) and finally updates\n * that value with iterate function. If at some point the condition returns false, then the Observable\n * completes at that moment.\n *\n * Optionally you can pass a fourth parameter to `generate` - a result selector function which allows you\n * to immediately map the value that would normally be emitted by an Observable.\n *\n * If you find three anonymous functions in `generate` call hard to read, you can provide\n * a single object to the operator instead where the object has the properties: `initialState`,\n * `condition`, `iterate` and `resultSelector`, which should have respective values that you\n * would normally pass to `generate`. `resultSelector` is still optional, but that form\n * of calling `generate` allows you to omit `condition` as well. If you omit it, that means\n * condition always holds, or in other words the resulting Observable will never complete.\n *\n * Both forms of `generate` can optionally accept a scheduler. In case of a multi-parameter call,\n * scheduler simply comes as a last argument (no matter if there is a `resultSelector`\n * function or not). In case of a single-parameter call, you can provide it as a\n * `scheduler` property on the object passed to the operator. In both cases, a scheduler decides when\n * the next iteration of the loop will happen and therefore when the next value will be emitted\n * by the Observable. For example, to ensure that each value is pushed to the Observer\n * on a separate task in the event loop, you could use the `async` scheduler. Note that\n * by default (when no scheduler is passed) values are simply emitted synchronously.\n *\n *\n * ## Examples\n *\n * ### Use with condition and iterate functions\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(0, x => x < 3, x => x + 1);\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // \"Complete!\"\n * ```\n *\n * ### Use with condition, iterate and resultSelector functions\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate(0, x => x < 3, x => x + 1, x => x * 1000);\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1000\n * // 2000\n * // \"complete!\"\n * ```\n *\n * ### Use with options object\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * condition(value) { return value < 3; },\n * iterate(value) { return value + 1; },\n * resultSelector(value) { return value * 1000; }\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1000\n * // 2000\n * // \"Complete!\"\n * ```\n *\n * ### Use options object without condition function\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * iterate(value) { return value + 1; },\n * resultSelector(value) { return value * 1000; }\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!') // This will never run\n * });\n *\n * // Logs:\n * // 0\n * // 1000\n * // 2000\n * // 3000\n * // ...and never stops.\n * ```\n *\n * @see {@link from}\n * @see {@link index/Observable.create}\n *\n * @param {S} initialState Initial state.\n * @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).\n * @param {function (state: S): S} iterate Iteration step function.\n * @param {function (state: S): T} [resultSelector] Selector function for results produced in the sequence.\n * @param {Scheduler} [scheduler] A {@link Scheduler} on which to run the generator loop. If not provided, defaults to emitting immediately.\n * @return {Observable} The generated sequence.\n * @deprecated Instead of passing separate arguments, use the options argument. Signatures taking separate arguments will be removed in v8.\n */\nexport function generate(\n initialState: S,\n condition: ConditionFunc,\n iterate: IterateFunc,\n scheduler?: SchedulerLike\n): Observable;\n\n/**\n * Generates an observable sequence by running a state-driven loop\n * producing the sequence's elements, using the specified scheduler\n * to send out observer messages.\n * The overload accepts options object that might contain initial state, iterate,\n * condition and scheduler.\n *\n * ![](generate.png)\n *\n * ## Examples\n *\n * ### Use options object with condition function\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * condition: x => x < 3,\n * iterate: x => x + 1,\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // \"Complete!\".\n * ```\n *\n * @see {@link from}\n * @see {@link Observable}\n *\n * @param {GenerateBaseOptions} options Object that must contain initialState, iterate and might contain condition and scheduler.\n * @returns {Observable} The generated sequence.\n */\nexport function generate(options: GenerateBaseOptions): Observable;\n\n/**\n * Generates an observable sequence by running a state-driven loop\n * producing the sequence's elements, using the specified scheduler\n * to send out observer messages.\n * The overload accepts options object that might contain initial state, iterate,\n * condition, result selector and scheduler.\n *\n * ![](generate.png)\n *\n * ## Examples\n *\n * ### Use options object with condition and iterate function\n *\n * ```ts\n * import { generate } from 'rxjs';\n *\n * const result = generate({\n * initialState: 0,\n * condition: x => x < 3,\n * iterate: x => x + 1,\n * resultSelector: x => x,\n * });\n *\n * result.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('complete!')\n * });\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // \"Complete!\".\n * ```\n *\n * @see {@link from}\n * @see {@link Observable}\n *\n * @param {GenerateOptions} options Object that must contain initialState, iterate, resultSelector and might contain condition and scheduler.\n * @returns {Observable} The generated sequence.\n */\nexport function generate(options: GenerateOptions): Observable;\n\nexport function generate(\n initialStateOrOptions: S | GenerateOptions,\n condition?: ConditionFunc,\n iterate?: IterateFunc,\n resultSelectorOrScheduler?: ResultFunc | SchedulerLike,\n scheduler?: SchedulerLike\n): Observable {\n let resultSelector: ResultFunc;\n let initialState: S;\n\n // TODO: Remove this as we move away from deprecated signatures\n // and move towards a configuration object argument.\n if (arguments.length === 1) {\n // If we only have one argument, we can assume it is a configuration object.\n // Note that folks not using TypeScript may trip over this.\n ({\n initialState,\n condition,\n iterate,\n resultSelector = identity as ResultFunc,\n scheduler,\n } = initialStateOrOptions as GenerateOptions);\n } else {\n // Deprecated arguments path. Figure out what the user\n // passed and set it here.\n initialState = initialStateOrOptions as S;\n if (!resultSelectorOrScheduler || isScheduler(resultSelectorOrScheduler)) {\n resultSelector = identity as ResultFunc;\n scheduler = resultSelectorOrScheduler as SchedulerLike;\n } else {\n resultSelector = resultSelectorOrScheduler as ResultFunc;\n }\n }\n\n // The actual generator used to \"generate\" values.\n function* gen() {\n for (let state = initialState; !condition || condition(state); state = iterate!(state)) {\n yield resultSelector(state);\n }\n }\n\n // We use `defer` because we want to defer the creation of the iterator from the iterable.\n return defer(\n (scheduler\n ? // If a scheduler was provided, use `scheduleIterable` to ensure that iteration/generation\n // happens on the scheduler.\n () => scheduleIterable(gen(), scheduler!)\n : // Otherwise, if there's no scheduler, we can just use the generator function directly in\n // `defer` and executing it will return the generator (which is iterable).\n gen) as () => ObservableInput\n );\n}\n","import { Observable } from '../Observable';\nimport { defer } from './defer';\nimport { ObservableInput } from '../types';\n\n/**\n * Checks a boolean at subscription time, and chooses between one of two observable sources\n *\n * `iif` excepts a function that returns a boolean (the `condition` function), and two sources,\n * the `trueResult` and the `falseResult`, and returns an Observable.\n *\n * At the moment of subscription, the `condition` function is called. If the result is `true`, the\n * subscription will be to the source passed as the `trueResult`, otherwise, the subscription will be\n * to the source passed as the `falseResult`.\n *\n * If you need to check more than two options to choose between more than one observable, have a look at the {@link defer} creation method.\n *\n * ## Examples\n *\n * ### Change at runtime which Observable will be subscribed\n *\n * ```ts\n * import { iif, of } from 'rxjs';\n *\n * let subscribeToFirst;\n * const firstOrSecond = iif(\n * () => subscribeToFirst,\n * of('first'),\n * of('second'),\n * );\n *\n * subscribeToFirst = true;\n * firstOrSecond.subscribe(value => console.log(value));\n *\n * // Logs:\n * // \"first\"\n *\n * subscribeToFirst = false;\n * firstOrSecond.subscribe(value => console.log(value));\n *\n * // Logs:\n * // \"second\"\n *\n * ```\n *\n * ### Control an access to an Observable\n *\n * ```ts\n * let accessGranted;\n * const observableIfYouHaveAccess = iif(\n * () => accessGranted,\n * of('It seems you have an access...'), // Note that only one Observable is passed to the operator.\n * );\n *\n * accessGranted = true;\n * observableIfYouHaveAccess.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('The end'),\n * );\n *\n * // Logs:\n * // \"It seems you have an access...\"\n * // \"The end\"\n *\n * accessGranted = false;\n * observableIfYouHaveAccess.subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('The end'),\n * );\n *\n * // Logs:\n * // \"The end\"\n * ```\n *\n * @see {@link defer}\n *\n * @param condition Condition which Observable should be chosen.\n * @param trueResult An Observable that will be subscribed if condition is true.\n * @param falseResult An Observable that will be subscribed if condition is false.\n * @return An observable that proxies to `trueResult` or `falseResult`, depending on the result of the `condition` function.\n */\nexport function iif(condition: () => boolean, trueResult: ObservableInput, falseResult: ObservableInput): Observable {\n return defer(() => (condition() ? trueResult : falseResult));\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple } from '../types';\nimport { EMPTY } from './empty';\nimport { onErrorResumeNext as onErrorResumeNextWith } from '../operators/onErrorResumeNext';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\n\n/* tslint:disable:max-line-length */\nexport function onErrorResumeNext(sources: [...ObservableInputTuple]): Observable;\nexport function onErrorResumeNext(...sources: [...ObservableInputTuple]): Observable;\n\n/* tslint:enable:max-line-length */\n\n/**\n * When any of the provided Observable emits an complete or error notification, it immediately subscribes to the next one\n * that was passed.\n *\n * Execute series of Observables no matter what, even if it means swallowing errors.\n *\n * ![](onErrorResumeNext.png)\n *\n * `onErrorResumeNext` Will subscribe to each observable source it is provided, in order.\n * If the source it's subscribed to emits an error or completes, it will move to the next source\n * without error.\n *\n * If `onErrorResumeNext` is provided no arguments, or a single, empty array, it will return {@link index/EMPTY}.\n *\n * `onErrorResumeNext` is basically {@link concat}, only it will continue, even if one of its\n * sources emits an error.\n *\n * Note that there is no way to handle any errors thrown by sources via the result of\n * `onErrorResumeNext`. If you want to handle errors thrown in any given source, you can\n * always use the {@link catchError} operator on them before passing them into `onErrorResumeNext`.\n *\n * ## Example\n * Subscribe to the next Observable after map fails\n * ```ts\n * import { onErrorResumeNext, of } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * onErrorResumeNext(\n * of(1, 2, 3, 0).pipe(\n * map(x => {\n * if (x === 0) throw Error();\n * return 10 / x;\n * })\n * ),\n * of(1, 2, 3),\n * )\n * .subscribe(\n * val => console.log(val),\n * err => console.log(err), // Will never be called.\n * () => console.log('done'),\n * );\n *\n * // Logs:\n * // 10\n * // 5\n * // 3.3333333333333335\n * // 1\n * // 2\n * // 3\n * // \"done\"\n * ```\n *\n * @see {@link concat}\n * @see {@link catchError}\n *\n * @param {...ObservableInput} sources Observables (or anything that *is* observable) passed either directly or as an array.\n * @return {Observable} An Observable that concatenates all sources, one after the other,\n * ignoring all errors, such that any error causes it to move on to the next source.\n */\nexport function onErrorResumeNext(\n ...sources: [[...ObservableInputTuple]] | [...ObservableInputTuple]\n): Observable {\n return onErrorResumeNextWith(argsOrArgArray(sources))(EMPTY);\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\nexport function onErrorResumeNext(\n sources: [...ObservableInputTuple]\n): OperatorFunction;\nexport function onErrorResumeNext(\n ...sources: [...ObservableInputTuple]\n): OperatorFunction;\n\n/**\n * When any of the provided Observable emits an complete or error notification, it immediately subscribes to the next one\n * that was passed.\n *\n * Execute series of Observables, subscribes to next one on error or complete.\n *\n * ![](onErrorResumeNext.png)\n *\n * `onErrorResumeNext` is an operator that accepts a series of Observables, provided either directly as\n * arguments or as an array. If no single Observable is provided, returned Observable will simply behave the same\n * as the source.\n *\n * `onErrorResumeNext` returns an Observable that starts by subscribing and re-emitting values from the source Observable.\n * When its stream of values ends - no matter if Observable completed or emitted an error - `onErrorResumeNext`\n * will subscribe to the first Observable that was passed as an argument to the method. It will start re-emitting\n * its values as well and - again - when that stream ends, `onErrorResumeNext` will proceed to subscribing yet another\n * Observable in provided series, no matter if previous Observable completed or ended with an error. This will\n * be happening until there is no more Observables left in the series, at which point returned Observable will\n * complete - even if the last subscribed stream ended with an error.\n *\n * `onErrorResumeNext` can be therefore thought of as version of {@link concat} operator, which is more permissive\n * when it comes to the errors emitted by its input Observables. While `concat` subscribes to the next Observable\n * in series only if previous one successfully completed, `onErrorResumeNext` subscribes even if it ended with\n * an error.\n *\n * Note that you do not get any access to errors emitted by the Observables. In particular do not\n * expect these errors to appear in error callback passed to {@link Observable#subscribe}. If you want to take\n * specific actions based on what error was emitted by an Observable, you should try out {@link catchError} instead.\n *\n *\n * ## Example\n * Subscribe to the next Observable after map fails\n * ```ts\n * import { of } from 'rxjs';\n * import { onErrorResumeNext, map } from 'rxjs/operators';\n *\n * of(1, 2, 3, 0).pipe(\n * map(x => {\n * if (x === 0) { throw Error(); }\n * return 10 / x;\n * }),\n * onErrorResumeNext(of(1, 2, 3)),\n * )\n * .subscribe(\n * val => console.log(val),\n * err => console.log(err), // Will never be called.\n * () => console.log('that\\'s it!')\n * );\n *\n * // Logs:\n * // 10\n * // 5\n * // 3.3333333333333335\n * // 1\n * // 2\n * // 3\n * // \"that's it!\"\n * ```\n *\n * @see {@link concat}\n * @see {@link catchError}\n *\n * @param {...ObservableInput} nextSources Observables passed either directly or as an array.\n * @return A function that returns an Observable that emits values from source\n * Observable, but - if it errors - subscribes to the next passed Observable\n * and so on, until it completes or runs out of Observables.\n */\nexport function onErrorResumeNext(\n ...sources: [[...ObservableInputTuple]] | [...ObservableInputTuple]\n): OperatorFunction {\n // For some reason, TS 4.1 RC gets the inference wrong here and infers the\n // result to be `A[number][]` - completely dropping the ObservableInput part\n // of the type. This makes no sense whatsoever. As a workaround, the type is\n // asserted explicitly.\n const nextSources = (argsOrArgArray(sources) as unknown) as ObservableInputTuple;\n\n return operate((source, subscriber) => {\n const remaining = [source, ...nextSources];\n const subscribeNext = () => {\n if (!subscriber.closed) {\n if (remaining.length > 0) {\n let nextSource: Observable;\n try {\n nextSource = innerFrom(remaining.shift()!);\n } catch (err) {\n subscribeNext();\n return;\n }\n\n // Here we have to use one of our Subscribers, or it does not wire up\n // The `closed` property of upstream Subscribers synchronously, that\n // would result in situation were we could not stop a synchronous firehose\n // with something like `take(3)`.\n const innerSub = new OperatorSubscriber(subscriber, undefined, noop, noop);\n subscriber.add(nextSource.subscribe(innerSub));\n innerSub.add(subscribeNext);\n } else {\n subscriber.complete();\n }\n }\n };\n\n subscribeNext();\n });\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { from } from './from';\n\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(arr: readonly T[], scheduler?: SchedulerLike): Observable<[string, T]>;\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs>(obj: O, scheduler?: SchedulerLike): Observable<[keyof O, O[keyof O]]>;\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(iterable: Iterable, scheduler?: SchedulerLike): Observable<[string, T]>;\n/**\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(\n n: number | bigint | boolean | ((...args: any[]) => any) | symbol,\n scheduler?: SchedulerLike\n): Observable<[never, never]>;\n\n/**\n * Convert an object into an Observable of `[key, value]` pairs.\n *\n * Turn entries of an object into a stream.\n *\n * ![](pairs.png)\n *\n * `pairs` takes an arbitrary object and returns an Observable that emits arrays. Each\n * emitted array has exactly two elements - the first is a key from the object\n * and the second is a value corresponding to that key. Keys are extracted from\n * an object via `Object.keys` function, which means that they will be only\n * enumerable keys that are present on an object directly - not ones inherited\n * via prototype chain.\n *\n * By default these arrays are emitted synchronously. To change that you can\n * pass a {@link SchedulerLike} as a second argument to `pairs`.\n *\n * ## Example\n * ### Converts an object to an Observable\n * ```ts\n * import { pairs } from 'rxjs';\n *\n * const obj = {\n * foo: 42,\n * bar: 56,\n * baz: 78\n * };\n *\n * pairs(obj).subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Logs:\n * // [\"foo\", 42],\n * // [\"bar\", 56],\n * // [\"baz\", 78],\n * // \"Complete!\"\n * ```\n *\n * ### Object.entries required\n *\n * In IE, you will need to polyfill `Object.entries` in order to use this.\n * [MDN has a polyfill here](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/entries)\n *\n * @param {Object} obj The object to inspect and turn into an\n * Observable sequence.\n * @param {Scheduler} [scheduler] An optional IScheduler to schedule\n * when resulting Observable will emit values.\n * @returns {(Observable>)} An observable sequence of\n * [key, value] pairs from the object.\n * @deprecated Use `from(Object.entries(obj))` instead. Will be removed in v8.\n */\nexport function pairs(obj: any, scheduler?: SchedulerLike) {\n return from(Object.entries(obj), scheduler as any);\n}\n","export function not(pred: (value: T, index: number) => boolean, thisArg: any): (value: T, index: number) => boolean {\n return (value: T, index: number) => !pred.call(thisArg, value, index); \n}","import { not } from '../util/not';\nimport { filter } from '../operators/filter';\nimport { ObservableInput } from '../types';\nimport { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function partition(\n source: ObservableInput,\n predicate: (this: A, value: T, index: number) => value is U,\n thisArg: A\n): [Observable, Observable>];\nexport function partition(\n source: ObservableInput,\n predicate: (value: T, index: number) => value is U\n): [Observable, Observable>];\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function partition(\n source: ObservableInput,\n predicate: (this: A, value: T, index: number) => boolean,\n thisArg: A\n): [Observable, Observable];\nexport function partition(source: ObservableInput, predicate: (value: T, index: number) => boolean): [Observable, Observable];\n\n/**\n * Splits the source Observable into two, one with values that satisfy a\n * predicate, and another with values that don't satisfy the predicate.\n *\n * It's like {@link filter}, but returns two Observables:\n * one like the output of {@link filter}, and the other with values that did not\n * pass the condition.\n *\n * ![](partition.png)\n *\n * `partition` outputs an array with two Observables that partition the values\n * from the source Observable through the given `predicate` function. The first\n * Observable in that array emits source values for which the predicate argument\n * returns true. The second Observable emits source values for which the\n * predicate returns false. The first behaves like {@link filter} and the second\n * behaves like {@link filter} with the predicate negated.\n *\n * ## Example\n * Partition a set of numbers into odds and evens observables\n * ```ts\n * import { of, partition } from 'rxjs';\n *\n * const observableValues = of(1, 2, 3, 4, 5, 6);\n * const [evens$, odds$] = partition(observableValues, (value, index) => value % 2 === 0);\n *\n * odds$.subscribe(x => console.log('odds', x));\n * evens$.subscribe(x => console.log('evens', x));\n *\n * // Logs:\n * // odds 1\n * // odds 3\n * // odds 5\n * // evens 2\n * // evens 4\n * // evens 6\n * ```\n *\n * @see {@link filter}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted on the first Observable in the returned array, if\n * `false` the value is emitted on the second Observable in the array. The\n * `index` parameter is the number `i` for the i-th source emission that has\n * happened since the subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return {[Observable, Observable]} An array with two Observables: one\n * with values that passed the predicate, and another with values that did not\n * pass the predicate.\n */\nexport function partition(\n source: ObservableInput,\n predicate: (this: any, value: T, index: number) => boolean,\n thisArg?: any\n): [Observable, Observable] {\n return [filter(predicate, thisArg)(innerFrom(source)), filter(not(predicate, thisArg))(innerFrom(source))] as [\n Observable,\n Observable\n ];\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from './innerFrom';\nimport { Subscription } from '../Subscription';\nimport { ObservableInput, ObservableInputTuple } from '../types';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { Subscriber } from '../Subscriber';\n\nexport function race(inputs: [...ObservableInputTuple]): Observable;\nexport function race(...inputs: [...ObservableInputTuple]): Observable;\n\n/**\n * Returns an observable that mirrors the first source observable to emit an item.\n *\n * ![](race.png)\n *\n * `race` returns an observable, that when subscribed to, subscribes to all source observables immediately.\n * As soon as one of the source observables emits a value, the result unsubscribes from the other sources.\n * The resulting observable will forward all notifications, including error and completion, from the \"winning\"\n * source observable.\n *\n * If one of the used source observable throws an errors before a first notification\n * the race operator will also throw an error, no matter if another source observable\n * could potentially win the race.\n *\n * `race` can be useful for selecting the response from the fastest network connection for\n * HTTP or WebSockets. `race` can also be useful for switching observable context based on user\n * input.\n *\n * ## Example\n * ### Subscribes to the observable that was the first to start emitting.\n *\n * ```ts\n * import { race, interval } from 'rxjs';\n * import { mapTo } from 'rxjs/operators';\n *\n * const obs1 = interval(1000).pipe(mapTo('fast one'));\n * const obs2 = interval(3000).pipe(mapTo('medium one'));\n * const obs3 = interval(5000).pipe(mapTo('slow one'));\n *\n * race(obs3, obs1, obs2)\n * .subscribe(\n * winner => console.log(winner)\n * );\n *\n * // Outputs\n * // a series of 'fast one'\n * ```\n *\n * @param {...Observables} ...observables sources used to race for which Observable emits first.\n * @return {Observable} an Observable that mirrors the output of the first Observable to emit an item.\n */\nexport function race(...sources: (ObservableInput | ObservableInput[])[]): Observable {\n sources = argsOrArgArray(sources);\n // If only one source was passed, just return it. Otherwise return the race.\n return sources.length === 1 ? innerFrom(sources[0] as ObservableInput) : new Observable(raceInit(sources as ObservableInput[]));\n}\n\n/**\n * An observable initializer function for both the static version and the\n * operator version of race.\n * @param sources The sources to race\n */\nexport function raceInit(sources: ObservableInput[]) {\n return (subscriber: Subscriber) => {\n let subscriptions: Subscription[] = [];\n\n // Subscribe to all of the sources. Note that we are checking `subscriptions` here\n // Is is an array of all actively \"racing\" subscriptions, and it is `null` after the\n // race has been won. So, if we have racer that synchronously \"wins\", this loop will\n // stop before it subscribes to any more.\n for (let i = 0; subscriptions && !subscriber.closed && i < sources.length; i++) {\n subscriptions.push(\n innerFrom(sources[i] as ObservableInput).subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n if (subscriptions) {\n // We're still racing, but we won! So unsubscribe\n // all other subscriptions that we have, except this one.\n for (let s = 0; s < subscriptions.length; s++) {\n s !== i && subscriptions[s].unsubscribe();\n }\n subscriptions = null!;\n }\n subscriber.next(value);\n })\n )\n );\n }\n };\n}\n","import { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { EMPTY } from './empty';\n\nexport function range(start: number, count?: number): Observable;\n\n/**\n * @deprecated The `scheduler` parameter will be removed in v8. Use `range(start, count).pipe(observeOn(scheduler))` instead. Details: Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function range(start: number, count: number | undefined, scheduler: SchedulerLike): Observable;\n\n/**\n * Creates an Observable that emits a sequence of numbers within a specified\n * range.\n *\n * Emits a sequence of numbers in a range.\n *\n * ![](range.png)\n *\n * `range` operator emits a range of sequential integers, in order, where you\n * select the `start` of the range and its `length`. By default, uses no\n * {@link SchedulerLike} and just delivers the notifications synchronously, but may use\n * an optional {@link SchedulerLike} to regulate those deliveries.\n *\n * ## Example\n *\n * ### Produce a range of numbers\n *\n * ```ts\n * import { range } from 'rxjs';\n *\n * const numbers = range(1, 3);\n *\n * numbers.subscribe({\n * next: value => { console.log(value) },\n * complete: () => { console.log('Complete!') }\n * });\n *\n * // Logs:\n * // 1\n * // 2\n * // 3\n * // \"Complete!\"\n * ```\n *\n * @see {@link timer}\n * @see {@link index/interval}\n *\n * @param {number} [start=0] The value of the first integer in the sequence.\n * @param {number} count The number of sequential integers to generate.\n * @param {SchedulerLike} [scheduler] A {@link SchedulerLike} to use for scheduling\n * the emissions of the notifications.\n * @return {Observable} An Observable of numbers that emits a finite range of\n * sequential integers.\n */\nexport function range(start: number, count?: number, scheduler?: SchedulerLike): Observable {\n if (count == null) {\n // If one argument was passed, it's the count, not the start.\n count = start;\n start = 0;\n }\n\n if (count <= 0) {\n // No count? We're going nowhere. Return EMPTY.\n return EMPTY;\n }\n\n // Where the range should stop.\n const end = count + start;\n\n return new Observable(\n scheduler\n ? // The deprecated scheduled path.\n (subscriber) => {\n let n = start;\n return scheduler.schedule(function () {\n if (n < end) {\n subscriber.next(n++);\n this.schedule();\n } else {\n subscriber.complete();\n }\n });\n }\n : // Standard synchronous range.\n (subscriber) => {\n let n = start;\n while (n < end && !subscriber.closed) {\n subscriber.next(n++);\n }\n subscriber.complete();\n }\n );\n}\n","import { Observable } from '../Observable';\nimport { Unsubscribable, ObservableInput, ObservedValueOf } from '../types';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\n\n/**\n * Creates an Observable that uses a resource which will be disposed at the same time as the Observable.\n *\n * Use it when you catch yourself cleaning up after an Observable.\n *\n * `using` is a factory operator, which accepts two functions. First function returns a disposable resource.\n * It can be an arbitrary object that implements `unsubscribe` method. Second function will be injected with\n * that object and should return an Observable. That Observable can use resource object during its execution.\n * Both functions passed to `using` will be called every time someone subscribes - neither an Observable nor\n * resource object will be shared in any way between subscriptions.\n *\n * When Observable returned by `using` is subscribed, Observable returned from the second function will be subscribed\n * as well. All its notifications (nexted values, completion and error events) will be emitted unchanged by the output\n * Observable. If however someone unsubscribes from the Observable or source Observable completes or errors by itself,\n * the `unsubscribe` method on resource object will be called. This can be used to do any necessary clean up, which\n * otherwise would have to be handled by hand. Note that complete or error notifications are not emitted when someone\n * cancels subscription to an Observable via `unsubscribe`, so `using` can be used as a hook, allowing you to make\n * sure that all resources which need to exist during an Observable execution will be disposed at appropriate time.\n *\n * @see {@link defer}\n *\n * @param {function(): ISubscription} resourceFactory A function which creates any resource object\n * that implements `unsubscribe` method.\n * @param {function(resource: ISubscription): Observable} observableFactory A function which\n * creates an Observable, that can use injected resource object.\n * @return {Observable} An Observable that behaves the same as Observable returned by `observableFactory`, but\n * which - when completed, errored or unsubscribed - will also call `unsubscribe` on created resource object.\n */\nexport function using>(\n resourceFactory: () => Unsubscribable | void,\n observableFactory: (resource: Unsubscribable | void) => T | void\n): Observable> {\n return new Observable>((subscriber) => {\n const resource = resourceFactory();\n const result = observableFactory(resource);\n const source = result ? innerFrom(result) : EMPTY;\n source.subscribe(subscriber);\n return () => {\n // NOTE: Optional chaining did not work here.\n // Related TS Issue: https://github.com/microsoft/TypeScript/issues/40818\n if (resource) {\n resource.unsubscribe();\n }\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Buffers the source Observable values until `closingNotifier` emits.\n *\n * Collects values from the past as an array, and emits\n * that array only when another Observable emits.\n *\n * ![](buffer.png)\n *\n * Buffers the incoming Observable values until the given `closingNotifier`\n * Observable emits a value, at which point it emits the buffer on the output\n * Observable and starts a new buffer internally, awaiting the next time\n * `closingNotifier` emits.\n *\n * ## Example\n *\n * On every click, emit array of most recent interval events\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { buffer } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const intervalEvents = interval(1000);\n * const buffered = intervalEvents.pipe(buffer(clicks));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link window}\n *\n * @param {Observable} closingNotifier An Observable that signals the\n * buffer to be emitted on the output Observable.\n * @return A function that returns an Observable of buffers, which are arrays\n * of values.\n */\nexport function buffer(closingNotifier: Observable): OperatorFunction {\n return operate((source, subscriber) => {\n // The current buffered values.\n let currentBuffer: T[] = [];\n\n // Subscribe to our source.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => currentBuffer.push(value),\n () => {\n subscriber.next(currentBuffer);\n subscriber.complete();\n }\n )\n );\n\n // Subscribe to the closing notifier.\n closingNotifier.subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n // Start a new buffer and emit the previous one.\n const b = currentBuffer;\n currentBuffer = [];\n subscriber.next(b);\n },\n noop\n )\n );\n\n return () => {\n // Ensure buffered values are released on teardown.\n currentBuffer = null!;\n };\n });\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Buffers the source Observable values until the size hits the maximum\n * `bufferSize` given.\n *\n * Collects values from the past as an array, and emits\n * that array only when its size reaches `bufferSize`.\n *\n * ![](bufferCount.png)\n *\n * Buffers a number of values from the source Observable by `bufferSize` then\n * emits the buffer and clears it, and starts a new buffer each\n * `startBufferEvery` values. If `startBufferEvery` is not provided or is\n * `null`, then new buffers are started immediately at the start of the source\n * and when each buffer closes and is emitted.\n *\n * ## Examples\n *\n * Emit the last two click events as an array\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferCount } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferCount(2));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * On every click, emit the last two click events as an array\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferCount } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferCount(2, 1));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link pairwise}\n * @see {@link windowCount}\n *\n * @param {number} bufferSize The maximum size of the buffer emitted.\n * @param {number} [startBufferEvery] Interval at which to start a new buffer.\n * For example if `startBufferEvery` is `2`, then a new buffer will be started\n * on every other value from the source. A new buffer is started at the\n * beginning of the source by default.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferCount(bufferSize: number, startBufferEvery: number | null = null): OperatorFunction {\n // If no `startBufferEvery` value was supplied, then we're\n // opening and closing on the bufferSize itself.\n startBufferEvery = startBufferEvery ?? bufferSize;\n\n return operate((source, subscriber) => {\n let buffers: T[][] = [];\n let count = 0;\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n let toEmit: T[][] | null = null;\n\n // Check to see if we need to start a buffer.\n // This will start one at the first value, and then\n // a new one every N after that.\n if (count++ % startBufferEvery! === 0) {\n buffers.push([]);\n }\n\n // Push our value into our active buffers.\n for (const buffer of buffers) {\n buffer.push(value);\n // Check to see if we're over the bufferSize\n // if we are, record it so we can emit it later.\n // If we emitted it now and removed it, it would\n // mutate the `buffers` array while we're looping\n // over it.\n if (bufferSize <= buffer.length) {\n toEmit = toEmit ?? [];\n toEmit.push(buffer);\n }\n }\n\n if (toEmit) {\n // We have found some buffers that are over the\n // `bufferSize`. Emit them, and remove them from our\n // buffers list.\n for (const buffer of toEmit) {\n arrRemove(buffers, buffer);\n subscriber.next(buffer);\n }\n }\n },\n () => {\n // When the source completes, emit all of our\n // active buffers.\n for (const buffer of buffers) {\n subscriber.next(buffer);\n }\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n () => {\n // Clean up our memory when we teardown\n buffers = null!;\n }\n )\n );\n });\n}\n","import { Subscription } from '../Subscription';\nimport { OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\nimport { asyncScheduler } from '../scheduler/async';\nimport { popScheduler } from '../util/args';\nimport { executeSchedule } from '../util/executeSchedule';\n\n/* tslint:disable:max-line-length */\nexport function bufferTime(bufferTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction;\nexport function bufferTime(\n bufferTimeSpan: number,\n bufferCreationInterval: number | null | undefined,\n scheduler?: SchedulerLike\n): OperatorFunction;\nexport function bufferTime(\n bufferTimeSpan: number,\n bufferCreationInterval: number | null | undefined,\n maxBufferSize: number,\n scheduler?: SchedulerLike\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Buffers the source Observable values for a specific time period.\n *\n * Collects values from the past as an array, and emits\n * those arrays periodically in time.\n *\n * ![](bufferTime.png)\n *\n * Buffers values from the source for a specific time duration `bufferTimeSpan`.\n * Unless the optional argument `bufferCreationInterval` is given, it emits and\n * resets the buffer every `bufferTimeSpan` milliseconds. If\n * `bufferCreationInterval` is given, this operator opens the buffer every\n * `bufferCreationInterval` milliseconds and closes (emits and resets) the\n * buffer every `bufferTimeSpan` milliseconds. When the optional argument\n * `maxBufferSize` is specified, the buffer will be closed either after\n * `bufferTimeSpan` milliseconds or when it contains `maxBufferSize` elements.\n *\n * ## Examples\n *\n * Every second, emit an array of the recent click events\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferTime(1000));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * Every 5 seconds, emit the click events from the next 2 seconds\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { bufferTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferTime(2000, 5000));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferToggle}\n * @see {@link bufferWhen}\n * @see {@link windowTime}\n *\n * @param {number} bufferTimeSpan The amount of time to fill each buffer array.\n * @param {number} [bufferCreationInterval] The interval at which to start new\n * buffers.\n * @param {number} [maxBufferSize] The maximum buffer size.\n * @param {SchedulerLike} [scheduler=async] The scheduler on which to schedule the\n * intervals that determine buffer boundaries.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferTime(bufferTimeSpan: number, ...otherArgs: any[]): OperatorFunction {\n const scheduler = popScheduler(otherArgs) ?? asyncScheduler;\n const bufferCreationInterval = (otherArgs[0] as number) ?? null;\n const maxBufferSize = (otherArgs[1] as number) || Infinity;\n\n return operate((source, subscriber) => {\n // The active buffers, their related subscriptions, and removal functions.\n let bufferRecords: { buffer: T[]; subs: Subscription }[] | null = [];\n // If true, it means that every time we emit a buffer, we want to start a new buffer\n // this is only really used for when *just* the buffer time span is passed.\n let restartOnEmit = false;\n\n /**\n * Does the work of emitting the buffer from the record, ensuring that the\n * record is removed before the emission so reentrant code (from some custom scheduling, perhaps)\n * does not alter the buffer. Also checks to see if a new buffer needs to be started\n * after the emit.\n */\n const emit = (record: { buffer: T[]; subs: Subscription }) => {\n const { buffer, subs } = record;\n subs.unsubscribe();\n arrRemove(bufferRecords, record);\n subscriber.next(buffer);\n restartOnEmit && startBuffer();\n };\n\n /**\n * Called every time we start a new buffer. This does\n * the work of scheduling a job at the requested bufferTimeSpan\n * that will emit the buffer (if it's not unsubscribed before then).\n */\n const startBuffer = () => {\n if (bufferRecords) {\n const subs = new Subscription();\n subscriber.add(subs);\n const buffer: T[] = [];\n const record = {\n buffer,\n subs,\n };\n bufferRecords.push(record);\n executeSchedule(subs, scheduler, () => emit(record), bufferTimeSpan);\n }\n };\n\n if (bufferCreationInterval !== null && bufferCreationInterval >= 0) {\n // The user passed both a bufferTimeSpan (required), and a creation interval\n // That means we need to start new buffers on the interval, and those buffers need\n // to wait the required time span before emitting.\n executeSchedule(subscriber, scheduler, startBuffer, bufferCreationInterval, true);\n } else {\n restartOnEmit = true;\n }\n\n startBuffer();\n\n const bufferTimeSubscriber = new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Copy the records, so if we need to remove one we\n // don't mutate the array. It's hard, but not impossible to\n // set up a buffer time that could mutate the array and\n // cause issues here.\n const recordsCopy = bufferRecords!.slice();\n for (const record of recordsCopy) {\n // Loop over all buffers and\n const { buffer } = record;\n buffer.push(value);\n // If the buffer is over the max size, we need to emit it.\n maxBufferSize <= buffer.length && emit(record);\n }\n },\n () => {\n // The source completed, emit all of the active\n // buffers we have before we complete.\n while (bufferRecords?.length) {\n subscriber.next(bufferRecords.shift()!.buffer);\n }\n bufferTimeSubscriber?.unsubscribe();\n subscriber.complete();\n subscriber.unsubscribe();\n },\n // Pass all errors through to consumer.\n undefined,\n // Clean up\n () => (bufferRecords = null)\n );\n\n source.subscribe(bufferTimeSubscriber);\n });\n}\n","import { Subscription } from '../Subscription';\nimport { OperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Buffers the source Observable values starting from an emission from\n * `openings` and ending when the output of `closingSelector` emits.\n *\n * Collects values from the past as an array. Starts\n * collecting only when `opening` emits, and calls the `closingSelector`\n * function to get an Observable that tells when to close the buffer.\n *\n * ![](bufferToggle.png)\n *\n * Buffers values from the source by opening the buffer via signals from an\n * Observable provided to `openings`, and closing and sending the buffers when\n * a Subscribable or Promise returned by the `closingSelector` function emits.\n *\n *\n * ## Example\n *\n * Every other second, emit the click events from the next 500ms\n *\n * ```ts\n * import { fromEvent, interval, EMPTY } from 'rxjs';\n * import { bufferToggle } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const openings = interval(1000);\n * const buffered = clicks.pipe(bufferToggle(openings, i =>\n * i % 2 ? interval(500) : EMPTY\n * ));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferWhen}\n * @see {@link windowToggle}\n *\n * @param openings A Subscribable or Promise of notifications to start new\n * buffers.\n * @param closingSelector A function that takes\n * the value emitted by the `openings` observable and returns a Subscribable or Promise,\n * which, when it emits, signals that the associated buffer should be emitted\n * and cleared.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferToggle(\n openings: ObservableInput,\n closingSelector: (value: O) => ObservableInput\n): OperatorFunction {\n return operate((source, subscriber) => {\n const buffers: T[][] = [];\n\n // Subscribe to the openings notifier first\n innerFrom(openings).subscribe(\n new OperatorSubscriber(\n subscriber,\n (openValue) => {\n const buffer: T[] = [];\n buffers.push(buffer);\n // We use this composite subscription, so that\n // when the closing notifier emits, we can tear it down.\n const closingSubscription = new Subscription();\n\n const emitBuffer = () => {\n arrRemove(buffers, buffer);\n subscriber.next(buffer);\n closingSubscription.unsubscribe();\n };\n\n // The line below will add the subscription to the parent subscriber *and* the closing subscription.\n closingSubscription.add(innerFrom(closingSelector(openValue)).subscribe(new OperatorSubscriber(subscriber, emitBuffer, noop)));\n },\n noop\n )\n );\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Value from our source. Add it to all pending buffers.\n for (const buffer of buffers) {\n buffer.push(value);\n }\n },\n () => {\n // Source complete. Emit all pending buffers.\n while (buffers.length > 0) {\n subscriber.next(buffers.shift()!);\n }\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\n/**\n * Buffers the source Observable values, using a factory function of closing\n * Observables to determine when to close, emit, and reset the buffer.\n *\n * Collects values from the past as an array. When it\n * starts collecting values, it calls a function that returns an Observable that\n * tells when to close the buffer and restart collecting.\n *\n * ![](bufferWhen.png)\n *\n * Opens a buffer immediately, then closes the buffer when the observable\n * returned by calling `closingSelector` function emits a value. When it closes\n * the buffer, it immediately opens a new buffer and repeats the process.\n *\n * ## Example\n *\n * Emit an array of the last clicks every [1-5] random seconds\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { bufferWhen } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const buffered = clicks.pipe(bufferWhen(() =>\n * interval(1000 + Math.random() * 4000)\n * ));\n * buffered.subscribe(x => console.log(x));\n * ```\n *\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n * @see {@link bufferTime}\n * @see {@link bufferToggle}\n * @see {@link windowWhen}\n *\n * @param {function(): Observable} closingSelector A function that takes no\n * arguments and returns an Observable that signals buffer closure.\n * @return A function that returns an Observable of arrays of buffered values.\n */\nexport function bufferWhen(closingSelector: () => ObservableInput): OperatorFunction {\n return operate((source, subscriber) => {\n // The buffer we keep and emit.\n let buffer: T[] | null = null;\n // A reference to the subscriber used to subscribe to\n // the closing notifier. We need to hold this so we can\n // end the subscription after the first notification.\n let closingSubscriber: Subscriber | null = null;\n\n // Ends the previous closing notifier subscription, so it\n // terminates after the first emission, then emits\n // the current buffer if there is one, starts a new buffer, and starts a\n // new closing notifier.\n const openBuffer = () => {\n // Make sure to teardown the closing subscription, we only cared\n // about one notification.\n closingSubscriber?.unsubscribe();\n // emit the buffer if we have one, and start a new buffer.\n const b = buffer;\n buffer = [];\n b && subscriber.next(b);\n\n // Get a new closing notifier and subscribe to it.\n innerFrom(closingSelector()).subscribe((closingSubscriber = new OperatorSubscriber(subscriber, openBuffer, noop)));\n };\n\n // Start the first buffer.\n openBuffer();\n\n // Subscribe to our source.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n // Add every new value to the current buffer.\n (value) => buffer?.push(value),\n // When we complete, emit the buffer if we have one,\n // then complete the result.\n () => {\n buffer && subscriber.next(buffer);\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n // Release memory on teardown\n () => (buffer = closingSubscriber = null!)\n )\n );\n });\n}\n","import { scanInternals } from './scanInternals';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\nexport function reduce(accumulator: (acc: A | V, value: V, index: number) => A): OperatorFunction;\nexport function reduce(accumulator: (acc: A, value: V, index: number) => A, seed: A): OperatorFunction;\nexport function reduce(accumulator: (acc: A | S, value: V, index: number) => A, seed: S): OperatorFunction;\n\n/**\n * Applies an accumulator function over the source Observable, and returns the\n * accumulated result when the source completes, given an optional seed value.\n *\n * Combines together all values emitted on the source,\n * using an accumulator function that knows how to join a new source value into\n * the accumulation from the past.\n *\n * ![](reduce.png)\n *\n * Like\n * [Array.prototype.reduce()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce),\n * `reduce` applies an `accumulator` function against an accumulation and each\n * value of the source Observable (from the past) to reduce it to a single\n * value, emitted on the output Observable. Note that `reduce` will only emit\n * one value, only when the source Observable completes. It is equivalent to\n * applying operator {@link scan} followed by operator {@link last}.\n *\n * Returns an Observable that applies a specified `accumulator` function to each\n * item emitted by the source Observable. If a `seed` value is specified, then\n * that value will be used as the initial value for the accumulator. If no seed\n * value is specified, the first item of the source is used as the seed.\n *\n * ## Example\n * Count the number of click events that happened in 5 seconds\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { reduce, takeUntil, mapTo } from 'rxjs/operators';\n *\n * const clicksInFiveSeconds = fromEvent(document, 'click').pipe(\n * takeUntil(interval(5000)),\n * );\n * const ones = clicksInFiveSeconds.pipe(mapTo(1));\n * const seed = 0;\n * const count = ones.pipe(reduce((acc, one) => acc + one, seed));\n * count.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link count}\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link scan}\n *\n * @param {function(acc: A, value: V, index: number): A} accumulator The accumulator function\n * called on each source value.\n * @param {A} [seed] The initial accumulation value.\n * @return A function that returns an Observable that emits a single value that\n * is the result of accumulating the values emitted by the source Observable.\n */\nexport function reduce(accumulator: (acc: V | A, value: V, index: number) => A, seed?: any): OperatorFunction {\n return operate(scanInternals(accumulator, seed, arguments.length >= 2, false, true));\n}\n","import { reduce } from './reduce';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\nconst arrReducer = (arr: any[], value: any) => (arr.push(value), arr);\n\n/**\n * Collects all source emissions and emits them as an array when the source completes.\n *\n * Get all values inside an array when the source completes\n *\n * ![](toArray.png)\n *\n * `toArray` will wait until the source Observable completes before emitting\n * the array containing all emissions. When the source Observable errors no\n * array will be emitted.\n *\n * ## Example\n * ```ts\n * import { interval } from 'rxjs';\n * import { toArray, take } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(\n * take(10),\n * toArray()\n * );\n *\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // output: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n * ```\n *\n * @return A function that returns an Observable that emits an array of items\n * emitted by the source Observable when source completes.\n */\nexport function toArray(): OperatorFunction {\n // Because arrays are mutable, and we're mutating the array in this\n // reducer process, we have to escapulate the creation of the initial\n // array within this `operate` function.\n return operate((source, subscriber) => {\n reduce(arrReducer, [] as T[])(source).subscribe(subscriber)\n });\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { pipe } from '../util/pipe';\nimport { mergeMap } from './mergeMap';\nimport { toArray } from './toArray';\n\n/**\n * Collects all of the inner sources from source observable. Then, once the\n * source completes, joins the values using the given static.\n *\n * This is used for {@link combineLatestAll} and {@link zipAll} which both have the\n * same behavior of collecting all inner observables, then operating on them.\n *\n * @param joinFn The type of static join to apply to the sources collected\n * @param project The projection function to apply to the values, if any\n */\nexport function joinAllInternals(joinFn: (sources: ObservableInput[]) => Observable, project?: (...args: any[]) => R) {\n return pipe(\n // Collect all inner sources into an array, and emit them when the\n // source completes.\n toArray() as OperatorFunction, ObservableInput[]>,\n // Run the join function on the collected array of inner sources.\n mergeMap((sources) => joinFn(sources)),\n // If a projection function was supplied, apply it to each result.\n project ? mapOneOrManyArgs(project) : (identity as any)\n );\n}\n","import { combineLatest } from '../observable/combineLatest';\nimport { OperatorFunction, ObservableInput } from '../types';\nimport { joinAllInternals } from './joinAllInternals';\n\nexport function combineLatestAll(): OperatorFunction, T[]>;\nexport function combineLatestAll(): OperatorFunction;\nexport function combineLatestAll(project: (...values: T[]) => R): OperatorFunction, R>;\nexport function combineLatestAll(project: (...values: Array) => R): OperatorFunction;\n\n/**\n * Flattens an Observable-of-Observables by applying {@link combineLatest} when the Observable-of-Observables completes.\n *\n * ![](combineLatestAll.png)\n *\n * `combineLatestAll` takes an Observable of Observables, and collects all Observables from it. Once the outer Observable completes,\n * it subscribes to all collected Observables and combines their values using the {@link combineLatest} strategy, such that:\n *\n * * Every time an inner Observable emits, the output Observable emits\n * * When the returned observable emits, it emits all of the latest values by:\n * * If a `project` function is provided, it is called with each recent value from each inner Observable in whatever order they\n * arrived, and the result of the `project` function is what is emitted by the output Observable.\n * * If there is no `project` function, an array of all the most recent values is emitted by the output Observable.\n *\n * ---\n *\n * ## Examples\n *\n * ### Map two click events to a finite interval Observable, then apply `combineLatestAll`\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { map, combineLatestAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(ev =>\n * interval(Math.random() * 2000).pipe(take(3))\n * ),\n * take(2)\n * );\n * const result = higherOrder.pipe(\n * combineLatestAll()\n * );\n *\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatest}\n * @see {@link combineLatestWith}\n * @see {@link mergeAll}\n *\n * @param project optional function to map the most recent values from each inner Observable into a new result.\n * Takes each of the most recent values from each collected inner Observable as arguments, in order.\n * @return A function that returns an Observable that flattens Observables\n * emitted by the source Observable.\n */\nexport function combineLatestAll(project?: (...values: Array) => R) {\n return joinAllInternals(combineLatest, project);\n}\n","import { combineLatestAll } from './combineLatestAll';\n\n/**\n * @deprecated Renamed to {@link combineLatestAll}. Will be removed in v8.\n */\nexport const combineAll = combineLatestAll;\n","import { combineLatestInit } from '../observable/combineLatest';\nimport { ObservableInput, ObservableInputTuple, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { pipe } from '../util/pipe';\nimport { popResultSelector } from '../util/args';\n\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(\n sources: [...ObservableInputTuple],\n project: (...values: [T, ...A]) => R\n): OperatorFunction;\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(sources: [...ObservableInputTuple]): OperatorFunction;\n\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(\n ...sourcesAndProject: [...ObservableInputTuple, (...values: [T, ...A]) => R]\n): OperatorFunction;\n/** @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8. */\nexport function combineLatest(...sources: [...ObservableInputTuple]): OperatorFunction;\n\n/**\n * @deprecated Replaced with {@link combineLatestWith}. Will be removed in v8.\n */\nexport function combineLatest(...args: (ObservableInput | ((...values: any[]) => R))[]): OperatorFunction {\n const resultSelector = popResultSelector(args);\n return resultSelector\n ? pipe(combineLatest(...(args as Array>)), mapOneOrManyArgs(resultSelector))\n : operate((source, subscriber) => {\n combineLatestInit([source, ...argsOrArgArray(args)])(subscriber);\n });\n}\n","import { ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { combineLatest } from './combineLatest';\n\n/**\n * Create an observable that combines the latest values from all passed observables and the source\n * into arrays and emits them.\n *\n * Returns an observable, that when subscribed to, will subscribe to the source observable and all\n * sources provided as arguments. Once all sources emit at least one value, all of the latest values\n * will be emitted as an array. After that, every time any source emits a value, all of the latest values\n * will be emitted as an array.\n *\n * This is a useful operator for eagerly calculating values based off of changed inputs.\n *\n * ### Example\n *\n * Simple calculation from two inputs.\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { map, combineLatestWith } from 'rxjs/operators';\n *\n * // Setup: Add two inputs to the page\n * const input1 = document.createElement('input');\n * document.body.appendChild(input1);\n * const input2 = document.createElement('input');\n * document.body.appendChild(input2);\n *\n * // Get streams of changes\n * const input1Changes$ = fromEvent(input1, 'change');\n * const input2Changes$ = fromEvent(input2, 'change');\n *\n * // Combine the changes by adding them together\n * input1Changes$.pipe(\n * combineLatestWith(input2Changes$),\n * map(([e1, e2]) => Number(e1.target.value) + Number(e2.target.value)),\n * )\n * .subscribe(x => console.log(x));\n *\n * ```\n * @param otherSources the other sources to subscribe to.\n * @return A function that returns an Observable that emits the latest\n * emissions from both source and provided Observables.\n */\nexport function combineLatestWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction> {\n return combineLatest(...otherSources);\n}\n","import { concatMap } from './concatMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function concatMapTo>(observable: O): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMapTo>(\n observable: O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMapTo>(\n observable: O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is merged multiple\n * times in a serialized fashion on the output Observable.\n *\n * It's like {@link concatMap}, but maps each value\n * always to the same inner Observable.\n *\n * ![](concatMapTo.png)\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then flattens those resulting Observables into one\n * single Observable, which is the output Observable. Each new `innerObservable`\n * instance emitted on the output Observable is concatenated with the previous\n * `innerObservable` instance.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMapTo` is equivalent to `mergeMapTo` with concurrency parameter\n * set to `1`.\n *\n * ## Example\n * For each click event, tick every second from 0 to 3, with no concurrency\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { concatMapTo, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * concatMapTo(interval(1000).pipe(take(4))),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMap}\n * @see {@link mergeMapTo}\n * @see {@link switchMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @return A function that returns an Observable of values merged together by\n * joining the passed Observable with itself, one after the other, for each\n * value emitted from the source.\n */\nexport function concatMapTo>(\n innerObservable: O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return isFunction(resultSelector) ? concatMap(() => innerObservable, resultSelector) : concatMap(() => innerObservable);\n}\n","import { ObservableInputTuple, OperatorFunction } from '../types';\nimport { concat } from './concat';\n\n/**\n * Emits all of the values from the source observable, then, once it completes, subscribes\n * to each observable source provided, one at a time, emitting all of their values, and not subscribing\n * to the next one until it completes.\n *\n * `concat(a$, b$, c$)` is the same as `a$.pipe(concatWith(b$, c$))`.\n *\n * ## Example\n *\n * Listen for one mouse click, then listen for all mouse moves.\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { concatWith, map, take } from 'rxjs/operators';\n *\n * const clicks$ = fromEvent(document, 'click');\n * const moves$ = fromEvent(document, 'mousemove');\n *\n * clicks$.pipe(\n * map(() => 'click'),\n * take(1),\n * concatWith(\n * moves$.pipe(\n * map(() => 'move')\n * )\n * )\n * )\n * .subscribe(x => console.log(x));\n *\n * // 'click'\n * // 'move'\n * // 'move'\n * // 'move'\n * // ...\n * ```\n *\n * @param otherSources Other observable sources to subscribe to, in sequence, after the original source is complete.\n * @return A function that returns an Observable that concatenates\n * subscriptions to the source and provided Observables subscribing to the next\n * only once the current subscription completes.\n */\nexport function concatWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction {\n return concat(...otherSources);\n}\n","import { ObservableInputTuple, OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { concatAll } from './concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from '../observable/from';\n\n/** @deprecated Replaced with {@link concatWith}. Will be removed in v8. */\nexport function concat(...sources: [...ObservableInputTuple]): OperatorFunction;\n/** @deprecated Replaced with {@link concatWith}. Will be removed in v8. */\nexport function concat(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): OperatorFunction;\n\n/**\n * @deprecated Replaced with {@link concatWith}. Will be removed in v8.\n */\nexport function concat(...args: any[]): OperatorFunction {\n const scheduler = popScheduler(args);\n return operate((source, subscriber) => {\n concatAll()(from([source, ...args], scheduler)).subscribe(subscriber);\n });\n}\n","import { OperatorFunction } from '../types';\nimport { reduce } from './reduce';\n/**\n * Counts the number of emissions on the source and emits that number when the\n * source completes.\n *\n * Tells how many values were emitted, when the source\n * completes.\n *\n * ![](count.png)\n *\n * `count` transforms an Observable that emits values into an Observable that\n * emits a single value that represents the number of values emitted by the\n * source Observable. If the source Observable terminates with an error, `count`\n * will pass this error notification along without emitting a value first. If\n * the source Observable does not terminate at all, `count` will neither emit\n * a value nor terminate. This operator takes an optional `predicate` function\n * as argument, in which case the output emission will represent the number of\n * source values that matched `true` with the `predicate`.\n *\n * ## Examples\n *\n * Counts how many seconds have passed before the first click happened\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { count, takeUntil } from 'rxjs/operators';\n *\n * const seconds = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const secondsBeforeClick = seconds.pipe(takeUntil(clicks));\n * const result = secondsBeforeClick.pipe(count());\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Counts how many odd numbers are there between 1 and 7\n * ```ts\n * import { range } from 'rxjs';\n * import { count } from 'rxjs/operators';\n *\n * const numbers = range(1, 7);\n * const result = numbers.pipe(count(i => i % 2 === 1));\n * result.subscribe(x => console.log(x));\n * // Results in:\n * // 4\n * ```\n *\n * @see {@link max}\n * @see {@link min}\n * @see {@link reduce}\n *\n * @param predicate A function that is used to analyze the value and the index and\n * determine whether or not to increment the count. Return `true` to increment the count,\n * and return `false` to keep the count the same.\n * If the predicate is not provided, every value will be counted.\n * @return A function that returns an Observable that emits one number that\n * represents the count of emissions.\n */\n\nexport function count(predicate?: (value: T, index: number) => boolean): OperatorFunction {\n return reduce((total, value, i) => (!predicate || predicate(value, i) ? total + 1 : total), 0);\n}\n","import { Subscriber } from '../Subscriber';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\n/**\n * Emits a notification from the source Observable only after a particular time span\n * determined by another Observable has passed without another source emission.\n *\n * It's like {@link debounceTime}, but the time span of\n * emission silence is determined by a second Observable.\n *\n * ![](debounce.svg)\n *\n * `debounce` delays notifications emitted by the source Observable, but drops previous\n * pending delayed emissions if a new notification arrives on the source Observable.\n * This operator keeps track of the most recent notification from the source\n * Observable, and spawns a duration Observable by calling the\n * `durationSelector` function. The notification is emitted only when the duration\n * Observable emits a next notification, and if no other notification was emitted on\n * the source Observable since the duration Observable was spawned. If a new\n * notification appears before the duration Observable emits, the previous notification will\n * not be emitted and a new duration is scheduled from `durationSelector` is scheduled.\n * If the completing event happens during the scheduled duration the last cached notification\n * is emitted before the completion event is forwarded to the output observable.\n * If the error event happens during the scheduled duration or after it only the error event is\n * forwarded to the output observable. The cache notification is not emitted in this case.\n *\n * Like {@link debounceTime}, this is a rate-limiting operator, and also a\n * delay-like operator since output emissions do not necessarily occur at the\n * same time as they did on the source Observable.\n *\n * ## Example\n * Emit the most recent click after a burst of clicks\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { scan, debounce } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * scan((i) => ++i, 1),\n * debounce((i) => interval(200 * i))\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link delay}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link throttle}\n * @see {@link throttleTime}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the timeout\n * duration for each source value, returned as an Observable or a Promise.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified duration Observable returned by\n * `durationSelector`, and may drop some values if they occur too frequently.\n */\nexport function debounce(durationSelector: (value: T) => ObservableInput): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n // The subscriber/subscription for the current debounce, if there is one.\n let durationSubscriber: Subscriber | null = null;\n\n const emit = () => {\n // Unsubscribe any current debounce subscription we have,\n // we only cared about the first notification from it, and we\n // want to clean that subscription up as soon as possible.\n durationSubscriber?.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n // We have a value! Free up memory first, then emit the value.\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Cancel any pending debounce duration. We don't\n // need to null it out here yet tho, because we're just going\n // to create another one in a few lines.\n durationSubscriber?.unsubscribe();\n hasValue = true;\n lastValue = value;\n // Capture our duration subscriber, so we can unsubscribe it when we're notified\n // and we're going to emit the value.\n durationSubscriber = new OperatorSubscriber(subscriber, emit, noop);\n // Subscribe to the duration.\n innerFrom(durationSelector(value)).subscribe(durationSubscriber);\n },\n () => {\n // Source completed.\n // Emit any pending debounced values then complete\n emit();\n subscriber.complete();\n },\n // Pass all errors through to consumer\n undefined,\n () => {\n // Teardown.\n lastValue = durationSubscriber = null;\n }\n )\n );\n });\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from previous items.\n *\n * If a keySelector function is provided, then it will project each value from the source observable into a new value that it will\n * check for equality with previously projected values. If a keySelector function is not provided, it will use each value from the\n * source observable directly with an equality check against previous values.\n *\n * In JavaScript runtimes that support `Set`, this operator will use a `Set` to improve performance of the distinct value checking.\n *\n * In other runtimes, this operator will use a minimal implementation of `Set` that relies on an `Array` and `indexOf` under the\n * hood, so performance will degrade as more values are checked for distinction. Even in newer browsers, a long-running `distinct`\n * use might result in memory leaks. To help alleviate this in some scenarios, an optional `flushes` parameter is also provided so\n * that the internal `Set` can be \"flushed\", basically clearing it of values.\n *\n * ## Examples\n *\n * A simple example with numbers\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinct } from 'rxjs/operators';\n *\n * of(1, 1, 2, 2, 2, 1, 2, 3, 4, 3, 2, 1)\n * .pipe(\n * distinct()\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // 1\n * // 2\n * // 3\n * // 4\n * ```\n *\n * An example using a keySelector function\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinct } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *\n * of(\n * { age: 4, name: 'Foo'},\n * { age: 7, name: 'Bar'},\n * { age: 5, name: 'Foo'}\n * ).pipe(\n * distinct((p: Person) => p.name)\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * ```\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n *\n * @param {function} [keySelector] Optional function to select which value you want to check as distinct.\n * @param {Observable} [flushes] Optional Observable for flushing the internal HashSet of the operator.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinct(keySelector?: (value: T) => K, flushes?: Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n const distinctKeys = new Set();\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n const key = keySelector ? keySelector(value) : value;\n if (!distinctKeys.has(key)) {\n distinctKeys.add(key);\n subscriber.next(value);\n }\n })\n );\n\n flushes?.subscribe(new OperatorSubscriber(subscriber, () => distinctKeys.clear(), noop));\n });\n}\n","import { distinctUntilChanged } from './distinctUntilChanged';\nimport { MonoTypeOperatorFunction } from '../types';\n\n/* tslint:disable:max-line-length */\nexport function distinctUntilKeyChanged(key: keyof T): MonoTypeOperatorFunction;\nexport function distinctUntilKeyChanged(key: K, compare: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Returns an Observable that emits all items emitted by the source Observable that are distinct by comparison from the previous item,\n * using a property accessed by using the key provided to check if the two items are distinct.\n *\n * If a comparator function is provided, then it will be called for each item to test for whether or not that value should be emitted.\n *\n * If a comparator function is not provided, an equality check is used by default.\n *\n * ## Examples\n * An example comparing the name of persons\n * ```typescript\n * import { of } from 'rxjs';\n * import { distinctUntilKeyChanged } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *\n *of(\n * { age: 4, name: 'Foo'},\n * { age: 7, name: 'Bar'},\n * { age: 5, name: 'Foo'},\n * { age: 6, name: 'Foo'},\n * ).pipe(\n * distinctUntilKeyChanged('name'),\n * )\n * .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo' }\n * ```\n *\n * An example comparing the first letters of the name\n * ```typescript\n * import { of } from 'rxjs';\n * import { distinctUntilKeyChanged } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *\n *of(\n * { age: 4, name: 'Foo1'},\n * { age: 7, name: 'Bar'},\n * { age: 5, name: 'Foo2'},\n * { age: 6, name: 'Foo3'},\n * ).pipe(\n * distinctUntilKeyChanged('name', (x: string, y: string) => x.substring(0, 3) === y.substring(0, 3)),\n * )\n * .subscribe(x => console.log(x));\n *\n * // displays:\n * // { age: 4, name: 'Foo1' }\n * // { age: 7, name: 'Bar' }\n * // { age: 5, name: 'Foo2' }\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n *\n * @param {string} key String key for object property lookup on each item.\n * @param {function} [compare] Optional comparison function called to test if an item is distinct from the previous item in the source.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values based on the key specified.\n */\nexport function distinctUntilKeyChanged(key: K, compare?: (x: T[K], y: T[K]) => boolean): MonoTypeOperatorFunction {\n return distinctUntilChanged((x: T, y: T) => compare ? compare(x[key], y[key]) : x[key] === y[key]);\n}\n","import { ArgumentOutOfRangeError } from '../util/ArgumentOutOfRangeError';\nimport { Observable } from '../Observable';\nimport { OperatorFunction } from '../types';\nimport { filter } from './filter';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { take } from './take';\n\n/**\n * Emits the single value at the specified `index` in a sequence of emissions\n * from the source Observable.\n *\n * Emits only the i-th value, then completes.\n *\n * ![](elementAt.png)\n *\n * `elementAt` returns an Observable that emits the item at the specified\n * `index` in the source Observable, or a default value if that `index` is out\n * of range and the `default` argument is provided. If the `default` argument is\n * not given and the `index` is out of range, the output Observable will emit an\n * `ArgumentOutOfRangeError` error.\n *\n * ## Example\n * Emit only the third click event\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { elementAt } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(elementAt(2));\n * result.subscribe(x => console.log(x));\n *\n * // Results in:\n * // click 1 = nothing\n * // click 2 = nothing\n * // click 3 = MouseEvent object logged to console\n * ```\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link skip}\n * @see {@link single}\n * @see {@link take}\n *\n * @throws {ArgumentOutOfRangeError} When using `elementAt(i)`, it delivers an\n * ArgumentOutOfRangeError to the Observer's `error` callback if `i < 0` or the\n * Observable has completed before emitting the i-th `next` notification.\n *\n * @param {number} index Is the number `i` for the i-th source emission that has\n * happened since the subscription, starting from the number `0`.\n * @param {T} [defaultValue] The default value returned for missing indices.\n * @return A function that returns an Observable that emits a single item, if\n * it is found. Otherwise, it will emit the default value if given. If not, it\n * emits an error.\n */\nexport function elementAt(index: number, defaultValue?: D): OperatorFunction {\n if (index < 0) {\n throw new ArgumentOutOfRangeError();\n }\n const hasDefaultValue = arguments.length >= 2;\n return (source: Observable) =>\n source.pipe(\n filter((v, i) => i === index),\n take(1),\n hasDefaultValue ? defaultIfEmpty(defaultValue!) : throwIfEmpty(() => new ArgumentOutOfRangeError())\n );\n}\n","/** prettier */\nimport { Observable } from '../Observable';\nimport { concat } from '../observable/concat';\nimport { of } from '../observable/of';\nimport { MonoTypeOperatorFunction, SchedulerLike, OperatorFunction, ValueFromArray } from '../types';\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function endWith(scheduler: SchedulerLike): MonoTypeOperatorFunction;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function endWith(\n ...valuesAndScheduler: [...A, SchedulerLike]\n): OperatorFunction>;\n\nexport function endWith(...values: A): OperatorFunction>;\n\n/**\n * Returns an observable that will emit all values from the source, then synchronously emit\n * the provided value(s) immediately after the source completes.\n *\n * NOTE: Passing a last argument of a Scheduler is _deprecated_, and may result in incorrect\n * types in TypeScript.\n *\n * This is useful for knowing when an observable ends. Particularly when paired with an\n * operator like {@link takeUntil}\n *\n * ![](endWith.png)\n *\n * ## Example\n *\n * Emit values to know when an interval starts and stops. The interval will\n * stop when a user clicks anywhere on the document.\n *\n * ```ts\n * import { interval, fromEvent } from 'rxjs';\n * import { map, startWith, takeUntil, endWith } from 'rxjs/operators';\n *\n * const ticker$ = interval(5000).pipe(\n * map(() => 'tick'),\n * );\n *\n * const documentClicks$ = fromEvent(document, 'click');\n *\n * ticker$.pipe(\n * startWith('interval started'),\n * takeUntil(documentClicks$),\n * endWith('interval ended by click'),\n * )\n * .subscribe(x => console.log(x));\n *\n * // Result (assuming a user clicks after 15 seconds)\n * // \"interval started\"\n * // \"tick\"\n * // \"tick\"\n * // \"tick\"\n * // \"interval ended by click\"\n * ```\n *\n * @param values Items you want the modified Observable to emit last.\n * @return A function that returns an Observable that emits all values from the\n * source, then synchronously emits the provided value(s) immediately after the\n * source completes.\n *\n * @see {@link startWith}\n * @see {@link concat}\n * @see {@link takeUntil}\n */\nexport function endWith(...values: Array): MonoTypeOperatorFunction {\n return (source: Observable) => concat(source, of(...values)) as Observable;\n}\n","import { Observable } from '../Observable';\nimport { Falsy, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function every(predicate: BooleanConstructor): OperatorFunction extends never ? false : boolean>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function every(\n predicate: BooleanConstructor,\n thisArg: any\n): OperatorFunction extends never ? false : boolean>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function every(\n predicate: (this: A, value: T, index: number, source: Observable) => boolean,\n thisArg: A\n): OperatorFunction;\nexport function every(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction;\n\n/**\n * Returns an Observable that emits whether or not every item of the source satisfies the condition specified.\n *\n * If all values pass predicate before the source completes, emits true before completion,\n * otherwise emit false, then complete.\n *\n * ![](every.png)\n *\n * ## Example\n * A simple example emitting true if all elements are less than 5, false otherwise\n * ```ts\n * import { of } from 'rxjs';\n * import { every } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5, 6).pipe(\n * every(x => x < 5),\n * )\n * .subscribe(x => console.log(x)); // -> false\n * ```\n *\n * @param {function} predicate A function for determining if an item meets a specified condition.\n * @param {any} [thisArg] Optional object to use for `this` in the callback.\n * @return A function that returns an Observable of booleans that determines if\n * all items of the source Observable meet the condition specified.\n */\nexport function every(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg?: any\n): OperatorFunction {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n if (!predicate.call(thisArg, value, index++, source)) {\n subscriber.next(false);\n subscriber.complete();\n }\n },\n () => {\n subscriber.next(true);\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { Subscription } from '../Subscription';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Converts a higher-order Observable into a first-order Observable by dropping\n * inner Observables while the previous inner Observable has not yet completed.\n *\n * Flattens an Observable-of-Observables by dropping the\n * next inner Observables while the current inner is still executing.\n *\n * ![](exhaust.png)\n *\n * `exhaust` subscribes to an Observable that emits Observables, also known as a\n * higher-order Observable. Each time it observes one of these emitted inner\n * Observables, the output Observable begins emitting the items emitted by that\n * inner Observable. So far, it behaves like {@link mergeAll}. However,\n * `exhaust` ignores every new inner Observable if the previous Observable has\n * not yet completed. Once that one completes, it will accept and flatten the\n * next inner Observable and repeat this process.\n *\n * ## Example\n * Run a finite timer for each click, only if there is no currently active timer\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { exhaustAll, map, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map((ev) => interval(1000).pipe(take(5))),\n * );\n * const result = higherOrder.pipe(exhaustAll());\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link mergeAll}\n * @see {@link exhaustMap}\n * @see {@link zipAll}\n *\n * @return A function that returns an Observable that takes a source of\n * Observables and propagates the first Observable exclusively until it\n * completes before subscribing to the next.\n */\nexport function exhaustAll>(): OperatorFunction> {\n return operate((source, subscriber) => {\n let isComplete = false;\n let innerSub: Subscription | null = null;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (inner) => {\n if (!innerSub) {\n innerSub = innerFrom(inner).subscribe(\n new OperatorSubscriber(subscriber, undefined, () => {\n innerSub = null;\n isComplete && subscriber.complete();\n })\n );\n }\n },\n () => {\n isComplete = true;\n !innerSub && subscriber.complete();\n }\n )\n );\n });\n}\n","import { exhaustAll } from './exhaustAll';\n\n/**\n * @deprecated Renamed to {@link exhaustAll}. Will be removed in v8.\n */\nexport const exhaust = exhaustAll;\n","import { OperatorFunction, ObservableInput, ObservedValueOf, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\n\n/* tslint:disable:max-line-length */\nexport function expand>(\n project: (value: T, index: number) => O,\n concurrent?: number,\n scheduler?: SchedulerLike\n): OperatorFunction>;\n/**\n * @deprecated The `scheduler` parameter will be removed in v8. If you need to schedule the inner subscription,\n * use `subscribeOn` within the projection function: `expand((value) => fn(value).pipe(subscribeOn(scheduler)))`.\n * Details: Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function expand>(\n project: (value: T, index: number) => O,\n concurrent: number | undefined,\n scheduler: SchedulerLike\n): OperatorFunction>;\n/* tslint:enable:max-line-length */\n\n/**\n * Recursively projects each source value to an Observable which is merged in\n * the output Observable.\n *\n * It's similar to {@link mergeMap}, but applies the\n * projection function to every source value as well as every output value.\n * It's recursive.\n *\n * ![](expand.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger. *Expand* will re-emit on the output\n * Observable every source value. Then, each output value is given to the\n * `project` function which returns an inner Observable to be merged on the\n * output Observable. Those output values resulting from the projection are also\n * given to the `project` function to produce new output values. This is how\n * *expand* behaves recursively.\n *\n * ## Example\n * Start emitting the powers of two on every click, at most 10 of them\n * ```ts\n * import { fromEvent, of } from 'rxjs';\n * import { expand, mapTo, delay, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const powersOfTwo = clicks.pipe(\n * mapTo(1),\n * expand(x => of(2 * x).pipe(delay(1000))),\n * take(10),\n * );\n * powersOfTwo.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n *\n * @param {function(value: T, index: number) => Observable} project A function\n * that, when applied to an item emitted by the source or the output Observable,\n * returns an Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for subscribing to\n * each projected inner Observable.\n * @return A function that returns an Observable that emits the source values\n * and also result of applying the projection function to each value emitted on\n * the output Observable and merging the results of the Observables obtained\n * from this transformation.\n */\nexport function expand>(\n project: (value: T, index: number) => O,\n concurrent = Infinity,\n scheduler?: SchedulerLike\n): OperatorFunction> {\n concurrent = (concurrent || 0) < 1 ? Infinity : concurrent;\n return operate((source, subscriber) =>\n mergeInternals(\n // General merge params\n source,\n subscriber,\n project,\n concurrent,\n\n // onBeforeNext\n undefined,\n\n // Expand-specific\n true, // Use expand path\n scheduler // Inner subscription scheduler\n )\n );\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorFunction, TruthyTypesOf } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function find(predicate: BooleanConstructor): OperatorFunction>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function find(\n predicate: (this: A, value: T, index: number, source: Observable) => value is S,\n thisArg: A\n): OperatorFunction;\nexport function find(\n predicate: (value: T, index: number, source: Observable) => value is S\n): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function find(\n predicate: (this: A, value: T, index: number, source: Observable) => boolean,\n thisArg: A\n): OperatorFunction;\nexport function find(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction;\n/**\n * Emits only the first value emitted by the source Observable that meets some\n * condition.\n *\n * Finds the first value that passes some test and emits\n * that.\n *\n * ![](find.png)\n *\n * `find` searches for the first item in the source Observable that matches the\n * specified condition embodied by the `predicate`, and returns the first\n * occurrence in the source. Unlike {@link first}, the `predicate` is required\n * in `find`, and does not emit an error if a valid value is not found\n * (emits `undefined` instead).\n *\n * ## Example\n * Find and emit the first click that happens on a DIV element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { find } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(find(ev => ev.target.tagName === 'DIV'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link filter}\n * @see {@link first}\n * @see {@link findIndex}\n * @see {@link take}\n *\n * @param {function(value: T, index: number, source: Observable): boolean} predicate\n * A function called with each item to test for condition matching.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits the first item that\n * matches the condition.\n */\nexport function find(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg?: any\n): OperatorFunction {\n return operate(createFind(predicate, thisArg, 'value'));\n}\n\nexport function createFind(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg: any,\n emit: 'value' | 'index'\n) {\n const findIndex = emit === 'index';\n return (source: Observable, subscriber: Subscriber) => {\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n const i = index++;\n if (predicate.call(thisArg, value, i, source)) {\n subscriber.next(findIndex ? i : value);\n subscriber.complete();\n }\n },\n () => {\n subscriber.next(findIndex ? -1 : undefined);\n subscriber.complete();\n }\n )\n );\n };\n}\n","import { Observable } from '../Observable';\nimport { Falsy, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { createFind } from './find';\n\nexport function findIndex(predicate: BooleanConstructor): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function findIndex(predicate: BooleanConstructor, thisArg: any): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function findIndex(\n predicate: (this: A, value: T, index: number, source: Observable) => boolean,\n thisArg: A\n): OperatorFunction;\nexport function findIndex(predicate: (value: T, index: number, source: Observable) => boolean): OperatorFunction;\n\n/**\n * Emits only the index of the first value emitted by the source Observable that\n * meets some condition.\n *\n * It's like {@link find}, but emits the index of the\n * found value, not the value itself.\n *\n * ![](findIndex.png)\n *\n * `findIndex` searches for the first item in the source Observable that matches\n * the specified condition embodied by the `predicate`, and returns the\n * (zero-based) index of the first occurrence in the source. Unlike\n * {@link first}, the `predicate` is required in `findIndex`, and does not emit\n * an error if a valid value is not found.\n *\n * ## Example\n * Emit the index of first click that happens on a DIV element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { findIndex } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(findIndex(ev => ev.target.tagName === 'DIV'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link first}\n * @see {@link take}\n *\n * @param {function(value: T, index: number, source: Observable): boolean} predicate\n * A function called with each item to test for condition matching.\n * @param {any} [thisArg] An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits the index of the\n * first item that matches the condition.\n */\nexport function findIndex(\n predicate: (value: T, index: number, source: Observable) => boolean,\n thisArg?: any\n): OperatorFunction {\n return operate(createFind(predicate, thisArg, 'index'));\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits `false` if the input Observable emits any values, or emits `true` if the\n * input Observable completes without emitting any values.\n *\n * Tells whether any values are emitted by an Observable.\n *\n * ![](isEmpty.png)\n *\n * `isEmpty` transforms an Observable that emits values into an Observable that\n * emits a single boolean value representing whether or not any values were\n * emitted by the source Observable. As soon as the source Observable emits a\n * value, `isEmpty` will emit a `false` and complete. If the source Observable\n * completes having not emitted anything, `isEmpty` will emit a `true` and\n * complete.\n *\n * A similar effect could be achieved with {@link count}, but `isEmpty` can emit\n * a `false` value sooner.\n *\n * ## Examples\n *\n * Emit `false` for a non-empty Observable.\n *\n * ```ts\n * import { Subject } from 'rxjs';\n * import { isEmpty } from 'rxjs/operators';\n *\n * const source = new Subject();\n * const result = source.pipe(isEmpty());\n *\n * source.subscribe(x => console.log(x));\n * result.subscribe(x => console.log(x));\n *\n * source.next('a');\n * source.next('b');\n * source.next('c');\n * source.complete();\n *\n * // Outputs\n * // a\n * // false\n * // b\n * // c\n * ```\n *\n * Emit `true` for an empty Observable.\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n * import { isEmpty } from 'rxjs/operators';\n *\n * const result = EMPTY.pipe(isEmpty());\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // true\n * ```\n *\n * @see {@link count}\n * @see {@link index/EMPTY}\n *\n * @return A function that returns an Observable that emits boolean value\n * indicating whether the source Observable was empty or not.\n */\nexport function isEmpty(): OperatorFunction {\n return operate((source, subscriber) => {\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n subscriber.next(false);\n subscriber.complete();\n },\n () => {\n subscriber.next(true);\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { reduce } from './reduce';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * The Max operator operates on an Observable that emits numbers (or items that can be compared with a provided function),\n * and when source Observable completes it emits a single item: the item with the largest value.\n *\n * ![](max.png)\n *\n * ## Examples\n * Get the maximal value of a series of numbers\n * ```ts\n * import { of } from 'rxjs';\n * import { max } from 'rxjs/operators';\n *\n * of(5, 4, 7, 2, 8).pipe(\n * max(),\n * )\n * .subscribe(x => console.log(x)); // -> 8\n * ```\n *\n * Use a comparer function to get the maximal item\n * ```typescript\n * import { of } from 'rxjs';\n * import { max } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *of(\n * {age: 7, name: 'Foo'},\n * {age: 5, name: 'Bar'},\n * {age: 9, name: 'Beer'},\n * ).pipe(\n * max((a: Person, b: Person) => a.age < b.age ? -1 : 1),\n * )\n * .subscribe((x: Person) => console.log(x.name)); // -> 'Beer'\n * ```\n *\n * @see {@link min}\n *\n * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the\n * value of two items.\n * @return A function that returns an Observable that emits item with the\n * largest value.\n */\nexport function max(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunction {\n return reduce(isFunction(comparer) ? (x, y) => (comparer(x, y) > 0 ? x : y) : (x, y) => (x > y ? x : y));\n}\n","import { mergeMap } from './mergeMap';\n\n/**\n * @deprecated Renamed to {@link mergeMap}. Will be removed in v8.\n */\nexport const flatMap = mergeMap;\n","import { OperatorFunction, ObservedValueOf, ObservableInput } from '../types';\nimport { mergeMap } from './mergeMap';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function mergeMapTo>(\n innerObservable: O,\n concurrent?: number\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMapTo>(\n innerObservable: O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R,\n concurrent?: number\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is merged multiple\n * times in the output Observable.\n *\n * It's like {@link mergeMap}, but maps each value always\n * to the same inner Observable.\n *\n * ![](mergeMapTo.png)\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then merges those resulting Observables into one\n * single Observable, which is the output Observable.\n *\n * ## Example\n * For each click event, start an interval Observable ticking every 1 second\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { mergeMapTo } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(mergeMapTo(interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMapTo}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeScan}\n * @see {@link switchMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits items from the\n * given `innerObservable`.\n */\nexport function mergeMapTo>(\n innerObservable: O,\n resultSelector?: ((outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Infinity\n): OperatorFunction | R> {\n if (isFunction(resultSelector)) {\n return mergeMap(() => innerObservable, resultSelector, concurrent);\n }\n if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n return mergeMap(() => innerObservable, concurrent);\n}\n","import { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\n\n/**\n * Applies an accumulator function over the source Observable where the\n * accumulator function itself returns an Observable, then each intermediate\n * Observable returned is merged into the output Observable.\n *\n * It's like {@link scan}, but the Observables returned\n * by the accumulator are merged into the outer Observable.\n *\n * The first parameter of the `mergeScan` is an `accumulator` function which is\n * being called every time the source Observable emits a value. `mergeScan` will\n * subscribe to the value returned by the `accumulator` function and will emit\n * values to the subscriber emitted by inner Observable.\n *\n * The `accumulator` function is being called with three parameters passed to it:\n * `acc`, `value` and `index`. The `acc` parameter is used as the state parameter\n * whose value is initially set to the `seed` parameter (the second parameter\n * passed to the `mergeScan` operator).\n *\n * `mergeScan` internally keeps the value of the `acc` parameter: as long as the\n * source Observable emits without inner Observable emitting, the `acc` will be\n * set to `seed`. The next time the inner Observable emits a value, `mergeScan`\n * will internally remember it and it will be passed to the `accumulator`\n * function as `acc` parameter the next time source emits.\n *\n * The `value` parameter of the `accumulator` function is the value emitted by the\n * source Observable, while the `index` is a number which represent the order of the\n * current emission by the source Observable. It starts with 0.\n *\n * The last parameter to the `mergeScan` is the `concurrent` value which defaults\n * to Infinity. It represent the maximum number of inner Observable subscriptions\n * at a time.\n *\n * ## Example\n * Count the number of click events\n * ```ts\n * import { fromEvent, of } from 'rxjs';\n * import { mapTo, mergeScan } from 'rxjs/operators';\n *\n * const click$ = fromEvent(document, 'click');\n * const one$ = click$.pipe(mapTo(1));\n * const seed = 0;\n * const count$ = one$.pipe(\n * mergeScan((acc, one) => of(acc + one), seed),\n * );\n * count$.subscribe(x => console.log(x));\n *\n * // Results:\n * // 1\n * // 2\n * // 3\n * // 4\n * // ...and so on for each click\n * ```\n *\n * @see {@link scan}\n * @see {@link switchScan}\n *\n * @param {function(acc: R, value: T): Observable} accumulator\n * The accumulator function called on each source value.\n * @param seed The initial accumulation value.\n * @param {number} [concurrent=Infinity] Maximum number of\n * input Observables being subscribed to concurrently.\n * @return A function that returns an Observable of the accumulated values.\n */\nexport function mergeScan(\n accumulator: (acc: R, value: T, index: number) => ObservableInput,\n seed: R,\n concurrent = Infinity\n): OperatorFunction {\n return operate((source, subscriber) => {\n // The accumulated state.\n let state = seed;\n\n return mergeInternals(\n source,\n subscriber,\n (value, index) => accumulator(state, value, index),\n concurrent,\n (value) => {\n state = value;\n },\n false,\n undefined,\n () => (state = null!)\n );\n });\n}\n","import { ObservableInputTuple, OperatorFunction } from '../types';\nimport { merge } from './merge';\n\n/**\n * Merge the values from all observables to an single observable result.\n *\n * Creates an observable, that when subscribed to, subscribes to the source\n * observable, and all other sources provided as arguments. All values from\n * every source are emitted from the resulting subscription.\n *\n * When all sources complete, the resulting observable will complete.\n *\n * When any one source errors, the resulting observable will error.\n *\n *\n * ### Example\n *\n * Joining all outputs from multiple user input event streams:\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { map, mergeWith } from 'rxjs/operators';\n *\n * const clicks$ = fromEvent(document, 'click').pipe(map(() => 'click'));\n * const mousemoves$ = fromEvent(document, 'mousemove').pipe(map(() => 'mousemove'));\n * const dblclicks$ = fromEvent(document, 'dblclick').pipe(map(() => 'dblclick'));\n *\n * mousemoves$.pipe(\n * mergeWith(clicks$, dblclicks$),\n * )\n * .subscribe(x => console.log(x));\n *\n * // result (assuming user interactions)\n * // \"mousemove\"\n * // \"mousemove\"\n * // \"mousemove\"\n * // \"click\"\n * // \"click\"\n * // \"dblclick\"\n * ```\n * @param otherSources the sources to combine the current source with.\n * @return A function that returns an Observable that merges the values from\n * all given Observables.\n */\nexport function mergeWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction {\n return merge(...otherSources);\n}\n","import { ObservableInput, ObservableInputTuple, OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { mergeAll } from './mergeAll';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from '../observable/from';\n\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(...sources: [...ObservableInputTuple]): OperatorFunction;\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(\n ...sourcesAndConcurrency: [...ObservableInputTuple, number]\n): OperatorFunction;\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): OperatorFunction;\n/** @deprecated Replaced with {@link mergeWith}. Will be removed in v8. */\nexport function merge(\n ...sourcesAndConcurrencyAndScheduler: [...ObservableInputTuple, number, SchedulerLike]\n): OperatorFunction;\n\nexport function merge(...args: unknown[]): OperatorFunction {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n args = argsOrArgArray(args);\n\n return operate((source, subscriber) => {\n mergeAll(concurrent)(from([source, ...(args as ObservableInput[])], scheduler)).subscribe(subscriber);\n });\n}\n","import { reduce } from './reduce';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * The Min operator operates on an Observable that emits numbers (or items that can be compared with a provided function),\n * and when source Observable completes it emits a single item: the item with the smallest value.\n *\n * ![](min.png)\n *\n * ## Examples\n * Get the minimal value of a series of numbers\n * ```ts\n * import { of } from 'rxjs';\n * import { min } from 'rxjs/operators';\n *\n * of(5, 4, 7, 2, 8).pipe(\n * min(),\n * )\n * .subscribe(x => console.log(x)); // -> 2\n * ```\n *\n * Use a comparer function to get the minimal item\n * ```typescript\n * import { of } from 'rxjs';\n * import { min } from 'rxjs/operators';\n *\n * interface Person {\n * age: number,\n * name: string\n * }\n *of(\n * {age: 7, name: 'Foo'},\n * {age: 5, name: 'Bar'},\n * {age: 9, name: 'Beer'},\n * ).pipe(\n * min( (a: Person, b: Person) => a.age < b.age ? -1 : 1),\n * )\n * .subscribe((x: Person) => console.log(x.name)); // -> 'Bar'\n * ```\n * @see {@link max}\n *\n * @param {Function} [comparer] - Optional comparer function that it will use instead of its default to compare the\n * value of two items.\n * @return A function that returns an Observable that emits item with the\n * smallest value.\n */\nexport function min(comparer?: (x: T, y: T) => number): MonoTypeOperatorFunction {\n return reduce(isFunction(comparer) ? (x, y) => (comparer(x, y) < 0 ? x : y) : (x, y) => (x < y ? x : y));\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Groups pairs of consecutive emissions together and emits them as an array of\n * two values.\n *\n * Puts the current value and previous value together as\n * an array, and emits that.\n *\n * ![](pairwise.png)\n *\n * The Nth emission from the source Observable will cause the output Observable\n * to emit an array [(N-1)th, Nth] of the previous and the current value, as a\n * pair. For this reason, `pairwise` emits on the second and subsequent\n * emissions from the source Observable, but not on the first emission, because\n * there is no previous value in that case.\n *\n * ## Example\n * On every click (starting from the second), emit the relative distance to the previous click\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { pairwise, map } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const pairs = clicks.pipe(pairwise());\n * const distance = pairs.pipe(\n * map(pair => {\n * const x0 = pair[0].clientX;\n * const y0 = pair[0].clientY;\n * const x1 = pair[1].clientX;\n * const y1 = pair[1].clientY;\n * return Math.sqrt(Math.pow(x0 - x1, 2) + Math.pow(y0 - y1, 2));\n * }),\n * );\n * distance.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link buffer}\n * @see {@link bufferCount}\n *\n * @return A function that returns an Observable of pairs (as arrays) of\n * consecutive values from the source Observable.\n */\nexport function pairwise(): OperatorFunction {\n return operate((source, subscriber) => {\n let prev: T;\n let hasPrev = false;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n const p = prev;\n prev = value;\n hasPrev && subscriber.next([p, value]);\n hasPrev = true;\n })\n );\n });\n}\n","import { Observable } from '../Observable';\nimport { BehaviorSubject } from '../BehaviorSubject';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { UnaryFunction } from '../types';\n\n/**\n * Creates a {@link ConnectableObservable} that utilizes a {@link BehaviorSubject}.\n *\n * @param initialValue The initial value passed to the {@link BehaviorSubject}.\n * @return A function that returns a {@link ConnectableObservable}\n * @deprecated Will be removed in v8. To create a connectable observable that uses a\n * {@link BehaviorSubject} under the hood, use {@link connectable}.\n * `source.pipe(publishBehavior(initValue))` is equivalent to\n * `connectable(source, { connector: () => new BehaviorSubject(initValue), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishBehavior`, use the {@link share} operator instead.\n * `source.pipe(publishBehavior(initValue), refCount())` is equivalent to\n * `source.pipe(share({ connector: () => new BehaviorSubject(initValue), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishBehavior(initialValue: T): UnaryFunction, ConnectableObservable> {\n // Note that this has *never* supported the selector function.\n return (source) => {\n const subject = new BehaviorSubject(initialValue);\n return new ConnectableObservable(source, () => subject);\n };\n}\n","import { Observable } from '../Observable';\nimport { AsyncSubject } from '../AsyncSubject';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { UnaryFunction } from '../types';\n\n/**\n * Returns a connectable observable sequence that shares a single subscription to the\n * underlying sequence containing only the last notification.\n *\n * ![](publishLast.png)\n *\n * Similar to {@link publish}, but it waits until the source observable completes and stores\n * the last emitted value.\n * Similarly to {@link publishReplay} and {@link publishBehavior}, this keeps storing the last\n * value even if it has no more subscribers. If subsequent subscriptions happen, they will\n * immediately get that last stored value and complete.\n *\n * ## Example\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { publishLast, tap, take } from 'rxjs/operators';\n *\n * const connectable =\n * interval(1000)\n * .pipe(\n * tap(x => console.log(\"side effect\", x)),\n * take(3),\n * publishLast());\n *\n * connectable.subscribe(\n * x => console.log( \"Sub. A\", x),\n * err => console.log(\"Sub. A Error\", err),\n * () => console.log( \"Sub. A Complete\"));\n *\n * connectable.subscribe(\n * x => console.log( \"Sub. B\", x),\n * err => console.log(\"Sub. B Error\", err),\n * () => console.log( \"Sub. B Complete\"));\n *\n * connectable.connect();\n *\n * // Results:\n * // \"side effect 0\"\n * // \"side effect 1\"\n * // \"side effect 2\"\n * // \"Sub. A 2\"\n * // \"Sub. B 2\"\n * // \"Sub. A Complete\"\n * // \"Sub. B Complete\"\n * ```\n *\n * @see {@link ConnectableObservable}\n * @see {@link publish}\n * @see {@link publishReplay}\n * @see {@link publishBehavior}\n *\n * @return A function that returns an Observable that emits elements of a\n * sequence produced by multicasting the source sequence.\n * @deprecated Will be removed in v8. To create a connectable observable with an\n * {@link AsyncSubject} under the hood, use {@link connectable}.\n * `source.pipe(publishLast())` is equivalent to\n * `connectable(source, { connector: () => new AsyncSubject(), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishLast`, use the {@link share} operator instead.\n * `source.pipe(publishLast(), refCount())` is equivalent to\n * `source.pipe(share({ connector: () => new AsyncSubject(), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishLast(): UnaryFunction, ConnectableObservable> {\n // Note that this has *never* supported a selector function like `publish` and `publishReplay`.\n return (source) => {\n const subject = new AsyncSubject();\n return new ConnectableObservable(source, () => subject);\n };\n}\n","import { Observable } from '../Observable';\nimport { ReplaySubject } from '../ReplaySubject';\nimport { multicast } from './multicast';\nimport { MonoTypeOperatorFunction, OperatorFunction, TimestampProvider, ObservableInput, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * Creates a {@link ConnectableObservable} that uses a {@link ReplaySubject}\n * internally.\n *\n * @param bufferSize The buffer size for the underlying {@link ReplaySubject}.\n * @param windowTime The window time for the underlying {@link ReplaySubject}.\n * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}.\n * @deprecated Will be removed in v8. To create a connectable observable that uses a\n * {@link ReplaySubject} under the hood, use {@link connectable}.\n * `source.pipe(publishReplay(size, time, scheduler))` is equivalent to\n * `connectable(source, { connector: () => new ReplaySubject(size, time, scheduler), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishReplay`, use the {@link share} operator instead.\n * `publishReplay(size, time, scheduler), refCount()` is equivalent to\n * `share({ connector: () => new ReplaySubject(size, time, scheduler), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay(\n bufferSize?: number,\n windowTime?: number,\n timestampProvider?: TimestampProvider\n): MonoTypeOperatorFunction;\n\n/**\n * Creates an observable, that when subscribed to, will create a {@link ReplaySubject},\n * and pass an observable from it (using [asObservable](api/index/class/Subject#asObservable)) to\n * the `selector` function, which then returns an observable that is subscribed to before\n * \"connecting\" the source to the internal `ReplaySubject`.\n *\n * Since this is deprecated, for additional details see the documentation for {@link connect}.\n *\n * @param bufferSize The buffer size for the underlying {@link ReplaySubject}.\n * @param windowTime The window time for the underlying {@link ReplaySubject}.\n * @param selector A function used to setup the multicast.\n * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}.\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `source.pipe(publishReplay(size, window, selector, scheduler))` is equivalent to\n * `source.pipe(connect(selector, { connector: () => new ReplaySubject(size, window, scheduler) }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay>(\n bufferSize: number | undefined,\n windowTime: number | undefined,\n selector: (shared: Observable) => O,\n timestampProvider?: TimestampProvider\n): OperatorFunction>;\n\n/**\n * Creates a {@link ConnectableObservable} that uses a {@link ReplaySubject}\n * internally.\n *\n * @param bufferSize The buffer size for the underlying {@link ReplaySubject}.\n * @param windowTime The window time for the underlying {@link ReplaySubject}.\n * @param selector Passing `undefined` here determines that this operator will return a {@link ConnectableObservable}.\n * @param timestampProvider The timestamp provider for the underlying {@link ReplaySubject}.\n * @deprecated Will be removed in v8. To create a connectable observable that uses a\n * {@link ReplaySubject} under the hood, use {@link connectable}.\n * `source.pipe(publishReplay(size, time, scheduler))` is equivalent to\n * `connectable(source, { connector: () => new ReplaySubject(size, time, scheduler), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publishReplay`, use the {@link share} operator instead.\n * `publishReplay(size, time, scheduler), refCount()` is equivalent to\n * `share({ connector: () => new ReplaySubject(size, time, scheduler), resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay>(\n bufferSize: number | undefined,\n windowTime: number | undefined,\n selector: undefined,\n timestampProvider: TimestampProvider\n): OperatorFunction>;\n\n/**\n * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the\n * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's\n * behaviors.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publishReplay(\n bufferSize?: number,\n windowTime?: number,\n selectorOrScheduler?: TimestampProvider | OperatorFunction,\n timestampProvider?: TimestampProvider\n) {\n if (selectorOrScheduler && !isFunction(selectorOrScheduler)) {\n timestampProvider = selectorOrScheduler;\n }\n const selector = isFunction(selectorOrScheduler) ? selectorOrScheduler : undefined;\n // Note, we're passing `selector!` here, because at runtime, `undefined` is an acceptable argument\n // but it makes our TypeScript signature for `multicast` unhappy (as it should, because it's gross).\n return (source: Observable) => multicast(new ReplaySubject(bufferSize, windowTime, timestampProvider), selector!)(source);\n}\n","import { OperatorFunction, ObservableInputTuple } from '../types';\nimport { raceInit } from '../observable/race';\nimport { operate } from '../util/lift';\nimport { identity } from '../util/identity';\n\n/**\n * Creates an Observable that mirrors the first source Observable to emit a next,\n * error or complete notification from the combination of the Observable to which\n * the operator is applied and supplied Observables.\n *\n * ## Example\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { mapTo, raceWith } from 'rxjs/operators';\n *\n * const obs1 = interval(1000).pipe(mapTo('fast one'));\n * const obs2 = interval(3000).pipe(mapTo('medium one'));\n * const obs3 = interval(5000).pipe(mapTo('slow one'));\n *\n * obs2.pipe(\n * raceWith(obs3, obs1)\n * ).subscribe(\n * winner => console.log(winner)\n * );\n *\n * // Outputs\n * // a series of 'fast one'\n * ```\n *\n * @param otherSources Sources used to race for which Observable emits first.\n * @return A function that returns an Observable that mirrors the output of the\n * first Observable to emit an item.\n */\n\nexport function raceWith(\n ...otherSources: [...ObservableInputTuple]\n): OperatorFunction {\n return !otherSources.length\n ? identity\n : operate((source, subscriber) => {\n raceInit([source, ...otherSources])(subscriber);\n });\n}\n","import { Subscription } from '../Subscription';\nimport { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { timer } from '../observable/timer';\n\nexport interface RepeatConfig {\n /**\n * The number of times to repeat the source. Defaults to `Infinity`.\n */\n count?: number;\n\n /**\n * If a `number`, will delay the repeat of the source by that number of milliseconds.\n * If a function, it will provide the number of times the source has been subscribed to,\n * and the return value should be a valid observable input that will notify when the source\n * should be repeated. If the notifier observable is empty, the result will complete.\n */\n delay?: number | ((count: number) => ObservableInput);\n}\n\n/**\n * Returns an Observable that will resubscribe to the source stream when the source stream completes.\n *\n * Repeats all values emitted on the source. It's like {@link retry}, but for non error cases.\n *\n * ![](repeat.png)\n *\n * Repeat will output values from a source until the source completes, then it will resubscribe to the\n * source a specified number of times, with a specified delay. Repeat can be particularly useful in\n * combination with closing operators like {@link take}, {@link takeUntil}, {@link first}, or {@link takeWhile},\n * as it can be used to restart a source again from scratch.\n *\n * Repeat is very similar to {@link retry}, where {@link retry} will resubscribe to the source in the error case, but\n * `repeat` will resubscribe if the source completes.\n *\n * Note that `repeat` will _not_ catch errors. Use {@link retry} for that.\n *\n * - `repeat(0)` returns an empty observable\n * - `repeat()` will repeat forever\n * - `repeat({ delay: 200 })` will repeat forever, with a delay of 200ms between repetitions.\n * - `repeat({ count: 2, delay: 400 })` will repeat twice, with a delay of 400ms between repetitions.\n * - `repeat({ delay: (count) => timer(count * 1000) })` will repeat forever, but will have a delay that grows by one second for each repetition.\n *\n * ## Example\n * Repeat a message stream\n * ```ts\n * import { of, repeat } from 'rxjs';\n *\n * const source = of('Repeat message');\n * const example = source.pipe(repeat(3));\n * example.subscribe(x => console.log(x));\n *\n * // Results\n * // Repeat message\n * // Repeat message\n * // Repeat message\n * ```\n *\n * Repeat 3 values, 2 times\n * ```ts\n * import { interval } from 'rxjs';\n * import { repeat, take } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(take(3), repeat(2));\n * example.subscribe(x => console.log(x));\n *\n * // Results every second\n * // 0\n * // 1\n * // 2\n * // 0\n * // 1\n * // 2\n * ```\n *\n * Defining two complex repeats with delays on the same source.\n * Note that the second repeat cannot be called until the first\n * repeat as exhausted it's count.\n *\n * ```ts\n * import { defer, of, repeat } from 'rxjs';\n *\n * const source = defer(() => {\n * return of(`Hello, it is ${new Date()}`)\n * });\n *\n * source.pipe(\n * // Repeat 3 times with a delay of 1 second between repetitions\n * repeat({\n * count: 3,\n * delay: 1000,\n * }),\n *\n * // *Then* repeat forever, but with an exponential step-back\n * // maxing out at 1 minute.\n * repeat({\n * delay: (count) => timer(Math.min(60000, 2 ^ count * 1000))\n * })\n * )\n * ```\n *\n * @see {@link repeatWhen}\n * @see {@link retry}\n *\n * @param count The number of times the source Observable items are repeated, a count of 0 will yield\n * an empty Observable.\n */\nexport function repeat(countOrConfig?: number | RepeatConfig): MonoTypeOperatorFunction {\n let count = Infinity;\n let delay: RepeatConfig['delay'];\n\n if (countOrConfig != null) {\n if (typeof countOrConfig === 'object') {\n ({ count = Infinity, delay } = countOrConfig);\n } else {\n count = countOrConfig;\n }\n }\n\n return count <= 0\n ? () => EMPTY\n : operate((source, subscriber) => {\n let soFar = 0;\n let sourceSub: Subscription | null;\n\n const resubscribe = () => {\n sourceSub?.unsubscribe();\n sourceSub = null;\n if (delay != null) {\n const notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(soFar));\n const notifierSubscriber = new OperatorSubscriber(subscriber, () => {\n notifierSubscriber.unsubscribe();\n subscribeToSource();\n });\n notifier.subscribe(notifierSubscriber);\n } else {\n subscribeToSource();\n }\n };\n\n const subscribeToSource = () => {\n let syncUnsub = false;\n sourceSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, () => {\n if (++soFar < count) {\n if (sourceSub) {\n resubscribe();\n } else {\n syncUnsub = true;\n }\n } else {\n subscriber.complete();\n }\n })\n );\n\n if (syncUnsub) {\n resubscribe();\n }\n };\n\n subscribeToSource();\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\n\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception of a `complete`. If the source\n * Observable calls `complete`, this method will emit to the Observable returned from `notifier`. If that Observable\n * calls `complete` or `error`, then this method will call `complete` or `error` on the child subscription. Otherwise\n * this method will resubscribe to the source Observable.\n *\n * ![](repeatWhen.png)\n *\n * ## Example\n * Repeat a message stream on click\n * ```ts\n * import { of, fromEvent } from 'rxjs';\n * import { repeatWhen } from 'rxjs/operators';\n *\n * const source = of('Repeat message');\n * const documentClick$ = fromEvent(document, 'click');\n *\n * source.pipe(repeatWhen(() => documentClick$)\n * ).subscribe(data => console.log(data))\n * ```\n * @see {@link repeat}\n * @see {@link retry}\n * @see {@link retryWhen}\n *\n * @param {function(notifications: Observable): Observable} notifier - Receives an Observable of notifications with\n * which a user can `complete` or `error`, aborting the repetition.\n * @return A function that returns an Observable that that mirrors the source\n * Observable with the exception of a `complete`.\n */\nexport function repeatWhen(notifier: (notifications: Observable) => Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null;\n let syncResub = false;\n let completions$: Subject;\n let isNotifierComplete = false;\n let isMainComplete = false;\n\n /**\n * Checks to see if we can complete the result, completes it, and returns `true` if it was completed.\n */\n const checkComplete = () => isMainComplete && isNotifierComplete && (subscriber.complete(), true);\n /**\n * Gets the subject to send errors through. If it doesn't exist,\n * we know we need to setup the notifier.\n */\n const getCompletionSubject = () => {\n if (!completions$) {\n completions$ = new Subject();\n\n // If the call to `notifier` throws, it will be caught by the OperatorSubscriber\n // In the main subscription -- in `subscribeForRepeatWhen`.\n notifier(completions$).subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n if (innerSub) {\n subscribeForRepeatWhen();\n } else {\n // If we don't have an innerSub yet, that's because the inner subscription\n // call hasn't even returned yet. We've arrived here synchronously.\n // So we flag that we want to resub, such that we can ensure teardown\n // happens before we resubscribe.\n syncResub = true;\n }\n },\n () => {\n isNotifierComplete = true;\n checkComplete();\n }\n )\n );\n }\n return completions$;\n };\n\n const subscribeForRepeatWhen = () => {\n isMainComplete = false;\n\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, () => {\n isMainComplete = true;\n // Check to see if we are complete, and complete if so.\n // If we are not complete. Get the subject. This calls the `notifier` function.\n // If that function fails, it will throw and `.next()` will not be reached on this\n // line. The thrown error is caught by the _complete handler in this\n // `OperatorSubscriber` and handled appropriately.\n !checkComplete() && getCompletionSubject().next();\n })\n );\n\n if (syncResub) {\n // Ensure that the inner subscription is torn down before\n // moving on to the next subscription in the synchronous case.\n // If we don't do this here, all inner subscriptions will not be\n // torn down until the entire observable is done.\n innerSub.unsubscribe();\n // It is important to null this out. Not only to free up memory, but\n // to make sure code above knows we are in a subscribing state to\n // handle synchronous resubscription.\n innerSub = null;\n // We may need to do this multiple times, so reset the flags.\n syncResub = false;\n // Resubscribe\n subscribeForRepeatWhen();\n }\n };\n\n // Start the subscription\n subscribeForRepeatWhen();\n });\n}\n","import { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { Subscription } from '../Subscription';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\nimport { timer } from '../observable/timer';\nimport { innerFrom } from '../observable/innerFrom';\n\nexport interface RetryConfig {\n /**\n * The maximum number of times to retry.\n */\n count?: number;\n /**\n * The number of milliseconds to delay before retrying, OR a function to\n * return a notifier for delaying. If a function is given, that function should\n * return a notifier that, when it emits will retry the source. If the notifier\n * completes _without_ emitting, the resulting observable will complete without error,\n * if the notifier errors, the error will be pushed to the result.\n */\n delay?: number | ((error: any, retryCount: number) => ObservableInput);\n /**\n * Whether or not to reset the retry counter when the retried subscription\n * emits its first value.\n */\n resetOnSuccess?: boolean;\n}\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable\n * calls `error`, this method will resubscribe to the source Observable for a maximum of `count` resubscriptions (given\n * as a number parameter) rather than propagating the `error` call.\n *\n * ![](retry.png)\n *\n * Any and all items emitted by the source Observable will be emitted by the resulting Observable, even those emitted\n * during failed subscriptions. For example, if an Observable fails at first but emits [1, 2] then succeeds the second\n * time and emits: [1, 2, 3, 4, 5] then the complete stream of emissions and notifications\n * would be: [1, 2, 1, 2, 3, 4, 5, `complete`].\n *\n * ## Example\n * ```ts\n * import { interval, of, throwError } from 'rxjs';\n * import { mergeMap, retry } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(\n * mergeMap(val => {\n * if(val > 5){\n * return throwError('Error!');\n * }\n * return of(val);\n * }),\n * //retry 2 times on error\n * retry(2)\n * );\n *\n * const subscribe = example.subscribe({\n * next: val => console.log(val),\n * error: val => console.log(`${val}: Retried 2 times then quit!`)\n * });\n *\n * // Output:\n * // 0..1..2..3..4..5..\n * // 0..1..2..3..4..5..\n * // 0..1..2..3..4..5..\n * // \"Error!: Retried 2 times then quit!\"\n * ```\n *\n * @param count - Number of retry attempts before failing.\n * @param resetOnSuccess - When set to `true` every successful emission will reset the error count\n * @return A function that returns an Observable that will resubscribe to the\n * source stream when the source stream errors, at most `count` times.\n */\nexport function retry(count?: number): MonoTypeOperatorFunction;\n\n/**\n * Returns an observable that mirrors the source observable unless it errors. If it errors, the source observable\n * will be resubscribed to (or \"retried\") based on the configuration passed here. See documentation\n * for {@link RetryConfig} for more details.\n *\n * @param config - The retry configuration\n */\nexport function retry(config: RetryConfig): MonoTypeOperatorFunction;\n\nexport function retry(configOrCount: number | RetryConfig = Infinity): MonoTypeOperatorFunction {\n let config: RetryConfig;\n if (configOrCount && typeof configOrCount === 'object') {\n config = configOrCount;\n } else {\n config = {\n count: configOrCount,\n };\n }\n const { count = Infinity, delay, resetOnSuccess: resetOnSuccess = false } = config;\n\n return count <= 0\n ? identity\n : operate((source, subscriber) => {\n let soFar = 0;\n let innerSub: Subscription | null;\n const subscribeForRetry = () => {\n let syncUnsub = false;\n innerSub = source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // If we're resetting on success\n if (resetOnSuccess) {\n soFar = 0;\n }\n subscriber.next(value);\n },\n // Completions are passed through to consumer.\n undefined,\n (err) => {\n if (soFar++ < count) {\n // We are still under our retry count\n const resub = () => {\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n } else {\n syncUnsub = true;\n }\n };\n\n if (delay != null) {\n // The user specified a retry delay.\n // They gave us a number, use a timer, otherwise, it's a function,\n // and we're going to call it to get a notifier.\n const notifier = typeof delay === 'number' ? timer(delay) : innerFrom(delay(err, soFar));\n const notifierSubscriber = new OperatorSubscriber(\n subscriber,\n () => {\n // After we get the first notification, we\n // unsubscribe from the notifer, because we don't want anymore\n // and we resubscribe to the source.\n notifierSubscriber.unsubscribe();\n resub();\n },\n () => {\n // The notifier completed without emitting.\n // The author is telling us they want to complete.\n subscriber.complete();\n }\n );\n notifier.subscribe(notifierSubscriber);\n } else {\n // There was no notifier given. Just resub immediately.\n resub();\n }\n } else {\n // We're past our maximum number of retries.\n // Just send along the error.\n subscriber.error(err);\n }\n }\n )\n );\n if (syncUnsub) {\n innerSub.unsubscribe();\n innerSub = null;\n subscribeForRetry();\n }\n };\n subscribeForRetry();\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\n\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns an Observable that mirrors the source Observable with the exception of an `error`. If the source Observable\n * calls `error`, this method will emit the Throwable that caused the error to the Observable returned from `notifier`.\n * If that Observable calls `complete` or `error` then this method will call `complete` or `error` on the child\n * subscription. Otherwise this method will resubscribe to the source Observable.\n *\n * ![](retryWhen.png)\n *\n * Retry an observable sequence on error based on custom criteria.\n *\n * ## Example\n * ```ts\n * import { timer, interval } from 'rxjs';\n * import { map, tap, retryWhen, delayWhen } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const example = source.pipe(\n * map(val => {\n * if (val > 5) {\n * // error will be picked up by retryWhen\n * throw val;\n * }\n * return val;\n * }),\n * retryWhen(errors =>\n * errors.pipe(\n * // log error message\n * tap(val => console.log(`Value ${val} was too high!`)),\n * // restart in 5 seconds\n * delayWhen(val => timer(val * 1000))\n * )\n * )\n * );\n *\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // results:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * // 5\n * // \"Value 6 was too high!\"\n * // --Wait 5 seconds then repeat\n * ```\n *\n * @param {function(errors: Observable): Observable} notifier - Receives an Observable of notifications with which a\n * user can `complete` or `error`, aborting the retry.\n * @return A function that returns an Observable that mirrors the source\n * Observable with the exception of an `error`.\n */\nexport function retryWhen(notifier: (errors: Observable) => Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null;\n let syncResub = false;\n let errors$: Subject;\n\n const subscribeForRetryWhen = () => {\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, undefined, (err) => {\n if (!errors$) {\n errors$ = new Subject();\n notifier(errors$).subscribe(\n new OperatorSubscriber(subscriber, () =>\n // If we have an innerSub, this was an asynchronous call, kick off the retry.\n // Otherwise, if we don't have an innerSub yet, that's because the inner subscription\n // call hasn't even returned yet. We've arrived here synchronously.\n // So we flag that we want to resub, such that we can ensure teardown\n // happens before we resubscribe.\n innerSub ? subscribeForRetryWhen() : (syncResub = true)\n )\n );\n }\n if (errors$) {\n // We have set up the notifier without error.\n errors$.next(err);\n }\n })\n );\n\n if (syncResub) {\n // Ensure that the inner subscription is torn down before\n // moving on to the next subscription in the synchronous case.\n // If we don't do this here, all inner subscriptions will not be\n // torn down until the entire observable is done.\n innerSub.unsubscribe();\n innerSub = null;\n // We may need to do this multiple times, so reset the flag.\n syncResub = false;\n // Resubscribe\n subscribeForRetryWhen();\n }\n };\n\n // Start the subscription\n subscribeForRetryWhen();\n });\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { noop } from '../util/noop';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits the most recently emitted value from the source Observable whenever\n * another Observable, the `notifier`, emits.\n *\n * It's like {@link sampleTime}, but samples whenever\n * the `notifier` Observable emits something.\n *\n * ![](sample.png)\n *\n * Whenever the `notifier` Observable emits a value, `sample`\n * looks at the source Observable and emits whichever value it has most recently\n * emitted since the previous sampling, unless the source has not emitted\n * anything since the previous sampling. The `notifier` is subscribed to as soon\n * as the output Observable is subscribed.\n *\n * ## Example\n * On every click, sample the most recent \"seconds\" timer\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { sample } from 'rxjs/operators';\n *\n * const seconds = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const result = seconds.pipe(sample(clicks));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounce}\n * @see {@link sampleTime}\n * @see {@link throttle}\n *\n * @param notifier The Observable to use for sampling the\n * source Observable.\n * @return A function that returns an Observable that emits the results of\n * sampling the values emitted by the source Observable whenever the notifier\n * Observable emits value or completes.\n */\nexport function sample(notifier: Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n hasValue = true;\n lastValue = value;\n })\n );\n const emit = () => {\n if (hasValue) {\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n notifier.subscribe(new OperatorSubscriber(subscriber, emit, noop));\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { sample } from './sample';\nimport { interval } from '../observable/interval';\n\n/**\n * Emits the most recently emitted value from the source Observable within\n * periodic time intervals.\n *\n * Samples the source Observable at periodic time\n * intervals, emitting what it samples.\n *\n * ![](sampleTime.png)\n *\n * `sampleTime` periodically looks at the source Observable and emits whichever\n * value it has most recently emitted since the previous sampling, unless the\n * source has not emitted anything since the previous sampling. The sampling\n * happens periodically in time every `period` milliseconds (or the time unit\n * defined by the optional `scheduler` argument). The sampling starts as soon as\n * the output Observable is subscribed.\n *\n * ## Example\n * Every second, emit the most recent click at most once\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { sampleTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(sampleTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link auditTime}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sample}\n * @see {@link throttleTime}\n *\n * @param {number} period The sampling period expressed in milliseconds or the\n * time unit determined internally by the optional `scheduler`.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the sampling.\n * @return A function that returns an Observable that emits the results of\n * sampling the values emitted by the source Observable at the specified time\n * interval.\n */\nexport function sampleTime(period: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction {\n return sample(interval(period, scheduler));\n}\n","import { Observable } from '../Observable';\n\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Compares all values of two observables in sequence using an optional comparator function\n * and returns an observable of a single boolean value representing whether or not the two sequences\n * are equal.\n *\n * Checks to see of all values emitted by both observables are equal, in order.\n *\n * ![](sequenceEqual.png)\n *\n * `sequenceEqual` subscribes to two observables and buffers incoming values from each observable. Whenever either\n * observable emits a value, the value is buffered and the buffers are shifted and compared from the bottom\n * up; If any value pair doesn't match, the returned observable will emit `false` and complete. If one of the\n * observables completes, the operator will wait for the other observable to complete; If the other\n * observable emits before completing, the returned observable will emit `false` and complete. If one observable never\n * completes or emits after the other completes, the returned observable will never complete.\n *\n * ## Example\n * figure out if the Konami code matches\n * ```ts\n * import { from, fromEvent } from 'rxjs';\n * import { sequenceEqual, bufferCount, mergeMap, map } from 'rxjs/operators';\n *\n * const codes = from([\n * 'ArrowUp',\n * 'ArrowUp',\n * 'ArrowDown',\n * 'ArrowDown',\n * 'ArrowLeft',\n * 'ArrowRight',\n * 'ArrowLeft',\n * 'ArrowRight',\n * 'KeyB',\n * 'KeyA',\n * 'Enter', // no start key, clearly.\n * ]);\n *\n * const keys = fromEvent(document, 'keyup').pipe(map(e => e.code));\n * const matches = keys.pipe(\n * bufferCount(11, 1),\n * mergeMap(\n * last11 => from(last11).pipe(sequenceEqual(codes)),\n * ),\n * );\n * matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));\n * ```\n *\n * @see {@link combineLatest}\n * @see {@link zip}\n * @see {@link withLatestFrom}\n *\n * @param {Observable} compareTo The observable sequence to compare the source sequence to.\n * @param {function} [comparator] An optional function to compare each value pair\n * @return A function that returns an Observable that emits a single boolean\n * value representing whether or not the values emitted by the source\n * Observable and provided Observable were equal in sequence.\n */\nexport function sequenceEqual(\n compareTo: Observable,\n comparator: (a: T, b: T) => boolean = (a, b) => a === b\n): OperatorFunction {\n return operate((source, subscriber) => {\n // The state for the source observable\n const aState = createState();\n // The state for the compareTo observable;\n const bState = createState();\n\n /** A utility to emit and complete */\n const emit = (isEqual: boolean) => {\n subscriber.next(isEqual);\n subscriber.complete();\n };\n\n /**\n * Creates a subscriber that subscribes to one of the sources, and compares its collected\n * state -- `selfState` -- to the other source's collected state -- `otherState`. This\n * is used for both streams.\n */\n const createSubscriber = (selfState: SequenceState, otherState: SequenceState) => {\n const sequenceEqualSubscriber = new OperatorSubscriber(\n subscriber,\n (a: T) => {\n const { buffer, complete } = otherState;\n if (buffer.length === 0) {\n // If there's no values in the other buffer\n // and the other stream is complete, we know\n // this isn't a match, because we got one more value.\n // Otherwise, we push onto our buffer, so when the other\n // stream emits, it can pull this value off our buffer and check it\n // at the appropriate time.\n complete ? emit(false) : selfState.buffer.push(a);\n } else {\n // If the other stream *does* have values in it's buffer,\n // pull the oldest one off so we can compare it to what we\n // just got. If it wasn't a match, emit `false` and complete.\n !comparator(a, buffer.shift()!) && emit(false);\n }\n },\n () => {\n // Or observable completed\n selfState.complete = true;\n const { complete, buffer } = otherState;\n // If the other observable is also complete, and there's\n // still stuff left in their buffer, it doesn't match, if their\n // buffer is empty, then it does match. This is because we can't\n // possibly get more values here anymore.\n complete && emit(buffer.length === 0);\n // Be sure to clean up our stream as soon as possible if we can.\n sequenceEqualSubscriber?.unsubscribe();\n }\n );\n\n return sequenceEqualSubscriber;\n };\n\n // Subscribe to each source.\n source.subscribe(createSubscriber(aState, bState));\n compareTo.subscribe(createSubscriber(bState, aState));\n });\n}\n\n/**\n * A simple structure for the data used to test each sequence\n */\ninterface SequenceState {\n /** A temporary store for arrived values before they are checked */\n buffer: T[];\n /** Whether or not the sequence source has completed. */\n complete: boolean;\n}\n\n/**\n * Creates a simple structure that is used to represent\n * data used to test each sequence.\n */\nfunction createState(): SequenceState {\n return {\n buffer: [],\n complete: false,\n };\n}\n","import { Observable } from '../Observable';\nimport { EmptyError } from '../util/EmptyError';\n\nimport { MonoTypeOperatorFunction, OperatorFunction, TruthyTypesOf } from '../types';\nimport { SequenceError } from '../util/SequenceError';\nimport { NotFoundError } from '../util/NotFoundError';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function single(predicate: BooleanConstructor): OperatorFunction>;\nexport function single(predicate?: (value: T, index: number, source: Observable) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Returns an observable that asserts that only one value is\n * emitted from the observable that matches the predicate. If no\n * predicate is provided, then it will assert that the observable\n * only emits one value.\n *\n * In the event that the observable is empty, it will throw an\n * {@link EmptyError}.\n *\n * In the event that two values are found that match the predicate,\n * or when there are two values emitted and no predicate, it will\n * throw a {@link SequenceError}\n *\n * In the event that no values match the predicate, if one is provided,\n * it will throw a {@link NotFoundError}\n *\n * ## Example\n *\n * Expect only name beginning with 'B':\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { single } from 'rxjs/operators';\n *\n * const source1 = of(\n * { name: 'Ben' },\n * { name: 'Tracy' },\n * { name: 'Laney' },\n * { name: 'Lily' }\n * );\n *\n * source1.pipe(\n * single(x => x.name.startsWith('B'))\n * )\n * .subscribe(x => console.log(x));\n * // Emits \"Ben\"\n *\n *\n * const source2 = of(\n * { name: 'Ben' },\n * { name: 'Tracy' },\n * { name: 'Bradley' },\n * { name: 'Lincoln' }\n * );\n *\n * source2.pipe(\n * single(x => x.name.startsWith('B'))\n * )\n * .subscribe(x => console.log(x));\n * // Error emitted: SequenceError('Too many values match')\n *\n *\n * const source3 = of(\n * { name: 'Laney' },\n * { name: 'Tracy' },\n * { name: 'Lily' },\n * { name: 'Lincoln' }\n * );\n *\n * source3.pipe(\n * single(x => x.name.startsWith('B'))\n * )\n * .subscribe(x => console.log(x));\n * // Error emitted: NotFoundError('No values match')\n * ```\n *\n * @see {@link first}\n * @see {@link find}\n * @see {@link findIndex}\n * @see {@link elementAt}\n *\n * @throws {NotFoundError} Delivers an NotFoundError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @throws {SequenceError} Delivers a SequenceError if more than one value is emitted that matches the\n * provided predicate. If no predicate is provided, will deliver a SequenceError if more\n * that one value comes from the source\n * @param {Function} predicate - A predicate function to evaluate items emitted by the source Observable.\n * @return A function that returns an Observable that emits the single item\n * emitted by the source Observable that matches the predicate.\n */\nexport function single(predicate?: (value: T, index: number, source: Observable) => boolean): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let singleValue: T;\n let seenValue = false;\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n seenValue = true;\n if (!predicate || predicate(value, index++, source)) {\n hasValue && subscriber.error(new SequenceError('Too many matching values'));\n hasValue = true;\n singleValue = value;\n }\n },\n () => {\n if (hasValue) {\n subscriber.next(singleValue);\n subscriber.complete();\n } else {\n subscriber.error(seenValue ? new NotFoundError('No matching values') : new EmptyError());\n }\n }\n )\n );\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Skip a specified number of values before the completion of an observable.\n *\n * ![](skipLast.png)\n *\n * Returns an observable that will emit values as soon as it can, given a number of\n * skipped values. For example, if you `skipLast(3)` on a source, when the source\n * emits its fourth value, the first value the source emitted will finally be emitted\n * from the returned observable, as it is no longer part of what needs to be skipped.\n *\n * All values emitted by the result of `skipLast(N)` will be delayed by `N` emissions,\n * as each value is held in a buffer until enough values have been emitted that that\n * the buffered value may finally be sent to the consumer.\n *\n * After subscribing, unsubscribing will not result in the emission of the buffered\n * skipped values.\n *\n * ## Example\n *\n * Skip the last 2 values of an observable with many values\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { skipLast } from 'rxjs/operators';\n *\n * const numbers = of(1, 2, 3, 4, 5);\n * const skipLastTwo = numbers.pipe(skipLast(2));\n * skipLastTwo.subscribe(x => console.log(x));\n *\n * // Results in:\n * // 1 2 3\n * // (4 and 5 are skipped)\n * ```\n *\n * @see {@link skip}\n * @see {@link skipUntil}\n * @see {@link skipWhile}\n * @see {@link take}\n *\n * @param skipCount Number of elements to skip from the end of the source Observable.\n * @return A function that returns an Observable that skips the last `count`\n * values emitted by the source Observable.\n */\nexport function skipLast(skipCount: number): MonoTypeOperatorFunction {\n return skipCount <= 0\n ? // For skipCounts less than or equal to zero, we are just mirroring the source.\n identity\n : operate((source, subscriber) => {\n // A ring buffer to hold the values while we wait to see\n // if we can emit it or it's part of the \"skipped\" last values.\n // Note that it is the _same size_ as the skip count.\n let ring: T[] = new Array(skipCount);\n // The number of values seen so far. This is used to get\n // the index of the current value when it arrives.\n let seen = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n // Get the index of the value we have right now\n // relative to all other values we've seen, then\n // increment `seen`. This ensures we've moved to\n // the next slot in our ring buffer.\n const valueIndex = seen++;\n if (valueIndex < skipCount) {\n // If we haven't seen enough values to fill our buffer yet,\n // Then we aren't to a number of seen values where we can\n // emit anything, so let's just start by filling the ring buffer.\n ring[valueIndex] = value;\n } else {\n // We are traversing over the ring array in such\n // a way that when we get to the end, we loop back\n // and go to the start.\n const index = valueIndex % skipCount;\n // Pull the oldest value out so we can emit it,\n // and stuff the new value in it's place.\n const oldValue = ring[index];\n ring[index] = value;\n // Emit the old value. It is important that this happens\n // after we swap the value in the buffer, if it happens\n // before we swap the value in the buffer, then a synchronous\n // source can get the buffer out of whack.\n subscriber.next(oldValue);\n }\n })\n );\n\n return () => {\n // Release our values in memory\n ring = null!;\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\n\n/**\n * Returns an Observable that skips items emitted by the source Observable until a second Observable emits an item.\n *\n * The `skipUntil` operator causes the observable stream to skip the emission of values ​​until the passed in observable emits the first value.\n * This can be particularly useful in combination with user interactions, responses of http requests or waiting for specific times to pass by.\n *\n * ![](skipUntil.png)\n *\n * Internally the `skipUntil` operator subscribes to the passed in observable (in the following called *notifier*) in order to recognize the emission\n * of its first value. When this happens, the operator unsubscribes from the *notifier* and starts emitting the values of the *source*\n * observable. It will never let the *source* observable emit any values if the *notifier* completes or throws an error without emitting\n * a value before.\n *\n * ## Example\n *\n * In the following example, all emitted values ​​of the interval observable are skipped until the user clicks anywhere within the page.\n *\n * ```ts\n * import { interval, fromEvent } from 'rxjs';\n * import { skipUntil } from 'rxjs/operators';\n *\n * const intervalObservable = interval(1000);\n * const click = fromEvent(document, 'click');\n *\n * const emitAfterClick = intervalObservable.pipe(\n * skipUntil(click)\n * );\n * // clicked at 4.6s. output: 5...6...7...8........ or\n * // clicked at 7.3s. output: 8...9...10..11.......\n * const subscribe = emitAfterClick.subscribe(value => console.log(value));\n * ```\n *\n * @param {Observable} notifier - The second Observable that has to emit an item before the source Observable's elements begin to\n * be mirrored by the resulting Observable.\n * @return A function that returns an Observable that skips items from the\n * source Observable until the second Observable emits an item, then emits the\n * remaining items.\n */\nexport function skipUntil(notifier: Observable): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let taking = false;\n\n const skipSubscriber = new OperatorSubscriber(\n subscriber,\n () => {\n skipSubscriber?.unsubscribe();\n taking = true;\n },\n noop\n );\n\n innerFrom(notifier).subscribe(skipSubscriber);\n\n source.subscribe(new OperatorSubscriber(subscriber, (value) => taking && subscriber.next(value)));\n });\n}\n","import { Falsy, MonoTypeOperatorFunction, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function skipWhile(predicate: BooleanConstructor): OperatorFunction extends never ? never : T>;\nexport function skipWhile(predicate: (value: T, index: number) => true): OperatorFunction;\nexport function skipWhile(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Returns an Observable that skips all items emitted by the source Observable as long as a specified condition holds\n * true, but emits all further source items as soon as the condition becomes false.\n *\n * ![](skipWhile.png)\n *\n * Skips all the notifications with a truthy predicate. It will not skip the notifications when the predicate is falsy.\n * It can also be skipped using index. Once the predicate is true, it will not be called again.\n *\n * ## Example\n * Using Value: Skip some super heroes\n * ```ts\n * import { from } from 'rxjs';\n * import { skipWhile } from 'rxjs/operators';\n *\n * const source = from(['Green Arrow', 'SuperMan', 'Flash', 'SuperGirl', 'Black Canary'])\n * // Skip the heroes until SuperGirl\n * const example = source.pipe(skipWhile((hero) => hero !== 'SuperGirl'));\n * // output: SuperGirl, Black Canary\n * example.subscribe((femaleHero) => console.log(femaleHero));\n * ```\n * Using Index: Skip value from the array until index 5\n * ```ts\n * import { from } from 'rxjs';\n * import { skipWhile } from 'rxjs/operators';\n *\n * const source = from([1, 2, 3, 4, 5, 6, 7, 9, 10]);\n * const example = source.pipe(skipWhile((_, i) => i !== 5));\n * // output: 6, 7, 9, 10\n * example.subscribe((val) => console.log(val));\n * ```\n *\n * @see {@link last}\n * @see {@link skip}\n * @see {@link skipUntil}\n * @see {@link skipLast}\n *\n * @param {Function} predicate - A function to test each item emitted from the source Observable.\n * @return A function that returns an Observable that begins emitting items\n * emitted by the source Observable when the specified predicate becomes false.\n */\nexport function skipWhile(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let taking = false;\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => (taking || (taking = !predicate(value, index++))) && subscriber.next(value))\n );\n });\n}\n","import { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { switchMap } from './switchMap';\nimport { identity } from '../util/identity';\n\n/**\n * Converts a higher-order Observable into a first-order Observable\n * producing values only from the most recent observable sequence\n *\n * Flattens an Observable-of-Observables.\n *\n * ![](switchAll.png)\n *\n * `switchAll` subscribes to a source that is an observable of observables, also known as a\n * \"higher-order observable\" (or `Observable>`). It subscribes to the most recently\n * provided \"inner observable\" emitted by the source, unsubscribing from any previously subscribed\n * to inner observable, such that only the most recent inner observable may be subscribed to at\n * any point in time. The resulting observable returned by `switchAll` will only complete if the\n * source observable completes, *and* any currently subscribed to inner observable also has completed,\n * if there are any.\n *\n * ## Examples\n * Spawn a new interval observable for each click event, but for every new\n * click, cancel the previous interval and subscribe to the new one.\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { switchAll, map, tap } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click').pipe(tap(() => console.log('click')));\n * const source = clicks.pipe(map((ev) => interval(1000)));\n *\n * source.pipe(\n * switchAll()\n * ).subscribe(x => console.log(x));\n *\n * // Output\n * // click\n * // 0\n * // 1\n * // 2\n * // 3\n * // ...\n * // click\n * // 0\n * // 1\n * // 2\n * // ...\n * // click\n * // ...\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link exhaustAll}\n * @see {@link switchMap}\n * @see {@link switchMapTo}\n * @see {@link mergeAll}\n *\n * @return A function that returns an Observable that converts a higher-order\n * Observable into a first-order Observable producing values only from the most\n * recent Observable sequence.\n */\n\nexport function switchAll>(): OperatorFunction> {\n return switchMap(identity);\n}\n","import { switchMap } from './switchMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function switchMapTo>(observable: O): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMapTo>(\n observable: O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMapTo>(\n observable: O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to the same Observable which is flattened multiple\n * times with {@link switchMap} in the output Observable.\n *\n * It's like {@link switchMap}, but maps each value\n * always to the same inner Observable.\n *\n * ![](switchMapTo.png)\n *\n * Maps each source value to the given Observable `innerObservable` regardless\n * of the source value, and then flattens those resulting Observables into one\n * single Observable, which is the output Observable. The output Observables\n * emits values only from the most recently emitted instance of\n * `innerObservable`.\n *\n * ## Example\n * Rerun an interval Observable on every click event\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { switchMapTo } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(switchMapTo(interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMapTo}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link mergeMapTo}\n *\n * @param {ObservableInput} innerObservable An Observable to replace each value from\n * the source Observable.\n * @return A function that returns an Observable that emits items from the\n * given `innerObservable` (and optionally transformed through the deprecated\n * `resultSelector`) every time a value is emitted on the source Observable,\n * and taking only the values from the most recently projected inner\n * Observable.\n */\nexport function switchMapTo>(\n innerObservable: O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return isFunction(resultSelector) ? switchMap(() => innerObservable, resultSelector) : switchMap(() => innerObservable);\n}\n","import { ObservableInput, ObservedValueOf, OperatorFunction } from '../types';\nimport { switchMap } from './switchMap';\nimport { operate } from '../util/lift';\n\n// TODO: Generate a marble diagram for these docs.\n\n/**\n * Applies an accumulator function over the source Observable where the\n * accumulator function itself returns an Observable, emitting values\n * only from the most recently returned Observable.\n *\n * It's like {@link mergeScan}, but only the most recent\n * Observable returned by the accumulator is merged into the outer Observable.\n *\n * @see {@link scan}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param accumulator\n * The accumulator function called on each source value.\n * @param seed The initial accumulation value.\n * @return A function that returns an observable of the accumulated values.\n */\nexport function switchScan>(\n accumulator: (acc: R, value: T, index: number) => O,\n seed: R\n): OperatorFunction> {\n return operate((source, subscriber) => {\n // The state we will keep up to date to pass into our\n // accumulator function at each new value from the source.\n let state = seed;\n\n // Use `switchMap` on our `source` to do the work of creating\n // this operator. Note the backwards order here of `switchMap()(source)`\n // to avoid needing to use `pipe` unnecessarily\n switchMap(\n // On each value from the source, call the accumulator with\n // our previous state, the value and the index.\n (value: T, index) => accumulator(state, value, index),\n // Using the deprecated result selector here as a dirty trick\n // to update our state with the flattened value.\n (_, innerValue) => ((state = innerValue), innerValue)\n )(source).subscribe(subscriber);\n\n return () => {\n // Release state on teardown\n state = null!;\n };\n });\n}\n","import { Subscription } from '../Subscription';\n\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\nexport interface ThrottleConfig {\n leading?: boolean;\n trailing?: boolean;\n}\n\nexport const defaultThrottleConfig: ThrottleConfig = {\n leading: true,\n trailing: false,\n};\n\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for a duration determined by another Observable, then repeats this\n * process.\n *\n * It's like {@link throttleTime}, but the silencing\n * duration is determined by a second Observable.\n *\n * ![](throttle.svg)\n *\n * `throttle` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled by calling the `durationSelector` function with the source value,\n * which returns the \"duration\" Observable. When the duration Observable emits a\n * value, the timer is disabled, and this process repeats for the\n * next source value.\n *\n * ## Example\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { throttle } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(throttle(ev => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounce}\n * @see {@link delayWhen}\n * @see {@link sample}\n * @see {@link throttleTime}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the silencing\n * duration for each source value, returned as an Observable or a Promise.\n * @param config a configuration object to define `leading` and `trailing` behavior. Defaults\n * to `{ leading: true, trailing: false }`.\n * @return A function that returns an Observable that performs the throttle\n * operation to limit the rate of emissions from the source.\n */\nexport function throttle(\n durationSelector: (value: T) => ObservableInput,\n config: ThrottleConfig = defaultThrottleConfig\n): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n const { leading, trailing } = config;\n let hasValue = false;\n let sendValue: T | null = null;\n let throttled: Subscription | null = null;\n let isComplete = false;\n\n const endThrottling = () => {\n throttled?.unsubscribe();\n throttled = null;\n if (trailing) {\n send();\n isComplete && subscriber.complete();\n }\n };\n\n const cleanupThrottling = () => {\n throttled = null;\n isComplete && subscriber.complete();\n };\n\n const startThrottle = (value: T) =>\n (throttled = innerFrom(durationSelector(value)).subscribe(new OperatorSubscriber(subscriber, endThrottling, cleanupThrottling)));\n\n const send = () => {\n if (hasValue) {\n // Ensure we clear out our value and hasValue flag\n // before we emit, otherwise reentrant code can cause\n // issues here.\n hasValue = false;\n const value = sendValue!;\n sendValue = null;\n // Emit the value.\n subscriber.next(value);\n !isComplete && startThrottle(value);\n }\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n // Regarding the presence of throttled.closed in the following\n // conditions, if a synchronous duration selector is specified - weird,\n // but legal - an already-closed subscription will be assigned to\n // throttled, so the subscription's closed property needs to be checked,\n // too.\n (value) => {\n hasValue = true;\n sendValue = value;\n !(throttled && !throttled.closed) && (leading ? send() : startThrottle(value));\n },\n () => {\n isComplete = true;\n !(trailing && hasValue && throttled && !throttled.closed) && subscriber.complete();\n }\n )\n );\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { defaultThrottleConfig, throttle } from './throttle';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { timer } from '../observable/timer';\n\n/**\n * Emits a value from the source Observable, then ignores subsequent source\n * values for `duration` milliseconds, then repeats this process.\n *\n * Lets a value pass, then ignores source values for the\n * next `duration` milliseconds.\n *\n * ![](throttleTime.png)\n *\n * `throttleTime` emits the source Observable values on the output Observable\n * when its internal timer is disabled, and ignores source values when the timer\n * is enabled. Initially, the timer is disabled. As soon as the first source\n * value arrives, it is forwarded to the output Observable, and then the timer\n * is enabled. After `duration` milliseconds (or the time unit determined\n * internally by the optional `scheduler`) has passed, the timer is disabled,\n * and this process repeats for the next source value. Optionally takes a\n * {@link SchedulerLike} for managing timers.\n *\n * ## Examples\n *\n * #### Limit click rate\n *\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { throttleTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(throttleTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * #### Double Click\n *\n * The following example only emits clicks which happen within a subsequent\n * delay of 400ms of the previous click. This for example can emulate a double\n * click. It makes use of the `trailing` parameter of the throttle configuration.\n *\n * ```ts\n * import { fromEvent, asyncScheduler } from 'rxjs';\n * import { throttleTime, withLatestFrom } from 'rxjs/operators';\n *\n * // defaultThottleConfig = { leading: true, trailing: false }\n * const throttleConfig = {\n * leading: false,\n * trailing: true\n * }\n *\n * const click = fromEvent(document, 'click');\n * const doubleClick = click.pipe(\n * throttleTime(400, asyncScheduler, throttleConfig)\n * );\n *\n * doubleClick.subscribe((throttleValue: Event) => {\n * console.log(`Double-clicked! Timestamp: ${throttleValue.timeStamp}`);\n * });\n * ```\n *\n * If you enable the `leading` parameter in this example, the output would be the primary click and\n * the double click, but restricts additional clicks within 400ms.\n *\n * @see {@link auditTime}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttle}\n *\n * @param duration Time to wait before emitting another value after\n * emitting the last value, measured in milliseconds or the time unit determined\n * internally by the optional `scheduler`.\n * @param scheduler The {@link SchedulerLike} to use for\n * managing the timers that handle the throttling. Defaults to {@link asyncScheduler}.\n * @param config a configuration object to define `leading` and\n * `trailing` behavior. Defaults to `{ leading: true, trailing: false }`.\n * @return A function that returns an Observable that performs the throttle\n * operation to limit the rate of emissions from the source.\n */\nexport function throttleTime(\n duration: number,\n scheduler: SchedulerLike = asyncScheduler,\n config = defaultThrottleConfig\n): MonoTypeOperatorFunction {\n const duration$ = timer(duration, scheduler);\n return throttle(() => duration$, config);\n}\n","import { Observable } from '../Observable';\nimport { async } from '../scheduler/async';\nimport { SchedulerLike, OperatorFunction } from '../types';\nimport { scan } from './scan';\nimport { defer } from '../observable/defer';\nimport { map } from './map';\n\n/**\n *\n * Emits an object containing the current value, and the time that has\n * passed between emitting the current value and the previous value, which is\n * calculated by using the provided `scheduler`'s `now()` method to retrieve\n * the current time at each emission, then calculating the difference. The `scheduler`\n * defaults to {@link asyncScheduler}, so by default, the `interval` will be in\n * milliseconds.\n *\n * Convert an Observable that emits items into one that\n * emits indications of the amount of time elapsed between those emissions.\n *\n * ![](timeInterval.png)\n *\n * ## Examples\n * Emit interval between current value with the last value\n *\n * ```ts\n * import { interval } from \"rxjs\";\n * import { timeInterval, timeout } from \"rxjs/operators\";\n *\n * const seconds = interval(1000);\n *\n * seconds.pipe(timeInterval())\n * .subscribe({\n * next: value => console.log(value),\n * error: err => console.log(err),\n * });\n *\n * seconds.pipe(timeout(900))\n * .subscribe({\n * next: value => console.log(value),\n * error: err => console.log(err),\n * });\n *\n * // NOTE: The values will never be this precise,\n * // intervals created with `interval` or `setInterval`\n * // are non-deterministic.\n *\n * // {value: 0, interval: 1000}\n * // {value: 1, interval: 1000}\n * // {value: 2, interval: 1000}\n * ```\n *\n * @param {SchedulerLike} [scheduler] Scheduler used to get the current time.\n * @return A function that returns an Observable that emits information about\n * value and interval.\n */\nexport function timeInterval(scheduler: SchedulerLike = async): OperatorFunction> {\n return (source: Observable) =>\n defer(() => {\n return source.pipe(\n // TODO(benlesh): correct these typings.\n scan(({ current }, value) => ({ value, current: scheduler.now(), last: current }), {\n current: scheduler.now(),\n value: undefined,\n last: undefined,\n } as any) as OperatorFunction,\n map>(({ current, last, value }) => new TimeInterval(value, current - last))\n );\n });\n}\n\n// TODO(benlesh): make this an interface, export the interface, but not the implemented class,\n// there's no reason users should be manually creating this type.\n\nexport class TimeInterval {\n /**\n * @deprecated Internal implementation detail, do not construct directly. Will be made an interface in v8.\n */\n constructor(public value: T, public interval: number) {}\n}\n","import { async } from '../scheduler/async';\nimport { isValidDate } from '../util/isDate';\nimport { ObservableInput, OperatorFunction, SchedulerLike } from '../types';\nimport { timeout } from './timeout';\n\n/**\n * If the time of the Date object passed arrives before the first value arrives from the source, it will unsubscribe\n * from the source and switch the subscription to another observable.\n *\n * Use to switch to a different observable if the first value doesn't arrive by a specific time\n *\n * Can be used to set a timeout only for the first value, however it's recommended to use the {@link timeout} operator with\n * the `first` configuration to get that effect.\n *\n * @param dueBy The exact time, as a `Date`, at which the timeout will be triggered if the first value does not arrive.\n * @param switchTo The observable to switch to when timeout occurs.\n * @param scheduler The scheduler to use with time-related operations within this operator. Defaults to {@link asyncScheduler}\n * @deprecated Replaced with {@link timeout}. Instead of `timeoutWith(someDate, a$, scheduler)`, use the configuration object `timeout({ first: someDate, with: () => a$, scheduler })`. Will be removed in v8.\n */\nexport function timeoutWith(dueBy: Date, switchTo: ObservableInput, scheduler?: SchedulerLike): OperatorFunction;\n\n/**\n * When the passed timespan ellapses before the source emits any given value, it will unsubscribe from the source,\n * and switch the subscription to another observable.\n *\n * Used to switch to a different observable if your source is being slow\n *\n * Useful in cases where:\n *\n * - You want to switch to a different source that may be faster\n * - You want to notify a user that the data stream is slow\n * - You want to emit a custom error rather than the {@link TimeoutError} emitted\n * by the default usage of {@link timeout}.\n *\n * ## Example\n *\n * Fallback to a faster observable\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { timeoutWith } from 'rxjs/operators';\n *\n * const slow$ = interval(1000);\n * const faster$ = interval(500);\n *\n * slow$.pipe(\n * timeoutWith(900, faster$)\n * )\n * .subscribe(console.log)\n * ```\n *\n * ### Example\n *\n * Emit your own custom timeout error\n *\n * ```ts\n * import { interval, throwError } from 'rxjs';\n * import { timeoutWith } from 'rxjs/operators';\n *\n * class CustomTimeoutError extends Error {\n * constructor() {\n * super('It was too slow');\n * this.name = 'CustomTimeoutError';\n * }\n * }\n *\n * const slow = interval(1000);\n *\n * slow$.pipe(\n * timeoutWith(900, throwError(new CustomTimeoutError()))\n * )\n * .subscribe({\n * error: console.error\n * })\n * ```\n * @param waitFor The time allowed between values from the source before timeout is triggered.\n * @param switchTo The observable to switch to when timeout occurs.\n * @param scheduler The scheduler to use with time-related operations within this operator. Defaults to {@link asyncScheduler}\n * @return A function that returns an Observable that mirrors behaviour of the\n * source Observable, unless timeout happens when it starts emitting values\n * from the Observable passed as a second parameter.\n * @deprecated Replaced with {@link timeout}. Instead of `timeoutWith(100, a$, scheduler)`, use the configuration object `timeout({ each: 100, with: () => a$, scheduler })`. Will be removed in v8.\n */\nexport function timeoutWith(waitFor: number, switchTo: ObservableInput, scheduler?: SchedulerLike): OperatorFunction;\n\nexport function timeoutWith(\n due: number | Date,\n withObservable: ObservableInput,\n scheduler?: SchedulerLike\n): OperatorFunction {\n let first: number | Date | undefined;\n let each: number | undefined;\n let _with: () => ObservableInput;\n scheduler = scheduler ?? async;\n\n if (isValidDate(due)) {\n first = due;\n } else if (typeof due === 'number') {\n each = due;\n }\n\n if (withObservable) {\n _with = () => withObservable;\n } else {\n throw new TypeError('No observable provided to switch to');\n }\n\n if (first == null && each == null) {\n // Ensure timeout was provided at runtime.\n throw new TypeError('No timeout provided.');\n }\n\n return timeout>({\n first,\n each,\n scheduler,\n with: _with,\n });\n}\n","import { OperatorFunction, TimestampProvider, Timestamp } from '../types';\nimport { dateTimestampProvider } from '../scheduler/dateTimestampProvider';\nimport { map } from './map';\n\n/**\n * Attaches a timestamp to each item emitted by an observable indicating when it was emitted\n *\n * The `timestamp` operator maps the *source* observable stream to an object of type\n * `{value: T, timestamp: R}`. The properties are generically typed. The `value` property contains the value\n * and type of the *source* observable. The `timestamp` is generated by the schedulers `now` function. By\n * default it uses the *async* scheduler which simply returns `Date.now()` (milliseconds since 1970/01/01\n * 00:00:00:000) and therefore is of type `number`.\n *\n * ![](timestamp.png)\n *\n * ## Example\n *\n * In this example there is a timestamp attached to the documents click event.\n *\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { timestamp } from 'rxjs/operators';\n *\n * const clickWithTimestamp = fromEvent(document, 'click').pipe(\n * timestamp()\n * );\n *\n * // Emits data of type {value: MouseEvent, timestamp: number}\n * clickWithTimestamp.subscribe(data => {\n * console.log(data);\n * });\n * ```\n *\n * @param timestampProvider An object with a `now()` method used to get the current timestamp.\n * @return A function that returns an Observable that attaches a timestamp to\n * each item emitted by the source Observable indicating when it was emitted.\n */\nexport function timestamp(timestampProvider: TimestampProvider = dateTimestampProvider): OperatorFunction> {\n return map((value: T) => ({ value, timestamp: timestampProvider.now()}));\n}\n","import { Observable } from '../Observable';\nimport { OperatorFunction } from '../types';\nimport { Subject } from '../Subject';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Branch out the source Observable values as a nested Observable whenever\n * `windowBoundaries` emits.\n *\n * It's like {@link buffer}, but emits a nested Observable\n * instead of an array.\n *\n * ![](window.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits connected, non-overlapping\n * windows. It emits the current window and opens a new one whenever the\n * Observable `windowBoundaries` emits an item. Because each window is an\n * Observable, the output is a higher-order Observable.\n *\n * ## Example\n * In every window of 1 second each, emit at most 2 click events\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { window, mergeAll, map, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const sec = interval(1000);\n * const result = clicks.pipe(\n * window(sec),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n * @see {@link windowCount}\n * @see {@link windowTime}\n * @see {@link windowToggle}\n * @see {@link windowWhen}\n * @see {@link buffer}\n *\n * @param {Observable} windowBoundaries An Observable that completes the\n * previous window and starts a new window.\n * @return A function that returns an Observable of windows, which are\n * Observables emitting values of the source Observable.\n */\nexport function window(windowBoundaries: Observable): OperatorFunction> {\n return operate((source, subscriber) => {\n let windowSubject: Subject = new Subject();\n\n subscriber.next(windowSubject.asObservable());\n\n const errorHandler = (err: any) => {\n windowSubject.error(err);\n subscriber.error(err);\n };\n\n // Subscribe to our source\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => windowSubject?.next(value),\n () => {\n windowSubject.complete();\n subscriber.complete();\n },\n errorHandler\n )\n );\n\n // Subscribe to the window boundaries.\n windowBoundaries.subscribe(\n new OperatorSubscriber(\n subscriber,\n () => {\n windowSubject.complete();\n subscriber.next((windowSubject = new Subject()));\n },\n noop,\n errorHandler\n )\n );\n\n return () => {\n // Unsubscribing the subject ensures that anyone who has captured\n // a reference to this window that tries to use it after it can\n // no longer get values from the source will get an ObjectUnsubscribedError.\n windowSubject?.unsubscribe();\n windowSubject = null!;\n };\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Branch out the source Observable values as a nested Observable with each\n * nested Observable emitting at most `windowSize` values.\n *\n * It's like {@link bufferCount}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowCount.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits windows every `startWindowEvery`\n * items, each containing no more than `windowSize` items. When the source\n * Observable completes or encounters an error, the output Observable emits\n * the current window and propagates the notification from the source\n * Observable. If `startWindowEvery` is not provided, then new windows are\n * started immediately at the start of the source and when each window completes\n * with size `windowSize`.\n *\n * ## Examples\n * Ignore every 3rd click event, starting from the first one\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowCount, map, mergeAll, skip } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowCount(3),\n * map(win => win.pipe(skip(1))), // skip first of every 3 clicks\n * mergeAll() // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Ignore every 3rd click event, starting from the third one\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowCount, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowCount(2, 3),\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowTime}\n * @see {@link windowToggle}\n * @see {@link windowWhen}\n * @see {@link bufferCount}\n *\n * @param {number} windowSize The maximum number of values emitted by each\n * window.\n * @param {number} [startWindowEvery] Interval at which to start a new window.\n * For example if `startWindowEvery` is `2`, then a new window will be started\n * on every other value from the source. A new window is started at the\n * beginning of the source by default.\n * @return A function that returns an Observable of windows, which in turn are\n * Observable of values.\n */\nexport function windowCount(windowSize: number, startWindowEvery: number = 0): OperatorFunction> {\n const startEvery = startWindowEvery > 0 ? startWindowEvery : windowSize;\n\n return operate((source, subscriber) => {\n let windows = [new Subject()];\n let starts: number[] = [];\n let count = 0;\n\n // Open the first window.\n subscriber.next(windows[0].asObservable());\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Emit the value through all current windows.\n // We don't need to create a new window yet, we\n // do that as soon as we close one.\n for (const window of windows) {\n window.next(value);\n }\n // Here we're using the size of the window array to figure\n // out if the oldest window has emitted enough values. We can do this\n // because the size of the window array is a function of the values\n // seen by the subscription. If it's time to close it, we complete\n // it and remove it.\n const c = count - windowSize + 1;\n if (c >= 0 && c % startEvery === 0) {\n windows.shift()!.complete();\n }\n\n // Look to see if the next count tells us it's time to open a new window.\n // TODO: We need to figure out if this really makes sense. We're technically\n // emitting windows *before* we have a value to emit them for. It's probably\n // more expected that we should be emitting the window when the start\n // count is reached -- not before.\n if (++count % startEvery === 0) {\n const window = new Subject();\n windows.push(window);\n subscriber.next(window.asObservable());\n }\n },\n () => {\n while (windows.length > 0) {\n windows.shift()!.complete();\n }\n subscriber.complete();\n },\n (err) => {\n while (windows.length > 0) {\n windows.shift()!.error(err);\n }\n subscriber.error(err);\n },\n () => {\n starts = null!;\n windows = null!;\n }\n )\n );\n });\n}\n","import { Subject } from '../Subject';\nimport { asyncScheduler } from '../scheduler/async';\nimport { Observable } from '../Observable';\nimport { Subscription } from '../Subscription';\nimport { Observer, OperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { arrRemove } from '../util/arrRemove';\nimport { popScheduler } from '../util/args';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport function windowTime(windowTimeSpan: number, scheduler?: SchedulerLike): OperatorFunction>;\nexport function windowTime(\n windowTimeSpan: number,\n windowCreationInterval: number,\n scheduler?: SchedulerLike\n): OperatorFunction>;\nexport function windowTime(\n windowTimeSpan: number,\n windowCreationInterval: number | null | void,\n maxWindowSize: number,\n scheduler?: SchedulerLike\n): OperatorFunction>;\n/**\n * Branch out the source Observable values as a nested Observable periodically\n * in time.\n *\n * It's like {@link bufferTime}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowTime.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable starts a new window periodically, as\n * determined by the `windowCreationInterval` argument. It emits each window\n * after a fixed timespan, specified by the `windowTimeSpan` argument. When the\n * source Observable completes or encounters an error, the output Observable\n * emits the current window and propagates the notification from the source\n * Observable. If `windowCreationInterval` is not provided, the output\n * Observable starts a new window when the previous window of duration\n * `windowTimeSpan` completes. If `maxWindowCount` is provided, each window\n * will emit at most fixed number of values. Window will complete immediately\n * after emitting last value and next one still will open as specified by\n * `windowTimeSpan` and `windowCreationInterval` arguments.\n *\n * ## Examples\n * In every window of 1 second each, emit at most 2 click events\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowTime, map, mergeAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowTime(1000),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Every 5 seconds start a window 1 second long, and emit at most 2 click events per window\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowTime, map, mergeAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowTime(1000, 5000),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Same as example above but with maxWindowCount instead of take\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { windowTime, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowTime(1000, 5000, 2), // each window has still at most 2 emissions\n * mergeAll(), // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowCount}\n * @see {@link windowToggle}\n * @see {@link windowWhen}\n * @see {@link bufferTime}\n *\n * @param windowTimeSpan The amount of time, in milliseconds, to fill each window.\n * @param windowCreationInterval The interval at which to start new\n * windows.\n * @param maxWindowSize Max number of\n * values each window can emit before completion.\n * @param scheduler The scheduler on which to schedule the\n * intervals that determine window boundaries.\n * @return A function that returns an Observable of windows, which in turn are\n * Observables.\n */\nexport function windowTime(windowTimeSpan: number, ...otherArgs: any[]): OperatorFunction> {\n const scheduler = popScheduler(otherArgs) ?? asyncScheduler;\n const windowCreationInterval = (otherArgs[0] as number) ?? null;\n const maxWindowSize = (otherArgs[1] as number) || Infinity;\n\n return operate((source, subscriber) => {\n // The active windows, their related subscriptions, and removal functions.\n let windowRecords: WindowRecord[] | null = [];\n // If true, it means that every time we close a window, we want to start a new window.\n // This is only really used for when *just* the time span is passed.\n let restartOnClose = false;\n\n const closeWindow = (record: { window: Subject; subs: Subscription }) => {\n const { window, subs } = record;\n window.complete();\n subs.unsubscribe();\n arrRemove(windowRecords, record);\n restartOnClose && startWindow();\n };\n\n /**\n * Called every time we start a new window. This also does\n * the work of scheduling the job to close the window.\n */\n const startWindow = () => {\n if (windowRecords) {\n const subs = new Subscription();\n subscriber.add(subs);\n const window = new Subject();\n const record = {\n window,\n subs,\n seen: 0,\n };\n windowRecords.push(record);\n subscriber.next(window.asObservable());\n executeSchedule(subs, scheduler, () => closeWindow(record), windowTimeSpan);\n }\n };\n\n if (windowCreationInterval !== null && windowCreationInterval >= 0) {\n // The user passed both a windowTimeSpan (required), and a creation interval\n // That means we need to start new window on the interval, and those windows need\n // to wait the required time span before completing.\n executeSchedule(subscriber, scheduler, startWindow, windowCreationInterval, true);\n } else {\n restartOnClose = true;\n }\n\n startWindow();\n\n /**\n * We need to loop over a copy of the window records several times in this operator.\n * This is to save bytes over the wire more than anything.\n * The reason we copy the array is that reentrant code could mutate the array while\n * we are iterating over it.\n */\n const loop = (cb: (record: WindowRecord) => void) => windowRecords!.slice().forEach(cb);\n\n /**\n * Used to notify all of the windows and the subscriber in the same way\n * in the error and complete handlers.\n */\n const terminate = (cb: (consumer: Observer) => void) => {\n loop(({ window }) => cb(window));\n cb(subscriber);\n subscriber.unsubscribe();\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Notify all windows of the value.\n loop((record) => {\n record.window.next(value);\n // If the window is over the max size, we need to close it.\n maxWindowSize <= ++record.seen && closeWindow(record);\n });\n },\n // Complete the windows and the downstream subscriber and clean up.\n () => terminate((consumer) => consumer.complete()),\n // Notify the windows and the downstream subscriber of the error and clean up.\n (err) => terminate((consumer) => consumer.error(err))\n )\n );\n\n // Additional teardown. This will be called when the\n // destination tears down. Other teardowns are registered implicitly\n // above via subscription.\n return () => {\n // Ensure that the buffer is released.\n windowRecords = null!;\n };\n });\n}\n\ninterface WindowRecord {\n seen: number;\n window: Subject;\n subs: Subscription;\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { Subscription } from '../Subscription';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\nimport { arrRemove } from '../util/arrRemove';\n\n/**\n * Branch out the source Observable values as a nested Observable starting from\n * an emission from `openings` and ending when the output of `closingSelector`\n * emits.\n *\n * It's like {@link bufferToggle}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowToggle.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits windows that contain those items\n * emitted by the source Observable between the time when the `openings`\n * Observable emits an item and when the Observable returned by\n * `closingSelector` emits an item.\n *\n * ## Example\n * Every other second, emit the click events from the next 500ms\n * ```ts\n * import { fromEvent, interval, EMPTY } from 'rxjs';\n * import { windowToggle, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const openings = interval(1000);\n * const result = clicks.pipe(\n * windowToggle(openings, i => i % 2 ? interval(500) : EMPTY),\n * mergeAll()\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowCount}\n * @see {@link windowTime}\n * @see {@link windowWhen}\n * @see {@link bufferToggle}\n *\n * @param {Observable} openings An observable of notifications to start new\n * windows.\n * @param {function(value: O): Observable} closingSelector A function that takes\n * the value emitted by the `openings` observable and returns an Observable,\n * which, when it emits a next notification, signals that the\n * associated window should complete.\n * @return A function that returns an Observable of windows, which in turn are\n * Observables.\n */\nexport function windowToggle(\n openings: ObservableInput,\n closingSelector: (openValue: O) => ObservableInput\n): OperatorFunction> {\n return operate((source, subscriber) => {\n const windows: Subject[] = [];\n\n const handleError = (err: any) => {\n while (0 < windows.length) {\n windows.shift()!.error(err);\n }\n subscriber.error(err);\n };\n\n innerFrom(openings).subscribe(\n new OperatorSubscriber(\n subscriber,\n (openValue) => {\n const window = new Subject();\n windows.push(window);\n const closingSubscription = new Subscription();\n const closeWindow = () => {\n arrRemove(windows, window);\n window.complete();\n closingSubscription.unsubscribe();\n };\n\n let closingNotifier: Observable;\n try {\n closingNotifier = innerFrom(closingSelector(openValue));\n } catch (err) {\n handleError(err);\n return;\n }\n\n subscriber.next(window.asObservable());\n\n closingSubscription.add(closingNotifier.subscribe(new OperatorSubscriber(subscriber, closeWindow, noop, handleError)));\n },\n noop\n )\n );\n\n // Subcribe to the source to get things started.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // Copy the windows array before we emit to\n // make sure we don't have issues with reentrant code.\n const windowsCopy = windows.slice();\n for (const window of windowsCopy) {\n window.next(value);\n }\n },\n () => {\n // Complete all of our windows before we complete.\n while (0 < windows.length) {\n windows.shift()!.complete();\n }\n subscriber.complete();\n },\n handleError,\n () => {\n // Add this teardown so that all window subjects are\n // disposed of. This way, if a user tries to subscribe\n // to a window *after* the outer subscription has been unsubscribed,\n // they will get an error, instead of waiting forever to\n // see if a value arrives.\n while (0 < windows.length) {\n windows.shift()!.unsubscribe();\n }\n }\n )\n );\n });\n}\n","import { Subscriber } from '../Subscriber';\nimport { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { ObservableInput, OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\n\n/**\n * Branch out the source Observable values as a nested Observable using a\n * factory function of closing Observables to determine when to start a new\n * window.\n *\n * It's like {@link bufferWhen}, but emits a nested\n * Observable instead of an array.\n *\n * ![](windowWhen.png)\n *\n * Returns an Observable that emits windows of items it collects from the source\n * Observable. The output Observable emits connected, non-overlapping windows.\n * It emits the current window and opens a new one whenever the Observable\n * produced by the specified `closingSelector` function emits an item. The first\n * window is opened immediately when subscribing to the output Observable.\n *\n * ## Example\n * Emit only the first two clicks events in every window of [1-5] random seconds\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { windowWhen, map, mergeAll, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * windowWhen(() => interval(1000 + Math.random() * 4000)),\n * map(win => win.pipe(take(2))), // each window has at most 2 emissions\n * mergeAll() // flatten the Observable-of-Observables\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link window}\n * @see {@link windowCount}\n * @see {@link windowTime}\n * @see {@link windowToggle}\n * @see {@link bufferWhen}\n *\n * @param {function(): Observable} closingSelector A function that takes no\n * arguments and returns an Observable that signals (on either `next` or\n * `complete`) when to close the previous window and start a new one.\n * @return A function that returns an Observable of windows, which in turn are\n * Observables.\n */\nexport function windowWhen(closingSelector: () => ObservableInput): OperatorFunction> {\n return operate((source, subscriber) => {\n let window: Subject | null;\n let closingSubscriber: Subscriber | undefined;\n\n /**\n * When we get an error, we have to notify both the\n * destiation subscriber and the window.\n */\n const handleError = (err: any) => {\n window!.error(err);\n subscriber.error(err);\n };\n\n /**\n * Called every time we need to open a window.\n * Recursive, as it will start the closing notifier, which\n * inevitably *should* call openWindow -- but may not if\n * it is a \"never\" observable.\n */\n const openWindow = () => {\n // We need to clean up our closing subscription,\n // we only cared about the first next or complete notification.\n closingSubscriber?.unsubscribe();\n\n // Close our window before starting a new one.\n window?.complete();\n\n // Start the new window.\n window = new Subject();\n subscriber.next(window.asObservable());\n\n // Get our closing notifier.\n let closingNotifier: Observable;\n try {\n closingNotifier = innerFrom(closingSelector());\n } catch (err) {\n handleError(err);\n return;\n }\n\n // Subscribe to the closing notifier, be sure\n // to capture the subscriber (aka Subscription)\n // so we can clean it up when we close the window\n // and open a new one.\n closingNotifier.subscribe((closingSubscriber = new OperatorSubscriber(subscriber, openWindow, openWindow, handleError)));\n };\n\n // Start the first window.\n openWindow();\n\n // Subscribe to the source\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => window!.next(value),\n () => {\n // The source completed, close the window and complete.\n window!.complete();\n subscriber.complete();\n },\n handleError,\n () => {\n // Be sure to clean up our closing subscription\n // when this tears down.\n closingSubscriber?.unsubscribe();\n window = null!;\n }\n )\n );\n });\n}\n","import { OperatorFunction, ObservableInput } from '../types';\nimport { zip } from '../observable/zip';\nimport { joinAllInternals } from './joinAllInternals';\n\n/**\n * Collects all observable inner sources from the source, once the source completes,\n * it will subscribe to all inner sources, combining their values by index and emitting\n * them.\n *\n * @see {@link zipWith}\n * @see {@link zip}\n */\nexport function zipAll(): OperatorFunction, T[]>;\nexport function zipAll(): OperatorFunction;\nexport function zipAll(project: (...values: T[]) => R): OperatorFunction, R>;\nexport function zipAll(project: (...values: Array) => R): OperatorFunction;\n\nexport function zipAll(project?: (...values: T[]) => R) {\n return joinAllInternals(zip, project);\n}\n","import { ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { zip } from './zip';\n\n/**\n * Subscribes to the source, and the observable inputs provided as arguments, and combines their values, by index, into arrays.\n *\n * What is meant by \"combine by index\": The first value from each will be made into a single array, then emitted,\n * then the second value from each will be combined into a single array and emitted, then the third value\n * from each will be combined into a single array and emitted, and so on.\n *\n * This will continue until it is no longer able to combine values of the same index into an array.\n *\n * After the last value from any one completed source is emitted in an array, the resulting observable will complete,\n * as there is no way to continue \"zipping\" values together by index.\n *\n * Use-cases for this operator are limited. There are memory concerns if one of the streams is emitting\n * values at a much faster rate than the others. Usage should likely be limited to streams that emit\n * at a similar pace, or finite streams of known length.\n *\n * In many cases, authors want `combineLatestWith` and not `zipWith`.\n *\n * @param otherInputs other observable inputs to collate values from.\n * @return A function that returns an Observable that emits items by index\n * combined from the source Observable and provided Observables, in form of an\n * array.\n */\nexport function zipWith(...otherInputs: [...ObservableInputTuple]): OperatorFunction> {\n return zip(...otherInputs);\n}\n","import { zip as zipStatic } from '../observable/zip';\nimport { ObservableInput, ObservableInputTuple, OperatorFunction, Cons } from '../types';\nimport { operate } from '../util/lift';\n\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(otherInputs: [...ObservableInputTuple]): OperatorFunction>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(\n otherInputsAndProject: [...ObservableInputTuple],\n project: (...values: Cons) => R\n): OperatorFunction;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(...otherInputs: [...ObservableInputTuple]): OperatorFunction>;\n/** @deprecated Replaced with {@link zipWith}. Will be removed in v8. */\nexport function zip(\n ...otherInputsAndProject: [...ObservableInputTuple, (...values: Cons) => R]\n): OperatorFunction;\n\n/**\n * @deprecated Replaced with {@link zipWith}. Will be removed in v8.\n */\nexport function zip(...sources: Array | ((...values: Array) => R)>): OperatorFunction {\n return operate((source, subscriber) => {\n zipStatic(source as ObservableInput, ...(sources as Array>)).subscribe(subscriber);\n });\n}\n","import { Subject } from './Subject';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\n\n/**\n * A variant of Subject that requires an initial value and emits its current\n * value whenever it is subscribed to.\n *\n * @class BehaviorSubject\n */\nexport class BehaviorSubject extends Subject {\n constructor(private _value: T) {\n super();\n }\n\n get value(): T {\n return this.getValue();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n const subscription = super._subscribe(subscriber);\n !subscription.closed && subscriber.next(this._value);\n return subscription;\n }\n\n getValue(): T {\n const { hasError, thrownError, _value } = this;\n if (hasError) {\n throw thrownError;\n }\n this._throwIfClosed();\n return _value;\n }\n\n next(value: T): void {\n super.next((this._value = value));\n }\n}\n","import { PartialObserver, ObservableNotification, CompleteNotification, NextNotification, ErrorNotification } from './types';\nimport { Observable } from './Observable';\nimport { EMPTY } from './observable/empty';\nimport { of } from './observable/of';\nimport { throwError } from './observable/throwError';\nimport { isFunction } from './util/isFunction';\n\n// TODO: When this enum is removed, replace it with a type alias. See #4556.\n/**\n * @deprecated Use a string literal instead. `NotificationKind` will be replaced with a type alias in v8.\n * It will not be replaced with a const enum as those are not compatible with isolated modules.\n */\nexport enum NotificationKind {\n NEXT = 'N',\n ERROR = 'E',\n COMPLETE = 'C',\n}\n\n/**\n * Represents a push-based event or value that an {@link Observable} can emit.\n * This class is particularly useful for operators that manage notifications,\n * like {@link materialize}, {@link dematerialize}, {@link observeOn}, and\n * others. Besides wrapping the actual delivered value, it also annotates it\n * with metadata of, for instance, what type of push message it is (`next`,\n * `error`, or `complete`).\n *\n * @see {@link materialize}\n * @see {@link dematerialize}\n * @see {@link observeOn}\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\nexport class Notification {\n /**\n * A value signifying that the notification will \"next\" if observed. In truth,\n * This is really synonymous with just checking `kind === \"N\"`.\n * @deprecated Will be removed in v8. Instead, just check to see if the value of `kind` is `\"N\"`.\n */\n readonly hasValue: boolean;\n\n /**\n * Creates a \"Next\" notification object.\n * @param kind Always `'N'`\n * @param value The value to notify with if observed.\n * @deprecated Internal implementation detail. Use {@link Notification#createNext createNext} instead.\n */\n constructor(kind: 'N', value?: T);\n /**\n * Creates an \"Error\" notification object.\n * @param kind Always `'E'`\n * @param value Always `undefined`\n * @param error The error to notify with if observed.\n * @deprecated Internal implementation detail. Use {@link Notification#createError createError} instead.\n */\n constructor(kind: 'E', value: undefined, error: any);\n /**\n * Creates a \"completion\" notification object.\n * @param kind Always `'C'`\n * @deprecated Internal implementation detail. Use {@link Notification#createComplete createComplete} instead.\n */\n constructor(kind: 'C');\n constructor(public readonly kind: 'N' | 'E' | 'C', public readonly value?: T, public readonly error?: any) {\n this.hasValue = kind === 'N';\n }\n\n /**\n * Executes the appropriate handler on a passed `observer` given the `kind` of notification.\n * If the handler is missing it will do nothing. Even if the notification is an error, if\n * there is no error handler on the observer, an error will not be thrown, it will noop.\n * @param observer The observer to notify.\n */\n observe(observer: PartialObserver): void {\n return observeNotification(this as ObservableNotification, observer);\n }\n\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @param complete A complete handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n do(next: (value: T) => void, error: (err: any) => void, complete: () => void): void;\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n do(next: (value: T) => void, error: (err: any) => void): void;\n /**\n * Executes the next handler if the Notification is of `kind` `\"N\"`. Otherwise\n * this will not error, and it will be a noop.\n * @param next The next handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n do(next: (value: T) => void): void;\n do(nextHandler: (value: T) => void, errorHandler?: (err: any) => void, completeHandler?: () => void): void {\n const { kind, value, error } = this;\n return kind === 'N' ? nextHandler?.(value!) : kind === 'E' ? errorHandler?.(error) : completeHandler?.();\n }\n\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @param complete A complete handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(next: (value: T) => void, error: (err: any) => void, complete: () => void): void;\n /**\n * Executes a notification on the appropriate handler from a list provided.\n * If a handler is missing for the kind of notification, nothing is called\n * and no error is thrown, it will be a noop.\n * @param next A next handler\n * @param error An error handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(next: (value: T) => void, error: (err: any) => void): void;\n /**\n * Executes the next handler if the Notification is of `kind` `\"N\"`. Otherwise\n * this will not error, and it will be a noop.\n * @param next The next handler\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(next: (value: T) => void): void;\n\n /**\n * Executes the appropriate handler on a passed `observer` given the `kind` of notification.\n * If the handler is missing it will do nothing. Even if the notification is an error, if\n * there is no error handler on the observer, an error will not be thrown, it will noop.\n * @param observer The observer to notify.\n * @deprecated Replaced with {@link Notification#observe observe}. Will be removed in v8.\n */\n accept(observer: PartialObserver): void;\n accept(nextOrObserver: PartialObserver | ((value: T) => void), error?: (err: any) => void, complete?: () => void) {\n return isFunction((nextOrObserver as any)?.next)\n ? this.observe(nextOrObserver as PartialObserver)\n : this.do(nextOrObserver as (value: T) => void, error as any, complete as any);\n }\n\n /**\n * Returns a simple Observable that just delivers the notification represented\n * by this Notification instance.\n *\n * @deprecated Will be removed in v8. To convert a `Notification` to an {@link Observable},\n * use {@link of} and {@link dematerialize}: `of(notification).pipe(dematerialize())`.\n */\n toObservable(): Observable {\n const { kind, value, error } = this;\n // Select the observable to return by `kind`\n const result =\n kind === 'N'\n ? // Next kind. Return an observable of that value.\n of(value!)\n : //\n kind === 'E'\n ? // Error kind. Return an observable that emits the error.\n throwError(() => error)\n : //\n kind === 'C'\n ? // Completion kind. Kind is \"C\", return an observable that just completes.\n EMPTY\n : // Unknown kind, return falsy, so we error below.\n 0;\n if (!result) {\n // TODO: consider removing this check. The only way to cause this would be to\n // use the Notification constructor directly in a way that is not type-safe.\n // and direct use of the Notification constructor is deprecated.\n throw new TypeError(`Unexpected notification kind ${kind}`);\n }\n return result;\n }\n\n private static completeNotification = new Notification('C') as Notification & CompleteNotification;\n /**\n * A shortcut to create a Notification instance of the type `next` from a\n * given value.\n * @param {T} value The `next` value.\n * @return {Notification} The \"next\" Notification representing the\n * argument.\n * @nocollapse\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\n static createNext(value: T) {\n return new Notification('N', value) as Notification & NextNotification;\n }\n\n /**\n * A shortcut to create a Notification instance of the type `error` from a\n * given error.\n * @param {any} [err] The `error` error.\n * @return {Notification} The \"error\" Notification representing the\n * argument.\n * @nocollapse\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\n static createError(err?: any) {\n return new Notification('E', undefined, err) as Notification & ErrorNotification;\n }\n\n /**\n * A shortcut to create a Notification instance of the type `complete`.\n * @return {Notification} The valueless \"complete\" Notification.\n * @nocollapse\n * @deprecated It is NOT recommended to create instances of `Notification` directly.\n * Rather, try to create POJOs matching the signature outlined in {@link ObservableNotification}.\n * For example: `{ kind: 'N', value: 1 }`, `{ kind: 'E', error: new Error('bad') }`, or `{ kind: 'C' }`.\n * Will be removed in v8.\n */\n static createComplete(): Notification & CompleteNotification {\n return Notification.completeNotification;\n }\n}\n\n/**\n * Executes the appropriate handler on a passed `observer` given the `kind` of notification.\n * If the handler is missing it will do nothing. Even if the notification is an error, if\n * there is no error handler on the observer, an error will not be thrown, it will noop.\n * @param notification The notification object to observe.\n * @param observer The observer to notify.\n */\nexport function observeNotification(notification: ObservableNotification, observer: PartialObserver) {\n const { kind, value, error } = notification as any;\n if (typeof kind !== 'string') {\n throw new TypeError('Invalid notification, missing \"kind\"');\n }\n kind === 'N' ? observer.next?.(value!) : kind === 'E' ? observer.error?.(error) : observer.complete?.();\n}\n","/**\n * @prettier\n */\nimport { Operator } from './Operator';\nimport { SafeSubscriber, Subscriber } from './Subscriber';\nimport { isSubscription, Subscription } from './Subscription';\nimport { TeardownLogic, OperatorFunction, Subscribable, Observer } from './types';\nimport { observable as Symbol_observable } from './symbol/observable';\nimport { pipeFromArray } from './util/pipe';\nimport { config } from './config';\nimport { isFunction } from './util/isFunction';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A representation of any set of values over any amount of time. This is the most basic building block\n * of RxJS.\n *\n * @class Observable\n */\nexport class Observable implements Subscribable {\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n source: Observable | undefined;\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n */\n operator: Operator | undefined;\n\n /**\n * @constructor\n * @param {Function} subscribe the function that is called when the Observable is\n * initially subscribed to. This function is given a Subscriber, to which new values\n * can be `next`ed, or an `error` method can be called to raise an error, or\n * `complete` can be called to notify of a successful completion.\n */\n constructor(subscribe?: (this: Observable, subscriber: Subscriber) => TeardownLogic) {\n if (subscribe) {\n this._subscribe = subscribe;\n }\n }\n\n // HACK: Since TypeScript inherits static properties too, we have to\n // fight against TypeScript here so Subject can have a different static create signature\n /**\n * Creates a new Observable by calling the Observable constructor\n * @owner Observable\n * @method create\n * @param {Function} subscribe? the subscriber function to be passed to the Observable constructor\n * @return {Observable} a new observable\n * @nocollapse\n * @deprecated Use `new Observable()` instead. Will be removed in v8.\n */\n static create: (...args: any[]) => any = (subscribe?: (subscriber: Subscriber) => TeardownLogic) => {\n return new Observable(subscribe);\n };\n\n /**\n * Creates a new Observable, with this Observable instance as the source, and the passed\n * operator defined as the new observable's operator.\n * @method lift\n * @param operator the operator defining the operation to take on the observable\n * @return a new observable with the Operator applied\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * If you have implemented an operator using `lift`, it is recommended that you create an\n * operator by simply returning `new Observable()` directly. See \"Creating new operators from\n * scratch\" section here: https://rxjs.dev/guide/operators\n */\n lift(operator?: Operator): Observable {\n const observable = new Observable();\n observable.source = this;\n observable.operator = operator;\n return observable;\n }\n\n subscribe(observer?: Partial>): Subscription;\n subscribe(next: (value: T) => void): Subscription;\n /** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\n subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription;\n /**\n * Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.\n *\n * Use it when you have all these Observables, but still nothing is happening.\n *\n * `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It\n * might be for example a function that you passed to Observable's constructor, but most of the time it is\n * a library implementation, which defines what will be emitted by an Observable, and when it be will emitted. This means\n * that calling `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often\n * the thought.\n *\n * Apart from starting the execution of an Observable, this method allows you to listen for values\n * that an Observable emits, as well as for when it completes or errors. You can achieve this in two\n * of the following ways.\n *\n * The first way is creating an object that implements {@link Observer} interface. It should have methods\n * defined by that interface, but note that it should be just a regular JavaScript object, which you can create\n * yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular, do\n * not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also\n * that your object does not have to implement all methods. If you find yourself creating a method that doesn't\n * do anything, you can simply omit it. Note however, if the `error` method is not provided and an error happens,\n * it will be thrown asynchronously. Errors thrown asynchronously cannot be caught using `try`/`catch`. Instead,\n * use the {@link onUnhandledError} configuration option or use a runtime handler (like `window.onerror` or\n * `process.on('error)`) to be notified of unhandled errors. Because of this, it's recommended that you provide\n * an `error` method to avoid missing thrown errors.\n *\n * The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.\n * This means you can provide three functions as arguments to `subscribe`, where the first function is equivalent\n * of a `next` method, the second of an `error` method and the third of a `complete` method. Just as in case of an Observer,\n * if you do not need to listen for something, you can omit a function by passing `undefined` or `null`,\n * since `subscribe` recognizes these functions by where they were placed in function call. When it comes\n * to the `error` function, as with an Observer, if not provided, errors emitted by an Observable will be thrown asynchronously.\n *\n * You can, however, subscribe with no parameters at all. This may be the case where you're not interested in terminal events\n * and you also handled emissions internally by using operators (e.g. using `tap`).\n *\n * Whichever style of calling `subscribe` you use, in both cases it returns a Subscription object.\n * This object allows you to call `unsubscribe` on it, which in turn will stop the work that an Observable does and will clean\n * up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback\n * provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.\n *\n * Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.\n * It is an Observable itself that decides when these functions will be called. For example {@link of}\n * by default emits all its values synchronously. Always check documentation for how given Observable\n * will behave when subscribed and if its default behavior can be modified with a `scheduler`.\n *\n * ## Example\n * ### Subscribe with an Observer\n * ```ts\n * import { of } from 'rxjs';\n *\n * const sumObserver = {\n * sum: 0,\n * next(value) {\n * console.log('Adding: ' + value);\n * this.sum = this.sum + value;\n * },\n * error() {\n * // We actually could just remove this method,\n * // since we do not really care about errors right now.\n * },\n * complete() {\n * console.log('Sum equals: ' + this.sum);\n * }\n * };\n *\n * of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.\n * .subscribe(sumObserver);\n *\n * // Logs:\n * // \"Adding: 1\"\n * // \"Adding: 2\"\n * // \"Adding: 3\"\n * // \"Sum equals: 6\"\n * ```\n *\n * ### Subscribe with functions\n * ```ts\n * import { of } from 'rxjs'\n *\n * let sum = 0;\n *\n * of(1, 2, 3).subscribe(\n * value => {\n * console.log('Adding: ' + value);\n * sum = sum + value;\n * },\n * undefined,\n * () => console.log('Sum equals: ' + sum)\n * );\n *\n * // Logs:\n * // \"Adding: 1\"\n * // \"Adding: 2\"\n * // \"Adding: 3\"\n * // \"Sum equals: 6\"\n * ```\n *\n * ### Cancel a subscription\n * ```ts\n * import { interval } from 'rxjs';\n *\n * const subscription = interval(1000).subscribe({\n * next(num) {\n * console.log(num)\n * },\n * complete() {\n * // Will not be called, even when cancelling subscription.\n * console.log('completed!');\n * }\n * });\n *\n * setTimeout(() => {\n * subscription.unsubscribe();\n * console.log('unsubscribed!');\n * }, 2500);\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // \"unsubscribed!\" after 2.5s\n * ```\n *\n * @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,\n * or the first of three possible handlers, which is the handler for each value emitted from the subscribed\n * Observable.\n * @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,\n * the error will be thrown asynchronously as unhandled.\n * @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.\n * @return {Subscription} a subscription reference to the registered handlers\n * @method subscribe\n */\n subscribe(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n ): Subscription {\n const subscriber = isSubscriber(observerOrNext) ? observerOrNext : new SafeSubscriber(observerOrNext, error, complete);\n\n errorContext(() => {\n const { operator, source } = this;\n subscriber.add(\n operator\n ? // We're dealing with a subscription in the\n // operator chain to one of our lifted operators.\n operator.call(subscriber, source)\n : source\n ? // If `source` has a value, but `operator` does not, something that\n // had intimate knowledge of our API, like our `Subject`, must have\n // set it. We're going to just call `_subscribe` directly.\n this._subscribe(subscriber)\n : // In all other cases, we're likely wrapping a user-provided initializer\n // function, so we need to catch errors and handle them appropriately.\n this._trySubscribe(subscriber)\n );\n });\n\n return subscriber;\n }\n\n /** @internal */\n protected _trySubscribe(sink: Subscriber): TeardownLogic {\n try {\n return this._subscribe(sink);\n } catch (err) {\n // We don't need to return anything in this case,\n // because it's just going to try to `add()` to a subscription\n // above.\n sink.error(err);\n }\n }\n\n /**\n * Used as a NON-CANCELLABLE means of subscribing to an observable, for use with\n * APIs that expect promises, like `async/await`. You cannot unsubscribe from this.\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * ### Example:\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const source$ = interval(1000).pipe(take(4));\n *\n * async function getTotal() {\n * let total = 0;\n *\n * await source$.forEach(value => {\n * total += value;\n * console.log('observable -> ', value);\n * });\n *\n * return total;\n * }\n *\n * getTotal().then(\n * total => console.log('Total:', total)\n * )\n *\n * // Expected:\n * // \"observable -> 0\"\n * // \"observable -> 1\"\n * // \"observable -> 2\"\n * // \"observable -> 3\"\n * // \"Total: 6\"\n * ```\n * @param next a handler for each value emitted by the observable\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n */\n forEach(next: (value: T) => void): Promise;\n\n /**\n * @param next a handler for each value emitted by the observable\n * @param promiseCtor a constructor function used to instantiate the Promise\n * @return a promise that either resolves on observable completion or\n * rejects with the handled error\n * @deprecated Passing a Promise constructor will no longer be available\n * in upcoming versions of RxJS. This is because it adds weight to the library, for very\n * little benefit. If you need this functionality, it is recommended that you either\n * polyfill Promise, or you create an adapter to convert the returned native promise\n * to whatever promise implementation you wanted. Will be removed in v8.\n */\n forEach(next: (value: T) => void, promiseCtor: PromiseConstructorLike): Promise;\n\n forEach(next: (value: T) => void, promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n try {\n next(value);\n } catch (err) {\n reject(err);\n subscriber.unsubscribe();\n }\n },\n error: reject,\n complete: resolve,\n });\n this.subscribe(subscriber);\n }) as Promise;\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): TeardownLogic {\n return this.source?.subscribe(subscriber);\n }\n\n /**\n * An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable\n * @method Symbol.observable\n * @return {Observable} this instance of the observable\n */\n [Symbol_observable]() {\n return this;\n }\n\n /* tslint:disable:max-line-length */\n pipe(): Observable;\n pipe(op1: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction): Observable;\n pipe(op1: OperatorFunction, op2: OperatorFunction, op3: OperatorFunction): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction\n ): Observable;\n pipe(\n op1: OperatorFunction,\n op2: OperatorFunction,\n op3: OperatorFunction,\n op4: OperatorFunction,\n op5: OperatorFunction,\n op6: OperatorFunction,\n op7: OperatorFunction,\n op8: OperatorFunction,\n op9: OperatorFunction,\n ...operations: OperatorFunction[]\n ): Observable;\n /* tslint:enable:max-line-length */\n\n /**\n * Used to stitch together functional operators into a chain.\n * @method pipe\n * @return {Observable} the Observable result of all of the operators having\n * been called in the order they were passed in.\n *\n * ### Example\n * ```ts\n * import { interval } from 'rxjs';\n * import { map, filter, scan } from 'rxjs/operators';\n *\n * interval(1000)\n * .pipe(\n * filter(x => x % 2 === 0),\n * map(x => x + x),\n * scan((acc, x) => acc + x)\n * )\n * .subscribe(x => console.log(x))\n * ```\n */\n pipe(...operations: OperatorFunction[]): Observable {\n return pipeFromArray(operations)(this);\n }\n\n /* tslint:disable:max-line-length */\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: typeof Promise): Promise;\n /** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */\n toPromise(PromiseCtor: PromiseConstructorLike): Promise;\n /* tslint:enable:max-line-length */\n\n /**\n * Subscribe to this Observable and get a Promise resolving on\n * `complete` with the last emission (if any).\n *\n * **WARNING**: Only use this with observables you *know* will complete. If the source\n * observable does not complete, you will end up with a promise that is hung up, and\n * potentially all of the state of an async function hanging out in memory. To avoid\n * this situation, look into adding something like {@link timeout}, {@link take},\n * {@link takeWhile}, or {@link takeUntil} amongst others.\n *\n * @method toPromise\n * @param [promiseCtor] a constructor function used to instantiate\n * the Promise\n * @return A Promise that resolves with the last value emit, or\n * rejects on an error. If there were no emissions, Promise\n * resolves with undefined.\n * @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise\n */\n toPromise(promiseCtor?: PromiseConstructorLike): Promise {\n promiseCtor = getPromiseCtor(promiseCtor);\n\n return new promiseCtor((resolve, reject) => {\n let value: T | undefined;\n this.subscribe(\n (x: T) => (value = x),\n (err: any) => reject(err),\n () => resolve(value)\n );\n }) as Promise;\n }\n}\n\n/**\n * Decides between a passed promise constructor from consuming code,\n * A default configured promise constructor, and the native promise\n * constructor and returns it. If nothing can be found, it will throw\n * an error.\n * @param promiseCtor The optional promise constructor to passed by consuming code\n */\nfunction getPromiseCtor(promiseCtor: PromiseConstructorLike | undefined) {\n return promiseCtor ?? config.Promise ?? Promise;\n}\n\nfunction isObserver(value: any): value is Observer {\n return value && isFunction(value.next) && isFunction(value.error) && isFunction(value.complete);\n}\n\nfunction isSubscriber(value: any): value is Subscriber {\n return (value && value instanceof Subscriber) || (isObserver(value) && isSubscription(value));\n}\n","import { Subject } from './Subject';\nimport { TimestampProvider } from './types';\nimport { Subscriber } from './Subscriber';\nimport { Subscription } from './Subscription';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * A variant of {@link Subject} that \"replays\" old values to new subscribers by emitting them when they first subscribe.\n *\n * `ReplaySubject` has an internal buffer that will store a specified number of values that it has observed. Like `Subject`,\n * `ReplaySubject` \"observes\" values by having them passed to its `next` method. When it observes a value, it will store that\n * value for a time determined by the configuration of the `ReplaySubject`, as passed to its constructor.\n *\n * When a new subscriber subscribes to the `ReplaySubject` instance, it will synchronously emit all values in its buffer in\n * a First-In-First-Out (FIFO) manner. The `ReplaySubject` will also complete, if it has observed completion; and it will\n * error if it has observed an error.\n *\n * There are two main configuration items to be concerned with:\n *\n * 1. `bufferSize` - This will determine how many items are stored in the buffer, defaults to infinite.\n * 2. `windowTime` - The amount of time to hold a value in the buffer before removing it from the buffer.\n *\n * Both configurations may exist simultaneously. So if you would like to buffer a maximum of 3 values, as long as the values\n * are less than 2 seconds old, you could do so with a `new ReplaySubject(3, 2000)`.\n *\n * ### Differences with BehaviorSubject\n *\n * `BehaviorSubject` is similar to `new ReplaySubject(1)`, with a couple fo exceptions:\n *\n * 1. `BehaviorSubject` comes \"primed\" with a single value upon construction.\n * 2. `ReplaySubject` will replay values, even after observing an error, where `BehaviorSubject` will not.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n * @see {@link shareReplay}\n */\nexport class ReplaySubject extends Subject {\n private _buffer: (T | number)[] = [];\n private _infiniteTimeWindow = true;\n\n /**\n * @param bufferSize The size of the buffer to replay on subscription\n * @param windowTime The amount of time the buffered items will say buffered\n * @param timestampProvider An object with a `now()` method that provides the current timestamp. This is used to\n * calculate the amount of time something has been buffered.\n */\n constructor(\n private _bufferSize = Infinity,\n private _windowTime = Infinity,\n private _timestampProvider: TimestampProvider = dateTimestampProvider\n ) {\n super();\n this._infiniteTimeWindow = _windowTime === Infinity;\n this._bufferSize = Math.max(1, _bufferSize);\n this._windowTime = Math.max(1, _windowTime);\n }\n\n next(value: T): void {\n const { isStopped, _buffer, _infiniteTimeWindow, _timestampProvider, _windowTime } = this;\n if (!isStopped) {\n _buffer.push(value);\n !_infiniteTimeWindow && _buffer.push(_timestampProvider.now() + _windowTime);\n }\n this._trimBuffer();\n super.next(value);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._trimBuffer();\n\n const subscription = this._innerSubscribe(subscriber);\n\n const { _infiniteTimeWindow, _buffer } = this;\n // We use a copy here, so reentrant code does not mutate our array while we're\n // emitting it to a new subscriber.\n const copy = _buffer.slice();\n for (let i = 0; i < copy.length && !subscriber.closed; i += _infiniteTimeWindow ? 1 : 2) {\n subscriber.next(copy[i] as T);\n }\n\n this._checkFinalizedStatuses(subscriber);\n\n return subscription;\n }\n\n private _trimBuffer() {\n const { _bufferSize, _timestampProvider, _buffer, _infiniteTimeWindow } = this;\n // If we don't have an infinite buffer size, and we're over the length,\n // use splice to truncate the old buffer values off. Note that we have to\n // double the size for instances where we're not using an infinite time window\n // because we're storing the values and the timestamps in the same array.\n const adjustedBufferSize = (_infiniteTimeWindow ? 1 : 2) * _bufferSize;\n _bufferSize < Infinity && adjustedBufferSize < _buffer.length && _buffer.splice(0, _buffer.length - adjustedBufferSize);\n\n // Now, if we're not in an infinite time window, remove all values where the time is\n // older than what is allowed.\n if (!_infiniteTimeWindow) {\n const now = _timestampProvider.now();\n let last = 0;\n // Search the array for the first timestamp that isn't expired and\n // truncate the buffer up to that point.\n for (let i = 1; i < _buffer.length && (_buffer[i] as number) <= now; i += 2) {\n last = i;\n }\n last && _buffer.splice(0, last + 1);\n }\n }\n}\n","import { Action } from './scheduler/Action';\nimport { Subscription } from './Subscription';\nimport { SchedulerLike, SchedulerAction } from './types';\nimport { dateTimestampProvider } from './scheduler/dateTimestampProvider';\n\n/**\n * An execution context and a data structure to order tasks and schedule their\n * execution. Provides a notion of (potentially virtual) time, through the\n * `now()` getter method.\n *\n * Each unit of work in a Scheduler is called an `Action`.\n *\n * ```ts\n * class Scheduler {\n * now(): number;\n * schedule(work, delay?, state?): Subscription;\n * }\n * ```\n *\n * @class Scheduler\n * @deprecated Scheduler is an internal implementation detail of RxJS, and\n * should not be used directly. Rather, create your own class and implement\n * {@link SchedulerLike}. Will be made internal in v8.\n */\nexport class Scheduler implements SchedulerLike {\n public static now: () => number = dateTimestampProvider.now;\n\n constructor(private schedulerActionCtor: typeof Action, now: () => number = Scheduler.now) {\n this.now = now;\n }\n\n /**\n * A getter method that returns a number representing the current time\n * (at the time this function was called) according to the scheduler's own\n * internal clock.\n * @return {number} A number that represents the current time. May or may not\n * have a relation to wall-clock time. May or may not refer to a time unit\n * (e.g. milliseconds).\n */\n public now: () => number;\n\n /**\n * Schedules a function, `work`, for execution. May happen at some point in\n * the future, according to the `delay` parameter, if specified. May be passed\n * some context object, `state`, which will be passed to the `work` function.\n *\n * The given arguments will be processed an stored as an Action object in a\n * queue of actions.\n *\n * @param {function(state: ?T): ?Subscription} work A function representing a\n * task, or some unit of work to be executed by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler itself.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @return {Subscription} A subscription in order to be able to unsubscribe\n * the scheduled work.\n */\n public schedule(work: (this: SchedulerAction, state?: T) => void, delay: number = 0, state?: T): Subscription {\n return new this.schedulerActionCtor(this, work).schedule(state, delay);\n }\n}\n","import { Operator } from './Operator';\nimport { Observable } from './Observable';\nimport { Subscriber } from './Subscriber';\nimport { Subscription, EMPTY_SUBSCRIPTION } from './Subscription';\nimport { Observer, SubscriptionLike, TeardownLogic } from './types';\nimport { ObjectUnsubscribedError } from './util/ObjectUnsubscribedError';\nimport { arrRemove } from './util/arrRemove';\nimport { errorContext } from './util/errorContext';\n\n/**\n * A Subject is a special type of Observable that allows values to be\n * multicasted to many Observers. Subjects are like EventEmitters.\n *\n * Every Subject is an Observable and an Observer. You can subscribe to a\n * Subject, and you can call next to feed values as well as error and complete.\n */\nexport class Subject extends Observable implements SubscriptionLike {\n closed = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n observers: Observer[] = [];\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n isStopped = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n hasError = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n thrownError: any = null;\n\n /**\n * Creates a \"subject\" by basically gluing an observer to an observable.\n *\n * @nocollapse\n * @deprecated Recommended you do not use. Will be removed at some point in the future. Plans for replacement still under discussion.\n */\n static create: (...args: any[]) => any = (destination: Observer, source: Observable): AnonymousSubject => {\n return new AnonymousSubject(destination, source);\n };\n\n constructor() {\n // NOTE: This must be here to obscure Observable's constructor.\n super();\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n lift(operator: Operator): Observable {\n const subject = new AnonymousSubject(this, this);\n subject.operator = operator as any;\n return subject as any;\n }\n\n /** @internal */\n protected _throwIfClosed() {\n if (this.closed) {\n throw new ObjectUnsubscribedError();\n }\n }\n\n next(value: T) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n const copy = this.observers.slice();\n for (const observer of copy) {\n observer.next(value);\n }\n }\n });\n }\n\n error(err: any) {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.hasError = this.isStopped = true;\n this.thrownError = err;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.error(err);\n }\n }\n });\n }\n\n complete() {\n errorContext(() => {\n this._throwIfClosed();\n if (!this.isStopped) {\n this.isStopped = true;\n const { observers } = this;\n while (observers.length) {\n observers.shift()!.complete();\n }\n }\n });\n }\n\n unsubscribe() {\n this.isStopped = this.closed = true;\n this.observers = null!;\n }\n\n get observed() {\n return this.observers?.length > 0;\n }\n\n /** @internal */\n protected _trySubscribe(subscriber: Subscriber): TeardownLogic {\n this._throwIfClosed();\n return super._trySubscribe(subscriber);\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n this._throwIfClosed();\n this._checkFinalizedStatuses(subscriber);\n return this._innerSubscribe(subscriber);\n }\n\n /** @internal */\n protected _innerSubscribe(subscriber: Subscriber) {\n const { hasError, isStopped, observers } = this;\n return hasError || isStopped\n ? EMPTY_SUBSCRIPTION\n : (observers.push(subscriber), new Subscription(() => arrRemove(observers, subscriber)));\n }\n\n /** @internal */\n protected _checkFinalizedStatuses(subscriber: Subscriber) {\n const { hasError, thrownError, isStopped } = this;\n if (hasError) {\n subscriber.error(thrownError);\n } else if (isStopped) {\n subscriber.complete();\n }\n }\n\n /**\n * Creates a new Observable with this Subject as the source. You can do this\n * to create customize Observer-side logic of the Subject and conceal it from\n * code that uses the Observable.\n * @return {Observable} Observable that the Subject casts to\n */\n asObservable(): Observable {\n const observable: any = new Observable();\n observable.source = this;\n return observable;\n }\n}\n\n/**\n * @class AnonymousSubject\n */\nexport class AnonymousSubject extends Subject {\n constructor(\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n public destination?: Observer,\n source?: Observable\n ) {\n super();\n this.source = source;\n }\n\n next(value: T) {\n this.destination?.next?.(value);\n }\n\n error(err: any) {\n this.destination?.error?.(err);\n }\n\n complete() {\n this.destination?.complete?.();\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber): Subscription {\n return this.source?.subscribe(subscriber) ?? EMPTY_SUBSCRIPTION;\n }\n}\n","import { CompleteNotification, NextNotification, ErrorNotification } from './types';\n\n/**\n * A completion object optimized for memory use and created to be the\n * same \"shape\" as other notifications in v8.\n * @internal\n */\nexport const COMPLETE_NOTIFICATION = (() => createNotification('C', undefined, undefined) as CompleteNotification)();\n\n/**\n * Internal use only. Creates an optimized error notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function errorNotification(error: any): ErrorNotification {\n return createNotification('E', undefined, error) as any;\n}\n\n/**\n * Internal use only. Creates an optimized next notification that is the same \"shape\"\n * as other notifications.\n * @internal\n */\nexport function nextNotification(value: T) {\n return createNotification('N', value, undefined) as NextNotification;\n}\n\n/**\n * Ensures that all notifications created internally have the same \"shape\" in v8.\n *\n * TODO: This is only exported to support a crazy legacy test in `groupBy`.\n * @internal\n */\nexport function createNotification(kind: 'N' | 'E' | 'C', value: any, error: any) {\n return {\n kind,\n value,\n error,\n };\n}\n","import { isFunction } from './util/isFunction';\nimport { Observer, ObservableNotification } from './types';\nimport { isSubscription, Subscription } from './Subscription';\nimport { config } from './config';\nimport { reportUnhandledError } from './util/reportUnhandledError';\nimport { noop } from './util/noop';\nimport { nextNotification, errorNotification, COMPLETE_NOTIFICATION } from './NotificationFactories';\nimport { timeoutProvider } from './scheduler/timeoutProvider';\nimport { captureError } from './util/errorContext';\n\n/**\n * Implements the {@link Observer} interface and extends the\n * {@link Subscription} class. While the {@link Observer} is the public API for\n * consuming the values of an {@link Observable}, all Observers get converted to\n * a Subscriber, in order to provide Subscription-like capabilities such as\n * `unsubscribe`. Subscriber is a common type in RxJS, and crucial for\n * implementing operators, but it is rarely used as a public API.\n *\n * @class Subscriber\n */\nexport class Subscriber extends Subscription implements Observer {\n /**\n * A static factory for a Subscriber, given a (potentially partial) definition\n * of an Observer.\n * @param next The `next` callback of an Observer.\n * @param error The `error` callback of an\n * Observer.\n * @param complete The `complete` callback of an\n * Observer.\n * @return A Subscriber wrapping the (partially defined)\n * Observer represented by the given arguments.\n * @nocollapse\n * @deprecated Do not use. Will be removed in v8. There is no replacement for this\n * method, and there is no reason to be creating instances of `Subscriber` directly.\n * If you have a specific use case, please file an issue.\n */\n static create(next?: (x?: T) => void, error?: (e?: any) => void, complete?: () => void): Subscriber {\n return new SafeSubscriber(next, error, complete);\n }\n\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected isStopped: boolean = false;\n /** @deprecated Internal implementation detail, do not use directly. Will be made internal in v8. */\n protected destination: Subscriber | Observer; // this `any` is the escape hatch to erase extra type param (e.g. R)\n\n /**\n * @deprecated Internal implementation detail, do not use directly. Will be made internal in v8.\n * There is no reason to directly create an instance of Subscriber. This type is exported for typings reasons.\n */\n constructor(destination?: Subscriber | Observer) {\n super();\n if (destination) {\n this.destination = destination;\n // Automatically chain subscriptions together here.\n // if destination is a Subscription, then it is a Subscriber.\n if (isSubscription(destination)) {\n destination.add(this);\n }\n } else {\n this.destination = EMPTY_OBSERVER;\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `next` from\n * the Observable, with a value. The Observable may call this method 0 or more\n * times.\n * @param {T} [value] The `next` value.\n * @return {void}\n */\n next(value?: T): void {\n if (this.isStopped) {\n handleStoppedNotification(nextNotification(value), this);\n } else {\n this._next(value!);\n }\n }\n\n /**\n * The {@link Observer} callback to receive notifications of type `error` from\n * the Observable, with an attached `Error`. Notifies the Observer that\n * the Observable has experienced an error condition.\n * @param {any} [err] The `error` exception.\n * @return {void}\n */\n error(err?: any): void {\n if (this.isStopped) {\n handleStoppedNotification(errorNotification(err), this);\n } else {\n this.isStopped = true;\n this._error(err);\n }\n }\n\n /**\n * The {@link Observer} callback to receive a valueless notification of type\n * `complete` from the Observable. Notifies the Observer that the Observable\n * has finished sending push-based notifications.\n * @return {void}\n */\n complete(): void {\n if (this.isStopped) {\n handleStoppedNotification(COMPLETE_NOTIFICATION, this);\n } else {\n this.isStopped = true;\n this._complete();\n }\n }\n\n unsubscribe(): void {\n if (!this.closed) {\n this.isStopped = true;\n super.unsubscribe();\n this.destination = null!;\n }\n }\n\n protected _next(value: T): void {\n this.destination.next(value);\n }\n\n protected _error(err: any): void {\n try {\n this.destination.error(err);\n } finally {\n this.unsubscribe();\n }\n }\n\n protected _complete(): void {\n try {\n this.destination.complete();\n } finally {\n this.unsubscribe();\n }\n }\n}\n\nexport class SafeSubscriber extends Subscriber {\n constructor(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e?: any) => void) | null,\n complete?: (() => void) | null\n ) {\n super();\n\n let next: ((value: T) => void) | undefined;\n if (isFunction(observerOrNext)) {\n // The first argument is a function, not an observer. The next\n // two arguments *could* be observers, or they could be empty.\n next = observerOrNext;\n } else if (observerOrNext) {\n // The first argument is an observer object, we have to pull the handlers\n // off and capture the owner object as the context. That is because we're\n // going to put them all in a new destination with ensured methods\n // for `next`, `error`, and `complete`. That's part of what makes this\n // the \"Safe\" Subscriber.\n ({ next, error, complete } = observerOrNext);\n let context: any;\n if (this && config.useDeprecatedNextContext) {\n // This is a deprecated path that made `this.unsubscribe()` available in\n // next handler functions passed to subscribe. This only exists behind a flag\n // now, as it is *very* slow.\n context = Object.create(observerOrNext);\n context.unsubscribe = () => this.unsubscribe();\n } else {\n context = observerOrNext;\n }\n next = next?.bind(context);\n error = error?.bind(context);\n complete = complete?.bind(context);\n }\n\n // Once we set the destination, the superclass `Subscriber` will\n // do it's magic in the `_next`, `_error`, and `_complete` methods.\n this.destination = {\n next: next ? wrapForErrorHandling(next, this) : noop,\n error: wrapForErrorHandling(error ?? defaultErrorHandler, this),\n complete: complete ? wrapForErrorHandling(complete, this) : noop,\n };\n }\n}\n\n/**\n * Wraps a user-provided handler (or our {@link defaultErrorHandler} in one case) to\n * ensure that any thrown errors are caught and handled appropriately.\n *\n * @param handler The handler to wrap\n * @param instance The SafeSubscriber instance we're going to mark if there's an error.\n */\nfunction wrapForErrorHandling(handler: (arg?: any) => void, instance: SafeSubscriber) {\n return (...args: any[]) => {\n try {\n handler(...args);\n } catch (err) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n captureError(err);\n } else {\n // Ideal path, we report this as an unhandled error,\n // which is thrown on a new call stack.\n reportUnhandledError(err);\n }\n }\n };\n}\n/**\n * An error handler used when no error handler was supplied\n * to the SafeSubscriber -- meaning no error handler was supplied\n * do the `subscribe` call on our observable.\n * @param err The error to handle\n */\nfunction defaultErrorHandler(err: any) {\n throw err;\n}\n\n/**\n * A handler for notifications that cannot be sent to a stopped subscriber.\n * @param notification The notification being sent\n * @param subscriber The stopped subscriber\n */\nfunction handleStoppedNotification(notification: ObservableNotification, subscriber: Subscriber) {\n const { onStoppedNotification } = config;\n onStoppedNotification && timeoutProvider.setTimeout(() => onStoppedNotification(notification, subscriber));\n}\n\n/**\n * The observer used as a stub for subscriptions where the user did not\n * pass any arguments to `subscribe`. Comes with the default error handling\n * behavior.\n */\nexport const EMPTY_OBSERVER: Readonly> & { closed: true } = {\n closed: true,\n next: noop,\n error: defaultErrorHandler,\n complete: noop,\n};\n","import { isFunction } from './util/isFunction';\nimport { UnsubscriptionError } from './util/UnsubscriptionError';\nimport { SubscriptionLike, TeardownLogic, Unsubscribable } from './types';\nimport { arrRemove } from './util/arrRemove';\n\n/**\n * Represents a disposable resource, such as the execution of an Observable. A\n * Subscription has one important method, `unsubscribe`, that takes no argument\n * and just disposes the resource held by the subscription.\n *\n * Additionally, subscriptions may be grouped together through the `add()`\n * method, which will attach a child Subscription to the current Subscription.\n * When a Subscription is unsubscribed, all its children (and its grandchildren)\n * will be unsubscribed as well.\n *\n * @class Subscription\n */\nexport class Subscription implements SubscriptionLike {\n /** @nocollapse */\n public static EMPTY = (() => {\n const empty = new Subscription();\n empty.closed = true;\n return empty;\n })();\n\n /**\n * A flag to indicate whether this Subscription has already been unsubscribed.\n */\n public closed = false;\n\n private _parentage: Subscription[] | Subscription | null = null;\n\n /**\n * The list of registered teardowns to execute upon unsubscription. Adding and removing from this\n * list occurs in the {@link #add} and {@link #remove} methods.\n */\n private _teardowns: Exclude[] | null = null;\n\n /**\n * @param initialTeardown A function executed first as part of the teardown\n * process that is kicked off when {@link #unsubscribe} is called.\n */\n constructor(private initialTeardown?: () => void) {}\n\n /**\n * Disposes the resources held by the subscription. May, for instance, cancel\n * an ongoing Observable execution or cancel any other type of work that\n * started when the Subscription was created.\n * @return {void}\n */\n unsubscribe(): void {\n let errors: any[] | undefined;\n\n if (!this.closed) {\n this.closed = true;\n\n // Remove this from it's parents.\n const { _parentage } = this;\n if (_parentage) {\n this._parentage = null;\n if (Array.isArray(_parentage)) {\n for (const parent of _parentage) {\n parent.remove(this);\n }\n } else {\n _parentage.remove(this);\n }\n }\n\n const { initialTeardown } = this;\n if (isFunction(initialTeardown)) {\n try {\n initialTeardown();\n } catch (e) {\n errors = e instanceof UnsubscriptionError ? e.errors : [e];\n }\n }\n\n const { _teardowns } = this;\n if (_teardowns) {\n this._teardowns = null;\n for (const teardown of _teardowns) {\n try {\n execTeardown(teardown);\n } catch (err) {\n errors = errors ?? [];\n if (err instanceof UnsubscriptionError) {\n errors = [...errors, ...err.errors];\n } else {\n errors.push(err);\n }\n }\n }\n }\n\n if (errors) {\n throw new UnsubscriptionError(errors);\n }\n }\n }\n\n /**\n * Adds a teardown to this subscription, so that teardown will be unsubscribed/called\n * when this subscription is unsubscribed. If this subscription is already {@link #closed},\n * because it has already been unsubscribed, then whatever teardown is passed to it\n * will automatically be executed (unless the teardown itself is also a closed subscription).\n *\n * Closed Subscriptions cannot be added as teardowns to any subscription. Adding a closed\n * subscription to a any subscription will result in no operation. (A noop).\n *\n * Adding a subscription to itself, or adding `null` or `undefined` will not perform any\n * operation at all. (A noop).\n *\n * `Subscription` instances that are added to this instance will automatically remove themselves\n * if they are unsubscribed. Functions and {@link Unsubscribable} objects that you wish to remove\n * will need to be removed manually with {@link #remove}\n *\n * @param teardown The teardown logic to add to this subscription.\n */\n add(teardown: TeardownLogic): void {\n // Only add the teardown if it's not undefined\n // and don't add a subscription to itself.\n if (teardown && teardown !== this) {\n if (this.closed) {\n // If this subscription is already closed,\n // execute whatever teardown is handed to it automatically.\n execTeardown(teardown);\n } else {\n if (teardown instanceof Subscription) {\n // We don't add closed subscriptions, and we don't add the same subscription\n // twice. Subscription unsubscribe is idempotent.\n if (teardown.closed || teardown._hasParent(this)) {\n return;\n }\n teardown._addParent(this);\n }\n (this._teardowns = this._teardowns ?? []).push(teardown);\n }\n }\n }\n\n /**\n * Checks to see if a this subscription already has a particular parent.\n * This will signal that this subscription has already been added to the parent in question.\n * @param parent the parent to check for\n */\n private _hasParent(parent: Subscription) {\n const { _parentage } = this;\n return _parentage === parent || (Array.isArray(_parentage) && _parentage.includes(parent));\n }\n\n /**\n * Adds a parent to this subscription so it can be removed from the parent if it\n * unsubscribes on it's own.\n *\n * NOTE: THIS ASSUMES THAT {@link _hasParent} HAS ALREADY BEEN CHECKED.\n * @param parent The parent subscription to add\n */\n private _addParent(parent: Subscription) {\n const { _parentage } = this;\n this._parentage = Array.isArray(_parentage) ? (_parentage.push(parent), _parentage) : _parentage ? [_parentage, parent] : parent;\n }\n\n /**\n * Called on a child when it is removed via {@link #remove}.\n * @param parent The parent to remove\n */\n private _removeParent(parent: Subscription) {\n const { _parentage } = this;\n if (_parentage === parent) {\n this._parentage = null;\n } else if (Array.isArray(_parentage)) {\n arrRemove(_parentage, parent);\n }\n }\n\n /**\n * Removes a teardown from this subscription that was previously added with the {@link #add} method.\n *\n * Note that `Subscription` instances, when unsubscribed, will automatically remove themselves\n * from every other `Subscription` they have been added to. This means that using the `remove` method\n * is not a common thing and should be used thoughtfully.\n *\n * If you add the same teardown instance of a function or an unsubscribable object to a `Subcription` instance\n * more than once, you will need to call `remove` the same number of times to remove all instances.\n *\n * All teardown instances are removed to free up memory upon unsubscription.\n *\n * @param teardown The teardown to remove from this subscription\n */\n remove(teardown: Exclude): void {\n const { _teardowns } = this;\n _teardowns && arrRemove(_teardowns, teardown);\n\n if (teardown instanceof Subscription) {\n teardown._removeParent(this);\n }\n }\n}\n\nexport const EMPTY_SUBSCRIPTION = Subscription.EMPTY;\n\nexport function isSubscription(value: any): value is Subscription {\n return (\n value instanceof Subscription ||\n (value && 'closed' in value && isFunction(value.remove) && isFunction(value.add) && isFunction(value.unsubscribe))\n );\n}\n\nfunction execTeardown(teardown: Unsubscribable | (() => void)) {\n if (isFunction(teardown)) {\n teardown();\n } else {\n teardown.unsubscribe();\n }\n}\n","import { Subscriber } from './Subscriber';\nimport { ObservableNotification } from './types';\n\n/**\n * The {@link GlobalConfig} object for RxJS. It is used to configure things\n * like how to react on unhandled errors.\n */\nexport const config: GlobalConfig = {\n onUnhandledError: null,\n onStoppedNotification: null,\n Promise: undefined,\n useDeprecatedSynchronousErrorHandling: false,\n useDeprecatedNextContext: false,\n};\n\n/**\n * The global configuration object for RxJS, used to configure things\n * like how to react on unhandled errors. Accessible via {@link config}\n * object.\n */\nexport interface GlobalConfig {\n /**\n * A registration point for unhandled errors from RxJS. These are errors that\n * cannot were not handled by consuming code in the usual subscription path. For\n * example, if you have this configured, and you subscribe to an observable without\n * providing an error handler, errors from that subscription will end up here. This\n * will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onUnhandledError: ((err: any) => void) | null;\n\n /**\n * A registration point for notifications that cannot be sent to subscribers because they\n * have completed, errored or have been explicitly unsubscribed. By default, next, complete\n * and error notifications sent to stopped subscribers are noops. However, sometimes callers\n * might want a different behavior. For example, with sources that attempt to report errors\n * to stopped subscribers, a caller can configure RxJS to throw an unhandled error instead.\n * This will _always_ be called asynchronously on another job in the runtime. This is because\n * we do not want errors thrown in this user-configured handler to interfere with the\n * behavior of the library.\n */\n onStoppedNotification: ((notification: ObservableNotification, subscriber: Subscriber) => void) | null;\n\n /**\n * The promise constructor used by default for {@link Observable#toPromise toPromise} and {@link Observable#forEach forEach}\n * methods.\n *\n * @deprecated As of version 8, RxJS will no longer support this sort of injection of a\n * Promise constructor. If you need a Promise implementation other than native promises,\n * please polyfill/patch Promise as you see appropriate. Will be removed in v8.\n */\n Promise?: PromiseConstructorLike;\n\n /**\n * If true, turns on synchronous error rethrowing, which is a deprecated behavior\n * in v6 and higher. This behavior enables bad patterns like wrapping a subscribe\n * call in a try/catch block. It also enables producer interference, a nasty bug\n * where a multicast can be broken for all observers by a downstream consumer with\n * an unhandled error. DO NOT USE THIS FLAG UNLESS IT'S NEEDED TO BUY TIME\n * FOR MIGRATION REASONS.\n *\n * @deprecated As of version 8, RxJS will no longer support synchronous throwing\n * of unhandled errors. All errors will be thrown on a separate call stack to prevent bad\n * behaviors described above. Will be removed in v8.\n */\n useDeprecatedSynchronousErrorHandling: boolean;\n\n /**\n * If true, enables an as-of-yet undocumented feature from v5: The ability to access\n * `unsubscribe()` via `this` context in `next` functions created in observers passed\n * to `subscribe`.\n *\n * This is being removed because the performance was severely problematic, and it could also cause\n * issues when types other than POJOs are passed to subscribe as subscribers, as they will likely have\n * their `this` context overwritten.\n *\n * @deprecated As of version 8, RxJS will no longer support altering the\n * context of next functions provided as part of an observer to Subscribe. Instead,\n * you will have access to a subscription or a signal or token that will allow you to do things like\n * unsubscribe and test closed status. Will be removed in v8.\n */\n useDeprecatedNextContext: boolean;\n}\n","import { Observable } from './Observable';\nimport { EmptyError } from './util/EmptyError';\nimport { SafeSubscriber } from './Subscriber';\n\nexport interface FirstValueFromConfig {\n defaultValue: T;\n}\n\nexport function firstValueFrom(source: Observable, config: FirstValueFromConfig): Promise;\nexport function firstValueFrom(source: Observable): Promise;\n\n/**\n * Converts an observable to a promise by subscribing to the observable,\n * and returning a promise that will resolve as soon as the first value\n * arrives from the observable. The subscription will then be closed.\n *\n * If the observable stream completes before any values were emitted, the\n * returned promise will reject with {@link EmptyError} or will resolve\n * with the default value if a default was specified.\n *\n * If the observable stream emits an error, the returned promise will reject\n * with that error.\n *\n * **WARNING**: Only use this with observables you *know* will emit at least one value,\n * *OR* complete. If the source observable does not emit one value or complete, you will\n * end up with a promise that is hung up, and potentially all of the state of an\n * async function hanging out in memory. To avoid this situation, look into adding\n * something like {@link timeout}, {@link take}, {@link takeWhile}, or {@link takeUntil}\n * amongst others.\n *\n * ### Example\n *\n * Wait for the first value from a stream and emit it from a promise in\n * an async function.\n *\n * ```ts\n * import { interval, firstValueFrom } from 'rxjs';\n *\n * async function execute() {\n * const source$ = interval(2000);\n * const firstNumber = await firstValueFrom(source$);\n * console.log(`The first number is ${firstNumber}`);\n * }\n *\n * execute();\n *\n * // Expected output:\n * // \"The first number is 0\"\n * ```\n *\n * @see {@link lastValueFrom}\n *\n * @param source the observable to convert to a promise\n * @param config a configuration object to define the `defaultValue` to use if the source completes without emitting a value\n */\nexport function firstValueFrom(source: Observable, config?: FirstValueFromConfig): Promise {\n const hasConfig = typeof config === 'object';\n return new Promise((resolve, reject) => {\n const subscriber = new SafeSubscriber({\n next: (value) => {\n resolve(value);\n subscriber.unsubscribe();\n },\n error: reject,\n complete: () => {\n if (hasConfig) {\n resolve(config!.defaultValue);\n } else {\n reject(new EmptyError());\n }\n },\n });\n source.subscribe(subscriber);\n });\n}\n","import { Subject } from '../Subject';\nimport { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { refCount as higherOrderRefCount } from '../operators/refCount';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { hasLift } from '../util/lift';\n\n/**\n * @class ConnectableObservable\n * @deprecated Will be removed in v8. Use {@link connectable} to create a connectable observable.\n * If you are using the `refCount` method of `ConnectableObservable`, use the {@link share} operator\n * instead.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport class ConnectableObservable extends Observable {\n protected _subject: Subject | null = null;\n protected _refCount: number = 0;\n protected _connection: Subscription | null = null;\n\n /**\n * @param source The source observable\n * @param subjectFactory The factory that creates the subject used internally.\n * @deprecated Will be removed in v8. Use {@link connectable} to create a connectable observable.\n * `new ConnectableObservable(source, factory)` is equivalent to\n * `connectable(source, { connector: factory })`.\n * When the `refCount()` method is needed, the {@link share} operator should be used instead:\n * `new ConnectableObservable(source, factory).refCount()` is equivalent to\n * `source.pipe(share({ connector: factory }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\n constructor(public source: Observable, protected subjectFactory: () => Subject) {\n super();\n // If we have lift, monkey patch that here. This is done so custom observable\n // types will compose through multicast. Otherwise the resulting observable would\n // simply be an instance of `ConnectableObservable`.\n if (hasLift(source)) {\n this.lift = source.lift;\n }\n }\n\n /** @internal */\n protected _subscribe(subscriber: Subscriber) {\n return this.getSubject().subscribe(subscriber);\n }\n\n protected getSubject(): Subject {\n const subject = this._subject;\n if (!subject || subject.isStopped) {\n this._subject = this.subjectFactory();\n }\n return this._subject!;\n }\n\n protected _teardown() {\n this._refCount = 0;\n const { _connection } = this;\n this._subject = this._connection = null;\n _connection?.unsubscribe();\n }\n\n /**\n * @deprecated {@link ConnectableObservable} will be removed in v8. Use {@link connectable} instead.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\n connect(): Subscription {\n let connection = this._connection;\n if (!connection) {\n connection = this._connection = new Subscription();\n const subject = this.getSubject();\n connection.add(\n this.source.subscribe(\n new OperatorSubscriber(\n subject as any,\n undefined,\n () => {\n this._teardown();\n subject.complete();\n },\n (err) => {\n this._teardown();\n subject.error(err);\n },\n () => this._teardown()\n )\n )\n );\n\n if (connection.closed) {\n this._connection = null;\n connection = Subscription.EMPTY;\n }\n }\n return connection;\n }\n\n /**\n * @deprecated {@link ConnectableObservable} will be removed in v8. Use the {@link share} operator instead.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\n refCount(): Observable {\n return higherOrderRefCount()(this) as Observable;\n }\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf, ObservableInputTuple } from '../types';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { Subscriber } from '../Subscriber';\nimport { from } from './from';\nimport { identity } from '../util/identity';\nimport { Subscription } from '../Subscription';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { popResultSelector, popScheduler } from '../util/args';\nimport { createObject } from '../util/createObject';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { AnyCatcher } from '../AnyCatcher';\nimport { executeSchedule } from '../util/executeSchedule';\n\n// combineLatest(any)\n// We put this first because we need to catch cases where the user has supplied\n// _exactly `any`_ as the argument. Since `any` literally matches _anything_,\n// we don't want it to randomly hit one of the other type signatures below,\n// as we have no idea at build-time what type we should be returning when given an any.\n\n/**\n * You have passed `any` here, we can't figure out if it is\n * an array or an object, so you're getting `unknown`. Use better types.\n * @param arg Something typed as `any`\n */\nexport function combineLatest(arg: T): Observable;\n\n// combineLatest([a, b, c])\nexport function combineLatest(sources: []): Observable;\nexport function combineLatest(sources: readonly [...ObservableInputTuple]): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n sources: readonly [...ObservableInputTuple],\n resultSelector: (...values: A) => R,\n scheduler: SchedulerLike\n): Observable;\nexport function combineLatest(\n sources: readonly [...ObservableInputTuple],\n resultSelector: (...values: A) => R\n): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n sources: readonly [...ObservableInputTuple],\n scheduler: SchedulerLike\n): Observable;\n\n// combineLatest(a, b, c)\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function combineLatest(...sources: [...ObservableInputTuple]): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n ...sourcesAndResultSelectorAndScheduler: [...ObservableInputTuple, (...values: A) => R, SchedulerLike]\n): Observable;\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function combineLatest(\n ...sourcesAndResultSelector: [...ObservableInputTuple, (...values: A) => R]\n): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `combineLatestAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function combineLatest(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): Observable;\n\n// combineLatest({a, b, c})\nexport function combineLatest(sourcesObject: { [K in any]: never }): Observable;\nexport function combineLatest>>(\n sourcesObject: T\n): Observable<{ [K in keyof T]: ObservedValueOf }>;\n\n/**\n * Combines multiple Observables to create an Observable whose values are\n * calculated from the latest values of each of its input Observables.\n *\n * Whenever any input Observable emits a value, it\n * computes a formula using the latest values from all the inputs, then emits\n * the output of that formula.\n *\n * ![](combineLatest.png)\n *\n * `combineLatest` combines the values from all the Observables passed in the\n * observables array. This is done by subscribing to each Observable in order and,\n * whenever any Observable emits, collecting an array of the most recent\n * values from each Observable. So if you pass `n` Observables to this operator,\n * the returned Observable will always emit an array of `n` values, in an order\n * corresponding to the order of the passed Observables (the value from the first Observable\n * will be at index 0 of the array and so on).\n *\n * Static version of `combineLatest` accepts an array of Observables. Note that an array of\n * Observables is a good choice, if you don't know beforehand how many Observables\n * you will combine. Passing an empty array will result in an Observable that\n * completes immediately.\n *\n * To ensure the output array always has the same length, `combineLatest` will\n * actually wait for all input Observables to emit at least once,\n * before it starts emitting results. This means if some Observable emits\n * values before other Observables started emitting, all these values but the last\n * will be lost. On the other hand, if some Observable does not emit a value but\n * completes, resulting Observable will complete at the same moment without\n * emitting anything, since it will now be impossible to include a value from the\n * completed Observable in the resulting array. Also, if some input Observable does\n * not emit any value and never completes, `combineLatest` will also never emit\n * and never complete, since, again, it will wait for all streams to emit some\n * value.\n *\n * If at least one Observable was passed to `combineLatest` and all passed Observables\n * emitted something, the resulting Observable will complete when all combined\n * streams complete. So even if some Observable completes, the result of\n * `combineLatest` will still emit values when other Observables do. In case\n * of a completed Observable, its value from now on will always be the last\n * emitted value. On the other hand, if any Observable errors, `combineLatest`\n * will error immediately as well, and all other Observables will be unsubscribed.\n *\n * ## Examples\n * ### Combine two timer Observables\n * ```ts\n * import { combineLatest, timer } from 'rxjs';\n *\n * const firstTimer = timer(0, 1000); // emit 0, 1, 2... after every second, starting from now\n * const secondTimer = timer(500, 1000); // emit 0, 1, 2... after every second, starting 0,5s from now\n * const combinedTimers = combineLatest([firstTimer, secondTimer]);\n * combinedTimers.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0] after 0.5s\n * // [1, 0] after 1s\n * // [1, 1] after 1.5s\n * // [2, 1] after 2s\n * ```\n * ### Combine a dictionary of Observables\n * ```ts\n * import { combineLatest, of } from 'rxjs';\n * import { delay, startWith } from 'rxjs/operators';\n *\n * const observables = {\n * a: of(1).pipe(delay(1000), startWith(0)),\n * b: of(5).pipe(delay(5000), startWith(0)),\n * c: of(10).pipe(delay(10000), startWith(0))\n * };\n * const combined = combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // {a: 0, b: 0, c: 0} immediately\n * // {a: 1, b: 0, c: 0} after 1s\n * // {a: 1, b: 5, c: 0} after 5s\n * // {a: 1, b: 5, c: 10} after 10s\n * ```\n * ### Combine an array of Observables\n * ```ts\n * import { combineLatest, of } from 'rxjs';\n * import { delay, startWith } from 'rxjs/operators';\n *\n * const observables = [1, 5, 10].map(\n * n => of(n).pipe(\n * delay(n * 1000), // emit 0 and then emit n after n seconds\n * startWith(0),\n * )\n * );\n * const combined = combineLatest(observables);\n * combined.subscribe(value => console.log(value));\n * // Logs\n * // [0, 0, 0] immediately\n * // [1, 0, 0] after 1s\n * // [1, 5, 0] after 5s\n * // [1, 5, 10] after 10s\n * ```\n *\n *\n * ### Use map operator to dynamically calculate the Body-Mass Index\n * ```ts\n * import { combineLatest, of } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * const weight = of(70, 72, 76, 79, 75);\n * const height = of(1.76, 1.77, 1.78);\n * const bmi = combineLatest([weight, height]).pipe(\n * map(([w, h]) => w / (h * h)),\n * );\n * bmi.subscribe(x => console.log('BMI is ' + x));\n *\n * // With output to console:\n * // BMI is 24.212293388429753\n * // BMI is 23.93948099205209\n * // BMI is 23.671253629592222\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link merge}\n * @see {@link withLatestFrom}\n *\n * @param {ObservableInput} [observables] An array of input Observables to combine with each other.\n * An array of Observables must be given as the first argument.\n * @param {function} [project] An optional function to project the values from\n * the combined latest values into a new value on the output Observable.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for subscribing to\n * each input Observable.\n * @return {Observable} An Observable of projected values from the most recent\n * values from each input Observable, or an array of the most recent values from\n * each input Observable.\n */\nexport function combineLatest, R>(...args: any[]): Observable | Observable[]> {\n const scheduler = popScheduler(args);\n const resultSelector = popResultSelector(args);\n\n const { args: observables, keys } = argsArgArrayOrObject(args);\n\n if (observables.length === 0) {\n // If no observables are passed, or someone has passed an ampty array\n // of observables, or even an empty object POJO, we need to just\n // complete (EMPTY), but we have to honor the scheduler provided if any.\n return from([], scheduler as any);\n }\n\n const result = new Observable[]>(\n combineLatestInit(\n observables as ObservableInput>[],\n scheduler,\n keys\n ? // A handler for scrubbing the array of args into a dictionary.\n (values) => createObject(keys, values)\n : // A passthrough to just return the array\n identity\n )\n );\n\n return resultSelector ? (result.pipe(mapOneOrManyArgs(resultSelector)) as Observable) : result;\n}\n\nexport function combineLatestInit(\n observables: ObservableInput[],\n scheduler?: SchedulerLike,\n valueTransform: (values: any[]) => any = identity\n) {\n return (subscriber: Subscriber) => {\n // The outer subscription. We're capturing this in a function\n // because we may have to schedule it.\n maybeSchedule(\n scheduler,\n () => {\n const { length } = observables;\n // A store for the values each observable has emitted so far. We match observable to value on index.\n const values = new Array(length);\n // The number of currently active subscriptions, as they complete, we decrement this number to see if\n // we are all done combining values, so we can complete the result.\n let active = length;\n // The number of inner sources that still haven't emitted the first value\n // We need to track this because all sources need to emit one value in order\n // to start emitting values.\n let remainingFirstValues = length;\n // The loop to kick off subscription. We're keying everything on index `i` to relate the observables passed\n // in to the slot in the output array or the key in the array of keys in the output dictionary.\n for (let i = 0; i < length; i++) {\n maybeSchedule(\n scheduler,\n () => {\n const source = from(observables[i], scheduler as any);\n let hasFirstValue = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // When we get a value, record it in our set of values.\n values[i] = value;\n if (!hasFirstValue) {\n // If this is our first value, record that.\n hasFirstValue = true;\n remainingFirstValues--;\n }\n if (!remainingFirstValues) {\n // We're not waiting for any more\n // first values, so we can emit!\n subscriber.next(valueTransform(values.slice()));\n }\n },\n () => {\n if (!--active) {\n // We only complete the result if we have no more active\n // inner observables.\n subscriber.complete();\n }\n }\n )\n );\n },\n subscriber\n );\n }\n },\n subscriber\n );\n };\n}\n\n/**\n * A small utility to handle the couple of locations where we want to schedule if a scheduler was provided,\n * but we don't if there was no scheduler.\n */\nfunction maybeSchedule(scheduler: SchedulerLike | undefined, execute: () => void, subscription: Subscription) {\n if (scheduler) {\n executeSchedule(subscription, scheduler, execute);\n } else {\n execute();\n }\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple, SchedulerLike } from '../types';\nimport { concatAll } from '../operators/concatAll';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\nexport function concat(...inputs: [...ObservableInputTuple]): Observable;\nexport function concat(\n ...inputsAndScheduler: [...ObservableInputTuple, SchedulerLike]\n): Observable;\n\n/**\n * Creates an output Observable which sequentially emits all values from the first given\n * Observable and then moves on to the next.\n *\n * Concatenates multiple Observables together by\n * sequentially emitting their values, one Observable after the other.\n *\n * ![](concat.png)\n *\n * `concat` joins multiple Observables together, by subscribing to them one at a time and\n * merging their results into the output Observable. You can pass either an array of\n * Observables, or put them directly as arguments. Passing an empty array will result\n * in Observable that completes immediately.\n *\n * `concat` will subscribe to first input Observable and emit all its values, without\n * changing or affecting them in any way. When that Observable completes, it will\n * subscribe to then next Observable passed and, again, emit its values. This will be\n * repeated, until the operator runs out of Observables. When last input Observable completes,\n * `concat` will complete as well. At any given moment only one Observable passed to operator\n * emits values. If you would like to emit values from passed Observables concurrently, check out\n * {@link merge} instead, especially with optional `concurrent` parameter. As a matter of fact,\n * `concat` is an equivalent of `merge` operator with `concurrent` parameter set to `1`.\n *\n * Note that if some input Observable never completes, `concat` will also never complete\n * and Observables following the one that did not complete will never be subscribed. On the other\n * hand, if some Observable simply completes immediately after it is subscribed, it will be\n * invisible for `concat`, which will just move on to the next Observable.\n *\n * If any Observable in chain errors, instead of passing control to the next Observable,\n * `concat` will error immediately as well. Observables that would be subscribed after\n * the one that emitted error, never will.\n *\n * If you pass to `concat` the same Observable many times, its stream of values\n * will be \"replayed\" on every subscription, which means you can repeat given Observable\n * as many times as you like. If passing the same Observable to `concat` 1000 times becomes tedious,\n * you can always use {@link repeat}.\n *\n * ## Examples\n * ### Concatenate a timer counting from 0 to 3 with a synchronous sequence from 1 to 10\n * ```ts\n * import { concat, interval, range } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer = interval(1000).pipe(take(4));\n * const sequence = range(1, 10);\n * const result = concat(timer, sequence);\n * result.subscribe(x => console.log(x));\n *\n * // results in:\n * // 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3 -immediate-> 1 ... 10\n * ```\n *\n * ### Concatenate 3 Observables\n * ```ts\n * import { concat, interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer1 = interval(1000).pipe(take(10));\n * const timer2 = interval(2000).pipe(take(6));\n * const timer3 = interval(500).pipe(take(10));\n *\n * const result = concat(timer1, timer2, timer3);\n * result.subscribe(x => console.log(x));\n *\n * // results in the following:\n * // (Prints to console sequentially)\n * // -1000ms-> 0 -1000ms-> 1 -1000ms-> ... 9\n * // -2000ms-> 0 -2000ms-> 1 -2000ms-> ... 5\n * // -500ms-> 0 -500ms-> 1 -500ms-> ... 9\n * ```\n *\n * ### Concatenate the same Observable to repeat it\n * ```ts\n * import { concat, interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer = interval(1000).pipe(take(2));\n *\n * concat(timer, timer) // concatenating the same Observable!\n * .subscribe(\n * value => console.log(value),\n * err => {},\n * () => console.log('...and it is done!')\n * );\n *\n * // Logs:\n * // 0 after 1s\n * // 1 after 2s\n * // 0 after 3s\n * // 1 after 4s\n * // \"...and it is done!\" also after 4s\n * ```\n *\n * @see {@link concatAll}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link startWith}\n * @see {@link endWith}\n *\n * @param input1 An input Observable to concatenate with others.\n * @param input2 An input Observable to concatenate with others.\n * More than one input Observables may be given as argument.\n * @param scheduler An optional {@link SchedulerLike} to schedule each\n * Observable subscription on.\n */\nexport function concat(...args: any[]): Observable {\n return concatAll()(from(args, popScheduler(args)));\n}\n","import { Observable } from '../Observable';\nimport { ObservedValueOf, ObservableInput } from '../types';\nimport { innerFrom } from './innerFrom';\n\n/**\n * Creates an Observable that, on subscribe, calls an Observable factory to\n * make an Observable for each new Observer.\n *\n * Creates the Observable lazily, that is, only when it\n * is subscribed.\n * \n *\n * ![](defer.png)\n *\n * `defer` allows you to create an Observable only when the Observer\n * subscribes. It waits until an Observer subscribes to it, calls the given\n * factory function to get an Observable -- where a factory function typically\n * generates a new Observable -- and subscribes the Observer to this Observable.\n * In case the factory function returns a falsy value, then EMPTY is used as\n * Observable instead. Last but not least, an exception during the factory\n * function call is transferred to the Observer by calling `error`.\n *\n * ## Example\n * ### Subscribe to either an Observable of clicks or an Observable of interval, at random\n * ```ts\n * import { defer, fromEvent, interval } from 'rxjs';\n *\n * const clicksOrInterval = defer(function () {\n * return Math.random() > 0.5\n * ? fromEvent(document, 'click')\n * : interval(1000);\n * });\n * clicksOrInterval.subscribe(x => console.log(x));\n *\n * // Results in the following behavior:\n * // If the result of Math.random() is greater than 0.5 it will listen\n * // for clicks anywhere on the \"document\"; when document is clicked it\n * // will log a MouseEvent object to the console. If the result is less\n * // than 0.5 it will emit ascending numbers, one every second(1000ms).\n * ```\n *\n * @see {@link Observable}\n *\n * @param {function(): ObservableInput} observableFactory The Observable\n * factory function to invoke for each Observer that subscribes to the output\n * Observable. May also return a Promise, which will be converted on the fly\n * to an Observable.\n * @return {Observable} An Observable whose Observers' subscriptions trigger\n * an invocation of the given Observable factory function.\n */\nexport function defer>(observableFactory: () => R): Observable> {\n return new Observable>((subscriber) => {\n innerFrom(observableFactory()).subscribe(subscriber);\n });\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\n/**\n * The same Observable instance returned by any call to {@link empty} without a\n * `scheduler`. It is preferable to use this over `empty()`.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * ## Examples\n *\n * ### Log complete notification\n *\n * ```ts\n * import { EMPTY } from 'rxjs';\n *\n * EMPTY.subscribe({\n * next: () => console.log('Next'),\n * complete: () => console.log('Complete!')\n * });\n *\n * // Outputs\n * // Complete!\n * ```\n */\nexport const EMPTY = new Observable((subscriber) => subscriber.complete());\n\n/**\n * Creates an Observable that emits no items to the Observer and immediately\n * emits a complete notification.\n *\n * Just emits 'complete', and nothing else.\n *\n * ![](empty.png)\n *\n * This static operator is useful for creating a simple Observable that only\n * emits the complete notification. It can be used for composing with other\n * Observables, such as in a {@link mergeMap}.\n *\n * ## Examples\n *\n * ### Emit the number 7, then complete\n *\n * ```ts\n * import { empty } from 'rxjs';\n * import { startWith } from 'rxjs/operators';\n *\n * const result = empty().pipe(startWith(7));\n * result.subscribe(x => console.log(x));\n *\n * // Outputs\n * // 7\n * ```\n *\n * ### Map and flatten only odd numbers to the sequence 'a', 'b', 'c'\n *\n * ```ts\n * import { empty, interval, of } from 'rxjs';\n * import { mergeMap } from 'rxjs/operators';\n *\n * const interval$ = interval(1000);\n * const result = interval$.pipe(\n * mergeMap(x => x % 2 === 1 ? of('a', 'b', 'c') : empty()),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following to the console:\n * // x is equal to the count on the interval, e.g. (0, 1, 2, 3, ...)\n * // x will occur every 1000ms\n * // if x % 2 is equal to 1, print a, b, c (each on its own)\n * // if x % 2 is not equal to 1, nothing will be output\n * ```\n *\n * @see {@link Observable}\n * @see {@link never}\n * @see {@link of}\n * @see {@link throwError}\n *\n * @param scheduler A {@link SchedulerLike} to use for scheduling\n * the emission of the complete notification.\n * @return An \"empty\" Observable: emits only the complete\n * notification.\n * @deprecated Replaced with the {@link EMPTY} constant or {@link scheduled} (e.g. `scheduled([], scheduler)`). Will be removed in v8.\n */\nexport function empty(scheduler?: SchedulerLike) {\n return scheduler ? emptyScheduled(scheduler) : EMPTY;\n}\n\nfunction emptyScheduled(scheduler: SchedulerLike) {\n return new Observable((subscriber) => scheduler.schedule(() => subscriber.complete()));\n}\n","import { Observable } from '../Observable';\nimport { ObservedValueOf, ObservableInputTuple, ObservableInput } from '../types';\nimport { argsArgArrayOrObject } from '../util/argsArgArrayOrObject';\nimport { innerFrom } from './innerFrom';\nimport { popResultSelector } from '../util/args';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\nimport { createObject } from '../util/createObject';\nimport { AnyCatcher } from '../AnyCatcher';\n\n// forkJoin(any)\n// We put this first because we need to catch cases where the user has supplied\n// _exactly `any`_ as the argument. Since `any` literally matches _anything_,\n// we don't want it to randomly hit one of the other type signatures below,\n// as we have no idea at build-time what type we should be returning when given an any.\n\n/**\n * You have passed `any` here, we can't figure out if it is\n * an array or an object, so you're getting `unknown`. Use better types.\n * @param arg Something typed as `any`\n */\nexport function forkJoin(arg: T): Observable;\n\n// forkJoin(null | undefined)\nexport function forkJoin(scheduler: null | undefined): Observable;\n\n// forkJoin([a, b, c])\nexport function forkJoin(sources: readonly []): Observable;\nexport function forkJoin(sources: readonly [...ObservableInputTuple]): Observable;\nexport function forkJoin(\n sources: readonly [...ObservableInputTuple],\n resultSelector: (...values: A) => R\n): Observable;\n\n// forkJoin(a, b, c)\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function forkJoin(...sources: [...ObservableInputTuple]): Observable;\n/** @deprecated Pass an array of sources instead. The rest-parameters signature will be removed in v8. Details: https://rxjs.dev/deprecations/array-argument */\nexport function forkJoin(\n ...sourcesAndResultSelector: [...ObservableInputTuple, (...values: A) => R]\n): Observable;\n\n// forkJoin({a, b, c})\nexport function forkJoin(sourcesObject: { [K in any]: never }): Observable;\nexport function forkJoin>>(\n sourcesObject: T\n): Observable<{ [K in keyof T]: ObservedValueOf }>;\n\n/**\n * Accepts an `Array` of {@link ObservableInput} or a dictionary `Object` of {@link ObservableInput} and returns\n * an {@link Observable} that emits either an array of values in the exact same order as the passed array,\n * or a dictionary of values in the same shape as the passed dictionary.\n *\n * Wait for Observables to complete and then combine last values they emitted;\n * complete immediately if an empty array is passed.\n *\n * ![](forkJoin.png)\n *\n * `forkJoin` is an operator that takes any number of input observables which can be passed either as an array\n * or a dictionary of input observables. If no input observables are provided (e.g. an empty array is passed),\n * then the resulting stream will complete immediately.\n *\n * `forkJoin` will wait for all passed observables to emit and complete and then it will emit an array or an object with last\n * values from corresponding observables.\n *\n * If you pass an array of `n` observables to the operator, then the resulting\n * array will have `n` values, where the first value is the last one emitted by the first observable,\n * second value is the last one emitted by the second observable and so on.\n *\n * If you pass a dictionary of observables to the operator, then the resulting\n * objects will have the same keys as the dictionary passed, with their last values they have emitted\n * located at the corresponding key.\n *\n * That means `forkJoin` will not emit more than once and it will complete after that. If you need to emit combined\n * values not only at the end of the lifecycle of passed observables, but also throughout it, try out {@link combineLatest}\n * or {@link zip} instead.\n *\n * In order for the resulting array to have the same length as the number of input observables, whenever any of\n * the given observables completes without emitting any value, `forkJoin` will complete at that moment as well\n * and it will not emit anything either, even if it already has some last values from other observables.\n * Conversely, if there is an observable that never completes, `forkJoin` will never complete either,\n * unless at any point some other observable completes without emitting a value, which brings us back to\n * the previous case. Overall, in order for `forkJoin` to emit a value, all given observables\n * have to emit something at least once and complete.\n *\n * If any given observable errors at some point, `forkJoin` will error as well and immediately unsubscribe\n * from the other observables.\n *\n * Optionally `forkJoin` accepts a `resultSelector` function, that will be called with values which normally\n * would land in the emitted array. Whatever is returned by the `resultSelector`, will appear in the output\n * observable instead. This means that the default `resultSelector` can be thought of as a function that takes\n * all its arguments and puts them into an array. Note that the `resultSelector` will be called only\n * when `forkJoin` is supposed to emit a result.\n *\n * ## Examples\n *\n * ### Use forkJoin with a dictionary of observable inputs\n * ```ts\n * import { forkJoin, of, timer } from 'rxjs';\n *\n * const observable = forkJoin({\n * foo: of(1, 2, 3, 4),\n * bar: Promise.resolve(8),\n * baz: timer(4000),\n * });\n * observable.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('This is how it ends!'),\n * });\n *\n * // Logs:\n * // { foo: 4, bar: 8, baz: 0 } after 4 seconds\n * // \"This is how it ends!\" immediately after\n * ```\n *\n * ### Use forkJoin with an array of observable inputs\n * ```ts\n * import { forkJoin, of, timer } from 'rxjs';\n *\n * const observable = forkJoin([\n * of(1, 2, 3, 4),\n * Promise.resolve(8),\n * timer(4000),\n * ]);\n * observable.subscribe({\n * next: value => console.log(value),\n * complete: () => console.log('This is how it ends!'),\n * });\n *\n * // Logs:\n * // [4, 8, 0] after 4 seconds\n * // \"This is how it ends!\" immediately after\n * ```\n *\n * @see {@link combineLatest}\n * @see {@link zip}\n *\n * @param {...ObservableInput} args Any number of Observables provided either as an array or as an arguments\n * passed directly to the operator.\n * @param {function} [project] Function that takes values emitted by input Observables and returns value\n * that will appear in resulting Observable instead of default array.\n * @return {Observable} Observable emitting either an array of last values emitted by passed Observables\n * or value from project function.\n */\nexport function forkJoin(...args: any[]): Observable {\n const resultSelector = popResultSelector(args);\n const { args: sources, keys } = argsArgArrayOrObject(args);\n const result = new Observable((subscriber) => {\n const { length } = sources;\n if (!length) {\n subscriber.complete();\n return;\n }\n const values = new Array(length);\n let remainingCompletions = length;\n let remainingEmissions = length;\n for (let sourceIndex = 0; sourceIndex < length; sourceIndex++) {\n let hasValue = false;\n innerFrom(sources[sourceIndex]).subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n if (!hasValue) {\n hasValue = true;\n remainingEmissions--;\n }\n values[sourceIndex] = value;\n },\n () => remainingCompletions--,\n undefined,\n () => {\n if (!remainingCompletions || !hasValue) {\n if (!remainingEmissions) {\n subscriber.next(keys ? createObject(keys, values) : values);\n }\n subscriber.complete();\n }\n }\n )\n );\n }\n });\n return resultSelector ? result.pipe(mapOneOrManyArgs(resultSelector)) : result;\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, SchedulerLike, ObservedValueOf } from '../types';\nimport { scheduled } from '../scheduled/scheduled';\nimport { innerFrom } from './innerFrom';\n\nexport function from>(input: O): Observable>;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function from>(input: O, scheduler: SchedulerLike | undefined): Observable>;\n\n/**\n * Creates an Observable from an Array, an array-like object, a Promise, an iterable object, or an Observable-like object.\n *\n * Converts almost anything to an Observable.\n *\n * ![](from.png)\n *\n * `from` converts various other objects and data types into Observables. It also converts a Promise, an array-like, or an\n * iterable\n * object into an Observable that emits the items in that promise, array, or iterable. A String, in this context, is treated\n * as an array of characters. Observable-like objects (contains a function named with the ES2015 Symbol for Observable) can also be\n * converted through this operator.\n *\n * ## Examples\n *\n * ### Converts an array to an Observable\n *\n * ```ts\n * import { from } from 'rxjs';\n *\n * const array = [10, 20, 30];\n * const result = from(array);\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 10\n * // 20\n * // 30\n * ```\n *\n * ---\n *\n * ### Convert an infinite iterable (from a generator) to an Observable\n *\n * ```ts\n * import { from } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * function* generateDoubles(seed) {\n * let i = seed;\n * while (true) {\n * yield i;\n * i = 2 * i; // double it\n * }\n * }\n *\n * const iterator = generateDoubles(3);\n * const result = from(iterator).pipe(take(10));\n *\n * result.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 3\n * // 6\n * // 12\n * // 24\n * // 48\n * // 96\n * // 192\n * // 384\n * // 768\n * // 1536\n * ```\n *\n * ---\n *\n * ### With async scheduler\n *\n * ```ts\n * import { from, asyncScheduler } from 'rxjs';\n *\n * console.log('start');\n *\n * const array = [10, 20, 30];\n * const result = from(array, asyncScheduler);\n *\n * result.subscribe(x => console.log(x));\n *\n * console.log('end');\n *\n * // Logs:\n * // start\n * // end\n * // 10\n * // 20\n * // 30\n * ```\n *\n * @see {@link fromEvent}\n * @see {@link fromEventPattern}\n *\n * @param {ObservableInput} A subscription object, a Promise, an Observable-like,\n * an Array, an iterable, or an array-like object to be converted.\n * @param {SchedulerLike} An optional {@link SchedulerLike} on which to schedule the emission of values.\n * @return {Observable}\n */\nexport function from(input: ObservableInput, scheduler?: SchedulerLike): Observable {\n return scheduler ? scheduled(input, scheduler) : innerFrom(input);\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { Observable } from '../Observable';\nimport { mergeMap } from '../operators/mergeMap';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isFunction } from '../util/isFunction';\nimport { mapOneOrManyArgs } from '../util/mapOneOrManyArgs';\n\n// These constants are used to create handler registry functions using array mapping below.\nconst nodeEventEmitterMethods = ['addListener', 'removeListener'] as const;\nconst eventTargetMethods = ['addEventListener', 'removeEventListener'] as const;\nconst jqueryMethods = ['on', 'off'] as const;\n\nexport interface NodeStyleEventEmitter {\n addListener(eventName: string | symbol, handler: NodeEventHandler): this;\n removeListener(eventName: string | symbol, handler: NodeEventHandler): this;\n}\n\nexport type NodeEventHandler = (...args: any[]) => void;\n\n// For APIs that implement `addListener` and `removeListener` methods that may\n// not use the same arguments or return EventEmitter values\n// such as React Native\nexport interface NodeCompatibleEventEmitter {\n addListener(eventName: string, handler: NodeEventHandler): void | {};\n removeListener(eventName: string, handler: NodeEventHandler): void | {};\n}\n\n// Use handler types like those in @types/jquery. See:\n// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/847731ba1d7fa6db6b911c0e43aa0afe596e7723/types/jquery/misc.d.ts#L6395\nexport interface JQueryStyleEventEmitter {\n on(eventName: string, handler: (this: TContext, t: T, ...args: any[]) => any): void;\n off(eventName: string, handler: (this: TContext, t: T, ...args: any[]) => any): void;\n}\n\nexport interface EventListenerObject {\n handleEvent(evt: E): void;\n}\n\nexport interface HasEventTargetAddRemove {\n addEventListener(\n type: string,\n listener: ((evt: E) => void) | EventListenerObject | null,\n options?: boolean | AddEventListenerOptions\n ): void;\n removeEventListener(\n type: string,\n listener: ((evt: E) => void) | EventListenerObject | null,\n options?: EventListenerOptions | boolean\n ): void;\n}\n\nexport interface EventListenerOptions {\n capture?: boolean;\n passive?: boolean;\n once?: boolean;\n}\n\nexport interface AddEventListenerOptions extends EventListenerOptions {\n once?: boolean;\n passive?: boolean;\n}\n\nexport function fromEvent(target: HasEventTargetAddRemove | ArrayLike>, eventName: string): Observable;\nexport function fromEvent(\n target: HasEventTargetAddRemove | ArrayLike>,\n eventName: string,\n resultSelector: (event: T) => R\n): Observable;\nexport function fromEvent(\n target: HasEventTargetAddRemove | ArrayLike>,\n eventName: string,\n options: EventListenerOptions\n): Observable;\nexport function fromEvent(\n target: HasEventTargetAddRemove | ArrayLike>,\n eventName: string,\n options: EventListenerOptions,\n resultSelector: (event: T) => R\n): Observable;\n\nexport function fromEvent(target: NodeStyleEventEmitter | ArrayLike, eventName: string): Observable;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function fromEvent(target: NodeStyleEventEmitter | ArrayLike, eventName: string): Observable;\nexport function fromEvent(\n target: NodeStyleEventEmitter | ArrayLike,\n eventName: string,\n resultSelector: (...args: any[]) => R\n): Observable;\n\nexport function fromEvent(\n target: NodeCompatibleEventEmitter | ArrayLike,\n eventName: string\n): Observable;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function fromEvent(target: NodeCompatibleEventEmitter | ArrayLike, eventName: string): Observable;\nexport function fromEvent(\n target: NodeCompatibleEventEmitter | ArrayLike,\n eventName: string,\n resultSelector: (...args: any[]) => R\n): Observable;\n\nexport function fromEvent(\n target: JQueryStyleEventEmitter | ArrayLike>,\n eventName: string\n): Observable;\nexport function fromEvent(\n target: JQueryStyleEventEmitter | ArrayLike>,\n eventName: string,\n resultSelector: (value: T, ...args: any[]) => R\n): Observable;\n\n/**\n * Creates an Observable that emits events of a specific type coming from the\n * given event target.\n *\n * Creates an Observable from DOM events, or Node.js\n * EventEmitter events or others.\n *\n * ![](fromEvent.png)\n *\n * `fromEvent` accepts as a first argument event target, which is an object with methods\n * for registering event handler functions. As a second argument it takes string that indicates\n * type of event we want to listen for. `fromEvent` supports selected types of event targets,\n * which are described in detail below. If your event target does not match any of the ones listed,\n * you should use {@link fromEventPattern}, which can be used on arbitrary APIs.\n * When it comes to APIs supported by `fromEvent`, their methods for adding and removing event\n * handler functions have different names, but they all accept a string describing event type\n * and function itself, which will be called whenever said event happens.\n *\n * Every time resulting Observable is subscribed, event handler function will be registered\n * to event target on given event type. When that event fires, value\n * passed as a first argument to registered function will be emitted by output Observable.\n * When Observable is unsubscribed, function will be unregistered from event target.\n *\n * Note that if event target calls registered function with more than one argument, second\n * and following arguments will not appear in resulting stream. In order to get access to them,\n * you can pass to `fromEvent` optional project function, which will be called with all arguments\n * passed to event handler. Output Observable will then emit value returned by project function,\n * instead of the usual value.\n *\n * Remember that event targets listed below are checked via duck typing. It means that\n * no matter what kind of object you have and no matter what environment you work in,\n * you can safely use `fromEvent` on that object if it exposes described methods (provided\n * of course they behave as was described above). So for example if Node.js library exposes\n * event target which has the same method names as DOM EventTarget, `fromEvent` is still\n * a good choice.\n *\n * If the API you use is more callback then event handler oriented (subscribed\n * callback function fires only once and thus there is no need to manually\n * unregister it), you should use {@link bindCallback} or {@link bindNodeCallback}\n * instead.\n *\n * `fromEvent` supports following types of event targets:\n *\n * **DOM EventTarget**\n *\n * This is an object with `addEventListener` and `removeEventListener` methods.\n *\n * In the browser, `addEventListener` accepts - apart from event type string and event\n * handler function arguments - optional third parameter, which is either an object or boolean,\n * both used for additional configuration how and when passed function will be called. When\n * `fromEvent` is used with event target of that type, you can provide this values\n * as third parameter as well.\n *\n * **Node.js EventEmitter**\n *\n * An object with `addListener` and `removeListener` methods.\n *\n * **JQuery-style event target**\n *\n * An object with `on` and `off` methods\n *\n * **DOM NodeList**\n *\n * List of DOM Nodes, returned for example by `document.querySelectorAll` or `Node.childNodes`.\n *\n * Although this collection is not event target in itself, `fromEvent` will iterate over all Nodes\n * it contains and install event handler function in every of them. When returned Observable\n * is unsubscribed, function will be removed from all Nodes.\n *\n * **DOM HtmlCollection**\n *\n * Just as in case of NodeList it is a collection of DOM nodes. Here as well event handler function is\n * installed and removed in each of elements.\n *\n *\n * ## Examples\n * ### Emits clicks happening on the DOM document\n * ```ts\n * import { fromEvent } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * clicks.subscribe(x => console.log(x));\n *\n * // Results in:\n * // MouseEvent object logged to console every time a click\n * // occurs on the document.\n * ```\n *\n * ### Use addEventListener with capture option\n * ```ts\n * import { fromEvent } from 'rxjs';\n *\n * const clicksInDocument = fromEvent(document, 'click', true); // note optional configuration parameter\n * // which will be passed to addEventListener\n * const clicksInDiv = fromEvent(someDivInDocument, 'click');\n *\n * clicksInDocument.subscribe(() => console.log('document'));\n * clicksInDiv.subscribe(() => console.log('div'));\n *\n * // By default events bubble UP in DOM tree, so normally\n * // when we would click on div in document\n * // \"div\" would be logged first and then \"document\".\n * // Since we specified optional `capture` option, document\n * // will catch event when it goes DOWN DOM tree, so console\n * // will log \"document\" and then \"div\".\n * ```\n *\n * @see {@link bindCallback}\n * @see {@link bindNodeCallback}\n * @see {@link fromEventPattern}\n *\n * @param {FromEventTarget} target The DOM EventTarget, Node.js\n * EventEmitter, JQuery-like event target, NodeList or HTMLCollection to attach the event handler to.\n * @param {string} eventName The event name of interest, being emitted by the\n * `target`.\n * @param {EventListenerOptions} [options] Options to pass through to addEventListener\n * @return {Observable}\n */\nexport function fromEvent(\n target: any,\n eventName: string,\n options?: EventListenerOptions | ((...args: any[]) => T),\n resultSelector?: (...args: any[]) => T\n): Observable {\n if (isFunction(options)) {\n resultSelector = options;\n options = undefined;\n }\n if (resultSelector) {\n return fromEvent(target, eventName, options as EventListenerOptions).pipe(mapOneOrManyArgs(resultSelector));\n }\n\n // Figure out our add and remove methods. In order to do this,\n // we are going to analyze the target in a preferred order, if\n // the target matches a given signature, we take the two \"add\" and \"remove\"\n // method names and apply them to a map to create opposite versions of the\n // same function. This is because they all operate in duplicate pairs,\n // `addListener(name, handler)`, `removeListener(name, handler)`, for example.\n // The call only differs by method name, as to whether or not you're adding or removing.\n const [add, remove] =\n // If it is an EventTarget, we need to use a slightly different method than the other two patterns.\n isEventTarget(target)\n ? eventTargetMethods.map((methodName) => (handler: any) => target[methodName](eventName, handler, options as EventListenerOptions))\n : // In all other cases, the call pattern is identical with the exception of the method names.\n isNodeStyleEventEmitter(target)\n ? nodeEventEmitterMethods.map(toCommonHandlerRegistry(target, eventName))\n : isJQueryStyleEventEmitter(target)\n ? jqueryMethods.map(toCommonHandlerRegistry(target, eventName))\n : [];\n\n // If add is falsy, it's because we didn't match a pattern above.\n // Check to see if it is an ArrayLike, because if it is, we want to\n // try to apply fromEvent to all of it's items. We do this check last,\n // because there are may be some types that are both ArrayLike *and* implement\n // event registry points, and we'd rather delegate to that when possible.\n if (!add) {\n if (isArrayLike(target)) {\n return mergeMap((subTarget: any) => fromEvent(subTarget, eventName, options as EventListenerOptions))(\n innerFrom(target)\n ) as Observable;\n }\n }\n\n // If add is falsy and we made it here, it's because we didn't\n // match any valid target objects above.\n if (!add) {\n throw new TypeError('Invalid event target');\n }\n\n return new Observable((subscriber) => {\n // The handler we are going to register. Forwards the event object, by itself, or\n // an array of arguments to the event handler, if there is more than one argument,\n // to the consumer.\n const handler = (...args: any[]) => subscriber.next(1 < args.length ? args : args[0]);\n // Do the work of adding the handler to the target.\n add(handler);\n // When we teardown, we want to remove the handler and free up memory.\n return () => remove!(handler);\n });\n}\n\n/**\n * Used to create `add` and `remove` functions to register and unregister event handlers\n * from a target in the most common handler pattern, where there are only two arguments.\n * (e.g. `on(name, fn)`, `off(name, fn)`, `addListener(name, fn)`, or `removeListener(name, fn)`)\n * @param target The target we're calling methods on\n * @param eventName The event name for the event we're creating register or unregister functions for\n */\nfunction toCommonHandlerRegistry(target: any, eventName: string) {\n return (methodName: string) => (handler: any) => target[methodName](eventName, handler);\n}\n\n/**\n * Checks to see if the target implements the required node-style EventEmitter methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isNodeStyleEventEmitter(target: any): target is NodeStyleEventEmitter {\n return isFunction(target.addListener) && isFunction(target.removeListener);\n}\n\n/**\n * Checks to see if the target implements the required jQuery-style EventEmitter methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isJQueryStyleEventEmitter(target: any): target is JQueryStyleEventEmitter {\n return isFunction(target.on) && isFunction(target.off);\n}\n\n/**\n * Checks to see if the target implements the required EventTarget methods\n * for adding and removing event handlers.\n * @param target the object to check\n */\nfunction isEventTarget(target: any): target is HasEventTargetAddRemove {\n return isFunction(target.addEventListener) && isFunction(target.removeEventListener);\n}\n","import { isArrayLike } from '../util/isArrayLike';\nimport { isPromise } from '../util/isPromise';\nimport { Observable } from '../Observable';\nimport { ObservableInput, ReadableStreamLike } from '../types';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isIterable } from '../util/isIterable';\nimport { isReadableStreamLike, readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\nimport { Subscriber } from '../Subscriber';\nimport { isFunction } from '../util/isFunction';\nimport { reportUnhandledError } from '../util/reportUnhandledError';\nimport { observable as Symbol_observable } from '../symbol/observable';\n\nexport function innerFrom(input: ObservableInput): Observable {\n if (input instanceof Observable) {\n return input;\n }\n if (input != null) {\n if (isInteropObservable(input)) {\n return fromInteropObservable(input);\n }\n if (isArrayLike(input)) {\n return fromArrayLike(input);\n }\n if (isPromise(input)) {\n return fromPromise(input);\n }\n if (isAsyncIterable(input)) {\n return fromAsyncIterable(input);\n }\n if (isIterable(input)) {\n return fromIterable(input);\n }\n if (isReadableStreamLike(input)) {\n return fromReadableStreamLike(input);\n }\n }\n\n throw createInvalidObservableTypeError(input);\n}\n\n/**\n * Creates an RxJS Observable from an object that implements `Symbol.observable`.\n * @param obj An object that properly implements `Symbol.observable`.\n */\nexport function fromInteropObservable(obj: any) {\n return new Observable((subscriber: Subscriber) => {\n const obs = obj[Symbol_observable]();\n if (isFunction(obs.subscribe)) {\n return obs.subscribe(subscriber);\n }\n // Should be caught by observable subscribe function error handling.\n throw new TypeError('Provided object does not correctly implement Symbol.observable');\n });\n}\n\n/**\n * Synchronously emits the values of an array like and completes.\n * This is exported because there are creation functions and operators that need to\n * make direct use of the same logic, and there's no reason to make them run through\n * `from` conditionals because we *know* they're dealing with an array.\n * @param array The array to emit values from\n */\nexport function fromArrayLike(array: ArrayLike) {\n return new Observable((subscriber: Subscriber) => {\n // Loop over the array and emit each value. Note two things here:\n // 1. We're making sure that the subscriber is not closed on each loop.\n // This is so we don't continue looping over a very large array after\n // something like a `take`, `takeWhile`, or other synchronous unsubscription\n // has already unsubscribed.\n // 2. In this form, reentrant code can alter that array we're looping over.\n // This is a known issue, but considered an edge case. The alternative would\n // be to copy the array before executing the loop, but this has\n // performance implications.\n for (let i = 0; i < array.length && !subscriber.closed; i++) {\n subscriber.next(array[i]);\n }\n subscriber.complete();\n });\n}\n\nexport function fromPromise(promise: PromiseLike) {\n return new Observable((subscriber: Subscriber) => {\n promise\n .then(\n (value) => {\n if (!subscriber.closed) {\n subscriber.next(value);\n subscriber.complete();\n }\n },\n (err: any) => subscriber.error(err)\n )\n .then(null, reportUnhandledError);\n });\n}\n\nexport function fromIterable(iterable: Iterable) {\n return new Observable((subscriber: Subscriber) => {\n for (const value of iterable) {\n subscriber.next(value);\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n });\n}\n\nexport function fromAsyncIterable(asyncIterable: AsyncIterable) {\n return new Observable((subscriber: Subscriber) => {\n process(asyncIterable, subscriber).catch((err) => subscriber.error(err));\n });\n}\n\nexport function fromReadableStreamLike(readableStream: ReadableStreamLike) {\n return fromAsyncIterable(readableStreamLikeToAsyncGenerator(readableStream));\n}\n\nasync function process(asyncIterable: AsyncIterable, subscriber: Subscriber) {\n for await (const value of asyncIterable) {\n subscriber.next(value);\n // A side-effect may have closed our subscriber,\n // check before the next iteration.\n if (subscriber.closed) {\n return;\n }\n }\n subscriber.complete();\n}\n","import { Observable } from '../Observable';\nimport { asyncScheduler } from '../scheduler/async';\nimport { SchedulerLike } from '../types';\nimport { timer } from './timer';\n\n/**\n * Creates an Observable that emits sequential numbers every specified\n * interval of time, on a specified {@link SchedulerLike}.\n *\n * Emits incremental numbers periodically in time.\n * \n *\n * ![](interval.png)\n *\n * `interval` returns an Observable that emits an infinite sequence of\n * ascending integers, with a constant interval of time of your choosing\n * between those emissions. The first emission is not sent immediately, but\n * only after the first period has passed. By default, this operator uses the\n * `async` {@link SchedulerLike} to provide a notion of time, but you may pass any\n * {@link SchedulerLike} to it.\n *\n * ## Example\n * Emits ascending numbers, one every second (1000ms) up to the number 3\n * ```ts\n * import { interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const numbers = interval(1000);\n *\n * const takeFourNumbers = numbers.pipe(take(4));\n *\n * takeFourNumbers.subscribe(x => console.log('Next: ', x));\n *\n * // Logs:\n * // Next: 0\n * // Next: 1\n * // Next: 2\n * // Next: 3\n * ```\n *\n * @see {@link timer}\n * @see {@link delay}\n *\n * @param {number} [period=0] The interval size in milliseconds (by default)\n * or the time unit determined by the scheduler's clock.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for scheduling\n * the emission of values, and providing a notion of \"time\".\n * @return {Observable} An Observable that emits a sequential number each time\n * interval.\n */\nexport function interval(period = 0, scheduler: SchedulerLike = asyncScheduler): Observable {\n if (period < 0) {\n // We cannot schedule an interval in the past.\n period = 0;\n }\n\n return timer(period, period, scheduler);\n}\n","import { Observable } from '../Observable';\nimport { ObservableInput, ObservableInputTuple, SchedulerLike } from '../types';\nimport { mergeAll } from '../operators/mergeAll';\nimport { innerFrom } from './innerFrom';\nimport { EMPTY } from './empty';\nimport { popNumber, popScheduler } from '../util/args';\nimport { from } from './from';\n\nexport function merge(...sources: [...ObservableInputTuple]): Observable;\nexport function merge(...sourcesAndConcurrency: [...ObservableInputTuple, number?]): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function merge(\n ...sourcesAndScheduler: [...ObservableInputTuple, SchedulerLike?]\n): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `mergeAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function merge(\n ...sourcesAndConcurrencyAndScheduler: [...ObservableInputTuple, number?, SchedulerLike?]\n): Observable;\n\n/**\n * Creates an output Observable which concurrently emits all values from every\n * given input Observable.\n *\n * Flattens multiple Observables together by blending\n * their values into one Observable.\n *\n * ![](merge.png)\n *\n * `merge` subscribes to each given input Observable (as arguments), and simply\n * forwards (without doing any transformation) all the values from all the input\n * Observables to the output Observable. The output Observable only completes\n * once all input Observables have completed. Any error delivered by an input\n * Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n * ### Merge together two Observables: 1s interval and clicks\n * ```ts\n * import { merge, fromEvent, interval } from 'rxjs';\n *\n * const clicks = fromEvent(document, 'click');\n * const timer = interval(1000);\n * const clicksOrTimer = merge(clicks, timer);\n * clicksOrTimer.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // timer will emit ascending values, one every second(1000ms) to console\n * // clicks logs MouseEvents to console everytime the \"document\" is clicked\n * // Since the two streams are merged you see these happening\n * // as they occur.\n * ```\n *\n * ### Merge together 3 Observables, but only 2 run concurrently\n * ```ts\n * import { merge, interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const timer1 = interval(1000).pipe(take(10));\n * const timer2 = interval(2000).pipe(take(6));\n * const timer3 = interval(500).pipe(take(10));\n * const concurrent = 2; // the argument\n * const merged = merge(timer1, timer2, timer3, concurrent);\n * merged.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - First timer1 and timer2 will run concurrently\n * // - timer1 will emit a value every 1000ms for 10 iterations\n * // - timer2 will emit a value every 2000ms for 6 iterations\n * // - after timer1 hits its max iteration, timer2 will\n * // continue, and timer3 will start to run concurrently with timer2\n * // - when timer2 hits its max iteration it terminates, and\n * // timer3 will continue to emit a value every 500ms until it is complete\n * ```\n *\n * @see {@link mergeAll}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n *\n * @param {...ObservableInput} observables Input Observables to merge together.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @param {SchedulerLike} [scheduler=null] The {@link SchedulerLike} to use for managing\n * concurrency of input Observables.\n * @return {Observable} an Observable that emits items that are the result of\n * every input Observable.\n */\nexport function merge(...args: (ObservableInput | number | SchedulerLike)[]): Observable {\n const scheduler = popScheduler(args);\n const concurrent = popNumber(args, Infinity);\n const sources = args as ObservableInput[];\n return !sources.length\n ? // No source provided\n EMPTY\n : sources.length === 1\n ? // One source? Just return it.\n innerFrom(sources[0])\n : // Merge all sources\n mergeAll(concurrent)(from(sources, scheduler));\n}\n","import { Observable } from '../Observable';\nimport { noop } from '../util/noop';\n\n/**\n * An Observable that emits no items to the Observer and never completes.\n *\n * ![](never.png)\n *\n * A simple Observable that emits neither values nor errors nor the completion\n * notification. It can be used for testing purposes or for composing with other\n * Observables. Please note that by never emitting a complete notification, this\n * Observable keeps the subscription from being disposed automatically.\n * Subscriptions need to be manually disposed.\n *\n * ## Example\n * ### Emit the number 7, then never emit anything else (not even complete)\n * ```ts\n * import { NEVER } from 'rxjs';\n * import { startWith } from 'rxjs/operators';\n *\n * function info() {\n * console.log('Will not be called');\n * }\n * const result = NEVER.pipe(startWith(7));\n * result.subscribe(x => console.log(x), info, info);\n *\n * ```\n *\n * @see {@link Observable}\n * @see {@link index/EMPTY}\n * @see {@link of}\n * @see {@link throwError}\n */\nexport const NEVER = new Observable(noop);\n\n/**\n * @deprecated Replaced with the {@link NEVER} constant. Will be removed in v8.\n */\nexport function never() {\n return NEVER;\n}\n","import { SchedulerLike, ValueFromArray } from '../types';\nimport { Observable } from '../Observable';\nimport { popScheduler } from '../util/args';\nimport { from } from './from';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function of(value: null): Observable;\nexport function of(value: undefined): Observable;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of(scheduler: SchedulerLike): Observable;\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function of(...valuesAndScheduler: [...A, SchedulerLike]): Observable>;\n\nexport function of(): Observable;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function of(): Observable;\nexport function of(value: T): Observable;\nexport function of(...values: A): Observable>;\n\n/**\n * Converts the arguments to an observable sequence.\n *\n * Each argument becomes a `next` notification.\n *\n * ![](of.png)\n *\n * Unlike {@link from}, it does not do any flattening and emits each argument in whole\n * as a separate `next` notification.\n *\n * ## Examples\n *\n * Emit the values `10, 20, 30`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of(10, 20, 30)\n * .subscribe(\n * next => console.log('next:', next),\n * err => console.log('error:', err),\n * () => console.log('the end'),\n * );\n *\n * // Outputs\n * // next: 10\n * // next: 20\n * // next: 30\n * // the end\n * ```\n *\n * Emit the array `[1, 2, 3]`\n *\n * ```ts\n * import { of } from 'rxjs';\n *\n * of([1, 2, 3])\n * .subscribe(\n * next => console.log('next:', next),\n * err => console.log('error:', err),\n * () => console.log('the end'),\n * );\n *\n * // Outputs\n * // next: [1, 2, 3]\n * // the end\n * ```\n *\n * @see {@link from}\n * @see {@link range}\n *\n * @param {...T} values A comma separated list of arguments you want to be emitted\n * @return {Observable} An Observable that emits the arguments\n * described above and then completes.\n */\nexport function of(...args: Array): Observable {\n const scheduler = popScheduler(args);\n return from(args as T[], scheduler);\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { SchedulerLike } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/**\n * Creates an observable that will create an error instance and push it to the consumer as an error\n * immediately upon subscription.\n *\n * Just errors and does nothing else\n *\n * ![](throw.png)\n *\n * This creation function is useful for creating an observable that will create an error and error every\n * time it is subscribed to. Generally, inside of most operators when you might want to return an errored\n * observable, this is unnecessary. In most cases, such as in the inner return of {@link concatMap},\n * {@link mergeMap}, {@link defer}, and many others, you can simply throw the error, and RxJS will pick\n * that up and notify the consumer of the error.\n *\n * ## Example\n *\n * Create a simple observable that will create a new error with a timestamp and log it\n * and the message every time you subscribe to it.\n *\n * ```ts\n * import { throwError } from 'rxjs';\n *\n * let errorCount = 0;\n *\n * const errorWithTimestamp$ = throwError(() => {\n * const error: any = new Error(`This is error number ${++errorCount}`);\n * error.timestamp = Date.now();\n * return error;\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * errorWithTimestamp$.subscribe({\n * error: err => console.log(err.timestamp, err.message)\n * });\n *\n * // Logs the timestamp and a new error message each subscription;\n * ```\n *\n * ## Unnecessary usage\n *\n * Using `throwError` inside of an operator or creation function\n * with a callback, is usually not necessary:\n *\n * ```ts\n * import { throwError, timer, of } from 'rxjs';\n * import { concatMap } from 'rxjs/operators';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // This is probably overkill.\n * return throwError(() => new Error(`Invalid time ${ms}`));\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * You can just throw the error instead:\n *\n * ```ts\n * import { throwError, timer, of } from 'rxjs';\n * import { concatMap } from 'rxjs/operators';\n *\n * const delays$ = of(1000, 2000, Infinity, 3000);\n *\n * delays$.pipe(\n * concatMap(ms => {\n * if (ms < 10000) {\n * return timer(ms);\n * } else {\n * // Cleaner and easier to read for most folks.\n * throw new Error(`Invalid time ${ms}`);\n * }\n * })\n * )\n * .subscribe({\n * next: console.log,\n * error: console.error\n * });\n * ```\n *\n * @param errorFactory A factory function that will create the error instance that is pushed.\n */\nexport function throwError(errorFactory: () => any): Observable;\n\n/**\n * Returns an observable that will error with the specified error immediately upon subscription.\n *\n * @param error The error instance to emit\n * @deprecated Support for passing an error value will be removed in v8. Instead, pass a factory function to `throwError(() => new Error('test'))`. This is\n * because it will create the error at the moment it should be created and capture a more appropriate stack trace. If\n * for some reason you need to create the error ahead of time, you can still do that: `const err = new Error('test'); throwError(() => err);`.\n */\nexport function throwError(error: any): Observable;\n\n/**\n * Notifies the consumer of an error using a given scheduler by scheduling it at delay `0` upon subscription.\n *\n * @param errorOrErrorFactory An error instance or error factory\n * @param scheduler A scheduler to use to schedule the error notification\n * @deprecated The `scheduler` parameter will be removed in v8.\n * Use `throwError` in combination with {@link observeOn}: `throwError(() => new Error('test')).pipe(observeOn(scheduler));`.\n * Details: https://rxjs.dev/deprecations/scheduler-argument\n */\nexport function throwError(errorOrErrorFactory: any, scheduler: SchedulerLike): Observable;\n\nexport function throwError(errorOrErrorFactory: any, scheduler?: SchedulerLike): Observable {\n const errorFactory = isFunction(errorOrErrorFactory) ? errorOrErrorFactory : () => errorOrErrorFactory;\n const init = (subscriber: Subscriber) => subscriber.error(errorFactory());\n return new Observable(scheduler ? (subscriber) => scheduler.schedule(init as any, 0, subscriber) : init);\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { async as asyncScheduler } from '../scheduler/async';\nimport { isScheduler } from '../util/isScheduler';\nimport { isValidDate } from '../util/isDate';\n\n/**\n * Creates an observable that will wait for a specified time period, or exact date, before\n * emitting the number 0.\n *\n * Used to emit a notification after a delay.\n *\n * This observable is useful for creating delays in code, or racing against other values\n * for ad-hoc timeouts.\n *\n * The `delay` is specified by default in milliseconds, however providing a custom scheduler could\n * create a different behavior.\n *\n * ## Examples\n *\n * ### Wait 3 seconds and start another observable\n *\n * You might want to use `timer` to delay subscription to an\n * observable by a set amount of time. Here we use a timer with\n * {@link concatMapTo} or {@link concatMap} in order to wait\n * a few seconds and start a subscription to a source.\n *\n * ```ts\n * import { timer, of } from 'rxjs';\n * import { concatMapTo } from 'rxjs/operators';\n *\n * // This could be any observable\n * const source = of(1, 2, 3);\n *\n * const result = timer(3000).pipe(\n * concatMapTo(source)\n * )\n * .subscribe(console.log);\n * ```\n *\n * ### Take all of the values until the start of the next minute\n *\n * Using a `Date` as the trigger for the first emission, you can\n * do things like wait until midnight to fire an event, or in this case,\n * wait until a new minute starts (chosen so the example wouldn't take\n * too long to run) in order to stop watching a stream. Leveraging\n * {@link takeUntil}.\n *\n * ```ts\n * import { interval, timer } from 'rxjs';\n * import { takeUntil } from 'rxjs/operators';\n *\n * // Build a Date object that marks the\n * // next minute.\n * const currentDate = new Date();\n * const startOfNextMinute = new Date(\n * currentDate.getFullYear(),\n * currentDate.getMonth(),\n * currentDate.getDate(),\n * currentDate.getHours(),\n * currentDate.getMinutes() + 1,\n * )\n *\n * // This could be any observable stream\n * const source = interval(1000);\n *\n * const result = source.pipe(\n * takeUntil(timer(startOfNextMinute))\n * );\n *\n * result.subscribe(console.log);\n * ```\n *\n * ### Known Limitations\n *\n * - The {@link asyncScheduler} uses `setTimeout` which has limitations for how far in the future it can be scheduled.\n *\n * - If a `scheduler` is provided that returns a timestamp other than an epoch from `now()`, and\n * a `Date` object is passed to the `dueTime` argument, the calculation for when the first emission\n * should occur will be incorrect. In this case, it would be best to do your own calculations\n * ahead of time, and pass a `number` in as the `dueTime`.\n *\n * @param due If a `number`, the amount of time in milliseconds to wait before emitting.\n * If a `Date`, the exact time at which to emit.\n * @param scheduler The scheduler to use to schedule the delay. Defaults to {@link asyncScheduler}.\n */\nexport function timer(due: number | Date, scheduler?: SchedulerLike): Observable<0>;\n\n/**\n * Creates an observable that starts an interval after a specified delay, emitting incrementing numbers -- starting at `0` --\n * on each interval after words.\n *\n * The `delay` and `intervalDuration` are specified by default in milliseconds, however providing a custom scheduler could\n * create a different behavior.\n *\n * ## Example\n *\n * ### Start an interval that starts right away\n *\n * Since {@link index/interval} waits for the passed delay before starting,\n * sometimes that's not ideal. You may want to start an interval immediately.\n * `timer` works well for this. Here we have both side-by-side so you can\n * see them in comparison.\n *\n * Note that this observable will never complete.\n *\n * ```ts\n * import { timer, interval } from 'rxjs';\n *\n * timer(0, 1000).subscribe(n => console.log('timer', n));\n * interval(1000).subscribe(n => console.log('interval', n));\n * ```\n *\n * ### Known Limitations\n *\n * - The {@link asyncScheduler} uses `setTimeout` which has limitations for how far in the future it can be scheduled.\n *\n * - If a `scheduler` is provided that returns a timestamp other than an epoch from `now()`, and\n * a `Date` object is passed to the `dueTime` argument, the calculation for when the first emission\n * should occur will be incorrect. In this case, it would be best to do your own calculations\n * ahead of time, and pass a `number` in as the `startDue`.\n * @param startDue If a `number`, is the time to wait before starting the interval.\n * If a `Date`, is the exact time at which to start the interval.\n * @param intervalDuration The delay between each value emitted in the interval. Passing a\n * negative number here will result in immediate completion after the first value is emitted, as though\n * no `intervalDuration` was passed at all.\n * @param scheduler The scheduler to use to schedule the delay. Defaults to {@link asyncScheduler}.\n */\nexport function timer(startDue: number | Date, intervalDuration: number, scheduler?: SchedulerLike): Observable;\n\n/**\n * @deprecated The signature allowing `undefined` to be passed for `intervalDuration` will be removed in v8. Use the `timer(dueTime, scheduler?)` signature instead.\n */\nexport function timer(dueTime: number | Date, unused: undefined, scheduler?: SchedulerLike): Observable<0>;\n\nexport function timer(\n dueTime: number | Date = 0,\n intervalOrScheduler?: number | SchedulerLike,\n scheduler: SchedulerLike = asyncScheduler\n): Observable {\n // Since negative intervalDuration is treated as though no\n // interval was specified at all, we start with a negative number.\n let intervalDuration = -1;\n\n if (intervalOrScheduler != null) {\n // If we have a second argument, and it's a scheduler,\n // override the scheduler we had defaulted. Otherwise,\n // it must be an interval.\n if (isScheduler(intervalOrScheduler)) {\n scheduler = intervalOrScheduler;\n } else {\n // Note that this *could* be negative, in which case\n // it's like not passing an intervalDuration at all.\n intervalDuration = intervalOrScheduler;\n }\n }\n\n return new Observable((subscriber) => {\n // If a valid date is passed, calculate how long to wait before\n // executing the first value... otherwise, if it's a number just schedule\n // that many milliseconds (or scheduler-specified unit size) in the future.\n let due = isValidDate(dueTime) ? +dueTime - scheduler!.now() : dueTime;\n\n if (due < 0) {\n // Ensure we don't schedule in the future.\n due = 0;\n }\n\n // The incrementing value we emit.\n let n = 0;\n\n // Start the timer.\n return scheduler.schedule(function () {\n if (!subscriber.closed) {\n // Emit the next value and increment.\n subscriber.next(n++);\n\n if (0 <= intervalDuration) {\n // If we have a interval after the initial timer,\n // reschedule with the period.\n this.schedule(undefined, intervalDuration);\n } else {\n // We didn't have an interval. So just complete.\n subscriber.complete();\n }\n }\n }, due);\n });\n}\n","import { Observable } from '../Observable';\nimport { ObservableInputTuple } from '../types';\nimport { innerFrom } from './innerFrom';\nimport { argsOrArgArray } from '../util/argsOrArgArray';\nimport { EMPTY } from './empty';\nimport { OperatorSubscriber } from '../operators/OperatorSubscriber';\nimport { popResultSelector } from '../util/args';\n\nexport function zip(sources: [...ObservableInputTuple]): Observable;\nexport function zip(\n sources: [...ObservableInputTuple],\n resultSelector: (...values: A) => R\n): Observable;\nexport function zip(...sources: [...ObservableInputTuple]): Observable;\nexport function zip(\n ...sourcesAndResultSelector: [...ObservableInputTuple, (...values: A) => R]\n): Observable;\n\n/**\n * Combines multiple Observables to create an Observable whose values are calculated from the values, in order, of each\n * of its input Observables.\n *\n * If the last parameter is a function, this function is used to compute the created value from the input values.\n * Otherwise, an array of the input values is returned.\n *\n * ## Example\n *\n * Combine age and name from different sources\n *\n * ```ts\n * import { zip, of } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * let age$ = of(27, 25, 29);\n * let name$ = of('Foo', 'Bar', 'Beer');\n * let isDev$ = of(true, true, false);\n *\n * zip(age$, name$, isDev$).pipe(\n * map(([age, name, isDev]) => ({ age, name, isDev }))\n * )\n * .subscribe(x => console.log(x));\n *\n * // Outputs\n * // { age: 27, name: 'Foo', isDev: true }\n * // { age: 25, name: 'Bar', isDev: true }\n * // { age: 29, name: 'Beer', isDev: false }\n * ```\n * @param sources\n * @return {Observable}\n */\nexport function zip(...args: unknown[]): Observable {\n const resultSelector = popResultSelector(args);\n\n const sources = argsOrArgArray(args) as Observable[];\n\n return sources.length\n ? new Observable((subscriber) => {\n // A collection of buffers of values from each source.\n // Keyed by the same index with which the sources were passed in.\n let buffers: unknown[][] = sources.map(() => []);\n\n // An array of flags of whether or not the sources have completed.\n // This is used to check to see if we should complete the result.\n // Keyed by the same index with which the sources were passed in.\n let completed = sources.map(() => false);\n\n // When everything is done, release the arrays above.\n subscriber.add(() => {\n buffers = completed = null!;\n });\n\n // Loop over our sources and subscribe to each one. The index `i` is\n // especially important here, because we use it in closures below to\n // access the related buffers and completion properties\n for (let sourceIndex = 0; !subscriber.closed && sourceIndex < sources.length; sourceIndex++) {\n innerFrom(sources[sourceIndex]).subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n buffers[sourceIndex].push(value);\n // if every buffer has at least one value in it, then we\n // can shift out the oldest value from each buffer and emit\n // them as an array.\n if (buffers.every((buffer) => buffer.length)) {\n const result: any = buffers.map((buffer) => buffer.shift()!);\n // Emit the array. If theres' a result selector, use that.\n subscriber.next(resultSelector ? resultSelector(...result) : result);\n // If any one of the sources is both complete and has an empty buffer\n // then we complete the result. This is because we cannot possibly have\n // any more values to zip together.\n if (buffers.some((buffer, i) => !buffer.length && completed[i])) {\n subscriber.complete();\n }\n }\n },\n () => {\n // This source completed. Mark it as complete so we can check it later\n // if we have to.\n completed[sourceIndex] = true;\n // But, if this complete source has nothing in its buffer, then we\n // can complete the result, because we can't possibly have any more\n // values from this to zip together with the other values.\n !buffers[sourceIndex].length && subscriber.complete();\n }\n )\n );\n }\n\n // When everything is done, release the arrays above.\n return () => {\n buffers = completed = null!;\n };\n })\n : EMPTY;\n}\n","import { Subscriber } from '../Subscriber';\n\n/**\n * A generic helper for allowing operators to be created with a Subscriber and\n * use closures to capture necessary state from the operator function itself.\n */\nexport class OperatorSubscriber extends Subscriber {\n /**\n * Creates an instance of an `OperatorSubscriber`.\n * @param destination The downstream subscriber.\n * @param onNext Handles next values, only called if this subscriber is not stopped or closed. Any\n * error that occurs in this function is caught and sent to the `error` method of this subscriber.\n * @param onError Handles errors from the subscription, any errors that occur in this handler are caught\n * and send to the `destination` error handler.\n * @param onComplete Handles completion notification from the subscription. Any errors that occur in\n * this handler are sent to the `destination` error handler.\n * @param onFinalize Additional teardown logic here. This will only be called on teardown if the\n * subscriber itself is not already closed. This is called after all other teardown logic is executed.\n */\n constructor(\n destination: Subscriber,\n onNext?: (value: T) => void,\n onComplete?: () => void,\n onError?: (err: any) => void,\n private onFinalize?: () => void\n ) {\n // It's important - for performance reasons - that all of this class's\n // members are initialized and that they are always initialized in the same\n // order. This will ensure that all OperatorSubscriber instances have the\n // same hidden class in V8. This, in turn, will help keep the number of\n // hidden classes involved in property accesses within the base class as\n // low as possible. If the number of hidden classes involved exceeds four,\n // the property accesses will become megamorphic and performance penalties\n // will be incurred - i.e. inline caches won't be used.\n //\n // The reasons for ensuring all instances have the same hidden class are\n // further discussed in this blog post from Benedikt Meurer:\n // https://benediktmeurer.de/2018/03/23/impact-of-polymorphism-on-component-based-frameworks-like-react/\n super(destination);\n this._next = onNext\n ? function (this: OperatorSubscriber, value: T) {\n try {\n onNext(value);\n } catch (err) {\n destination.error(err);\n }\n }\n : super._next;\n this._error = onError\n ? function (this: OperatorSubscriber, err: any) {\n try {\n onError(err);\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure teardown.\n this.unsubscribe();\n }\n }\n : super._error;\n this._complete = onComplete\n ? function (this: OperatorSubscriber) {\n try {\n onComplete();\n } catch (err) {\n // Send any errors that occur down stream.\n destination.error(err);\n } finally {\n // Ensure teardown.\n this.unsubscribe();\n }\n }\n : super._complete;\n }\n\n unsubscribe() {\n const { closed } = this;\n super.unsubscribe();\n // Execute additional teardown if we have any and we didn't already do so.\n !closed && this.onFinalize?.();\n }\n}\n","import { Subscriber } from '../Subscriber';\nimport { MonoTypeOperatorFunction, ObservableInput } from '../types';\n\nimport { operate } from '../util/lift';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Ignores source values for a duration determined by another Observable, then\n * emits the most recent value from the source Observable, then repeats this\n * process.\n *\n * It's like {@link auditTime}, but the silencing\n * duration is determined by a second Observable.\n *\n * ![](audit.svg)\n *\n * `audit` is similar to `throttle`, but emits the last value from the silenced\n * time window, instead of the first value. `audit` emits the most recent value\n * from the source Observable on the output Observable as soon as its internal\n * timer becomes disabled, and ignores source values while the timer is enabled.\n * Initially, the timer is disabled. As soon as the first source value arrives,\n * the timer is enabled by calling the `durationSelector` function with the\n * source value, which returns the \"duration\" Observable. When the duration\n * Observable emits a value, the timer is disabled, then the most\n * recent source value is emitted on the output Observable, and this process\n * repeats for the next source value.\n *\n * ## Example\n *\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { audit } from 'rxjs/operators'\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(audit(ev => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link delayWhen}\n * @see {@link sample}\n * @see {@link throttle}\n *\n * @param durationSelector A function\n * that receives a value from the source Observable, for computing the silencing\n * duration, returned as an Observable or a Promise.\n * @return A function that returns an Observable that performs rate-limiting of\n * emissions from the source Observable.\n */\nexport function audit(durationSelector: (value: T) => ObservableInput): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n let lastValue: T | null = null;\n let durationSubscriber: Subscriber | null = null;\n let isComplete = false;\n\n const endDuration = () => {\n durationSubscriber?.unsubscribe();\n durationSubscriber = null;\n if (hasValue) {\n hasValue = false;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n isComplete && subscriber.complete();\n };\n\n const cleanupDuration = () => {\n durationSubscriber = null;\n isComplete && subscriber.complete();\n };\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n lastValue = value;\n if (!durationSubscriber) {\n innerFrom(durationSelector(value)).subscribe(\n (durationSubscriber = new OperatorSubscriber(subscriber, endDuration, cleanupDuration))\n );\n }\n },\n () => {\n isComplete = true;\n (!hasValue || !durationSubscriber || durationSubscriber.closed) && subscriber.complete();\n }\n )\n );\n });\n}\n","import { async } from '../scheduler/async';\nimport { audit } from './audit';\nimport { timer } from '../observable/timer';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\n\n/**\n * Ignores source values for `duration` milliseconds, then emits the most recent\n * value from the source Observable, then repeats this process.\n *\n * When it sees a source value, it ignores that plus\n * the next ones for `duration` milliseconds, and then it emits the most recent\n * value from the source.\n *\n * ![](auditTime.png)\n *\n * `auditTime` is similar to `throttleTime`, but emits the last value from the\n * silenced time window, instead of the first value. `auditTime` emits the most\n * recent value from the source Observable on the output Observable as soon as\n * its internal timer becomes disabled, and ignores source values while the\n * timer is enabled. Initially, the timer is disabled. As soon as the first\n * source value arrives, the timer is enabled. After `duration` milliseconds (or\n * the time unit determined internally by the optional `scheduler`) has passed,\n * the timer is disabled, then the most recent source value is emitted on the\n * output Observable, and this process repeats for the next source value.\n * Optionally takes a {@link SchedulerLike} for managing timers.\n *\n * ## Example\n *\n * Emit clicks at a rate of at most one click per second\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { auditTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(auditTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link debounceTime}\n * @see {@link delay}\n * @see {@link sampleTime}\n * @see {@link throttleTime}\n *\n * @param {number} duration Time to wait before emitting the most recent source\n * value, measured in milliseconds or the time unit determined internally\n * by the optional `scheduler`.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the rate-limiting behavior.\n * @return A function that returns an Observable that performs rate-limiting of\n * emissions from the source Observable.\n */\nexport function auditTime(duration: number, scheduler: SchedulerLike = async): MonoTypeOperatorFunction {\n return audit(() => timer(duration, scheduler));\n}\n","import { Observable } from '../Observable';\n\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { Subscription } from '../Subscription';\nimport { innerFrom } from '../observable/innerFrom';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { operate } from '../util/lift';\n\n/* tslint:disable:max-line-length */\nexport function catchError>(\n selector: (err: any, caught: Observable) => O\n): OperatorFunction>;\n/* tslint:enable:max-line-length */\n\n/**\n * Catches errors on the observable to be handled by returning a new observable or throwing an error.\n *\n * \n * It only listens to the error channel and ignores notifications.\n * Handles errors from the source observable, and maps them to a new observable.\n * The error may also be rethrown, or a new error can be thrown to emit an error from the result.\n * \n *\n * ![](catch.png)\n *\n * This operator handles errors, but forwards along all other events to the resulting observable.\n * If the source observable terminates with an error, it will map that error to a new observable,\n * subscribe to it, and forward all of its events to the resulting observable.\n *\n * ## Examples\n * Continues with a different Observable when there's an error\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { map, catchError } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5).pipe(\n * map(n => {\n * \t if (n === 4) {\n * \t throw 'four!';\n * }\n *\t return n;\n * }),\n * catchError(err => of('I', 'II', 'III', 'IV', 'V')),\n * )\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, I, II, III, IV, V\n * ```\n *\n * Retries the caught source Observable again in case of error, similar to retry() operator\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { map, catchError, take } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5).pipe(\n * map(n => {\n * \t if (n === 4) {\n * \t throw 'four!';\n * }\n * \t return n;\n * }),\n * catchError((err, caught) => caught),\n * take(30),\n * )\n * .subscribe(x => console.log(x));\n * // 1, 2, 3, 1, 2, 3, ...\n * ```\n *\n * Throws a new error when the source Observable throws an error\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { map, catchError } from 'rxjs/operators';\n *\n * of(1, 2, 3, 4, 5).pipe(\n * map(n => {\n * if (n === 4) {\n * throw 'four!';\n * }\n * return n;\n * }),\n * catchError(err => {\n * throw 'error in source. Details: ' + err;\n * }),\n * )\n * .subscribe(\n * x => console.log(x),\n * err => console.log(err)\n * );\n * // 1, 2, 3, error in source. Details: four!\n * ```\n *\n * @see {@link onErrorResumeNext}\n * @see {@link repeat}\n * @see {@link repeatWhen}\n * @see {@link retry }\n * @see {@link retryWhen}\n *\n * @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which\n * is the source observable, in case you'd like to \"retry\" that observable by returning it again. Whatever observable\n * is returned by the `selector` will be used to continue the observable chain.\n * @return A function that returns an Observable that originates from either\n * the source or the Observable returned by the `selector` function.\n */\nexport function catchError>(\n selector: (err: any, caught: Observable) => O\n): OperatorFunction> {\n return operate((source, subscriber) => {\n let innerSub: Subscription | null = null;\n let syncUnsub = false;\n let handledResult: Observable>;\n\n innerSub = source.subscribe(\n new OperatorSubscriber(subscriber, undefined, undefined, (err) => {\n handledResult = innerFrom(selector(err, catchError(selector)(source)));\n if (innerSub) {\n innerSub.unsubscribe();\n innerSub = null;\n handledResult.subscribe(subscriber);\n } else {\n // We don't have an innerSub yet, that means the error was synchronous\n // because the subscribe call hasn't returned yet.\n syncUnsub = true;\n }\n })\n );\n\n if (syncUnsub) {\n // We have a synchronous error, we need to make sure to\n // teardown right away. This ensures that `finalize` is called\n // at the right time, and that teardown occurs at the expected\n // time between the source error and the subscription to the\n // next observable.\n innerSub.unsubscribe();\n innerSub = null;\n handledResult!.subscribe(subscriber);\n }\n });\n}\n","import { mergeAll } from './mergeAll';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable by\n * concatenating the inner Observables in order.\n *\n * Flattens an Observable-of-Observables by putting one\n * inner Observable after the other.\n *\n * ![](concatAll.svg)\n *\n * Joins every Observable emitted by the source (a higher-order Observable), in\n * a serial fashion. It subscribes to each inner Observable only after the\n * previous inner Observable has completed, and merges all of their values into\n * the returned observable.\n *\n * __Warning:__ If the source Observable emits Observables quickly and\n * endlessly, and the inner Observables it emits generally complete slower than\n * the source emits, you can run into memory issues as the incoming Observables\n * collect in an unbounded buffer.\n *\n * Note: `concatAll` is equivalent to `mergeAll` with concurrency parameter set\n * to `1`.\n *\n * ## Example\n *\n * For each click event, tick every second from 0 to 3, with no concurrency\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { map, take, concatAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map(ev => interval(1000).pipe(take(4))),\n * );\n * const firstOrder = higherOrder.pipe(concatAll());\n * firstOrder.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concat}\n * @see {@link concatMap}\n * @see {@link concatMapTo}\n * @see {@link exhaustAll}\n * @see {@link mergeAll}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @return A function that returns an Observable emitting values from all the\n * inner Observables concatenated.\n */\nexport function concatAll>(): OperatorFunction> {\n return mergeAll(1);\n}\n","import { mergeMap } from './mergeMap';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function concatMap>(\n project: (value: T, index: number) => O\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function concatMap>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, in a serialized fashion waiting for each one to complete before\n * merging the next.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link concatAll}.\n *\n * ![](concatMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each new inner Observable is\n * concatenated with the previous inner Observable.\n *\n * __Warning:__ if source values arrive endlessly and faster than their\n * corresponding inner Observables can complete, it will result in memory issues\n * as inner Observables amass in an unbounded buffer waiting for their turn to\n * be subscribed to.\n *\n * Note: `concatMap` is equivalent to `mergeMap` with concurrency parameter set\n * to `1`.\n *\n * ## Example\n * For each click event, tick every second from 0 to 3, with no concurrency\n *\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { concatMap, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * concatMap(ev => interval(1000).pipe(take(4)))\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // (results are not concurrent)\n * // For every click on the \"document\" it will emit values 0 to 3 spaced\n * // on a 1000ms interval\n * // one click = 1000ms-> 0 -1000ms-> 1 -1000ms-> 2 -1000ms-> 3\n * ```\n *\n * @see {@link concat}\n * @see {@link concatAll}\n * @see {@link concatMapTo}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * values from each projected inner Observable sequentially.\n */\nexport function concatMap>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return isFunction(resultSelector) ? mergeMap(project, resultSelector, 1) : mergeMap(project, 1);\n}\n","import { OperatorFunction, ObservableInput, ObservedValueOf, SubjectLike } from '../types';\nimport { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { from } from '../observable/from';\nimport { operate } from '../util/lift';\nimport { fromSubscribable } from '../observable/fromSubscribable';\n\n/**\n * An object used to configure {@link connect} operator.\n */\nexport interface ConnectConfig {\n /**\n * A factory function used to create the Subject through which the source\n * is multicast. By default this creates a {@link Subject}.\n */\n connector: () => SubjectLike;\n}\n\n/**\n * The default configuration for `connect`.\n */\nconst DEFAULT_CONFIG: ConnectConfig = {\n connector: () => new Subject(),\n};\n\n/**\n * Creates an observable by multicasting the source within a function that\n * allows the developer to define the usage of the multicast prior to connection.\n *\n * This is particularly useful if the observable source you wish to multicast could\n * be synchronous or asynchronous. This sets it apart from {@link share}, which, in the\n * case of totally synchronous sources will fail to share a single subscription with\n * multiple consumers, as by the time the subscription to the result of {@link share}\n * has returned, if the source is synchronous its internal reference count will jump from\n * 0 to 1 back to 0 and reset.\n *\n * To use `connect`, you provide a `selector` function that will give you\n * a multicast observable that is not yet connected. You then use that multicast observable\n * to create a resulting observable that, when subscribed, will set up your multicast. This is\n * generally, but not always, accomplished with {@link merge}.\n *\n * Note that using a {@link takeUntil} inside of `connect`'s `selector` _might_ mean you were looking\n * to use the {@link takeWhile} operator instead.\n *\n * When you subscribe to the result of `connect`, the `selector` function will be called. After\n * the `selector` function returns, the observable it returns will be subscribed to, _then_ the\n * multicast will be connected to the source.\n *\n * ### Example\n *\n * Sharing a totally synchronous observable\n *\n * ```ts\n * import { defer, merge, of } from 'rxjs';\n * import { tap, connect, filter, map } from 'rxjs/operators';\n *\n * const source$ = defer(() => {\n * console.log('subscription started');\n * return of(1, 2, 3, 4, 5).pipe(\n * tap(n => console.log(`source emitted ${n}`))\n * );\n * });\n *\n * source$.pipe(\n * // Notice in here we're merging 3 subscriptions to `shared$`.\n * connect((shared$) => merge(\n * shared$.pipe(map(n => `all ${n}`)),\n * shared$.pipe(filter(n => n % 2 === 0), map(n => `even ${n}`)),\n * shared$.pipe(filter(n => n % 2 === 1), map(n => `odd ${n}`)),\n * ))\n * )\n * .subscribe(console.log);\n *\n * // Expected output: (notice only one subscription)\n * \"subscription started\"\n * \"source emitted 1\"\n * \"all 1\"\n * \"odd 1\"\n * \"source emitted 2\"\n * \"all 2\"\n * \"even 2\"\n * \"source emitted 3\"\n * \"all 3\"\n * \"odd 3\"\n * \"source emitted 4\"\n * \"all 4\"\n * \"even 4\"\n * \"source emitted 5\"\n * \"all 5\"\n * \"odd 5\"\n * ```\n *\n * @param selector A function used to set up the multicast. Gives you a multicast observable\n * that is not yet connected. With that, you're expected to create and return\n * and Observable, that when subscribed to, will utilize the multicast observable.\n * After this function is executed -- and its return value subscribed to -- the\n * the operator will subscribe to the source, and the connection will be made.\n * @param config The configuration object for `connect`.\n */\nexport function connect>(\n selector: (shared: Observable) => O,\n config: ConnectConfig = DEFAULT_CONFIG\n): OperatorFunction> {\n const { connector } = config;\n return operate((source, subscriber) => {\n const subject = connector();\n from(selector(fromSubscribable(subject))).subscribe(subscriber);\n subscriber.add(source.subscribe(subject));\n });\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { Subscribable } from '../types';\n\n/**\n * Used to convert a subscribable to an observable.\n *\n * Currently, this is only used within internals.\n *\n * TODO: Discuss ObservableInput supporting \"Subscribable\".\n * https://github.com/ReactiveX/rxjs/issues/5909\n *\n * @param subscribable A subscribable\n */\nexport function fromSubscribable(subscribable: Subscribable) {\n return new Observable((subscriber: Subscriber) => subscribable.subscribe(subscriber));\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction, SchedulerAction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits a notification from the source Observable only after a particular time span\n * has passed without another source emission.\n *\n * It's like {@link delay}, but passes only the most\n * recent notification from each burst of emissions.\n *\n * ![](debounceTime.png)\n *\n * `debounceTime` delays notifications emitted by the source Observable, but drops\n * previous pending delayed emissions if a new notification arrives on the source\n * Observable. This operator keeps track of the most recent notification from the\n * source Observable, and emits that only when `dueTime` has passed\n * without any other notification appearing on the source Observable. If a new value\n * appears before `dueTime` silence occurs, the previous notification will be dropped\n * and will not be emitted and a new `dueTime` is scheduled.\n * If the completing event happens during `dueTime` the last cached notification\n * is emitted before the completion event is forwarded to the output observable.\n * If the error event happens during `dueTime` or after it only the error event is\n * forwarded to the output observable. The cache notification is not emitted in this case.\n *\n * This is a rate-limiting operator, because it is impossible for more than one\n * notification to be emitted in any time window of duration `dueTime`, but it is also\n * a delay-like operator since output emissions do not occur at the same time as\n * they did on the source Observable. Optionally takes a {@link SchedulerLike} for\n * managing timers.\n *\n * ## Example\n * Emit the most recent click after a burst of clicks\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { debounceTime } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(debounceTime(1000));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link audit}\n * @see {@link auditTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link throttle}\n * @see {@link throttleTime}\n *\n * @param {number} dueTime The timeout duration in milliseconds (or the time\n * unit determined internally by the optional `scheduler`) for the window of\n * time required to wait for emission silence before emitting the most recent\n * source value.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the timeout for each value.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified `dueTime`, and may drop some values\n * if they occur too frequently.\n */\nexport function debounceTime(dueTime: number, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let activeTask: Subscription | null = null;\n let lastValue: T | null = null;\n let lastTime: number | null = null;\n\n const emit = () => {\n if (activeTask) {\n // We have a value! Free up memory first, then emit the value.\n activeTask.unsubscribe();\n activeTask = null;\n const value = lastValue!;\n lastValue = null;\n subscriber.next(value);\n }\n };\n function emitWhenIdle(this: SchedulerAction) {\n // This is called `dueTime` after the first value\n // but we might have received new values during this window!\n\n const targetTime = lastTime! + dueTime;\n const now = scheduler.now();\n if (now < targetTime) {\n // On that case, re-schedule to the new target\n activeTask = this.schedule(undefined, targetTime - now);\n subscriber.add(activeTask);\n return;\n }\n\n emit();\n }\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n lastValue = value;\n lastTime = scheduler.now();\n\n // Only set up a task if it's not already up\n if (!activeTask) {\n activeTask = scheduler.schedule(emitWhenIdle, dueTime);\n subscriber.add(activeTask);\n }\n },\n () => {\n // Source completed.\n // Emit any pending debounced values then complete\n emit();\n subscriber.complete();\n },\n // Pass all errors through to consumer.\n undefined,\n () => {\n // Teardown.\n lastValue = activeTask = null;\n }\n )\n );\n });\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits a given value if the source Observable completes without emitting any\n * `next` value, otherwise mirrors the source Observable.\n *\n * If the source Observable turns out to be empty, then\n * this operator will emit a default value.\n *\n * ![](defaultIfEmpty.png)\n *\n * `defaultIfEmpty` emits the values emitted by the source Observable or a\n * specified default value if the source Observable is empty (completes without\n * having emitted any `next` value).\n *\n * ## Example\n * If no clicks happen in 5 seconds, then emit \"no clicks\"\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { defaultIfEmpty, takeUntil } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const clicksBeforeFive = clicks.pipe(takeUntil(interval(5000)));\n * const result = clicksBeforeFive.pipe(defaultIfEmpty('no clicks'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link empty}\n * @see {@link last}\n *\n * @param defaultValue The default value used if the source\n * Observable is empty.\n * @return A function that returns an Observable that emits either the\n * specified `defaultValue` if the source Observable emits no items, or the\n * values emitted by the source Observable.\n */\nexport function defaultIfEmpty(defaultValue: R): OperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n subscriber.next(value);\n },\n () => {\n if (!hasValue) {\n subscriber.next(defaultValue!);\n }\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { delayWhen } from './delayWhen';\nimport { timer } from '../observable/timer';\n\n/**\n * Delays the emission of items from the source Observable by a given timeout or\n * until a given Date.\n *\n * Time shifts each item by some specified amount of\n * milliseconds.\n *\n * ![](delay.png)\n *\n * If the delay argument is a Number, this operator time shifts the source\n * Observable by that amount of time expressed in milliseconds. The relative\n * time intervals between the values are preserved.\n *\n * If the delay argument is a Date, this operator time shifts the start of the\n * Observable execution until the given date occurs.\n *\n * ## Examples\n * Delay each click by one second\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { delay } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const delayedClicks = clicks.pipe(delay(1000)); // each click emitted after 1 second\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * Delay all clicks until a future date happens\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { delay } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const date = new Date('March 15, 2050 12:00:00'); // in the future\n * const delayedClicks = clicks.pipe(delay(date)); // click emitted only after that date\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link delayWhen}\n * @see {@link throttle}\n * @see {@link throttleTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link audit}\n * @see {@link auditTime}\n *\n * @param {number|Date} due The delay duration in milliseconds (a `number`) or\n * a `Date` until which the emission of the source items is delayed.\n * @param {SchedulerLike} [scheduler=async] The {@link SchedulerLike} to use for\n * managing the timers that handle the time-shift for each item.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by the specified timeout or Date.\n */\nexport function delay(due: number | Date, scheduler: SchedulerLike = asyncScheduler): MonoTypeOperatorFunction {\n const duration = timer(due, scheduler);\n return delayWhen(() => duration);\n}\n","import { Observable } from '../Observable';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { concat } from '../observable/concat';\nimport { take } from './take';\nimport { ignoreElements } from './ignoreElements';\nimport { mapTo } from './mapTo';\nimport { mergeMap } from './mergeMap';\n\n/** @deprecated The `subscriptionDelay` parameter will be removed in v8. */\nexport function delayWhen(\n delayDurationSelector: (value: T, index: number) => Observable,\n subscriptionDelay: Observable\n): MonoTypeOperatorFunction;\nexport function delayWhen(delayDurationSelector: (value: T, index: number) => Observable): MonoTypeOperatorFunction;\n\n/**\n * Delays the emission of items from the source Observable by a given time span\n * determined by the emissions of another Observable.\n *\n * It's like {@link delay}, but the time span of the\n * delay duration is determined by a second Observable.\n *\n * ![](delayWhen.png)\n *\n * `delayWhen` time shifts each emitted value from the source Observable by a\n * time span determined by another Observable. When the source emits a value,\n * the `delayDurationSelector` function is called with the source value as\n * argument, and should return an Observable, called the \"duration\" Observable.\n * The source value is emitted on the output Observable only when the duration\n * Observable emits a value or completes.\n * The completion of the notifier triggering the emission of the source value\n * is deprecated behavior and will be removed in future versions.\n *\n * Optionally, `delayWhen` takes a second argument, `subscriptionDelay`, which\n * is an Observable. When `subscriptionDelay` emits its first value or\n * completes, the source Observable is subscribed to and starts behaving like\n * described in the previous paragraph. If `subscriptionDelay` is not provided,\n * `delayWhen` will subscribe to the source Observable as soon as the output\n * Observable is subscribed.\n *\n * ## Example\n * Delay each click by a random amount of time, between 0 and 5 seconds\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { delayWhen } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const delayedClicks = clicks.pipe(\n * delayWhen(event => interval(Math.random() * 5000)),\n * );\n * delayedClicks.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link delay}\n * @see {@link throttle}\n * @see {@link throttleTime}\n * @see {@link debounce}\n * @see {@link debounceTime}\n * @see {@link sample}\n * @see {@link sampleTime}\n * @see {@link audit}\n * @see {@link auditTime}\n *\n * @param {function(value: T, index: number): Observable} delayDurationSelector A function that\n * returns an Observable for each value emitted by the source Observable, which\n * is then used to delay the emission of that item on the output Observable\n * until the Observable returned from this function emits a value.\n * @param {Observable} subscriptionDelay An Observable that triggers the\n * subscription to the source Observable once it emits any value.\n * @return A function that returns an Observable that delays the emissions of\n * the source Observable by an amount of time specified by the Observable\n * returned by `delayDurationSelector`.\n */\nexport function delayWhen(\n delayDurationSelector: (value: T, index: number) => Observable,\n subscriptionDelay?: Observable\n): MonoTypeOperatorFunction {\n if (subscriptionDelay) {\n // DEPRECATED PATH\n return (source: Observable) =>\n concat(subscriptionDelay.pipe(take(1), ignoreElements()), source.pipe(delayWhen(delayDurationSelector)));\n }\n\n return mergeMap((value, index) => delayDurationSelector(value, index).pipe(take(1), mapTo(value)));\n}\n","import { observeNotification } from '../Notification';\nimport { OperatorFunction, ObservableNotification, ValueFromNotification } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Converts an Observable of {@link ObservableNotification} objects into the emissions\n * that they represent.\n *\n * Unwraps {@link ObservableNotification} objects as actual `next`,\n * `error` and `complete` emissions. The opposite of {@link materialize}.\n *\n * ![](dematerialize.png)\n *\n * `dematerialize` is assumed to operate an Observable that only emits\n * {@link ObservableNotification} objects as `next` emissions, and does not emit any\n * `error`. Such Observable is the output of a `materialize` operation. Those\n * notifications are then unwrapped using the metadata they contain, and emitted\n * as `next`, `error`, and `complete` on the output Observable.\n *\n * Use this operator in conjunction with {@link materialize}.\n *\n * ## Example\n *\n * Convert an Observable of Notifications to an actual Observable\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { dematerialize } from 'rxjs/operators';\n *\n * const notifA = { kind: 'N', value: 'A' };\n * const notifB = { kind: 'N', value: 'B' };\n * const notifE = { kind: 'E', error: new TypeError('x.toUpperCase is not a function') }\n *\n * const materialized = of(notifA, notifB, notifE);\n *\n * const upperCase = materialized.pipe(dematerialize());\n * upperCase.subscribe({\n * next: x => console.log(x),\n * error: e => console.error(e)\n * });\n *\n * // Results in:\n * // A\n * // B\n * // TypeError: x.toUpperCase is not a function\n * ```\n * @see {@link materialize}\n *\n * @return A function that returns an Observable that emits items and\n * notifications embedded in Notification objects emitted by the source\n * Observable.\n */\nexport function dematerialize>(): OperatorFunction> {\n return operate((source, subscriber) => {\n source.subscribe(new OperatorSubscriber(subscriber, (notification) => observeNotification(notification, subscriber)));\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { identity } from '../util/identity';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Returns a result {@link Observable} that emits all values pushed by the source observable if they\n * are distinct in comparison to the last value the result observable emitted.\n *\n * 1. It will always emit the first value from the source.\n * 2. For all subsequent values pushed by the source, they will be compared to the previously emitted values\n * using the provided `comparator` or an `===` equality check.\n * 3. If the value pushed by the source is determined to be unequal by this check, that value is emitted and\n * becomes the new \"previously emitted value\" internally.\n *\n * ## Example\n *\n * A very basic example with no `comparator`. Note that `1` is emitted more than once,\n * because it's distinct in comparison to the _previously emitted_ value,\n * not in comparison to _all other emitted values_.\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinctUntilChanged } from 'rxjs/operators';\n *\n * of(1, 1, 1, 2, 2, 2, 1, 1, 3, 3).pipe(\n * distinctUntilChanged()\n * )\n * .subscribe(console.log);\n * // Logs: 1, 2, 1, 3\n * ```\n *\n * ## Example\n *\n * With a `comparator`, you can do custom comparisons. Let's say\n * you only want to emit a value when all of its components have\n * changed:\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { distinctUntilChanged } from 'rxjs/operators';\n *\n * const totallyDifferentBuilds$ = of(\n * { engineVersion: '1.1.0', transmissionVersion: '1.2.0' },\n * { engineVersion: '1.1.0', transmissionVersion: '1.4.0' },\n * { engineVersion: '1.3.0', transmissionVersion: '1.4.0' },\n * { engineVersion: '1.3.0', transmissionVersion: '1.5.0' },\n * { engineVersion: '2.0.0', transmissionVersion: '1.5.0' }\n * ).pipe(\n * distinctUntilChanged((prev, curr) => {\n * return (\n * prev.engineVersion === curr.engineVersion ||\n * prev.transmissionVersion === curr.transmissionVersion\n * );\n * })\n * );\n *\n * totallyDifferentBuilds$.subscribe(console.log);\n *\n * // Logs:\n * // {engineVersion: \"1.1.0\", transmissionVersion: \"1.2.0\"}\n * // {engineVersion: \"1.3.0\", transmissionVersion: \"1.4.0\"}\n * // {engineVersion: \"2.0.0\", transmissionVersion: \"1.5.0\"}\n * ```\n *\n * ## Example\n *\n * You can also provide a custom `comparator` to check that emitted\n * changes are only in one direction. Let's say you only want to get\n * the next record temperature:\n *\n * ```ts\n * import { of } from \"rxjs\";\n * import { distinctUntilChanged } from \"rxjs/operators\";\n *\n * const temps$ = of(30, 31, 20, 34, 33, 29, 35, 20);\n *\n * const recordHighs$ = temps$.pipe(\n * distinctUntilChanged((prevHigh, temp) => {\n * // If the current temp is less than\n * // or the same as the previous record,\n * // the record hasn't changed.\n * return temp <= prevHigh;\n * })\n * );\n *\n * recordHighs$.subscribe(console.log);\n * // Logs: 30, 31, 34, 35\n * ```\n *\n * @param comparator A function used to compare the previous and current values for\n * equality. Defaults to a `===` check.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinctUntilChanged(comparator?: (previous: T, current: T) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Returns a result {@link Observable} that emits all values pushed by the source observable if they\n * are distinct in comparison to the last value the result observable emitted.\n *\n * 1. It will always emit the first value from the source.\n * 2. The `keySelector` will be run against all values, including the first value.\n * 3. For all values after the first, the selected key will be compared against the key selected from\n * the previously emitted value using the `comparator`.\n * 4. If the keys are determined to be unequal by this check, the value (not the key), is emitted\n * and the selected key from that value is saved for future comparisons against other keys.\n *\n * ## Example\n *\n * Selecting update events only when the `updatedBy` field shows\n * the account changed hands...\n *\n * ```ts\n * // A stream of updates to a given account\n * const accountUpdates$ = of(\n * { updatedBy: \"blesh\", data: [] },\n * { updatedBy: \"blesh\", data: [] },\n * { updatedBy: \"ncjamieson\", data: [] },\n * { updatedBy: \"ncjamieson\", data: [] },\n * { updatedBy: \"blesh\", data: [] }\n * );\n *\n * // We only want the events where it changed hands\n * const changedHands$ = accountUpdates$.pipe(\n * distinctUntilChanged(undefined, update => update.updatedBy)\n * );\n *\n * changedHands$.subscribe(console.log);\n * // Logs:\n * // {updatedBy: \"blesh\", data: Array[0]}\n * // {updatedBy: \"ncjamieson\", data: Array[0]}\n * // {updatedBy: \"blesh\", data: Array[0]}\n * ```\n *\n * @param comparator A function used to compare the previous and current keys for\n * equality. Defaults to a `===` check.\n * @param keySelector Used to select a key value to be passed to the `comparator`.\n * @return A function that returns an Observable that emits items from the\n * source Observable with distinct values.\n */\nexport function distinctUntilChanged(\n comparator: (previous: K, current: K) => boolean,\n keySelector: (value: T) => K\n): MonoTypeOperatorFunction;\n\nexport function distinctUntilChanged(\n comparator?: (previous: K, current: K) => boolean,\n keySelector: (value: T) => K = identity as (value: T) => K\n): MonoTypeOperatorFunction {\n // We've been allowing `null` do be passed as the `compare`, so we can't do\n // a default value for the parameter, because that will only work\n // for `undefined`.\n comparator = comparator ?? defaultCompare;\n\n return operate((source, subscriber) => {\n // The previous key, used to compare against keys selected\n // from new arrivals to determine \"distinctiveness\".\n let previousKey: K;\n // Whether or not this is the first value we've gotten.\n let first = true;\n\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n // We always call the key selector.\n const currentKey = keySelector(value);\n\n // If it's the first value, we always emit it.\n // Otherwise, we compare this key to the previous key, and\n // if the comparer returns false, we emit.\n if (first || !comparator!(previousKey, currentKey)) {\n // Update our state *before* we emit the value\n // as emission can be the source of re-entrant code\n // in functional libraries like this. We only really\n // need to do this if it's the first value, or if the\n // key we're tracking in previous needs to change.\n first = false;\n previousKey = currentKey;\n\n // Emit the value!\n subscriber.next(value);\n }\n })\n );\n });\n}\n\nfunction defaultCompare(a: any, b: any) {\n return a === b;\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/* tslint:disable:max-line-length */\nexport function exhaustMap>(\n project: (value: T, index: number) => O\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function exhaustMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function exhaustMap(\n project: (value: T, index: number) => ObservableInput,\n resultSelector: (outerValue: T, innerValue: I, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable only if the previous projected Observable has completed.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link exhaust}.\n *\n * ![](exhaustMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. When it projects a source value to\n * an Observable, the output Observable begins emitting the items emitted by\n * that projected Observable. However, `exhaustMap` ignores every new projected\n * Observable if the previous projected Observable has not yet completed. Once\n * that one completes, it will accept and flatten the next projected Observable\n * and repeat this process.\n *\n * ## Example\n * Run a finite timer for each click, only if there is no currently active timer\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { exhaustMap, take } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(\n * exhaustMap(ev => interval(1000).pipe(take(5)))\n * );\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaust}\n * @see {@link mergeMap}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable containing projected\n * Observables of each item of the source, ignoring projected Observables that\n * start before their preceding Observable has completed.\n */\nexport function exhaustMap>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n if (resultSelector) {\n // DEPRECATED PATH\n return (source: Observable) =>\n source.pipe(exhaustMap((a, i) => innerFrom(project(a, i)).pipe(map((b: any, ii: any) => resultSelector(a, b, i, ii)))));\n }\n return operate((source, subscriber) => {\n let index = 0;\n let innerSub: Subscriber | null = null;\n let isComplete = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (outerValue) => {\n if (!innerSub) {\n innerSub = new OperatorSubscriber(subscriber, undefined, () => {\n innerSub = null;\n isComplete && subscriber.complete();\n });\n innerFrom(project(outerValue, index++)).subscribe(innerSub);\n }\n },\n () => {\n isComplete = true;\n !innerSub && subscriber.complete();\n }\n )\n );\n });\n}\n","import { OperatorFunction, MonoTypeOperatorFunction, TruthyTypesOf } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function filter(predicate: (this: A, value: T, index: number) => value is S, thisArg: A): OperatorFunction;\nexport function filter(predicate: (value: T, index: number) => value is S): OperatorFunction;\nexport function filter(predicate: BooleanConstructor): OperatorFunction>;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function filter(predicate: (this: A, value: T, index: number) => boolean, thisArg: A): MonoTypeOperatorFunction;\nexport function filter(predicate: (value: T, index: number) => boolean): MonoTypeOperatorFunction;\n\n/**\n * Filter items emitted by the source Observable by only emitting those that\n * satisfy a specified predicate.\n *\n * Like\n * [Array.prototype.filter()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),\n * it only emits a value from the source if it passes a criterion function.\n *\n * ![](filter.png)\n *\n * Similar to the well-known `Array.prototype.filter` method, this operator\n * takes values from the source Observable, passes them through a `predicate`\n * function and only emits those values that yielded `true`.\n *\n * ## Example\n * Emit only click events whose target was a DIV element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { filter } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = `width: 200px;height: 200px;background: #09c;`;\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const clicksOnDivs = clicks.pipe(filter(ev => ev.target.tagName === 'DIV'));\n * clicksOnDivs.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link distinct}\n * @see {@link distinctUntilChanged}\n * @see {@link distinctUntilKeyChanged}\n * @see {@link ignoreElements}\n * @see {@link partition}\n * @see {@link skip}\n *\n * @param predicate A function that\n * evaluates each value emitted by the source Observable. If it returns `true`,\n * the value is emitted, if `false` the value is not passed to the output\n * Observable. The `index` parameter is the number `i` for the i-th source\n * emission that has happened since the subscription, starting from the number\n * `0`.\n * @param thisArg An optional argument to determine the value of `this`\n * in the `predicate` function.\n * @return A function that returns an Observable that emits items from the\n * source Observable that satisfy the specified `predicate`.\n */\nexport function filter(predicate: (value: T, index: number) => boolean, thisArg?: any): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n // An index passed to our predicate function on each call.\n let index = 0;\n\n // Subscribe to the source, all errors and completions are\n // forwarded to the consumer.\n source.subscribe(\n // Call the predicate with the appropriate `this` context,\n // if the predicate returns `true`, then send the value\n // to the consumer.\n new OperatorSubscriber(subscriber, (value) => predicate.call(thisArg, value, index++) && subscriber.next(value))\n );\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Returns an Observable that mirrors the source Observable, but will call a specified function when\n * the source terminates on complete or error.\n * The specified function will also be called when the subscriber explicitly unsubscribes.\n *\n * ## Examples\n * Execute callback function when the observable completes\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { take, finalize } from 'rxjs/operators';\n *\n * // emit value in sequence every 1 second\n * const source = interval(1000);\n * const example = source.pipe(\n * take(5), //take only the first 5 values\n * finalize(() => console.log('Sequence complete')) // Execute when the observable completes\n * )\n * const subscribe = example.subscribe(val => console.log(val));\n *\n * // results:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * // 'Sequence complete'\n * ```\n *\n * Execute callback function when the subscriber explicitly unsubscribes\n *\n * ```ts\n * import { interval, timer, noop } from 'rxjs';\n * import { finalize, tap } from 'rxjs/operators';\n *\n * const source = interval(100).pipe(\n * finalize(() => console.log('[finalize] Called')),\n * tap({\n * next: () => console.log('[next] Called'),\n * error: () => console.log('[error] Not called'),\n * complete: () => console.log('[tap complete] Not called')\n * })\n * );\n *\n * const sub = source.subscribe({\n * next: x => console.log(x),\n * error: noop,\n * complete: () => console.log('[complete] Not called')\n * });\n *\n * timer(150).subscribe(() => sub.unsubscribe());\n *\n * // results:\n * // '[next] Called'\n * // 0\n * // '[finalize] Called'\n * ```\n *\n * @param {function} callback Function to be called when source terminates.\n * @return A function that returns an Observable that mirrors the source, but\n * will call the specified function on termination.\n */\nexport function finalize(callback: () => void): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n // TODO: This try/finally was only added for `useDeprecatedSynchronousErrorHandling`.\n // REMOVE THIS WHEN THAT HOT GARBAGE IS REMOVED IN V8.\n try {\n source.subscribe(subscriber);\n } finally {\n subscriber.add(callback);\n }\n });\n}\n","import { Observable } from '../Observable';\nimport { EmptyError } from '../util/EmptyError';\nimport { OperatorFunction, TruthyTypesOf } from '../types';\nimport { filter } from './filter';\nimport { take } from './take';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { identity } from '../util/identity';\n\nexport function first(predicate?: null, defaultValue?: D): OperatorFunction;\nexport function first(predicate: BooleanConstructor): OperatorFunction>;\nexport function first(predicate: BooleanConstructor, defaultValue: D): OperatorFunction | D>;\nexport function first(\n predicate: (value: T, index: number, source: Observable) => value is S,\n defaultValue?: S\n): OperatorFunction;\nexport function first(\n predicate: (value: T, index: number, source: Observable) => value is S,\n defaultValue: D\n): OperatorFunction;\nexport function first(\n predicate: (value: T, index: number, source: Observable) => boolean,\n defaultValue?: D\n): OperatorFunction;\n\n/**\n * Emits only the first value (or the first value that meets some condition)\n * emitted by the source Observable.\n *\n * Emits only the first value. Or emits only the first\n * value that passes some test.\n *\n * ![](first.png)\n *\n * If called with no arguments, `first` emits the first value of the source\n * Observable, then completes. If called with a `predicate` function, `first`\n * emits the first value of the source that matches the specified condition. Throws an error if\n * `defaultValue` was not provided and a matching element is not found.\n *\n * ## Examples\n * Emit only the first click that happens on the DOM\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { first } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(first());\n * result.subscribe(x => console.log(x));\n * ```\n *\n * Emits the first click that happens on a DIV\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { first } from 'rxjs/operators';\n *\n * const div = document.createElement('div');\n * div.style.cssText = 'width: 200px; height: 200px; background: #09c;';\n * document.body.appendChild(div);\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(first(ev => ev.target.tagName === 'DIV'));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link filter}\n * @see {@link find}\n * @see {@link take}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * This is how `first()` is different from {@link take}(1) which completes instead.\n *\n * @param {function(value: T, index: number, source: Observable): boolean} [predicate]\n * An optional function called with each item to test for condition matching.\n * @param {R} [defaultValue] The default value emitted in case no valid value\n * was found on the source.\n * @return A function that returns an Observable that emits the first item that\n * matches the condition.\n */\nexport function first(\n predicate?: ((value: T, index: number, source: Observable) => boolean) | null,\n defaultValue?: D\n): OperatorFunction {\n const hasDefaultValue = arguments.length >= 2;\n return (source: Observable) =>\n source.pipe(\n predicate ? filter((v, i) => predicate(v, i, source)) : identity,\n take(1),\n hasDefaultValue ? defaultIfEmpty(defaultValue!) : throwIfEmpty(() => new EmptyError())\n );\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subject } from '../Subject';\nimport { ObservableInput, Observer, OperatorFunction, SubjectLike } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport interface BasicGroupByOptions {\n element?: undefined;\n duration?: (grouped: GroupedObservable) => ObservableInput;\n connector?: () => SubjectLike;\n}\n\nexport interface GroupByOptionsWithElement {\n element: (value: T) => E;\n duration?: (grouped: GroupedObservable) => ObservableInput;\n connector?: () => SubjectLike;\n}\n\nexport function groupBy(key: (value: T) => K, options: BasicGroupByOptions): OperatorFunction>;\n\nexport function groupBy(\n key: (value: T) => K,\n options: GroupByOptionsWithElement\n): OperatorFunction>;\n\nexport function groupBy(\n key: (value: T) => value is K\n): OperatorFunction | GroupedObservable>>;\n\nexport function groupBy(key: (value: T) => K): OperatorFunction>;\n\n/**\n * @deprecated use the options parameter instead.\n */\nexport function groupBy(\n key: (value: T) => K,\n element: void,\n duration: (grouped: GroupedObservable) => Observable\n): OperatorFunction>;\n\n/**\n * @deprecated use the options parameter instead.\n */\nexport function groupBy(\n key: (value: T) => K,\n element?: (value: T) => R,\n duration?: (grouped: GroupedObservable) => Observable\n): OperatorFunction>;\n\n/**\n * Groups the items emitted by an Observable according to a specified criterion,\n * and emits these grouped items as `GroupedObservables`, one\n * {@link GroupedObservable} per group.\n *\n * ![](groupBy.png)\n *\n * When the Observable emits an item, a key is computed for this item with the key function.\n *\n * If a {@link GroupedObservable} for this key exists, this {@link GroupedObservable} emits. Otherwise, a new\n * {@link GroupedObservable} for this key is created and emits.\n *\n * A {@link GroupedObservable} represents values belonging to the same group represented by a common key. The common\n * key is available as the `key` field of a {@link GroupedObservable} instance.\n *\n * The elements emitted by {@link GroupedObservable}s are by default the items emitted by the Observable, or elements\n * returned by the element function.\n *\n * ## Examples\n *\n * ### Group objects by id and return as array\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { mergeMap, groupBy, reduce } from 'rxjs/operators';\n *\n * of(\n * {id: 1, name: 'JavaScript'},\n * {id: 2, name: 'Parcel'},\n * {id: 2, name: 'webpack'},\n * {id: 1, name: 'TypeScript'},\n * {id: 3, name: 'TSLint'}\n * ).pipe(\n * groupBy(p => p.id),\n * mergeMap((group$) => group$.pipe(reduce((acc, cur) => [...acc, cur], [])))\n * )\n * .subscribe(p => console.log(p));\n *\n * // displays:\n * // [ { id: 1, name: 'JavaScript'},\n * // { id: 1, name: 'TypeScript'} ]\n * //\n * // [ { id: 2, name: 'Parcel'},\n * // { id: 2, name: 'webpack'} ]\n * //\n * // [ { id: 3, name: 'TSLint'} ]\n * ```\n *\n * ### Pivot data on the id field\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { groupBy, map, mergeMap, reduce } from 'rxjs/operators';\n *\n * of(\n * { id: 1, name: 'JavaScript' },\n * { id: 2, name: 'Parcel' },\n * { id: 2, name: 'webpack' },\n * { id: 1, name: 'TypeScript' },\n * { id: 3, name: 'TSLint' }\n * )\n * .pipe(\n * groupBy(p => p.id, { element: p => p.name }),\n * mergeMap(group$ =>\n * group$.pipe(reduce((acc, cur) => [...acc, cur], [`${group$.key}`]))\n * ),\n * map(arr => ({ id: parseInt(arr[0], 10), values: arr.slice(1) }))\n * )\n * .subscribe(p => console.log(p));\n *\n * // displays:\n * // { id: 1, values: [ 'JavaScript', 'TypeScript' ] }\n * // { id: 2, values: [ 'Parcel', 'webpack' ] }\n * // { id: 3, values: [ 'TSLint' ] }\n * ```\n *\n * @param key A function that extracts the key\n * for each item.\n * @param element A function that extracts the\n * return element for each item.\n * @param duration\n * A function that returns an Observable to determine how long each group should\n * exist.\n * @param connector Factory function to create an\n * intermediate Subject through which grouped elements are emitted.\n * @return A function that returns an Observable that emits GroupedObservables,\n * each of which corresponds to a unique key value and each of which emits\n * those items from the source Observable that share that key value.\n *\n * @deprecated Use the options parameter instead.\n */\nexport function groupBy(\n key: (value: T) => K,\n element?: (value: T) => R,\n duration?: (grouped: GroupedObservable) => Observable,\n connector?: () => Subject\n): OperatorFunction>;\n\n// Impl\nexport function groupBy(\n keySelector: (value: T) => K,\n elementOrOptions?: ((value: any) => any) | void | BasicGroupByOptions | GroupByOptionsWithElement,\n duration?: (grouped: GroupedObservable) => ObservableInput,\n connector?: () => SubjectLike\n): OperatorFunction> {\n return operate((source, subscriber) => {\n let element: ((value: any) => any) | void;\n if (!elementOrOptions || typeof elementOrOptions === 'function') {\n element = elementOrOptions;\n } else {\n ({ duration, element, connector } = elementOrOptions);\n }\n\n // A lookup for the groups that we have so far.\n const groups = new Map>();\n\n // Used for notifying all groups and the subscriber in the same way.\n const notify = (cb: (group: Observer) => void) => {\n groups.forEach(cb);\n cb(subscriber);\n };\n\n // Used to handle errors from the source, AND errors that occur during the\n // next call from the source.\n const handleError = (err: any) => notify((consumer) => consumer.error(err));\n\n // Capturing a reference to this, because we need a handle to it\n // in `createGroupedObservable` below. This is what we use to\n // subscribe to our source observable. This sometimes needs to be unsubscribed\n // out-of-band with our `subscriber` which is the downstream subscriber, or destination,\n // in cases where a user unsubscribes from the main resulting subscription, but\n // still has groups from this subscription subscribed and would expect values from it\n // Consider: `source.pipe(groupBy(fn), take(2))`.\n const groupBySourceSubscriber = new GroupBySubscriber(\n subscriber,\n (value: T) => {\n // Because we have to notify all groups of any errors that occur in here,\n // we have to add our own try/catch to ensure that those errors are propagated.\n // OperatorSubscriber will only send the error to the main subscriber.\n try {\n const key = keySelector(value);\n\n let group = groups.get(key);\n if (!group) {\n // Create our group subject\n groups.set(key, (group = connector ? connector() : new Subject()));\n\n // Emit the grouped observable. Note that we can't do a simple `asObservable()` here,\n // because the grouped observable has special semantics around reference counting\n // to ensure we don't sever our connection to the source prematurely.\n const grouped = createGroupedObservable(key, group);\n subscriber.next(grouped);\n\n if (duration) {\n const durationSubscriber = new OperatorSubscriber(\n // Providing the group here ensures that it is disposed of -- via `unsubscribe` --\n // wnen the duration subscription is torn down. That is important, because then\n // if someone holds a handle to the grouped observable and tries to subscribe to it\n // after the connection to the source has been severed, they will get an\n // `ObjectUnsubscribedError` and know they can't possibly get any notifications.\n group as any,\n () => {\n // Our duration notified! We can complete the group.\n // The group will be removed from the map in the teardown phase.\n group!.complete();\n durationSubscriber?.unsubscribe();\n },\n // Completions are also sent to the group, but just the group.\n undefined,\n // Errors on the duration subscriber are sent to the group\n // but only the group. They are not sent to the main subscription.\n undefined,\n // Teardown: Remove this group from our map.\n () => groups.delete(key)\n );\n\n // Start our duration notifier.\n groupBySourceSubscriber.add(innerFrom(duration(grouped)).subscribe(durationSubscriber));\n }\n }\n\n // Send the value to our group.\n group.next(element ? element(value) : value);\n } catch (err) {\n handleError(err);\n }\n },\n // Source completes.\n () => notify((consumer) => consumer.complete()),\n // Error from the source.\n handleError,\n // Free up memory.\n // When the source subscription is _finally_ torn down, release the subjects and keys\n // in our groups Map, they may be quite large and we don't want to keep them around if we\n // don't have to.\n () => groups.clear()\n );\n\n // Subscribe to the source\n source.subscribe(groupBySourceSubscriber);\n\n /**\n * Creates the actual grouped observable returned.\n * @param key The key of the group\n * @param groupSubject The subject that fuels the group\n */\n function createGroupedObservable(key: K, groupSubject: SubjectLike) {\n const result: any = new Observable((groupSubscriber) => {\n groupBySourceSubscriber.activeGroups++;\n const innerSub = groupSubject.subscribe(groupSubscriber);\n return () => {\n innerSub.unsubscribe();\n // We can kill the subscription to our source if we now have no more\n // active groups subscribed, and a teardown was already attempted on\n // the source.\n --groupBySourceSubscriber.activeGroups === 0 &&\n groupBySourceSubscriber.teardownAttempted &&\n groupBySourceSubscriber.unsubscribe();\n };\n });\n result.key = key;\n return result;\n }\n });\n}\n\n/**\n * This was created because groupBy is a bit unique, in that emitted groups that have\n * subscriptions have to keep the subscription to the source alive until they\n * are torn down.\n */\nclass GroupBySubscriber extends OperatorSubscriber {\n /**\n * The number of actively subscribed groups\n */\n activeGroups = 0;\n /**\n * Whether or not teardown was attempted on this subscription.\n */\n teardownAttempted = false;\n\n unsubscribe() {\n this.teardownAttempted = true;\n // We only kill our subscription to the source if we have\n // no active groups. As stated above, consider this scenario:\n // source$.pipe(groupBy(fn), take(2)).\n this.activeGroups === 0 && super.unsubscribe();\n }\n}\n\n/**\n * An observable of values that is the emitted by the result of a {@link groupBy} operator,\n * contains a `key` property for the grouping.\n */\nexport interface GroupedObservable extends Observable {\n /**\n * The key value for the grouped notifications.\n */\n readonly key: K;\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { noop } from '../util/noop';\n\n/**\n * Ignores all items emitted by the source Observable and only passes calls of `complete` or `error`.\n *\n * ![](ignoreElements.png)\n *\n * The _IgnoreElements_ operator suppresses all of the items emitted by the source Observable,\n * but allows its termination notification (either `error` or `complete`) to pass through unchanged.\n *\n * If you do not care about the items being emitted by an Observable, but you do want to be notified\n * when it completes or when it terminates with an error, you can apply the `ignoreElements` operator\n * to the Observable, which will ensure that it will never call its observers’ `next` handlers.\n *\n * ## Examples\n * ```ts\n * import { of } from 'rxjs';\n * import { ignoreElements } from 'rxjs/operators';\n *\n * of('you', 'talking', 'to', 'me').pipe(\n * ignoreElements(),\n * )\n * .subscribe({\n * next: word => console.log(word),\n * error: err => console.log('error:', err),\n * complete: () => console.log('the end'),\n * });\n * // result:\n * // 'the end'\n * ```\n * @return A function that returns an empty Observable that only calls\n * `complete` or `error`, based on which one is called by the source\n * Observable.\n */\nexport function ignoreElements(): OperatorFunction {\n return operate((source, subscriber) => {\n source.subscribe(new OperatorSubscriber(subscriber, noop));\n });\n}\n","import { Observable } from '../Observable';\nimport { EmptyError } from '../util/EmptyError';\nimport { OperatorFunction, TruthyTypesOf } from '../types';\nimport { filter } from './filter';\nimport { takeLast } from './takeLast';\nimport { throwIfEmpty } from './throwIfEmpty';\nimport { defaultIfEmpty } from './defaultIfEmpty';\nimport { identity } from '../util/identity';\n\nexport function last(predicate: BooleanConstructor): OperatorFunction>;\nexport function last(predicate: BooleanConstructor, defaultValue: D): OperatorFunction | D>;\nexport function last(predicate?: null, defaultValue?: D): OperatorFunction;\nexport function last(\n predicate: (value: T, index: number, source: Observable) => value is S,\n defaultValue?: S\n): OperatorFunction;\nexport function last(\n predicate: (value: T, index: number, source: Observable) => boolean,\n defaultValue?: D\n): OperatorFunction;\n\n/**\n * Returns an Observable that emits only the last item emitted by the source Observable.\n * It optionally takes a predicate function as a parameter, in which case, rather than emitting\n * the last item from the source Observable, the resulting Observable will emit the last item\n * from the source Observable that satisfies the predicate.\n *\n * ![](last.png)\n *\n * It will throw an error if the source completes without notification or one that matches the predicate. It\n * returns the last value or if a predicate is provided last value that matches the predicate. It returns the\n * given default value if no notification is emitted or matches the predicate.\n *\n * ## Example\n * Last alphabet from the sequence.\n * ```ts\n * import { from } from 'rxjs';\n * import { last } from 'rxjs/operators';\n *\n * const source = from(['x', 'y', 'z']);\n * const example = source.pipe(last());\n * //output: \"Last alphabet: z\"\n * example.subscribe(val => console.log(`Last alphabet: ${val}`));\n * ```\n *\n * Default value when the value in the predicate is not matched.\n * ```ts\n * import { from } from 'rxjs';\n * import { last } from 'rxjs/operators';\n *\n * const source = from(['x', 'y', 'z']);\n * const example = source.pipe(last(char => char === 'a','not exist'));\n * //output: \"'a' is not exist.\"\n * example.subscribe(val => console.log(`'a' is ${val}.`));\n * ```\n *\n * @see {@link skip}\n * @see {@link skipUntil}\n * @see {@link skipLast}\n * @see {@link skipWhile}\n *\n * @throws {EmptyError} Delivers an EmptyError to the Observer's `error`\n * callback if the Observable completes before any `next` notification was sent.\n * @param {function} [predicate] - The condition any source emitted item has to satisfy.\n * @param {any} [defaultValue] - An optional default value to provide if last\n * predicate isn't met or no values were emitted.\n * @return A function that returns an Observable that emits only the last item\n * satisfying the given condition from the source, or a NoSuchElementException\n * if no such items are emitted.\n * @throws - Throws if no items that match the predicate are emitted by the source Observable.\n */\nexport function last(\n predicate?: ((value: T, index: number, source: Observable) => boolean) | null,\n defaultValue?: D\n): OperatorFunction {\n const hasDefaultValue = arguments.length >= 2;\n return (source: Observable) =>\n source.pipe(\n predicate ? filter((v, i) => predicate(v, i, source)) : identity,\n takeLast(1),\n hasDefaultValue ? defaultIfEmpty(defaultValue!) : throwIfEmpty(() => new EmptyError())\n );\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function map(project: (value: T, index: number) => R): OperatorFunction;\n/** @deprecated Use a closure instead of a `thisArg`. Signatures accepting a `thisArg` will be removed in v8. */\nexport function map(project: (this: A, value: T, index: number) => R, thisArg: A): OperatorFunction;\n\n/**\n * Applies a given `project` function to each value emitted by the source\n * Observable, and emits the resulting values as an Observable.\n *\n * Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),\n * it passes each source value through a transformation function to get\n * corresponding output values.\n *\n * ![](map.png)\n *\n * Similar to the well known `Array.prototype.map` function, this operator\n * applies a projection to each value and emits that projection in the output\n * Observable.\n *\n * ## Example\n * Map every click to the clientX position of that click\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { map } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const positions = clicks.pipe(map(ev => ev.clientX));\n * positions.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link mapTo}\n * @see {@link pluck}\n *\n * @param {function(value: T, index: number): R} project The function to apply\n * to each `value` emitted by the source Observable. The `index` parameter is\n * the number `i` for the i-th emission that has happened since the\n * subscription, starting from the number `0`.\n * @param {any} [thisArg] An optional argument to define what `this` is in the\n * `project` function.\n * @return A function that returns an Observable that emits the values from the\n * source Observable transformed by the given `project` function.\n */\nexport function map(project: (value: T, index: number) => R, thisArg?: any): OperatorFunction {\n return operate((source, subscriber) => {\n // The index of the value from the source. Used with projection.\n let index = 0;\n // Subscribe to the source, all errors and completions are sent along\n // to the consumer.\n source.subscribe(\n new OperatorSubscriber(subscriber, (value: T) => {\n // Call the projection function with the appropriate this context,\n // and send the resulting value to the consumer.\n subscriber.next(project.call(thisArg, value, index++));\n })\n );\n });\n}\n","import { OperatorFunction } from '../types';\nimport { map } from './map';\n\nexport function mapTo(value: R): OperatorFunction;\n/** @deprecated Do not specify explicit type parameters. Signatures with type parameters that cannot be inferred will be removed in v8. */\nexport function mapTo(value: R): OperatorFunction;\n\n/**\n * Emits the given constant value on the output Observable every time the source\n * Observable emits a value.\n *\n * Like {@link map}, but it maps every source value to\n * the same output value every time.\n *\n * ![](mapTo.png)\n *\n * Takes a constant `value` as argument, and emits that whenever the source\n * Observable emits a value. In other words, ignores the actual source value,\n * and simply uses the emission moment to know when to emit the given `value`.\n *\n * ## Example\n * Map every click to the string 'Hi'\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { mapTo } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const greetings = clicks.pipe(mapTo('Hi'));\n * greetings.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link map}\n *\n * @param value The value to map each source value to.\n * @return A function that returns an Observable that emits the given `value`\n * every time the source Observable emits.\n */\nexport function mapTo(value: R): OperatorFunction {\n return map(() => value);\n}\n","import { Notification } from '../Notification';\nimport { OperatorFunction, ObservableNotification } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Represents all of the notifications from the source Observable as `next`\n * emissions marked with their original types within {@link Notification}\n * objects.\n *\n * Wraps `next`, `error` and `complete` emissions in\n * {@link Notification} objects, emitted as `next` on the output Observable.\n * \n *\n * ![](materialize.png)\n *\n * `materialize` returns an Observable that emits a `next` notification for each\n * `next`, `error`, or `complete` emission of the source Observable. When the\n * source Observable emits `complete`, the output Observable will emit `next` as\n * a Notification of type \"complete\", and then it will emit `complete` as well.\n * When the source Observable emits `error`, the output will emit `next` as a\n * Notification of type \"error\", and then `complete`.\n *\n * This operator is useful for producing metadata of the source Observable, to\n * be consumed as `next` emissions. Use it in conjunction with\n * {@link dematerialize}.\n *\n * ## Example\n *\n * Convert a faulty Observable to an Observable of Notifications\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { materialize, map } from 'rxjs/operators';\n *\n * const letters = of('a', 'b', 13, 'd');\n * const upperCase = letters.pipe(map(x => x.toUpperCase()));\n * const materialized = upperCase.pipe(materialize());\n * materialized.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // - Notification {kind: \"N\", value: \"A\", error: undefined, hasValue: true}\n * // - Notification {kind: \"N\", value: \"B\", error: undefined, hasValue: true}\n * // - Notification {kind: \"E\", value: undefined, error: TypeError:\n * // x.toUpperCase is not a function at MapSubscriber.letters.map.x\n * // [as project] (http://1…, hasValue: false}\n * ```\n *\n * @see {@link Notification}\n * @see {@link dematerialize}\n *\n * @return A function that returns an Observable that emits\n * {@link Notification} objects that wrap the original emissions from the\n * source Observable with metadata.\n */\nexport function materialize(): OperatorFunction & ObservableNotification> {\n return operate((source, subscriber) => {\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n subscriber.next(Notification.createNext(value));\n },\n () => {\n subscriber.next(Notification.createComplete());\n subscriber.complete();\n },\n (err) => {\n subscriber.next(Notification.createError(err));\n subscriber.complete();\n }\n )\n );\n });\n}\n","import { mergeMap } from './mergeMap';\nimport { identity } from '../util/identity';\nimport { OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\n\n/**\n * Converts a higher-order Observable into a first-order Observable which\n * concurrently delivers all values that are emitted on the inner Observables.\n *\n * Flattens an Observable-of-Observables.\n *\n * ![](mergeAll.png)\n *\n * `mergeAll` subscribes to an Observable that emits Observables, also known as\n * a higher-order Observable. Each time it observes one of these emitted inner\n * Observables, it subscribes to that and delivers all the values from the\n * inner Observable on the output Observable. The output Observable only\n * completes once all inner Observables have completed. Any error delivered by\n * a inner Observable will be immediately emitted on the output Observable.\n *\n * ## Examples\n * Spawn a new interval Observable for each click event, and blend their outputs as one Observable\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { map, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(map((ev) => interval(1000)));\n * const firstOrder = higherOrder.pipe(mergeAll());\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * Count from 0 to 9 every second for each click, but only allow 2 concurrent timers\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { take, map, mergeAll } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const higherOrder = clicks.pipe(\n * map((ev) => interval(1000).pipe(take(10))),\n * );\n * const firstOrder = higherOrder.pipe(mergeAll(2));\n * firstOrder.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatestAll}\n * @see {@link concatAll}\n * @see {@link exhaustAll}\n * @see {@link merge}\n * @see {@link mergeMap}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchAll}\n * @see {@link switchMap}\n * @see {@link zipAll}\n *\n * @param {number} [concurrent=Infinity] Maximum number of inner\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits values coming from\n * all the inner Observables emitted by the source Observable.\n */\nexport function mergeAll>(concurrent: number = Infinity): OperatorFunction> {\n return mergeMap(identity, concurrent);\n}\n","import { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { Subscriber } from '../Subscriber';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * A process embodying the general \"merge\" strategy. This is used in\n * `mergeMap` and `mergeScan` because the logic is otherwise nearly identical.\n * @param source The original source observable\n * @param subscriber The consumer subscriber\n * @param project The projection function to get our inner sources\n * @param concurrent The number of concurrent inner subscriptions\n * @param onBeforeNext Additional logic to apply before nexting to our consumer\n * @param expand If `true` this will perform an \"expand\" strategy, which differs only\n * in that it recurses, and the inner subscription must be schedule-able.\n * @param innerSubScheduler A scheduler to use to schedule inner subscriptions,\n * this is to support the expand strategy, mostly, and should be deprecated\n */\nexport function mergeInternals(\n source: Observable,\n subscriber: Subscriber,\n project: (value: T, index: number) => ObservableInput,\n concurrent: number,\n onBeforeNext?: (innerValue: R) => void,\n expand?: boolean,\n innerSubScheduler?: SchedulerLike,\n additionalTeardown?: () => void\n) {\n // Buffered values, in the event of going over our concurrency limit\n const buffer: T[] = [];\n // The number of active inner subscriptions.\n let active = 0;\n // An index to pass to our accumulator function\n let index = 0;\n // Whether or not the outer source has completed.\n let isComplete = false;\n\n /**\n * Checks to see if we can complete our result or not.\n */\n const checkComplete = () => {\n // If the outer has completed, and nothing is left in the buffer,\n // and we don't have any active inner subscriptions, then we can\n // Emit the state and complete.\n if (isComplete && !buffer.length && !active) {\n subscriber.complete();\n }\n };\n\n // If we're under our concurrency limit, just start the inner subscription, otherwise buffer and wait.\n const outerNext = (value: T) => (active < concurrent ? doInnerSub(value) : buffer.push(value));\n\n const doInnerSub = (value: T) => {\n // If we're expanding, we need to emit the outer values and the inner values\n // as the inners will \"become outers\" in a way as they are recursively fed\n // back to the projection mechanism.\n expand && subscriber.next(value as any);\n\n // Increment the number of active subscriptions so we can track it\n // against our concurrency limit later.\n active++;\n\n // A flag used to show that the inner observable completed.\n // This is checked during finalization to see if we should\n // move to the next item in the buffer, if there is on.\n let innerComplete = false;\n\n // Start our inner subscription.\n innerFrom(project(value, index++)).subscribe(\n new OperatorSubscriber(\n subscriber,\n (innerValue) => {\n // `mergeScan` has additional handling here. For example\n // taking the inner value and updating state.\n onBeforeNext?.(innerValue);\n\n if (expand) {\n // If we're expanding, then just recurse back to our outer\n // handler. It will emit the value first thing.\n outerNext(innerValue as any);\n } else {\n // Otherwise, emit the inner value.\n subscriber.next(innerValue);\n }\n },\n () => {\n // Flag that we have completed, so we know to check the buffer\n // during finalization.\n innerComplete = true;\n },\n // Errors are passed to the destination.\n undefined,\n () => {\n // During finalization, if the inner completed (it wasn't errored or\n // cancelled), then we want to try the next item in the buffer if\n // there is one.\n if (innerComplete) {\n // We have to wrap this in a try/catch because it happens during\n // finalization, possibly asynchronously, and we want to pass\n // any errors that happen (like in a projection function) to\n // the outer Subscriber.\n try {\n // INNER SOURCE COMPLETE\n // Decrement the active count to ensure that the next time\n // we try to call `doInnerSub`, the number is accurate.\n active--;\n // If we have more values in the buffer, try to process those\n // Note that this call will increment `active` ahead of the\n // next conditional, if there were any more inner subscriptions\n // to start.\n while (buffer.length && active < concurrent) {\n const bufferedValue = buffer.shift()!;\n // Particularly for `expand`, we need to check to see if a scheduler was provided\n // for when we want to start our inner subscription. Otherwise, we just start\n // are next inner subscription.\n if (innerSubScheduler) {\n executeSchedule(subscriber, innerSubScheduler, () => doInnerSub(bufferedValue));\n } else {\n doInnerSub(bufferedValue);\n }\n }\n // Check to see if we can complete, and complete if so.\n checkComplete();\n } catch (err) {\n subscriber.error(err);\n }\n }\n }\n )\n );\n };\n\n // Subscribe to our source observable.\n source.subscribe(\n new OperatorSubscriber(subscriber, outerNext, () => {\n // Outer completed, make a note of it, and check to see if we can complete everything.\n isComplete = true;\n checkComplete();\n })\n );\n\n // Additional teardown (for when the destination is torn down).\n // Other teardown is added implicitly via subscription above.\n return () => {\n additionalTeardown?.();\n };\n}\n","import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { map } from './map';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { mergeInternals } from './mergeInternals';\nimport { isFunction } from '../util/isFunction';\n\n/* tslint:disable:max-line-length */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n concurrent?: number\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined,\n concurrent?: number\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R,\n concurrent?: number\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables using {@link mergeAll}.\n *\n * ![](mergeMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an Observable, and then merging those resulting Observables and\n * emitting the results of this merger.\n *\n * ## Example\n * Map and flatten each letter to an Observable ticking every 1 second\n * ```ts\n * import { of, interval } from 'rxjs';\n * import { mergeMap, map } from 'rxjs/operators';\n *\n * const letters = of('a', 'b', 'c');\n * const result = letters.pipe(\n * mergeMap(x => interval(1000).pipe(map(i => x+i))),\n * );\n * result.subscribe(x => console.log(x));\n *\n * // Results in the following:\n * // a0\n * // b0\n * // c0\n * // a1\n * // b1\n * // c1\n * // continues to list a,b,c with respective ascending integers\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link merge}\n * @see {@link mergeAll}\n * @see {@link mergeMapTo}\n * @see {@link mergeScan}\n * @see {@link switchMap}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @param {number} [concurrent=Infinity] Maximum number of input\n * Observables being subscribed to concurrently.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and merging\n * the results of the Observables obtained from this transformation.\n */\nexport function mergeMap>(\n project: (value: T, index: number) => O,\n resultSelector?: ((outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R) | number,\n concurrent: number = Infinity\n): OperatorFunction | R> {\n if (isFunction(resultSelector)) {\n // DEPRECATED PATH\n return mergeMap((a, i) => map((b: any, ii: number) => resultSelector(a, b, i, ii))(innerFrom(project(a, i))), concurrent);\n } else if (typeof resultSelector === 'number') {\n concurrent = resultSelector;\n }\n\n return operate((source, subscriber) => mergeInternals(source, subscriber, project, concurrent));\n}\n","import { Subject } from '../Subject';\nimport { Observable } from '../Observable';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { OperatorFunction, UnaryFunction, ObservedValueOf, ObservableInput } from '../types';\nimport { isFunction } from '../util/isFunction';\nimport { connect } from './connect';\n\n/**\n * An operator that creates a {@link ConnectableObservable}, that when connected,\n * with the `connect` method, will use the provided subject to multicast the values\n * from the source to all consumers.\n *\n * @param subject The subject to multicast through.\n * @return A function that returns a {@link ConnectableObservable}\n * @deprecated Will be removed in v8. To create a connectable observable, use {@link connectable}.\n * If you're using {@link refCount} after `multicast`, use the {@link share} operator instead.\n * `multicast(subject), refCount()` is equivalent to\n * `share({ connector: () => subject, resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast(subject: Subject): UnaryFunction, ConnectableObservable>;\n\n/**\n * Because this is deprecated in favor of the {@link connect} operator, and was otherwise poorly documented,\n * rather than duplicate the effort of documenting the same behavior, please see documentation for the\n * {@link connect} operator.\n *\n * @param subject The subject used to multicast.\n * @param selector A setup function to setup the multicast\n * @return A function that returns an observable that mirrors the observable returned by the selector.\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `multicast(subject, selector)` is equivalent to\n * `connect(selector, { connector: () => subject })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast>(\n subject: Subject,\n selector: (shared: Observable) => O\n): OperatorFunction>;\n\n/**\n * An operator that creates a {@link ConnectableObservable}, that when connected,\n * with the `connect` method, will use the provided subject to multicast the values\n * from the source to all consumers.\n *\n * @param subjectFactory A factory that will be called to create the subject. Passing a function here\n * will cause the underlying subject to be \"reset\" on error, completion, or refCounted unsubscription of\n * the source.\n * @return A function that returns a {@link ConnectableObservable}\n * @deprecated Will be removed in v8. To create a connectable observable, use {@link connectable}.\n * If you're using {@link refCount} after `multicast`, use the {@link share} operator instead.\n * `multicast(() => new BehaviorSubject('test')), refCount()` is equivalent to\n * `share({ connector: () => new BehaviorSubject('test') })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast(subjectFactory: () => Subject): UnaryFunction, ConnectableObservable>;\n\n/**\n * Because this is deprecated in favor of the {@link connect} operator, and was otherwise poorly documented,\n * rather than duplicate the effort of documenting the same behavior, please see documentation for the\n * {@link connect} operator.\n *\n * @param subjectFactory A factory that creates the subject used to multicast.\n * @param selector A function to setup the multicast and select the output.\n * @return A function that returns an observable that mirrors the observable returned by the selector.\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `multicast(subjectFactory, selector)` is equivalent to\n * `connect(selector, { connector: subjectFactory })`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast>(\n subjectFactory: () => Subject,\n selector: (shared: Observable) => O\n): OperatorFunction>;\n\n/**\n * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the\n * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's\n * behaviors.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function multicast(\n subjectOrSubjectFactory: Subject | (() => Subject),\n selector?: (source: Observable) => Observable\n): OperatorFunction {\n const subjectFactory = isFunction(subjectOrSubjectFactory) ? subjectOrSubjectFactory : () => subjectOrSubjectFactory;\n\n if (isFunction(selector)) {\n // If a selector function is provided, then we're a \"normal\" operator that isn't\n // going to return a ConnectableObservable. We can use `connect` to do what we\n // need to do.\n return connect(selector, {\n connector: subjectFactory,\n });\n }\n\n return (source: Observable) => new ConnectableObservable(source, subjectFactory);\n}\n","/** @prettier */\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { executeSchedule } from '../util/executeSchedule';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n *\n * Re-emits all notifications from source Observable with specified scheduler.\n *\n * Ensure a specific scheduler is used, from outside of an Observable.\n *\n * `observeOn` is an operator that accepts a scheduler as a first parameter, which will be used to reschedule\n * notifications emitted by the source Observable. It might be useful, if you do not have control over\n * internal scheduler of a given Observable, but want to control when its values are emitted nevertheless.\n *\n * Returned Observable emits the same notifications (nexted values, complete and error events) as the source Observable,\n * but rescheduled with provided scheduler. Note that this doesn't mean that source Observables internal\n * scheduler will be replaced in any way. Original scheduler still will be used, but when the source Observable emits\n * notification, it will be immediately scheduled again - this time with scheduler passed to `observeOn`.\n * An anti-pattern would be calling `observeOn` on Observable that emits lots of values synchronously, to split\n * that emissions into asynchronous chunks. For this to happen, scheduler would have to be passed into the source\n * Observable directly (usually into the operator that creates it). `observeOn` simply delays notifications a\n * little bit more, to ensure that they are emitted at expected moments.\n *\n * As a matter of fact, `observeOn` accepts second parameter, which specifies in milliseconds with what delay notifications\n * will be emitted. The main difference between {@link delay} operator and `observeOn` is that `observeOn`\n * will delay all notifications - including error notifications - while `delay` will pass through error\n * from source Observable immediately when it is emitted. In general it is highly recommended to use `delay` operator\n * for any kind of delaying of values in the stream, while using `observeOn` to specify which scheduler should be used\n * for notification emissions in general.\n *\n * ## Example\n *\n * Ensure values in subscribe are called just before browser repaint.\n *\n * ```ts\n * import { interval, animationFrameScheduler } from 'rxjs';\n * import { observeOn } from 'rxjs/operators';\n *\n * const someDiv = document.createElement('div');\n * someDiv.style.cssText = 'width: 200px;background: #09c';\n * document.body.appendChild(someDiv);\n * const intervals = interval(10); // Intervals are scheduled\n * // with async scheduler by default...\n * intervals.pipe(\n * observeOn(animationFrameScheduler), // ...but we will observe on animationFrame\n * ) // scheduler to ensure smooth animation.\n * .subscribe(val => {\n * someDiv.style.height = val + 'px';\n * });\n * ```\n *\n * @see {@link delay}\n *\n * @param scheduler Scheduler that will be used to reschedule notifications from source Observable.\n * @param delay Number of milliseconds that states with what delay every notification should be rescheduled.\n * @return A function that returns an Observable that emits the same\n * notifications as the source Observable, but with provided scheduler.\n */\nexport function observeOn(scheduler: SchedulerLike, delay = 0): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => executeSchedule(subscriber, scheduler, () => subscriber.next(value), delay),\n () => executeSchedule(subscriber, scheduler, () => subscriber.complete(), delay),\n (err) => executeSchedule(subscriber, scheduler, () => subscriber.error(err), delay)\n )\n );\n });\n}\n","import { map } from './map';\nimport { OperatorFunction } from '../types';\n\n/* tslint:disable:max-line-length */\nexport function pluck(k1: K1): OperatorFunction;\nexport function pluck(k1: K1, k2: K2): OperatorFunction;\nexport function pluck(\n k1: K1,\n k2: K2,\n k3: K3\n): OperatorFunction;\nexport function pluck(\n k1: K1,\n k2: K2,\n k3: K3,\n k4: K4\n): OperatorFunction;\nexport function pluck<\n T,\n K1 extends keyof T,\n K2 extends keyof T[K1],\n K3 extends keyof T[K1][K2],\n K4 extends keyof T[K1][K2][K3],\n K5 extends keyof T[K1][K2][K3][K4]\n>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5): OperatorFunction;\nexport function pluck<\n T,\n K1 extends keyof T,\n K2 extends keyof T[K1],\n K3 extends keyof T[K1][K2],\n K4 extends keyof T[K1][K2][K3],\n K5 extends keyof T[K1][K2][K3][K4],\n K6 extends keyof T[K1][K2][K3][K4][K5]\n>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6): OperatorFunction;\nexport function pluck<\n T,\n K1 extends keyof T,\n K2 extends keyof T[K1],\n K3 extends keyof T[K1][K2],\n K4 extends keyof T[K1][K2][K3],\n K5 extends keyof T[K1][K2][K3][K4],\n K6 extends keyof T[K1][K2][K3][K4][K5]\n>(k1: K1, k2: K2, k3: K3, k4: K4, k5: K5, k6: K6, ...rest: string[]): OperatorFunction;\nexport function pluck(...properties: string[]): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Maps each source value to its specified nested property.\n *\n * Like {@link map}, but meant only for picking one of\n * the nested properties of every emitted value.\n *\n * ![](pluck.png)\n *\n * Given a list of strings or numbers describing a path to a property, retrieves\n * the value of a specified nested property from all values in the source\n * Observable. If a property can't be resolved, it will return `undefined` for\n * that value.\n *\n * ## Example\n * Map every click to the tagName of the clicked target element\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { pluck } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const tagNames = clicks.pipe(pluck('target', 'tagName'));\n * tagNames.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link map}\n *\n * @param properties The nested properties to pluck from each source\n * value.\n * @return A function that returns an Observable of property values from the\n * source values.\n * @deprecated Use {@link map} and optional chaining: `pluck('foo', 'bar')` is `map(x => x?.foo?.bar)`. Will be removed in v8.\n */\nexport function pluck(...properties: Array): OperatorFunction {\n const length = properties.length;\n if (length === 0) {\n throw new Error('list of properties cannot be empty.');\n }\n return map((x) => {\n let currentProp: any = x;\n for (let i = 0; i < length; i++) {\n const p = currentProp?.[properties[i]];\n if (typeof p !== 'undefined') {\n currentProp = p;\n } else {\n return undefined;\n }\n }\n return currentProp;\n });\n}\n","import { Observable } from '../Observable';\nimport { Subject } from '../Subject';\nimport { multicast } from './multicast';\nimport { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { MonoTypeOperatorFunction, OperatorFunction, UnaryFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { connect } from './connect';\n\n/**\n * Returns a connectable observable that, when connected, will multicast\n * all values through a single underlying {@link Subject} instance.\n *\n * @deprecated Will be removed in v8. To create a connectable observable, use {@link connectable}.\n * `source.pipe(publish())` is equivalent to\n * `connectable(source, { connector: () => new Subject(), resetOnDisconnect: false })`.\n * If you're using {@link refCount} after `publish`, use {@link share} operator instead.\n * `source.pipe(publish(), refCount())` is equivalent to\n * `source.pipe(share({ resetOnError: false, resetOnComplete: false, resetOnRefCountZero: false }))`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publish(): UnaryFunction, ConnectableObservable>;\n\n/**\n * Returns an observable, that when subscribed to, creates an underlying {@link Subject},\n * provides an observable view of it to a `selector` function, takes the observable result of\n * that selector function and subscribes to it, sending its values to the consumer, _then_ connects\n * the subject to the original source.\n *\n * @param selector A function used to setup multicasting prior to automatic connection.\n *\n * @deprecated Will be removed in v8. Use the {@link connect} operator instead.\n * `publish(selector)` is equivalent to `connect(selector)`.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publish>(selector: (shared: Observable) => O): OperatorFunction>;\n\n/**\n * Returns a ConnectableObservable, which is a variety of Observable that waits until its connect method is called\n * before it begins emitting items to those Observers that have subscribed to it.\n *\n * Makes a cold Observable hot\n *\n * ![](publish.png)\n *\n * ## Examples\n * Make source$ hot by applying publish operator, then merge each inner observable into a single one\n * and subscribe.\n * ```ts\n * import { of, zip, interval, merge } from \"rxjs\";\n * import { map, publish, tap } from \"rxjs/operators\";\n *\n * const source$ = zip(interval(2000), of(1, 2, 3, 4, 5, 6, 7, 8, 9)).pipe(\n * map(values => values[1])\n * );\n *\n * source$\n * .pipe(\n * publish(multicasted$ =>\n * merge(\n * multicasted$.pipe(tap(x => console.log('Stream 1:', x))),\n * multicasted$.pipe(tap(x => console.log('Stream 2:', x))),\n * multicasted$.pipe(tap(x => console.log('Stream 3:', x))),\n * )\n * )\n * )\n * .subscribe();\n *\n * // Results every two seconds\n * // Stream 1: 1\n * // Stream 2: 1\n * // Stream 3: 1\n * // ...\n * // Stream 1: 9\n * // Stream 2: 9\n * // Stream 3: 9\n * ```\n *\n * @param {Function} [selector] - Optional selector function which can use the multicasted source sequence as many times\n * as needed, without causing multiple subscriptions to the source sequence.\n * Subscribers to the given source will receive all notifications of the source from the time of the subscription on.\n * @return A function that returns a ConnectableObservable that upon connection\n * causes the source Observable to emit items to its Observers.\n * @deprecated Will be removed in v8. Use the {@link connectable} observable, the {@link connect} operator or the\n * {@link share} operator instead. See the overloads below for equivalent replacement examples of this operator's\n * behaviors.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function publish(selector?: OperatorFunction): MonoTypeOperatorFunction | OperatorFunction {\n return selector ? (source) => connect(selector)(source) : (source) => multicast(new Subject())(source);\n}\n","import { ConnectableObservable } from '../observable/ConnectableObservable';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Make a {@link ConnectableObservable} behave like a ordinary observable and automates the way\n * you can connect to it.\n *\n * Internally it counts the subscriptions to the observable and subscribes (only once) to the source if\n * the number of subscriptions is larger than 0. If the number of subscriptions is smaller than 1, it\n * unsubscribes from the source. This way you can make sure that everything before the *published*\n * refCount has only a single subscription independently of the number of subscribers to the target\n * observable.\n *\n * Note that using the {@link share} operator is exactly the same as using the `multicast(() => new Subject())` operator\n * (making the observable hot) and the *refCount* operator in a sequence.\n *\n * ![](refCount.png)\n *\n * ## Example\n *\n * In the following example there are two intervals turned into connectable observables\n * by using the *publish* operator. The first one uses the *refCount* operator, the\n * second one does not use it. You will notice that a connectable observable does nothing\n * until you call its connect function.\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { tap, publish, refCount } from 'rxjs/operators';\n *\n * // Turn the interval observable into a ConnectableObservable (hot)\n * const refCountInterval = interval(400).pipe(\n * tap((num) => console.log(`refCount ${num}`)),\n * publish(),\n * refCount()\n * );\n *\n * const publishedInterval = interval(400).pipe(\n * tap((num) => console.log(`publish ${num}`)),\n * publish()\n * );\n *\n * refCountInterval.subscribe();\n * refCountInterval.subscribe();\n * // 'refCount 0' -----> 'refCount 1' -----> etc\n * // All subscriptions will receive the same value and the tap (and\n * // every other operator) before the publish operator will be executed\n * // only once per event independently of the number of subscriptions.\n *\n * publishedInterval.subscribe();\n * // Nothing happens until you call .connect() on the observable.\n * ```\n *\n * @return A function that returns an Observable that automates the connection\n * to ConnectableObservable.\n * @see {@link ConnectableObservable}\n * @see {@link share}\n * @see {@link publish}\n * @deprecated Replaced with the {@link share} operator. How `share` is used\n * will depend on the connectable observable you created just prior to the\n * `refCount` operator.\n * Details: https://rxjs.dev/deprecations/multicasting\n */\nexport function refCount(): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let connection: Subscription | null = null;\n\n (source as any)._refCount++;\n\n const refCounter = new OperatorSubscriber(subscriber, undefined, undefined, undefined, () => {\n if (!source || (source as any)._refCount <= 0 || 0 < --(source as any)._refCount) {\n connection = null;\n return;\n }\n\n ///\n // Compare the local RefCountSubscriber's connection Subscription to the\n // connection Subscription on the shared ConnectableObservable. In cases\n // where the ConnectableObservable source synchronously emits values, and\n // the RefCountSubscriber's downstream Observers synchronously unsubscribe,\n // execution continues to here before the RefCountOperator has a chance to\n // supply the RefCountSubscriber with the shared connection Subscription.\n // For example:\n // ```\n // range(0, 10).pipe(\n // publish(),\n // refCount(),\n // take(5),\n // )\n // .subscribe();\n // ```\n // In order to account for this case, RefCountSubscriber should only dispose\n // the ConnectableObservable's shared connection Subscription if the\n // connection Subscription exists, *and* either:\n // a. RefCountSubscriber doesn't have a reference to the shared connection\n // Subscription yet, or,\n // b. RefCountSubscriber's connection Subscription reference is identical\n // to the shared connection Subscription\n ///\n\n const sharedConnection = (source as any)._connection;\n const conn = connection;\n connection = null;\n\n if (sharedConnection && (!conn || sharedConnection === conn)) {\n sharedConnection.unsubscribe();\n }\n\n subscriber.unsubscribe();\n });\n\n source.subscribe(refCounter);\n\n if (!refCounter.closed) {\n connection = (source as ConnectableObservable).connect();\n }\n });\n}\n","import { OperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { scanInternals } from './scanInternals';\n\nexport function scan(accumulator: (acc: A | V, value: V, index: number) => A): OperatorFunction;\nexport function scan(accumulator: (acc: A, value: V, index: number) => A, seed: A): OperatorFunction;\nexport function scan(accumulator: (acc: A | S, value: V, index: number) => A, seed: S): OperatorFunction;\n\n// TODO: link to a \"redux pattern\" section in the guide (location TBD)\n\n/**\n * Useful for encapsulating and managing state. Applies an accumulator (or \"reducer function\")\n * to each value from the source after an initial state is established -- either via\n * a `seed` value (second argument), or from the first value from the source.\n *\n * It's like {@link reduce}, but emits the current\n * accumulation state after each update\n *\n * ![](scan.png)\n *\n * This operator maintains an internal state and emits it after processing each value as follows:\n *\n * 1. First value arrives\n * - If a `seed` value was supplied (as the second argument to `scan`), let `state = seed` and `value = firstValue`.\n * - If NO `seed` value was supplied (no second argument), let `state = firstValue` and go to 3.\n * 2. Let `state = accumulator(state, value)`.\n * - If an error is thrown by `accumulator`, notify the consumer of an error. The process ends.\n * 3. Emit `state`.\n * 4. Next value arrives, let `value = nextValue`, go to 2.\n *\n * ## Example\n *\n * An average of previous numbers. This example shows how\n * not providing a `seed` can prime the stream with the\n * first value from the source.\n *\n * ```ts\n * import { interval, of } from 'rxjs';\n * import { scan, map } from 'rxjs/operators';\n *\n * const numbers$ = of(1, 2, 3);\n *\n * numbers$\n * .pipe(\n * // Get the sum of the numbers coming in.\n * scan((total, n) => total + n),\n * // Get the average by dividing the sum by the total number\n * // received so var (which is 1 more than the zero-based index).\n * map((sum, index) => sum / (index + 1))\n * )\n * .subscribe(console.log);\n * ```\n *\n * ## Example\n *\n * The Fibonacci sequence. This example shows how you can use\n * a seed to prime accumulation process. Also... you know... Fibinacci.\n * So important to like, computers and stuff that its whiteboarded\n * in job interviews. Now you can show them the Rx version! (Please don't, haha)\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { scan, map, startWith } from 'rxjs/operators';\n *\n * const firstTwoFibs = [0, 1];\n * // An endless stream of Fibonnaci numbers.\n * const fibonnaci$ = interval(1000).pipe(\n * // Scan to get the fibonnaci numbers (after 0, 1)\n * scan(([a, b]) => [b, a + b], firstTwoFibs),\n * // Get the second number in the tuple, it's the one you calculated\n * map(([, n]) => n),\n * // Start with our first two digits :)\n * startWith(...firstTwoFibs)\n * );\n *\n * fibonnaci$.subscribe(console.log);\n * ```\n *\n *\n * @see {@link expand}\n * @see {@link mergeScan}\n * @see {@link reduce}\n * @see {@link switchScan}\n *\n * @param accumulator A \"reducer function\". This will be called for each value after an initial state is\n * acquired.\n * @param seed The initial state. If this is not provided, the first value from the source will\n * be used as the initial state, and emitted without going through the accumulator. All subsequent values\n * will be processed by the accumulator function. If this is provided, all values will go through\n * the accumulator function.\n * @return A function that returns an Observable of the accumulated values.\n */\nexport function scan(accumulator: (acc: V | A | S, value: V, index: number) => A, seed?: S): OperatorFunction {\n // providing a seed of `undefined` *should* be valid and trigger\n // hasSeed! so don't use `seed !== undefined` checks!\n // For this reason, we have to check it here at the original call site\n // otherwise inside Operator/Subscriber we won't know if `undefined`\n // means they didn't provide anything or if they literally provided `undefined`\n return operate(scanInternals(accumulator, seed as S, arguments.length >= 2, true));\n}\n","import { Observable } from '../Observable';\nimport { Subscriber } from '../Subscriber';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * A basic scan operation. This is used for `scan` and `reduce`.\n * @param accumulator The accumulator to use\n * @param seed The seed value for the state to accumulate\n * @param hasSeed Whether or not a seed was provided\n * @param emitOnNext Whether or not to emit the state on next\n * @param emitBeforeComplete Whether or not to emit the before completion\n */\n\nexport function scanInternals(\n accumulator: (acc: V | A | S, value: V, index: number) => A,\n seed: S,\n hasSeed: boolean,\n emitOnNext: boolean,\n emitBeforeComplete?: undefined | true\n) {\n return (source: Observable, subscriber: Subscriber) => {\n // Whether or not we have state yet. This will only be\n // false before the first value arrives if we didn't get\n // a seed value.\n let hasState = hasSeed;\n // The state that we're tracking, starting with the seed,\n // if there is one, and then updated by the return value\n // from the accumulator on each emission.\n let state: any = seed;\n // An index to pass to the accumulator function.\n let index = 0;\n\n // Subscribe to our source. All errors and completions are passed through.\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Always increment the index.\n const i = index++;\n // Set the state\n state = hasState\n ? // We already have state, so we can get the new state from the accumulator\n accumulator(state, value, i)\n : // We didn't have state yet, a seed value was not provided, so\n\n // we set the state to the first value, and mark that we have state now\n ((hasState = true), value);\n\n // Maybe send it to the consumer.\n emitOnNext && subscriber.next(state);\n },\n // If an onComplete was given, call it, otherwise\n // just pass through the complete notification to the consumer.\n emitBeforeComplete &&\n (() => {\n hasState && subscriber.next(state);\n subscriber.complete();\n })\n )\n );\n };\n}\n","import { Observable } from '../Observable';\nimport { from } from '../observable/from';\nimport { take } from '../operators/take';\nimport { Subject } from '../Subject';\nimport { SafeSubscriber } from '../Subscriber';\nimport { Subscription } from '../Subscription';\nimport { MonoTypeOperatorFunction, SubjectLike } from '../types';\nimport { operate } from '../util/lift';\n\nexport interface ShareConfig {\n /**\n * The factory used to create the subject that will connect the source observable to\n * multicast consumers.\n */\n connector?: () => SubjectLike;\n /**\n * If true, the resulting observable will reset internal state on error from source and return to a \"cold\" state. This\n * allows the resulting observable to be \"retried\" in the event of an error.\n * If false, when an error comes from the source it will push the error into the connecting subject, and the subject\n * will remain the connecting subject, meaning the resulting observable will not go \"cold\" again, and subsequent retries\n * or resubscriptions will resubscribe to that same subject. In all cases, RxJS subjects will emit the same error again, however\n * {@link ReplaySubject} will also push its buffered values before pushing the error.\n * It is also possible to pass a notifier factory returning an observable instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnError?: boolean | ((error: any) => Observable);\n /**\n * If true, the resulting observable will reset internal state on completion from source and return to a \"cold\" state. This\n * allows the resulting observable to be \"repeated\" after it is done.\n * If false, when the source completes, it will push the completion through the connecting subject, and the subject\n * will remain the connecting subject, meaning the resulting observable will not go \"cold\" again, and subsequent repeats\n * or resubscriptions will resubscribe to that same subject.\n * It is also possible to pass a notifier factory returning an observable instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnComplete?: boolean | (() => Observable);\n /**\n * If true, when the number of subscribers to the resulting observable reaches zero due to those subscribers unsubscribing, the\n * internal state will be reset and the resulting observable will return to a \"cold\" state. This means that the next\n * time the resulting observable is subscribed to, a new subject will be created and the source will be subscribed to\n * again.\n * If false, when the number of subscribers to the resulting observable reaches zero due to unsubscription, the subject\n * will remain connected to the source, and new subscriptions to the result will be connected through that same subject.\n * It is also possible to pass a notifier factory returning an observable instead which grants more fine-grained\n * control over how and when the reset should happen. This allows behaviors like conditional or delayed resets.\n */\n resetOnRefCountZero?: boolean | (() => Observable);\n}\n\nexport function share(): MonoTypeOperatorFunction;\n\nexport function share(options: ShareConfig): MonoTypeOperatorFunction;\n\n/**\n * Returns a new Observable that multicasts (shares) the original Observable. As long as there is at least one\n * Subscriber this Observable will be subscribed and emitting data. When all subscribers have unsubscribed it will\n * unsubscribe from the source Observable. Because the Observable is multicasting it makes the stream `hot`.\n * This is an alias for `multicast(() => new Subject()), refCount()`.\n *\n * The subscription to the underlying source Observable can be reset (unsubscribe and resubscribe for new subscribers),\n * if the subscriber count to the shared observable drops to 0, or if the source Observable errors or completes. It is\n * possible to use notifier factories for the resets to allow for behaviors like conditional or delayed resets. Please\n * note that resetting on error or complete of the source Observable does not behave like a transparent retry or restart\n * of the source because the error or complete will be forwarded to all subscribers and their subscription will be\n * closed. Only new subscribers after a reset on error or complete happened will cause a fresh subscription to the\n * source. To achieve transparent retries or restarts pipe the source through appropriate operators before sharing.\n *\n * ![](share.png)\n *\n * ## Example\n * Generate new multicast Observable from the source Observable value\n * ```ts\n * import { interval } from 'rxjs';\n * import { share, map } from 'rxjs/operators';\n *\n * const source = interval(1000)\n * .pipe(\n * map((x: number) => {\n * console.log('Processing: ', x);\n * return x*x;\n * }),\n * share()\n * );\n *\n * source.subscribe(x => console.log('subscription 1: ', x));\n * source.subscribe(x => console.log('subscription 2: ', x));\n *\n * // Logs:\n * // Processing: 0\n * // subscription 1: 0\n * // subscription 2: 0\n * // Processing: 1\n * // subscription 1: 1\n * // subscription 2: 1\n * // Processing: 2\n * // subscription 1: 4\n * // subscription 2: 4\n * // Processing: 3\n * // subscription 1: 9\n * // subscription 2: 9\n * // ... and so on\n * ```\n *\n * ## Example with notifier factory: Delayed reset\n * ```ts\n * import { interval, timer } from 'rxjs';\n * import { share, take } from 'rxjs/operators';\n *\n * const source = interval(1000).pipe(take(3), share({ resetOnRefCountZero: () => timer(1000) }));\n *\n * const subscriptionOne = source.subscribe(x => console.log('subscription 1: ', x));\n * setTimeout(() => subscriptionOne.unsubscribe(), 1300);\n *\n * setTimeout(() => source.subscribe(x => console.log('subscription 2: ', x)), 1700);\n *\n * setTimeout(() => source.subscribe(x => console.log('subscription 3: ', x)), 5000);\n *\n * // Logs:\n * // subscription 1: 0\n * // (subscription 1 unsubscribes here)\n * // (subscription 2 subscribes here ~400ms later, source was not reset)\n * // subscription 2: 1\n * // subscription 2: 2\n * // (subscription 2 unsubscribes here)\n * // (subscription 3 subscribes here ~2000ms later, source did reset before)\n * // subscription 3: 0\n * // subscription 3: 1\n * // subscription 3: 2\n * ```\n *\n * @see {@link api/index/function/interval}\n * @see {@link map}\n *\n * @return A function that returns an Observable that mirrors the source.\n */\nexport function share(options: ShareConfig = {}): MonoTypeOperatorFunction {\n const { connector = () => new Subject(), resetOnError = true, resetOnComplete = true, resetOnRefCountZero = true } = options;\n // It's necessary to use a wrapper here, as the _operator_ must be\n // referentially transparent. Otherwise, it cannot be used in calls to the\n // static `pipe` function - to create a partial pipeline.\n //\n // The _operator function_ - the function returned by the _operator_ - will\n // not be referentially transparent - as it shares its source - but the\n // _operator function_ is called when the complete pipeline is composed via a\n // call to a source observable's `pipe` method - not when the static `pipe`\n // function is called.\n return (wrapperSource) => {\n let connection: SafeSubscriber | null = null;\n let resetConnection: Subscription | null = null;\n let subject: SubjectLike | null = null;\n let refCount = 0;\n let hasCompleted = false;\n let hasErrored = false;\n\n const cancelReset = () => {\n resetConnection?.unsubscribe();\n resetConnection = null;\n };\n // Used to reset the internal state to a \"cold\"\n // state, as though it had never been subscribed to.\n const reset = () => {\n cancelReset();\n connection = subject = null;\n hasCompleted = hasErrored = false;\n };\n const resetAndUnsubscribe = () => {\n // We need to capture the connection before\n // we reset (if we need to reset).\n const conn = connection;\n reset();\n conn?.unsubscribe();\n };\n\n return operate((source, subscriber) => {\n refCount++;\n if (!hasErrored && !hasCompleted) {\n cancelReset();\n }\n\n // Create the subject if we don't have one yet. Grab a local reference to\n // it as well, which avoids non-null assertations when using it and, if we\n // connect to it now, then error/complete need a reference after it was\n // reset.\n const dest = (subject = subject ?? connector());\n\n // Add the teardown directly to the subscriber - instead of returning it -\n // so that the handling of the subscriber's unsubscription will be wired\n // up _before_ the subscription to the source occurs. This is done so that\n // the assignment to the source connection's `closed` property will be seen\n // by synchronous firehose sources.\n subscriber.add(() => {\n refCount--;\n\n // If we're resetting on refCount === 0, and it's 0, we only want to do\n // that on \"unsubscribe\", really. Resetting on error or completion is a different\n // configuration.\n if (refCount === 0 && !hasErrored && !hasCompleted) {\n resetConnection = handleReset(resetAndUnsubscribe, resetOnRefCountZero);\n }\n });\n\n // The following line adds the subscription to the subscriber passed.\n // Basically, `subscriber === dest.subscribe(subscriber)` is `true`.\n dest.subscribe(subscriber);\n\n if (!connection) {\n // We need to create a subscriber here - rather than pass an observer and\n // assign the returned subscription to connection - because it's possible\n // for reentrant subscriptions to the shared observable to occur and in\n // those situations we want connection to be already-assigned so that we\n // don't create another connection to the source.\n connection = new SafeSubscriber({\n next: (value) => dest.next(value),\n error: (err) => {\n hasErrored = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnError, err);\n dest.error(err);\n },\n complete: () => {\n hasCompleted = true;\n cancelReset();\n resetConnection = handleReset(reset, resetOnComplete);\n dest.complete();\n },\n });\n from(source).subscribe(connection);\n }\n })(wrapperSource);\n };\n}\n\nfunction handleReset(\n reset: () => void,\n on: boolean | ((...args: T) => Observable),\n ...args: T\n): Subscription | null {\n if (on === true) {\n reset();\n\n return null;\n }\n\n if (on === false) {\n return null;\n }\n\n return on(...args)\n .pipe(take(1))\n .subscribe(() => reset());\n}\n","import { ReplaySubject } from '../ReplaySubject';\nimport { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { share } from './share';\n\nexport interface ShareReplayConfig {\n bufferSize?: number;\n windowTime?: number;\n refCount: boolean;\n scheduler?: SchedulerLike;\n}\n\nexport function shareReplay(config: ShareReplayConfig): MonoTypeOperatorFunction;\nexport function shareReplay(bufferSize?: number, windowTime?: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n * Share source and replay specified number of emissions on subscription.\n *\n * This operator is a specialization of `replay` that connects to a source observable\n * and multicasts through a `ReplaySubject` constructed with the specified arguments.\n * A successfully completed source will stay cached in the `shareReplayed observable` forever,\n * but an errored source can be retried.\n *\n * ## Why use shareReplay?\n * You generally want to use `shareReplay` when you have side-effects or taxing computations\n * that you do not wish to be executed amongst multiple subscribers.\n * It may also be valuable in situations where you know you will have late subscribers to\n * a stream that need access to previously emitted values.\n * This ability to replay values on subscription is what differentiates {@link share} and `shareReplay`.\n *\n * ![](shareReplay.png)\n *\n * ## Reference counting\n * As of RXJS version 6.4.0 a new overload signature was added to allow for manual control over what\n * happens when the operators internal reference counter drops to zero.\n * If `refCount` is true, the source will be unsubscribed from once the reference count drops to zero, i.e.\n * the inner `ReplaySubject` will be unsubscribed. All new subscribers will receive value emissions from a\n * new `ReplaySubject` which in turn will cause a new subscription to the source observable.\n * If `refCount` is false on the other hand, the source will not be unsubscribed meaning that the inner\n * `ReplaySubject` will still be subscribed to the source (and potentially run for ever).\n *\n * ## Example\n * ```ts\n * import { interval } from 'rxjs';\n * import { shareReplay, take } from 'rxjs/operators';\n *\n * const obs$ = interval(1000);\n * const shared$ = obs$.pipe(\n * take(4),\n * shareReplay(3)\n * );\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * ```\n *\n * ## Example for refCount usage\n * ```ts\n * import { interval, Observable, defer } from 'rxjs';\n * import { shareReplay, take, tap, finalize } from 'rxjs/operators';\n *\n * const log = (source: Observable, name: string) => defer(() => {\n * console.log(`${name}: subscribed`);\n * return source.pipe(\n * tap({\n * next: value => console.log(`${name}: ${value}`),\n * complete: () => console.log(`${name}: complete`)\n * }),\n * finalize(() => console.log(`${name}: unsubscribed`))\n * );\n * });\n *\n * const obs$ = log(interval(1000), 'source');\n *\n * const shared$ = log(obs$.pipe(\n * shareReplay({bufferSize: 1, refCount: true }),\n * take(2),\n * ), 'shared');\n *\n * shared$.subscribe(x => console.log('sub A: ', x));\n * shared$.subscribe(y => console.log('sub B: ', y));\n *\n * // PRINTS:\n * // shared: subscribed <-- reference count = 1\n * // source: subscribed\n * // shared: subscribed <-- reference count = 2\n * // source: 0\n * // shared: 0\n * // sub A: 0\n * // shared: 0\n * // sub B: 0\n * // source: 1\n * // shared: 1\n * // sub A: 1\n * // shared: complete <-- take(2) completes the subscription for sub A\n * // shared: unsubscribed <-- reference count = 1\n * // shared: 1\n * // sub B: 1\n * // shared: complete <-- take(2) completes the subscription for sub B\n * // shared: unsubscribed <-- reference count = 0\n * // source: unsubscribed <-- replaySubject unsubscribes from source observable because the reference count dropped to 0 and refCount is true\n *\n * // In case of refCount being false, the unsubscribe is never called on the source and the source would keep on emitting, even if no subscribers\n * // are listening.\n * // source: 2\n * // source: 3\n * // source: 4\n * // ...\n * ```\n *\n * @see {@link publish}\n * @see {@link share}\n * @see {@link publishReplay}\n *\n * @param {Number} [bufferSize=Infinity] Maximum element count of the replay buffer.\n * @param {Number} [windowTime=Infinity] Maximum time length of the replay buffer in milliseconds.\n * @param {Scheduler} [scheduler] Scheduler where connected observers within the selector function\n * will be invoked on.\n * @return A function that returns an Observable sequence that contains the\n * elements of a sequence produced by multicasting the source sequence within a\n * selector function.\n */\nexport function shareReplay(\n configOrBufferSize?: ShareReplayConfig | number,\n windowTime?: number,\n scheduler?: SchedulerLike\n): MonoTypeOperatorFunction {\n let bufferSize: number;\n let refCount = false;\n if (configOrBufferSize && typeof configOrBufferSize === 'object') {\n bufferSize = configOrBufferSize.bufferSize ?? Infinity;\n windowTime = configOrBufferSize.windowTime ?? Infinity;\n refCount = !!configOrBufferSize.refCount;\n scheduler = configOrBufferSize.scheduler;\n } else {\n bufferSize = configOrBufferSize ?? Infinity;\n }\n return share({\n connector: () => new ReplaySubject(bufferSize, windowTime, scheduler),\n resetOnError: true,\n resetOnComplete: false,\n resetOnRefCountZero: refCount\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { filter } from './filter';\n\n/**\n * Returns an Observable that skips the first `count` items emitted by the source Observable.\n *\n * ![](skip.png)\n *\n * Skips the values until the sent notifications are equal or less than provided skip count. It raises\n * an error if skip count is equal or more than the actual number of emits and source raises an error.\n *\n * ## Example\n * Skip the values before the emission\n * ```ts\n * import { interval } from 'rxjs';\n * import { skip } from 'rxjs/operators';\n *\n * //emit every half second\n * const source = interval(500);\n * //skip the first 10 emitted values\n * const example = source.pipe(skip(10));\n * //output: 10...11...12...13........\n * const subscribe = example.subscribe(val => console.log(val));\n * ```\n *\n * @see {@link last}\n * @see {@link skipWhile}\n * @see {@link skipUntil}\n * @see {@link skipLast}\n *\n * @param {Number} count - The number of times, items emitted by source Observable should be skipped.\n * @return A function that returns an Observable that skips the first `count`\n * values emitted by the source Observable.\n */\nexport function skip(count: number): MonoTypeOperatorFunction {\n return filter((_, index) => count <= index);\n}\n","import { concat } from '../observable/concat';\nimport { OperatorFunction, SchedulerLike, ValueFromArray } from '../types';\nimport { popScheduler } from '../util/args';\nimport { operate } from '../util/lift';\n\n// Devs are more likely to pass null or undefined than they are a scheduler\n// without accompanying values. To make things easier for (naughty) devs who\n// use the `strictNullChecks: false` TypeScript compiler option, these\n// overloads with explicit null and undefined values are included.\n\nexport function startWith(value: null): OperatorFunction;\nexport function startWith(value: undefined): OperatorFunction;\n\n/** @deprecated The `scheduler` parameter will be removed in v8. Use `scheduled` and `concatAll`. Details: https://rxjs.dev/deprecations/scheduler-argument */\nexport function startWith(\n ...valuesAndScheduler: [...A, SchedulerLike]\n): OperatorFunction>;\nexport function startWith(...values: A): OperatorFunction>;\n\n/**\n * Returns an observable that, at the moment of subscription, will synchronously emit all\n * values provided to this operator, then subscribe to the source and mirror all of its emissions\n * to subscribers.\n *\n * This is a useful way to know when subscription has occurred on an existing observable.\n *\n * First emits its arguments in order, and then any\n * emissions from the source.\n *\n * ![](startWith.png)\n *\n * ## Examples\n *\n * Emit a value when a timer starts.\n *\n * ```ts\n * import { timer } from 'rxjs';\n * import { startWith, map } from 'rxjs/operators';\n *\n * timer(1000)\n * .pipe(\n * map(() => 'timer emit'),\n * startWith('timer start')\n * )\n * .subscribe(x => console.log(x));\n *\n * // results:\n * // \"timer start\"\n * // \"timer emit\"\n * ```\n *\n * @param values Items you want the modified Observable to emit first.\n * @return A function that returns an Observable that synchronously emits\n * provided values before subscribing to the source Observable.\n *\n * @see {@link endWith}\n * @see {@link finalize}\n * @see {@link concat}\n */\nexport function startWith(...values: D[]): OperatorFunction {\n const scheduler = popScheduler(values);\n return operate((source, subscriber) => {\n // Here we can't pass `undefined` as a scheduler, because if we did, the\n // code inside of `concat` would be confused by the `undefined`, and treat it\n // like an invalid observable. So we have to split it two different ways.\n (scheduler ? concat(values, source, scheduler) : concat(values, source)).subscribe(subscriber);\n });\n}\n","import { MonoTypeOperatorFunction, SchedulerLike } from '../types';\nimport { operate } from '../util/lift';\n\n/**\n * Asynchronously subscribes Observers to this Observable on the specified {@link SchedulerLike}.\n *\n * With `subscribeOn` you can decide what type of scheduler a specific Observable will be using when it is subscribed to.\n *\n * Schedulers control the speed and order of emissions to observers from an Observable stream.\n *\n * ![](subscribeOn.png)\n *\n * ## Example\n *\n * Given the following code:\n *\n * ```ts\n * import { of, merge } from 'rxjs';\n *\n * const a = of(1, 2, 3);\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 1\n * // 2\n * // 3\n * // 4\n * // 5\n * // 6\n * ```\n *\n * Both Observable `a` and `b` will emit their values directly and synchronously once they are subscribed to.\n *\n * If we instead use the `subscribeOn` operator declaring that we want to use the {@link asyncScheduler} for values emited by Observable `a`:\n *\n * ```ts\n * import { of, merge, asyncScheduler } from 'rxjs';\n * import { subscribeOn } from 'rxjs/operators';\n *\n * const a = of(1, 2, 3).pipe(subscribeOn(asyncScheduler));\n * const b = of(4, 5, 6);\n *\n * merge(a, b).subscribe(console.log);\n *\n * // Outputs\n * // 4\n * // 5\n * // 6\n * // 1\n * // 2\n * // 3\n * ```\n *\n * The reason for this is that Observable `b` emits its values directly and synchronously like before\n * but the emissions from `a` are scheduled on the event loop because we are now using the {@link asyncScheduler} for that specific Observable.\n *\n * @param scheduler The {@link SchedulerLike} to perform subscription actions on.\n * @param delay A delay to pass to the scheduler to delay subscriptions\n * @return A function that returns an Observable modified so that its\n * subscriptions happen on the specified {@link SchedulerLike}.\n */\nexport function subscribeOn(scheduler: SchedulerLike, delay: number = 0): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n subscriber.add(scheduler.schedule(() => source.subscribe(subscriber), delay));\n });\n}\n","import { Subscriber } from '../Subscriber';\nimport { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';\nimport { innerFrom } from '../observable/innerFrom';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/* tslint:disable:max-line-length */\nexport function switchMap>(\n project: (value: T, index: number) => O\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap>(\n project: (value: T, index: number) => O,\n resultSelector: undefined\n): OperatorFunction>;\n/** @deprecated The `resultSelector` parameter will be removed in v8. Use an inner `map` instead. Details: https://rxjs.dev/deprecations/resultSelector */\nexport function switchMap>(\n project: (value: T, index: number) => O,\n resultSelector: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction;\n/* tslint:enable:max-line-length */\n\n/**\n * Projects each source value to an Observable which is merged in the output\n * Observable, emitting values only from the most recently projected Observable.\n *\n * Maps each value to an Observable, then flattens all of\n * these inner Observables.\n *\n * ![](switchMap.png)\n *\n * Returns an Observable that emits items based on applying a function that you\n * supply to each item emitted by the source Observable, where that function\n * returns an (so-called \"inner\") Observable. Each time it observes one of these\n * inner Observables, the output Observable begins emitting the items emitted by\n * that inner Observable. When a new inner Observable is emitted, `switchMap`\n * stops emitting items from the earlier-emitted inner Observable and begins\n * emitting items from the new one. It continues to behave like this for\n * subsequent inner Observables.\n *\n * ## Example\n * Generate new Observable according to source Observable values\n * ```typescript\n * import { of } from 'rxjs';\n * import { switchMap } from 'rxjs/operators';\n *\n * const switched = of(1, 2, 3).pipe(switchMap((x: number) => of(x, x ** 2, x ** 3)));\n * switched.subscribe(x => console.log(x));\n * // outputs\n * // 1\n * // 1\n * // 1\n * // 2\n * // 4\n * // 8\n * // ... and so on\n * ```\n *\n * Restart an interval Observable on every click event\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { switchMap } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(switchMap((ev) => interval(1000)));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link concatMap}\n * @see {@link exhaustMap}\n * @see {@link mergeMap}\n * @see {@link switchAll}\n * @see {@link switchMapTo}\n *\n * @param {function(value: T, ?index: number): ObservableInput} project A function\n * that, when applied to an item emitted by the source Observable, returns an\n * Observable.\n * @return A function that returns an Observable that emits the result of\n * applying the projection function (and the optional deprecated\n * `resultSelector`) to each item emitted by the source Observable and taking\n * only the values from the most recently projected inner Observable.\n */\nexport function switchMap>(\n project: (value: T, index: number) => O,\n resultSelector?: (outerValue: T, innerValue: ObservedValueOf, outerIndex: number, innerIndex: number) => R\n): OperatorFunction | R> {\n return operate((source, subscriber) => {\n let innerSubscriber: Subscriber> | null = null;\n let index = 0;\n // Whether or not the source subscription has completed\n let isComplete = false;\n\n // We only complete the result if the source is complete AND we don't have an active inner subscription.\n // This is called both when the source completes and when the inners complete.\n const checkComplete = () => isComplete && !innerSubscriber && subscriber.complete();\n\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Cancel the previous inner subscription if there was one\n innerSubscriber?.unsubscribe();\n let innerIndex = 0;\n const outerIndex = index++;\n // Start the next inner subscription\n innerFrom(project(value, outerIndex)).subscribe(\n (innerSubscriber = new OperatorSubscriber(\n subscriber,\n // When we get a new inner value, next it through. Note that this is\n // handling the deprecate result selector here. This is because with this architecture\n // it ends up being smaller than using the map operator.\n (innerValue) => subscriber.next(resultSelector ? resultSelector(value, innerValue, outerIndex, innerIndex++) : innerValue),\n () => {\n // The inner has completed. Null out the inner subcriber to\n // free up memory and to signal that we have no inner subscription\n // currently.\n innerSubscriber = null!;\n checkComplete();\n }\n ))\n );\n },\n () => {\n isComplete = true;\n checkComplete();\n }\n )\n );\n });\n}\n","import { MonoTypeOperatorFunction } from '../types';\nimport { EMPTY } from '../observable/empty';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Emits only the first `count` values emitted by the source Observable.\n *\n * Takes the first `count` values from the source, then\n * completes.\n *\n * ![](take.png)\n *\n * `take` returns an Observable that emits only the first `count` values emitted\n * by the source Observable. If the source emits fewer than `count` values then\n * all of its values are emitted. After that, it completes, regardless if the\n * source completes.\n *\n * ## Example\n * Take the first 5 seconds of an infinite 1-second interval Observable\n * ```ts\n * import { interval } from 'rxjs';\n * import { take } from 'rxjs/operators';\n *\n * const intervalCount = interval(1000);\n * const takeFive = intervalCount.pipe(take(5));\n * takeFive.subscribe(x => console.log(x));\n *\n * // Logs:\n * // 0\n * // 1\n * // 2\n * // 3\n * // 4\n * ```\n *\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param count The maximum number of `next` values to emit.\n * @return A function that returns an Observable that emits only the first\n * `count` values emitted by the source Observable, or all of the values from\n * the source if the source emits fewer than `count` values.\n */\nexport function take(count: number): MonoTypeOperatorFunction {\n return count <= 0\n ? // If we are taking no values, that's empty.\n () => EMPTY\n : operate((source, subscriber) => {\n let seen = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n // Increment the number of values we have seen,\n // then check it against the allowed count to see\n // if we are still letting values through.\n if (++seen <= count) {\n subscriber.next(value);\n // If we have met or passed our allowed count,\n // we need to complete. We have to do <= here,\n // because re-entrant code will increment `seen` twice.\n if (count <= seen) {\n subscriber.complete();\n }\n }\n })\n );\n });\n}\n","import { EMPTY } from '../observable/empty';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * Waits for the source to complete, then emits the last N values from the source,\n * as specified by the `count` argument.\n *\n * ![](takeLast.png)\n *\n * `takeLast` results in an observable that will hold values up to `count` values in memory,\n * until the source completes. It then pushes all values in memory to the consumer, in the\n * order they were received from the source, then notifies the consumer that it is\n * complete.\n *\n * If for some reason the source completes before the `count` supplied to `takeLast` is reached,\n * all values received until that point are emitted, and then completion is notified.\n *\n * **Warning**: Using `takeLast` with an observable that never completes will result\n * in an observable that never emits a value.\n *\n * ## Example\n *\n * Take the last 3 values of an Observable with many values\n *\n * ```ts\n * import { range } from 'rxjs';\n * import { takeLast } from 'rxjs/operators';\n *\n * const many = range(1, 100);\n * const lastThree = many.pipe(takeLast(3));\n * lastThree.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeUntil}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param count The maximum number of values to emit from the end of\n * the sequence of values emitted by the source Observable.\n * @return A function that returns an Observable that emits at most the last\n * `count` values emitted by the source Observable.\n */\nexport function takeLast(count: number): MonoTypeOperatorFunction {\n return count <= 0\n ? () => EMPTY\n : operate((source, subscriber) => {\n // This buffer will hold the values we are going to emit\n // when the source completes. Since we only want to take the\n // last N values, we can't emit until we're sure we're not getting\n // any more values.\n let buffer: T[] = [];\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n // Add the most recent value onto the end of our buffer.\n buffer.push(value);\n // If our buffer is now larger than the number of values we\n // want to take, we remove the oldest value from the buffer.\n count < buffer.length && buffer.shift();\n },\n () => {\n // The source completed, we now know what are last values\n // are, emit them in the order they were received.\n for (const value of buffer) {\n subscriber.next(value);\n }\n subscriber.complete();\n },\n // Errors are passed through to the consumer\n undefined,\n () => {\n // During teardown release the values in our buffer.\n buffer = null!;\n }\n )\n );\n });\n}\n","import { MonoTypeOperatorFunction, ObservableInput } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { noop } from '../util/noop';\n\n/**\n * Emits the values emitted by the source Observable until a `notifier`\n * Observable emits a value.\n *\n * Lets values pass until a second Observable,\n * `notifier`, emits a value. Then, it completes.\n *\n * ![](takeUntil.png)\n *\n * `takeUntil` subscribes and begins mirroring the source Observable. It also\n * monitors a second Observable, `notifier` that you provide. If the `notifier`\n * emits a value, the output Observable stops mirroring the source Observable\n * and completes. If the `notifier` doesn't emit any value and completes\n * then `takeUntil` will pass all values.\n *\n * ## Example\n * Tick every second until the first click happens\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { takeUntil } from 'rxjs/operators';\n *\n * const source = interval(1000);\n * const clicks = fromEvent(document, 'click');\n * const result = source.pipe(takeUntil(clicks));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeWhile}\n * @see {@link skip}\n *\n * @param {Observable} notifier The Observable whose first emitted value will\n * cause the output Observable of `takeUntil` to stop emitting values from the\n * source Observable.\n * @return A function that returns an Observable that emits the values from the\n * source Observable until `notifier` emits its first value.\n */\nexport function takeUntil(notifier: ObservableInput): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n innerFrom(notifier).subscribe(new OperatorSubscriber(subscriber, () => subscriber.complete(), noop));\n !subscriber.closed && source.subscribe(subscriber);\n });\n}\n","import { OperatorFunction, MonoTypeOperatorFunction, TruthyTypesOf } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\nexport function takeWhile(predicate: BooleanConstructor, inclusive: true): MonoTypeOperatorFunction;\nexport function takeWhile(predicate: BooleanConstructor, inclusive: false): OperatorFunction>;\nexport function takeWhile(predicate: BooleanConstructor): OperatorFunction>;\nexport function takeWhile(predicate: (value: T, index: number) => value is S): OperatorFunction;\nexport function takeWhile(predicate: (value: T, index: number) => value is S, inclusive: false): OperatorFunction;\nexport function takeWhile(predicate: (value: T, index: number) => boolean, inclusive?: boolean): MonoTypeOperatorFunction;\n\n/**\n * Emits values emitted by the source Observable so long as each value satisfies\n * the given `predicate`, and then completes as soon as this `predicate` is not\n * satisfied.\n *\n * Takes values from the source only while they pass the\n * condition given. When the first value does not satisfy, it completes.\n *\n * ![](takeWhile.png)\n *\n * `takeWhile` subscribes and begins mirroring the source Observable. Each value\n * emitted on the source is given to the `predicate` function which returns a\n * boolean, representing a condition to be satisfied by the source values. The\n * output Observable emits the source values until such time as the `predicate`\n * returns false, at which point `takeWhile` stops mirroring the source\n * Observable and completes the output Observable.\n *\n * ## Example\n * Emit click events only while the clientX property is greater than 200\n * ```ts\n * import { fromEvent } from 'rxjs';\n * import { takeWhile } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const result = clicks.pipe(takeWhile(ev => ev.clientX > 200));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link take}\n * @see {@link takeLast}\n * @see {@link takeUntil}\n * @see {@link skip}\n *\n * @param {function(value: T, index: number): boolean} predicate A function that\n * evaluates a value emitted by the source Observable and returns a boolean.\n * Also takes the (zero-based) index as the second argument.\n * @param {boolean} inclusive When set to `true` the value that caused\n * `predicate` to return `false` will also be emitted.\n * @return A function that returns an Observable that emits values from the\n * source Observable so long as each value satisfies the condition defined by\n * the `predicate`, then completes.\n */\nexport function takeWhile(predicate: (value: T, index: number) => boolean, inclusive = false): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let index = 0;\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n const result = predicate(value, index++);\n (result || inclusive) && subscriber.next(value);\n !result && subscriber.complete();\n })\n );\n });\n}\n","import { MonoTypeOperatorFunction, Observer } from '../types';\nimport { isFunction } from '../util/isFunction';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { identity } from '../util/identity';\n\nexport interface TapObserver extends Observer {\n subscribe: () => void;\n unsubscribe: () => void;\n finalize: () => void;\n}\n\nexport function tap(observer?: Partial>): MonoTypeOperatorFunction;\nexport function tap(next: (value: T) => void): MonoTypeOperatorFunction;\n/** @deprecated Instead of passing separate callback arguments, use an observer argument. Signatures taking separate callback arguments will be removed in v8. Details: https://rxjs.dev/deprecations/subscribe-arguments */\nexport function tap(\n next?: ((value: T) => void) | null,\n error?: ((error: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction;\n\n/**\n * Used to perform side-effects for notifications from the source observable\n *\n * Used when you want to affect outside state with a notification without altering the notification\n *\n * ![](tap.png)\n *\n * Tap is designed to allow the developer a designated place to perform side effects. While you _could_ perform side-effects\n * inside of a `map` or a `mergeMap`, that would make their mapping functions impure, which isn't always a big deal, but will\n * make it so you can't do things like memoize those functions. The `tap` operator is designed solely for such side-effects to\n * help you remove side-effects from other operations.\n *\n * For any notification, next, error, or complete, `tap` will call the appropriate callback you have provided to it, via a function\n * reference, or a partial observer, then pass that notification down the stream.\n *\n * The observable returned by `tap` is an exact mirror of the source, with one exception: Any error that occurs -- synchronously -- in a handler\n * provided to `tap` will be emitted as an error from the returned observable.\n *\n * > Be careful! You can mutate objects as they pass through the `tap` operator's handlers.\n *\n * The most common use of `tap` is actually for debugging. You can place a `tap(console.log)` anywhere\n * in your observable `pipe`, log out the notifications as they are emitted by the source returned by the previous\n * operation.\n *\n * ## Example\n * Check a random number before it is handled. Below is an observable that will use a random number between 0 and 1,\n * and emit \"big\" or \"small\" depending on the size of that number. But we wanted to log what the original number\n * was, so we have added a `tap(console.log)`.\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { tap, map } from 'rxjs/operators';\n *\n * of(Math.random()).pipe(\n * tap(console.log),\n * map(n => n > 0.5 ? 'big' : 'small')\n * ).subscribe(console.log);\n * ```\n *\n * ## Example\n * Using `tap` to analyze a value and force an error. Below is an observable where in our system we only\n * want to emit numbers 3 or less we get from another source. We can force our observable to error\n * using `tap`.\n *\n * ```ts\n * import { of } from 'rxjs';\n * import { tap } from 'rxjs/operators';\n *\n * const source = of(1, 2, 3, 4, 5)\n *\n * source.pipe(\n * tap(n => {\n * if (n > 3) {\n * throw new TypeError(`Value ${n} is greater than 3`)\n * }\n * })\n * )\n * .subscribe(console.log);\n * ```\n *\n * ## Example\n * We want to know when an observable completes before moving on to the next observable. The system\n * below will emit a random series of `\"X\"` characters from 3 different observables in sequence. The\n * only way we know when one observable completes and moves to the next one, in this case, is because\n * we have added a `tap` with the side-effect of logging to console.\n *\n * ```ts\n * import { of, interval } from 'rxjs';\n * import { tap, map, concatMap, take } from 'rxjs/operators';\n *\n *\n * of(1, 2, 3).pipe(\n * concatMap(n => interval(1000).pipe(\n * take(Math.round(Math.random() * 10)),\n * map(() => 'X'),\n * tap({\n * complete: () => console.log(`Done with ${n}`)\n * })\n * ))\n * )\n * .subscribe(console.log);\n * ```\n *\n * @see {@link finalize}\n * @see {@link Observable#subscribe}\n *\n * @param observerOrNext A next handler or partial observer\n * @param error An error handler\n * @param complete A completion handler\n * @return A function that returns an Observable identical to the source, but\n * runs the specified Observer or callback(s) for each item.\n */\nexport function tap(\n observerOrNext?: Partial> | ((value: T) => void) | null,\n error?: ((e: any) => void) | null,\n complete?: (() => void) | null\n): MonoTypeOperatorFunction {\n // We have to check to see not only if next is a function,\n // but if error or complete were passed. This is because someone\n // could technically call tap like `tap(null, fn)` or `tap(null, null, fn)`.\n const tapObserver =\n isFunction(observerOrNext) || error || complete\n ? // tslint:disable-next-line: no-object-literal-type-assertion\n ({ next: observerOrNext as Exclude>>, error, complete } as Partial>)\n : observerOrNext;\n\n return tapObserver\n ? operate((source, subscriber) => {\n tapObserver.subscribe?.();\n let isUnsub = true;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n tapObserver.next?.(value);\n subscriber.next(value);\n },\n () => {\n isUnsub = false;\n tapObserver.complete?.();\n subscriber.complete();\n },\n (err) => {\n isUnsub = false;\n tapObserver.error?.(err);\n subscriber.error(err);\n },\n () => {\n if (isUnsub) {\n tapObserver.unsubscribe?.();\n }\n tapObserver.finalize?.();\n }\n )\n );\n })\n : // Tap was called with no valid tap observer or handler\n // (e.g. `tap(null, null, null)` or `tap(null)` or `tap()`)\n // so we're going to just mirror the source.\n identity;\n}\n","import { EmptyError } from '../util/EmptyError';\nimport { MonoTypeOperatorFunction } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\n\n/**\n * If the source observable completes without emitting a value, it will emit\n * an error. The error will be created at that time by the optional\n * `errorFactory` argument, otherwise, the error will be {@link EmptyError}.\n *\n * ![](throwIfEmpty.png)\n *\n * ## Example\n * ```ts\n * import { fromEvent, timer } from 'rxjs';\n * import { throwIfEmpty, takeUntil } from 'rxjs/operators';\n *\n * const click$ = fromEvent(document, 'click');\n *\n * click$.pipe(\n * takeUntil(timer(1000)),\n * throwIfEmpty(\n * () => new Error('the document was not clicked within 1 second')\n * ),\n * )\n * .subscribe({\n * next() { console.log('The button was clicked'); },\n * error(err) { console.error(err); }\n * });\n * ```\n *\n * @param errorFactory A factory function called to produce the\n * error to be thrown when the source observable completes without emitting a\n * value.\n * @return A function that returns an Observable that throws an error if the\n * source Observable completed without emitting.\n */\nexport function throwIfEmpty(errorFactory: () => any = defaultErrorFactory): MonoTypeOperatorFunction {\n return operate((source, subscriber) => {\n let hasValue = false;\n source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n hasValue = true;\n subscriber.next(value);\n },\n () => (hasValue ? subscriber.complete() : subscriber.error(errorFactory()))\n )\n );\n });\n}\n\nfunction defaultErrorFactory() {\n return new EmptyError();\n}\n","import { asyncScheduler } from '../scheduler/async';\nimport { MonoTypeOperatorFunction, SchedulerLike, OperatorFunction, ObservableInput, ObservedValueOf } from '../types';\nimport { isValidDate } from '../util/isDate';\nimport { Subscription } from '../Subscription';\nimport { operate } from '../util/lift';\nimport { Observable } from '../Observable';\nimport { innerFrom } from '../observable/innerFrom';\nimport { createErrorClass } from '../util/createErrorClass';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport interface TimeoutConfig = ObservableInput, M = unknown> {\n /**\n * The time allowed between values from the source before timeout is triggered.\n */\n each?: number;\n\n /**\n * The relative time as a `number` in milliseconds, or a specific time as a `Date` object,\n * by which the first value must arrive from the source before timeout is triggered.\n */\n first?: number | Date;\n\n /**\n * The scheduler to use with time-related operations within this operator. Defaults to {@link asyncScheduler}\n */\n scheduler?: SchedulerLike;\n\n /**\n * A factory used to create observable to switch to when timeout occurs. Provides\n * a {@link TimeoutInfo} about the source observable's emissions and what delay or\n * exact time triggered the timeout.\n */\n with?: (info: TimeoutInfo) => O;\n\n /**\n * Optional additional metadata you can provide to code that handles\n * the timeout, will be provided through the {@link TimeoutError}.\n * This can be used to help identify the source of a timeout or pass along\n * other information related to the timeout.\n */\n meta?: M;\n}\n\nexport interface TimeoutInfo {\n /** Optional metadata that was provided to the timeout configuration. */\n readonly meta: M;\n /** The number of messages seen before the timeout */\n readonly seen: number;\n /** The last message seen */\n readonly lastValue: T | null;\n}\n\n/**\n * An error emitted when a timeout occurs.\n */\nexport interface TimeoutError extends Error {\n /**\n * The information provided to the error by the timeout\n * operation that created the error. Will be `null` if\n * used directly in non-RxJS code with an empty constructor.\n * (Note that using this constructor directly is not recommended,\n * you should create your own errors)\n */\n info: TimeoutInfo | null;\n}\n\nexport interface TimeoutErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (info?: TimeoutInfo): TimeoutError;\n}\n\n/**\n * An error thrown by the {@link operators/timeout} operator.\n *\n * Provided so users can use as a type and do quality comparisons.\n * We recommend you do not subclass this or create instances of this class directly.\n * If you have need of a error representing a timeout, you should\n * create your own error class and use that.\n *\n * @see {@link operators/timeout}\n *\n * @class TimeoutError\n */\nexport const TimeoutError: TimeoutErrorCtor = createErrorClass(\n (_super) =>\n function TimeoutErrorImpl(this: any, info: TimeoutInfo | null = null) {\n _super(this);\n this.message = 'Timeout has occurred';\n this.name = 'TimeoutError';\n this.info = info;\n }\n);\n\n/**\n * If `with` is provided, this will return an observable that will switch to a different observable if the source\n * does not push values within the specified time parameters.\n *\n * The most flexible option for creating a timeout behavior.\n *\n * The first thing to know about the configuration is if you do not provide a `with` property to the configuration,\n * when timeout conditions are met, this operator will emit a {@link TimeoutError}. Otherwise, it will use the factory\n * function provided by `with`, and switch your subscription to the result of that. Timeout conditions are provided by\n * the settings in `first` and `each`.\n *\n * The `first` property can be either a `Date` for a specific time, a `number` for a time period relative to the\n * point of subscription, or it can be skipped. This property is to check timeout conditions for the arrival of\n * the first value from the source _only_. The timings of all subsequent values from the source will be checked\n * against the time period provided by `each`, if it was provided.\n *\n * The `each` property can be either a `number` or skipped. If a value for `each` is provided, it represents the amount of\n * time the resulting observable will wait between the arrival of values from the source before timing out. Note that if\n * `first` is _not_ provided, the value from `each` will be used to check timeout conditions for the arrival of the first\n * value and all subsequent values. If `first` _is_ provided, `each` will only be use to check all values after the first.\n *\n * ### Example\n *\n * Emit a custom error if there is too much time between values\n *\n * ```ts\n * import { interval, throwError } from 'rxjs';\n * import { timeout } from 'rxjs/operators';\n *\n * class CustomTimeoutError extends Error {\n * constructor() {\n * super('It was too slow');\n * this.name = 'CustomTimeoutError';\n * }\n * }\n *\n * const slow$ = interval(900);\n *\n * slow$.pipe(\n * timeout({\n * each: 1000,\n * with: () => throwError(new CustomTimeoutError())\n * })\n * )\n * .subscribe({\n * error: console.error\n * })\n * ```\n *\n * ### Example\n *\n * Switch to a faster observable if your source is slow.\n *\n * ```ts\n * import { interval, throwError } from 'rxjs';\n * import { timeout } from 'rxjs/operators';\n *\n * const slow$ = interval(900);\n * const fast$ = interval(500);\n *\n * slow$.pipe(\n * timeout({\n * each: 1000,\n * with: () => fast$,\n * })\n * )\n * .subscribe(console.log)\n * ```\n * @param config The configuration for the timeout.\n */\nexport function timeout, M = unknown>(\n config: TimeoutConfig & { with: (info: TimeoutInfo) => O }\n): OperatorFunction>;\n\n/**\n * Returns an observable that will error or switch to a different observable if the source does not push values\n * within the specified time parameters.\n *\n * The most flexible option for creating a timeout behavior.\n *\n * The first thing to know about the configuration is if you do not provide a `with` property to the configuration,\n * when timeout conditions are met, this operator will emit a {@link TimeoutError}. Otherwise, it will use the factory\n * function provided by `with`, and switch your subscription to the result of that. Timeout conditions are provided by\n * the settings in `first` and `each`.\n *\n * The `first` property can be either a `Date` for a specific time, a `number` for a time period relative to the\n * point of subscription, or it can be skipped. This property is to check timeout conditions for the arrival of\n * the first value from the source _only_. The timings of all subsequent values from the source will be checked\n * against the time period provided by `each`, if it was provided.\n *\n * The `each` property can be either a `number` or skipped. If a value for `each` is provided, it represents the amount of\n * time the resulting observable will wait between the arrival of values from the source before timing out. Note that if\n * `first` is _not_ provided, the value from `each` will be used to check timeout conditions for the arrival of the first\n * value and all subsequent values. If `first` _is_ provided, `each` will only be use to check all values after the first.\n *\n * ### Handling TimeoutErrors\n *\n * If no `with` property was provided, subscriptions to the resulting observable may emit an error of {@link TimeoutError}.\n * The timeout error provides useful information you can examine when you're handling the error. The most common way to handle\n * the error would be with {@link catchError}, although you could use {@link tap} or just the error handler in your `subscribe` call\n * directly, if your error handling is only a side effect (such as notifying the user, or logging).\n *\n * In this case, you would check the error for `instanceof TimeoutError` to validate that the error was indeed from `timeout`, and\n * not from some other source. If it's not from `timeout`, you should probably rethrow it if you're in a `catchError`.\n *\n *\n * ### Example\n *\n * Emit a {@link TimeoutError} if the first value, and _only_ the first value, does not arrive within 5 seconds\n *\n * ```ts\n * import { interval } from 'rxjs';\n * import { timeout } from 'rxjs/operators';\n *\n * // A random interval that lasts between 0 and 10 seconds per tick\n * const source$ = interval(Math.round(Math.random() * 10000));\n *\n * source$.pipe(\n * timeout({ first: 5000 })\n * )\n * .subscribe(console.log);\n * ```\n *\n * ### Example\n *\n * Emit a {@link TimeoutError} if the source waits longer than 5 seconds between any two values or the first value\n * and subscription.\n *\n * ```ts\n * import { timer } from 'rxjs';\n * import { timeout, expand } from 'rxjs/operators';\n *\n * const getRandomTime = () => Math.round(Math.random() * 10000);\n *\n * // An observable that waits a random amount of time between each delivered value\n * const source$ = timer(getRandomTime()).pipe(\n * expand(() => timer(getRandomTime()))\n * )\n *\n * source$.pipe(\n * timeout({ each: 5000 })\n * )\n * .subscribe(console.log);\n * ```\n *\n * ### Example\n *\n * Emit a {@link TimeoutError} if the the source does not emit before 7 seconds, _or_ if the source waits longer than\n * 5 seconds between any two values after the first.\n *\n * ```ts\n * import { timer } from 'rxjs';\n * import { timeout, expand } from 'rxjs/operators';\n *\n * const getRandomTime = () => Math.round(Math.random() * 10000);\n *\n * // An observable that waits a random amount of time between each delivered value\n * const source$ = timer(getRandomTime()).pipe(\n * expand(() => timer(getRandomTime()))\n * )\n *\n * source$.pipe(\n * timeout({ first: 7000, each: 5000 })\n * )\n * .subscribe(console.log);\n * ```\n */\nexport function timeout(config: Omit, 'with'>): OperatorFunction;\n\n/**\n * Returns an observable that will error if the source does not push its first value before the specified time passed as a `Date`.\n * This is functionally the same as `timeout({ first: someDate })`.\n *\n * Errors if the first value doesn't show up before the given date and time\n *\n * ![](timeout.png)\n *\n * @param first The date to at which the resulting observable will timeout if the source observable\n * does not emit at least one value.\n * @param scheduler The scheduler to use. Defaults to {@link asyncScheduler}.\n */\nexport function timeout(first: Date, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n * Returns an observable that will error if the source does not push a value within the specified time in milliseconds.\n * This is functionally the same as `timeout({ each: milliseconds })`.\n *\n * Errors if it waits too long between any value\n *\n * ![](timeout.png)\n *\n * @param each The time allowed between each pushed value from the source before the resulting observable\n * will timeout.\n * @param scheduler The scheduler to use. Defaults to {@link asyncScheduler}.\n */\nexport function timeout(each: number, scheduler?: SchedulerLike): MonoTypeOperatorFunction;\n\n/**\n *\n * Errors if Observable does not emit a value in given time span.\n *\n * Timeouts on Observable that doesn't emit values fast enough.\n *\n * ![](timeout.png)\n *\n * @return A function that returns an Observable that mirrors behaviour of the\n * source Observable, unless timeout happens when it throws an error.\n */\nexport function timeout, M>(\n config: number | Date | TimeoutConfig,\n schedulerArg?: SchedulerLike\n): OperatorFunction> {\n // Intentionally terse code.\n // If the first argument is a valid `Date`, then we use it as the `first` config.\n // Otherwise, if the first argument is a `number`, then we use it as the `each` config.\n // Otherwise, it can be assumed the first argument is the configuration object itself, and\n // we destructure that into what we're going to use, setting important defaults as we do.\n // NOTE: The default for `scheduler` will be the `scheduler` argument if it exists, or\n // it will default to the `asyncScheduler`.\n const { first, each, with: _with = timeoutErrorFactory, scheduler = schedulerArg ?? asyncScheduler, meta = null! } = (isValidDate(config)\n ? { first: config }\n : typeof config === 'number'\n ? { each: config }\n : config) as TimeoutConfig;\n\n if (first == null && each == null) {\n // Ensure timeout was provided at runtime.\n throw new TypeError('No timeout provided.');\n }\n\n return operate((source, subscriber) => {\n // This subscription encapsulates our subscription to the\n // source for this operator. We're capturing it separately,\n // because if there is a `with` observable to fail over to,\n // we want to unsubscribe from our original subscription, and\n // hand of the subscription to that one.\n let originalSourceSubscription: Subscription;\n // The subscription for our timeout timer. This changes\n // every time get get a new value.\n let timerSubscription: Subscription;\n // A bit of state we pass to our with and error factories to\n // tell what the last value we saw was.\n let lastValue: T | null = null;\n // A bit of state we pass to the with and error factories to\n // tell how many values we have seen so far.\n let seen = 0;\n const startTimer = (delay: number) => {\n timerSubscription = executeSchedule(\n subscriber,\n scheduler,\n () => {\n try {\n originalSourceSubscription.unsubscribe();\n innerFrom(\n _with!({\n meta,\n lastValue,\n seen,\n })\n ).subscribe(subscriber);\n } catch (err) {\n subscriber.error(err);\n }\n },\n delay\n );\n };\n\n originalSourceSubscription = source.subscribe(\n new OperatorSubscriber(\n subscriber,\n (value: T) => {\n // clear the timer so we can emit and start another one.\n timerSubscription?.unsubscribe();\n seen++;\n // Emit\n subscriber.next((lastValue = value));\n // null | undefined are both < 0. Thanks, JavaScript.\n each! > 0 && startTimer(each!);\n },\n undefined,\n undefined,\n () => {\n if (!timerSubscription?.closed) {\n timerSubscription?.unsubscribe();\n }\n // Be sure not to hold the last value in memory after unsubscription\n // it could be quite large.\n lastValue = null;\n }\n )\n );\n\n // Intentionally terse code.\n // If `first` was provided, and it's a number, then use it.\n // If `first` was provided and it's not a number, it's a Date, and we get the difference between it and \"now\".\n // If `first` was not provided at all, then our first timer will be the value from `each`.\n startTimer(first != null ? (typeof first === 'number' ? first : +first - scheduler!.now()) : each!);\n });\n}\n\n/**\n * The default function to use to emit an error when timeout occurs and a `with` function\n * is not specified.\n * @param info The information about the timeout to pass along to the error\n */\nfunction timeoutErrorFactory(info: TimeoutInfo): Observable {\n throw new TimeoutError(info);\n}\n","import { OperatorFunction, ObservableInputTuple } from '../types';\nimport { operate } from '../util/lift';\nimport { OperatorSubscriber } from './OperatorSubscriber';\nimport { innerFrom } from '../observable/innerFrom';\nimport { identity } from '../util/identity';\nimport { noop } from '../util/noop';\nimport { popResultSelector } from '../util/args';\n\nexport function withLatestFrom(...inputs: [...ObservableInputTuple]): OperatorFunction;\n\nexport function withLatestFrom(\n ...inputs: [...ObservableInputTuple, (...value: [T, ...O]) => R]\n): OperatorFunction;\n\n/**\n * Combines the source Observable with other Observables to create an Observable\n * whose values are calculated from the latest values of each, only when the\n * source emits.\n *\n * Whenever the source Observable emits a value, it\n * computes a formula using that value plus the latest values from other input\n * Observables, then emits the output of that formula.\n *\n * ![](withLatestFrom.png)\n *\n * `withLatestFrom` combines each value from the source Observable (the\n * instance) with the latest values from the other input Observables only when\n * the source emits a value, optionally using a `project` function to determine\n * the value to be emitted on the output Observable. All input Observables must\n * emit at least one value before the output Observable will emit a value.\n *\n * ## Example\n * On every click event, emit an array with the latest timer event plus the click event\n * ```ts\n * import { fromEvent, interval } from 'rxjs';\n * import { withLatestFrom } from 'rxjs/operators';\n *\n * const clicks = fromEvent(document, 'click');\n * const timer = interval(1000);\n * const result = clicks.pipe(withLatestFrom(timer));\n * result.subscribe(x => console.log(x));\n * ```\n *\n * @see {@link combineLatest}\n *\n * @param {ObservableInput} other An input Observable to combine with the source\n * Observable. More than one input Observables may be given as argument.\n * @param {Function} [project] Projection function for combining values\n * together. Receives all values in order of the Observables passed, where the\n * first parameter is a value from the source Observable. (e.g.\n * `a.pipe(withLatestFrom(b, c), map(([a1, b1, c1]) => a1 + b1 + c1))`). If this is not\n * passed, arrays will be emitted on the output Observable.\n * @return A function that returns an Observable of projected values from the\n * most recent values from each input Observable, or an array of the most\n * recent values from each input Observable.\n */\nexport function withLatestFrom(...inputs: any[]): OperatorFunction {\n const project = popResultSelector(inputs) as ((...args: any[]) => R) | undefined;\n\n return operate((source, subscriber) => {\n const len = inputs.length;\n const otherValues = new Array(len);\n // An array of whether or not the other sources have emitted. Matched with them by index.\n // TODO: At somepoint, we should investigate the performance implications here, and look\n // into using a `Set()` and checking the `size` to see if we're ready.\n let hasValue = inputs.map(() => false);\n // Flipped true when we have at least one value from all other sources and\n // we are ready to start emitting values.\n let ready = false;\n\n // Other sources. Note that here we are not checking `subscriber.closed`,\n // this causes all inputs to be subscribed to, even if nothing can be emitted\n // from them. This is an important distinction because subscription constitutes\n // a side-effect.\n for (let i = 0; i < len; i++) {\n innerFrom(inputs[i]).subscribe(\n new OperatorSubscriber(\n subscriber,\n (value) => {\n otherValues[i] = value;\n if (!ready && !hasValue[i]) {\n // If we're not ready yet, flag to show this observable has emitted.\n hasValue[i] = true;\n // Intentionally terse code.\n // If all of our other observables have emitted, set `ready` to `true`,\n // so we know we can start emitting values, then clean up the `hasValue` array,\n // because we don't need it anymore.\n (ready = hasValue.every(identity)) && (hasValue = null!);\n }\n },\n // Completing one of the other sources has\n // no bearing on the completion of our result.\n noop\n )\n );\n }\n\n // Source subscription\n source.subscribe(\n new OperatorSubscriber(subscriber, (value) => {\n if (ready) {\n // We have at least one value from the other sources. Go ahead and emit.\n const values = [value, ...otherValues];\n subscriber.next(project ? project(...values) : values);\n }\n })\n );\n });\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\nimport { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from '../util/isFunction';\nimport { executeSchedule } from '../util/executeSchedule';\n\n/**\n * Used in {@link scheduled} to create an observable from an Iterable.\n * @param input The iterable to create an observable from\n * @param scheduler The scheduler to use\n */\nexport function scheduleIterable(input: Iterable, scheduler: SchedulerLike) {\n return new Observable((subscriber) => {\n let iterator: Iterator;\n\n // Schedule the initial creation of the iterator from\n // the iterable. This is so the code in the iterable is\n // not called until the scheduled job fires.\n executeSchedule(subscriber, scheduler, () => {\n // Create the iterator.\n iterator = (input as any)[Symbol_iterator]();\n\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n let value: T;\n let done: boolean | undefined;\n try {\n // Pull the value out of the iterator\n ({ value, done } = iterator.next());\n } catch (err) {\n // We got an error while pulling from the iterator\n subscriber.error(err);\n return;\n }\n\n if (done) {\n // If it is \"done\" we just complete. This mimics the\n // behavior of JavaScript's `for..of` consumption of\n // iterables, which will not emit the value from an iterator\n // result of `{ done: true: value: 'here' }`.\n subscriber.complete();\n } else {\n // The iterable is not done, emit the value.\n subscriber.next(value);\n }\n },\n 0,\n true\n );\n });\n\n // During teardown, if we see this iterator has a `return` method,\n // then we know it is a Generator, and not just an Iterator. So we call\n // the `return()` function. This will ensure that any `finally { }` blocks\n // inside of the generator we can hit will be hit properly.\n return () => isFunction(iterator?.return) && iterator.return();\n });\n}\n","import { SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { executeSchedule } from '../util/executeSchedule';\n\nexport function scheduleAsyncIterable(input: AsyncIterable, scheduler: SchedulerLike) {\n if (!input) {\n throw new Error('Iterable cannot be null');\n }\n return new Observable((subscriber) => {\n executeSchedule(subscriber, scheduler, () => {\n const iterator = input[Symbol.asyncIterator]();\n executeSchedule(\n subscriber,\n scheduler,\n () => {\n iterator.next().then((result) => {\n if (result.done) {\n // This will remove the subscriptions from\n // the parent subscription.\n subscriber.complete();\n } else {\n subscriber.next(result.value);\n }\n });\n },\n 0,\n true\n );\n });\n });\n}\n","import { scheduleObservable } from './scheduleObservable';\nimport { schedulePromise } from './schedulePromise';\nimport { scheduleArray } from './scheduleArray';\nimport { scheduleIterable } from './scheduleIterable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { isInteropObservable } from '../util/isInteropObservable';\nimport { isPromise } from '../util/isPromise';\nimport { isArrayLike } from '../util/isArrayLike';\nimport { isIterable } from '../util/isIterable';\nimport { ObservableInput, SchedulerLike } from '../types';\nimport { Observable } from '../Observable';\nimport { isAsyncIterable } from '../util/isAsyncIterable';\nimport { createInvalidObservableTypeError } from '../util/throwUnobservableError';\nimport { isReadableStreamLike } from '../util/isReadableStreamLike';\nimport { scheduleReadableStreamLike } from './scheduleReadableStreamLike';\n\n/**\n * Converts from a common {@link ObservableInput} type to an observable where subscription and emissions\n * are scheduled on the provided scheduler.\n *\n * @see {@link from}\n * @see {@link of}\n *\n * @param input The observable, array, promise, iterable, etc you would like to schedule\n * @param scheduler The scheduler to use to schedule the subscription and emissions from\n * the returned observable.\n */\nexport function scheduled(input: ObservableInput, scheduler: SchedulerLike): Observable {\n if (input != null) {\n if (isInteropObservable(input)) {\n return scheduleObservable(input, scheduler);\n }\n if (isArrayLike(input)) {\n return scheduleArray(input, scheduler);\n }\n if (isPromise(input)) {\n return schedulePromise(input, scheduler);\n }\n if (isAsyncIterable(input)) {\n return scheduleAsyncIterable(input, scheduler);\n }\n if (isIterable(input)) {\n return scheduleIterable(input, scheduler);\n }\n if (isReadableStreamLike(input)) {\n return scheduleReadableStreamLike(input, scheduler);\n }\n }\n throw createInvalidObservableTypeError(input);\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { InteropObservable, SchedulerLike } from '../types';\n\nexport function scheduleObservable(input: InteropObservable, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { Observable } from '../Observable';\nimport { SchedulerLike } from '../types';\n\nexport function scheduleArray(input: ArrayLike, scheduler: SchedulerLike) {\n return new Observable((subscriber) => {\n // The current array index.\n let i = 0;\n // Start iterating over the array like on a schedule.\n return scheduler.schedule(function () {\n if (i === input.length) {\n // If we have hit the end of the array like in the\n // previous job, we can complete.\n subscriber.complete();\n } else {\n // Otherwise let's next the value at the current index,\n // then increment our index.\n subscriber.next(input[i++]);\n // If the last emission didn't cause us to close the subscriber\n // (via take or some side effect), reschedule the job and we'll\n // make another pass.\n if (!subscriber.closed) {\n this.schedule();\n }\n }\n });\n });\n}\n","import { innerFrom } from '../observable/innerFrom';\nimport { observeOn } from '../operators/observeOn';\nimport { subscribeOn } from '../operators/subscribeOn';\nimport { SchedulerLike } from '../types';\n\nexport function schedulePromise(input: PromiseLike, scheduler: SchedulerLike) {\n return innerFrom(input).pipe(subscribeOn(scheduler), observeOn(scheduler));\n}\n","import { SchedulerLike, ReadableStreamLike } from '../types';\nimport { Observable } from '../Observable';\nimport { scheduleAsyncIterable } from './scheduleAsyncIterable';\nimport { readableStreamLikeToAsyncGenerator } from '../util/isReadableStreamLike';\n\nexport function scheduleReadableStreamLike(input: ReadableStreamLike, scheduler: SchedulerLike): Observable {\n return scheduleAsyncIterable(readableStreamLikeToAsyncGenerator(input), scheduler);\n}\n","import { Scheduler } from '../Scheduler';\nimport { Subscription } from '../Subscription';\nimport { SchedulerAction } from '../types';\n\n/**\n * A unit of work to be executed in a `scheduler`. An action is typically\n * created from within a {@link SchedulerLike} and an RxJS user does not need to concern\n * themselves about creating and manipulating an Action.\n *\n * ```ts\n * class Action extends Subscription {\n * new (scheduler: Scheduler, work: (state?: T) => void);\n * schedule(state?: T, delay: number = 0): Subscription;\n * }\n * ```\n *\n * @class Action\n */\nexport class Action extends Subscription {\n constructor(scheduler: Scheduler, work: (this: SchedulerAction, state?: T) => void) {\n super();\n }\n /**\n * Schedules this action on its parent {@link SchedulerLike} for execution. May be passed\n * some context object, `state`. May happen at some point in the future,\n * according to the `delay` parameter, if specified.\n * @param {T} [state] Some contextual data that the `work` function uses when\n * called by the Scheduler.\n * @param {number} [delay] Time to wait before executing the work, where the\n * time unit is implicit and defined by the Scheduler.\n * @return {void}\n */\n public schedule(state?: T, delay: number = 0): Subscription {\n return this;\n }\n}\n","type SetIntervalFunction = (handler: () => void, timeout?: number, ...args: any[]) => number;\ntype ClearIntervalFunction = (handle: number) => void;\n\ninterface IntervalProvider {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n delegate:\n | {\n setInterval: SetIntervalFunction;\n clearInterval: ClearIntervalFunction;\n }\n | undefined;\n}\n\nexport const intervalProvider: IntervalProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setInterval(...args) {\n const { delegate } = intervalProvider;\n return (delegate?.setInterval || setInterval)(...args);\n },\n clearInterval(handle) {\n const { delegate } = intervalProvider;\n return (delegate?.clearInterval || clearInterval)(handle);\n },\n delegate: undefined,\n};\n","import { Action } from './Action';\nimport { SchedulerAction } from '../types';\nimport { Subscription } from '../Subscription';\nimport { AsyncScheduler } from './AsyncScheduler';\nimport { intervalProvider } from './intervalProvider';\nimport { arrRemove } from '../util/arrRemove';\n\nexport class AsyncAction extends Action {\n public id: any;\n public state?: T;\n // @ts-ignore: Property has no initializer and is not definitely assigned\n public delay: number;\n protected pending: boolean = false;\n\n constructor(protected scheduler: AsyncScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (this.closed) {\n return this;\n }\n\n // Always replace the current state with the new state.\n this.state = state;\n\n const id = this.id;\n const scheduler = this.scheduler;\n\n //\n // Important implementation note:\n //\n // Actions only execute once by default, unless rescheduled from within the\n // scheduled callback. This allows us to implement single and repeat\n // actions via the same code path, without adding API surface area, as well\n // as mimic traditional recursion but across asynchronous boundaries.\n //\n // However, JS runtimes and timers distinguish between intervals achieved by\n // serial `setTimeout` calls vs. a single `setInterval` call. An interval of\n // serial `setTimeout` calls can be individually delayed, which delays\n // scheduling the next `setTimeout`, and so on. `setInterval` attempts to\n // guarantee the interval callback will be invoked more precisely to the\n // interval period, regardless of load.\n //\n // Therefore, we use `setInterval` to schedule single and repeat actions.\n // If the action reschedules itself with the same delay, the interval is not\n // canceled. If the action doesn't reschedule, or reschedules with a\n // different delay, the interval will be canceled after scheduled callback\n // execution.\n //\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, delay);\n }\n\n // Set the pending flag indicating that this action has been scheduled, or\n // has recursively rescheduled itself.\n this.pending = true;\n\n this.delay = delay;\n // If this action has already an async Id, don't request a new one.\n this.id = this.id || this.requestAsyncId(scheduler, this.id, delay);\n\n return this;\n }\n\n protected requestAsyncId(scheduler: AsyncScheduler, _id?: any, delay: number = 0): any {\n return intervalProvider.setInterval(scheduler.flush.bind(scheduler, this), delay);\n }\n\n protected recycleAsyncId(_scheduler: AsyncScheduler, id: any, delay: number | null = 0): any {\n // If this action is rescheduled with the same delay time, don't clear the interval id.\n if (delay != null && this.delay === delay && this.pending === false) {\n return id;\n }\n // Otherwise, if the action's delay time is different from the current delay,\n // or the action has been rescheduled before it's executed, clear the interval id\n intervalProvider.clearInterval(id);\n return undefined;\n }\n\n /**\n * Immediately executes this action and the `work` it contains.\n * @return {any}\n */\n public execute(state: T, delay: number): any {\n if (this.closed) {\n return new Error('executing a cancelled action');\n }\n\n this.pending = false;\n const error = this._execute(state, delay);\n if (error) {\n return error;\n } else if (this.pending === false && this.id != null) {\n // Dequeue if the action didn't reschedule itself. Don't call\n // unsubscribe(), because the action could reschedule later.\n // For example:\n // ```\n // scheduler.schedule(function doWork(counter) {\n // /* ... I'm a busy worker bee ... */\n // var originalAction = this;\n // /* wait 100ms before rescheduling the action */\n // setTimeout(function () {\n // originalAction.schedule(counter + 1);\n // }, 100);\n // }, 1000);\n // ```\n this.id = this.recycleAsyncId(this.scheduler, this.id, null);\n }\n }\n\n protected _execute(state: T, _delay: number): any {\n let errored: boolean = false;\n let errorValue: any;\n try {\n this.work(state);\n } catch (e) {\n errored = true;\n // HACK: Since code elsewhere is relying on the \"truthiness\" of the\n // return here, we can't have it return \"\" or 0 or false.\n // TODO: Clean this up when we refactor schedulers mid-version-8 or so.\n errorValue = e ? e : new Error('Scheduled action threw falsy error');\n }\n if (errored) {\n this.unsubscribe();\n return errorValue;\n }\n }\n\n unsubscribe() {\n if (!this.closed) {\n const { id, scheduler } = this;\n const { actions } = scheduler;\n\n this.work = this.state = this.scheduler = null!;\n this.pending = false;\n\n arrRemove(actions, this);\n if (id != null) {\n this.id = this.recycleAsyncId(scheduler, id, null);\n }\n\n this.delay = null!;\n super.unsubscribe();\n }\n }\n}\n","import { Scheduler } from '../Scheduler';\nimport { Action } from './Action';\nimport { AsyncAction } from './AsyncAction';\n\nexport class AsyncScheduler extends Scheduler {\n public actions: Array> = [];\n /**\n * A flag to indicate whether the Scheduler is currently executing a batch of\n * queued actions.\n * @type {boolean}\n * @internal\n */\n public _active: boolean = false;\n /**\n * An internal ID used to track the latest asynchronous task such as those\n * coming from `setTimeout`, `setInterval`, `requestAnimationFrame`, and\n * others.\n * @type {any}\n * @internal\n */\n public _scheduled: any = undefined;\n\n constructor(SchedulerAction: typeof Action, now: () => number = Scheduler.now) {\n super(SchedulerAction, now);\n }\n\n public flush(action: AsyncAction): void {\n const { actions } = this;\n\n if (this._active) {\n actions.push(action);\n return;\n }\n\n let error: any;\n this._active = true;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions.shift()!)); // exhaust the scheduler queue\n\n this._active = false;\n\n if (error) {\n while ((action = actions.shift()!)) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AnimationFrameAction } from './AnimationFrameAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\n\n/**\n *\n * Animation Frame Scheduler\n *\n * Perform task when `window.requestAnimationFrame` would fire\n *\n * When `animationFrame` scheduler is used with delay, it will fall back to {@link asyncScheduler} scheduler\n * behaviour.\n *\n * Without delay, `animationFrame` scheduler can be used to create smooth browser animations.\n * It makes sure scheduled task will happen just before next browser content repaint,\n * thus performing animations as efficiently as possible.\n *\n * ## Example\n * Schedule div height animation\n * ```ts\n * // html:
\n * import { animationFrameScheduler } from 'rxjs';\n *\n * const div = document.querySelector('div');\n *\n * animationFrameScheduler.schedule(function(height) {\n * div.style.height = height + \"px\";\n *\n * this.schedule(height + 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * }, 0, 0);\n *\n * // You will see a div element growing in height\n * ```\n */\n\nexport const animationFrameScheduler = new AnimationFrameScheduler(AnimationFrameAction);\n\n/**\n * @deprecated Renamed to {@link animationFrameScheduler}. Will be removed in v8.\n */\nexport const animationFrame = animationFrameScheduler;\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AnimationFrameScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AnimationFrameScheduler } from './AnimationFrameScheduler';\nimport { SchedulerAction } from '../types';\nimport { animationFrameProvider } from './animationFrameProvider';\n\nexport class AnimationFrameAction extends AsyncAction {\n constructor(protected scheduler: AnimationFrameScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AnimationFrameScheduler, id?: any, delay: number = 0): any {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If an animation frame has already been requested, don't request another\n // one. If an animation frame hasn't been requested yet, request one. Return\n // the current animation frame request id.\n return scheduler._scheduled || (scheduler._scheduled = animationFrameProvider.requestAnimationFrame(() => scheduler.flush(undefined)));\n }\n protected recycleAsyncId(scheduler: AnimationFrameScheduler, id?: any, delay: number = 0): any {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested animation frame and set the scheduled flag to\n // undefined so the next AnimationFrameAction will request its own.\n if (!scheduler.actions.some((action) => action.id === id)) {\n animationFrameProvider.cancelAnimationFrame(id);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n","import { Subscription } from '../Subscription';\n\ninterface AnimationFrameProvider {\n schedule(callback: FrameRequestCallback): Subscription;\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n delegate:\n | {\n requestAnimationFrame: typeof requestAnimationFrame;\n cancelAnimationFrame: typeof cancelAnimationFrame;\n }\n | undefined;\n}\n\nexport const animationFrameProvider: AnimationFrameProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n schedule(callback) {\n let request = requestAnimationFrame;\n let cancel: typeof cancelAnimationFrame | undefined = cancelAnimationFrame;\n const { delegate } = animationFrameProvider;\n if (delegate) {\n request = delegate.requestAnimationFrame;\n cancel = delegate.cancelAnimationFrame;\n }\n const handle = request((timestamp) => {\n // Clear the cancel function. The request has been fulfilled, so\n // attempting to cancel the request upon unsubscription would be\n // pointless.\n cancel = undefined;\n callback(timestamp);\n });\n return new Subscription(() => cancel?.(handle));\n },\n requestAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.requestAnimationFrame || requestAnimationFrame)(...args);\n },\n cancelAnimationFrame(...args) {\n const { delegate } = animationFrameProvider;\n return (delegate?.cancelAnimationFrame || cancelAnimationFrame)(...args);\n },\n delegate: undefined,\n};\n","let nextHandle = 1;\n// The promise needs to be created lazily otherwise it won't be patched by Zones\nlet resolved: Promise;\nconst activeHandles: { [key: number]: any } = {};\n\n/**\n * Finds the handle in the list of active handles, and removes it.\n * Returns `true` if found, `false` otherwise. Used both to clear\n * Immediate scheduled tasks, and to identify if a task should be scheduled.\n */\nfunction findAndClearHandle(handle: number): boolean {\n if (handle in activeHandles) {\n delete activeHandles[handle];\n return true;\n }\n return false;\n}\n\n/**\n * Helper functions to schedule and unschedule microtasks.\n */\nexport const Immediate = {\n setImmediate(cb: () => void): number {\n const handle = nextHandle++;\n activeHandles[handle] = true;\n if (!resolved) {\n resolved = Promise.resolve();\n }\n resolved.then(() => findAndClearHandle(handle) && cb());\n return handle;\n },\n\n clearImmediate(handle: number): void {\n findAndClearHandle(handle);\n },\n};\n\n/**\n * Used for internal testing purposes only. Do not export from library.\n */\nexport const TestTools = {\n pending() {\n return Object.keys(activeHandles).length;\n }\n};\n","import { Immediate } from '../util/Immediate';\nconst { setImmediate, clearImmediate } = Immediate;\n\ntype SetImmediateFunction = (handler: () => void, ...args: any[]) => number;\ntype ClearImmediateFunction = (handle: number) => void;\n\ninterface ImmediateProvider {\n setImmediate: SetImmediateFunction;\n clearImmediate: ClearImmediateFunction;\n delegate:\n | {\n setImmediate: SetImmediateFunction;\n clearImmediate: ClearImmediateFunction;\n }\n | undefined;\n}\n\nexport const immediateProvider: ImmediateProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setImmediate(...args) {\n const { delegate } = immediateProvider;\n return (delegate?.setImmediate || setImmediate)(...args);\n },\n clearImmediate(handle) {\n const { delegate } = immediateProvider;\n return (delegate?.clearImmediate || clearImmediate)(handle);\n },\n delegate: undefined,\n};\n","import { AsapAction } from './AsapAction';\nimport { AsapScheduler } from './AsapScheduler';\n\n/**\n *\n * Asap Scheduler\n *\n * Perform task as fast as it can be performed asynchronously\n *\n * `asap` scheduler behaves the same as {@link asyncScheduler} scheduler when you use it to delay task\n * in time. If however you set delay to `0`, `asap` will wait for current synchronously executing\n * code to end and then it will try to execute given task as fast as possible.\n *\n * `asap` scheduler will do its best to minimize time between end of currently executing code\n * and start of scheduled task. This makes it best candidate for performing so called \"deferring\".\n * Traditionally this was achieved by calling `setTimeout(deferredTask, 0)`, but that technique involves\n * some (although minimal) unwanted delay.\n *\n * Note that using `asap` scheduler does not necessarily mean that your task will be first to process\n * after currently executing code. In particular, if some task was also scheduled with `asap` before,\n * that task will execute first. That being said, if you need to schedule task asynchronously, but\n * as soon as possible, `asap` scheduler is your best bet.\n *\n * ## Example\n * Compare async and asap scheduler<\n * ```ts\n * import { asapScheduler, asyncScheduler } from 'rxjs';\n *\n * asyncScheduler.schedule(() => console.log('async')); // scheduling 'async' first...\n * asapScheduler.schedule(() => console.log('asap'));\n *\n * // Logs:\n * // \"asap\"\n * // \"async\"\n * // ... but 'asap' goes first!\n * ```\n */\n\nexport const asapScheduler = new AsapScheduler(AsapAction);\n\n/**\n * @deprecated Renamed to {@link asapScheduler}. Will be removed in v8.\n */\nexport const asap = asapScheduler;\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\nexport class AsapScheduler extends AsyncScheduler {\n public flush(action?: AsyncAction): void {\n this._active = true;\n // The async id that effects a call to flush is stored in _scheduled.\n // Before executing an action, it's necessary to check the action's async\n // id to determine whether it's supposed to be executed in the current\n // flush.\n // Previous implementations of this method used a count to determine this,\n // but that was unsound, as actions that are unsubscribed - i.e. cancelled -\n // are removed from the actions array and that can shift actions that are\n // scheduled to be executed in a subsequent flush into positions at which\n // they are executed within the current flush.\n const flushId = this._scheduled;\n this._scheduled = undefined;\n\n const { actions } = this;\n let error: any;\n action = action || actions.shift()!;\n\n do {\n if ((error = action.execute(action.state, action.delay))) {\n break;\n }\n } while ((action = actions[0]) && action.id === flushId && actions.shift());\n\n this._active = false;\n\n if (error) {\n while ((action = actions[0]) && action.id === flushId && actions.shift()) {\n action.unsubscribe();\n }\n throw error;\n }\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AsapScheduler } from './AsapScheduler';\nimport { SchedulerAction } from '../types';\nimport { immediateProvider } from './immediateProvider';\n\nexport class AsapAction extends AsyncAction {\n constructor(protected scheduler: AsapScheduler, protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n protected requestAsyncId(scheduler: AsapScheduler, id?: any, delay: number = 0): any {\n // If delay is greater than 0, request as an async action.\n if (delay !== null && delay > 0) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Push the action to the end of the scheduler queue.\n scheduler.actions.push(this);\n // If a microtask has already been scheduled, don't schedule another\n // one. If a microtask hasn't been scheduled yet, schedule one now. Return\n // the current scheduled microtask id.\n return scheduler._scheduled || (scheduler._scheduled = immediateProvider.setImmediate(scheduler.flush.bind(scheduler, undefined)));\n }\n protected recycleAsyncId(scheduler: AsapScheduler, id?: any, delay: number = 0): any {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.recycleAsyncId(scheduler, id, delay);\n }\n // If the scheduler queue has no remaining actions with the same async id,\n // cancel the requested microtask and set the scheduled flag to undefined\n // so the next AsapAction will request its own.\n if (!scheduler.actions.some((action) => action.id === id)) {\n immediateProvider.clearImmediate(id);\n scheduler._scheduled = undefined;\n }\n // Return undefined so the action knows to request a new async id if it's rescheduled.\n return undefined;\n }\n}\n","import { AsyncAction } from './AsyncAction';\nimport { AsyncScheduler } from './AsyncScheduler';\n\n/**\n *\n * Async Scheduler\n *\n * Schedule task as if you used setTimeout(task, duration)\n *\n * `async` scheduler schedules tasks asynchronously, by putting them on the JavaScript\n * event loop queue. It is best used to delay tasks in time or to schedule tasks repeating\n * in intervals.\n *\n * If you just want to \"defer\" task, that is to perform it right after currently\n * executing synchronous code ends (commonly achieved by `setTimeout(deferredTask, 0)`),\n * better choice will be the {@link asapScheduler} scheduler.\n *\n * ## Examples\n * Use async scheduler to delay task\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * const task = () => console.log('it works!');\n *\n * asyncScheduler.schedule(task, 2000);\n *\n * // After 2 seconds logs:\n * // \"it works!\"\n * ```\n *\n * Use async scheduler to repeat task in intervals\n * ```ts\n * import { asyncScheduler } from 'rxjs';\n *\n * function task(state) {\n * console.log(state);\n * this.schedule(state + 1, 1000); // `this` references currently executing Action,\n * // which we reschedule with new state and delay\n * }\n *\n * asyncScheduler.schedule(task, 3000, 0);\n *\n * // Logs:\n * // 0 after 3s\n * // 1 after 4s\n * // 2 after 5s\n * // 3 after 6s\n * ```\n */\n\nexport const asyncScheduler = new AsyncScheduler(AsyncAction);\n\n/**\n * @deprecated Renamed to {@link asyncScheduler}. Will be removed in v8.\n */\nexport const async = asyncScheduler;\n","import { TimestampProvider } from '../types';\n\ninterface DateTimestampProvider extends TimestampProvider {\n delegate: TimestampProvider | undefined;\n}\n\nexport const dateTimestampProvider: DateTimestampProvider = {\n now() {\n // Use the variable rather than `this` so that the function can be called\n // without being bound to the provider.\n return (dateTimestampProvider.delegate || Date).now();\n },\n delegate: undefined,\n};\n","import { QueueAction } from './QueueAction';\nimport { QueueScheduler } from './QueueScheduler';\n\n/**\n *\n * Queue Scheduler\n *\n * Put every next task on a queue, instead of executing it immediately\n *\n * `queue` scheduler, when used with delay, behaves the same as {@link asyncScheduler} scheduler.\n *\n * When used without delay, it schedules given task synchronously - executes it right when\n * it is scheduled. However when called recursively, that is when inside the scheduled task,\n * another task is scheduled with queue scheduler, instead of executing immediately as well,\n * that task will be put on a queue and wait for current one to finish.\n *\n * This means that when you execute task with `queue` scheduler, you are sure it will end\n * before any other task scheduled with that scheduler will start.\n *\n * ## Examples\n * Schedule recursively first, then do something\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(() => {\n * queueScheduler.schedule(() => console.log('second')); // will not happen now, but will be put on a queue\n *\n * console.log('first');\n * });\n *\n * // Logs:\n * // \"first\"\n * // \"second\"\n * ```\n *\n * Reschedule itself recursively\n * ```ts\n * import { queueScheduler } from 'rxjs';\n *\n * queueScheduler.schedule(function(state) {\n * if (state !== 0) {\n * console.log('before', state);\n * this.schedule(state - 1); // `this` references currently executing Action,\n * // which we reschedule with new state\n * console.log('after', state);\n * }\n * }, 0, 3);\n *\n * // In scheduler that runs recursively, you would expect:\n * // \"before\", 3\n * // \"before\", 2\n * // \"before\", 1\n * // \"after\", 1\n * // \"after\", 2\n * // \"after\", 3\n *\n * // But with queue it logs:\n * // \"before\", 3\n * // \"after\", 3\n * // \"before\", 2\n * // \"after\", 2\n * // \"before\", 1\n * // \"after\", 1\n * ```\n */\n\nexport const queueScheduler = new QueueScheduler(QueueAction);\n\n/**\n * @deprecated Renamed to {@link queueScheduler}. Will be removed in v8.\n */\nexport const queue = queueScheduler;\n","import { AsyncScheduler } from './AsyncScheduler';\n\nexport class QueueScheduler extends AsyncScheduler {\n}\n","import { AsyncAction } from './AsyncAction';\nimport { Subscription } from '../Subscription';\nimport { QueueScheduler } from './QueueScheduler';\nimport { SchedulerAction } from '../types';\n\nexport class QueueAction extends AsyncAction {\n\n constructor(protected scheduler: QueueScheduler,\n protected work: (this: SchedulerAction, state?: T) => void) {\n super(scheduler, work);\n }\n\n public schedule(state?: T, delay: number = 0): Subscription {\n if (delay > 0) {\n return super.schedule(state, delay);\n }\n this.delay = delay;\n this.state = state;\n this.scheduler.flush(this);\n return this;\n }\n\n public execute(state: T, delay: number): any {\n return (delay > 0 || this.closed) ?\n super.execute(state, delay) :\n this._execute(state, delay) ;\n }\n\n protected requestAsyncId(scheduler: QueueScheduler, id?: any, delay: number = 0): any {\n // If delay exists and is greater than 0, or if the delay is null (the\n // action wasn't rescheduled) but was originally scheduled as an async\n // action, then recycle as an async action.\n\n if ((delay != null && delay > 0) || (delay == null && this.delay > 0)) {\n return super.requestAsyncId(scheduler, id, delay);\n }\n // Otherwise flush the scheduler starting with this action.\n return scheduler.flush(this);\n }\n}\n","type SetTimeoutFunction = (handler: () => void, timeout?: number, ...args: any[]) => number;\ntype ClearTimeoutFunction = (handle: number) => void;\n\ninterface TimeoutProvider {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n delegate:\n | {\n setTimeout: SetTimeoutFunction;\n clearTimeout: ClearTimeoutFunction;\n }\n | undefined;\n}\n\nexport const timeoutProvider: TimeoutProvider = {\n // When accessing the delegate, use the variable rather than `this` so that\n // the functions can be called without being bound to the provider.\n setTimeout(...args) {\n const { delegate } = timeoutProvider;\n return (delegate?.setTimeout || setTimeout)(...args);\n },\n clearTimeout(handle) {\n const { delegate } = timeoutProvider;\n return (delegate?.clearTimeout || clearTimeout)(handle);\n },\n delegate: undefined,\n};\n","export function getSymbolIterator(): symbol {\n if (typeof Symbol !== 'function' || !Symbol.iterator) {\n return '@@iterator' as any;\n }\n\n return Symbol.iterator;\n}\n\nexport const iterator = getSymbolIterator();\n","/** Symbol.observable or a string \"@@observable\". Used for interop */\nexport const observable: string | symbol = (() => (typeof Symbol === 'function' && Symbol.observable) || '@@observable')();\n","import { createErrorClass } from './createErrorClass';\n\nexport interface EmptyError extends Error {}\n\nexport interface EmptyErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): EmptyError;\n}\n\n/**\n * An error thrown when an Observable or a sequence was queried but has no\n * elements.\n *\n * @see {@link first}\n * @see {@link last}\n * @see {@link single}\n * @see {@link firstValueFrom}\n * @see {@link lastValueFrom}\n *\n * @class EmptyError\n */\nexport const EmptyError: EmptyErrorCtor = createErrorClass((_super) => function EmptyErrorImpl(this: any) {\n _super(this);\n this.name = 'EmptyError';\n this.message = 'no elements in sequence';\n});\n","import { createErrorClass } from './createErrorClass';\n\nexport interface ObjectUnsubscribedError extends Error {}\n\nexport interface ObjectUnsubscribedErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (): ObjectUnsubscribedError;\n}\n\n/**\n * An error thrown when an action is invalid because the object has been\n * unsubscribed.\n *\n * @see {@link Subject}\n * @see {@link BehaviorSubject}\n *\n * @class ObjectUnsubscribedError\n */\nexport const ObjectUnsubscribedError: ObjectUnsubscribedErrorCtor = createErrorClass(\n (_super) =>\n function ObjectUnsubscribedErrorImpl(this: any) {\n _super(this);\n this.name = 'ObjectUnsubscribedError';\n this.message = 'object unsubscribed';\n }\n);\n","import { createErrorClass } from './createErrorClass';\n\nexport interface UnsubscriptionError extends Error {\n readonly errors: any[];\n}\n\nexport interface UnsubscriptionErrorCtor {\n /**\n * @deprecated Internal implementation detail. Do not construct error instances.\n * Cannot be tagged as internal: https://github.com/ReactiveX/rxjs/issues/6269\n */\n new (errors: any[]): UnsubscriptionError;\n}\n\n/**\n * An error thrown when one or more errors have occurred during the\n * `unsubscribe` of a {@link Subscription}.\n */\nexport const UnsubscriptionError: UnsubscriptionErrorCtor = createErrorClass(\n (_super) =>\n function UnsubscriptionErrorImpl(this: any, errors: (Error | string)[]) {\n _super(this);\n this.message = errors\n ? `${errors.length} errors occurred during unsubscription:\n${errors.map((err, i) => `${i + 1}) ${err.toString()}`).join('\\n ')}`\n : '';\n this.name = 'UnsubscriptionError';\n this.errors = errors;\n }\n);\n","import { SchedulerLike } from '../types';\nimport { isFunction } from './isFunction';\nimport { isScheduler } from './isScheduler';\n\nfunction last(arr: T[]): T | undefined {\n return arr[arr.length - 1];\n}\n\nexport function popResultSelector(args: any[]): ((...args: unknown[]) => unknown) | undefined {\n return isFunction(last(args)) ? args.pop() : undefined;\n}\n\nexport function popScheduler(args: any[]): SchedulerLike | undefined {\n return isScheduler(last(args)) ? args.pop() : undefined;\n}\n\nexport function popNumber(args: any[], defaultValue: number): number {\n return typeof last(args) === 'number' ? args.pop()! : defaultValue;\n}\n","const { isArray } = Array;\nconst { getPrototypeOf, prototype: objectProto, keys: getKeys } = Object;\n\n/**\n * Used in functions where either a list of arguments, a single array of arguments, or a\n * dictionary of arguments can be returned. Returns an object with an `args` property with\n * the arguments in an array, if it is a dictionary, it will also return the `keys` in another\n * property.\n */\nexport function argsArgArrayOrObject>(args: T[] | [O] | [T[]]): { args: T[]; keys: string[] | null } {\n if (args.length === 1) {\n const first = args[0];\n if (isArray(first)) {\n return { args: first, keys: null };\n }\n if (isPOJO(first)) {\n const keys = getKeys(first);\n return {\n args: keys.map((key) => first[key]),\n keys,\n };\n }\n }\n\n return { args: args as T[], keys: null };\n}\n\nfunction isPOJO(obj: any): obj is object {\n return obj && typeof obj === 'object' && getPrototypeOf(obj) === objectProto;\n}\n","const { isArray } = Array;\n\n/**\n * Used in operators and functions that accept either a list of arguments, or an array of arguments\n * as a single argument.\n */\nexport function argsOrArgArray(args: (T | T[])[]): T[] {\n return args.length === 1 && isArray(args[0]) ? args[0] : (args as T[]);\n}\n","/**\n * Removes an item from an array, mutating it.\n * @param arr The array to remove the item from\n * @param item The item to remove\n */\nexport function arrRemove(arr: T[] | undefined | null, item: T) {\n if (arr) {\n const index = arr.indexOf(item);\n 0 <= index && arr.splice(index, 1);\n }\n}\n","/**\n * Used to create Error subclasses until the community moves away from ES5.\n *\n * This is because compiling from TypeScript down to ES5 has issues with subclassing Errors\n * as well as other built-in types: https://github.com/Microsoft/TypeScript/issues/12123\n *\n * @param createImpl A factory function to create the actual constructor implementation. The returned\n * function should be a named function that calls `_super` internally.\n */\nexport function createErrorClass(createImpl: (_super: any) => any): T {\n const _super = (instance: any) => {\n Error.call(instance);\n instance.stack = new Error().stack;\n };\n\n const ctorFunc = createImpl(_super);\n ctorFunc.prototype = Object.create(Error.prototype);\n ctorFunc.prototype.constructor = ctorFunc;\n return ctorFunc;\n}\n","export function createObject(keys: string[], values: any[]) {\n return keys.reduce((result, key, i) => ((result[key] = values[i]), result), {} as any);\n}\n","import { config } from '../config';\n\nlet context: { errorThrown: boolean; error: any } | null = null;\n\n/**\n * Handles dealing with errors for super-gross mode. Creates a context, in which\n * any synchronously thrown errors will be passed to {@link captureError}. Which\n * will record the error such that it will be rethrown after the call back is complete.\n * TODO: Remove in v8\n * @param cb An immediately executed function.\n */\nexport function errorContext(cb: () => void) {\n if (config.useDeprecatedSynchronousErrorHandling) {\n const isRoot = !context;\n if (isRoot) {\n context = { errorThrown: false, error: null };\n }\n cb();\n if (isRoot) {\n const { errorThrown, error } = context!;\n context = null;\n if (errorThrown) {\n throw error;\n }\n }\n } else {\n // This is the general non-deprecated path for everyone that\n // isn't crazy enough to use super-gross mode (useDeprecatedSynchronousErrorHandling)\n cb();\n }\n}\n\n/**\n * Captures errors only in super-gross mode.\n * @param err the error to capture\n */\nexport function captureError(err: any) {\n if (config.useDeprecatedSynchronousErrorHandling && context) {\n context.errorThrown = true;\n context.error = err;\n }\n}\n","import { Subscription } from '../Subscription';\nimport { SchedulerAction, SchedulerLike } from '../types';\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay: number,\n repeat: true\n): void;\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay?: number,\n repeat?: false\n): Subscription;\n\nexport function executeSchedule(\n parentSubscription: Subscription,\n scheduler: SchedulerLike,\n work: () => void,\n delay = 0,\n repeat = false\n): Subscription | void {\n const scheduleSubscription = scheduler.schedule(function (this: SchedulerAction) {\n work();\n if (repeat) {\n parentSubscription.add(this.schedule(null, delay));\n } else {\n this.unsubscribe();\n }\n }, delay);\n\n parentSubscription.add(scheduleSubscription);\n\n if (!repeat) {\n // Because user-land scheduler implementations are unlikely to properly reuse\n // Actions for repeat scheduling, we can't trust that the returned subscription\n // will control repeat subscription scenarios. So we're trying to avoid using them\n // incorrectly within this library.\n return scheduleSubscription;\n }\n}\n","export function identity(x: T): T {\n return x;\n}\n","export const isArrayLike = ((x: any): x is ArrayLike => x && typeof x.length === 'number' && typeof x !== 'function');","import { isFunction } from './isFunction';\n\nexport function isAsyncIterable(obj: any): obj is AsyncIterable {\n return Symbol.asyncIterator && isFunction(obj?.[Symbol.asyncIterator]);\n}\n","/**\n * Checks to see if a value is not only a `Date` object,\n * but a *valid* `Date` object that can be converted to a\n * number. For example, `new Date('blah')` is indeed an\n * `instanceof Date`, however it cannot be converted to a\n * number.\n */\nexport function isValidDate(value: any): value is Date {\n return value instanceof Date && !isNaN(value as any);\n}\n","/**\n * Returns true if the object is a function.\n * @param value The value to check\n */\nexport function isFunction(value: any): value is (...args: any[]) => any {\n return typeof value === 'function';\n}\n","import { InteropObservable } from '../types';\nimport { observable as Symbol_observable } from '../symbol/observable';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being Observable (but not necessary an Rx Observable) */\nexport function isInteropObservable(input: any): input is InteropObservable {\n return isFunction(input[Symbol_observable]);\n}\n","import { iterator as Symbol_iterator } from '../symbol/iterator';\nimport { isFunction } from './isFunction';\n\n/** Identifies an input as being an Iterable */\nexport function isIterable(input: any): input is Iterable {\n return isFunction(input?.[Symbol_iterator]);\n}\n","/** prettier */\nimport { Observable } from '../Observable';\nimport { isFunction } from './isFunction';\n\n/**\n * Tests to see if the object is an RxJS {@link Observable}\n * @param obj the object to test\n */\nexport function isObservable(obj: any): obj is Observable {\n // The !! is to ensure that this publicly exposed function returns\n // `false` if something like `null` or `0` is passed.\n return !!obj && (obj instanceof Observable || (isFunction(obj.lift) && isFunction(obj.subscribe)));\n}\n","import { isFunction } from \"./isFunction\";\n\n/**\n * Tests to see if the object is \"thennable\".\n * @param value the object to test\n */\nexport function isPromise(value: any): value is PromiseLike {\n return isFunction(value?.then);\n}\n","import { ReadableStreamLike } from '../types';\nimport { isFunction } from './isFunction';\n\nexport async function* readableStreamLikeToAsyncGenerator(readableStream: ReadableStreamLike): AsyncGenerator {\n const reader = readableStream.getReader();\n try {\n while (true) {\n const { value, done } = await reader.read();\n if (done) {\n return;\n }\n yield value!;\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nexport function isReadableStreamLike(obj: any): obj is ReadableStreamLike {\n // We don't want to use instanceof checks because they would return\n // false for instances from another Realm, like an