new license file version [CI SKIP]
This commit is contained in:
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"asap.js","sources":["../../../src/internal/scheduler/asap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAoChD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC;AAK3D,MAAM,CAAC,MAAM,IAAI,GAAG,aAAa,CAAC"}
|
||||
@@ -0,0 +1 @@
|
||||
{"name":"@szmarczak/http-timer","version":"4.0.6","files":{"LICENSE":{"checkedAt":1678887829940,"integrity":"sha512-JlwLnLfjTqY4Uaa/DaAs09pb6yg5t5vexyYHsmpa6w80qBLzeUHXfGkvn5eZpwbecE9ByeDzYLjUDbudC0FkgQ==","mode":420,"size":1071},"dist/source/index.js":{"checkedAt":1678887829933,"integrity":"sha512-rD5ylKz05r0ml7VPGBuYoytePaCi4o1nV8v2GAaAcA7UcPcNgfRMHM20SNV+GDCao4VevfgJVBO2CHOOKbTaYg==","mode":420,"size":4589},"README.md":{"checkedAt":1678887829933,"integrity":"sha512-DbAp4qePs6LmwqKWh7xLrLvnGYUvVlpDf4DNRgRcUnqv6yd49mTpA5ZFeGbp2FusatpKmrpoJLjYxxu5pKAHsw==","mode":420,"size":2959},"package.json":{"checkedAt":1678887829933,"integrity":"sha512-Q0buygLPTGBRPnd6saNqaFRvhCHPXK3lMCWP/di8WYXvYBIAJzqfn6q/UMJZXtInc3MZCnSb8EcJm+/sY/2dXw==","mode":420,"size":1385},"dist/source/index.d.ts":{"checkedAt":1678887829933,"integrity":"sha512-SdT/32e33l+AGo+w4XPYStEAQh/LeLf2WyADxL/gFqVSYQG+3bUSCtJIUJLM2u7E7e+h9ZPSELMNoSMptw3eWg==","mode":420,"size":820}}}
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={C:{"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0.04759,"100":0,"101":0,"102":0.00433,"103":0,"104":0,"105":0,"106":0.00216,"107":0.00433,"108":0.199,"109":0.09517,"110":0,"111":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0.01298,"62":0,"63":0,"64":0,"65":0.02163,"66":0,"67":0,"68":0,"69":0,"70":0.00216,"71":0,"72":0,"73":0,"74":0.00216,"75":0.00216,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0.00649,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00649,"93":0,"94":0,"95":0.00433,"96":0,"97":0,"98":0.00216,"99":0,"100":0,"101":0,"102":0.00216,"103":0.04542,"104":0.00216,"105":0.00216,"106":0.00433,"107":0.01514,"108":1.09448,"109":0.95172,"110":0,"111":0,"112":0},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0.00216,"62":0,"63":0.00433,"64":0.00433,"65":0,"66":0.00649,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0.00433,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0.01298,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0.00433,"93":0.00649,"94":0.06273,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0.00216,"13":0.00433,"14":0.00865,"15":0.00433,"16":0,"17":0.00865,"18":0.02163,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0.00216,"91":0,"92":0.00649,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0.00216,"105":0,"106":0,"107":0.01082,"108":0.4153,"109":0.36338},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00649,"14":0.00433,"15":0.00433,_:"0","3.1":0,"3.2":0,"5.1":0.00433,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0.00216,"12.1":0,"13.1":0.00216,"14.1":0.00216,"15.1":0,"15.2-15.3":0,"15.4":0,"15.5":0,"15.6":0.03028,"16.0":0.00216,"16.1":0.01298,"16.2":0.00433,"16.3":0},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0,"6.0-6.1":0.00201,"7.0-7.1":0.03009,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.11435,"10.0-10.2":0,"10.3":0.65199,"11.0-11.2":0.02809,"11.3-11.4":0.07824,"12.0-12.1":0.26481,"12.2-12.5":2.89285,"13.0-13.1":0.03611,"13.2":0.07423,"13.3":0.22669,"13.4-13.7":0.41126,"14.0-14.4":1.02915,"14.5-14.8":1.1776,"15.0-15.1":0.83455,"15.2-15.3":0.21666,"15.4":1.09736,"15.5":0.93285,"15.6":0.88872,"16.0":2.17465,"16.1":2.20274,"16.2":2.82263,"16.3":0.36913},P:{"4":0.28015,"5.0-5.4":0.01038,"6.2-6.4":0,"7.2-7.4":0.24902,"8.2":0,"9.2":0.03113,"10.1":0,"11.1-11.2":0.01038,"12.0":0,"13.0":0.01038,"14.0":0.13488,"15.0":0.05188,"16.0":0.16601,"17.0":0.16601,"18.0":0.09338,"19.0":1.00645},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0.00197,"4.2-4.3":0.00829,"4.4":0,"4.4.3-4.4.4":0.13303},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0,"11":0.01082,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},R:{_:"0"},M:{"0":0.03135},Q:{"13.1":0.00784},O:{"0":0.721},H:{"0":0.63808},L:{"0":72.86625},S:{"2.5":0.17241}};
|
||||
@@ -0,0 +1,129 @@
|
||||
const semver = require('semver');
|
||||
const chalk = require('chalk');
|
||||
const Plugin = require('../Plugin');
|
||||
|
||||
const { green, red, redBright } = chalk;
|
||||
|
||||
const RELEASE_TYPES = ['patch', 'minor', 'major'];
|
||||
const PRERELEASE_TYPES = ['prepatch', 'preminor', 'premajor'];
|
||||
const CONTINUATION_TYPES = ['prerelease', 'pre'];
|
||||
const ALL_RELEASE_TYPES = [...RELEASE_TYPES, ...PRERELEASE_TYPES, ...CONTINUATION_TYPES];
|
||||
|
||||
const CHOICES = {
|
||||
latestIsPreRelease: [...RELEASE_TYPES, CONTINUATION_TYPES[0]],
|
||||
preRelease: PRERELEASE_TYPES,
|
||||
default: [...RELEASE_TYPES, ...PRERELEASE_TYPES]
|
||||
};
|
||||
|
||||
const getIncrementChoices = context => {
|
||||
const { latestIsPreRelease, isPreRelease, preReleaseId } = context.version;
|
||||
const types = latestIsPreRelease ? CHOICES.latestIsPreRelease : isPreRelease ? CHOICES.preRelease : CHOICES.default;
|
||||
const choices = types.map(increment => ({
|
||||
name: `${increment} (${semver.inc(context.latestVersion, increment, preReleaseId)})`,
|
||||
value: increment
|
||||
}));
|
||||
const otherChoice = {
|
||||
name: 'Other, please specify...',
|
||||
value: null
|
||||
};
|
||||
return [...choices, otherChoice];
|
||||
};
|
||||
|
||||
const versionTransformer = context => input =>
|
||||
semver.valid(input) ? (semver.gt(input, context.latestVersion) ? green(input) : red(input)) : redBright(input);
|
||||
|
||||
const prompts = {
|
||||
incrementList: {
|
||||
type: 'list',
|
||||
message: () => 'Select increment (next version):',
|
||||
choices: context => getIncrementChoices(context),
|
||||
pageSize: 9
|
||||
},
|
||||
version: {
|
||||
type: 'input',
|
||||
message: () => `Please enter a valid version:`,
|
||||
transformer: context => versionTransformer(context),
|
||||
validate: input => !!semver.valid(input) || 'The version must follow the semver standard.'
|
||||
}
|
||||
};
|
||||
|
||||
class Version extends Plugin {
|
||||
constructor(...args) {
|
||||
super(...args);
|
||||
this.registerPrompts(prompts);
|
||||
}
|
||||
|
||||
getLatestVersion() {
|
||||
return '0.0.0';
|
||||
}
|
||||
|
||||
getIncrement(options) {
|
||||
return options.increment;
|
||||
}
|
||||
|
||||
getIncrementedVersionCI(options) {
|
||||
return this.incrementVersion(options);
|
||||
}
|
||||
|
||||
async getIncrementedVersion(options) {
|
||||
const { isCI } = this.config;
|
||||
const version = this.incrementVersion(options);
|
||||
return version || (isCI ? null : await this.promptIncrementVersion(options));
|
||||
}
|
||||
|
||||
promptIncrementVersion(options) {
|
||||
return new Promise(resolve => {
|
||||
this.step({
|
||||
prompt: 'incrementList',
|
||||
task: increment =>
|
||||
increment
|
||||
? resolve(this.incrementVersion(Object.assign({}, options, { increment })))
|
||||
: this.step({ prompt: 'version', task: resolve })
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
isPreRelease(version) {
|
||||
return Boolean(semver.prerelease(version));
|
||||
}
|
||||
|
||||
isValid(version) {
|
||||
return Boolean(semver.valid(version));
|
||||
}
|
||||
|
||||
incrementVersion({ latestVersion, increment, isPreRelease, preReleaseId }) {
|
||||
if (increment === false) return latestVersion;
|
||||
|
||||
const latestIsPreRelease = this.isPreRelease(latestVersion);
|
||||
const isValidVersion = this.isValid(increment);
|
||||
|
||||
if (latestVersion) {
|
||||
this.setContext({ latestIsPreRelease });
|
||||
}
|
||||
|
||||
if (isValidVersion && semver.gte(increment, latestVersion)) {
|
||||
return increment;
|
||||
}
|
||||
|
||||
if (isPreRelease && !increment && latestIsPreRelease) {
|
||||
return semver.inc(latestVersion, 'prerelease', preReleaseId);
|
||||
}
|
||||
|
||||
if (this.config.isCI && !increment) {
|
||||
return semver.inc(latestVersion, 'patch');
|
||||
}
|
||||
|
||||
const normalizedType = RELEASE_TYPES.includes(increment) && isPreRelease ? `pre${increment}` : increment;
|
||||
if (ALL_RELEASE_TYPES.includes(normalizedType)) {
|
||||
return semver.inc(latestVersion, normalizedType, preReleaseId);
|
||||
}
|
||||
|
||||
const coercedVersion = !isValidVersion && semver.coerce(increment);
|
||||
if (coercedVersion) {
|
||||
this.log.warn(`Coerced invalid semver version "${increment}" into "${coercedVersion}".`);
|
||||
return coercedVersion.toString();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = Version;
|
||||
@@ -0,0 +1 @@
|
||||
export * from 'rxjs-compat/Notification';
|
||||
@@ -0,0 +1,290 @@
|
||||
import { SchedulerLike, SchedulerAction } from '../types';
|
||||
import { Observable } from '../Observable';
|
||||
import { AsyncSubject } from '../AsyncSubject';
|
||||
import { Subscriber } from '../Subscriber';
|
||||
import { map } from '../operators/map';
|
||||
import { canReportError } from '../util/canReportError';
|
||||
import { isArray } from '../util/isArray';
|
||||
import { isScheduler } from '../util/isScheduler';
|
||||
|
||||
// tslint:disable:max-line-length
|
||||
/** @deprecated resultSelector is no longer supported, use a mapping function. */
|
||||
export function bindCallback(callbackFunc: Function, resultSelector: Function, scheduler?: SchedulerLike): (...args: any[]) => Observable<any>;
|
||||
|
||||
export function bindCallback<R1, R2, R3, R4>(callbackFunc: (callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): () => Observable<any[]>;
|
||||
export function bindCallback<R1, R2, R3>(callbackFunc: (callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): () => Observable<[R1, R2, R3]>;
|
||||
export function bindCallback<R1, R2>(callbackFunc: (callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): () => Observable<[R1, R2]>;
|
||||
export function bindCallback<R1>(callbackFunc: (callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): () => Observable<R1>;
|
||||
export function bindCallback(callbackFunc: (callback: () => any) => any, scheduler?: SchedulerLike): () => Observable<void>;
|
||||
|
||||
export function bindCallback<A1, R1, R2, R3, R4>(callbackFunc: (arg1: A1, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<any[]>;
|
||||
export function bindCallback<A1, R1, R2, R3>(callbackFunc: (arg1: A1, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<[R1, R2, R3]>;
|
||||
export function bindCallback<A1, R1, R2>(callbackFunc: (arg1: A1, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<[R1, R2]>;
|
||||
export function bindCallback<A1, R1>(callbackFunc: (arg1: A1, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<R1>;
|
||||
export function bindCallback<A1>(callbackFunc: (arg1: A1, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1) => Observable<void>;
|
||||
|
||||
export function bindCallback<A1, A2, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<any[]>;
|
||||
export function bindCallback<A1, A2, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<[R1, R2, R3]>;
|
||||
export function bindCallback<A1, A2, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<[R1, R2]>;
|
||||
export function bindCallback<A1, A2, R1>(callbackFunc: (arg1: A1, arg2: A2, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<R1>;
|
||||
export function bindCallback<A1, A2>(callbackFunc: (arg1: A1, arg2: A2, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2) => Observable<void>;
|
||||
|
||||
export function bindCallback<A1, A2, A3, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<any[]>;
|
||||
export function bindCallback<A1, A2, A3, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<[R1, R2, R3]>;
|
||||
export function bindCallback<A1, A2, A3, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<[R1, R2]>;
|
||||
export function bindCallback<A1, A2, A3, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<R1>;
|
||||
export function bindCallback<A1, A2, A3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3) => Observable<void>;
|
||||
|
||||
export function bindCallback<A1, A2, A3, A4, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<any[]>;
|
||||
export function bindCallback<A1, A2, A3, A4, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<[R1, R2, R3]>;
|
||||
export function bindCallback<A1, A2, A3, A4, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<[R1, R2]>;
|
||||
export function bindCallback<A1, A2, A3, A4, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<R1>;
|
||||
export function bindCallback<A1, A2, A3, A4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Observable<void>;
|
||||
|
||||
export function bindCallback<A1, A2, A3, A4, A5, R1, R2, R3, R4>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1, res2: R2, res3: R3, res4: R4, ...args: any[]) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<any[]>;
|
||||
export function bindCallback<A1, A2, A3, A4, A5, R1, R2, R3>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1, res2: R2, res3: R3) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<[R1, R2, R3]>;
|
||||
export function bindCallback<A1, A2, A3, A4, A5, R1, R2>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1, res2: R2) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<[R1, R2]>;
|
||||
export function bindCallback<A1, A2, A3, A4, A5, R1>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (res1: R1) => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<R1>;
|
||||
export function bindCallback<A1, A2, A3, A4, A5>(callbackFunc: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: () => any) => any, scheduler?: SchedulerLike): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Observable<void>;
|
||||
|
||||
export function bindCallback<A, R>(callbackFunc: (...args: Array<A | ((result: R) => any)>) => any, scheduler?: SchedulerLike): (...args: A[]) => Observable<R>;
|
||||
export function bindCallback<A, R>(callbackFunc: (...args: Array<A | ((...results: R[]) => any)>) => any, scheduler?: SchedulerLike): (...args: A[]) => Observable<R[]>;
|
||||
|
||||
export function bindCallback(callbackFunc: Function, scheduler?: SchedulerLike): (...args: any[]) => Observable<any>;
|
||||
|
||||
// tslint:enable:max-line-length
|
||||
|
||||
/**
|
||||
* Converts a callback API to a function that returns an Observable.
|
||||
*
|
||||
* <span class="informal">Give it a function `f` of type `f(x, callback)` and
|
||||
* it will return a function `g` that when called as `g(x)` will output an
|
||||
* Observable.</span>
|
||||
*
|
||||
* `bindCallback` is not an operator because its input and output are not
|
||||
* Observables. The input is a function `func` with some parameters. The
|
||||
* last parameter must be a callback function that `func` calls when it is
|
||||
* done.
|
||||
*
|
||||
* The output of `bindCallback` is a function that takes the same parameters
|
||||
* as `func`, except the last one (the callback). When the output function
|
||||
* is called with arguments it will return an Observable. If function `func`
|
||||
* calls its callback with one argument, the Observable will emit that value.
|
||||
* If on the other hand the callback is called with multiple values the resulting
|
||||
* Observable will emit an array with said values as arguments.
|
||||
*
|
||||
* It is **very important** to remember that input function `func` is not called
|
||||
* when the output function is, but rather when the Observable returned by the output
|
||||
* function is subscribed. This means if `func` makes an AJAX request, that request
|
||||
* will be made every time someone subscribes to the resulting Observable, but not before.
|
||||
*
|
||||
* The last optional parameter - `scheduler` - can be used to control when the call
|
||||
* to `func` happens after someone subscribes to Observable, as well as when results
|
||||
* passed to callback will be emitted. By default, the subscription to an Observable calls `func`
|
||||
* synchronously, but using {@link asyncScheduler} as the last parameter will defer the call to `func`,
|
||||
* just like wrapping the call in `setTimeout` with a timeout of `0` would. If you were to use the async Scheduler
|
||||
* and call `subscribe` on the output Observable, all function calls that are currently executing
|
||||
* will end before `func` is invoked.
|
||||
*
|
||||
* By default, results passed to the callback are emitted immediately after `func` invokes the callback.
|
||||
* In particular, if the callback is called synchronously, then the subscription of the resulting Observable
|
||||
* will call the `next` function synchronously as well. If you want to defer that call,
|
||||
* you may use {@link asyncScheduler} just as before. This means that by using `Scheduler.async` you can
|
||||
* ensure that `func` always calls its callback asynchronously, thus avoiding terrifying Zalgo.
|
||||
*
|
||||
* Note that the Observable created by the output function will always emit a single value
|
||||
* and then complete immediately. If `func` calls the callback multiple times, values from subsequent
|
||||
* calls will not appear in the stream. If you need to listen for multiple calls,
|
||||
* you probably want to use {@link fromEvent} or {@link fromEventPattern} instead.
|
||||
*
|
||||
* If `func` depends on some context (`this` property) and is not already bound, the context of `func`
|
||||
* will be the context that the output function has at call time. In particular, if `func`
|
||||
* is called as a method of some objec and if `func` is not already bound, in order to preserve the context
|
||||
* it is recommended that the context of the output function is set to that object as well.
|
||||
*
|
||||
* If the input function calls its callback in the "node style" (i.e. first argument to callback is
|
||||
* optional error parameter signaling whether the call failed or not), {@link bindNodeCallback}
|
||||
* provides convenient error handling and probably is a better choice.
|
||||
* `bindCallback` will treat such functions the same as any other and error parameters
|
||||
* (whether passed or not) will always be interpreted as regular callback argument.
|
||||
*
|
||||
* ## Examples
|
||||
*
|
||||
* ### Convert jQuery's getJSON to an Observable API
|
||||
* ```ts
|
||||
* import { bindCallback } from 'rxjs';
|
||||
* import * as jQuery from 'jquery';
|
||||
*
|
||||
* // Suppose we have jQuery.getJSON('/my/url', callback)
|
||||
* const getJSONAsObservable = bindCallback(jQuery.getJSON);
|
||||
* const result = getJSONAsObservable('/my/url');
|
||||
* result.subscribe(x => console.log(x), e => console.error(e));
|
||||
* ```
|
||||
*
|
||||
* ### Receive an array of arguments passed to a callback
|
||||
* ```ts
|
||||
* import { bindCallback } from 'rxjs';
|
||||
*
|
||||
* const someFunction = (a, b, c) => {
|
||||
* console.log(a); // 5
|
||||
* console.log(b); // 'some string'
|
||||
* console.log(c); // {someProperty: 'someValue'}
|
||||
* };
|
||||
*
|
||||
* const boundSomeFunction = bindCallback(someFunction);
|
||||
* boundSomeFunction().subscribe(values => {
|
||||
* console.log(values) // [5, 'some string', {someProperty: 'someValue'}]
|
||||
* });
|
||||
* ```
|
||||
*
|
||||
* ### Compare behaviour with and without async Scheduler
|
||||
* ```ts
|
||||
* import { bindCallback } from 'rxjs';
|
||||
*
|
||||
* function iCallMyCallbackSynchronously(cb) {
|
||||
* cb();
|
||||
* }
|
||||
*
|
||||
* const boundSyncFn = bindCallback(iCallMyCallbackSynchronously);
|
||||
* const boundAsyncFn = bindCallback(iCallMyCallbackSynchronously, null, Rx.Scheduler.async);
|
||||
*
|
||||
* boundSyncFn().subscribe(() => console.log('I was sync!'));
|
||||
* boundAsyncFn().subscribe(() => console.log('I was async!'));
|
||||
* console.log('This happened...');
|
||||
*
|
||||
* // Logs:
|
||||
* // I was sync!
|
||||
* // This happened...
|
||||
* // I was async!
|
||||
* ```
|
||||
*
|
||||
* ### Use bindCallback on an object method
|
||||
* ```ts
|
||||
* import { bindCallback } from 'rxjs';
|
||||
*
|
||||
* const boundMethod = bindCallback(someObject.methodWithCallback);
|
||||
* boundMethod.call(someObject) // make sure methodWithCallback has access to someObject
|
||||
* .subscribe(subscriber);
|
||||
* ```
|
||||
*
|
||||
* @see {@link bindNodeCallback}
|
||||
* @see {@link from}
|
||||
*
|
||||
* @param {function} func A function with a callback as the last parameter.
|
||||
* @param {SchedulerLike} [scheduler] The scheduler on which to schedule the
|
||||
* callbacks.
|
||||
* @return {function(...params: *): Observable} A function which returns the
|
||||
* Observable that delivers the same values the callback would deliver.
|
||||
* @name bindCallback
|
||||
*/
|
||||
export function bindCallback<T>(
|
||||
callbackFunc: Function,
|
||||
resultSelector?: Function|SchedulerLike,
|
||||
scheduler?: SchedulerLike
|
||||
): (...args: any[]) => Observable<T> {
|
||||
if (resultSelector) {
|
||||
if (isScheduler(resultSelector)) {
|
||||
scheduler = resultSelector;
|
||||
} else {
|
||||
// DEPRECATED PATH
|
||||
return (...args: any[]) => bindCallback(callbackFunc, scheduler)(...args).pipe(
|
||||
map((args) => isArray(args) ? resultSelector(...args) : resultSelector(args)),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return function (this: any, ...args: any[]): Observable<T> {
|
||||
const context = this;
|
||||
let subject: AsyncSubject<T>;
|
||||
const params = {
|
||||
context,
|
||||
subject,
|
||||
callbackFunc,
|
||||
scheduler,
|
||||
};
|
||||
return new Observable<T>(subscriber => {
|
||||
if (!scheduler) {
|
||||
if (!subject) {
|
||||
subject = new AsyncSubject<T>();
|
||||
const handler = (...innerArgs: any[]) => {
|
||||
subject.next(innerArgs.length <= 1 ? innerArgs[0] : innerArgs);
|
||||
subject.complete();
|
||||
};
|
||||
|
||||
try {
|
||||
callbackFunc.apply(context, [...args, handler]);
|
||||
} catch (err) {
|
||||
if (canReportError(subject)) {
|
||||
subject.error(err);
|
||||
} else {
|
||||
console.warn(err);
|
||||
}
|
||||
}
|
||||
}
|
||||
return subject.subscribe(subscriber);
|
||||
} else {
|
||||
const state: DispatchState<T> = {
|
||||
args, subscriber, params,
|
||||
};
|
||||
return scheduler.schedule<DispatchState<T>>(dispatch, 0, state);
|
||||
}
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
interface DispatchState<T> {
|
||||
args: any[];
|
||||
subscriber: Subscriber<T>;
|
||||
params: ParamsContext<T>;
|
||||
}
|
||||
|
||||
interface ParamsContext<T> {
|
||||
callbackFunc: Function;
|
||||
scheduler: SchedulerLike;
|
||||
context: any;
|
||||
subject: AsyncSubject<T>;
|
||||
}
|
||||
|
||||
function dispatch<T>(this: SchedulerAction<DispatchState<T>>, state: DispatchState<T>) {
|
||||
const self = this;
|
||||
const { args, subscriber, params } = state;
|
||||
const { callbackFunc, context, scheduler } = params;
|
||||
let { subject } = params;
|
||||
if (!subject) {
|
||||
subject = params.subject = new AsyncSubject<T>();
|
||||
|
||||
const handler = (...innerArgs: any[]) => {
|
||||
const value = innerArgs.length <= 1 ? innerArgs[0] : innerArgs;
|
||||
this.add(scheduler.schedule<NextState<T>>(dispatchNext, 0, { value, subject }));
|
||||
};
|
||||
|
||||
try {
|
||||
callbackFunc.apply(context, [...args, handler]);
|
||||
} catch (err) {
|
||||
subject.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
this.add(subject.subscribe(subscriber));
|
||||
}
|
||||
|
||||
interface NextState<T> {
|
||||
subject: AsyncSubject<T>;
|
||||
value: T;
|
||||
}
|
||||
|
||||
function dispatchNext<T>(this: SchedulerAction<NextState<T>>, state: NextState<T>) {
|
||||
const { value, subject } = state;
|
||||
subject.next(value);
|
||||
subject.complete();
|
||||
}
|
||||
|
||||
interface ErrorState<T> {
|
||||
subject: AsyncSubject<T>;
|
||||
err: any;
|
||||
}
|
||||
|
||||
function dispatchError<T>(this: SchedulerAction<ErrorState<T>>, state: ErrorState<T>) {
|
||||
const { err, subject } = state;
|
||||
subject.error(err);
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var Observable_1 = require("../Observable");
|
||||
function range(start, count, scheduler) {
|
||||
if (start === void 0) { start = 0; }
|
||||
return new Observable_1.Observable(function (subscriber) {
|
||||
if (count === undefined) {
|
||||
count = start;
|
||||
start = 0;
|
||||
}
|
||||
var index = 0;
|
||||
var current = start;
|
||||
if (scheduler) {
|
||||
return scheduler.schedule(dispatch, 0, {
|
||||
index: index, count: count, start: start, subscriber: subscriber
|
||||
});
|
||||
}
|
||||
else {
|
||||
do {
|
||||
if (index++ >= count) {
|
||||
subscriber.complete();
|
||||
break;
|
||||
}
|
||||
subscriber.next(current++);
|
||||
if (subscriber.closed) {
|
||||
break;
|
||||
}
|
||||
} while (true);
|
||||
}
|
||||
return undefined;
|
||||
});
|
||||
}
|
||||
exports.range = range;
|
||||
function dispatch(state) {
|
||||
var start = state.start, index = state.index, count = state.count, subscriber = state.subscriber;
|
||||
if (index >= count) {
|
||||
subscriber.complete();
|
||||
return;
|
||||
}
|
||||
subscriber.next(start);
|
||||
if (subscriber.closed) {
|
||||
return;
|
||||
}
|
||||
state.index = index + 1;
|
||||
state.start = start + 1;
|
||||
this.schedule(state);
|
||||
}
|
||||
exports.dispatch = dispatch;
|
||||
//# sourceMappingURL=range.js.map
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"pipe.js","sources":["../../src/internal/util/pipe.ts"],"names":[],"mappings":";;AACA,uCAAsC;AAiBtC,SAAgB,IAAI;IAAC,aAAsC;SAAtC,UAAsC,EAAtC,qBAAsC,EAAtC,IAAsC;QAAtC,wBAAsC;;IACzD,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;AAC5B,CAAC;AAFD,oBAEC;AAGD,SAAgB,aAAa,CAAO,GAA+B;IACjE,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,OAAO,mBAAmC,CAAC;KAC5C;IAED,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;QACpB,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;KACf;IAED,OAAO,SAAS,KAAK,CAAC,KAAQ;QAC5B,OAAO,GAAG,CAAC,MAAM,CAAC,UAAC,IAAS,EAAE,EAAuB,IAAK,OAAA,EAAE,CAAC,IAAI,CAAC,EAAR,CAAQ,EAAE,KAAY,CAAC,CAAC;IACpF,CAAC,CAAC;AACJ,CAAC;AAZD,sCAYC"}
|
||||
@@ -0,0 +1,147 @@
|
||||
import { Operator } from '../Operator';
|
||||
import { Subscriber } from '../Subscriber';
|
||||
import { Observable } from '../Observable';
|
||||
|
||||
import { ObservableInput, OperatorFunction, ObservedValueOf } from '../types';
|
||||
import { SimpleOuterSubscriber, SimpleInnerSubscriber, innerSubscribe } from '../innerSubscribe';
|
||||
|
||||
/* tslint:disable:max-line-length */
|
||||
export function catchError<T, O extends ObservableInput<any>>(selector: (err: any, caught: Observable<T>) => O): OperatorFunction<T, T | ObservedValueOf<O>>;
|
||||
/* tslint:enable:max-line-length */
|
||||
|
||||
/**
|
||||
* Catches errors on the observable to be handled by returning a new observable or throwing an error.
|
||||
*
|
||||
* 
|
||||
*
|
||||
* ## Examples
|
||||
* Continues with a different Observable when there's an error
|
||||
*
|
||||
* ```ts
|
||||
* import { of } from 'rxjs';
|
||||
* import { map, catchError } from 'rxjs/operators';
|
||||
*
|
||||
* of(1, 2, 3, 4, 5).pipe(
|
||||
* map(n => {
|
||||
* if (n === 4) {
|
||||
* throw 'four!';
|
||||
* }
|
||||
* return n;
|
||||
* }),
|
||||
* catchError(err => of('I', 'II', 'III', 'IV', 'V')),
|
||||
* )
|
||||
* .subscribe(x => console.log(x));
|
||||
* // 1, 2, 3, I, II, III, IV, V
|
||||
* ```
|
||||
*
|
||||
* Retries the caught source Observable again in case of error, similar to retry() operator
|
||||
*
|
||||
* ```ts
|
||||
* import { of } from 'rxjs';
|
||||
* import { map, catchError, take } from 'rxjs/operators';
|
||||
*
|
||||
* of(1, 2, 3, 4, 5).pipe(
|
||||
* map(n => {
|
||||
* if (n === 4) {
|
||||
* throw 'four!';
|
||||
* }
|
||||
* return n;
|
||||
* }),
|
||||
* catchError((err, caught) => caught),
|
||||
* take(30),
|
||||
* )
|
||||
* .subscribe(x => console.log(x));
|
||||
* // 1, 2, 3, 1, 2, 3, ...
|
||||
* ```
|
||||
*
|
||||
* Throws a new error when the source Observable throws an error
|
||||
*
|
||||
* ```ts
|
||||
* import { of } from 'rxjs';
|
||||
* import { map, catchError } from 'rxjs/operators';
|
||||
*
|
||||
* of(1, 2, 3, 4, 5).pipe(
|
||||
* map(n => {
|
||||
* if (n === 4) {
|
||||
* throw 'four!';
|
||||
* }
|
||||
* return n;
|
||||
* }),
|
||||
* catchError(err => {
|
||||
* throw 'error in source. Details: ' + err;
|
||||
* }),
|
||||
* )
|
||||
* .subscribe(
|
||||
* x => console.log(x),
|
||||
* err => console.log(err)
|
||||
* );
|
||||
* // 1, 2, 3, error in source. Details: four!
|
||||
* ```
|
||||
*
|
||||
* @param {function} selector a function that takes as arguments `err`, which is the error, and `caught`, which
|
||||
* is the source observable, in case you'd like to "retry" that observable by returning it again. Whatever observable
|
||||
* is returned by the `selector` will be used to continue the observable chain.
|
||||
* @return {Observable} An observable that originates from either the source or the observable returned by the
|
||||
* catch `selector` function.
|
||||
* @name catchError
|
||||
*/
|
||||
export function catchError<T, O extends ObservableInput<any>>(
|
||||
selector: (err: any, caught: Observable<T>) => O
|
||||
): OperatorFunction<T, T | ObservedValueOf<O>> {
|
||||
return function catchErrorOperatorFunction(source: Observable<T>): Observable<T | ObservedValueOf<O>> {
|
||||
const operator = new CatchOperator(selector);
|
||||
const caught = source.lift(operator);
|
||||
return (operator.caught = caught as Observable<T>);
|
||||
};
|
||||
}
|
||||
|
||||
class CatchOperator<T, R> implements Operator<T, T | R> {
|
||||
caught: Observable<T>;
|
||||
|
||||
constructor(private selector: (err: any, caught: Observable<T>) => ObservableInput<T | R>) {
|
||||
}
|
||||
|
||||
call(subscriber: Subscriber<R>, source: any): any {
|
||||
return source.subscribe(new CatchSubscriber(subscriber, this.selector, this.caught));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* We need this JSDoc comment for affecting ESDoc.
|
||||
* @ignore
|
||||
* @extends {Ignored}
|
||||
*/
|
||||
class CatchSubscriber<T, R> extends SimpleOuterSubscriber<T, T | R> {
|
||||
constructor(destination: Subscriber<any>,
|
||||
private selector: (err: any, caught: Observable<T>) => ObservableInput<T | R>,
|
||||
private caught: Observable<T>) {
|
||||
super(destination);
|
||||
}
|
||||
|
||||
// NOTE: overriding `error` instead of `_error` because we don't want
|
||||
// to have this flag this subscriber as `isStopped`. We can mimic the
|
||||
// behavior of the RetrySubscriber (from the `retry` operator), where
|
||||
// we unsubscribe from our source chain, reset our Subscriber flags,
|
||||
// then subscribe to the selector result.
|
||||
error(err: any) {
|
||||
if (!this.isStopped) {
|
||||
let result: any;
|
||||
try {
|
||||
result = this.selector(err, this.caught);
|
||||
} catch (err2) {
|
||||
super.error(err2);
|
||||
return;
|
||||
}
|
||||
this._unsubscribeAndRecycle();
|
||||
const innerSubscriber = new SimpleInnerSubscriber(this);
|
||||
this.add(innerSubscriber);
|
||||
const innerSubscription = innerSubscribe(result, innerSubscriber);
|
||||
// The returned subscription will usually be the subscriber that was
|
||||
// passed. However, interop subscribers will be wrapped and for
|
||||
// unsubscriptions to chain correctly, the wrapper needs to be added, too.
|
||||
if (innerSubscription !== innerSubscriber) {
|
||||
this.add(innerSubscription);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
import { async } from '../scheduler/async';
|
||||
import { scan } from './scan';
|
||||
import { defer } from '../observable/defer';
|
||||
import { map } from './map';
|
||||
export function timeInterval(scheduler = async) {
|
||||
return (source) => defer(() => {
|
||||
return source.pipe(scan(({ current }, value) => ({ value, current: scheduler.now(), last: current }), { current: scheduler.now(), value: undefined, last: undefined }), map(({ current, last, value }) => new TimeInterval(value, current - last)));
|
||||
});
|
||||
}
|
||||
export class TimeInterval {
|
||||
constructor(value, interval) {
|
||||
this.value = value;
|
||||
this.interval = interval;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=timeInterval.js.map
|
||||
@@ -0,0 +1,231 @@
|
||||
import { Observable } from '../Observable';
|
||||
import { SchedulerLike } from '../types';
|
||||
export declare type ConditionFunc<S> = (state: S) => boolean;
|
||||
export declare type IterateFunc<S> = (state: S) => S;
|
||||
export declare type ResultFunc<S, T> = (state: S) => T;
|
||||
export interface GenerateBaseOptions<S> {
|
||||
/**
|
||||
* Initial state.
|
||||
*/
|
||||
initialState: S;
|
||||
/**
|
||||
* Condition function that accepts state and returns boolean.
|
||||
* When it returns false, the generator stops.
|
||||
* If not specified, a generator never stops.
|
||||
*/
|
||||
condition?: ConditionFunc<S>;
|
||||
/**
|
||||
* Iterate function that accepts state and returns new state.
|
||||
*/
|
||||
iterate: IterateFunc<S>;
|
||||
/**
|
||||
* SchedulerLike to use for generation process.
|
||||
* By default, a generator starts immediately.
|
||||
*/
|
||||
scheduler?: SchedulerLike;
|
||||
}
|
||||
export interface GenerateOptions<T, S> extends GenerateBaseOptions<S> {
|
||||
/**
|
||||
* Result selection function that accepts state and returns a value to emit.
|
||||
*/
|
||||
resultSelector: ResultFunc<S, T>;
|
||||
}
|
||||
/**
|
||||
* Generates an observable sequence by running a state-driven loop
|
||||
* producing the sequence's elements, using the specified scheduler
|
||||
* to send out observer messages.
|
||||
*
|
||||
* 
|
||||
*
|
||||
* @example <caption>Produces sequence of 0, 1, 2, ... 9, then completes.</caption>
|
||||
* const res = generate(0, x => x < 10, x => x + 1, x => x);
|
||||
*
|
||||
* @example <caption>Using asap scheduler, produces sequence of 2, 3, 5, then completes.</caption>
|
||||
* const res = generate(1, x => x < 5, x => x * 2, x => x + 1, asap);
|
||||
*
|
||||
* @see {@link from}
|
||||
* @see {@link Observable}
|
||||
*
|
||||
* @param {S} initialState Initial state.
|
||||
* @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).
|
||||
* @param {function (state: S): S} iterate Iteration step function.
|
||||
* @param {function (state: S): T} resultSelector Selector function for results produced in the sequence. (deprecated)
|
||||
* @param {SchedulerLike} [scheduler] A {@link SchedulerLike} on which to run the generator loop. If not provided, defaults to emit immediately.
|
||||
* @returns {Observable<T>} The generated sequence.
|
||||
*/
|
||||
export declare function generate<T, S>(initialState: S, condition: ConditionFunc<S>, iterate: IterateFunc<S>, resultSelector: ResultFunc<S, T>, scheduler?: SchedulerLike): Observable<T>;
|
||||
/**
|
||||
* Generates an Observable by running a state-driven loop
|
||||
* that emits an element on each iteration.
|
||||
*
|
||||
* <span class="informal">Use it instead of nexting values in a for loop.</span>
|
||||
*
|
||||
* <img src="./img/generate.png" width="100%">
|
||||
*
|
||||
* `generate` allows you to create stream of values generated with a loop very similar to
|
||||
* traditional for loop. First argument of `generate` is a beginning value. Second argument
|
||||
* is a function that accepts this value and tests if some condition still holds. If it does,
|
||||
* loop continues, if not, it stops. Third value is a function which takes previously defined
|
||||
* value and modifies it in some way on each iteration. Note how these three parameters
|
||||
* are direct equivalents of three expressions in regular for loop: first expression
|
||||
* initializes some state (for example numeric index), second tests if loop can make next
|
||||
* iteration (for example if index is lower than 10) and third states how defined value
|
||||
* will be modified on every step (index will be incremented by one).
|
||||
*
|
||||
* Return value of a `generate` operator is an Observable that on each loop iteration
|
||||
* emits a value. First, condition function is ran. If it returned true, Observable
|
||||
* emits currently stored value (initial value at the first iteration) and then updates
|
||||
* that value with iterate function. If at some point condition returned false, Observable
|
||||
* completes at that moment.
|
||||
*
|
||||
* Optionally you can pass fourth parameter to `generate` - a result selector function which allows you
|
||||
* to immediately map value that would normally be emitted by an Observable.
|
||||
*
|
||||
* If you find three anonymous functions in `generate` call hard to read, you can provide
|
||||
* single object to the operator instead. That object has properties: `initialState`,
|
||||
* `condition`, `iterate` and `resultSelector`, which should have respective values that you
|
||||
* would normally pass to `generate`. `resultSelector` is still optional, but that form
|
||||
* of calling `generate` allows you to omit `condition` as well. If you omit it, that means
|
||||
* condition always holds, so output Observable will never complete.
|
||||
*
|
||||
* Both forms of `generate` can optionally accept a scheduler. In case of multi-parameter call,
|
||||
* scheduler simply comes as a last argument (no matter if there is resultSelector
|
||||
* function or not). In case of single-parameter call, you can provide it as a
|
||||
* `scheduler` property on object passed to the operator. In both cases scheduler decides when
|
||||
* next iteration of the loop will happen and therefore when next value will be emitted
|
||||
* by the Observable. For example to ensure that each value is pushed to the observer
|
||||
* on separate task in event loop, you could use `async` scheduler. Note that
|
||||
* by default (when no scheduler is passed) values are simply emitted synchronously.
|
||||
*
|
||||
*
|
||||
* @example <caption>Use with condition and iterate functions.</caption>
|
||||
* const generated = generate(0, x => x < 3, x => x + 1);
|
||||
*
|
||||
* generated.subscribe(
|
||||
* value => console.log(value),
|
||||
* err => {},
|
||||
* () => console.log('Yo!')
|
||||
* );
|
||||
*
|
||||
* // Logs:
|
||||
* // 0
|
||||
* // 1
|
||||
* // 2
|
||||
* // "Yo!"
|
||||
*
|
||||
*
|
||||
* @example <caption>Use with condition, iterate and resultSelector functions.</caption>
|
||||
* const generated = generate(0, x => x < 3, x => x + 1, x => x * 1000);
|
||||
*
|
||||
* generated.subscribe(
|
||||
* value => console.log(value),
|
||||
* err => {},
|
||||
* () => console.log('Yo!')
|
||||
* );
|
||||
*
|
||||
* // Logs:
|
||||
* // 0
|
||||
* // 1000
|
||||
* // 2000
|
||||
* // "Yo!"
|
||||
*
|
||||
*
|
||||
* @example <caption>Use with options object.</caption>
|
||||
* const generated = generate({
|
||||
* initialState: 0,
|
||||
* condition(value) { return value < 3; },
|
||||
* iterate(value) { return value + 1; },
|
||||
* resultSelector(value) { return value * 1000; }
|
||||
* });
|
||||
*
|
||||
* generated.subscribe(
|
||||
* value => console.log(value),
|
||||
* err => {},
|
||||
* () => console.log('Yo!')
|
||||
* );
|
||||
*
|
||||
* // Logs:
|
||||
* // 0
|
||||
* // 1000
|
||||
* // 2000
|
||||
* // "Yo!"
|
||||
*
|
||||
* @example <caption>Use options object without condition function.</caption>
|
||||
* const generated = generate({
|
||||
* initialState: 0,
|
||||
* iterate(value) { return value + 1; },
|
||||
* resultSelector(value) { return value * 1000; }
|
||||
* });
|
||||
*
|
||||
* generated.subscribe(
|
||||
* value => console.log(value),
|
||||
* err => {},
|
||||
* () => console.log('Yo!') // This will never run.
|
||||
* );
|
||||
*
|
||||
* // Logs:
|
||||
* // 0
|
||||
* // 1000
|
||||
* // 2000
|
||||
* // 3000
|
||||
* // ...and never stops.
|
||||
*
|
||||
*
|
||||
* @see {@link from}
|
||||
* @see {@link index/Observable.create}
|
||||
*
|
||||
* @param {S} initialState Initial state.
|
||||
* @param {function (state: S): boolean} condition Condition to terminate generation (upon returning false).
|
||||
* @param {function (state: S): S} iterate Iteration step function.
|
||||
* @param {function (state: S): T} [resultSelector] Selector function for results produced in the sequence.
|
||||
* @param {Scheduler} [scheduler] A {@link Scheduler} on which to run the generator loop. If not provided, defaults to emitting immediately.
|
||||
* @return {Observable<T>} The generated sequence.
|
||||
*/
|
||||
export declare function generate<S>(initialState: S, condition: ConditionFunc<S>, iterate: IterateFunc<S>, scheduler?: SchedulerLike): Observable<S>;
|
||||
/**
|
||||
* Generates an observable sequence by running a state-driven loop
|
||||
* producing the sequence's elements, using the specified scheduler
|
||||
* to send out observer messages.
|
||||
* The overload accepts options object that might contain initial state, iterate,
|
||||
* condition and scheduler.
|
||||
*
|
||||
* 
|
||||
*
|
||||
* @example <caption>Produces sequence of 0, 1, 2, ... 9, then completes.</caption>
|
||||
* const res = generate({
|
||||
* initialState: 0,
|
||||
* condition: x => x < 10,
|
||||
* iterate: x => x + 1,
|
||||
* });
|
||||
*
|
||||
* @see {@link from}
|
||||
* @see {@link Observable}
|
||||
*
|
||||
* @param {GenerateBaseOptions<S>} options Object that must contain initialState, iterate and might contain condition and scheduler.
|
||||
* @returns {Observable<S>} The generated sequence.
|
||||
*/
|
||||
export declare function generate<S>(options: GenerateBaseOptions<S>): Observable<S>;
|
||||
/**
|
||||
* Generates an observable sequence by running a state-driven loop
|
||||
* producing the sequence's elements, using the specified scheduler
|
||||
* to send out observer messages.
|
||||
* The overload accepts options object that might contain initial state, iterate,
|
||||
* condition, result selector and scheduler.
|
||||
*
|
||||
* 
|
||||
*
|
||||
* @example <caption>Produces sequence of 0, 1, 2, ... 9, then completes.</caption>
|
||||
* const res = generate({
|
||||
* initialState: 0,
|
||||
* condition: x => x < 10,
|
||||
* iterate: x => x + 1,
|
||||
* resultSelector: x => x,
|
||||
* });
|
||||
*
|
||||
* @see {@link from}
|
||||
* @see {@link Observable}
|
||||
*
|
||||
* @param {GenerateOptions<T, S>} options Object that must contain initialState, iterate, resultSelector and might contain condition and scheduler.
|
||||
* @returns {Observable<T>} The generated sequence.
|
||||
*/
|
||||
export declare function generate<T, S>(options: GenerateOptions<T, S>): Observable<T>;
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"onErrorResumeNext.js","sources":["../../src/add/operator/onErrorResumeNext.ts"],"names":[],"mappings":";;AAAA,sDAAoD"}
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"zipAll.js","sources":["../../src/add/operator/zipAll.ts"],"names":[],"mappings":";;AAAA,2CAAyC"}
|
||||
@@ -0,0 +1,16 @@
|
||||
/** PURE_IMPORTS_START _Observable,_util_subscribeToIterable,_scheduled_scheduleIterable PURE_IMPORTS_END */
|
||||
import { Observable } from '../Observable';
|
||||
import { subscribeToIterable } from '../util/subscribeToIterable';
|
||||
import { scheduleIterable } from '../scheduled/scheduleIterable';
|
||||
export function fromIterable(input, scheduler) {
|
||||
if (!input) {
|
||||
throw new Error('Iterable cannot be null');
|
||||
}
|
||||
if (!scheduler) {
|
||||
return new Observable(subscribeToIterable(input));
|
||||
}
|
||||
else {
|
||||
return scheduleIterable(input, scheduler);
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=fromIterable.js.map
|
||||
@@ -0,0 +1 @@
|
||||
export { TestScheduler } from '../internal/testing/TestScheduler';
|
||||
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"subscribeOn.js","sources":["../src/operators/subscribeOn.ts"],"names":[],"mappings":";;;;;AAAA,uDAAkD"}
|
||||
@@ -0,0 +1 @@
|
||||
module.exports={C:{"2":0.01434,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0.03346,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0.00478,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0.01912,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0.00956,"103":0.03824,"104":0,"105":0,"106":0.01434,"107":0.00478,"108":0.62618,"109":0.25812,"110":0.00956,"111":0,"3.5":0,"3.6":0},D:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0.00956,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0.00478,"57":0,"58":0,"59":0,"60":0,"61":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0.01434,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0.00956,"77":0,"78":0,"79":0.12906,"80":0.02868,"81":0.01434,"83":0.03824,"84":0.00956,"85":0,"86":0.01434,"87":0.00478,"88":0,"89":0.00478,"90":0,"91":0.00478,"92":0.00478,"93":0.01912,"94":0.00478,"95":0.00478,"96":0.00956,"97":0.00478,"98":0.00478,"99":0.00478,"100":0.00478,"101":0,"102":0.00478,"103":0.15774,"104":0.01912,"105":0.0239,"106":0.03346,"107":0.2151,"108":6.91188,"109":5.33926,"110":0.0239,"111":0,"112":0},F:{"9":0,"11":0,"12":0,"15":0,"16":0,"17":0,"18":0,"19":0,"20":0,"21":0,"22":0,"23":0,"24":0,"25":0,"26":0,"27":0,"28":0.0239,"29":0,"30":0,"31":0,"32":0,"33":0,"34":0,"35":0,"36":0,"37":0,"38":0,"39":0,"40":0,"41":0,"42":0,"43":0,"44":0,"45":0,"46":0,"47":0,"48":0,"49":0,"50":0,"51":0,"52":0,"53":0,"54":0,"55":0,"56":0,"57":0,"58":0,"60":0,"62":0,"63":0,"64":0,"65":0,"66":0,"67":0,"68":0,"69":0,"70":0,"71":0,"72":0,"73":0,"74":0,"75":0,"76":0,"77":0,"78":0,"79":0,"80":0,"81":0,"82":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0,"90":0,"91":0,"92":0,"93":0.16252,"94":0.3585,"9.5-9.6":0,"10.0-10.1":0,"10.5":0,"10.6":0,"11.1":0,"11.5":0,"11.6":0,"12.1":0},B:{"12":0,"13":0,"14":0,"15":0,"16":0,"17":0,"18":0.00478,"79":0,"80":0,"81":0,"83":0,"84":0,"85":0,"86":0,"87":0,"88":0,"89":0.00956,"90":0,"91":0,"92":0,"93":0,"94":0,"95":0,"96":0,"97":0,"98":0,"99":0,"100":0,"101":0,"102":0,"103":0,"104":0,"105":0,"106":0.00956,"107":0.02868,"108":2.7724,"109":1.673},E:{"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0.00478,"14":0.01434,"15":0.00478,_:"0","3.1":0,"3.2":0,"5.1":0.00478,"6.1":0,"7.1":0,"9.1":0,"10.1":0,"11.1":0,"12.1":0.00478,"13.1":0.0478,"14.1":0.08126,"15.1":0.00956,"15.2-15.3":0.00956,"15.4":0.01912,"15.5":0.10516,"15.6":0.61662,"16.0":0.04302,"16.1":0.32504,"16.2":0.82694,"16.3":0.04302},G:{"8":0,"3.2":0,"4.0-4.1":0,"4.2-4.3":0,"5.0-5.1":0.0026,"6.0-6.1":0,"7.0-7.1":0.14325,"8.1-8.4":0,"9.0-9.2":0,"9.3":0.13804,"10.0-10.2":0,"10.3":0.05209,"11.0-11.2":0.03126,"11.3-11.4":0.01563,"12.0-12.1":0.00521,"12.2-12.5":0.49748,"13.0-13.1":0,"13.2":0,"13.3":0.00521,"13.4-13.7":0.02344,"14.0-14.4":0.13023,"14.5-14.8":0.33078,"15.0-15.1":0.07553,"15.2-15.3":0.33339,"15.4":0.18753,"15.5":0.35162,"15.6":2.8364,"16.0":3.39639,"16.1":7.45435,"16.2":6.82664,"16.3":0.35943},P:{"4":0.15337,"5.0-5.4":0,"6.2-6.4":0,"7.2-7.4":0.15337,"8.2":0,"9.2":0,"10.1":0,"11.1-11.2":0.06573,"12.0":0,"13.0":0.05477,"14.0":0.02191,"15.0":0.02191,"16.0":0.03286,"17.0":0.19718,"18.0":0.28482,"19.0":4.45854},I:{"0":0,"3":0,"4":0,"2.1":0,"2.2":0,"2.3":0,"4.1":0,"4.2-4.3":0,"4.4":0,"4.4.3-4.4.4":1.39186},K:{_:"0 10 11 12 11.1 11.5 12.1"},A:{"6":0,"7":0,"8":0,"9":0,"10":0.00478,"11":0.00956,"5.5":0},J:{"7":0,"10":0},N:{"10":0,"11":0},R:{_:"0"},M:{"0":0.34452},Q:{"13.1":0},O:{"0":0.03654},H:{"0":0.15814},L:{"0":45.20774},S:{"2.5":0}};
|
||||
@@ -0,0 +1,54 @@
|
||||
# end-of-stream
|
||||
|
||||
A node module that calls a callback when a readable/writable/duplex stream has completed or failed.
|
||||
|
||||
npm install end-of-stream
|
||||
|
||||
[](https://travis-ci.org/mafintosh/end-of-stream)
|
||||
|
||||
## Usage
|
||||
|
||||
Simply pass a stream and a callback to the `eos`.
|
||||
Both legacy streams, streams2 and stream3 are supported.
|
||||
|
||||
``` js
|
||||
var eos = require('end-of-stream');
|
||||
|
||||
eos(readableStream, function(err) {
|
||||
// this will be set to the stream instance
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has ended', this === readableStream);
|
||||
});
|
||||
|
||||
eos(writableStream, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has finished', this === writableStream);
|
||||
});
|
||||
|
||||
eos(duplexStream, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has ended and finished', this === duplexStream);
|
||||
});
|
||||
|
||||
eos(duplexStream, {readable:false}, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has finished but might still be readable');
|
||||
});
|
||||
|
||||
eos(duplexStream, {writable:false}, function(err) {
|
||||
if (err) return console.log('stream had an error or closed early');
|
||||
console.log('stream has ended but might still be writable');
|
||||
});
|
||||
|
||||
eos(readableStream, {error:false}, function(err) {
|
||||
// do not treat emit('error', err) as a end-of-stream
|
||||
});
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT
|
||||
|
||||
## Related
|
||||
|
||||
`end-of-stream` is part of the [mississippi stream utility collection](https://github.com/maxogden/mississippi) which includes more useful stream modules similar to this one.
|
||||
Reference in New Issue
Block a user