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.6777ef401e7048467332.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","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimportScripts('rlottie-wasm.js');\n//import Module, { allocate, intArrayFromString } from './rlottie-wasm';\n\nconst _Module = (self as any).Module as any;\n\nconst DEFAULT_FPS = 60;\n\nexport class RLottieItem {\n private stringOnWasmHeap: any = null;\n private handle: any = null;\n private frameCount = 0;\n\n private dead = false;\n //private context: OffscreenCanvasRenderingContext2D;\n\n constructor(private reqId: number, jsString: string, private width: number, private height: number, private fps: number/* , private canvas: OffscreenCanvas */) {\n this.fps = Math.max(1, Math.min(60, fps || DEFAULT_FPS));\n\n //this.context = canvas.getContext('2d');\n\n this.init(jsString);\n\n reply('loaded', this.reqId, this.frameCount, this.fps);\n\n /* let frame = 0;\n setInterval(() => {\n if(frame >= this.frameCount) frame = 0;\n let _frame = frame++;\n this.render(_frame, null);\n }, 1000 / this.fps); */\n }\n\n private init(jsString: string) {\n try {\n this.handle = worker.Api.init();\n \n // @ts-ignore\n this.stringOnWasmHeap = allocate(intArrayFromString(jsString), 'i8', 0);\n \n this.frameCount = worker.Api.loadFromData(this.handle, this.stringOnWasmHeap);\n \n worker.Api.resize(this.handle, this.width, this.height);\n } catch(e) {\n console.error('init RLottieItem error:', e);\n reply('error', this.reqId, e);\n }\n }\n\n public render(frameNo: number, clamped: Uint8ClampedArray) {\n if(this.dead) return;\n //return;\n \n if(this.frameCount < frameNo || frameNo < 0) {\n return;\n }\n \n try {\n worker.Api.render(this.handle, frameNo);\n \n var bufferPointer = worker.Api.buffer(this.handle);\n \n var data = _Module.HEAPU8.subarray(bufferPointer, bufferPointer + (this.width * this.height * 4));\n \n if(!clamped) {\n clamped = new Uint8ClampedArray(data);\n } else {\n clamped.set(data);\n }\n\n //this.context.putImageData(new ImageData(clamped, this.width, this.height), 0, 0);\n \n reply('frame', this.reqId, frameNo, clamped);\n } catch(e) {\n console.error('Render error:', e);\n this.dead = true;\n reply('error', this.reqId, e);\n }\n }\n\n public destroy() {\n this.dead = true;\n\n worker.Api.destroy(this.handle);\n }\n}\n\nclass RLottieWorker {\n public Api: any = {};\n\n public initApi() {\n this.Api = {\n init: _Module.cwrap('lottie_init', '', []),\n destroy: _Module.cwrap('lottie_destroy', '', ['number']),\n resize: _Module.cwrap('lottie_resize', '', ['number', 'number', 'number']),\n buffer: _Module.cwrap('lottie_buffer', 'number', ['number']),\n render: _Module.cwrap('lottie_render', '', ['number', 'number']),\n loadFromData: _Module.cwrap('lottie_load_from_data', 'number', ['number', 'number']),\n };\n }\n\n public init() {\n this.initApi();\n reply('ready');\n }\n}\n\nconst worker = new RLottieWorker();\n\n_Module.onRuntimeInitialized = function() {\n worker.init();\n};\n\nconst items: {[reqId: string]: RLottieItem} = {};\nconst queryableFunctions = {\n loadFromData: function(reqId: number, jsString: string, width: number, height: number/* , canvas: OffscreenCanvas */) {\n try {\n // ! WARNING, с этой проверкой не все стикеры работают, например - ДУРКА\n /* if(!/\"tgs\":\\s*?1./.test(jsString)) {\n throw new Error('Invalid file');\n } */\n\n /* let perf = performance.now();\n let json = JSON.parse(jsString);\n console.log('sticker decode:', performance.now() - perf); */\n\n const match = jsString.match(/\"fr\":\\s*?(\\d+?),/);\n const frameRate = +match?.[1] || DEFAULT_FPS;\n\n //console.log('Rendering sticker:', reqId, frameRate, 'now rendered:', Object.keys(items).length);\n\n items[reqId] = new RLottieItem(reqId, jsString, width, height, frameRate/* , canvas */);\n } catch(e) {\n console.error('Invalid file for sticker:', jsString);\n reply('error', reqId, e);\n }\n },\n destroy: function(reqId: number) {\n if(!items.hasOwnProperty(reqId)) {\n return;\n }\n\n items[reqId].destroy();\n delete items[reqId];\n },\n renderFrame: function(reqId: number, frameNo: number, clamped: Uint8ClampedArray) {\n //console.log('worker renderFrame', reqId, frameNo, clamped);\n items[reqId].render(frameNo, clamped);\n }\n};\n\nfunction defaultReply(message: any) {\n // your default PUBLIC function executed only when main page calls the queryableWorker.postMessage() method directly\n // do something\n}\n\n/**\n * Returns true when run in WebKit derived browsers.\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 * @private\n * @param scope {WindowOrWorkerGlobalScope} Since this function is used both on the main thread and WebWorker context,\n * let the calling scope pass in the global scope object.\n * @returns {boolean}\n */\nlet _isSafari: boolean = null;\nfunction isSafari(scope: any) {\n if(_isSafari === null) {\n const userAgent = scope.navigator ? scope.navigator.userAgent : null;\n _isSafari = !!scope.safari ||\n !!(userAgent && (/\\b(iPad|iPhone|iPod)\\b/.test(userAgent) || (!!userAgent.match('Safari') && !userAgent.match('Chrome'))));\n }\n return _isSafari;\n}\n\nfunction reply(...args: any[]) {\n if(arguments.length < 1) { \n throw new TypeError('reply - not enough arguments'); \n }\n\n //if(arguments[0] === 'frame') return;\n\n var args = Array.prototype.slice.call(arguments, 1);\n if(isSafari(self)) {\n postMessage({ 'queryMethodListener': arguments[0], 'queryMethodArguments': args });\n } else {\n var transfer = [];\n for(var i = 0; i < args.length; i++) {\n if(args[i] instanceof ArrayBuffer) {\n transfer.push(args[i]);\n }\n \n if(args[i].buffer && args[i].buffer instanceof ArrayBuffer) {\n transfer.push(args[i].buffer);\n //args[i] = args[i].buffer;\n }\n }\n\n postMessage({ 'queryMethodListener': arguments[0], 'queryMethodArguments': args }, transfer);\n }\n\n //postMessage({ 'queryMethodListener': arguments[0], 'queryMethodArguments': Array.prototype.slice.call(arguments, 1) });\n //console.error(transfer, args);\n}\n\nonmessage = function(oEvent) {\n if(oEvent.data instanceof Object && oEvent.data.hasOwnProperty('queryMethod') && oEvent.data.hasOwnProperty('queryMethodArguments')) {\n // @ts-ignore\n queryableFunctions[oEvent.data.queryMethod].apply(self, oEvent.data.queryMethodArguments);\n } else {\n defaultReply(oEvent.data);\n }\n};\n"],"sourceRoot":""} |