1 line
23 KiB
Plaintext
1 line
23 KiB
Plaintext
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/environment/ctx.ts","webpack:///./src/environment/userAgent.ts","webpack:///./src/environment/canUseTransferables.ts","webpack:///./src/helpers/blob/readBlobAsText.ts","webpack:///./src/helpers/blob/readBlobAs.ts","webpack:///./src/lib/rlottie/applyReplacements.ts","webpack:///./src/lib/rlottie/rlottie.worker.ts"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","window","self","USER_AGENT","navigator","userAgent","IS_SAFARI","search","toLowerCase","indexOf","test","vendor","platform","maxTouchPoints","MSStream","match","CAN_USE_TRANSFERABLES","err","readBlobAsText","blob","method","Promise","resolve","reader","FileReader","addEventListener","e","target","result","readBlobAs","COLORREPLACEMENTS","convert","Math","round","min","max","applyReplacements","toneIndex","replacements","checkSmth","smth","ty","k","color","foundReplacement","find","applyTo","iterateIt","it","layer","layers","shapes","shape","console","warn","importScripts","_Module","Module","RLottieItem","reqId","width","height","json","fps","this","dead","handle","worker","Api","init","stringOnWasmHeap","allocate","intArrayFromString","frameCount","loadFromData","resize","reply","error","frameNo","clamped","undefined","render","bufferPointer","buffer","data","HEAPU8","subarray","set","Uint8ClampedArray","destroy","cwrap","initApi","onRuntimeInitialized","items","queryableFunctions","item","then","newAnimationData","JSON","parse","stringify","frameRate","renderFrame","args","arguments","length","TypeError","Array","slice","transfer","ArrayBuffer","push","postMessage","queryMethodListener","queryMethodArguments","onmessage","queryMethod","apply"],"mappings":"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","file":"rlottie.worker.086dfed03cbca80766c6.bundle.worker.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 0);\n","const ctx = typeof(window) !== 'undefined' ? window : self;\n\nexport default ctx;\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 ctx from './ctx';\r\n\r\nexport const USER_AGENT = navigator ? navigator.userAgent : null;\r\nexport const IS_APPLE = navigator.userAgent.search(/OS X|iPhone|iPad|iOS/i) !== -1;\r\nexport const IS_ANDROID = navigator.userAgent.toLowerCase().indexOf('android') !== -1;\r\nexport const IS_CHROMIUM = /Chrome/.test(navigator.userAgent) && /Google Inc/.test(navigator.vendor);\r\n\r\n// https://stackoverflow.com/a/58065241\r\nexport const IS_APPLE_MOBILE = (/iPad|iPhone|iPod/.test(navigator.platform) ||\r\n (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1)) &&\r\n !(ctx as any).MSStream;\r\n\r\nexport const IS_SAFARI = !!('safari' in ctx) || !!(USER_AGENT && (/\\b(iPad|iPhone|iPod)\\b/.test(USER_AGENT) || (!!USER_AGENT.match('Safari') && !USER_AGENT.match('Chrome'))))/* || true */;\r\nexport const IS_FIREFOX = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\r\n\r\nexport const IS_MOBILE_SAFARI = IS_SAFARI && IS_APPLE_MOBILE;\r\n\r\nexport const IS_MOBILE = /* screen.width && screen.width < 480 || */navigator.maxTouchPoints > 0 && navigator.userAgent.search(/iOS|iPhone OS|Android|BlackBerry|BB10|Series ?[64]0|J2ME|MIDP|opera mini|opera mobi|mobi.+Gecko|Windows Phone/i) != -1;\r\n","import { IS_SAFARI } from \"./userAgent\";\n\n/*\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\n * transfer data between WebWorkers and the main thread.\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\n *\n * This should be removed once the underlying Safari issue is fixed.\n */\n\nlet CAN_USE_TRANSFERABLES: boolean;\nif(!IS_SAFARI) CAN_USE_TRANSFERABLES = true;\nelse {\n try {\n const match = navigator.userAgent.match(/Version\\/(.+?) /);\n CAN_USE_TRANSFERABLES = +match[1] >= 14;\n } catch(err) {\n CAN_USE_TRANSFERABLES = false;\n }\n}\n\nexport default CAN_USE_TRANSFERABLES;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport readBlobAs from \"./readBlobAs\";\n\nexport default function readBlobAsText(blob: Blob) {\n return readBlobAs(blob, 'readAsText');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { IS_WEB_WORKER } from \"../context\";\n\n// const id = IS_WEB_WORKER ? Math.random() * 0x1000 | 0 : 0;\nexport default function readBlobAs(blob: Blob, method: 'readAsText'): Promise<string>;\nexport default function readBlobAs(blob: Blob, method: 'readAsDataURL'): Promise<string>;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer'): Promise<ArrayBuffer>;\nexport default function readBlobAs(blob: Blob, method: 'readAsArrayBuffer' | 'readAsText' | 'readAsDataURL'): Promise<any> {\n // const perf = performance.now();\n return new Promise<any>((resolve) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', (e) => {\n // console.log(`readBlobAs [${id}] ${method} time ${performance.now() - perf}`);\n resolve(e.target.result);\n });\n reader[method](blob);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// https://github.com/telegramdesktop/tdesktop/blob/97d8ee75d51874fcb74a9bfadc79f835c82be54a/Telegram/SourceFiles/chat_helpers/stickers_emoji_pack.cpp#L46\nconst COLORREPLACEMENTS = [\n [\n [0xf77e41, 0xcb7b55],\n [0xffb139, 0xf6b689],\n [0xffd140, 0xffcda7],\n [0xffdf79, 0xffdfc5],\n ],\n\n [\n [0xf77e41, 0xa45a38],\n [0xffb139, 0xdf986b],\n [0xffd140, 0xedb183],\n [0xffdf79, 0xf4c3a0],\n ],\n\n [\n [0xf77e41, 0x703a17],\n [0xffb139, 0xab673d],\n [0xffd140, 0xc37f4e],\n [0xffdf79, 0xd89667],\n ],\n\n [\n [0xf77e41, 0x4a2409],\n [0xffb139, 0x7d3e0e],\n [0xffd140, 0x965529],\n [0xffdf79, 0xa96337],\n ],\n\n [\n [0xf77e41, 0x200f0a],\n [0xffb139, 0x412924],\n [0xffd140, 0x593d37],\n [0xffdf79, 0x63453f],\n ]\n];\n\nlet convert = (value: number) => {\n\treturn Math.round(Math.min(Math.max(value, 0), 1) * 255);\n};\n\ntype LottieShape = {\n c: {\n k: number[]\n },\n ty: 'st' | 'fl',\n it?: LottieShape[]\n};\n\nexport default function applyReplacements(object: {\n layers: Array<{shapes: LottieShape[]}>\n}, toneIndex: number) {\n const replacements = COLORREPLACEMENTS[Math.max(toneIndex - 1, 0)];\n\n const applyTo = (smth: LottieShape) => {\n const k = smth.c.k;\n const color = convert(k[2]) | (convert(k[1]) << 8) | (convert(k[0]) << 16);\n\n const foundReplacement = replacements.find(p => p[0] === color);\n if(foundReplacement) {\n k[0] = ((foundReplacement[1] >> 16) & 255) / 255;\n k[1] = ((foundReplacement[1] >> 8) & 255) / 255;\n k[2] = (foundReplacement[1] & 255) / 255;\n }\n\n //console.log('foundReplacement!', foundReplacement, color.toString(16), k);\n };\n\n const checkSmth = (smth: LottieShape) => {\n switch(smth.ty) {\n case 'st':\n case 'fl':\n applyTo(smth);\n break;\n }\n\n if(smth.hasOwnProperty('it')) {\n iterateIt(smth.it);\n }\n };\n\n const iterateIt = (it: LottieShape['it']) => {\n for(const smth of it) {\n checkSmth(smth);\n }\n };\n\n try {\n for(const layer of object.layers) {\n if(!layer.shapes) continue;\n\n for(const shape of layer.shapes) {\n if(!shape.it) {\n checkSmth(shape);\n continue;\n }\n\n iterateIt(shape.it);\n }\n }\n } catch(err) {\n console.warn('cant apply replacements', err, object, toneIndex);\n }\n}\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 CAN_USE_TRANSFERABLES from \"../../environment/canUseTransferables\";\r\nimport readBlobAsText from \"../../helpers/blob/readBlobAsText\";\r\nimport applyReplacements from \"./applyReplacements\";\r\n\r\nimportScripts('rlottie-wasm.js');\r\n//import Module, { allocate, intArrayFromString } from './rlottie-wasm';\r\n\r\nconst _Module = (self as any).Module as any;\r\n\r\nconst DEFAULT_FPS = 60;\r\n\r\ntype LottieHandlePointer = number;\r\n\r\n// throw new Error('test');\r\n\r\nexport class RLottieItem {\r\n private stringOnWasmHeap: number;\r\n private handle: LottieHandlePointer;\r\n private frameCount: number;\r\n private fps: number;\r\n\r\n private dead: boolean;\r\n //private context: OffscreenCanvasRenderingContext2D;\r\n\r\n constructor(\r\n private reqId: number, \r\n private width: number, \r\n private height: number/* , \r\n private canvas: OffscreenCanvas */\r\n ) {\r\n\r\n }\r\n\r\n public init(json: string, fps: number) {\r\n if(this.dead) {\r\n return;\r\n }\r\n\r\n this.fps = Math.max(1, Math.min(60, fps || DEFAULT_FPS));\r\n\r\n //this.context = canvas.getContext('2d');\r\n /* let frame = 0;\r\n setInterval(() => {\r\n if(frame >= this.frameCount) frame = 0;\r\n let _frame = frame++;\r\n this.render(_frame, null);\r\n }, 1000 / this.fps); */\r\n\r\n try {\r\n this.handle = worker.Api.init();\r\n \r\n // @ts-ignore\r\n this.stringOnWasmHeap = allocate(intArrayFromString(json), 'i8', 0);\r\n \r\n this.frameCount = worker.Api.loadFromData(this.handle, this.stringOnWasmHeap);\r\n \r\n worker.Api.resize(this.handle, this.width, this.height);\r\n\r\n reply('loaded', this.reqId, this.frameCount, this.fps);\r\n } catch(e) {\r\n console.error('init RLottieItem error:', e);\r\n reply('error', this.reqId, e);\r\n }\r\n }\r\n\r\n public render(frameNo: number, clamped?: Uint8ClampedArray) {\r\n if(this.dead || this.handle === undefined) return;\r\n //return;\r\n \r\n if(this.frameCount < frameNo || frameNo < 0) {\r\n return;\r\n }\r\n \r\n try {\r\n worker.Api.render(this.handle, frameNo);\r\n \r\n const bufferPointer = worker.Api.buffer(this.handle);\r\n \r\n const data = _Module.HEAPU8.subarray(bufferPointer, bufferPointer + (this.width * this.height * 4));\r\n \r\n if(!clamped) {\r\n clamped = new Uint8ClampedArray(data);\r\n } else {\r\n clamped.set(data);\r\n }\r\n\r\n //this.context.putImageData(new ImageData(clamped, this.width, this.height), 0, 0);\r\n \r\n reply('frame', this.reqId, frameNo, clamped);\r\n } catch(e) {\r\n console.error('Render error:', e);\r\n this.dead = true;\r\n reply('error', this.reqId, e);\r\n }\r\n }\r\n\r\n public destroy() {\r\n this.dead = true;\r\n\r\n if(this.handle !== undefined) {\r\n worker.Api.destroy(this.handle);\r\n }\r\n }\r\n}\r\n\r\nclass RLottieWorker {\r\n public Api: {\r\n init: () => LottieHandlePointer,\r\n destroy: (handle: LottieHandlePointer) => void,\r\n resize: (handle: LottieHandlePointer, width: number, height: number) => void,\r\n buffer: (handle: LottieHandlePointer) => number,\r\n render: (handle: LottieHandlePointer, frameNo: number) => void,\r\n loadFromData: (handle: LottieHandlePointer, bufferPointer: number) => number\r\n } = {} as any;\r\n\r\n public initApi() {\r\n this.Api = {\r\n init: _Module.cwrap('lottie_init', '', []),\r\n destroy: _Module.cwrap('lottie_destroy', '', ['number']),\r\n resize: _Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\r\n buffer: _Module.cwrap('lottie_buffer', 'number', ['number']),\r\n render: _Module.cwrap('lottie_render', '', ['number', 'number']),\r\n loadFromData: _Module.cwrap('lottie_load_from_data', 'number', ['number', 'number']),\r\n };\r\n }\r\n\r\n public init() {\r\n this.initApi();\r\n reply('ready');\r\n }\r\n}\r\n\r\nconst worker = new RLottieWorker();\r\n\r\n_Module.onRuntimeInitialized = function() {\r\n worker.init();\r\n};\r\n\r\nconst items: {[reqId: string]: RLottieItem} = {};\r\nconst queryableFunctions = {\r\n loadFromData: function(reqId: number, blob: Blob, width: number, height: number, toneIndex: number/* , canvas: OffscreenCanvas */) {\r\n const item = items[reqId] = new RLottieItem(reqId, width, height/* , canvas */);\r\n readBlobAsText(blob).then((json) => {\r\n try {\r\n if(typeof(toneIndex) === 'number' && toneIndex >= 1 && toneIndex <= 5) {\r\n /* params.animationData = copy(params.animationData);\r\n this.applyReplacements(params.animationData, toneIndex); */\r\n\r\n const newAnimationData = JSON.parse(json);\r\n applyReplacements(newAnimationData, toneIndex);\r\n json = JSON.stringify(newAnimationData);\r\n }\r\n\r\n // ! WARNING, с этой проверкой не все стикеры работают, например - ДУРКА\r\n /* if(!/\"tgs\":\\s*?1./.test(jsString)) {\r\n throw new Error('Invalid file');\r\n } */\r\n\r\n /* let perf = performance.now();\r\n let json = JSON.parse(jsString);\r\n console.log('sticker decode:', performance.now() - perf); */\r\n\r\n const match = json.match(/\"fr\":\\s*?(\\d+?),/);\r\n const frameRate = +match?.[1] || DEFAULT_FPS;\r\n\r\n //console.log('Rendering sticker:', reqId, frameRate, 'now rendered:', Object.keys(items).length);\r\n\r\n item.init(json, frameRate);\r\n } catch(err) {\r\n console.error('Invalid file for sticker:', json);\r\n reply('error', reqId, err);\r\n }\r\n });\r\n },\r\n destroy: function(reqId: number) {\r\n const item = items[reqId];\r\n if(!item) {\r\n return;\r\n }\r\n\r\n item.destroy();\r\n delete items[reqId];\r\n },\r\n renderFrame: function(reqId: number, frameNo: number, clamped?: Uint8ClampedArray) {\r\n //console.log('worker renderFrame', reqId, frameNo, clamped);\r\n items[reqId].render(frameNo, clamped);\r\n }\r\n};\r\n\r\nfunction reply(...args: any[]) {\r\n if(arguments.length < 1) { \r\n throw new TypeError('reply - not enough arguments'); \r\n }\r\n\r\n //if(arguments[0] === 'frame') return;\r\n\r\n args = Array.prototype.slice.call(arguments, 1);\r\n\r\n if(!CAN_USE_TRANSFERABLES) {\r\n postMessage({queryMethodListener: arguments[0], queryMethodArguments: args});\r\n } else {\r\n const transfer: ArrayBuffer[] = [];\r\n for(let i = 0; i < args.length; ++i) {\r\n if(args[i] instanceof ArrayBuffer) {\r\n transfer.push(args[i]);\r\n }\r\n \r\n if(args[i].buffer && args[i].buffer instanceof ArrayBuffer) {\r\n transfer.push(args[i].buffer);\r\n }\r\n }\r\n\r\n postMessage({queryMethodListener: arguments[0], queryMethodArguments: args}, transfer);\r\n }\r\n}\r\n\r\nonmessage = function(e) {\r\n // @ts-ignore\r\n queryableFunctions[e.data.queryMethod].apply(queryableFunctions, e.data.queryMethodArguments);\r\n};\r\n"],"sourceRoot":""} |