tweb/public/15.7797be5b3a76dd27f0f8.chunk.js.map
Eduard Kuzmenko 60a603b5de Build
2021-04-26 18:34:31 +04:00

1 line
24 KiB
Plaintext

{"version":3,"sources":["webpack:///./src/config/debug.ts","webpack:///./src/helpers/schedulers.ts","webpack:///./src/helpers/cancellablePromise.ts","webpack:///./src/helpers/eventListenerBase.ts","webpack:///./src/config/modes.ts","webpack:///./src/lib/rootScope.ts"],"names":["DEBUG","debug","MOUNT_CLASS_TO","window","self","debounce","fn","ms","shouldRunFirst","shouldRunLast","waitingTimeout","args","clearTimeout","setTimeout","throttle","isPending","interval","_args","setInterval","clearInterval","pause","Promise","resolve","fastRafCallbacks","fastRaf","callback","push","requestAnimationFrame","currentCallbacks","undefined","forEach","cb","doubleRaf","deferredPromise","deferredHelper","isFulfilled","isRejected","notify","notifyAll","lastNotify","listeners","addNotifyListener","deferred","reject","value","finally","length","cancel","Object","assign","EventListenerBase","reuseResults","this","_constructor","listenerResults","name","once","hasOwnProperty","obj","i","addEventListener","findAndSplice","l","arr","slice","listener","findIndex","removeEventListener","Modes","test","location","search","indexOf","http","ssl","multipleConnections","asServiceWorker","RootScope","super","_overlayIsActive","myId","idle","isIDLE","connectionStatus","peerId","broadcast","detail","dispatchEvent","on","off","e","status","rootScope"],"mappings":"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","file":"15.7797be5b3a76dd27f0f8.chunk.js","sourcesContent":["/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport Modes from \"./modes\";\r\n\r\nexport const DEBUG = process.env.NODE_ENV !== 'production' || Modes.debug;\r\nconst ctx: any = typeof(window) !== 'undefined' ? window : self;\r\nexport const MOUNT_CLASS_TO: any = DEBUG || true/* && false */ ? ctx : {};\r\nexport default DEBUG;\r\n\r\n//let m = DEBUG;\r\n/* if(!DEBUG) {\r\n ctx.sandpitTurtle = () => {\r\n //if(!m) {\r\n for(let i in MOUNT_CLASS_TO) {\r\n ctx[i] = MOUNT_CLASS_TO[i];\r\n }\r\n //m = true;\r\n //}\r\n \r\n //DEBUG = !DEBUG;\r\n };\r\n} */\r\n\r\n/* export const superDebug = (object: any, key: string) => {\r\n var d = object[key];\r\n var beforeStr = '', afterStr = '';\r\n for(var r of d) {\r\n beforeStr += r.before.hex + '\\n';\r\n afterStr += r.after.hex + '\\n';\r\n }\r\n\r\n beforeStr = beforeStr.trim();\r\n afterStr = afterStr.trim();\r\n //var beforeStr = d.map(r => r.before.hex).join('\\n');\r\n //var afterStr = d.map(r => r.after.hex).join('\\n');\r\n\r\n var dada = (name: string, str: string) => {\r\n var a = document.createElement('a');\r\n a.target = '_blank';\r\n a.download = name + '.txt';\r\n a.href = URL.createObjectURL(new Blob([str], {\r\n type: 'text/plain'\r\n }));\r\n document.body.append(a);\r\n a.click();\r\n };\r\n\r\n dada(key + '_' + 'before', beforeStr);\r\n dada(key + '_' + 'after', afterStr);\r\n}\r\n\r\nMOUNT_CLASS_TO.superDebug = superDebug; */\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n// * Jolly Cobra's schedulers\r\nimport { AnyToVoidFunction, NoneToVoidFunction } from \"../types\";\r\n\r\n//type Scheduler = typeof requestAnimationFrame | typeof onTickEnd | typeof runNow;\r\n\r\nexport function debounce<F extends AnyToVoidFunction>(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n shouldRunLast = true,\r\n) {\r\n let waitingTimeout: number | null = null;\r\n\r\n return (...args: Parameters<F>) => {\r\n if(waitingTimeout) {\r\n clearTimeout(waitingTimeout);\r\n waitingTimeout = null;\r\n } else if(shouldRunFirst) {\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n waitingTimeout = setTimeout(() => {\r\n if(shouldRunLast) {\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n waitingTimeout = null;\r\n }, ms) as any;\r\n };\r\n}\r\n\r\nexport function throttle<F extends AnyToVoidFunction>(\r\n fn: F,\r\n ms: number,\r\n shouldRunFirst = true,\r\n) {\r\n let interval: number | null = null;\r\n let isPending: boolean;\r\n let args: Parameters<F>;\r\n\r\n return (..._args: Parameters<F>) => {\r\n isPending = true;\r\n args = _args;\r\n\r\n if(!interval) {\r\n if(shouldRunFirst) {\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }\r\n\r\n interval = setInterval(() => {\r\n if (!isPending) {\r\n clearInterval(interval!);\r\n interval = null;\r\n return;\r\n }\r\n\r\n isPending = false;\r\n // @ts-ignore\r\n fn(...args);\r\n }, ms) as any;\r\n }\r\n };\r\n}\r\n\r\n/* export function throttleWithRaf<F extends AnyToVoidFunction>(fn: F) {\r\n return throttleWith(fastRaf, fn);\r\n}\r\n\r\nexport function throttleWithTickEnd<F extends AnyToVoidFunction>(fn: F) {\r\n return throttleWith(onTickEnd, fn);\r\n}\r\n\r\nexport function throttleWithNow<F extends AnyToVoidFunction>(fn: F) {\r\n return throttleWith(runNow, fn);\r\n}\r\n\r\nexport function throttleWith<F extends AnyToVoidFunction>(schedulerFn: Scheduler, fn: F) {\r\n let waiting = false;\r\n let args: Parameters<F>;\r\n\r\n return (..._args: Parameters<F>) => {\r\n args = _args;\r\n\r\n if (!waiting) {\r\n waiting = true;\r\n\r\n schedulerFn(() => {\r\n waiting = false;\r\n // @ts-ignore\r\n fn(...args);\r\n });\r\n }\r\n };\r\n}\r\n\r\nexport function onTickEnd(cb: NoneToVoidFunction) {\r\n Promise.resolve().then(cb);\r\n}\r\n\r\nfunction runNow(fn: NoneToVoidFunction) {\r\n fn();\r\n} */\r\n\r\nexport const pause = (ms: number) => new Promise<void>((resolve) => {\r\n setTimeout(resolve, ms);\r\n});\r\n\r\nlet fastRafCallbacks: NoneToVoidFunction[] | undefined;\r\nexport function fastRaf(callback: NoneToVoidFunction) {\r\n if(!fastRafCallbacks) {\r\n fastRafCallbacks = [callback];\r\n\r\n requestAnimationFrame(() => {\r\n const currentCallbacks = fastRafCallbacks!;\r\n fastRafCallbacks = undefined;\r\n currentCallbacks.forEach((cb) => cb());\r\n });\r\n } else {\r\n fastRafCallbacks.push(callback);\r\n }\r\n}\r\n\r\nexport function doubleRaf() {\r\n return new Promise<void>((resolve) => {\r\n fastRaf(() => {\r\n fastRaf(resolve);\r\n });\r\n });\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nexport interface CancellablePromise<T> extends Promise<T> {\r\n resolve?: (...args: any[]) => void,\r\n reject?: (...args: any[]) => void,\r\n cancel?: () => void,\r\n\r\n notify?: (...args: any[]) => void,\r\n notifyAll?: (...args: any[]) => void,\r\n lastNotify?: any,\r\n listeners?: Array<(...args: any[]) => void>,\r\n addNotifyListener?: (callback: (...args: any[]) => void) => void,\r\n\r\n isFulfilled?: boolean,\r\n isRejected?: boolean\r\n}\r\n\r\nexport function deferredPromise<T>() {\r\n let deferredHelper: any = {\r\n isFulfilled: false, \r\n isRejected: false,\r\n\r\n notify: () => {}, \r\n notifyAll: (...args: any[]) => {\r\n deferredHelper.lastNotify = args;\r\n deferredHelper.listeners.forEach((callback: any) => callback(...args));\r\n }, \r\n\r\n lastNotify: undefined,\r\n listeners: [],\r\n addNotifyListener: (callback: (...args: any[]) => void) => {\r\n if(deferredHelper.lastNotify) {\r\n callback(...deferredHelper.lastNotify);\r\n }\r\n\r\n deferredHelper.listeners.push(callback);\r\n }\r\n };\r\n\r\n let deferred: CancellablePromise<T> = new Promise<T>((resolve, reject) => {\r\n deferredHelper.resolve = (value: T) => {\r\n if(deferred.isFulfilled) return;\r\n\r\n deferred.isFulfilled = true;\r\n resolve(value);\r\n };\r\n \r\n deferredHelper.reject = (...args: any[]) => {\r\n if(deferred.isRejected) return;\r\n \r\n deferred.isRejected = true;\r\n reject(...args);\r\n };\r\n });\r\n\r\n // @ts-ignore\r\n /* deferred.then = (resolve: (value: T) => any, reject: (...args: any[]) => any) => {\r\n const n = deferredPromise<ReturnType<typeof resolve>>();\r\n \r\n }; */\r\n\r\n deferred.finally(() => {\r\n deferred.notify = null;\r\n deferred.listeners.length = 0;\r\n deferred.lastNotify = null;\r\n\r\n if(deferred.cancel) {\r\n deferred.cancel = () => {};\r\n }\r\n });\r\n\r\n Object.assign(deferred, deferredHelper);\r\n\r\n return deferred;\r\n}","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\n//import { MOUNT_CLASS_TO } from \"../config/debug\";\r\nimport type { ArgumentTypes, SuperReturnType } from \"../types\";\r\n\r\n// class EventSystem {\r\n// wm: WeakMap<any, Record<any, Set<any>>> = new WeakMap();\r\n\r\n// add(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (listeners === undefined) {\r\n// listeners = {};\r\n// }\r\n// let listenersForEvent = listeners[event];\r\n// if (listenersForEvent === undefined) {\r\n// listenersForEvent = new Set();\r\n// }\r\n// listenersForEvent.add(listener);\r\n// listeners[event] = listenersForEvent;\r\n// //target.addEventListener(event, listener);\r\n// this.wm.set(target, listeners);\r\n// };\r\n\r\n// remove(target: any, event: any, listener: any) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// listenersForEvent.delete(listener);\r\n// };\r\n \r\n// /* fire(target, event) {\r\n// let listeners = this.wm.get(target);\r\n// if (!listeners) return;\r\n// let listenersForEvent = listeners[event];\r\n// if (!listenersForEvent) return;\r\n// for (let handler of handlers) {\r\n// setTimeout(handler, 0, event, target); // we use a setTimeout here because we want event triggering to be asynchronous. \r\n// }\r\n// }; */\r\n// }\r\n\r\n// console.log = () => {};\r\n\r\n// const e = new EventSystem();\r\n// MOUNT_CLASS_TO.e = e;\r\n\r\n/**\r\n * Better not to remove listeners during setting\r\n * Should add listener callback only once\r\n */\r\nexport default class EventListenerBase<Listeners extends {[name: string]: Function}> {\r\n protected listeners: Partial<{\r\n [k in keyof Listeners]: Array<{callback: Listeners[k], once?: boolean}>\r\n }>;\r\n protected listenerResults: Partial<{\r\n [k in keyof Listeners]: ArgumentTypes<Listeners[k]>\r\n }>;\r\n\r\n private reuseResults: boolean;\r\n\r\n constructor(reuseResults?: boolean) {\r\n this._constructor(reuseResults);\r\n }\r\n\r\n public _constructor(reuseResults = false): any {\r\n this.reuseResults = reuseResults;\r\n this.listeners = {};\r\n this.listenerResults = {};\r\n }\r\n\r\n public addEventListener(name: keyof Listeners, callback: Listeners[typeof name], once?: boolean) {\r\n if(this.listenerResults.hasOwnProperty(name)) {\r\n callback(...this.listenerResults[name]);\r\n \r\n if(once) {\r\n return;\r\n }\r\n }\r\n \r\n (this.listeners[name] ?? (this.listeners[name] = [])).push({callback, once});\r\n //e.add(this, name, {callback, once});\r\n }\r\n\r\n public addMultipleEventsListeners(obj: {\r\n [name in keyof Listeners]?: Listeners[name]\r\n }) {\r\n for(const i in obj) {\r\n this.addEventListener(i, obj[i]);\r\n }\r\n }\r\n\r\n public removeEventListener(name: keyof Listeners, callback: Listeners[typeof name]) {\r\n if(this.listeners[name]) {\r\n this.listeners[name].findAndSplice(l => l.callback === callback);\r\n }\r\n //e.remove(this, name, callback);\r\n }\r\n\r\n // * must be protected, but who cares\r\n public dispatchEvent(name: keyof Listeners, ...args: ArgumentTypes<Listeners[typeof name]>) {\r\n if(this.reuseResults) {\r\n this.listenerResults[name] = args;\r\n }\r\n\r\n const arr: Array<SuperReturnType<Listeners[typeof name]>> = [];\r\n\r\n /* let a = e.wm.get(this)[name];\r\n if(!a) return arr;\r\n const listeners = [...a]; */\r\n const listeners = this.listeners[name];\r\n if(listeners) {\r\n // ! this one will guarantee execution even if delete another listener during setting\r\n const left = listeners.slice();\r\n left.forEach((listener: any) => {\r\n const index = listeners.findIndex((l: any) => l.callback === listener.callback);\r\n if(index === -1) {\r\n return;\r\n }\r\n\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n this.removeEventListener(name, listener.callback);\r\n }\r\n });\r\n\r\n /* for(let i = 0, length = listeners.length; i < length; ++i) {\r\n const listener = listeners[i];\r\n arr.push(listener.callback(...args));\r\n\r\n if(listener.once) {\r\n listeners.splice(i, 1);\r\n --i;\r\n --length;\r\n }\r\n } */\r\n }\r\n\r\n return arr;\r\n }\r\n\r\n public cleanup() {\r\n this.listeners = {}; \r\n this.listenerResults = {};\r\n }\r\n}\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n * \r\n * Originally from:\r\n * https://github.com/zhukov/webogram\r\n * Copyright (C) 2014 Igor Zhukov <igor.beatle@gmail.com>\r\n * https://github.com/zhukov/webogram/blob/master/LICENSE\r\n */\r\n\r\nconst Modes = {\r\n test: location.search.indexOf('test=1') > 0/* || true */,\r\n debug: location.search.indexOf('debug=1') > 0,\r\n http: false, //location.search.indexOf('http=1') > 0,\r\n ssl: true, // location.search.indexOf('ssl=1') > 0 || location.protocol === 'https:' && location.search.indexOf('ssl=0') === -1,\r\n multipleConnections: true,\r\n asServiceWorker: false\r\n};\r\n\r\n//////////////////\r\n/////////////////////////////\r\n//////////\r\n\r\nexport default Modes;\r\n","/*\r\n * https://github.com/morethanwords/tweb\r\n * Copyright (C) 2019-2021 Eduard Kuzmenko\r\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\r\n */\r\n\r\nimport type { Message, StickerSet, Update, NotifyPeer, PeerNotifySettings, ConstructorDeclMap } from \"../layer\";\r\nimport type { MyDocument } from \"./appManagers/appDocsManager\";\r\nimport type { AppMessagesManager, Dialog, MessagesStorage } from \"./appManagers/appMessagesManager\";\r\nimport type { Poll, PollResults } from \"./appManagers/appPollsManager\";\r\nimport type { MyDialogFilter } from \"./storages/filters\";\r\nimport type { ConnectionStatusChange } from \"../types\";\r\nimport type { UserTyping } from \"./appManagers/appChatsManager\";\r\nimport type Chat from \"../components/chat/chat\";\r\nimport type { UserAuth } from \"./mtproto/mtproto_config\";\r\nimport type { State } from \"./appManagers/appStateManager\";\r\nimport type { MyDraftMessage } from \"./appManagers/appDraftsManager\";\r\nimport EventListenerBase from \"../helpers/eventListenerBase\";\r\nimport { MOUNT_CLASS_TO } from \"../config/debug\";\r\n\r\nexport type BroadcastEvents = {\r\n 'user_update': number,\r\n 'user_auth': UserAuth,\r\n 'peer_changed': number,\r\n 'peer_changing': Chat,\r\n 'peer_pinned_messages': {peerId: number, mids?: number[], pinned?: boolean, unpinAll?: true},\r\n 'peer_pinned_hidden': {peerId: number, maxId: number},\r\n 'peer_typings': {peerId: number, typings: UserTyping[]},\r\n 'peer_block': {peerId: number, blocked: boolean},\r\n 'peer_title_edit': number,\r\n 'peer_bio_edit': number,\r\n\r\n 'filter_delete': MyDialogFilter,\r\n 'filter_update': MyDialogFilter,\r\n 'filter_order': number[],\r\n \r\n 'dialog_draft': {peerId: number, draft: MyDraftMessage | undefined, index: number},\r\n 'dialog_unread': {peerId: number},\r\n 'dialog_flush': {peerId: number},\r\n 'dialog_drop': {peerId: number, dialog?: Dialog},\r\n 'dialog_migrate': {migrateFrom: number, migrateTo: number},\r\n //'dialog_top': Dialog,\r\n 'dialog_notify_settings': Dialog,\r\n 'dialogs_multiupdate': {[peerId: string]: Dialog},\r\n 'dialogs_archived_unread': {count: number},\r\n \r\n 'history_append': {storage: MessagesStorage, peerId: number, mid: number},\r\n 'history_update': {storage: MessagesStorage, peerId: number, mid: number},\r\n 'history_reply_markup': {peerId: number},\r\n 'history_multiappend': AppMessagesManager['newMessagesToHandle'],\r\n 'history_delete': {peerId: number, msgs: {[mid: number]: true}},\r\n 'history_forbidden': number,\r\n 'history_reload': number,\r\n 'history_focus': {peerId: number, mid?: number},\r\n //'history_request': void,\r\n \r\n 'message_edit': {storage: MessagesStorage, peerId: number, mid: number},\r\n 'message_views': {mid: number, views: number},\r\n 'message_sent': {storage: MessagesStorage, tempId: number, tempMessage: any, mid: number},\r\n 'messages_pending': void,\r\n 'messages_read': void,\r\n 'messages_downloaded': {peerId: number, mids: number[]},\r\n 'messages_media_read': {peerId: number, mids: number[]},\r\n\r\n 'replies_updated': Message.message,\r\n\r\n 'scheduled_new': {peerId: number, mid: number},\r\n 'scheduled_delete': {peerId: number, mids: number[]},\r\n\r\n 'album_edit': {peerId: number, groupId: string, deletedMids: number[]},\r\n\r\n 'stickers_installed': StickerSet.stickerSet,\r\n 'stickers_deleted': StickerSet.stickerSet,\r\n\r\n 'audio_play': {doc: MyDocument, mid: number, peerId: number},\r\n 'audio_pause': void,\r\n \r\n 'state_synchronized': number,\r\n 'state_synchronizing': number,\r\n \r\n 'contacts_update': number,\r\n 'avatar_update': number,\r\n 'chat_full_update': number,\r\n 'poll_update': {poll: Poll, results: PollResults},\r\n 'chat_update': number,\r\n 'channel_settings': {channelId: number},\r\n 'webpage_updated': {id: string, msgs: number[]},\r\n\r\n 'download_progress': any,\r\n 'connection_status_change': ConnectionStatusChange,\r\n 'settings_updated': {key: string, value: any},\r\n 'draft_updated': {peerId: number, threadId: number, draft: MyDraftMessage | undefined},\r\n\r\n 'event-heavy-animation-start': void,\r\n 'event-heavy-animation-end': void,\r\n\r\n 'im_mount': void,\r\n 'im_tab_change': number,\r\n\r\n 'idle': boolean,\r\n\r\n 'overlay_toggle': boolean,\r\n\r\n 'background_change': void,\r\n\r\n 'privacy_update': Update.updatePrivacy,\r\n\r\n 'notify_settings': Update.updateNotifySettings,\r\n 'notify_peer_type_settings': {key: Exclude<NotifyPeer['_'], 'notifyPeer'>, settings: PeerNotifySettings},\r\n\r\n 'language_change': void,\r\n};\r\n\r\nexport class RootScope extends EventListenerBase<{\r\n [name in Update['_']]: (update: ConstructorDeclMap[name]) => void\r\n} & {\r\n [name in keyof BroadcastEvents]: (e: BroadcastEvents[name]) => void\r\n}> {\r\n private _overlayIsActive: boolean = false;\r\n public myId = 0;\r\n public idle = {\r\n isIDLE: true\r\n };\r\n public connectionStatus: {[name: string]: ConnectionStatusChange} = {};\r\n public settings: State['settings'];\r\n public peerId = 0;\r\n\r\n constructor() {\r\n super();\r\n\r\n this.on('peer_changed', (peerId) => {\r\n this.peerId = peerId;\r\n });\r\n\r\n this.on('user_auth', (e) => {\r\n this.myId = e;\r\n });\r\n\r\n this.on('connection_status_change', (e) => {\r\n const status = e;\r\n this.connectionStatus[e.name] = status;\r\n });\r\n }\r\n\r\n get overlayIsActive() {\r\n return this._overlayIsActive;\r\n }\r\n\r\n set overlayIsActive(value: boolean) {\r\n this._overlayIsActive = value;\r\n this.broadcast('overlay_toggle', value);\r\n }\r\n\r\n public broadcast = <T extends keyof BroadcastEvents>(name: T, detail?: BroadcastEvents[T]) => {\r\n /* //if(DEBUG) {\r\n if(name !== 'user_update') {\r\n console.debug('Broadcasting ' + name + ' event, with args:', detail);\r\n }\r\n //} */\r\n\r\n this.dispatchEvent(name, detail);\r\n };\r\n\r\n public on = <T extends keyof BroadcastEvents>(name: T, callback: (e: BroadcastEvents[T]) => any, once?: true) => {\r\n super.addEventListener(name, callback, once);\r\n };\r\n\r\n public addEventListener = this.on;\r\n\r\n public off = <T extends keyof BroadcastEvents>(name: T, callback: (e: BroadcastEvents[T]) => any) => {\r\n super.removeEventListener(name, callback);\r\n };\r\n\r\n public removeEventListener = this.off;\r\n}\r\n\r\nconst rootScope = new RootScope();\r\nMOUNT_CLASS_TO.rootScope = rootScope;\r\nexport default rootScope;\r\n\r\n/* rootScope.addEventListener('album_edit', (e) => {\r\n \r\n});\r\n\r\nrootScope.addEventListener<'album_edit'>('album_edit', (e) => {\r\n \r\n}); */\r\n"],"sourceRoot":""}