UNPKG

libpag

Version:
3 lines (2 loc) 14 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).libpag={})}(this,(function(e){"use strict";var t=(e=>(e.PAGInit="PAGInit",e.PAGView_init="PAGView.init",e.PAGView_duration="PAGView.duration",e.PAGView_play="PAGView.play",e.PAGView_pause="PAGView.pause",e.PAGView_stop="PAGView.stop",e.PAGView_setRepeatCount="PAGView.setRepeatCount",e.PAGView_getProgress="PAGView.getProgress",e.PAGView_currentFrame="PAGView.currentFrame",e.PAGView_setProgress="PAGView.setProgress",e.PAGView_scaleMode="PAGView.scaleMode",e.PAGView_setScaleMode="PAGView.setScaleMode",e.PAGView_flush="PAGView.flush",e.PAGView_getDebugData="PAGView.getDebugData",e.PAGView_destroy="PAGView.destroy",e.PAGFile_load="PAGFile.load",e.PAGFile_getTextData="PAGFile.getTextData",e.PAGFile_replaceText="PAGFile.replaceText",e.PAGFile_replaceImage="PAGFile.replaceImage",e.PAGFile_destroy="PAGFile.destroy",e.PAGImage_fromSource="PAGImage.fromSource",e.PAGImage_destroy="PAGImage.destroy",e.VideoReader_constructor="VideoReader.constructor",e.VideoReader_prepare="VideoReader.prepare",e.VideoReader_play="VideoReader.play",e.VideoReader_pause="VideoReader.pause",e.VideoReader_stop="VideoReader.stop",e.VideoReader_getError="VideoReader.getError",e.PAGModule_linkVideoReader="PAGModule.linkVideoReader",e.TextDocument_delete="TextDocument.delete",e))(t||{});let i=0;const r=(e,t,r,s=[])=>new Promise((a=>{const o=(e=>`${e}_${i++}`)(t.name),n=t=>{t.data.name===o&&(e.removeEventListener("message",n),a(r(...t.data.args)))};e.addEventListener("message",n),e.postMessage({name:o,args:t.args},s)}));let s={};const a=(e,t,i,r=!1)=>{var a;t in s||(s[t]=[]),null==(a=s[t])||a.push({node:e,handler:i,capture:r}),e.addEventListener(t,i,r)},o=(e,t,i)=>{var r;t in s&&(null==(r=s[t])||r.filter((({node:t,handler:r})=>t===e&&r===i)).forEach((({node:e,handler:i,capture:r})=>e.removeEventListener(t,i,r))))},n=(e,t)=>{var i,r;t in s&&(null==(i=s[t])||i.filter((({node:t})=>t===e)).forEach((({node:e,handler:i,capture:r})=>e.removeEventListener(t,i,r))),s[t]=null==(r=s[t])?void 0:r.filter((({node:t})=>t!==e)))},l=(null==navigator?void 0:navigator.userAgent)||"",h=/android|adr/i.test(l),d=/(mobile)/i.test(l)&&h;!/(mobile)/i.test(l)&&!d&&/Mac OS X/i.test(l);const c=/(iphone|ipad|ipod)/i.test(l),u=/MicroMessenger/i.test(l),p=/^((?!chrome|android).)*safari/i.test(l)||c,g="function"==typeof globalThis.importScripts;let m;class w{constructor(e){this.bitmap=e}setBitmap(e){this.bitmap&&this.bitmap.close(),this.bitmap=e}}class y{constructor(e){this.bitmap=null,this.isSought=!1,this.isPlaying=!1,this.bitmapImage=new w(null),this.proxyId=e}prepare(e,i){return new Promise((s=>{r(self,{name:t.VideoReader_prepare,args:[this.proxyId,e,i]},(e=>{this.bitmapImage.setBitmap(e),s()}))}))}getVideo(){return this.bitmapImage}onDestroy(){self.postMessage({name:"VideoReader.onDestroy",args:[this.proxyId]})}play(){return new Promise((e=>{r(self,{name:t.VideoReader_play,args:[this.proxyId]},(()=>{e()}))}))}pause(){r(self,{name:t.VideoReader_pause,args:[this.proxyId]},(()=>{}))}stop(){r(self,{name:t.VideoReader_stop,args:[this.proxyId]},(()=>{}))}getError(){return new Promise((e=>{r(self,{name:t.VideoReader_getError,args:[this.proxyId]},(t=>{e(t)}))}))}}const P=(e,t)=>void 0!==t&&e instanceof t,v=e=>new Promise((t=>{const i=()=>{o(e,"canplay",i),clearTimeout(r),t(!0)};a(e,"canplay",i);const r=setTimeout((()=>{o(e,"canplay",i),t(!1)}),1e3)}));class f{constructor(e,t,i,r,s,a=!1){if(this.isSought=!1,this.isPlaying=!1,this.bitmap=null,this.videoEl=null,this.frameRate=0,this.canplay=!1,this.staticTimeRanges=null,this.disablePlaybackRate=!1,this.error=null,this.player=null,this.width=0,this.height=0,this.bitmapCanvas=null,this.bitmapCtx=null,P(e,globalThis.HTMLVideoElement))this.videoEl=e,this.canplay=!0;else{this.videoEl=document.createElement("video"),this.videoEl.style.display="none",this.videoEl.muted=!0,this.videoEl.playsInline=!0,this.videoEl.preload="auto",this.videoEl.width=t,this.videoEl.height=i,v(this.videoEl).then((()=>{this.canplay=!0}));const r=new Blob([e],{type:"video/mp4"});this.videoEl.src=URL.createObjectURL(r),c&&this.videoEl.load()}this.frameRate=r,this.width=t,this.height=i,this.staticTimeRanges=new b(s),(3840<t||3840<i)&&(this.disablePlaybackRate=!0),a||this.linkPlayer(m.currentPlayer)}static async create(e,i,s,a,o){var n;if(g){const l=await new Promise((n=>{const l=e,h=l.buffer.slice(l.byteOffset,l.byteOffset+l.byteLength);r(self,{name:t.VideoReader_constructor,args:[h,i,s,a,o,!0]},(e=>{n(e)}),[h])})),h=new y(l);return null==(n=m.currentPlayer)||n.linkVideoReader(h),h}return new f(e,i,s,a,o)}async prepare(e,t){var i;this.setError(null),this.isSought=!1;const{currentTime:r}=this.videoEl,s=e/this.frameRate;if(0===r&&0===s)if(this.canplay||p){try{await this.play()}catch(e){this.setError(e)}await new Promise((e=>{requestAnimationFrame((()=>{this.pause(),e()}))}))}else await v(this.videoEl);else if(Math.round(s*this.frameRate)===Math.round(r*this.frameRate));else{if(null==(i=this.staticTimeRanges)?void 0:i.contains(e))return void await this.seek(s,!1);if(!(Math.abs(r-s)<1/this.frameRate*3))return this.isSought=!0,void await this.seek(s)}const a=Math.min(Math.max(t,.125),4);if(this.disablePlaybackRate||this.videoEl.playbackRate===a||(this.videoEl.playbackRate=a),this.isPlaying&&this.videoEl.paused)try{await this.play()}catch(e){this.setError(e)}}getVideo(){return this.videoEl}async generateBitmap(){var e,t;return this.bitmapCanvas||(this.bitmapCanvas=new OffscreenCanvas(this.width,this.height),this.bitmapCanvas.width=this.width,this.bitmapCanvas.height=this.height,this.bitmapCtx=this.bitmapCanvas.getContext("2d")),null==(e=this.bitmapCtx)||e.fillRect(0,0,this.width,this.height),null==(t=this.bitmapCtx)||t.drawImage(this.videoEl,0,0,this.width,this.height),this.bitmap=await createImageBitmap(this.bitmapCanvas),this.bitmap}async play(){var e;if(this.videoEl.paused){if(u&&window.WeixinJSBridge&&await new Promise((e=>{window.WeixinJSBridge.invoke("getNetworkType",{},(()=>{e()}),(()=>{e()}))})),"visible"!==document.visibilityState){const e=()=>{"visible"===document.visibilityState&&(this.videoEl&&this.videoEl.play(),window.removeEventListener("visibilitychange",e))};throw window.addEventListener("visibilitychange",e),new Error("The play() request was interrupted because the document was hidden!")}await(null==(e=this.videoEl)?void 0:e.play())}}pause(){var e;this.isPlaying=!1,this.videoEl.paused||null==(e=this.videoEl)||e.pause()}stop(){var e;this.isPlaying=!1,this.videoEl.paused||null==(e=this.videoEl)||e.pause(),this.videoEl.currentTime=0}getError(){return this.error}onDestroy(){this.player&&this.player.unlinkVideoReader(this),n(this.videoEl,"playing"),n(this.videoEl,"timeupdate"),this.videoEl=null,this.bitmapCanvas=null,this.bitmapCtx=null}seek(e,t=!0){return new Promise((i=>{let r=!1,s=null;const n=async()=>{var e;if(t&&this.videoEl.paused)try{await this.play()}catch(e){this.setError(e)}else t||this.videoEl.paused||null==(e=this.videoEl)||e.pause()},l=async()=>{if(!this.videoEl)return this.setError(new Error("Video element doesn't exist!")),void i();o(this.videoEl,"seeked",l),await n(),r=!0,clearTimeout(s),s=null,i()};if(!this.videoEl)return this.setError(new Error("Video element doesn't exist!")),void i();a(this.videoEl,"seeked",l),this.videoEl.currentTime=e,s=setTimeout((()=>{if(!r){if(!this.videoEl)return this.setError(new Error("Video element doesn't exist!")),void i();o(this.videoEl,"seeked",l),n(),i()}}),1e3/this.frameRate*12)}))}setError(e){this.error=e}linkPlayer(e){this.player=e,e&&e.linkVideoReader(this)}}class b{constructor(e){this.timeRanges=e}contains(e){if(0===this.timeRanges.length)return!1;for(let t of this.timeRanges)if(t.start<=e&&e<t.end)return!0;return!1}}const A=e=>new Promise((t=>{const i=new FileReader;i.onload=()=>{t(i.result)},i.onerror=()=>{console.error(i.error.message)},i.readAsArrayBuffer(e)}));function V(e){let t=Object.getOwnPropertyNames(e.prototype).filter((t=>"constructor"!==t&&"function"==typeof e.prototype[t]));const i=(t,i)=>{const r=t[i];t[i]=function(...t){if(!this.isDestroyed)return r.call(this,...t);console.error(`Don't call ${i} of the ${e.name} that is destroyed.`)}};t.forEach((t=>i(e.prototype,t)))}var k=Object.defineProperty,G=Object.getOwnPropertyDescriptor;e.WorkerPAGFile=class{constructor(e,t){this.isDestroyed=!1,this.worker=e,this.key=t}static async load(i,s){const a=await(e=>P(e,globalThis.File)?A(e):P(e,globalThis.Blob)?A(new File([e],"")):P(e,globalThis.ArrayBuffer)?Promise.resolve(e):Promise.resolve(null))(s);if(!a)throw new Error("Initialize PAGFile data type error, please put check data type must to be File | Blob | ArrayBuffer!");return await r(i,{name:t.PAGFile_load,args:[s]},(t=>new e.WorkerPAGFile(i,t)))}getTextData(e){return r(this.worker,{name:t.PAGFile_getTextData,args:[this.key,e]},(e=>(e.delete=()=>r(this.worker,{name:t.TextDocument_delete,args:[e.key]},(()=>{})),e)))}replaceText(e,i){const s={};for(const e in i)"delete"!==e&&(s[e]=i[e]);return r(this.worker,{name:t.PAGFile_replaceText,args:[this.key,e,s]},(()=>{}))}replaceImage(e,i){return r(this.worker,{name:t.PAGFile_replaceImage,args:[this.key,e,i.key]},(()=>{}))}destroy(){return r(this.worker,{name:t.PAGFile_destroy,args:[this.key]},(()=>{this.isDestroyed=!0}))}},e.WorkerPAGFile=((e,t,i,r)=>{for(var s,a=r>1?void 0:r?G(t,i):t,o=e.length-1;o>=0;o--)(s=e[o])&&(a=(r?s(t,i,a):s(a))||a);return r&&a&&k(t,i,a),a})([V],e.WorkerPAGFile),new Array;var E=Object.defineProperty,_=Object.getOwnPropertyDescriptor,R=Object.getOwnPropertySymbols,x=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable,I=(e,t,i)=>t in e?E(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,F=(e,t)=>{for(var i in t||(t={}))x.call(t,i)&&I(e,i,t[i]);if(R)for(var i of R(t))T.call(t,i)&&I(e,i,t[i]);return e};e.WorkerPAGView=class{constructor(e,t){this.isDestroyed=!1,this.worker=e,this.key=t}static init(i,s,a){F(F({},{useScale:!0,useCanvas2D:!1,firstFrame:!0}),a).useScale&&D(s);const o=s.transferControlToOffscreen();return r(i.worker,{name:t.PAGView_init,args:[i.key,o,a]},(t=>new e.WorkerPAGView(i.worker,t)),[o])}duration(){return r(this.worker,{name:t.PAGView_duration,args:[this.key]},(e=>e))}play(){return r(this.worker,{name:t.PAGView_play,args:[this.key]},(()=>{}))}pause(){return r(this.worker,{name:t.PAGView_pause,args:[this.key]},(()=>{}))}stop(){return r(this.worker,{name:t.PAGView_stop,args:[this.key]},(()=>{}))}setRepeatCount(e){return r(this.worker,{name:t.PAGView_setRepeatCount,args:[this.key,e]},(()=>{}))}getProgress(){return r(this.worker,{name:t.PAGView_getProgress,args:[this.key]},(e=>e))}currentFrame(){return r(this.worker,{name:t.PAGView_currentFrame,args:[this.key]},(e=>e))}setProgress(e){return r(this.worker,{name:t.PAGView_setProgress,args:[this.key,e]},(()=>{}))}scaleMode(){return r(this.worker,{name:t.PAGView_scaleMode,args:[this.key]},(e=>e))}setScaleMode(e){return r(this.worker,{name:t.PAGView_setScaleMode,args:[this.key,e]},(()=>{}))}flush(){return r(this.worker,{name:t.PAGView_flush,args:[this.key]},(e=>e))}getDebugData(){return r(this.worker,{name:t.PAGView_getDebugData,args:[this.key]},(e=>e))}destroy(){r(this.worker,{name:t.PAGView_destroy,args:[this.key]},(()=>{this.isDestroyed=!0}))}},e.WorkerPAGView=((e,t,i,r)=>{for(var s,a=r>1?void 0:r?_(t,i):t,o=e.length-1;o>=0;o--)(s=e[o])&&(a=(r?s(t,i,a):s(a))||a);return r&&a&&E(t,i,a),a})([V],e.WorkerPAGView);const D=e=>{const t=(e=>{const t=globalThis.getComputedStyle(e,null),i={width:Number(t.width.replace("px","")),height:Number(t.height.replace("px",""))};if(i.width>0&&i.height>0)return i;{const t={width:Number(e.style.width.replace("px","")),height:Number(e.style.height.replace("px",""))};return t.width>0&&t.height>0?t:{width:e.width,height:e.height}}})(e);e.style.width=`${t.width}px`,e.style.height=`${t.height}px`,e.width=t.width*globalThis.devicePixelRatio,e.height=t.height*globalThis.devicePixelRatio};var M=Object.defineProperty,O=Object.getOwnPropertyDescriptor;e.WorkerPAGImage=class{constructor(e,t){this.isDestroyed=!1,this.worker=e,this.key=t}static async fromSource(i,s){const a=P(s,globalThis.HTMLVideoElement)?s.videoWidth:s.width,o=P(s,globalThis.HTMLVideoElement)?s.videoHeight:s.height,n=new OffscreenCanvas(a,o);n.width=s.width,n.height=s.height;n.getContext("2d").drawImage(s,0,0,s.width,s.height);const l=await createImageBitmap(n);return r(i,{name:t.PAGImage_fromSource,args:[l]},(t=>new e.WorkerPAGImage(i,t)),[l])}destroy(){return r(this.worker,{name:t.PAGImage_destroy,args:[this.key]},(()=>{this.isDestroyed=!0}))}},e.WorkerPAGImage=((e,t,i,r)=>{for(var s,a=r>1?void 0:r?O(t,i):t,o=e.length-1;o>=0;o--)(s=e[o])&&(a=(r?s(t,i,a):s(a))||a);return r&&a&&M(t,i,a),a})([V],e.WorkerPAGImage);const C=[],S=e=>{e.addEventListener("message",(i=>{if(i.data.name.includes(t.VideoReader_constructor)){const t=new f(...i.data.args);return C.push(t),void e.postMessage({name:i.data.name,args:[C.length-1]})}if(i.data.name.includes(t.VideoReader_prepare)){const[t,r,s]=i.data.args;C[t].prepare(r,s).then((()=>{C[t].generateBitmap().then((t=>{e.postMessage({name:i.data.name,args:[t]},[t])}))}))}i.data.name.includes(t.VideoReader_play)&&C[i.data.args[0]].play().then((t=>{e.postMessage({name:i.data.name,args:[t]})})),i.data.name.includes(t.VideoReader_pause)&&C[i.data.args[0]].pause(),i.data.name.includes(t.VideoReader_stop)&&C[i.data.args[0]].stop(),i.data.name.includes(t.VideoReader_getError)&&e.postMessage({name:i.data.name,args:[C[i.data.args[0]].getError()]})}))};e.MAX_ACTIVE_WORKER_CONTEXTS=4,e.createPAGWorker=(e={})=>{let i=e.locateFile?e.locateFile("libpag.js"):"libpag.js";const s={};e.locateFile&&(s.fileUrl=e.locateFile("libpag.wasm"));const a=new Worker(i,e.workerOptions);return r(a,{name:t.PAGInit,args:[s]},(()=>(S(a),a)))},Object.defineProperty(e,"__esModule",{value:!0})})); //# sourceMappingURL=libpag.worker.min.js.map