1 line
15 KiB
Plaintext
1 line
15 KiB
Plaintext
{"version":3,"sources":["webpack:///webpack/bootstrap","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","importScripts","_Module","self","Module","RLottieItem","reqId","jsString","width","height","fps","stringOnWasmHeap","handle","frameCount","dead","this","Math","max","min","init","reply","worker","Api","allocate","intArrayFromString","loadFromData","resize","e","console","error","frameNo","clamped","render","bufferPointer","buffer","data","HEAPU8","subarray","set","Uint8ClampedArray","destroy","cwrap","initApi","onRuntimeInitialized","items","queryableFunctions","match","frameRate","renderFrame","_isSafari","isSafari","scope","userAgent","navigator","safari","test","args","arguments","length","TypeError","Array","slice","postMessage","transfer","ArrayBuffer","push","onmessage","oEvent","queryMethod","apply","queryMethodArguments"],"mappings":"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","file":"rlottie.worker.86bed2789739b353d39d.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","/*\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\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\nexport class RLottieItem {\r\n private stringOnWasmHeap: any = null;\r\n private handle: any = null;\r\n private frameCount = 0;\r\n\r\n private dead = false;\r\n //private context: OffscreenCanvasRenderingContext2D;\r\n\r\n constructor(private reqId: number, jsString: string, private width: number, private height: number, private fps: number/* , private canvas: OffscreenCanvas */) {\r\n this.fps = Math.max(1, Math.min(60, fps || DEFAULT_FPS));\r\n\r\n //this.context = canvas.getContext('2d');\r\n\r\n this.init(jsString);\r\n\r\n reply('loaded', this.reqId, this.frameCount, this.fps);\r\n\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\r\n private init(jsString: string) {\r\n try {\r\n this.handle = worker.Api.init();\r\n \r\n // @ts-ignore\r\n this.stringOnWasmHeap = allocate(intArrayFromString(jsString), '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 } 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) 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 var bufferPointer = worker.Api.buffer(this.handle);\r\n \r\n var 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 worker.Api.destroy(this.handle);\r\n }\r\n}\r\n\r\nclass RLottieWorker {\r\n public Api: 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, jsString: string, width: number, height: number/* , canvas: OffscreenCanvas */) {\r\n try {\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 = jsString.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 items[reqId] = new RLottieItem(reqId, jsString, width, height, frameRate/* , canvas */);\r\n } catch(e) {\r\n console.error('Invalid file for sticker:', jsString);\r\n reply('error', reqId, e);\r\n }\r\n },\r\n destroy: function(reqId: number) {\r\n if(!items.hasOwnProperty(reqId)) {\r\n return;\r\n }\r\n\r\n items[reqId].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 defaultReply(message: any) {\r\n // your default PUBLIC function executed only when main page calls the queryableWorker.postMessage() method directly\r\n // do something\r\n}\r\n\r\n/**\r\n * Returns true when run in WebKit derived browsers.\r\n * This is used as a workaround for a memory leak in Safari caused by using Transferable objects to\r\n * transfer data between WebWorkers and the main thread.\r\n * https://github.com/mapbox/mapbox-gl-js/issues/8771\r\n *\r\n * This should be removed once the underlying Safari issue is fixed.\r\n *\r\n * @private\r\n * @param scope {WindowOrWorkerGlobalScope} Since this function is used both on the main thread and WebWorker context,\r\n * let the calling scope pass in the global scope object.\r\n * @returns {boolean}\r\n */\r\nlet _isSafari: boolean = null;\r\nfunction isSafari(scope: any) {\r\n if(_isSafari === null) {\r\n const userAgent = scope.navigator ? scope.navigator.userAgent : null;\r\n _isSafari = !!scope.safari ||\r\n !!(userAgent && (/\\b(iPad|iPhone|iPod)\\b/.test(userAgent) || (!!userAgent.match('Safari') && !userAgent.match('Chrome'))));\r\n }\r\n return _isSafari;\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 var args = Array.prototype.slice.call(arguments, 1);\r\n if(isSafari(self)) {\r\n postMessage({ 'queryMethodListener': arguments[0], 'queryMethodArguments': args });\r\n } else {\r\n var transfer = [];\r\n for(var 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 //args[i] = args[i].buffer;\r\n }\r\n }\r\n\r\n postMessage({ 'queryMethodListener': arguments[0], 'queryMethodArguments': args }, transfer);\r\n }\r\n\r\n //postMessage({ 'queryMethodListener': arguments[0], 'queryMethodArguments': Array.prototype.slice.call(arguments, 1) });\r\n //console.error(transfer, args);\r\n}\r\n\r\nonmessage = function(oEvent) {\r\n if(oEvent.data instanceof Object && oEvent.data.hasOwnProperty('queryMethod') && oEvent.data.hasOwnProperty('queryMethodArguments')) {\r\n // @ts-ignore\r\n queryableFunctions[oEvent.data.queryMethod].apply(self, oEvent.data.queryMethodArguments);\r\n } else {\r\n defaultReply(oEvent.data);\r\n }\r\n};\r\n"],"sourceRoot":""} |