Repositorio del curso CCOM4030 el semestre B91 del proyecto Artesanías con el Instituto de Cultura

shareReplay.js 1.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import { ReplaySubject } from '../ReplaySubject';
  2. export function shareReplay(configOrBufferSize, windowTime, scheduler) {
  3. let config;
  4. if (configOrBufferSize && typeof configOrBufferSize === 'object') {
  5. config = configOrBufferSize;
  6. }
  7. else {
  8. config = {
  9. bufferSize: configOrBufferSize,
  10. windowTime,
  11. refCount: false,
  12. scheduler
  13. };
  14. }
  15. return (source) => source.lift(shareReplayOperator(config));
  16. }
  17. function shareReplayOperator({ bufferSize = Number.POSITIVE_INFINITY, windowTime = Number.POSITIVE_INFINITY, refCount: useRefCount, scheduler }) {
  18. let subject;
  19. let refCount = 0;
  20. let subscription;
  21. let hasError = false;
  22. let isComplete = false;
  23. return function shareReplayOperation(source) {
  24. refCount++;
  25. let innerSub;
  26. if (!subject || hasError) {
  27. hasError = false;
  28. subject = new ReplaySubject(bufferSize, windowTime, scheduler);
  29. innerSub = subject.subscribe(this);
  30. subscription = source.subscribe({
  31. next(value) { subject.next(value); },
  32. error(err) {
  33. hasError = true;
  34. subject.error(err);
  35. },
  36. complete() {
  37. isComplete = true;
  38. subscription = undefined;
  39. subject.complete();
  40. },
  41. });
  42. }
  43. else {
  44. innerSub = subject.subscribe(this);
  45. }
  46. this.add(() => {
  47. refCount--;
  48. innerSub.unsubscribe();
  49. if (subscription && !isComplete && useRefCount && refCount === 0) {
  50. subscription.unsubscribe();
  51. subscription = undefined;
  52. subject = undefined;
  53. }
  54. });
  55. };
  56. }
  57. //# sourceMappingURL=shareReplay.js.map