ng4-signalr
Version:
angular4 signalr library
1 lines • 31.1 kB
Source Map (JSON)
{"version":3,"file":"ng4-signalr.mjs","sources":["../../src/services/connection/connection.status.ts","../../src/services/connection/connection.statuses.ts","../../src/services/eventing/broadcast.event.listener.ts","../../src/services/connection/signalr.connection.ts","../../src/services/connection/connection.transport.ts","../../src/services/connection/connection.transports.ts","../../src/services/signalr.configuration.ts","../../src/services/signalr.ts","../../src/modules/signalr-module.ts","../../src/ng4-signalr.ts"],"sourcesContent":["export class ConnectionStatus {\r\n\r\n private static names: string[] = ['connecting', 'connected', 'reconnecting', '', 'disconnected'];\r\n\r\n private _value: number;\r\n\r\n get value(): number {\r\n return this._value;\r\n }\r\n\r\n get name(): string {\r\n return ConnectionStatus.names[Number.parseInt(this._value.toString(), 10)];\r\n }\r\n\r\n constructor(value: number) {\r\n if (value == null || value < 0) {\r\n throw new Error(\"Failed to create ConnectionStatus. Argument 'name' can not be null or empty.\");\r\n }\r\n this._value = value;\r\n }\r\n\r\n public toString(): string {\r\n return this.name;\r\n }\r\n\r\n public equals(other: ConnectionStatus): boolean {\r\n if (other == null) {\r\n return false;\r\n }\r\n return this._value === other.value;\r\n }\r\n}\r\n","import { ConnectionStatus } from './connection.status';\r\n\r\n// @dynamic\r\nexport class ConnectionStatuses {\r\n\r\n private static statuses: ConnectionStatus[] =\r\n [\r\n new ConnectionStatus(0),\r\n new ConnectionStatus(1),\r\n new ConnectionStatus(2),\r\n new ConnectionStatus(4)\r\n ];\r\n\r\n public static get connecting(): ConnectionStatus {\r\n return ConnectionStatuses.statuses[0];\r\n }\r\n\r\n public static get connected(): ConnectionStatus {\r\n return ConnectionStatuses.statuses[1];\r\n }\r\n\r\n public static get reconnecting(): ConnectionStatus {\r\n return ConnectionStatuses.statuses[2];\r\n }\r\n\r\n public static get disconnected(): ConnectionStatus {\r\n return ConnectionStatuses.statuses[3];\r\n }\r\n}\r\n","import { Subject } from 'rxjs';\r\n\r\nexport class BroadcastEventListener<T> extends Subject<T> {\r\n\r\n constructor(public event: string) {\r\n super();\r\n if (event == null || event === '') {\r\n throw new Error('Failed to create BroadcastEventListener. Argument \\'event\\' can not be empty');\r\n }\r\n }\r\n}\r\n","import { ISignalRConnection } from './i.signalr.connection';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { BroadcastEventListener } from '../eventing/broadcast.event.listener';\r\nimport { ConnectionStatus } from './connection.status';\r\nimport { NgZone } from '@angular/core';\r\nimport { SignalRConfiguration } from '../signalr.configuration';\r\nimport { ConnectionTransport } from './connection.transport';\r\n\r\nexport class SignalRConnection implements ISignalRConnection {\r\n\r\n private _status: Observable<ConnectionStatus>;\r\n private _errors: Observable<any>;\r\n private _jConnection: any;\r\n private _defaultProxy: any;\r\n private _jProxies: Map<string, any>;\r\n private _zone: NgZone;\r\n private _configuration: SignalRConfiguration;\r\n\r\n constructor(jConnection: any, jProxies: Map<string, any>, zone: NgZone, configuration: SignalRConfiguration) {\r\n this._jProxies = jProxies;\r\n this._defaultProxy = jProxies.values().next().value;\r\n this._jConnection = jConnection;\r\n this._zone = zone;\r\n this._errors = this.wireUpErrorsAsObservable();\r\n this._status = this.wireUpStatusEventsAsObservable();\r\n this._configuration = configuration;\r\n }\r\n\r\n public get errors(): Observable<any> {\r\n return this._errors;\r\n }\r\n\r\n public get status(): Observable<ConnectionStatus> {\r\n return this._status;\r\n }\r\n\r\n public setQs(qs: any) {\r\n this._jConnection.qs = qs;\r\n }\r\n public getQs(): string {\r\n return this._jConnection.qs;\r\n }\r\n\r\n public start(): Promise<ISignalRConnection> {\r\n\r\n console.log('Starting connection', this._jConnection);\r\n\r\n const jTransports = this.convertTransports(this._configuration.transport);\r\n\r\n const $promise = new Promise<ISignalRConnection>((resolve, reject) => {\r\n this._jConnection\r\n .start({\r\n jsonp: this._configuration.jsonp,\r\n transport: jTransports,\r\n withCredentials: this._configuration.withCredentials,\r\n })\r\n .done(() => {\r\n console.log('Connection established, ID: ' + this._jConnection.id);\r\n console.log('Connection established, Transport: ' + this._jConnection.transport.name);\r\n resolve(this);\r\n })\r\n .fail((error: any) => {\r\n console.log('Could not connect');\r\n reject('Failed to connect. Error: ' + error.message); // ex: Error during negotiation request.\r\n });\r\n });\r\n return $promise;\r\n }\r\n\r\n public stop(): void {\r\n console.log('Stopping connection', this._jConnection);\r\n this._jConnection.stop();\r\n }\r\n\r\n public get id(): string {\r\n return this._jConnection.id;\r\n }\r\n\r\n public invoke(method: string, sproxy?: string, ...parameters: any[]): Promise<any> {\r\n if (method == null) {\r\n throw new Error('SignalRConnection: Failed to invoke. Argument \\'method\\' can not be null');\r\n }\r\n this.log(`SignalRConnection. Start invoking \\'${method}\\'...`);\r\n\r\n const $promise = new Promise<any>((resolve, reject) => {\r\n this.getCurrentProxy(sproxy).invoke(method, ...parameters)\r\n .done((result: any) => {\r\n this.log(`\\'${method}\\' invoked succesfully. Resolving promise...`);\r\n resolve(result);\r\n this.log(`Promise resolved.`);\r\n })\r\n .fail((err: any) => {\r\n console.log(`Invoking \\'${method}\\' failed. Rejecting promise...`);\r\n reject(err);\r\n console.log(`Promise rejected.`);\r\n });\r\n });\r\n return $promise;\r\n }\r\n\r\n public listen<T>(listener: BroadcastEventListener<T>, sproxy?: string): void {\r\n if (listener == null) {\r\n throw new Error('Failed to listen. Argument \\'listener\\' can not be null');\r\n }\r\n\r\n this.log(`SignalRConnection: Starting to listen to server event with name ${listener.event}`);\r\n this.getCurrentProxy(sproxy).on(listener.event, (...args: any[]) => {\r\n\r\n this._zone.run(() => {\r\n let casted: T = null;\r\n if (args.length > 0) {\r\n casted = args[0] as T;\r\n this.log('SignalRConnection.proxy.on invoked. Calling listener next() ...');\r\n listener.next(casted);\r\n this.log('listener next() called.');\r\n }\r\n });\r\n });\r\n }\r\n\r\n public listenFor<T>(event: string, sproxy?: string): BroadcastEventListener<T> {\r\n if (event == null || event === '') {\r\n throw new Error('Failed to listen. Argument \\'event\\' can not be empty');\r\n }\r\n\r\n const listener = new BroadcastEventListener<T>(event);\r\n\r\n this.listen(listener, sproxy);\r\n\r\n return listener;\r\n }\r\n\r\n private getCurrentProxy(sproxy?: string) {\r\n if (!sproxy) {\r\n return this._defaultProxy;\r\n } else {\r\n return this._jProxies.get(sproxy);\r\n }\r\n }\r\n\r\n private convertTransports(transports: ConnectionTransport | ConnectionTransport[]): any {\r\n if (transports instanceof Array) {\r\n return transports.map((t: ConnectionTransport) => t.name);\r\n }\r\n return transports.name;\r\n }\r\n\r\n private wireUpErrorsAsObservable(): Observable<any> {\r\n const sError = new Subject<any>();\r\n\r\n this._jConnection.error((error: any) => {\r\n // this._zone.run(() => { /*errors don't need to run in a zone*/\r\n sError.next(error);\r\n // });\r\n });\r\n return sError;\r\n }\r\n\r\n private wireUpStatusEventsAsObservable(): Observable<ConnectionStatus> {\r\n const sStatus = new Subject<ConnectionStatus>();\r\n // aggregate all signalr connection status handlers into 1 observable.\r\n // handler wire up, for signalr connection status callback.\r\n this._jConnection.stateChanged((change: any) => {\r\n this._zone.run(() => {\r\n sStatus.next(new ConnectionStatus(change.newState));\r\n });\r\n });\r\n return sStatus.asObservable();\r\n }\r\n\r\n /*private onBroadcastEventReceived<T>(listener: BroadcastEventListener<T>, ...args: any[]) {\r\n this.log('SignalRConnection.proxy.on invoked. Calling listener next() ...');\r\n\r\n let casted: T = null;\r\n if (args.length > 0) {\r\n casted = (args[0] as T);\r\n }\r\n\r\n this._zone.run(() => {\r\n listener.next(casted);\r\n });\r\n\r\n this.log('listener next() called.');\r\n }*/\r\n\r\n private log(...args: any[]) {\r\n if (this._jConnection.logging === false) {\r\n return;\r\n }\r\n console.log(args.join(', '));\r\n }\r\n}\r\n","export class ConnectionTransport {\r\n\r\n private _name: string;\r\n\r\n get name(): string {\r\n return this._name;\r\n }\r\n\r\n constructor(name: string) {\r\n if (name == null || name === \"\") {\r\n throw new Error(\"Failed to create ConnectionTransport. Argument 'name' can not be null or empty.\");\r\n }\r\n this._name = name;\r\n }\r\n\r\n public toString(): string {\r\n return this._name;\r\n }\r\n\r\n public equals(other: ConnectionTransport): boolean {\r\n if (other == null) {\r\n return false;\r\n }\r\n\r\n return this._name === other.name;\r\n }\r\n}\r\n","import { ConnectionTransport } from './connection.transport';\r\n\r\n// @dynamic\r\nexport class ConnectionTransports {\r\n\r\n private static transports: ConnectionTransport[] =\r\n [\r\n new ConnectionTransport(\"foreverFrame\"),\r\n new ConnectionTransport(\"longPolling\"),\r\n new ConnectionTransport(\"serverSentEvents\"),\r\n new ConnectionTransport(\"webSockets\"),\r\n new ConnectionTransport(\"auto\"),\r\n ];\r\n\r\n public static get foreverFrame(): ConnectionTransport {\r\n return ConnectionTransports.transports[0];\r\n }\r\n\r\n public static get longPolling(): ConnectionTransport {\r\n return ConnectionTransports.transports[1];\r\n }\r\n\r\n public static get serverSentEvents(): ConnectionTransport {\r\n return ConnectionTransports.transports[2];\r\n }\r\n\r\n public static get webSockets(): ConnectionTransport {\r\n return ConnectionTransports.transports[3];\r\n }\r\n\r\n public static get auto(): ConnectionTransport {\r\n return ConnectionTransports.transports[4];\r\n }\r\n}\r\n","\r\nimport { ConnectionTransports } from './connection/connection.transports';\r\nimport { ConnectionTransport } from './connection/connection.transport';\r\n\r\nexport class SignalRConfiguration {\r\n\r\n /** connection url to the SignalR service */\r\n public url: string;\r\n\r\n /** Allows you to specify query string parameters object when the client connects */\r\n public qs?: any;\r\n\r\n /** name of the SignalR service hub to connect to */\r\n public hubNames: string[];\r\n\r\n /** disable/enables client side logging. Defaults to false */\r\n public logging: boolean;\r\n\r\n /** Allows jsonp. This flag can be used to suppport CORS on older browsers */\r\n public jsonp: boolean;\r\n\r\n /** Allows withCredentials. This flag can be used to suppport CORS */\r\n public withCredentials: boolean;\r\n\r\n /** Allows you to specify transport. You can specify a fallback order\r\n * if you wan't to try specific transports in order.\r\n * By default selects best avaliable transport.\r\n */\r\n public transport: ConnectionTransport | ConnectionTransport[];\r\n\r\n constructor() {\r\n this.hubNames = [];\r\n this.logging = false;\r\n this.qs = null;\r\n this.url = null;\r\n this.jsonp = false;\r\n this.withCredentials = false;\r\n this.transport = ConnectionTransports.auto;\r\n }\r\n}\r\n","import { ISignalRConnection } from './connection/i.signalr.connection';\r\nimport { SignalRConfiguration } from './signalr.configuration';\r\nimport { SignalRConnection } from './connection/signalr.connection';\r\nimport { IConnectionOptions } from './connection/connection.options';\r\nimport { NgZone, Inject, Injectable, InjectionToken } from '@angular/core';\r\n\r\nexport const SIGNALR_JCONNECTION_TOKEN = new InjectionToken<any>('SIGNALR_JCONNECTION_TOKEN');\r\n@Injectable()\r\nexport class SignalR {\r\n private _configuration: SignalRConfiguration;\r\n private _zone: NgZone;\r\n private _jHubConnectionFn: any;\r\n\r\n public constructor(\r\n configuration: SignalRConfiguration,\r\n zone: NgZone,\r\n @Inject(SIGNALR_JCONNECTION_TOKEN) jHubConnectionFn: any\r\n ) {\r\n this._configuration = configuration;\r\n this._zone = zone;\r\n this._jHubConnectionFn = jHubConnectionFn;\r\n }\r\n\r\n public createConnection(options?: IConnectionOptions): SignalRConnection {\r\n\r\n const configuration = this.merge(options ? options : {});\r\n\r\n try {\r\n\r\n const serializedQs = JSON.stringify(configuration.qs);\r\n const serializedTransport = JSON.stringify(configuration.transport);\r\n\r\n if (configuration.logging) {\r\n console.log(`Creating connecting with multiple HUBS support!...`);\r\n console.log(`configuration:[url: '${configuration.url}'] ...`);\r\n configuration.hubNames.forEach((element) => {\r\n console.log(`configuration:[hubName: '${element}'] ...`);\r\n });\r\n console.log(`configuration:[qs: '${serializedQs}'] ...`);\r\n console.log(`configuration:[transport: '${serializedTransport}'] ...`);\r\n }\r\n } catch (err) {/* empty */ }\r\n\r\n // create connection object\r\n const jConnection = this._jHubConnectionFn(configuration.url);\r\n jConnection.logging = configuration.logging;\r\n jConnection.qs = configuration.qs;\r\n\r\n const jProxies: Map<string, any> = new Map<string, any>();\r\n configuration.hubNames.forEach((element) => {\r\n // create a proxy\r\n const jp = jConnection.createHubProxy(element);\r\n jp.on('noOp', () => { /* Empty */ });\r\n jProxies.set(element, jp);\r\n // !!! important. We need to register at least one function otherwise server callbacks will not work.\r\n });\r\n\r\n const hubConnection = new SignalRConnection(jConnection, jProxies, this._zone, configuration);\r\n\r\n return hubConnection;\r\n }\r\n\r\n public connect(options?: IConnectionOptions): Promise<ISignalRConnection> {\r\n\r\n return this.createConnection(options).start();\r\n }\r\n\r\n private merge(overrides: IConnectionOptions): SignalRConfiguration {\r\n const merged: SignalRConfiguration = new SignalRConfiguration();\r\n merged.hubNames = overrides.hubNames || this._configuration.hubNames;\r\n merged.url = overrides.url || this._configuration.url;\r\n merged.qs = overrides.qs || this._configuration.qs;\r\n merged.logging = this._configuration.logging;\r\n merged.jsonp = overrides.jsonp || this._configuration.jsonp;\r\n merged.withCredentials = overrides.withCredentials || this._configuration.withCredentials;\r\n merged.transport = overrides.transport || this._configuration.transport;\r\n return merged;\r\n }\r\n\r\n}\r\n","import { NgModule, ModuleWithProviders, NgZone, InjectionToken } from '@angular/core';\r\nimport { SignalR } from '../services/signalr';\r\nimport { SignalRConfiguration } from '../services/signalr.configuration';\r\n\r\nconst SIGNALR_CONFIGURATION = new InjectionToken<SignalRConfiguration>('SIGNALR_CONFIGURATION');\r\n\r\nexport function createSignalr(configuration: SignalRConfiguration, zone: NgZone) {\r\n\r\n const jConnectionFn = getJConnectionFn();\r\n\r\n return new SignalR(configuration, zone, jConnectionFn);\r\n}\r\n\r\nfunction getJConnectionFn(): any {\r\n const jQuery = getJquery();\r\n const hubConnectionFn = jQuery.hubConnection;\r\n if (hubConnectionFn == null) {\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error('Signalr failed to initialize. Script \\'jquery.signalR.js\\' is missing. Please make sure to include \\'jquery.signalR.js\\' script.');\r\n }\r\n return hubConnectionFn;\r\n}\r\n\r\nfunction getJquery(): any {\r\n const jQuery = (window as any).jQuery;\r\n if (jQuery == null) {\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error('Signalr failed to initialize. Script \\'jquery.js\\' is missing. Please make sure to include jquery script.');\r\n }\r\n return jQuery;\r\n}\r\n\r\n@NgModule({\r\n providers: [{\r\n provide: SignalR,\r\n useValue: SignalR\r\n }]\r\n})\r\nexport class SignalRModule {\r\n\r\n public static forRoot(getSignalRConfiguration: () => void): ModuleWithProviders<SignalRModule> {\r\n return {\r\n ngModule: SignalRModule,\r\n providers: [\r\n {\r\n provide: SIGNALR_CONFIGURATION,\r\n useFactory: getSignalRConfiguration\r\n },\r\n {\r\n deps: [SIGNALR_CONFIGURATION, NgZone],\r\n provide: SignalR,\r\n useFactory: (createSignalr)\r\n }\r\n ],\r\n };\r\n }\r\n public static forChild(): ModuleWithProviders<SignalRModule> {\r\n throw new Error(\"forChild method not implemented\");\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './main';\n"],"names":[],"mappings":";;;;MAAa,gBAAgB,CAAA;AAczB,IAAA,WAAA,CAAY,KAAa,EAAA;AACrB,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE;AAC5B,YAAA,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;AACnG,SAAA;AACD,QAAA,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;KACvB;AAbD,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,MAAM,CAAC;KACtB;AAED,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;KAC9E;IASM,QAAQ,GAAA;QACX,OAAO,IAAI,CAAC,IAAI,CAAC;KACpB;AAEM,IAAA,MAAM,CAAC,KAAuB,EAAA;QACjC,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AACD,QAAA,OAAO,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,CAAC;KACtC;;AA5Bc,gBAAA,CAAA,KAAK,GAAa,CAAC,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,EAAE,EAAE,cAAc,CAAC;;ACApG;MACa,kBAAkB,CAAA;AAUpB,IAAA,WAAW,UAAU,GAAA;AACxB,QAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACzC;AAEM,IAAA,WAAW,SAAS,GAAA;AACvB,QAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACzC;AAEM,IAAA,WAAW,YAAY,GAAA;AAC1B,QAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACzC;AAEM,IAAA,WAAW,YAAY,GAAA;AAC1B,QAAA,OAAO,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;KACzC;;AAtBc,kBAAA,CAAA,QAAQ,GACnB;IACI,IAAI,gBAAgB,CAAC,CAAC,CAAC;IACvB,IAAI,gBAAgB,CAAC,CAAC,CAAC;IACvB,IAAI,gBAAgB,CAAC,CAAC,CAAC;IACvB,IAAI,gBAAgB,CAAC,CAAC,CAAC;CAC1B;;ACTH,MAAO,sBAA0B,SAAQ,OAAU,CAAA;AAErD,IAAA,WAAA,CAAmB,KAAa,EAAA;AAC5B,QAAA,KAAK,EAAE,CAAC;AADO,QAAA,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;AAE5B,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;AACnG,SAAA;KACJ;AACJ;;MCFY,iBAAiB,CAAA;AAU1B,IAAA,WAAA,CAAY,WAAgB,EAAE,QAA0B,EAAE,IAAY,EAAE,aAAmC,EAAA;AACvG,QAAA,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;AAC1B,QAAA,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;AACpD,QAAA,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,wBAAwB,EAAE,CAAC;AAC/C,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;AACrD,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;KACvC;AAED,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;AAED,IAAA,IAAW,MAAM,GAAA;QACb,OAAO,IAAI,CAAC,OAAO,CAAC;KACvB;AAEM,IAAA,KAAK,CAAC,EAAO,EAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC;KAC7B;IACM,KAAK,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;KAC/B;IAEM,KAAK,GAAA;QAER,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AAEtD,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAqB,CAAC,OAAO,EAAE,MAAM,KAAI;AACjE,YAAA,IAAI,CAAC,YAAY;AACZ,iBAAA,KAAK,CAAC;AACH,gBAAA,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,KAAK;AAChC,gBAAA,SAAS,EAAE,WAAW;AACtB,gBAAA,eAAe,EAAE,IAAI,CAAC,cAAc,CAAC,eAAe;aACvD,CAAC;iBACD,IAAI,CAAC,MAAK;gBACP,OAAO,CAAC,GAAG,CAAC,8BAA8B,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;AACnE,gBAAA,OAAO,CAAC,GAAG,CAAC,qCAAqC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACtF,OAAO,CAAC,IAAI,CAAC,CAAC;AAClB,aAAC,CAAC;AACD,iBAAA,IAAI,CAAC,CAAC,KAAU,KAAI;AACjB,gBAAA,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;gBACjC,MAAM,CAAC,4BAA4B,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;AACzD,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACnB;IAEM,IAAI,GAAA;QACP,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACtD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;KAC5B;AAED,IAAA,IAAW,EAAE,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;KAC/B;AAEM,IAAA,MAAM,CAAC,MAAc,EAAE,MAAe,EAAE,GAAG,UAAiB,EAAA;QAC/D,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,YAAA,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;AAC/F,SAAA;AACD,QAAA,IAAI,CAAC,GAAG,CAAC,uCAAuC,MAAM,CAAA,KAAA,CAAO,CAAC,CAAC;QAE/D,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAM,CAAC,OAAO,EAAE,MAAM,KAAI;AAClD,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC;AACrD,iBAAA,IAAI,CAAC,CAAC,MAAW,KAAI;AAClB,gBAAA,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAA,4CAAA,CAA8C,CAAC,CAAC;gBACpE,OAAO,CAAC,MAAM,CAAC,CAAC;AAChB,gBAAA,IAAI,CAAC,GAAG,CAAC,CAAA,iBAAA,CAAmB,CAAC,CAAC;AAClC,aAAC,CAAC;AACD,iBAAA,IAAI,CAAC,CAAC,GAAQ,KAAI;AACf,gBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAA,+BAAA,CAAiC,CAAC,CAAC;gBACnE,MAAM,CAAC,GAAG,CAAC,CAAC;AACZ,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,iBAAA,CAAmB,CAAC,CAAC;AACrC,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,QAAQ,CAAC;KACnB;IAEM,MAAM,CAAI,QAAmC,EAAE,MAAe,EAAA;QACjE,IAAI,QAAQ,IAAI,IAAI,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;AAC9E,SAAA;QAED,IAAI,CAAC,GAAG,CAAC,CAAA,gEAAA,EAAmE,QAAQ,CAAC,KAAK,CAAE,CAAA,CAAC,CAAC;AAC9F,QAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,IAAW,KAAI;AAE/D,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK;gBAChB,IAAI,MAAM,GAAM,IAAI,CAAC;AACrB,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AACjB,oBAAA,MAAM,GAAG,IAAI,CAAC,CAAC,CAAM,CAAC;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;AAC5E,oBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,oBAAA,IAAI,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AACvC,iBAAA;AACL,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;IAEM,SAAS,CAAI,KAAa,EAAE,MAAe,EAAA;AAC9C,QAAA,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE,EAAE;AAC/B,YAAA,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;AAC5E,SAAA;AAED,QAAA,MAAM,QAAQ,GAAG,IAAI,sBAAsB,CAAI,KAAK,CAAC,CAAC;AAEtD,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAE9B,QAAA,OAAO,QAAQ,CAAC;KACnB;AAEO,IAAA,eAAe,CAAC,MAAe,EAAA;QACnC,IAAI,CAAC,MAAM,EAAE;YACT,OAAO,IAAI,CAAC,aAAa,CAAC;AAC7B,SAAA;AAAM,aAAA;YACH,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACrC,SAAA;KACJ;AAEO,IAAA,iBAAiB,CAAC,UAAuD,EAAA;QAC7E,IAAI,UAAU,YAAY,KAAK,EAAE;AAC7B,YAAA,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAsB,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC;AAC7D,SAAA;QACD,OAAO,UAAU,CAAC,IAAI,CAAC;KAC1B;IAEO,wBAAwB,GAAA;AAC5B,QAAA,MAAM,MAAM,GAAG,IAAI,OAAO,EAAO,CAAC;QAElC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,KAAU,KAAI;;AAEnC,YAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;AAEvB,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,MAAM,CAAC;KACjB;IAEO,8BAA8B,GAAA;AAClC,QAAA,MAAM,OAAO,GAAG,IAAI,OAAO,EAAoB,CAAC;;;QAGhD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC,MAAW,KAAI;AAC3C,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAK;gBAChB,OAAO,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AACxD,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACH,QAAA,OAAO,OAAO,CAAC,YAAY,EAAE,CAAC;KACjC;AAED;;;;;;;;;;;;;AAaG;IAEK,GAAG,CAAC,GAAG,IAAW,EAAA;AACtB,QAAA,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,KAAK,KAAK,EAAE;YACrC,OAAO;AACV,SAAA;QACD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;KAChC;AACJ;;MC/LY,mBAAmB,CAAA;AAQ5B,IAAA,WAAA,CAAY,IAAY,EAAA;AACpB,QAAA,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AAC7B,YAAA,MAAM,IAAI,KAAK,CAAC,iFAAiF,CAAC,CAAC;AACtG,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACrB;AATD,IAAA,IAAI,IAAI,GAAA;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IASM,QAAQ,GAAA;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;AAEM,IAAA,MAAM,CAAC,KAA0B,EAAA;QACpC,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,IAAI,CAAC;KACpC;AACJ;;ACxBD;MACa,oBAAoB,CAAA;AAWtB,IAAA,WAAW,YAAY,GAAA;AAC1B,QAAA,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC7C;AAEM,IAAA,WAAW,WAAW,GAAA;AACzB,QAAA,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC7C;AAEM,IAAA,WAAW,gBAAgB,GAAA;AAC9B,QAAA,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC7C;AAEM,IAAA,WAAW,UAAU,GAAA;AACxB,QAAA,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC7C;AAEM,IAAA,WAAW,IAAI,GAAA;AAClB,QAAA,OAAO,oBAAoB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;KAC7C;;AA3Bc,oBAAA,CAAA,UAAU,GACrB;IACI,IAAI,mBAAmB,CAAC,cAAc,CAAC;IACvC,IAAI,mBAAmB,CAAC,aAAa,CAAC;IACtC,IAAI,mBAAmB,CAAC,kBAAkB,CAAC;IAC3C,IAAI,mBAAmB,CAAC,YAAY,CAAC;IACrC,IAAI,mBAAmB,CAAC,MAAM,CAAC;CAClC;;MCRI,oBAAoB,CAAA;AA0B7B,IAAA,WAAA,GAAA;AACI,QAAA,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACnB,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;AACrB,QAAA,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;AACf,QAAA,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AACnB,QAAA,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;AAC7B,QAAA,IAAI,CAAC,SAAS,GAAG,oBAAoB,CAAC,IAAI,CAAC;KAC9C;AACJ;;ACjCM,MAAM,yBAAyB,GAAG,IAAI,cAAc,CAAM,2BAA2B,CAAC,CAAC;MAEjF,OAAO,CAAA;AAKhB,IAAA,WAAA,CACI,aAAmC,EACnC,IAAY,EACuB,gBAAqB,EAAA;AAExD,QAAA,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC;AACpC,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;AAClB,QAAA,IAAI,CAAC,iBAAiB,GAAG,gBAAgB,CAAC;KAC7C;AAEM,IAAA,gBAAgB,CAAC,OAA4B,EAAA;AAEhD,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;QAEzD,IAAI;YAEA,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YACtD,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YAEpE,IAAI,aAAa,CAAC,OAAO,EAAE;AACvB,gBAAA,OAAO,CAAC,GAAG,CAAC,CAAA,kDAAA,CAAoD,CAAC,CAAC;gBAClE,OAAO,CAAC,GAAG,CAAC,CAAA,qBAAA,EAAwB,aAAa,CAAC,GAAG,CAAQ,MAAA,CAAA,CAAC,CAAC;gBAC/D,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;AACvC,oBAAA,OAAO,CAAC,GAAG,CAAC,4BAA4B,OAAO,CAAA,MAAA,CAAQ,CAAC,CAAC;AAC7D,iBAAC,CAAC,CAAC;AACH,gBAAA,OAAO,CAAC,GAAG,CAAC,uBAAuB,YAAY,CAAA,MAAA,CAAQ,CAAC,CAAC;AACzD,gBAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,mBAAmB,CAAA,MAAA,CAAQ,CAAC,CAAC;AAC1E,aAAA;AACJ,SAAA;AAAC,QAAA,OAAO,GAAG,EAAE,eAAc;;QAG5B,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AAC9D,QAAA,WAAW,CAAC,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC;AAC5C,QAAA,WAAW,CAAC,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;AAElC,QAAA,MAAM,QAAQ,GAAqB,IAAI,GAAG,EAAe,CAAC;QAC1D,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,OAAO,KAAI;;YAEvC,MAAM,EAAE,GAAG,WAAW,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAC/C,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAK,GAAgB,CAAC,CAAC;AACrC,YAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;;AAE9B,SAAC,CAAC,CAAC;AAEH,QAAA,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AAE9F,QAAA,OAAO,aAAa,CAAC;KACxB;AAEM,IAAA,OAAO,CAAC,OAA4B,EAAA;QAEvC,OAAO,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC;KACjD;AAEO,IAAA,KAAK,CAAC,SAA6B,EAAA;AACvC,QAAA,MAAM,MAAM,GAAyB,IAAI,oBAAoB,EAAE,CAAC;AAChE,QAAA,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,QAAQ,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;AACrE,QAAA,MAAM,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC;AACtD,QAAA,MAAM,CAAC,EAAE,GAAG,SAAS,CAAC,EAAE,IAAI,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;AAC7C,QAAA,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,IAAI,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;AAC5D,QAAA,MAAM,CAAC,eAAe,GAAG,SAAS,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC;AAC1F,QAAA,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC;AACxE,QAAA,OAAO,MAAM,CAAC;KACjB;;AArEQ,OAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,OAAO,yEAQJ,yBAAyB,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;yGAR5B,OAAO,EAAA,CAAA,CAAA;4FAAP,OAAO,EAAA,UAAA,EAAA,CAAA;kBADnB,UAAU;;;8BASF,MAAM;+BAAC,yBAAyB,CAAA;;;;ACZzC,MAAM,qBAAqB,GAAG,IAAI,cAAc,CAAuB,uBAAuB,CAAC,CAAC;AAEhF,SAAA,aAAa,CAAC,aAAmC,EAAE,IAAY,EAAA;AAE3E,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;IAEzC,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,gBAAgB,GAAA;AACrB,IAAA,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;AAC3B,IAAA,MAAM,eAAe,GAAG,MAAM,CAAC,aAAa,CAAC;IAC7C,IAAI,eAAe,IAAI,IAAI,EAAE;;AAEzB,QAAA,MAAM,IAAI,KAAK,CAAC,kIAAkI,CAAC,CAAC;AACvJ,KAAA;AACD,IAAA,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,GAAA;AACd,IAAA,MAAM,MAAM,GAAI,MAAc,CAAC,MAAM,CAAC;IACtC,IAAI,MAAM,IAAI,IAAI,EAAE;;AAEhB,QAAA,MAAM,IAAI,KAAK,CAAC,2GAA2G,CAAC,CAAC;AAChI,KAAA;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;MAQY,aAAa,CAAA;IAEf,OAAO,OAAO,CAAC,uBAAmC,EAAA;QACrD,OAAO;AACH,YAAA,QAAQ,EAAE,aAAa;AACvB,YAAA,SAAS,EAAE;AACP,gBAAA;AACI,oBAAA,OAAO,EAAE,qBAAqB;AAC9B,oBAAA,UAAU,EAAE,uBAAuB;AACtC,iBAAA;AACD,gBAAA;AACI,oBAAA,IAAI,EAAE,CAAC,qBAAqB,EAAE,MAAM,CAAC;AACrC,oBAAA,OAAO,EAAE,OAAO;oBAChB,UAAU,GAAG,aAAa,CAAC;AAC9B,iBAAA;AACJ,aAAA;SACJ,CAAC;KACL;AACM,IAAA,OAAO,QAAQ,GAAA;AAClB,QAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACtD;;2GApBQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;4GAAb,aAAa,EAAA,CAAA,CAAA;AAAb,aAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,aALX,CAAC;AACR,YAAA,OAAO,EAAE,OAAO;AAChB,YAAA,QAAQ,EAAE,OAAO;SACpB,CAAC,EAAA,CAAA,CAAA;4FAEO,aAAa,EAAA,UAAA,EAAA,CAAA;kBANzB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,SAAS,EAAE,CAAC;AACR,4BAAA,OAAO,EAAE,OAAO;AAChB,4BAAA,QAAQ,EAAE,OAAO;yBACpB,CAAC;iBACL,CAAA;;;ACrCD;;AAEG;;;;"}