function combineLatest(...inputs) {
const observables = inputs.slice(0, -1);
const fn = inputs[inputs.length - 1];
let latestValues = observables.map(obs => obs.read());
const obs = new Observable(fn(...latestValues));
observables.forEach((observable, index) => {
observable.subscribe((value) => {
latestValues[index] = value;
obs.write(fn(...latestValues));
});
});
return obs;
}