{"version":3,"file":"rxjs-browser-debugger.mjs","sources":["../../../projects/rxjs-browser-debugger/src/lib/model/timing.ts","../../../projects/rxjs-browser-debugger/src/lib/timing-factory.ts","../../../projects/rxjs-browser-debugger/src/lib/debug-observer.ts","../../../projects/rxjs-browser-debugger/src/lib/model/marble.ts","../../../projects/rxjs-browser-debugger/src/lib/model/debug-observer-info.ts","../../../projects/rxjs-browser-debugger/src/lib/debugger-app-launcher.ts","../../../projects/rxjs-browser-debugger/src/lib/single-subscription-debug-observer.ts","../../../projects/rxjs-browser-debugger/src/lib/model/marble-diagram.ts","../../../projects/rxjs-browser-debugger/src/lib/debug.ts"],"sourcesContent":["export class Timing {\n  constructor(public readonly taskGroupTimestamp: number) {}\n}\n","import { Timing } from './model/timing';\nimport { asyncScheduler } from 'rxjs';\n\nexport class TimingFactory {\n  private taskGroupTimestampToUse: number | null = null;\n\n  getTiming(): Timing {\n    return new Timing(\n      this.taskGroupTimestampToUse ?? this.getNewTasksGroupTimestamp(),\n    );\n  }\n\n  private getNewTasksGroupTimestamp(): number {\n    this.taskGroupTimestampToUse = asyncScheduler.now();\n    asyncScheduler.schedule(() => {\n      this.taskGroupTimestampToUse = null;\n    }, 1);\n    return this.taskGroupTimestampToUse;\n  }\n}\n","import { MarbleDiagram } from './model/marble-diagram';\nimport { TimingFactory } from './timing-factory';\n\nexport class DebugObserver {\n  private static debugObserverCounter = 0;\n\n  private static readonly timingFactoriesByMarbleDiagram = new Map<\n    MarbleDiagram,\n    TimingFactory\n  >();\n\n  public readonly id: number;\n  public readonly timingFactory: TimingFactory;\n\n  constructor(\n    public readonly description: string,\n    public readonly marbleDiagram: MarbleDiagram,\n  ) {\n    this.id = ++DebugObserver.debugObserverCounter;\n    this.timingFactory =\n      DebugObserver.timingFactoriesByMarbleDiagram.get(marbleDiagram) ??\n      new TimingFactory();\n    if (!DebugObserver.timingFactoriesByMarbleDiagram.has(marbleDiagram)) {\n      DebugObserver.timingFactoriesByMarbleDiagram.set(\n        marbleDiagram,\n        this.timingFactory,\n      );\n    }\n  }\n\n  static reset() {\n    DebugObserver.debugObserverCounter = 0;\n    DebugObserver.timingFactoriesByMarbleDiagram.clear();\n  }\n}\n","import { Timing } from './timing';\r\nimport { DebugObserverInfo } from './debug-observer-info';\r\n\r\nexport interface MarbleVisitor<P, R> {\r\n  visitSubscribe(marble: SubscribeMarble, parameter: P): R;\r\n  visitUnsubscribe(marble: UnsubscribeMarble, parameter: P): R;\r\n  visitNext(marble: NextMarble, parameter: P): R;\r\n  visitError(marble: ErrorMarble, parameter: P): R;\r\n  visitComplete(marble: CompleteMarble, parameter: P): R;\r\n}\r\n\r\nexport abstract class Marble {\r\n  abstract readonly typeName:\r\n    | 'subscribe'\r\n    | 'unsubscribe'\r\n    | 'next'\r\n    | 'error'\r\n    | 'complete';\r\n  abstract readonly isStart: boolean;\r\n  abstract readonly isEnd: boolean;\r\n\r\n  constructor(\r\n    public readonly debugObserverInfo: DebugObserverInfo,\r\n    public readonly timing: Timing,\r\n  ) {}\r\n\r\n  abstract accept<P, R>(visitor: MarbleVisitor<P, R>, parameter: P): R;\r\n}\r\n\r\nexport class SubscribeMarble extends Marble {\r\n  readonly isEnd = false;\r\n  readonly isStart = true;\r\n  readonly typeName = 'subscribe';\r\n\r\n  accept<P, R>(visitor: MarbleVisitor<P, R>, parameter: P): R {\r\n    return visitor.visitSubscribe(this, parameter);\r\n  }\r\n}\r\n\r\nexport class UnsubscribeMarble extends Marble {\r\n  readonly isEnd = true;\r\n  readonly isStart = false;\r\n  readonly typeName = 'unsubscribe';\r\n\r\n  accept<P, R>(visitor: MarbleVisitor<P, R>, parameter: P): R {\r\n    return visitor.visitUnsubscribe(this, parameter);\r\n  }\r\n}\r\n\r\nexport class NextMarble extends Marble {\r\n  readonly isEnd = false;\r\n  readonly isStart = false;\r\n  readonly typeName = 'next';\r\n\r\n  constructor(\r\n    debugObserverInfo: DebugObserverInfo,\r\n    timing: Timing,\r\n    public readonly value: unknown,\r\n  ) {\r\n    super(debugObserverInfo, timing);\r\n  }\r\n\r\n  accept<P, R>(visitor: MarbleVisitor<P, R>, parameter: P): R {\r\n    return visitor.visitNext(this, parameter);\r\n  }\r\n}\r\n\r\nexport class ErrorMarble extends Marble {\r\n  readonly isEnd = true;\r\n  readonly isStart = false;\r\n  readonly typeName = 'error';\r\n\r\n  constructor(\r\n    debugObserverInfo: DebugObserverInfo,\r\n    timing: Timing,\r\n    public readonly error: any,\r\n  ) {\r\n    super(debugObserverInfo, timing);\r\n  }\r\n\r\n  accept<P, R>(visitor: MarbleVisitor<P, R>, parameter: P): R {\r\n    return visitor.visitError(this, parameter);\r\n  }\r\n}\r\n\r\nexport class CompleteMarble extends Marble {\r\n  readonly isEnd = true;\r\n  readonly isStart = false;\r\n  readonly typeName = 'complete';\r\n\r\n  accept<P, R>(visitor: MarbleVisitor<P, R>, parameter: P): R {\r\n    return visitor.visitComplete(this, parameter);\r\n  }\r\n}\r\n","export class DebugObserverInfo {\n  constructor(\n    public readonly observerId: number,\n    public readonly description: string,\n    public readonly subscriptionId: number,\n    public readonly subscriptionOrder: number,\n  ) {}\n}\n","import { AppReadyEvent } from './model/app-ready-event';\nimport { MarbleDiagram } from './model/marble-diagram';\n\nexport class DebuggerAppLauncher {\n  private debuggerAppWindowByMarbleDiagram = new Map<MarbleDiagram, Window>();\n\n  private static instance?: DebuggerAppLauncher;\n\n  static getInstance(): DebuggerAppLauncher {\n    return (\n      DebuggerAppLauncher.instance ??\n      (DebuggerAppLauncher.instance = new DebuggerAppLauncher())\n    );\n  }\n\n  async createWindowIfAbsent(marbleDiagram: MarbleDiagram) {\n    if (\n      this.debuggerAppWindowByMarbleDiagram.has(marbleDiagram) &&\n      !this.debuggerAppWindowByMarbleDiagram.get(marbleDiagram)?.closed\n    ) {\n      return;\n    }\n    const debuggerAppWindow = window.open(\n      '',\n      '_blank',\n      'popup=1,width=1200,height=675',\n    );\n    if (!debuggerAppWindow) {\n      return;\n    }\n\n    this.debuggerAppWindowByMarbleDiagram.set(marbleDiagram, debuggerAppWindow);\n\n    const document = debuggerAppWindow.document;\n\n    document.title = 'rxjs browser debugger';\n\n    this.addExternalStylesheet(\n      document,\n      'https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500&display=swap',\n    );\n\n    const loadingElement = document.createElement('p');\n    loadingElement.id = 'loading-paragraph';\n    loadingElement.innerText = 'Loading application...';\n    document.body.appendChild(loadingElement);\n\n    const webComponent = document.createElement(\n      'rxjs-browser-debugger-application',\n    );\n    webComponent.id = 'rxjs-browser-debugger-application';\n    webComponent.addEventListener('debugAppLog', (event: Event) => {\n      console.log(...(event as CustomEvent<any[]>).detail);\n    });\n    webComponent.addEventListener('debugAppReady', (event: Event) => {\n      (event as CustomEvent<AppReadyEvent>).detail.displayMarbleDiagram(\n        marbleDiagram,\n      );\n    });\n    document.body.appendChild(webComponent);\n\n    const bundles = await import('./debugger-app-bundles');\n    this.addStyle(document, bundles.STYLES);\n    this.addScript(document, bundles.RUNTIME);\n    this.addScript(document, bundles.POLYFILLS);\n    this.addScript(document, bundles.MAIN);\n    loadingElement.remove();\n  }\n\n  private addExternalStylesheet(document: Document, href: string) {\n    const linkElement = document.createElement('link');\n    linkElement.rel = 'stylesheet';\n    linkElement.href = href;\n    document.head.appendChild(linkElement);\n  }\n\n  private addStyle(document: Document, stylesheet: string) {\n    const stylesheetElement = document.createElement('style');\n    stylesheetElement.innerHTML = stylesheet;\n    document.head.appendChild(stylesheetElement);\n  }\n\n  private addScript(document: Document, script: string) {\n    const scriptElement = document.createElement('script');\n    scriptElement.setAttribute('type', 'module');\n    scriptElement.innerHTML = script;\n    document.body.appendChild(scriptElement);\n  }\n}\n","import { TapObserver } from 'rxjs';\nimport { DebugObserver } from './debug-observer';\nimport {\n  CompleteMarble,\n  ErrorMarble,\n  Marble,\n  NextMarble,\n  SubscribeMarble,\n  UnsubscribeMarble,\n} from './model/marble';\nimport { MarbleDiagram } from './model/marble-diagram';\nimport { TimingFactory } from './timing-factory';\nimport { DebugObserverInfo } from './model/debug-observer-info';\nimport { DebuggerAppLauncher } from './debugger-app-launcher';\n\nexport class SingleSubscriptionDebugObserver implements TapObserver<unknown> {\n  private static subscriptionOrder = 0;\n\n  private readonly marbleDiagram: MarbleDiagram;\n  private readonly timingFactory: TimingFactory;\n\n  public readonly debugObserverInfo: DebugObserverInfo;\n\n  constructor(debugObserver: DebugObserver, subscriptionId: number) {\n    this.marbleDiagram = debugObserver.marbleDiagram;\n    this.timingFactory = debugObserver.timingFactory;\n    this.debugObserverInfo = new DebugObserverInfo(\n      debugObserver.id,\n      debugObserver.description,\n      subscriptionId,\n      SingleSubscriptionDebugObserver.subscriptionOrder++,\n    );\n  }\n\n  static resetSubscriptionOrderCounter() {\n    SingleSubscriptionDebugObserver.subscriptionOrder = 0;\n  }\n\n  complete(): void {\n    const marble = new CompleteMarble(\n      this.debugObserverInfo,\n      this.timingFactory.getTiming(),\n    );\n    this.addMarbleAndOpenDebugWindowIfAbsent(marble);\n  }\n\n  error(err: any): void {\n    const marble = new ErrorMarble(\n      this.debugObserverInfo,\n      this.timingFactory.getTiming(),\n      err,\n    );\n    this.addMarbleAndOpenDebugWindowIfAbsent(marble);\n  }\n\n  finalize(): void {}\n\n  next(value: unknown): void {\n    const marble = new NextMarble(\n      this.debugObserverInfo,\n      this.timingFactory.getTiming(),\n      value,\n    );\n    this.addMarbleAndOpenDebugWindowIfAbsent(marble);\n  }\n\n  subscribe(): void {\n    const marble = new SubscribeMarble(\n      this.debugObserverInfo,\n      this.timingFactory.getTiming(),\n    );\n    this.addMarbleAndOpenDebugWindowIfAbsent(marble);\n  }\n\n  unsubscribe(): void {\n    const marble = new UnsubscribeMarble(\n      this.debugObserverInfo,\n      this.timingFactory.getTiming(),\n    );\n    this.addMarbleAndOpenDebugWindowIfAbsent(marble);\n  }\n\n  private addMarbleAndOpenDebugWindowIfAbsent(marble: Marble) {\n    this.marbleDiagram.addMarble(marble);\n    if (this.marbleDiagram.recording) {\n      DebuggerAppLauncher.getInstance().createWindowIfAbsent(\n        this.marbleDiagram,\n      );\n    }\n  }\n}\n","import { Marble } from './marble';\n\nexport class MarbleDiagram {\n  private marbles: Marble[] = [];\n\n  private readonly callbacks = new Set<(marbles: Marble[]) => void>();\n\n  recording = true;\n\n  addMarble(marble: Marble) {\n    if (!this.recording) {\n      return;\n    }\n    this.marbles.push(marble);\n    this.executeCallbacks();\n  }\n\n  clearMarbles() {\n    this.marbles = [];\n    this.executeCallbacks();\n  }\n\n  registerCallback(callback: (marbles: Marble[]) => void) {\n    this.callbacks.add(callback);\n    callback(this.marbles);\n  }\n\n  removeCallback(callback: (marbles: Marble[]) => void) {\n    this.callbacks.delete(callback);\n  }\n\n  private executeCallbacks() {\n    this.callbacks.forEach((callback) => callback([...this.marbles]));\n  }\n}\n","import { identity, MonoTypeOperatorFunction, Observable, tap } from 'rxjs';\nimport { DebugObserver } from './debug-observer';\nimport { SingleSubscriptionDebugObserver } from './single-subscription-debug-observer';\nimport { MarbleDiagram } from './model/marble-diagram';\nimport { DebuggerAppLauncher } from './debugger-app-launcher';\n\nconst DEFAULT_MARBLE_DIAGRAM = new MarbleDiagram();\n\nexport function debug<T>(\n  description: string = '',\n  shouldDebug: (subscriptionIndex: number) => boolean = () => true,\n): MonoTypeOperatorFunction<T> {\n  if (!shouldDebug) {\n    return identity;\n  }\n  const debugObserver = new DebugObserver(description, DEFAULT_MARBLE_DIAGRAM);\n  let subscriptionCounter = 0;\n  return (source$) =>\n    new Observable((subscriber) => {\n      if (!shouldDebug(subscriptionCounter++)) {\n        return source$.subscribe(subscriber);\n      }\n      const singleSubscriptionDebugObserver =\n        new SingleSubscriptionDebugObserver(debugObserver, subscriptionCounter);\n      return source$\n        .pipe(tap<T>(singleSubscriptionDebugObserver))\n        .subscribe(subscriber);\n    });\n}\n\ndeclare global {\n  var openRxjsBrowserDebugger: () => void;\n}\n\nglobalThis.openRxjsBrowserDebugger = () => {\n  DebuggerAppLauncher.getInstance().createWindowIfAbsent(\n    DEFAULT_MARBLE_DIAGRAM,\n  );\n};\n"],"names":[],"mappings":"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"}