@gkd-kit/inspect 0.0.1717144446578 → 0.0.1718013773953

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-CKo-hCrz.js +10 -0
  2. package/dist/assets/{ActionCard.vue_vue_type_script_setup_true_lang-C93_MZRO.js.map → ActionCard.vue_vue_type_script_setup_true_lang-CKo-hCrz.js.map} +1 -1
  3. package/dist/assets/DevicePage-BkCVC2MY.js +49 -0
  4. package/dist/assets/DevicePage-BkCVC2MY.js.map +1 -0
  5. package/dist/assets/HomePage-Bph5qU7K.js +119 -0
  6. package/dist/assets/{HomePage-DZNMXZxh.js.map → HomePage-Bph5qU7K.js.map} +1 -1
  7. package/dist/assets/ImportPage-CvDfw_B2.js +2 -0
  8. package/dist/assets/ImportPage-CvDfw_B2.js.map +1 -0
  9. package/dist/assets/{PreviewSharePage-D4n48DEp.js → PreviewSharePage-BvJTj1mI.js} +2 -2
  10. package/dist/assets/{PreviewSharePage-D4n48DEp.js.map → PreviewSharePage-BvJTj1mI.js.map} +1 -1
  11. package/dist/assets/SnapshotPage-CZdBrMWi.js +272 -0
  12. package/dist/assets/SnapshotPage-CZdBrMWi.js.map +1 -0
  13. package/dist/assets/{TrackGraph-BXeJyqXu.js → TrackGraph-CjikwCMl.js} +2 -2
  14. package/dist/assets/{TrackGraph-BXeJyqXu.js.map → TrackGraph-CjikwCMl.js.map} +1 -1
  15. package/dist/assets/{_404Page-Bg6kYI9T.js → _404Page-6XVBDIMU.js} +2 -2
  16. package/dist/assets/{_404Page-Bg6kYI9T.js.map → _404Page-6XVBDIMU.js.map} +1 -1
  17. package/dist/assets/{node-RaIPs-rl.js → dayjs.min-Dgm3IjyQ.js} +6 -6
  18. package/dist/assets/dayjs.min-Dgm3IjyQ.js.map +1 -0
  19. package/dist/assets/{fetch-D-io-zYm.js → fetch-BwM_TJ7E.js} +21 -21
  20. package/dist/assets/fetch-BwM_TJ7E.js.map +1 -0
  21. package/dist/assets/import-CZo9AsHH.js +2 -0
  22. package/dist/assets/import-CZo9AsHH.js.map +1 -0
  23. package/dist/assets/{index-Cn1sD9E1.js → index-BI6CNi-1.js} +2 -2
  24. package/dist/assets/{index-Cn1sD9E1.js.map → index-BI6CNi-1.js.map} +1 -1
  25. package/dist/assets/{index-BV3N9of-.js → index-BmVtOw-O.js} +2 -2
  26. package/dist/assets/{index-BV3N9of-.js.map → index-BmVtOw-O.js.map} +1 -1
  27. package/dist/assets/{index-7Qv9BJ7h.js → index-CkJL6Zdi.js} +41 -41
  28. package/dist/assets/index-CkJL6Zdi.js.map +1 -0
  29. package/dist/assets/{jszip.min-CFVT6u4h.js → jszip.min-CzKLW2_Q.js} +4 -4
  30. package/dist/assets/{jszip.min-CFVT6u4h.js.map → jszip.min-CzKLW2_Q.js.map} +1 -1
  31. package/dist/assets/{selector-Ppy4-9PD.js → selector-smLnJZgo.js} +3 -3
  32. package/dist/assets/{selector-Ppy4-9PD.js.map → selector-smLnJZgo.js.map} +1 -1
  33. package/dist/assets/{table-BkOdJIyN.js → table-CFVZ0QRH.js} +21 -21
  34. package/dist/assets/{table-BkOdJIyN.js.map → table-CFVZ0QRH.js.map} +1 -1
  35. package/dist/index.html +3 -3
  36. package/package.json +1 -1
  37. package/dist/assets/ActionCard.vue_vue_type_script_setup_true_lang-C93_MZRO.js +0 -10
  38. package/dist/assets/DevicePage-BiDLaVdf.js +0 -49
  39. package/dist/assets/DevicePage-BiDLaVdf.js.map +0 -1
  40. package/dist/assets/HomePage-DZNMXZxh.js +0 -119
  41. package/dist/assets/ImportPage-mT3DldLy.js +0 -2
  42. package/dist/assets/ImportPage-mT3DldLy.js.map +0 -1
  43. package/dist/assets/SnapshotPage-BsRaiktw.js +0 -272
  44. package/dist/assets/SnapshotPage-BsRaiktw.js.map +0 -1
  45. package/dist/assets/fetch-D-io-zYm.js.map +0 -1
  46. package/dist/assets/import-DrT3vy2r.js +0 -2
  47. package/dist/assets/import-DrT3vy2r.js.map +0 -1
  48. package/dist/assets/index-7Qv9BJ7h.js.map +0 -1
  49. package/dist/assets/node-RaIPs-rl.js.map +0 -1
@@ -0,0 +1,10 @@
1
+ import{d as $e,m as Z,e as X,o as re,a as le,b as ot}from"./fetch-BwM_TJ7E.js";import{D as w,$ as oe,M as U,h as Je,_ as st,aJ as z,aK as lt,aD as G,aA as V,aL as ct,aM as Se,aH as Xe,H as ut,W as I,m as ft,X as Le,I as F,C as De,E as g,F as m,L as B,P as N,a0 as C,aE as ht,K as E}from"./index-CkJL6Zdi.js";import{N as pt,a as W}from"./index-BmVtOw-O.js";import{J as ce}from"./jszip.min-CzKLW2_Q.js";import{p as Ze}from"./index-RwQljgyW.js";import{u as $,b as Oe,a as je}from"./dayjs.min-Dgm3IjyQ.js";const Pe=({title:t="批量分享链接",content:e=""})=>{$e.success({title:t,style:{width:"800px"},content(){return w(pt,{type:"textarea",autosize:{minRows:8,maxRows:16},inputProps:{style:"white-space: nowrap;",class:"gkd_code"},value:e},null)},positiveText:"复制",onPositiveClick(){return navigator.clipboard.writeText(e).then(()=>{Z.success("复制成功")}).catch(()=>{Z.success("复制失败")}),!1}})},dt=Je(()=>()=>w(st,{checked:oe.ignoreUploadWarn,onUpdateChecked:t=>{oe.ignoreUploadWarn=t},focusable:!1},{default:()=>[U("不再提醒")]})),Me=async()=>{if(!oe.ignoreUploadWarn)return new Promise((t,e)=>{$e.warning({title:"生成分享链接须知",content(){return w("div",null,[w("div",null,[U("所有快照上传分享链接均为公开链接,任何人均可访问。")]),w("div",null,[U("请确保快照不包含隐私信息,请勿分享任何敏感信息。")]),w(dt,{class:"mt-10px"},null)])},closable:!1,closeOnEsc:!1,maskClosable:!1,positiveText:"继续上传",negativeText:"取消分享",onPositiveClick:t,onNegativeClick:e})})};var Ge={exports:{}};(function(t,e){(function(a,r){r()})(z,function(){function a(n,o){return typeof o>"u"?o={autoBom:!1}:typeof o!="object"&&(console.warn("Deprecated: Expected third argument to be a object"),o={autoBom:!o}),o.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(n.type)?new Blob(["\uFEFF",n],{type:n.type}):n}function r(n,o,p){var f=new XMLHttpRequest;f.open("GET",n),f.responseType="blob",f.onload=function(){c(f.response,o,p)},f.onerror=function(){console.error("could not download file")},f.send()}function i(n){var o=new XMLHttpRequest;o.open("HEAD",n,!1);try{o.send()}catch{}return 200<=o.status&&299>=o.status}function s(n){try{n.dispatchEvent(new MouseEvent("click"))}catch{var o=document.createEvent("MouseEvents");o.initMouseEvent("click",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),n.dispatchEvent(o)}}var u=typeof window=="object"&&window.window===window?window:typeof self=="object"&&self.self===self?self:typeof z=="object"&&z.global===z?z:void 0,h=u.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),c=u.saveAs||(typeof window!="object"||window!==u?function(){}:"download"in HTMLAnchorElement.prototype&&!h?function(n,o,p){var f=u.URL||u.webkitURL,d=document.createElement("a");o=o||n.name||"download",d.download=o,d.rel="noopener",typeof n=="string"?(d.href=n,d.origin===location.origin?s(d):i(d.href)?r(n,o,p):s(d,d.target="_blank")):(d.href=f.createObjectURL(n),setTimeout(function(){f.revokeObjectURL(d.href)},4e4),setTimeout(function(){s(d)},0))}:"msSaveOrOpenBlob"in navigator?function(n,o,p){if(o=o||n.name||"download",typeof n!="string")navigator.msSaveOrOpenBlob(a(n,p),o);else if(i(n))r(n,o,p);else{var f=document.createElement("a");f.href=n,f.target="_blank",setTimeout(function(){s(f)})}}:function(n,o,p,f){if(f=f||open("","_blank"),f&&(f.document.title=f.document.body.innerText="downloading..."),typeof n=="string")return r(n,o,p);var d=n.type==="application/octet-stream",l=/constructor/i.test(u.HTMLElement)||u.safari,y=/CriOS\/[\d]+/.test(navigator.userAgent);if((y||d&&l||h)&&typeof FileReader<"u"){var v=new FileReader;v.onloadend=function(){var k=v.result;k=y?k:k.replace(/^data:[^;]*;/,"data:attachment/file;"),f?f.location.href=k:location=k,f=null},v.readAsDataURL(n)}else{var A=u.URL||u.webkitURL,R=A.createObjectURL(n);f?f.location=R:location.href=R,f=null,setTimeout(function(){A.revokeObjectURL(R)},4e4)}});u.saveAs=c.saveAs=c,t.exports=c})})(Ge);var q=Ge.exports;const Ve="https://github.com/gkd-kit/inspect/issues/new",mt="661952005",ne={origin:"https://github.com",referer:Ve},vt=async()=>{var i;const t='[data-upload-policy-url="/upload/policies/assets"] input.js-data-upload-policy-url-csrf',e=await X(Ve);return(i=new DOMParser().parseFromString(await e.text(),"text/html").querySelector(t))==null?void 0:i.getAttribute("value")},Ke=async(t,e,a)=>{const r=await vt();if(!r)throw lt.githubErrorDlgVisible=!0,new Error("failed get csrfToken");const i=await X("https://github.com/upload/policies/assets",{method:"POST",body:re({authenticity_token:r,content_type:a,name:e,size:t.byteLength,repository_id:mt}),headers:ne}).then(h=>{if(!h.ok)throw new Error("failed upload policies assets");return h.json()});if(!(await X(i.upload_url,{method:"POST",body:re(i.form,{file:new File([t],e,{type:a})}),headers:ne})).ok)throw new Error("upload s3 failed");if((await X(new URL(i.asset_upload_url,"https://github.com/").href,{method:"PUT",body:re({authenticity_token:i.asset_upload_authenticity_token}),headers:{...ne,Accept:"application/json"}})).status!=200)throw new Error("failed check authenticity upload");return i.asset};/*!
2
+ * Compressor.js v1.2.1
3
+ * https://fengyuanchen.github.io/compressorjs
4
+ *
5
+ * Copyright 2018-present Chen Fengyuan
6
+ * Released under the MIT license
7
+ *
8
+ * Date: 2023-02-28T14:09:41.732Z
9
+ */function _e(t,e){var a=Object.keys(t);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(t);e&&(r=r.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),a.push.apply(a,r)}return a}function J(t){for(var e=1;e<arguments.length;e++){var a=arguments[e]!=null?arguments[e]:{};e%2?_e(Object(a),!0).forEach(function(r){yt(t,r,a[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(a)):_e(Object(a)).forEach(function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(a,r))})}return t}function gt(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function ze(t,e){for(var a=0;a<e.length;a++){var r=e[a];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(t,Ye(r.key),r)}}function wt(t,e,a){return e&&ze(t.prototype,e),a&&ze(t,a),Object.defineProperty(t,"prototype",{writable:!1}),t}function yt(t,e,a){return e=Ye(e),e in t?Object.defineProperty(t,e,{value:a,enumerable:!0,configurable:!0,writable:!0}):t[e]=a,t}function K(){return K=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var a=arguments[e];for(var r in a)Object.prototype.hasOwnProperty.call(a,r)&&(t[r]=a[r])}return t},K.apply(this,arguments)}function bt(t,e){if(typeof t!="object"||t===null)return t;var a=t[Symbol.toPrimitive];if(a!==void 0){var r=a.call(t,e||"default");if(typeof r!="object")return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function Ye(t){var e=bt(t,"string");return typeof e=="symbol"?e:String(e)}var qe={exports:{}};(function(t){typeof window>"u"||function(e){var a=e.HTMLCanvasElement&&e.HTMLCanvasElement.prototype,r=e.Blob&&function(){try{return!!new Blob}catch{return!1}}(),i=r&&e.Uint8Array&&function(){try{return new Blob([new Uint8Array(100)]).size===100}catch{return!1}}(),s=e.BlobBuilder||e.WebKitBlobBuilder||e.MozBlobBuilder||e.MSBlobBuilder,u=/^data:((.*?)(;charset=.*?)?)(;base64)?,/,h=(r||s)&&e.atob&&e.ArrayBuffer&&e.Uint8Array&&function(c){var n,o,p,f,d,l,y,v,A;if(n=c.match(u),!n)throw new Error("invalid data URI");for(o=n[2]?n[1]:"text/plain"+(n[3]||";charset=US-ASCII"),p=!!n[4],f=c.slice(n[0].length),p?d=atob(f):d=decodeURIComponent(f),l=new ArrayBuffer(d.length),y=new Uint8Array(l),v=0;v<d.length;v+=1)y[v]=d.charCodeAt(v);return r?new Blob([i?y:l],{type:o}):(A=new s,A.append(l),A.getBlob(o))};e.HTMLCanvasElement&&!a.toBlob&&(a.mozGetAsFile?a.toBlob=function(c,n,o){var p=this;setTimeout(function(){o&&a.toDataURL&&h?c(h(p.toDataURL(n,o))):c(p.mozGetAsFile("blob",n))})}:a.toDataURL&&h&&(a.msToBlob?a.toBlob=function(c,n,o){var p=this;setTimeout(function(){(n&&n!=="image/png"||o)&&a.toDataURL&&h?c(h(p.toDataURL(n,o))):c(p.msToBlob(n))})}:a.toBlob=function(c,n,o){var p=this;setTimeout(function(){c(h(p.toDataURL(n,o)))})})),t.exports?t.exports=h:e.dataURLtoBlob=h}(window)})(qe);var Ie=qe.exports,xt=function(e){return typeof Blob>"u"?!1:e instanceof Blob||Object.prototype.toString.call(e)==="[object Blob]"},He={strict:!0,checkOrientation:!0,retainExif:!1,maxWidth:1/0,maxHeight:1/0,minWidth:0,minHeight:0,width:void 0,height:void 0,resize:"none",quality:.8,mimeType:"auto",convertTypes:["image/png"],convertSize:5e6,beforeDraw:null,drew:null,success:null,error:null},Et=typeof window<"u"&&typeof window.document<"u",T=Et?window:{},Y=function(e){return e>0&&e<1/0},kt=Array.prototype.slice;function ue(t){return Array.from?Array.from(t):kt.call(t)}var Bt=/^image\/.+$/;function se(t){return Bt.test(t)}function At(t){var e=se(t)?t.substr(6):"";return e==="jpeg"&&(e="jpg"),".".concat(e)}var Qe=String.fromCharCode;function Ft(t,e,a){var r="",i;for(a+=e,i=e;i<a;i+=1)r+=Qe(t.getUint8(i));return r}var Ut=T.btoa;function Ne(t,e){for(var a=[],r=8192,i=new Uint8Array(t);i.length>0;)a.push(Qe.apply(null,ue(i.subarray(0,r)))),i=i.subarray(r);return"data:".concat(e,";base64,").concat(Ut(a.join("")))}function Tt(t){var e=new DataView(t),a;try{var r,i,s;if(e.getUint8(0)===255&&e.getUint8(1)===216)for(var u=e.byteLength,h=2;h+1<u;){if(e.getUint8(h)===255&&e.getUint8(h+1)===225){i=h;break}h+=1}if(i){var c=i+4,n=i+10;if(Ft(e,c,4)==="Exif"){var o=e.getUint16(n);if(r=o===18761,(r||o===19789)&&e.getUint16(n+2,r)===42){var p=e.getUint32(n+4,r);p>=8&&(s=n+p)}}}if(s){var f=e.getUint16(s,r),d,l;for(l=0;l<f;l+=1)if(d=s+l*12+2,e.getUint16(d,r)===274){d+=8,a=e.getUint16(d,r),e.setUint16(d,1,r);break}}}catch{a=1}return a}function Rt(t){var e=0,a=1,r=1;switch(t){case 2:a=-1;break;case 3:e=-180;break;case 4:r=-1;break;case 5:e=90,r=-1;break;case 6:e=90;break;case 7:e=90,a=-1;break;case 8:e=-90;break}return{rotate:e,scaleX:a,scaleY:r}}var Ct=/\.\d*(?:0|9){12}\d*$/;function We(t){var e=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1e11;return Ct.test(t)?Math.round(t*e)/e:t}function H(t){var e=t.aspectRatio,a=t.height,r=t.width,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"none",s=Y(r),u=Y(a);if(s&&u){var h=a*e;(i==="contain"||i==="none")&&h>r||i==="cover"&&h<r?a=r/e:r=a*e}else s?a=r/e:u&&(r=a*e);return{width:r,height:a}}function St(t){for(var e=ue(new Uint8Array(t)),a=e.length,r=[],i=0;i+3<a;){var s=e[i],u=e[i+1];if(s===255&&u===218)break;if(s===255&&u===216)i+=2;else{var h=e[i+2]*256+e[i+3],c=i+h+2,n=e.slice(i,c);r.push(n),i=c}}return r.reduce(function(o,p){return p[0]===255&&p[1]===225?o.concat(p):o},[])}function Lt(t,e){var a=ue(new Uint8Array(t));if(a[2]!==255||a[3]!==224)return t;var r=a[4]*256+a[5],i=[255,216].concat(e,a.slice(4+r));return new Uint8Array(i)}var Dt=T.ArrayBuffer,ie=T.FileReader,S=T.URL||T.webkitURL,Ot=/\.\w+$/,jt=T.Compressor,Pt=function(){function t(e,a){gt(this,t),this.file=e,this.exif=[],this.image=new Image,this.options=J(J({},He),a),this.aborted=!1,this.result=null,this.init()}return wt(t,[{key:"init",value:function(){var a=this,r=this.file,i=this.options;if(!xt(r)){this.fail(new Error("The first argument must be a File or Blob object."));return}var s=r.type;if(!se(s)){this.fail(new Error("The first argument must be an image File or Blob object."));return}if(!S||!ie){this.fail(new Error("The current browser does not support image compression."));return}Dt||(i.checkOrientation=!1,i.retainExif=!1);var u=s==="image/jpeg",h=u&&i.checkOrientation,c=u&&i.retainExif;if(S&&!h&&!c)this.load({url:S.createObjectURL(r)});else{var n=new ie;this.reader=n,n.onload=function(o){var p=o.target,f=p.result,d={},l=1;h&&(l=Tt(f),l>1&&K(d,Rt(l))),c&&(a.exif=St(f)),h||c?!S||l>1?d.url=Ne(f,s):d.url=S.createObjectURL(r):d.url=f,a.load(d)},n.onabort=function(){a.fail(new Error("Aborted to read the image with FileReader."))},n.onerror=function(){a.fail(new Error("Failed to read the image with FileReader."))},n.onloadend=function(){a.reader=null},h||c?n.readAsArrayBuffer(r):n.readAsDataURL(r)}}},{key:"load",value:function(a){var r=this,i=this.file,s=this.image;s.onload=function(){r.draw(J(J({},a),{},{naturalWidth:s.naturalWidth,naturalHeight:s.naturalHeight}))},s.onabort=function(){r.fail(new Error("Aborted to load the image."))},s.onerror=function(){r.fail(new Error("Failed to load the image."))},T.navigator&&/(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(T.navigator.userAgent)&&(s.crossOrigin="anonymous"),s.alt=i.name,s.src=a.url}},{key:"draw",value:function(a){var r=this,i=a.naturalWidth,s=a.naturalHeight,u=a.rotate,h=u===void 0?0:u,c=a.scaleX,n=c===void 0?1:c,o=a.scaleY,p=o===void 0?1:o,f=this.file,d=this.image,l=this.options,y=document.createElement("canvas"),v=y.getContext("2d"),A=Math.abs(h)%180===90,R=(l.resize==="contain"||l.resize==="cover")&&Y(l.width)&&Y(l.height),k=Math.max(l.maxWidth,0)||1/0,O=Math.max(l.maxHeight,0)||1/0,j=Math.max(l.minWidth,0)||0,P=Math.max(l.minHeight,0)||0,L=i/s,b=l.width,x=l.height;if(A){var pe=[O,k];k=pe[0],O=pe[1];var de=[P,j];j=de[0],P=de[1];var me=[x,b];b=me[0],x=me[1]}R&&(L=b/x);var ve=H({aspectRatio:L,width:k,height:O},"contain");k=ve.width,O=ve.height;var ge=H({aspectRatio:L,width:j,height:P},"cover");if(j=ge.width,P=ge.height,R){var we=H({aspectRatio:L,width:b,height:x},l.resize);b=we.width,x=we.height}else{var ye=H({aspectRatio:L,width:b,height:x}),be=ye.width;b=be===void 0?i:be;var xe=ye.height;x=xe===void 0?s:xe}b=Math.floor(We(Math.min(Math.max(b,j),k))),x=Math.floor(We(Math.min(Math.max(x,P),O)));var at=-b/2,rt=-x/2,nt=b,it=x,Q=[];if(R){var Ee=0,ke=0,ee=i,te=s,Be=H({aspectRatio:L,width:i,height:s},{contain:"cover",cover:"contain"}[l.resize]);ee=Be.width,te=Be.height,Ee=(i-ee)/2,ke=(s-te)/2,Q.push(Ee,ke,ee,te)}if(Q.push(at,rt,nt,it),A){var Ae=[x,b];b=Ae[0],x=Ae[1]}y.width=b,y.height=x,se(l.mimeType)||(l.mimeType=f.type);var Fe="transparent";f.size>l.convertSize&&l.convertTypes.indexOf(l.mimeType)>=0&&(l.mimeType="image/jpeg");var Ue=l.mimeType==="image/jpeg";if(Ue&&(Fe="#fff"),v.fillStyle=Fe,v.fillRect(0,0,b,x),l.beforeDraw&&l.beforeDraw.call(this,v,y),!this.aborted&&(v.save(),v.translate(b/2,x/2),v.rotate(h*Math.PI/180),v.scale(n,p),v.drawImage.apply(v,[d].concat(Q)),v.restore(),l.drew&&l.drew.call(this,v,y),!this.aborted)){var Te=function(M){if(!r.aborted){var Re=function(_){return r.done({naturalWidth:i,naturalHeight:s,result:_})};if(M&&Ue&&l.retainExif&&r.exif&&r.exif.length>0){var Ce=function(_){return Re(Ie(Ne(Lt(_,r.exif),l.mimeType)))};if(M.arrayBuffer)M.arrayBuffer().then(Ce).catch(function(){r.fail(new Error("Failed to read the compressed image with Blob.arrayBuffer()."))});else{var D=new ie;r.reader=D,D.onload=function(ae){var _=ae.target;Ce(_.result)},D.onabort=function(){r.fail(new Error("Aborted to read the compressed image with FileReader."))},D.onerror=function(){r.fail(new Error("Failed to read the compressed image with FileReader."))},D.onloadend=function(){r.reader=null},D.readAsArrayBuffer(M)}}else Re(M)}};y.toBlob?y.toBlob(Te,l.mimeType,l.quality):Te(Ie(y.toDataURL(l.mimeType,l.quality)))}}},{key:"done",value:function(a){var r=a.naturalWidth,i=a.naturalHeight,s=a.result,u=this.file,h=this.image,c=this.options;if(S&&h.src.indexOf("blob:")===0&&S.revokeObjectURL(h.src),s)if(c.strict&&!c.retainExif&&s.size>u.size&&c.mimeType===u.type&&!(c.width>r||c.height>i||c.minWidth>r||c.minHeight>i||c.maxWidth<r||c.maxHeight<i))s=u;else{var n=new Date;s.lastModified=n.getTime(),s.lastModifiedDate=n,s.name=u.name,s.name&&s.type!==u.type&&(s.name=s.name.replace(Ot,At(s.type)))}else s=u;this.result=s,c.success&&c.success.call(this,s)}},{key:"fail",value:function(a){var r=this.options;if(r.error)r.error.call(this,a);else throw a}},{key:"abort",value:function(){this.aborted||(this.aborted=!0,this.reader?this.reader.abort():this.image.complete?this.fail(new Error("The compression process has been aborted.")):(this.image.onload=null,this.image.onabort()))}}],[{key:"noConflict",value:function(){return window.Compressor=jt,t}},{key:"setDefaults",value:function(a){K(He,a)}}]),t}();const fe=async t=>{const e=new ce;return e.file("snapshot.json",JSON.stringify(t)).file("screenshot.png",await Xe.getItem(t.id)),await e.generateAsync({type:"blob",compression:"STORE"})},Mt=async t=>{const e=`snapshot-${t.id}.zip`;q.saveAs(await fe(t),e)},he=async t=>{const e=await Xe.getItem(t.id),a=await new Promise((i,s)=>{new Pt(new Blob([e],{type:"image/png"}),{quality:.75,convertSize:2e5,success(u){i(u)},error(u){s(u)}})});return new Blob([a],{type:"image/jpeg"})},_t=async t=>{const e=`snapshot-${t.id}.jpg`;q.saveAs(await he(t),e)},Qt=async t=>{const e=new ce;for(const r of t)await le(),e.file(r.id+".jpg",he(r));const a=await e.generateAsync({type:"blob",compression:"STORE"});q.saveAs(a,`batch-png-${t.length}.zip`)},ea=async t=>{const e=new ce;for(const r of t)await le(),e.file(r.id+".zip",await fe(r));const a=await e.generateAsync({type:"blob",compression:"STORE"});q.saveAs(a,`batch-zip-${t.length}.zip`)},et=async t=>{var e;return(e=G[t.id])!=null?e:Ke(await he(t).then(a=>a.arrayBuffer()),"file.jpg","image/jpeg").then(a=>(G[t.id]=a.href,a.href))},tt=async t=>V[t.id]||Ke(await fe(t).then(e=>e.arrayBuffer()),"file.zip","application/x-zip-compressed").then(e=>(V[t.id]=e.id,ct[e.id]=t.id,zt(e.id),e.id)),ta=async t=>{const e=Ze(3);return(await Promise.allSettled(t.map(a=>e(()=>et(a))))).reduce((a,r)=>(r.status=="fulfilled"&&a.push(r.value),a),[])},aa=async t=>{const e=Ze(3);return(await Promise.allSettled(t.map(a=>e(()=>tt(a))))).reduce((a,r)=>(r.status=="fulfilled"&&a.push(r.value),a),[])},zt=async(t,e=!1)=>{Number.isSafeInteger(+t)&&(Se[t]||(Se[t]=!0,!e&&await fetch("https://detect.gkd.li/api/detectSnapshot?importId="+t)))},It={flex:"","gap-12px":"","flex-nowrap":""},Ht=["href"],Nt=E("svg",{viewBox:"0 0 1024 1024",width:"200",height:"200"},[E("path",{d:"M549.973333 128 633.6 145.066667 474.026667 896 390.4 878.933333 549.973333 128M835.84 512 682.666667 358.826667 682.666667 238.08 956.586667 512 682.666667 785.493333 682.666667 664.746667 835.84 512M67.413333 512 341.333333 238.08 341.333333 358.826667 188.16 512 341.333333 664.746667 341.333333 785.493333 67.413333 512Z"})],-1),Wt=E("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"},[E("g",{fill:"none",stroke:"currentColor","stroke-width":"2","stroke-linecap":"round","stroke-linejoin":"round"},[E("path",{d:"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2"}),E("path",{d:"M7 11l5 5l5-5"}),E("path",{d:"M12 4v12"})])],-1),$t=E("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"},[E("path",{d:"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81c1.66 0 3-1.34 3-3s-1.34-3-3-3s-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65c0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z",fill:"currentColor"})],-1),Jt=E("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 24 24"},[E("g",{fill:"none"},[E("path",{d:"M12 1.75a3.25 3.25 0 0 1 3.245 3.066L15.25 5h5.25a.75.75 0 0 1 .102 1.493L20.5 6.5h-.796l-1.28 13.02a2.75 2.75 0 0 1-2.561 2.474l-.176.006H8.313a2.75 2.75 0 0 1-2.714-2.307l-.023-.174L4.295 6.5H3.5a.75.75 0 0 1-.743-.648L2.75 5.75a.75.75 0 0 1 .648-.743L3.5 5h5.25A3.25 3.25 0 0 1 12 1.75zm6.197 4.75H5.802l1.267 12.872a1.25 1.25 0 0 0 1.117 1.122l.127.006h7.374c.6 0 1.109-.425 1.225-1.002l.02-.126L18.196 6.5zM13.75 9.25a.75.75 0 0 1 .743.648L14.5 10v7a.75.75 0 0 1-1.493.102L13 17v-7a.75.75 0 0 1 .75-.75zm-3.5 0a.75.75 0 0 1 .743.648L11 10v7a.75.75 0 0 1-1.493.102L9.5 17v-7a.75.75 0 0 1 .75-.75zm1.75-6a1.75 1.75 0 0 0-1.744 1.606L10.25 5h3.5A1.75 1.75 0 0 0 12 3.25z",fill:"currentColor"})])],-1),ra=Je({__name:"ActionCard",props:{snapshot:{},onDelete:{type:Function,default:ot},showPreview:{type:Boolean,default:!0},showExport:{type:Boolean,default:!0},showDelete:{type:Boolean,default:!0},showShare:{type:Boolean,default:!0}},setup(t){const e=t,a=ut(),r=$(async()=>_t(await I.getItem(e.snapshot.id))),i=$(async()=>Mt(await I.getItem(e.snapshot.id))),s=ft(()=>a.resolve({name:"snapshot",params:{snapshotId:e.snapshot.id}}).href),u=$(async()=>{await Me();const o=await et(await I.getItem(e.snapshot.id));Pe({title:"分享链接",content:Le(o)})}),h=$(async()=>{await Me();const o=await tt(await I.getItem(e.snapshot.id));Pe({title:"分享链接",content:location.origin+`/i/${o}`})}),c=async()=>{await I.removeItem(e.snapshot.id),await le(500),e.onDelete()},n=async o=>navigator.clipboard.writeText(o).then(()=>{Z.success("复制成功")}).catch(()=>{Z.success("复制失败")});return(o,p)=>(F(),De("div",It,[o.showPreview?(F(),De("a",{key:0,target:"_blank",href:s.value},[w(m(B),{size:"small"},{icon:g(()=>[w(m(W),null,{default:g(()=>[Nt]),_:1})]),_:1})],8,Ht)):N("",!0),o.showExport?(F(),C(m(je),{key:1},{trigger:g(()=>[w(m(B),{size:"small"},{icon:g(()=>[w(m(W),null,{default:g(()=>[Wt]),_:1})]),_:1})]),default:g(()=>[w(m(Oe),{vertical:""},{default:g(()=>[w(m(B),{onClick:m(i).invoke,loading:m(i).loading},{default:g(()=>[U(" 下载-快照 ")]),_:1},8,["onClick","loading"]),w(m(B),{onClick:m(r).invoke,loading:m(r).loading},{default:g(()=>[U(" 下载-图片 ")]),_:1},8,["onClick","loading"])]),_:1})]),_:1})):N("",!0),o.showShare?(F(),C(m(je),{key:2},{trigger:g(()=>[w(m(B),{size:"small"},{icon:g(()=>[w(m(W),null,{default:g(()=>[$t]),_:1})]),_:1})]),default:g(()=>[w(m(Oe),{vertical:""},{default:g(()=>[m(V)[o.snapshot.id]?(F(),C(m(B),{key:0,onClick:p[0]||(p[0]=f=>n(m(ht)(m(V)[o.snapshot.id])))},{default:g(()=>[U(" 复制链接-快照 ")]),_:1})):(F(),C(m(B),{key:1,onClick:m(h).invoke,loading:m(h).loading},{default:g(()=>[U(" 生成链接-快照 ")]),_:1},8,["onClick","loading"])),m(G)[o.snapshot.id]?(F(),C(m(B),{key:2,onClick:p[1]||(p[1]=f=>n(m(Le)(m(G)[o.snapshot.id])))},{default:g(()=>[U(" 复制链接-图片 ")]),_:1})):(F(),C(m(B),{key:3,onClick:m(u).invoke,loading:m(u).loading},{default:g(()=>[U(" 生成链接-图片 ")]),_:1},8,["onClick","loading"]))]),_:1})]),_:1})):N("",!0),o.showDelete?(F(),C(m(B),{key:3,size:"small",onClick:c},{icon:g(()=>[w(m(W),null,{default:g(()=>[Jt]),_:1})]),_:1})):N("",!0)]))}});export{ra as _,ea as a,Qt as b,ta as c,aa as d,zt as e,et as f,tt as g,Pe as s,Ke as u,Me as w};
10
+ //# sourceMappingURL=ActionCard.vue_vue_type_script_setup_true_lang-CKo-hCrz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ActionCard.vue_vue_type_script_setup_true_lang-C93_MZRO.js","sources":["../../src/utils/dialog.tsx","../../node_modules/.pnpm/file-saver@2.0.5/node_modules/file-saver/dist/FileSaver.min.js","../../src/utils/github.ts","../../node_modules/.pnpm/compressorjs@1.2.1/node_modules/compressorjs/dist/compressor.esm.js","../../src/utils/export.ts","../../src/components/ActionCard.vue"],"sourcesContent":["import { NCheckbox, NInput } from 'naive-ui';\nimport { dialog, message } from './discrete';\nimport { defineComponent } from 'vue';\nimport { settingsStorage } from './storage';\n\nexport const showTextDLg = ({ title = `批量分享链接`, content = '' }) => {\n dialog.success({\n title,\n style: {\n width: `800px`,\n },\n content() {\n return (\n <NInput\n type=\"textarea\"\n autosize={{\n minRows: 8,\n maxRows: 16,\n }}\n inputProps={{\n style: `white-space: nowrap;`,\n class: `gkd_code`,\n }}\n value={content}\n />\n );\n },\n positiveText: `复制`,\n onPositiveClick() {\n navigator.clipboard\n .writeText(content)\n .then(() => {\n message.success(`复制成功`);\n })\n .catch(() => {\n message.success(`复制失败`);\n });\n return false;\n },\n });\n};\n\nconst NoticeCheckbox = defineComponent(() => {\n return () => {\n return (\n <NCheckbox\n checked={settingsStorage.ignoreUploadWarn}\n onUpdateChecked={(value) => {\n settingsStorage.ignoreUploadWarn = value;\n }}\n focusable={false}\n >\n 不再提醒\n </NCheckbox>\n );\n };\n});\n\nexport const waitShareAgree = async () => {\n if (settingsStorage.ignoreUploadWarn) return;\n return new Promise((resolve, reject) => {\n dialog.warning({\n title: '生成分享链接须知',\n content() {\n return (\n <div>\n <div>所有快照上传分享链接均为公开链接,任何人均可访问。</div>\n <div>请确保快照不包含隐私信息,请勿分享任何敏感信息。</div>\n <NoticeCheckbox class=\"mt-10px\" />\n </div>\n );\n },\n closable: false,\n closeOnEsc: false,\n maskClosable: false,\n positiveText: '继续上传',\n negativeText: '取消分享',\n onPositiveClick: resolve,\n onNegativeClick: reject,\n });\n });\n};\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","import { enhanceFetch } from './fetch';\nimport { obj2form } from './others';\nimport store from './store';\n\nconst authenticityTokenPageUrl = `https://github.com/gkd-kit/inspect/issues/new`;\nconst repository_id = `661952005`;\nconst commonHeaders = {\n origin: `https://github.com`,\n referer: authenticityTokenPageUrl,\n};\n\nconst getCsrfToken = async () => {\n const csrfSelector = `[data-upload-policy-url=\"/upload/policies/assets\"] input.js-data-upload-policy-url-csrf`;\n const resp = await enhanceFetch(authenticityTokenPageUrl);\n const responseDoc = new DOMParser().parseFromString(\n await resp.text(),\n 'text/html',\n );\n const csrfToken = responseDoc\n .querySelector(csrfSelector)\n ?.getAttribute(`value`);\n return csrfToken;\n};\n\ntype S3Form = {\n key: string;\n acl: string;\n policy: string;\n 'X-Amz-Algorithm': string;\n 'X-Amz-Credential': string;\n 'X-Amz-Date': string;\n 'X-Amz-Signature': string;\n 'Content-Type': string;\n 'Cache-Control': string;\n 'x-amz-meta-Surrogate-Control': string;\n};\nexport type GithubPoliciesAsset = {\n id: number;\n name: string;\n size: number;\n content_type: string;\n original_name: string;\n href: string;\n};\n\ntype UploadPoliciesAssetsRsonpse = {\n upload_url: string;\n header: object;\n asset: GithubPoliciesAsset;\n form: S3Form;\n same_origin: boolean;\n asset_upload_url: string;\n upload_authenticity_token: string;\n asset_upload_authenticity_token: string;\n};\n\nexport const uploadPoliciesAssets = async (\n bf: ArrayBuffer,\n name: string,\n content_type: string,\n): Promise<GithubPoliciesAsset> => {\n const authenticity_token = await getCsrfToken();\n if (!authenticity_token) {\n store.githubErrorDlgVisible = true;\n throw new Error(`failed get csrfToken`);\n }\n\n const policiesResp: UploadPoliciesAssetsRsonpse = await enhanceFetch(\n `https://github.com/upload/policies/assets`,\n {\n method: `POST`,\n body: obj2form({\n authenticity_token,\n content_type,\n name,\n size: bf.byteLength,\n repository_id,\n }),\n headers: commonHeaders,\n },\n ).then((r) => {\n if (!r.ok) {\n throw new Error(`failed upload policies assets`);\n }\n return r.json();\n });\n\n // violentmonkey success\n // tampermonkey failed https://github.com/Tampermonkey/tampermonkey/issues/1783\n // use fetch is also work, but console.error cors and can not get response\n const s3Resp = await enhanceFetch(policiesResp.upload_url, {\n method: `POST`,\n body: obj2form(policiesResp.form, {\n file: new File([bf], name, { type: content_type }),\n }),\n headers: commonHeaders,\n });\n if (!s3Resp.ok) {\n throw new Error(`upload s3 failed`);\n }\n\n const assetsResp = await enhanceFetch(\n new URL(policiesResp.asset_upload_url, `https://github.com/`).href,\n {\n method: `PUT`,\n body: obj2form({\n authenticity_token: policiesResp.asset_upload_authenticity_token,\n }),\n headers: {\n ...commonHeaders,\n // api must add `Accept` request headers\n Accept: `application/json`,\n },\n },\n );\n\n if (assetsResp.status != 200) {\n throw new Error(`failed check authenticity upload`);\n }\n\n return policiesResp.asset;\n};\n","/*!\n * Compressor.js v1.2.1\n * https://fengyuanchen.github.io/compressorjs\n *\n * Copyright 2018-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-02-28T14:09:41.732Z\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar canvasToBlob = {exports: {}};\n\n/*\n * JavaScript Canvas to Blob\n * https://github.com/blueimp/JavaScript-Canvas-to-Blob\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on stackoverflow user Stoive's code snippet:\n * http://stackoverflow.com/q/4998908\n */\n(function (module) {\n if (typeof window === 'undefined') {\n return;\n }\n (function (window) {\n\n var CanvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;\n var hasBlobConstructor = window.Blob && function () {\n try {\n return Boolean(new Blob());\n } catch (e) {\n return false;\n }\n }();\n var hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && function () {\n try {\n return new Blob([new Uint8Array(100)]).size === 100;\n } catch (e) {\n return false;\n }\n }();\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/;\n var dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array && function (dataURI) {\n var matches, mediaType, isBase64, dataString, byteString, arrayBuffer, intArray, i, bb;\n // Parse the dataURI components as per RFC 2397\n matches = dataURI.match(dataURIPattern);\n if (!matches) {\n throw new Error('invalid data URI');\n }\n // Default to text/plain;charset=US-ASCII\n mediaType = matches[2] ? matches[1] : 'text/plain' + (matches[3] || ';charset=US-ASCII');\n isBase64 = !!matches[4];\n dataString = dataURI.slice(matches[0].length);\n if (isBase64) {\n // Convert base64 to raw binary data held in a string:\n byteString = atob(dataString);\n } else {\n // Convert base64/URLEncoded data component to raw binary:\n byteString = decodeURIComponent(dataString);\n }\n // Write the bytes of the string to an ArrayBuffer:\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n for (i = 0; i < byteString.length; i += 1) {\n intArray[i] = byteString.charCodeAt(i);\n }\n // Write the ArrayBuffer (or ArrayBufferView) to a blob:\n if (hasBlobConstructor) {\n return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {\n type: mediaType\n });\n }\n bb = new BlobBuilder();\n bb.append(arrayBuffer);\n return bb.getBlob(mediaType);\n };\n if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {\n if (CanvasPrototype.mozGetAsFile) {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n } else {\n callback(self.mozGetAsFile('blob', type));\n }\n });\n };\n } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {\n if (CanvasPrototype.msToBlob) {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n if ((type && type !== 'image/png' || quality) && CanvasPrototype.toDataURL && dataURLtoBlob) {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n } else {\n callback(self.msToBlob(type));\n }\n });\n };\n } else {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n });\n };\n }\n }\n }\n if (module.exports) {\n module.exports = dataURLtoBlob;\n } else {\n window.dataURLtoBlob = dataURLtoBlob;\n }\n })(window);\n})(canvasToBlob);\nvar toBlob = canvasToBlob.exports;\n\nvar isBlob = function isBlob(value) {\n if (typeof Blob === 'undefined') {\n return false;\n }\n return value instanceof Blob || Object.prototype.toString.call(value) === '[object Blob]';\n};\n\nvar DEFAULTS = {\n /**\n * Indicates if output the original image instead of the compressed one\n * when the size of the compressed image is greater than the original one's\n * @type {boolean}\n */\n strict: true,\n /**\n * Indicates if read the image's Exif Orientation information,\n * and then rotate or flip the image automatically.\n * @type {boolean}\n */\n checkOrientation: true,\n /**\n * Indicates if retain the image's Exif information after compressed.\n * @type {boolean}\n */\n retainExif: false,\n /**\n * The max width of the output image.\n * @type {number}\n */\n maxWidth: Infinity,\n /**\n * The max height of the output image.\n * @type {number}\n */\n maxHeight: Infinity,\n /**\n * The min width of the output image.\n * @type {number}\n */\n minWidth: 0,\n /**\n * The min height of the output image.\n * @type {number}\n */\n minHeight: 0,\n /**\n * The width of the output image.\n * If not specified, the natural width of the source image will be used.\n * @type {number}\n */\n width: undefined,\n /**\n * The height of the output image.\n * If not specified, the natural height of the source image will be used.\n * @type {number}\n */\n height: undefined,\n /**\n * Sets how the size of the image should be resized to the container\n * specified by the `width` and `height` options.\n * @type {string}\n */\n resize: 'none',\n /**\n * The quality of the output image.\n * It must be a number between `0` and `1`,\n * and only available for `image/jpeg` and `image/webp` images.\n * Check out {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob canvas.toBlob}.\n * @type {number}\n */\n quality: 0.8,\n /**\n * The mime type of the output image.\n * By default, the original mime type of the source image file will be used.\n * @type {string}\n */\n mimeType: 'auto',\n /**\n * Files whose file type is included in this list,\n * and whose file size exceeds the `convertSize` value will be converted to JPEGs.\n * @type {string|Array}\n */\n convertTypes: ['image/png'],\n /**\n * PNG files over this size (5 MB by default) will be converted to JPEGs.\n * To disable this, just set the value to `Infinity`.\n * @type {number}\n */\n convertSize: 5000000,\n /**\n * The hook function to execute before draw the image into the canvas for compression.\n * @type {Function}\n * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n * @param {HTMLCanvasElement} canvas - The canvas for compression.\n * @example\n * function (context, canvas) {\n * context.fillStyle = '#fff';\n * }\n */\n beforeDraw: null,\n /**\n * The hook function to execute after drew the image into the canvas for compression.\n * @type {Function}\n * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n * @param {HTMLCanvasElement} canvas - The canvas for compression.\n * @example\n * function (context, canvas) {\n * context.filter = 'grayscale(100%)';\n * }\n */\n drew: null,\n /**\n * The hook function to execute when success to compress the image.\n * @type {Function}\n * @param {File} file - The compressed image File object.\n * @example\n * function (file) {\n * console.log(file);\n * }\n */\n success: null,\n /**\n * The hook function to execute when fail to compress the image.\n * @type {Function}\n * @param {Error} err - An Error object.\n * @example\n * function (err) {\n * console.log(err.message);\n * }\n */\n error: null\n};\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\nvar REGEXP_IMAGE_TYPE = /^image\\/.+$/;\n\n/**\n * Check if the given value is a mime type of image.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given is a mime type of image, else `false`.\n */\nfunction isImageType(value) {\n return REGEXP_IMAGE_TYPE.test(value);\n}\n\n/**\n * Convert image type to extension.\n * @param {string} value - The image type to convert.\n * @returns {boolean} Returns the image extension.\n */\nfunction imageTypeToExtension(value) {\n var extension = isImageType(value) ? value.substr(6) : '';\n if (extension === 'jpeg') {\n extension = 'jpg';\n }\n return \".\".concat(extension);\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n var i;\n length += start;\n for (i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar btoa = WINDOW.btoa;\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (e) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref) {\n var aspectRatio = _ref.aspectRatio,\n height = _ref.height,\n width = _ref.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if ((type === 'contain' || type === 'none') && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get Exif information from the given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {Array} The read Exif information.\n */\nfunction getExif(arrayBuffer) {\n var array = toArray(new Uint8Array(arrayBuffer));\n var length = array.length;\n var segments = [];\n var start = 0;\n while (start + 3 < length) {\n var value = array[start];\n var next = array[start + 1];\n\n // SOS (Start of Scan)\n if (value === 0xFF && next === 0xDA) {\n break;\n }\n\n // SOI (Start of Image)\n if (value === 0xFF && next === 0xD8) {\n start += 2;\n } else {\n var offset = array[start + 2] * 256 + array[start + 3];\n var end = start + offset + 2;\n var segment = array.slice(start, end);\n segments.push(segment);\n start = end;\n }\n }\n return segments.reduce(function (exifArray, current) {\n if (current[0] === 0xFF && current[1] === 0xE1) {\n return exifArray.concat(current);\n }\n return exifArray;\n }, []);\n}\n\n/**\n * Insert Exif information into the given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {Array} exifArray - The Exif information to insert.\n * @returns {ArrayBuffer} The transformed array buffer.\n */\nfunction insertExif(arrayBuffer, exifArray) {\n var array = toArray(new Uint8Array(arrayBuffer));\n if (array[2] !== 0xFF || array[3] !== 0xE0) {\n return arrayBuffer;\n }\n var app0Length = array[4] * 256 + array[5];\n var newArrayBuffer = [0xFF, 0xD8].concat(exifArray, array.slice(4 + app0Length));\n return new Uint8Array(newArrayBuffer);\n}\n\nvar ArrayBuffer$1 = WINDOW.ArrayBuffer,\n FileReader = WINDOW.FileReader;\nvar URL = WINDOW.URL || WINDOW.webkitURL;\nvar REGEXP_EXTENSION = /\\.\\w+$/;\nvar AnotherCompressor = WINDOW.Compressor;\n\n/**\n * Creates a new image compressor.\n * @class\n */\nvar Compressor = /*#__PURE__*/function () {\n /**\n * The constructor of Compressor.\n * @param {File|Blob} file - The target image file for compressing.\n * @param {Object} [options] - The options for compressing.\n */\n function Compressor(file, options) {\n _classCallCheck(this, Compressor);\n this.file = file;\n this.exif = [];\n this.image = new Image();\n this.options = _objectSpread2(_objectSpread2({}, DEFAULTS), options);\n this.aborted = false;\n this.result = null;\n this.init();\n }\n _createClass(Compressor, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n var file = this.file,\n options = this.options;\n if (!isBlob(file)) {\n this.fail(new Error('The first argument must be a File or Blob object.'));\n return;\n }\n var mimeType = file.type;\n if (!isImageType(mimeType)) {\n this.fail(new Error('The first argument must be an image File or Blob object.'));\n return;\n }\n if (!URL || !FileReader) {\n this.fail(new Error('The current browser does not support image compression.'));\n return;\n }\n if (!ArrayBuffer$1) {\n options.checkOrientation = false;\n options.retainExif = false;\n }\n var isJPEGImage = mimeType === 'image/jpeg';\n var checkOrientation = isJPEGImage && options.checkOrientation;\n var retainExif = isJPEGImage && options.retainExif;\n if (URL && !checkOrientation && !retainExif) {\n this.load({\n url: URL.createObjectURL(file)\n });\n } else {\n var reader = new FileReader();\n this.reader = reader;\n reader.onload = function (_ref) {\n var target = _ref.target;\n var result = target.result;\n var data = {};\n var orientation = 1;\n if (checkOrientation) {\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n orientation = resetAndGetOrientation(result);\n if (orientation > 1) {\n _extends(data, parseOrientation(orientation));\n }\n }\n if (retainExif) {\n _this.exif = getExif(result);\n }\n if (checkOrientation || retainExif) {\n if (!URL\n\n // Generate a new URL with the default orientation value 1.\n || orientation > 1) {\n data.url = arrayBufferToDataURL(result, mimeType);\n } else {\n data.url = URL.createObjectURL(file);\n }\n } else {\n data.url = result;\n }\n _this.load(data);\n };\n reader.onabort = function () {\n _this.fail(new Error('Aborted to read the image with FileReader.'));\n };\n reader.onerror = function () {\n _this.fail(new Error('Failed to read the image with FileReader.'));\n };\n reader.onloadend = function () {\n _this.reader = null;\n };\n if (checkOrientation || retainExif) {\n reader.readAsArrayBuffer(file);\n } else {\n reader.readAsDataURL(file);\n }\n }\n }\n }, {\n key: \"load\",\n value: function load(data) {\n var _this2 = this;\n var file = this.file,\n image = this.image;\n image.onload = function () {\n _this2.draw(_objectSpread2(_objectSpread2({}, data), {}, {\n naturalWidth: image.naturalWidth,\n naturalHeight: image.naturalHeight\n }));\n };\n image.onabort = function () {\n _this2.fail(new Error('Aborted to load the image.'));\n };\n image.onerror = function () {\n _this2.fail(new Error('Failed to load the image.'));\n };\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n if (WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent)) {\n // Fix the `The operation is insecure` error (#57)\n image.crossOrigin = 'anonymous';\n }\n image.alt = file.name;\n image.src = data.url;\n }\n }, {\n key: \"draw\",\n value: function draw(_ref2) {\n var _this3 = this;\n var naturalWidth = _ref2.naturalWidth,\n naturalHeight = _ref2.naturalHeight,\n _ref2$rotate = _ref2.rotate,\n rotate = _ref2$rotate === void 0 ? 0 : _ref2$rotate,\n _ref2$scaleX = _ref2.scaleX,\n scaleX = _ref2$scaleX === void 0 ? 1 : _ref2$scaleX,\n _ref2$scaleY = _ref2.scaleY,\n scaleY = _ref2$scaleY === void 0 ? 1 : _ref2$scaleY;\n var file = this.file,\n image = this.image,\n options = this.options;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var is90DegreesRotated = Math.abs(rotate) % 180 === 90;\n var resizable = (options.resize === 'contain' || options.resize === 'cover') && isPositiveNumber(options.width) && isPositiveNumber(options.height);\n var maxWidth = Math.max(options.maxWidth, 0) || Infinity;\n var maxHeight = Math.max(options.maxHeight, 0) || Infinity;\n var minWidth = Math.max(options.minWidth, 0) || 0;\n var minHeight = Math.max(options.minHeight, 0) || 0;\n var aspectRatio = naturalWidth / naturalHeight;\n var width = options.width,\n height = options.height;\n if (is90DegreesRotated) {\n var _ref3 = [maxHeight, maxWidth];\n maxWidth = _ref3[0];\n maxHeight = _ref3[1];\n var _ref4 = [minHeight, minWidth];\n minWidth = _ref4[0];\n minHeight = _ref4[1];\n var _ref5 = [height, width];\n width = _ref5[0];\n height = _ref5[1];\n }\n if (resizable) {\n aspectRatio = width / height;\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n }, 'contain');\n maxWidth = _getAdjustedSizes.width;\n maxHeight = _getAdjustedSizes.height;\n var _getAdjustedSizes2 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n minWidth = _getAdjustedSizes2.width;\n minHeight = _getAdjustedSizes2.height;\n if (resizable) {\n var _getAdjustedSizes3 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: width,\n height: height\n }, options.resize);\n width = _getAdjustedSizes3.width;\n height = _getAdjustedSizes3.height;\n } else {\n var _getAdjustedSizes4 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: width,\n height: height\n });\n var _getAdjustedSizes4$wi = _getAdjustedSizes4.width;\n width = _getAdjustedSizes4$wi === void 0 ? naturalWidth : _getAdjustedSizes4$wi;\n var _getAdjustedSizes4$he = _getAdjustedSizes4.height;\n height = _getAdjustedSizes4$he === void 0 ? naturalHeight : _getAdjustedSizes4$he;\n }\n width = Math.floor(normalizeDecimalNumber(Math.min(Math.max(width, minWidth), maxWidth)));\n height = Math.floor(normalizeDecimalNumber(Math.min(Math.max(height, minHeight), maxHeight)));\n var destX = -width / 2;\n var destY = -height / 2;\n var destWidth = width;\n var destHeight = height;\n var params = [];\n if (resizable) {\n var srcX = 0;\n var srcY = 0;\n var srcWidth = naturalWidth;\n var srcHeight = naturalHeight;\n var _getAdjustedSizes5 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: naturalWidth,\n height: naturalHeight\n }, {\n contain: 'cover',\n cover: 'contain'\n }[options.resize]);\n srcWidth = _getAdjustedSizes5.width;\n srcHeight = _getAdjustedSizes5.height;\n srcX = (naturalWidth - srcWidth) / 2;\n srcY = (naturalHeight - srcHeight) / 2;\n params.push(srcX, srcY, srcWidth, srcHeight);\n }\n params.push(destX, destY, destWidth, destHeight);\n if (is90DegreesRotated) {\n var _ref6 = [height, width];\n width = _ref6[0];\n height = _ref6[1];\n }\n canvas.width = width;\n canvas.height = height;\n if (!isImageType(options.mimeType)) {\n options.mimeType = file.type;\n }\n var fillStyle = 'transparent';\n\n // Converts PNG files over the `convertSize` to JPEGs.\n if (file.size > options.convertSize && options.convertTypes.indexOf(options.mimeType) >= 0) {\n options.mimeType = 'image/jpeg';\n }\n var isJPEGImage = options.mimeType === 'image/jpeg';\n if (isJPEGImage) {\n fillStyle = '#fff';\n }\n\n // Override the default fill color (#000, black)\n context.fillStyle = fillStyle;\n context.fillRect(0, 0, width, height);\n if (options.beforeDraw) {\n options.beforeDraw.call(this, context, canvas);\n }\n if (this.aborted) {\n return;\n }\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.drawImage.apply(context, [image].concat(params));\n context.restore();\n if (options.drew) {\n options.drew.call(this, context, canvas);\n }\n if (this.aborted) {\n return;\n }\n var callback = function callback(blob) {\n if (!_this3.aborted) {\n var done = function done(result) {\n return _this3.done({\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n result: result\n });\n };\n if (blob && isJPEGImage && options.retainExif && _this3.exif && _this3.exif.length > 0) {\n var next = function next(arrayBuffer) {\n return done(toBlob(arrayBufferToDataURL(insertExif(arrayBuffer, _this3.exif), options.mimeType)));\n };\n if (blob.arrayBuffer) {\n blob.arrayBuffer().then(next).catch(function () {\n _this3.fail(new Error('Failed to read the compressed image with Blob.arrayBuffer().'));\n });\n } else {\n var reader = new FileReader();\n _this3.reader = reader;\n reader.onload = function (_ref7) {\n var target = _ref7.target;\n next(target.result);\n };\n reader.onabort = function () {\n _this3.fail(new Error('Aborted to read the compressed image with FileReader.'));\n };\n reader.onerror = function () {\n _this3.fail(new Error('Failed to read the compressed image with FileReader.'));\n };\n reader.onloadend = function () {\n _this3.reader = null;\n };\n reader.readAsArrayBuffer(blob);\n }\n } else {\n done(blob);\n }\n }\n };\n if (canvas.toBlob) {\n canvas.toBlob(callback, options.mimeType, options.quality);\n } else {\n callback(toBlob(canvas.toDataURL(options.mimeType, options.quality)));\n }\n }\n }, {\n key: \"done\",\n value: function done(_ref8) {\n var naturalWidth = _ref8.naturalWidth,\n naturalHeight = _ref8.naturalHeight,\n result = _ref8.result;\n var file = this.file,\n image = this.image,\n options = this.options;\n if (URL && image.src.indexOf('blob:') === 0) {\n URL.revokeObjectURL(image.src);\n }\n if (result) {\n // Returns original file if the result is greater than it and without size related options\n if (options.strict && !options.retainExif && result.size > file.size && options.mimeType === file.type && !(options.width > naturalWidth || options.height > naturalHeight || options.minWidth > naturalWidth || options.minHeight > naturalHeight || options.maxWidth < naturalWidth || options.maxHeight < naturalHeight)) {\n result = file;\n } else {\n var date = new Date();\n result.lastModified = date.getTime();\n result.lastModifiedDate = date;\n result.name = file.name;\n\n // Convert the extension to match its type\n if (result.name && result.type !== file.type) {\n result.name = result.name.replace(REGEXP_EXTENSION, imageTypeToExtension(result.type));\n }\n }\n } else {\n // Returns original file if the result is null in some cases.\n result = file;\n }\n this.result = result;\n if (options.success) {\n options.success.call(this, result);\n }\n }\n }, {\n key: \"fail\",\n value: function fail(err) {\n var options = this.options;\n if (options.error) {\n options.error.call(this, err);\n } else {\n throw err;\n }\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (!this.aborted) {\n this.aborted = true;\n if (this.reader) {\n this.reader.abort();\n } else if (!this.image.complete) {\n this.image.onload = null;\n this.image.onabort();\n } else {\n this.fail(new Error('The compression process has been aborted.'));\n }\n }\n }\n\n /**\n * Get the no conflict compressor class.\n * @returns {Compressor} The compressor class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Compressor = AnotherCompressor;\n return Compressor;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n _extends(DEFAULTS, options);\n }\n }]);\n return Compressor;\n}();\n\nexport { Compressor as default };\n","import { saveAs } from 'file-saver';\nimport JSZip from 'jszip';\nimport pLimit from 'p-limit';\nimport { uploadPoliciesAssets } from './github';\nimport { delay } from './others';\nimport {\n githubJpgStorage,\n githubZipStorage,\n screenshotStorage,\n syncImportStorage,\n urlStorage,\n} from './storage';\nimport Compressor from 'compressorjs';\nimport type { Snapshot } from './types';\n\nexport const snapshotAsZip = async (snapshot: Snapshot) => {\n const zip = new JSZip();\n zip\n .file(`snapshot.json`, JSON.stringify(snapshot))\n .file(`screenshot.png`, (await screenshotStorage.getItem(snapshot.id))!);\n const content = await zip.generateAsync({\n type: 'blob',\n compression: `STORE`,\n });\n return content;\n};\n\nexport const exportSnapshotAsZip = async (snapshot: Snapshot) => {\n const fileName = `snapshot-${snapshot.id}.zip`;\n saveAs(await snapshotAsZip(snapshot), fileName);\n};\n\nexport const snapshotAsJpg = async (snapshot: Snapshot) => {\n const imgBf = (await screenshotStorage.getItem(snapshot.id))!;\n const jpgBlob = await new Promise<Blob>((res, rej) => {\n new Compressor(new Blob([imgBf], { type: 'image/png' }), {\n quality: 0.75,\n convertSize: 200_000,\n success(file) {\n res(file);\n },\n error(error) {\n rej(error);\n },\n });\n });\n const content = new Blob([jpgBlob], { type: 'image/jpeg' });\n return content;\n};\n\nexport const exportSnapshotAsJpg = async (snapshot: Snapshot) => {\n const fileName = `snapshot-${snapshot.id}.jpg`;\n saveAs(await snapshotAsJpg(snapshot), fileName);\n};\n\nexport const batchJpgDownloadZip = async (snapshots: Snapshot[]) => {\n const zip = new JSZip();\n for (const snapshot of snapshots) {\n await delay();\n zip.file(snapshot.id + `.jpg`, snapshotAsJpg(snapshot));\n }\n const batchZipFile = await zip.generateAsync({\n type: 'blob',\n compression: `STORE`,\n });\n saveAs(batchZipFile, `batch-png-${snapshots.length}.zip`);\n};\n\nexport const batchZipDownloadZip = async (snapshots: Snapshot[]) => {\n const zip = new JSZip();\n for (const snapshot of snapshots) {\n await delay();\n zip.file(snapshot.id + `.zip`, await snapshotAsZip(snapshot));\n }\n const batchZipFile = await zip.generateAsync({\n type: 'blob',\n compression: `STORE`,\n });\n saveAs(batchZipFile, `batch-zip-${snapshots.length}.zip`);\n};\n\nexport const exportSnapshotAsJpgUrl = async (snapshot: Snapshot) => {\n return (\n githubJpgStorage[snapshot.id] ??\n uploadPoliciesAssets(\n await snapshotAsJpg(snapshot).then((r) => r.arrayBuffer()),\n 'file.jpg',\n 'image/jpeg',\n ).then((r) => {\n // urlStorage[r.href] = snapshot.id;\n githubJpgStorage[snapshot.id] = r.href;\n return r.href;\n })\n );\n};\n\nexport const exportSnapshotAsZipUrl = async (snapshot: Snapshot) => {\n return (\n githubZipStorage[snapshot.id] ??\n uploadPoliciesAssets(\n await snapshotAsZip(snapshot).then((r) => r.arrayBuffer()),\n 'file.zip',\n 'application/x-zip-compressed',\n ).then((r) => {\n githubZipStorage[snapshot.id] = r.href;\n urlStorage[r.href] = snapshot.id;\n detectSnapshot(r.id);\n return r.href;\n })\n );\n};\n\nexport const batchCreateJpgUrl = async (snapshots: Snapshot[]) => {\n const limit = pLimit(3);\n return (\n await Promise.allSettled(\n snapshots.map((s) => limit(() => exportSnapshotAsJpgUrl(s))),\n )\n ).reduce<string[]>((p, c) => {\n if (c.status == 'fulfilled') {\n p.push(c.value);\n }\n return p;\n }, []);\n};\nexport const batchCreateZipUrl = async (snapshots: Snapshot[]) => {\n const limit = pLimit(3);\n return (\n await Promise.allSettled(\n snapshots.map((s) => limit(() => exportSnapshotAsZipUrl(s))),\n )\n ).reduce<string[]>((p, c) => {\n if (c.status == 'fulfilled') {\n p.push(c.value);\n }\n return p;\n }, []);\n};\n\nexport const detectSnapshot = async (\n importId: number | string,\n noFetch = false,\n) => {\n if (!Number.isSafeInteger(+importId)) {\n return;\n }\n if (syncImportStorage[importId]) {\n return;\n }\n syncImportStorage[importId] = true;\n if (noFetch) {\n return;\n }\n await fetch(`https://detect.gkd.li/api/detectSnapshot?importId=` + importId);\n};\n","<script setup lang=\"tsx\">\nimport { showTextDLg, waitShareAgree } from '@/utils/dialog';\nimport { message } from '@/utils/discrete';\nimport {\n exportSnapshotAsJpg,\n exportSnapshotAsJpgUrl,\n exportSnapshotAsZip,\n exportSnapshotAsZipUrl,\n} from '@/utils/export';\nimport { buildEmptyFn, delay } from '@/utils/others';\nimport {\n githubJpgStorage,\n githubZipStorage,\n snapshotStorage,\n} from '@/utils/storage';\nimport { useTask } from '@/utils/task';\nimport type { Snapshot } from '@/utils/types';\nimport { githubUrlToSelfUrl } from '@/utils/url';\nimport { NButton, NIcon, NPopover, NSpace } from 'naive-ui';\nimport { computed } from 'vue';\nimport { useRouter } from 'vue-router';\n\nconst props = withDefaults(\n defineProps<{\n snapshot: Snapshot;\n onDelete?: () => void;\n showPreview?: boolean;\n showExport?: boolean;\n showDelete?: boolean;\n showShare?: boolean;\n }>(),\n {\n showPreview: true,\n showExport: true,\n showDelete: true,\n showShare: true,\n onDelete: buildEmptyFn,\n },\n);\n\nconst router = useRouter();\n\nconst exportJpg = useTask(async () =>\n exportSnapshotAsJpg((await snapshotStorage.getItem(props.snapshot.id))!),\n);\nconst exportZip = useTask(async () =>\n exportSnapshotAsZip((await snapshotStorage.getItem(props.snapshot.id))!),\n);\n\nconst previewUrl = computed(() => {\n return router.resolve({\n name: 'snapshot',\n params: { snapshotId: props.snapshot.id },\n }).href;\n});\n\nconst exportJpgUrl = useTask(async () => {\n await waitShareAgree();\n const pngUrl = await exportSnapshotAsJpgUrl(\n (await snapshotStorage.getItem(props.snapshot.id))!,\n );\n showTextDLg({\n title: `分享链接`,\n content: githubUrlToSelfUrl(router, pngUrl),\n });\n});\n\nconst exportZipUrl = useTask(async () => {\n await waitShareAgree();\n const zipUrl = await exportSnapshotAsZipUrl(\n (await snapshotStorage.getItem(props.snapshot.id))!,\n );\n showTextDLg({\n title: `分享链接`,\n content: githubUrlToSelfUrl(router, zipUrl),\n });\n});\n\nconst deleteSnapshot = async () => {\n await snapshotStorage.removeItem(props.snapshot.id);\n await delay(500);\n props.onDelete();\n};\n\nconst copy = async (content: string) => {\n return navigator.clipboard\n .writeText(content)\n .then(() => {\n message.success(`复制成功`);\n })\n .catch(() => {\n message.success(`复制失败`);\n });\n};\n</script>\n<template>\n <div flex gap-12px flex-nowrap>\n <a v-if=\"showPreview\" target=\"_blank\" :href=\"previewUrl\">\n <NButton size=\"small\">\n <template #icon>\n <NIcon>\n <svg viewBox=\"0 0 1024 1024\" width=\"200\" height=\"200\">\n <path\n d=\"M549.973333 128 633.6 145.066667 474.026667 896 390.4 878.933333 549.973333 128M835.84 512 682.666667 358.826667 682.666667 238.08 956.586667 512 682.666667 785.493333 682.666667 664.746667 835.84 512M67.413333 512 341.333333 238.08 341.333333 358.826667 188.16 512 341.333333 664.746667 341.333333 785.493333 67.413333 512Z\"\n ></path>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </a>\n\n <NPopover v-if=\"showExport\">\n <template #trigger>\n <NButton size=\"small\">\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 24 24\"\n >\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"></path>\n <path d=\"M7 11l5 5l5-5\"></path>\n <path d=\"M12 4v12\"></path>\n </g>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton @click=\"exportZip.invoke\" :loading=\"exportZip.loading\">\n 下载-快照\n </NButton>\n <NButton @click=\"exportJpg.invoke\" :loading=\"exportJpg.loading\">\n 下载-图片\n </NButton>\n </NSpace>\n </NPopover>\n\n <NPopover v-if=\"showShare\">\n <template #trigger>\n <NButton size=\"small\">\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81c1.66 0 3-1.34 3-3s-1.34-3-3-3s-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65c0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton\n v-if=\"githubZipStorage[snapshot.id]\"\n @click=\"\n copy(githubUrlToSelfUrl($router, githubZipStorage[snapshot.id]))\n \"\n >\n 复制链接-快照\n </NButton>\n <NButton\n v-else\n @click=\"exportZipUrl.invoke\"\n :loading=\"exportZipUrl.loading\"\n >\n 生成链接-快照\n </NButton>\n <NButton\n v-if=\"githubJpgStorage[snapshot.id]\"\n @click=\"\n copy(githubUrlToSelfUrl($router, githubJpgStorage[snapshot.id]))\n \"\n >\n 复制链接-图片\n </NButton>\n <NButton\n v-else\n @click=\"exportJpgUrl.invoke\"\n :loading=\"exportJpgUrl.loading\"\n >\n 生成链接-图片\n </NButton>\n </NSpace>\n </NPopover>\n\n <NButton v-if=\"showDelete\" size=\"small\" @click=\"deleteSnapshot\">\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 24 24\"\n >\n <g fill=\"none\">\n <path\n d=\"M12 1.75a3.25 3.25 0 0 1 3.245 3.066L15.25 5h5.25a.75.75 0 0 1 .102 1.493L20.5 6.5h-.796l-1.28 13.02a2.75 2.75 0 0 1-2.561 2.474l-.176.006H8.313a2.75 2.75 0 0 1-2.714-2.307l-.023-.174L4.295 6.5H3.5a.75.75 0 0 1-.743-.648L2.75 5.75a.75.75 0 0 1 .648-.743L3.5 5h5.25A3.25 3.25 0 0 1 12 1.75zm6.197 4.75H5.802l1.267 12.872a1.25 1.25 0 0 0 1.117 1.122l.127.006h7.374c.6 0 1.109-.425 1.225-1.002l.02-.126L18.196 6.5zM13.75 9.25a.75.75 0 0 1 .743.648L14.5 10v7a.75.75 0 0 1-1.493.102L13 17v-7a.75.75 0 0 1 .75-.75zm-3.5 0a.75.75 0 0 1 .743.648L11 10v7a.75.75 0 0 1-1.493.102L9.5 17v-7a.75.75 0 0 1 .75-.75zm1.75-6a1.75 1.75 0 0 0-1.744 1.606L10.25 5h3.5A1.75 1.75 0 0 0 12 3.25z\"\n fill=\"currentColor\"\n ></path>\n </g></svg\n ></NIcon>\n </template>\n </NButton>\n </div>\n</template>\n"],"names":["showTextDLg","title","content","dialog","success","style","width","_createVNode","NInput","minRows","maxRows","class","positiveText","onPositiveClick","navigator","clipboard","writeText","then","message","catch","NoticeCheckbox","defineComponent","NCheckbox","settingsStorage","ignoreUploadWarn","value","default","_createTextVNode","waitShareAgree","Promise","resolve","reject","warning","closable","closeOnEsc","maskClosable","negativeText","onNegativeClick","a","b","this","c","d","g","e","f","global","h","i","j","k","l","m","module","authenticityTokenPageUrl","repository_id","commonHeaders","getCsrfToken","csrfSelector","resp","enhanceFetch","_a","uploadPoliciesAssets","bf","name","content_type","authenticity_token","store","policiesResp","obj2form","r","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","source","key","_defineProperty","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","obj","_extends","_toPrimitive","input","hint","prim","res","arg","canvasToBlob","window","CanvasPrototype","hasBlobConstructor","hasArrayBufferViewSupport","BlobBuilder","dataURIPattern","dataURLtoBlob","dataURI","matches","mediaType","isBase64","dataString","byteString","arrayBuffer","intArray","bb","callback","type","quality","self","toBlob","isBlob","DEFAULTS","IS_BROWSER","WINDOW","isPositiveNumber","slice","toArray","REGEXP_IMAGE_TYPE","isImageType","imageTypeToExtension","extension","fromCharCode","getStringFromCharCode","dataView","start","length","str","btoa","arrayBufferToDataURL","mimeType","chunks","chunkSize","uint8","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","offset","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","rotate","scaleX","scaleY","REGEXP_DECIMALS","normalizeDecimalNumber","times","getAdjustedSizes","_ref","aspectRatio","height","isValidWidth","isValidHeight","adjustedWidth","getExif","array","segments","next","end","segment","exifArray","current","insertExif","app0Length","newArrayBuffer","ArrayBuffer$1","FileReader","URL","REGEXP_EXTENSION","AnotherCompressor","Compressor","file","options","_this","isJPEGImage","checkOrientation","retainExif","reader","result","data","_this2","image","_ref2","_this3","naturalWidth","naturalHeight","_ref2$rotate","_ref2$scaleX","_ref2$scaleY","canvas","context","is90DegreesRotated","resizable","maxWidth","maxHeight","minWidth","minHeight","_ref3","_ref4","_ref5","_getAdjustedSizes","_getAdjustedSizes2","_getAdjustedSizes3","_getAdjustedSizes4","_getAdjustedSizes4$wi","_getAdjustedSizes4$he","destX","destY","destWidth","destHeight","params","srcX","srcY","srcWidth","srcHeight","_getAdjustedSizes5","_ref6","fillStyle","blob","done","_ref7","_ref8","date","err","snapshotAsZip","snapshot","zip","JSZip","screenshotStorage","exportSnapshotAsZip","fileName","saveAs","snapshotAsJpg","imgBf","jpgBlob","rej","error","exportSnapshotAsJpg","batchJpgDownloadZip","snapshots","delay","batchZipFile","batchZipDownloadZip","exportSnapshotAsJpgUrl","githubJpgStorage","exportSnapshotAsZipUrl","githubZipStorage","urlStorage","detectSnapshot","batchCreateJpgUrl","limit","pLimit","s","p","batchCreateZipUrl","importId","noFetch","syncImportStorage","__props","router","useRouter","exportJpg","useTask","snapshotStorage","getItem","id","exportZip","previewUrl","computed","snapshotId","href","exportJpgUrl","pngUrl","githubUrlToSelfUrl","exportZipUrl","zipUrl","deleteSnapshot","removeItem","onDelete","copy"],"mappings":"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","x_google_ignoreList":[1,3]}
1
+ {"version":3,"file":"ActionCard.vue_vue_type_script_setup_true_lang-CKo-hCrz.js","sources":["../../src/utils/dialog.tsx","../../node_modules/.pnpm/file-saver@2.0.5/node_modules/file-saver/dist/FileSaver.min.js","../../src/utils/github.ts","../../node_modules/.pnpm/compressorjs@1.2.1/node_modules/compressorjs/dist/compressor.esm.js","../../src/utils/export.ts","../../src/components/ActionCard.vue"],"sourcesContent":["import { NCheckbox, NInput } from 'naive-ui';\nimport { dialog, message } from './discrete';\nimport { defineComponent } from 'vue';\nimport { settingsStorage } from './storage';\n\nexport const showTextDLg = ({ title = `批量分享链接`, content = '' }) => {\n dialog.success({\n title,\n style: {\n width: `800px`,\n },\n content() {\n return (\n <NInput\n type=\"textarea\"\n autosize={{\n minRows: 8,\n maxRows: 16,\n }}\n inputProps={{\n style: `white-space: nowrap;`,\n class: `gkd_code`,\n }}\n value={content}\n />\n );\n },\n positiveText: `复制`,\n onPositiveClick() {\n navigator.clipboard\n .writeText(content)\n .then(() => {\n message.success(`复制成功`);\n })\n .catch(() => {\n message.success(`复制失败`);\n });\n return false;\n },\n });\n};\n\nconst NoticeCheckbox = defineComponent(() => {\n return () => {\n return (\n <NCheckbox\n checked={settingsStorage.ignoreUploadWarn}\n onUpdateChecked={(value) => {\n settingsStorage.ignoreUploadWarn = value;\n }}\n focusable={false}\n >\n 不再提醒\n </NCheckbox>\n );\n };\n});\n\nexport const waitShareAgree = async () => {\n if (settingsStorage.ignoreUploadWarn) return;\n return new Promise((resolve, reject) => {\n dialog.warning({\n title: '生成分享链接须知',\n content() {\n return (\n <div>\n <div>所有快照上传分享链接均为公开链接,任何人均可访问。</div>\n <div>请确保快照不包含隐私信息,请勿分享任何敏感信息。</div>\n <NoticeCheckbox class=\"mt-10px\" />\n </div>\n );\n },\n closable: false,\n closeOnEsc: false,\n maskClosable: false,\n positiveText: '继续上传',\n negativeText: '取消分享',\n onPositiveClick: resolve,\n onNegativeClick: reject,\n });\n });\n};\n","(function(a,b){if(\"function\"==typeof define&&define.amd)define([],b);else if(\"undefined\"!=typeof exports)b();else{b(),a.FileSaver={exports:{}}.exports}})(this,function(){\"use strict\";function b(a,b){return\"undefined\"==typeof b?b={autoBom:!1}:\"object\"!=typeof b&&(console.warn(\"Deprecated: Expected third argument to be a object\"),b={autoBom:!b}),b.autoBom&&/^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(a.type)?new Blob([\"\\uFEFF\",a],{type:a.type}):a}function c(a,b,c){var d=new XMLHttpRequest;d.open(\"GET\",a),d.responseType=\"blob\",d.onload=function(){g(d.response,b,c)},d.onerror=function(){console.error(\"could not download file\")},d.send()}function d(a){var b=new XMLHttpRequest;b.open(\"HEAD\",a,!1);try{b.send()}catch(a){}return 200<=b.status&&299>=b.status}function e(a){try{a.dispatchEvent(new MouseEvent(\"click\"))}catch(c){var b=document.createEvent(\"MouseEvents\");b.initMouseEvent(\"click\",!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),a.dispatchEvent(b)}}var f=\"object\"==typeof window&&window.window===window?window:\"object\"==typeof self&&self.self===self?self:\"object\"==typeof global&&global.global===global?global:void 0,a=f.navigator&&/Macintosh/.test(navigator.userAgent)&&/AppleWebKit/.test(navigator.userAgent)&&!/Safari/.test(navigator.userAgent),g=f.saveAs||(\"object\"!=typeof window||window!==f?function(){}:\"download\"in HTMLAnchorElement.prototype&&!a?function(b,g,h){var i=f.URL||f.webkitURL,j=document.createElement(\"a\");g=g||b.name||\"download\",j.download=g,j.rel=\"noopener\",\"string\"==typeof b?(j.href=b,j.origin===location.origin?e(j):d(j.href)?c(b,g,h):e(j,j.target=\"_blank\")):(j.href=i.createObjectURL(b),setTimeout(function(){i.revokeObjectURL(j.href)},4E4),setTimeout(function(){e(j)},0))}:\"msSaveOrOpenBlob\"in navigator?function(f,g,h){if(g=g||f.name||\"download\",\"string\"!=typeof f)navigator.msSaveOrOpenBlob(b(f,h),g);else if(d(f))c(f,g,h);else{var i=document.createElement(\"a\");i.href=f,i.target=\"_blank\",setTimeout(function(){e(i)})}}:function(b,d,e,g){if(g=g||open(\"\",\"_blank\"),g&&(g.document.title=g.document.body.innerText=\"downloading...\"),\"string\"==typeof b)return c(b,d,e);var h=\"application/octet-stream\"===b.type,i=/constructor/i.test(f.HTMLElement)||f.safari,j=/CriOS\\/[\\d]+/.test(navigator.userAgent);if((j||h&&i||a)&&\"undefined\"!=typeof FileReader){var k=new FileReader;k.onloadend=function(){var a=k.result;a=j?a:a.replace(/^data:[^;]*;/,\"data:attachment/file;\"),g?g.location.href=a:location=a,g=null},k.readAsDataURL(b)}else{var l=f.URL||f.webkitURL,m=l.createObjectURL(b);g?g.location=m:location.href=m,g=null,setTimeout(function(){l.revokeObjectURL(m)},4E4)}});f.saveAs=g.saveAs=g,\"undefined\"!=typeof module&&(module.exports=g)});\n\n//# sourceMappingURL=FileSaver.min.js.map","import { enhanceFetch } from './fetch';\nimport { obj2form } from './others';\nimport store from './store';\n\nconst authenticityTokenPageUrl = `https://github.com/gkd-kit/inspect/issues/new`;\nconst repository_id = `661952005`;\nconst commonHeaders = {\n origin: `https://github.com`,\n referer: authenticityTokenPageUrl,\n};\n\nconst getCsrfToken = async () => {\n const csrfSelector = `[data-upload-policy-url=\"/upload/policies/assets\"] input.js-data-upload-policy-url-csrf`;\n const resp = await enhanceFetch(authenticityTokenPageUrl);\n const responseDoc = new DOMParser().parseFromString(\n await resp.text(),\n 'text/html',\n );\n const csrfToken = responseDoc\n .querySelector(csrfSelector)\n ?.getAttribute(`value`);\n return csrfToken;\n};\n\ntype S3Form = {\n key: string;\n acl: string;\n policy: string;\n 'X-Amz-Algorithm': string;\n 'X-Amz-Credential': string;\n 'X-Amz-Date': string;\n 'X-Amz-Signature': string;\n 'Content-Type': string;\n 'Cache-Control': string;\n 'x-amz-meta-Surrogate-Control': string;\n};\nexport type GithubPoliciesAsset = {\n id: number;\n name: string;\n size: number;\n content_type: string;\n original_name: string;\n href: string;\n};\n\ntype UploadPoliciesAssetsRsonpse = {\n upload_url: string;\n header: object;\n asset: GithubPoliciesAsset;\n form: S3Form;\n same_origin: boolean;\n asset_upload_url: string;\n upload_authenticity_token: string;\n asset_upload_authenticity_token: string;\n};\n\nexport const uploadPoliciesAssets = async (\n bf: ArrayBuffer,\n name: string,\n content_type: string,\n): Promise<GithubPoliciesAsset> => {\n const authenticity_token = await getCsrfToken();\n if (!authenticity_token) {\n store.githubErrorDlgVisible = true;\n throw new Error(`failed get csrfToken`);\n }\n\n const policiesResp: UploadPoliciesAssetsRsonpse = await enhanceFetch(\n `https://github.com/upload/policies/assets`,\n {\n method: `POST`,\n body: obj2form({\n authenticity_token,\n content_type,\n name,\n size: bf.byteLength,\n repository_id,\n }),\n headers: commonHeaders,\n },\n ).then((r) => {\n if (!r.ok) {\n throw new Error(`failed upload policies assets`);\n }\n return r.json();\n });\n\n // violentmonkey success\n // tampermonkey failed https://github.com/Tampermonkey/tampermonkey/issues/1783\n // use fetch is also work, but console.error cors and can not get response\n const s3Resp = await enhanceFetch(policiesResp.upload_url, {\n method: `POST`,\n body: obj2form(policiesResp.form, {\n file: new File([bf], name, { type: content_type }),\n }),\n headers: commonHeaders,\n });\n if (!s3Resp.ok) {\n throw new Error(`upload s3 failed`);\n }\n\n const assetsResp = await enhanceFetch(\n new URL(policiesResp.asset_upload_url, `https://github.com/`).href,\n {\n method: `PUT`,\n body: obj2form({\n authenticity_token: policiesResp.asset_upload_authenticity_token,\n }),\n headers: {\n ...commonHeaders,\n // api must add `Accept` request headers\n Accept: `application/json`,\n },\n },\n );\n\n if (assetsResp.status != 200) {\n throw new Error(`failed check authenticity upload`);\n }\n\n return policiesResp.asset;\n};\n","/*!\n * Compressor.js v1.2.1\n * https://fengyuanchen.github.io/compressorjs\n *\n * Copyright 2018-present Chen Fengyuan\n * Released under the MIT license\n *\n * Date: 2023-02-28T14:09:41.732Z\n */\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n enumerableOnly && (symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n })), keys.push.apply(keys, symbols);\n }\n return keys;\n}\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = null != arguments[i] ? arguments[i] : {};\n i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n return target;\n}\nfunction _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nfunction _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nvar canvasToBlob = {exports: {}};\n\n/*\n * JavaScript Canvas to Blob\n * https://github.com/blueimp/JavaScript-Canvas-to-Blob\n *\n * Copyright 2012, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on stackoverflow user Stoive's code snippet:\n * http://stackoverflow.com/q/4998908\n */\n(function (module) {\n if (typeof window === 'undefined') {\n return;\n }\n (function (window) {\n\n var CanvasPrototype = window.HTMLCanvasElement && window.HTMLCanvasElement.prototype;\n var hasBlobConstructor = window.Blob && function () {\n try {\n return Boolean(new Blob());\n } catch (e) {\n return false;\n }\n }();\n var hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && function () {\n try {\n return new Blob([new Uint8Array(100)]).size === 100;\n } catch (e) {\n return false;\n }\n }();\n var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n var dataURIPattern = /^data:((.*?)(;charset=.*?)?)(;base64)?,/;\n var dataURLtoBlob = (hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array && function (dataURI) {\n var matches, mediaType, isBase64, dataString, byteString, arrayBuffer, intArray, i, bb;\n // Parse the dataURI components as per RFC 2397\n matches = dataURI.match(dataURIPattern);\n if (!matches) {\n throw new Error('invalid data URI');\n }\n // Default to text/plain;charset=US-ASCII\n mediaType = matches[2] ? matches[1] : 'text/plain' + (matches[3] || ';charset=US-ASCII');\n isBase64 = !!matches[4];\n dataString = dataURI.slice(matches[0].length);\n if (isBase64) {\n // Convert base64 to raw binary data held in a string:\n byteString = atob(dataString);\n } else {\n // Convert base64/URLEncoded data component to raw binary:\n byteString = decodeURIComponent(dataString);\n }\n // Write the bytes of the string to an ArrayBuffer:\n arrayBuffer = new ArrayBuffer(byteString.length);\n intArray = new Uint8Array(arrayBuffer);\n for (i = 0; i < byteString.length; i += 1) {\n intArray[i] = byteString.charCodeAt(i);\n }\n // Write the ArrayBuffer (or ArrayBufferView) to a blob:\n if (hasBlobConstructor) {\n return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {\n type: mediaType\n });\n }\n bb = new BlobBuilder();\n bb.append(arrayBuffer);\n return bb.getBlob(mediaType);\n };\n if (window.HTMLCanvasElement && !CanvasPrototype.toBlob) {\n if (CanvasPrototype.mozGetAsFile) {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n if (quality && CanvasPrototype.toDataURL && dataURLtoBlob) {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n } else {\n callback(self.mozGetAsFile('blob', type));\n }\n });\n };\n } else if (CanvasPrototype.toDataURL && dataURLtoBlob) {\n if (CanvasPrototype.msToBlob) {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n if ((type && type !== 'image/png' || quality) && CanvasPrototype.toDataURL && dataURLtoBlob) {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n } else {\n callback(self.msToBlob(type));\n }\n });\n };\n } else {\n CanvasPrototype.toBlob = function (callback, type, quality) {\n var self = this;\n setTimeout(function () {\n callback(dataURLtoBlob(self.toDataURL(type, quality)));\n });\n };\n }\n }\n }\n if (module.exports) {\n module.exports = dataURLtoBlob;\n } else {\n window.dataURLtoBlob = dataURLtoBlob;\n }\n })(window);\n})(canvasToBlob);\nvar toBlob = canvasToBlob.exports;\n\nvar isBlob = function isBlob(value) {\n if (typeof Blob === 'undefined') {\n return false;\n }\n return value instanceof Blob || Object.prototype.toString.call(value) === '[object Blob]';\n};\n\nvar DEFAULTS = {\n /**\n * Indicates if output the original image instead of the compressed one\n * when the size of the compressed image is greater than the original one's\n * @type {boolean}\n */\n strict: true,\n /**\n * Indicates if read the image's Exif Orientation information,\n * and then rotate or flip the image automatically.\n * @type {boolean}\n */\n checkOrientation: true,\n /**\n * Indicates if retain the image's Exif information after compressed.\n * @type {boolean}\n */\n retainExif: false,\n /**\n * The max width of the output image.\n * @type {number}\n */\n maxWidth: Infinity,\n /**\n * The max height of the output image.\n * @type {number}\n */\n maxHeight: Infinity,\n /**\n * The min width of the output image.\n * @type {number}\n */\n minWidth: 0,\n /**\n * The min height of the output image.\n * @type {number}\n */\n minHeight: 0,\n /**\n * The width of the output image.\n * If not specified, the natural width of the source image will be used.\n * @type {number}\n */\n width: undefined,\n /**\n * The height of the output image.\n * If not specified, the natural height of the source image will be used.\n * @type {number}\n */\n height: undefined,\n /**\n * Sets how the size of the image should be resized to the container\n * specified by the `width` and `height` options.\n * @type {string}\n */\n resize: 'none',\n /**\n * The quality of the output image.\n * It must be a number between `0` and `1`,\n * and only available for `image/jpeg` and `image/webp` images.\n * Check out {@link https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toBlob canvas.toBlob}.\n * @type {number}\n */\n quality: 0.8,\n /**\n * The mime type of the output image.\n * By default, the original mime type of the source image file will be used.\n * @type {string}\n */\n mimeType: 'auto',\n /**\n * Files whose file type is included in this list,\n * and whose file size exceeds the `convertSize` value will be converted to JPEGs.\n * @type {string|Array}\n */\n convertTypes: ['image/png'],\n /**\n * PNG files over this size (5 MB by default) will be converted to JPEGs.\n * To disable this, just set the value to `Infinity`.\n * @type {number}\n */\n convertSize: 5000000,\n /**\n * The hook function to execute before draw the image into the canvas for compression.\n * @type {Function}\n * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n * @param {HTMLCanvasElement} canvas - The canvas for compression.\n * @example\n * function (context, canvas) {\n * context.fillStyle = '#fff';\n * }\n */\n beforeDraw: null,\n /**\n * The hook function to execute after drew the image into the canvas for compression.\n * @type {Function}\n * @param {CanvasRenderingContext2D} context - The 2d rendering context of the canvas.\n * @param {HTMLCanvasElement} canvas - The canvas for compression.\n * @example\n * function (context, canvas) {\n * context.filter = 'grayscale(100%)';\n * }\n */\n drew: null,\n /**\n * The hook function to execute when success to compress the image.\n * @type {Function}\n * @param {File} file - The compressed image File object.\n * @example\n * function (file) {\n * console.log(file);\n * }\n */\n success: null,\n /**\n * The hook function to execute when fail to compress the image.\n * @type {Function}\n * @param {Error} err - An Error object.\n * @example\n * function (err) {\n * console.log(err.message);\n * }\n */\n error: null\n};\n\nvar IS_BROWSER = typeof window !== 'undefined' && typeof window.document !== 'undefined';\nvar WINDOW = IS_BROWSER ? window : {};\n\n/**\n * Check if the given value is a positive number.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given value is a positive number, else `false`.\n */\nvar isPositiveNumber = function isPositiveNumber(value) {\n return value > 0 && value < Infinity;\n};\nvar slice = Array.prototype.slice;\n\n/**\n * Convert array-like or iterable object to an array.\n * @param {*} value - The value to convert.\n * @returns {Array} Returns a new array.\n */\nfunction toArray(value) {\n return Array.from ? Array.from(value) : slice.call(value);\n}\nvar REGEXP_IMAGE_TYPE = /^image\\/.+$/;\n\n/**\n * Check if the given value is a mime type of image.\n * @param {*} value - The value to check.\n * @returns {boolean} Returns `true` if the given is a mime type of image, else `false`.\n */\nfunction isImageType(value) {\n return REGEXP_IMAGE_TYPE.test(value);\n}\n\n/**\n * Convert image type to extension.\n * @param {string} value - The image type to convert.\n * @returns {boolean} Returns the image extension.\n */\nfunction imageTypeToExtension(value) {\n var extension = isImageType(value) ? value.substr(6) : '';\n if (extension === 'jpeg') {\n extension = 'jpg';\n }\n return \".\".concat(extension);\n}\nvar fromCharCode = String.fromCharCode;\n\n/**\n * Get string from char code in data view.\n * @param {DataView} dataView - The data view for read.\n * @param {number} start - The start index.\n * @param {number} length - The read length.\n * @returns {string} The read result.\n */\nfunction getStringFromCharCode(dataView, start, length) {\n var str = '';\n var i;\n length += start;\n for (i = start; i < length; i += 1) {\n str += fromCharCode(dataView.getUint8(i));\n }\n return str;\n}\nvar btoa = WINDOW.btoa;\n\n/**\n * Transform array buffer to Data URL.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {string} mimeType - The mime type of the Data URL.\n * @returns {string} The result Data URL.\n */\nfunction arrayBufferToDataURL(arrayBuffer, mimeType) {\n var chunks = [];\n var chunkSize = 8192;\n var uint8 = new Uint8Array(arrayBuffer);\n while (uint8.length > 0) {\n // XXX: Babel's `toConsumableArray` helper will throw error in IE or Safari 9\n // eslint-disable-next-line prefer-spread\n chunks.push(fromCharCode.apply(null, toArray(uint8.subarray(0, chunkSize))));\n uint8 = uint8.subarray(chunkSize);\n }\n return \"data:\".concat(mimeType, \";base64,\").concat(btoa(chunks.join('')));\n}\n\n/**\n * Get orientation value from given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {number} The read orientation value.\n */\nfunction resetAndGetOrientation(arrayBuffer) {\n var dataView = new DataView(arrayBuffer);\n var orientation;\n\n // Ignores range error when the image does not have correct Exif information\n try {\n var littleEndian;\n var app1Start;\n var ifdStart;\n\n // Only handle JPEG image (start by 0xFFD8)\n if (dataView.getUint8(0) === 0xFF && dataView.getUint8(1) === 0xD8) {\n var length = dataView.byteLength;\n var offset = 2;\n while (offset + 1 < length) {\n if (dataView.getUint8(offset) === 0xFF && dataView.getUint8(offset + 1) === 0xE1) {\n app1Start = offset;\n break;\n }\n offset += 1;\n }\n }\n if (app1Start) {\n var exifIDCode = app1Start + 4;\n var tiffOffset = app1Start + 10;\n if (getStringFromCharCode(dataView, exifIDCode, 4) === 'Exif') {\n var endianness = dataView.getUint16(tiffOffset);\n littleEndian = endianness === 0x4949;\n if (littleEndian || endianness === 0x4D4D /* bigEndian */) {\n if (dataView.getUint16(tiffOffset + 2, littleEndian) === 0x002A) {\n var firstIFDOffset = dataView.getUint32(tiffOffset + 4, littleEndian);\n if (firstIFDOffset >= 0x00000008) {\n ifdStart = tiffOffset + firstIFDOffset;\n }\n }\n }\n }\n }\n if (ifdStart) {\n var _length = dataView.getUint16(ifdStart, littleEndian);\n var _offset;\n var i;\n for (i = 0; i < _length; i += 1) {\n _offset = ifdStart + i * 12 + 2;\n if (dataView.getUint16(_offset, littleEndian) === 0x0112 /* Orientation */) {\n // 8 is the offset of the current tag's value\n _offset += 8;\n\n // Get the original orientation value\n orientation = dataView.getUint16(_offset, littleEndian);\n\n // Override the orientation with its default value\n dataView.setUint16(_offset, 1, littleEndian);\n break;\n }\n }\n }\n } catch (e) {\n orientation = 1;\n }\n return orientation;\n}\n\n/**\n * Parse Exif Orientation value.\n * @param {number} orientation - The orientation to parse.\n * @returns {Object} The parsed result.\n */\nfunction parseOrientation(orientation) {\n var rotate = 0;\n var scaleX = 1;\n var scaleY = 1;\n switch (orientation) {\n // Flip horizontal\n case 2:\n scaleX = -1;\n break;\n\n // Rotate left 180°\n case 3:\n rotate = -180;\n break;\n\n // Flip vertical\n case 4:\n scaleY = -1;\n break;\n\n // Flip vertical and rotate right 90°\n case 5:\n rotate = 90;\n scaleY = -1;\n break;\n\n // Rotate right 90°\n case 6:\n rotate = 90;\n break;\n\n // Flip horizontal and rotate right 90°\n case 7:\n rotate = 90;\n scaleX = -1;\n break;\n\n // Rotate left 90°\n case 8:\n rotate = -90;\n break;\n }\n return {\n rotate: rotate,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\nvar REGEXP_DECIMALS = /\\.\\d*(?:0|9){12}\\d*$/;\n\n/**\n * Normalize decimal number.\n * Check out {@link https://0.30000000000000004.com/}\n * @param {number} value - The value to normalize.\n * @param {number} [times=100000000000] - The times for normalizing.\n * @returns {number} Returns the normalized number.\n */\nfunction normalizeDecimalNumber(value) {\n var times = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 100000000000;\n return REGEXP_DECIMALS.test(value) ? Math.round(value * times) / times : value;\n}\n\n/**\n * Get the max sizes in a rectangle under the given aspect ratio.\n * @param {Object} data - The original sizes.\n * @param {string} [type='contain'] - The adjust type.\n * @returns {Object} The result sizes.\n */\nfunction getAdjustedSizes(_ref) {\n var aspectRatio = _ref.aspectRatio,\n height = _ref.height,\n width = _ref.width;\n var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'none';\n var isValidWidth = isPositiveNumber(width);\n var isValidHeight = isPositiveNumber(height);\n if (isValidWidth && isValidHeight) {\n var adjustedWidth = height * aspectRatio;\n if ((type === 'contain' || type === 'none') && adjustedWidth > width || type === 'cover' && adjustedWidth < width) {\n height = width / aspectRatio;\n } else {\n width = height * aspectRatio;\n }\n } else if (isValidWidth) {\n height = width / aspectRatio;\n } else if (isValidHeight) {\n width = height * aspectRatio;\n }\n return {\n width: width,\n height: height\n };\n}\n\n/**\n * Get Exif information from the given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to read.\n * @returns {Array} The read Exif information.\n */\nfunction getExif(arrayBuffer) {\n var array = toArray(new Uint8Array(arrayBuffer));\n var length = array.length;\n var segments = [];\n var start = 0;\n while (start + 3 < length) {\n var value = array[start];\n var next = array[start + 1];\n\n // SOS (Start of Scan)\n if (value === 0xFF && next === 0xDA) {\n break;\n }\n\n // SOI (Start of Image)\n if (value === 0xFF && next === 0xD8) {\n start += 2;\n } else {\n var offset = array[start + 2] * 256 + array[start + 3];\n var end = start + offset + 2;\n var segment = array.slice(start, end);\n segments.push(segment);\n start = end;\n }\n }\n return segments.reduce(function (exifArray, current) {\n if (current[0] === 0xFF && current[1] === 0xE1) {\n return exifArray.concat(current);\n }\n return exifArray;\n }, []);\n}\n\n/**\n * Insert Exif information into the given array buffer.\n * @param {ArrayBuffer} arrayBuffer - The array buffer to transform.\n * @param {Array} exifArray - The Exif information to insert.\n * @returns {ArrayBuffer} The transformed array buffer.\n */\nfunction insertExif(arrayBuffer, exifArray) {\n var array = toArray(new Uint8Array(arrayBuffer));\n if (array[2] !== 0xFF || array[3] !== 0xE0) {\n return arrayBuffer;\n }\n var app0Length = array[4] * 256 + array[5];\n var newArrayBuffer = [0xFF, 0xD8].concat(exifArray, array.slice(4 + app0Length));\n return new Uint8Array(newArrayBuffer);\n}\n\nvar ArrayBuffer$1 = WINDOW.ArrayBuffer,\n FileReader = WINDOW.FileReader;\nvar URL = WINDOW.URL || WINDOW.webkitURL;\nvar REGEXP_EXTENSION = /\\.\\w+$/;\nvar AnotherCompressor = WINDOW.Compressor;\n\n/**\n * Creates a new image compressor.\n * @class\n */\nvar Compressor = /*#__PURE__*/function () {\n /**\n * The constructor of Compressor.\n * @param {File|Blob} file - The target image file for compressing.\n * @param {Object} [options] - The options for compressing.\n */\n function Compressor(file, options) {\n _classCallCheck(this, Compressor);\n this.file = file;\n this.exif = [];\n this.image = new Image();\n this.options = _objectSpread2(_objectSpread2({}, DEFAULTS), options);\n this.aborted = false;\n this.result = null;\n this.init();\n }\n _createClass(Compressor, [{\n key: \"init\",\n value: function init() {\n var _this = this;\n var file = this.file,\n options = this.options;\n if (!isBlob(file)) {\n this.fail(new Error('The first argument must be a File or Blob object.'));\n return;\n }\n var mimeType = file.type;\n if (!isImageType(mimeType)) {\n this.fail(new Error('The first argument must be an image File or Blob object.'));\n return;\n }\n if (!URL || !FileReader) {\n this.fail(new Error('The current browser does not support image compression.'));\n return;\n }\n if (!ArrayBuffer$1) {\n options.checkOrientation = false;\n options.retainExif = false;\n }\n var isJPEGImage = mimeType === 'image/jpeg';\n var checkOrientation = isJPEGImage && options.checkOrientation;\n var retainExif = isJPEGImage && options.retainExif;\n if (URL && !checkOrientation && !retainExif) {\n this.load({\n url: URL.createObjectURL(file)\n });\n } else {\n var reader = new FileReader();\n this.reader = reader;\n reader.onload = function (_ref) {\n var target = _ref.target;\n var result = target.result;\n var data = {};\n var orientation = 1;\n if (checkOrientation) {\n // Reset the orientation value to its default value 1\n // as some iOS browsers will render image with its orientation\n orientation = resetAndGetOrientation(result);\n if (orientation > 1) {\n _extends(data, parseOrientation(orientation));\n }\n }\n if (retainExif) {\n _this.exif = getExif(result);\n }\n if (checkOrientation || retainExif) {\n if (!URL\n\n // Generate a new URL with the default orientation value 1.\n || orientation > 1) {\n data.url = arrayBufferToDataURL(result, mimeType);\n } else {\n data.url = URL.createObjectURL(file);\n }\n } else {\n data.url = result;\n }\n _this.load(data);\n };\n reader.onabort = function () {\n _this.fail(new Error('Aborted to read the image with FileReader.'));\n };\n reader.onerror = function () {\n _this.fail(new Error('Failed to read the image with FileReader.'));\n };\n reader.onloadend = function () {\n _this.reader = null;\n };\n if (checkOrientation || retainExif) {\n reader.readAsArrayBuffer(file);\n } else {\n reader.readAsDataURL(file);\n }\n }\n }\n }, {\n key: \"load\",\n value: function load(data) {\n var _this2 = this;\n var file = this.file,\n image = this.image;\n image.onload = function () {\n _this2.draw(_objectSpread2(_objectSpread2({}, data), {}, {\n naturalWidth: image.naturalWidth,\n naturalHeight: image.naturalHeight\n }));\n };\n image.onabort = function () {\n _this2.fail(new Error('Aborted to load the image.'));\n };\n image.onerror = function () {\n _this2.fail(new Error('Failed to load the image.'));\n };\n\n // Match all browsers that use WebKit as the layout engine in iOS devices,\n // such as Safari for iOS, Chrome for iOS, and in-app browsers.\n if (WINDOW.navigator && /(?:iPad|iPhone|iPod).*?AppleWebKit/i.test(WINDOW.navigator.userAgent)) {\n // Fix the `The operation is insecure` error (#57)\n image.crossOrigin = 'anonymous';\n }\n image.alt = file.name;\n image.src = data.url;\n }\n }, {\n key: \"draw\",\n value: function draw(_ref2) {\n var _this3 = this;\n var naturalWidth = _ref2.naturalWidth,\n naturalHeight = _ref2.naturalHeight,\n _ref2$rotate = _ref2.rotate,\n rotate = _ref2$rotate === void 0 ? 0 : _ref2$rotate,\n _ref2$scaleX = _ref2.scaleX,\n scaleX = _ref2$scaleX === void 0 ? 1 : _ref2$scaleX,\n _ref2$scaleY = _ref2.scaleY,\n scaleY = _ref2$scaleY === void 0 ? 1 : _ref2$scaleY;\n var file = this.file,\n image = this.image,\n options = this.options;\n var canvas = document.createElement('canvas');\n var context = canvas.getContext('2d');\n var is90DegreesRotated = Math.abs(rotate) % 180 === 90;\n var resizable = (options.resize === 'contain' || options.resize === 'cover') && isPositiveNumber(options.width) && isPositiveNumber(options.height);\n var maxWidth = Math.max(options.maxWidth, 0) || Infinity;\n var maxHeight = Math.max(options.maxHeight, 0) || Infinity;\n var minWidth = Math.max(options.minWidth, 0) || 0;\n var minHeight = Math.max(options.minHeight, 0) || 0;\n var aspectRatio = naturalWidth / naturalHeight;\n var width = options.width,\n height = options.height;\n if (is90DegreesRotated) {\n var _ref3 = [maxHeight, maxWidth];\n maxWidth = _ref3[0];\n maxHeight = _ref3[1];\n var _ref4 = [minHeight, minWidth];\n minWidth = _ref4[0];\n minHeight = _ref4[1];\n var _ref5 = [height, width];\n width = _ref5[0];\n height = _ref5[1];\n }\n if (resizable) {\n aspectRatio = width / height;\n }\n var _getAdjustedSizes = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: maxWidth,\n height: maxHeight\n }, 'contain');\n maxWidth = _getAdjustedSizes.width;\n maxHeight = _getAdjustedSizes.height;\n var _getAdjustedSizes2 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: minWidth,\n height: minHeight\n }, 'cover');\n minWidth = _getAdjustedSizes2.width;\n minHeight = _getAdjustedSizes2.height;\n if (resizable) {\n var _getAdjustedSizes3 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: width,\n height: height\n }, options.resize);\n width = _getAdjustedSizes3.width;\n height = _getAdjustedSizes3.height;\n } else {\n var _getAdjustedSizes4 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: width,\n height: height\n });\n var _getAdjustedSizes4$wi = _getAdjustedSizes4.width;\n width = _getAdjustedSizes4$wi === void 0 ? naturalWidth : _getAdjustedSizes4$wi;\n var _getAdjustedSizes4$he = _getAdjustedSizes4.height;\n height = _getAdjustedSizes4$he === void 0 ? naturalHeight : _getAdjustedSizes4$he;\n }\n width = Math.floor(normalizeDecimalNumber(Math.min(Math.max(width, minWidth), maxWidth)));\n height = Math.floor(normalizeDecimalNumber(Math.min(Math.max(height, minHeight), maxHeight)));\n var destX = -width / 2;\n var destY = -height / 2;\n var destWidth = width;\n var destHeight = height;\n var params = [];\n if (resizable) {\n var srcX = 0;\n var srcY = 0;\n var srcWidth = naturalWidth;\n var srcHeight = naturalHeight;\n var _getAdjustedSizes5 = getAdjustedSizes({\n aspectRatio: aspectRatio,\n width: naturalWidth,\n height: naturalHeight\n }, {\n contain: 'cover',\n cover: 'contain'\n }[options.resize]);\n srcWidth = _getAdjustedSizes5.width;\n srcHeight = _getAdjustedSizes5.height;\n srcX = (naturalWidth - srcWidth) / 2;\n srcY = (naturalHeight - srcHeight) / 2;\n params.push(srcX, srcY, srcWidth, srcHeight);\n }\n params.push(destX, destY, destWidth, destHeight);\n if (is90DegreesRotated) {\n var _ref6 = [height, width];\n width = _ref6[0];\n height = _ref6[1];\n }\n canvas.width = width;\n canvas.height = height;\n if (!isImageType(options.mimeType)) {\n options.mimeType = file.type;\n }\n var fillStyle = 'transparent';\n\n // Converts PNG files over the `convertSize` to JPEGs.\n if (file.size > options.convertSize && options.convertTypes.indexOf(options.mimeType) >= 0) {\n options.mimeType = 'image/jpeg';\n }\n var isJPEGImage = options.mimeType === 'image/jpeg';\n if (isJPEGImage) {\n fillStyle = '#fff';\n }\n\n // Override the default fill color (#000, black)\n context.fillStyle = fillStyle;\n context.fillRect(0, 0, width, height);\n if (options.beforeDraw) {\n options.beforeDraw.call(this, context, canvas);\n }\n if (this.aborted) {\n return;\n }\n context.save();\n context.translate(width / 2, height / 2);\n context.rotate(rotate * Math.PI / 180);\n context.scale(scaleX, scaleY);\n context.drawImage.apply(context, [image].concat(params));\n context.restore();\n if (options.drew) {\n options.drew.call(this, context, canvas);\n }\n if (this.aborted) {\n return;\n }\n var callback = function callback(blob) {\n if (!_this3.aborted) {\n var done = function done(result) {\n return _this3.done({\n naturalWidth: naturalWidth,\n naturalHeight: naturalHeight,\n result: result\n });\n };\n if (blob && isJPEGImage && options.retainExif && _this3.exif && _this3.exif.length > 0) {\n var next = function next(arrayBuffer) {\n return done(toBlob(arrayBufferToDataURL(insertExif(arrayBuffer, _this3.exif), options.mimeType)));\n };\n if (blob.arrayBuffer) {\n blob.arrayBuffer().then(next).catch(function () {\n _this3.fail(new Error('Failed to read the compressed image with Blob.arrayBuffer().'));\n });\n } else {\n var reader = new FileReader();\n _this3.reader = reader;\n reader.onload = function (_ref7) {\n var target = _ref7.target;\n next(target.result);\n };\n reader.onabort = function () {\n _this3.fail(new Error('Aborted to read the compressed image with FileReader.'));\n };\n reader.onerror = function () {\n _this3.fail(new Error('Failed to read the compressed image with FileReader.'));\n };\n reader.onloadend = function () {\n _this3.reader = null;\n };\n reader.readAsArrayBuffer(blob);\n }\n } else {\n done(blob);\n }\n }\n };\n if (canvas.toBlob) {\n canvas.toBlob(callback, options.mimeType, options.quality);\n } else {\n callback(toBlob(canvas.toDataURL(options.mimeType, options.quality)));\n }\n }\n }, {\n key: \"done\",\n value: function done(_ref8) {\n var naturalWidth = _ref8.naturalWidth,\n naturalHeight = _ref8.naturalHeight,\n result = _ref8.result;\n var file = this.file,\n image = this.image,\n options = this.options;\n if (URL && image.src.indexOf('blob:') === 0) {\n URL.revokeObjectURL(image.src);\n }\n if (result) {\n // Returns original file if the result is greater than it and without size related options\n if (options.strict && !options.retainExif && result.size > file.size && options.mimeType === file.type && !(options.width > naturalWidth || options.height > naturalHeight || options.minWidth > naturalWidth || options.minHeight > naturalHeight || options.maxWidth < naturalWidth || options.maxHeight < naturalHeight)) {\n result = file;\n } else {\n var date = new Date();\n result.lastModified = date.getTime();\n result.lastModifiedDate = date;\n result.name = file.name;\n\n // Convert the extension to match its type\n if (result.name && result.type !== file.type) {\n result.name = result.name.replace(REGEXP_EXTENSION, imageTypeToExtension(result.type));\n }\n }\n } else {\n // Returns original file if the result is null in some cases.\n result = file;\n }\n this.result = result;\n if (options.success) {\n options.success.call(this, result);\n }\n }\n }, {\n key: \"fail\",\n value: function fail(err) {\n var options = this.options;\n if (options.error) {\n options.error.call(this, err);\n } else {\n throw err;\n }\n }\n }, {\n key: \"abort\",\n value: function abort() {\n if (!this.aborted) {\n this.aborted = true;\n if (this.reader) {\n this.reader.abort();\n } else if (!this.image.complete) {\n this.image.onload = null;\n this.image.onabort();\n } else {\n this.fail(new Error('The compression process has been aborted.'));\n }\n }\n }\n\n /**\n * Get the no conflict compressor class.\n * @returns {Compressor} The compressor class.\n */\n }], [{\n key: \"noConflict\",\n value: function noConflict() {\n window.Compressor = AnotherCompressor;\n return Compressor;\n }\n\n /**\n * Change the default options.\n * @param {Object} options - The new default options.\n */\n }, {\n key: \"setDefaults\",\n value: function setDefaults(options) {\n _extends(DEFAULTS, options);\n }\n }]);\n return Compressor;\n}();\n\nexport { Compressor as default };\n","import { saveAs } from 'file-saver';\nimport JSZip from 'jszip';\nimport pLimit from 'p-limit';\nimport { uploadPoliciesAssets } from './github';\nimport { delay } from './others';\nimport {\n githubJpgStorage,\n importStorage,\n screenshotStorage,\n syncImportStorage,\n urlStorage,\n} from './storage';\nimport Compressor from 'compressorjs';\nimport type { Snapshot } from './types';\n\nexport const snapshotAsZip = async (snapshot: Snapshot) => {\n const zip = new JSZip();\n zip\n .file(`snapshot.json`, JSON.stringify(snapshot))\n .file(`screenshot.png`, (await screenshotStorage.getItem(snapshot.id))!);\n const content = await zip.generateAsync({\n type: 'blob',\n compression: `STORE`,\n });\n return content;\n};\n\nexport const exportSnapshotAsZip = async (snapshot: Snapshot) => {\n const fileName = `snapshot-${snapshot.id}.zip`;\n saveAs(await snapshotAsZip(snapshot), fileName);\n};\n\nexport const snapshotAsJpg = async (snapshot: Snapshot) => {\n const imgBf = (await screenshotStorage.getItem(snapshot.id))!;\n const jpgBlob = await new Promise<Blob>((res, rej) => {\n new Compressor(new Blob([imgBf], { type: 'image/png' }), {\n quality: 0.75,\n convertSize: 200_000,\n success(file) {\n res(file);\n },\n error(error) {\n rej(error);\n },\n });\n });\n const content = new Blob([jpgBlob], { type: 'image/jpeg' });\n return content;\n};\n\nexport const exportSnapshotAsJpg = async (snapshot: Snapshot) => {\n const fileName = `snapshot-${snapshot.id}.jpg`;\n saveAs(await snapshotAsJpg(snapshot), fileName);\n};\n\nexport const batchJpgDownloadZip = async (snapshots: Snapshot[]) => {\n const zip = new JSZip();\n for (const snapshot of snapshots) {\n await delay();\n zip.file(snapshot.id + `.jpg`, snapshotAsJpg(snapshot));\n }\n const batchZipFile = await zip.generateAsync({\n type: 'blob',\n compression: `STORE`,\n });\n saveAs(batchZipFile, `batch-png-${snapshots.length}.zip`);\n};\n\nexport const batchZipDownloadZip = async (snapshots: Snapshot[]) => {\n const zip = new JSZip();\n for (const snapshot of snapshots) {\n await delay();\n zip.file(snapshot.id + `.zip`, await snapshotAsZip(snapshot));\n }\n const batchZipFile = await zip.generateAsync({\n type: 'blob',\n compression: `STORE`,\n });\n saveAs(batchZipFile, `batch-zip-${snapshots.length}.zip`);\n};\n\nexport const exportSnapshotAsJpgUrl = async (snapshot: Snapshot) => {\n return (\n githubJpgStorage[snapshot.id] ??\n uploadPoliciesAssets(\n await snapshotAsJpg(snapshot).then((r) => r.arrayBuffer()),\n 'file.jpg',\n 'image/jpeg',\n ).then((r) => {\n githubJpgStorage[snapshot.id] = r.href;\n return r.href;\n })\n );\n};\n\nexport const exportSnapshotAsImportId = async (snapshot: Snapshot) => {\n return (\n importStorage[snapshot.id] ||\n uploadPoliciesAssets(\n await snapshotAsZip(snapshot).then((r) => r.arrayBuffer()),\n 'file.zip',\n 'application/x-zip-compressed',\n ).then((r) => {\n importStorage[snapshot.id] = r.id;\n urlStorage[r.id] = snapshot.id;\n detectSnapshot(r.id);\n return r.id;\n })\n );\n};\n\nexport const batchCreateJpgUrl = async (snapshots: Snapshot[]) => {\n const limit = pLimit(3);\n return (\n await Promise.allSettled(\n snapshots.map((s) => limit(() => exportSnapshotAsJpgUrl(s))),\n )\n ).reduce<string[]>((p, c) => {\n if (c.status == 'fulfilled') {\n p.push(c.value);\n }\n return p;\n }, []);\n};\nexport const batchCreateZipUrl = async (snapshots: Snapshot[]) => {\n const limit = pLimit(3);\n return (\n await Promise.allSettled(\n snapshots.map((s) => limit(() => exportSnapshotAsImportId(s))),\n )\n ).reduce<number[]>((p, c) => {\n if (c.status == 'fulfilled') {\n p.push(c.value);\n }\n return p;\n }, []);\n};\n\nexport const detectSnapshot = async (\n importId: number | string,\n noFetch = false,\n) => {\n if (!Number.isSafeInteger(+importId)) {\n return;\n }\n if (syncImportStorage[importId]) {\n return;\n }\n syncImportStorage[importId] = true;\n if (noFetch) {\n return;\n }\n await fetch(`https://detect.gkd.li/api/detectSnapshot?importId=` + importId);\n};\n","<script setup lang=\"tsx\">\nimport { showTextDLg, waitShareAgree } from '@/utils/dialog';\nimport { message } from '@/utils/discrete';\nimport {\n exportSnapshotAsImportId,\n exportSnapshotAsJpg,\n exportSnapshotAsJpgUrl,\n exportSnapshotAsZip,\n} from '@/utils/export';\nimport { buildEmptyFn, delay } from '@/utils/others';\nimport {\n githubJpgStorage,\n importStorage,\n snapshotStorage,\n} from '@/utils/storage';\nimport { useTask } from '@/utils/task';\nimport type { Snapshot } from '@/utils/types';\nimport { getImportUrl, githubUrlToSelfUrl } from '@/utils/url';\nimport { NButton, NIcon, NPopover, NSpace } from 'naive-ui';\nimport { computed } from 'vue';\nimport { useRouter } from 'vue-router';\n\nconst props = withDefaults(\n defineProps<{\n snapshot: Snapshot;\n onDelete?: () => void;\n showPreview?: boolean;\n showExport?: boolean;\n showDelete?: boolean;\n showShare?: boolean;\n }>(),\n {\n showPreview: true,\n showExport: true,\n showDelete: true,\n showShare: true,\n onDelete: buildEmptyFn,\n },\n);\n\nconst router = useRouter();\n\nconst exportJpg = useTask(async () =>\n exportSnapshotAsJpg((await snapshotStorage.getItem(props.snapshot.id))!),\n);\nconst exportZip = useTask(async () =>\n exportSnapshotAsZip((await snapshotStorage.getItem(props.snapshot.id))!),\n);\n\nconst previewUrl = computed(() => {\n return router.resolve({\n name: 'snapshot',\n params: { snapshotId: props.snapshot.id },\n }).href;\n});\n\nconst exportJpgUrl = useTask(async () => {\n await waitShareAgree();\n const pngUrl = await exportSnapshotAsJpgUrl(\n (await snapshotStorage.getItem(props.snapshot.id))!,\n );\n showTextDLg({\n title: `分享链接`,\n content: githubUrlToSelfUrl(pngUrl),\n });\n});\n\nconst exportZipUrl = useTask(async () => {\n await waitShareAgree();\n const importId = await exportSnapshotAsImportId(\n (await snapshotStorage.getItem(props.snapshot.id))!,\n );\n showTextDLg({\n title: `分享链接`,\n content: location.origin + `/i/${importId}`,\n });\n});\n\nconst deleteSnapshot = async () => {\n await snapshotStorage.removeItem(props.snapshot.id);\n await delay(500);\n props.onDelete();\n};\n\nconst copy = async (content: string) => {\n return navigator.clipboard\n .writeText(content)\n .then(() => {\n message.success(`复制成功`);\n })\n .catch(() => {\n message.success(`复制失败`);\n });\n};\n</script>\n<template>\n <div flex gap-12px flex-nowrap>\n <a v-if=\"showPreview\" target=\"_blank\" :href=\"previewUrl\">\n <NButton size=\"small\">\n <template #icon>\n <NIcon>\n <svg viewBox=\"0 0 1024 1024\" width=\"200\" height=\"200\">\n <path\n d=\"M549.973333 128 633.6 145.066667 474.026667 896 390.4 878.933333 549.973333 128M835.84 512 682.666667 358.826667 682.666667 238.08 956.586667 512 682.666667 785.493333 682.666667 664.746667 835.84 512M67.413333 512 341.333333 238.08 341.333333 358.826667 188.16 512 341.333333 664.746667 341.333333 785.493333 67.413333 512Z\"\n ></path>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </a>\n\n <NPopover v-if=\"showExport\">\n <template #trigger>\n <NButton size=\"small\">\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 24 24\"\n >\n <g\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n >\n <path d=\"M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2\"></path>\n <path d=\"M7 11l5 5l5-5\"></path>\n <path d=\"M12 4v12\"></path>\n </g>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton @click=\"exportZip.invoke\" :loading=\"exportZip.loading\">\n 下载-快照\n </NButton>\n <NButton @click=\"exportJpg.invoke\" :loading=\"exportJpg.loading\">\n 下载-图片\n </NButton>\n </NSpace>\n </NPopover>\n\n <NPopover v-if=\"showShare\">\n <template #trigger>\n <NButton size=\"small\">\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 24 24\"\n >\n <path\n d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81c1.66 0 3-1.34 3-3s-1.34-3-3-3s-3 1.34-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9c-1.66 0-3 1.34-3 3s1.34 3 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.16c-.05.21-.08.43-.08.65c0 1.61 1.31 2.92 2.92 2.92s2.92-1.31 2.92-2.92s-1.31-2.92-2.92-2.92z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n </NIcon>\n </template>\n </NButton>\n </template>\n <NSpace vertical>\n <NButton\n v-if=\"importStorage[snapshot.id]\"\n @click=\"copy(getImportUrl(importStorage[snapshot.id]))\"\n >\n 复制链接-快照\n </NButton>\n <NButton\n v-else\n @click=\"exportZipUrl.invoke\"\n :loading=\"exportZipUrl.loading\"\n >\n 生成链接-快照\n </NButton>\n <NButton\n v-if=\"githubJpgStorage[snapshot.id]\"\n @click=\"copy(githubUrlToSelfUrl(githubJpgStorage[snapshot.id]))\"\n >\n 复制链接-图片\n </NButton>\n <NButton\n v-else\n @click=\"exportJpgUrl.invoke\"\n :loading=\"exportJpgUrl.loading\"\n >\n 生成链接-图片\n </NButton>\n </NSpace>\n </NPopover>\n\n <NButton v-if=\"showDelete\" size=\"small\" @click=\"deleteSnapshot\">\n <template #icon>\n <NIcon>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n viewBox=\"0 0 24 24\"\n >\n <g fill=\"none\">\n <path\n d=\"M12 1.75a3.25 3.25 0 0 1 3.245 3.066L15.25 5h5.25a.75.75 0 0 1 .102 1.493L20.5 6.5h-.796l-1.28 13.02a2.75 2.75 0 0 1-2.561 2.474l-.176.006H8.313a2.75 2.75 0 0 1-2.714-2.307l-.023-.174L4.295 6.5H3.5a.75.75 0 0 1-.743-.648L2.75 5.75a.75.75 0 0 1 .648-.743L3.5 5h5.25A3.25 3.25 0 0 1 12 1.75zm6.197 4.75H5.802l1.267 12.872a1.25 1.25 0 0 0 1.117 1.122l.127.006h7.374c.6 0 1.109-.425 1.225-1.002l.02-.126L18.196 6.5zM13.75 9.25a.75.75 0 0 1 .743.648L14.5 10v7a.75.75 0 0 1-1.493.102L13 17v-7a.75.75 0 0 1 .75-.75zm-3.5 0a.75.75 0 0 1 .743.648L11 10v7a.75.75 0 0 1-1.493.102L9.5 17v-7a.75.75 0 0 1 .75-.75zm1.75-6a1.75 1.75 0 0 0-1.744 1.606L10.25 5h3.5A1.75 1.75 0 0 0 12 3.25z\"\n fill=\"currentColor\"\n ></path>\n </g></svg\n ></NIcon>\n </template>\n </NButton>\n </div>\n</template>\n"],"names":["showTextDLg","title","content","dialog","success","style","width","_createVNode","NInput","minRows","maxRows","class","positiveText","onPositiveClick","navigator","clipboard","writeText","then","message","catch","NoticeCheckbox","defineComponent","NCheckbox","settingsStorage","ignoreUploadWarn","value","default","_createTextVNode","waitShareAgree","Promise","resolve","reject","warning","closable","closeOnEsc","maskClosable","negativeText","onNegativeClick","b","this","a","c","d","g","e","f","global","h","i","j","k","l","m","module","authenticityTokenPageUrl","repository_id","commonHeaders","getCsrfToken","csrfSelector","resp","enhanceFetch","_a","uploadPoliciesAssets","bf","name","content_type","authenticity_token","store","policiesResp","obj2form","r","ownKeys","object","enumerableOnly","keys","symbols","sym","_objectSpread2","target","source","key","_defineProperty","_classCallCheck","instance","Constructor","_defineProperties","props","descriptor","_toPropertyKey","_createClass","protoProps","staticProps","obj","_extends","_toPrimitive","input","hint","prim","res","arg","canvasToBlob","window","CanvasPrototype","hasBlobConstructor","hasArrayBufferViewSupport","BlobBuilder","dataURIPattern","dataURLtoBlob","dataURI","matches","mediaType","isBase64","dataString","byteString","arrayBuffer","intArray","bb","callback","type","quality","self","toBlob","isBlob","DEFAULTS","IS_BROWSER","WINDOW","isPositiveNumber","slice","toArray","REGEXP_IMAGE_TYPE","isImageType","imageTypeToExtension","extension","fromCharCode","getStringFromCharCode","dataView","start","length","str","btoa","arrayBufferToDataURL","mimeType","chunks","chunkSize","uint8","resetAndGetOrientation","orientation","littleEndian","app1Start","ifdStart","offset","exifIDCode","tiffOffset","endianness","firstIFDOffset","_length","_offset","parseOrientation","rotate","scaleX","scaleY","REGEXP_DECIMALS","normalizeDecimalNumber","times","getAdjustedSizes","_ref","aspectRatio","height","isValidWidth","isValidHeight","adjustedWidth","getExif","array","segments","next","end","segment","exifArray","current","insertExif","app0Length","newArrayBuffer","ArrayBuffer$1","FileReader","URL","REGEXP_EXTENSION","AnotherCompressor","Compressor","file","options","_this","isJPEGImage","checkOrientation","retainExif","reader","result","data","_this2","image","_ref2","_this3","naturalWidth","naturalHeight","_ref2$rotate","_ref2$scaleX","_ref2$scaleY","canvas","context","is90DegreesRotated","resizable","maxWidth","maxHeight","minWidth","minHeight","_ref3","_ref4","_ref5","_getAdjustedSizes","_getAdjustedSizes2","_getAdjustedSizes3","_getAdjustedSizes4","_getAdjustedSizes4$wi","_getAdjustedSizes4$he","destX","destY","destWidth","destHeight","params","srcX","srcY","srcWidth","srcHeight","_getAdjustedSizes5","_ref6","fillStyle","blob","done","_ref7","_ref8","date","err","snapshotAsZip","snapshot","zip","JSZip","screenshotStorage","exportSnapshotAsZip","fileName","saveAs","snapshotAsJpg","imgBf","jpgBlob","rej","error","exportSnapshotAsJpg","batchJpgDownloadZip","snapshots","delay","batchZipFile","batchZipDownloadZip","exportSnapshotAsJpgUrl","githubJpgStorage","exportSnapshotAsImportId","importStorage","urlStorage","detectSnapshot","batchCreateJpgUrl","limit","pLimit","s","p","batchCreateZipUrl","importId","noFetch","syncImportStorage","__props","router","useRouter","exportJpg","useTask","snapshotStorage","getItem","id","exportZip","previewUrl","computed","snapshotId","href","exportJpgUrl","pngUrl","githubUrlToSelfUrl","exportZipUrl","location","origin","deleteSnapshot","removeItem","onDelete","copy"],"mappings":"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","x_google_ignoreList":[1,3]}
@@ -0,0 +1,49 @@
1
+ import{A as y,h as ne,Q as ie,V as le,B as re,R as G,T as q,C as J,D as n,E as l,F as a,K as v,G as K,H as ce,W as T,aH as N,L as w,M as k,aS as ue,I as $,J as H,_ as pe,aT as de,Y as he,O as fe,P as ve}from"./index-CkJL6Zdi.js";import{e as me,m as c,a as ge}from"./fetch-BwM_TJ7E.js";import{e as W,c as we}from"./selector-smLnJZgo.js";import{u as ke,a as ye,N as Se}from"./table-CFVZ0QRH.js";import{u as R,t as be,b as j,N as Ce}from"./dayjs.min-Dgm3IjyQ.js";import{a as xe,b as _e}from"./index-BI6CNi-1.js";import{u as Ne,N as F,a as Re,l as Ie}from"./index-BmVtOw-O.js";import{p as Pe}from"./index-RwQljgyW.js";const Ve=M=>{const S=y(M),b=async(s,h={})=>{var I;if(!S.value)throw new Error("origin must exist");const x=new URL("/api/"+s,S.value);Object.entries(h.query||{}).forEach(([g,P])=>{P!==void 0&&x.searchParams.set(g,String(P))});const u=await me(x,h.init).catch(g=>{throw c.error("网络错误:/"+s),g});if(!u.ok)throw c.error("接口错误:/"+s+":"+u.status),u;if((I=u.headers.get("Content-Type"))!=null&&I.includes("application/json")){const g=await u.clone().json();if(g.__error)throw c.error(g.message),u}return u},o=async(...s)=>await(await b(...s)).json(),C=async(...s)=>await(await b(...s)).blob(),d=async(...s)=>await(await b(...s)).arrayBuffer();return{origin:S,api:{device:async()=>o("device"),snapshot:async s=>o("snapshot",{query:s}),screenshot:async s=>d("screenshot",{query:s}),captureSnapshot:async()=>o("captureSnapshot"),snapshots:async()=>o("snapshots"),updateSubsApps:async s=>C("updateSubsApps",{init:{method:"POST",body:JSON.stringify(s),headers:{"Content-Type":"application/json"}}}),updateSubscription:async s=>C("updateSubscription",{init:{method:"POST",body:JSON.stringify({...s,id:-1,name:"内存订阅",version:0}),headers:{"Content-Type":"application/json"}}}),execSelector:async s=>o("execSelector",{init:{method:"POST",body:JSON.stringify({...s,value:s.selector}),headers:{"Content-Type":"application/json"}}})}}},Te=v("div",{"h-15px":""},null,-1),Be=v("a",{href:"https://gkd.li/api/interfaces/RawCommonProps.html#quickfind",target:"_blank",rel:"noopener noreferrer"}," 查找说明 ",-1),ze=v("div",{"h-10px":""},null,-1),Ue={flex:"","gap-10px":"","flex-items-center":""},Ae=v("a",{href:"https://gkd.li/api/interfaces/RawRuleProps#action",target:"_blank",rel:"noopener noreferrer"}," 操作说明 ",-1),Le={flex:"","flex-col":"","p-10px":"","gap-10px":"","h-full":""},Oe=v("svg",{xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",viewBox:"0 0 32 32"},[v("path",{d:"M16.612 2.214a1.01 1.01 0 0 0-1.242 0L1 13.419l1.243 1.572L4 13.621V26a2.004 2.004 0 0 0 2 2h20a2.004 2.004 0 0 0 2-2V13.63L29.757 15L31 13.428zM18 26h-4v-8h4zm2 0v-8a2.002 2.002 0 0 0-2-2h-4a2.002 2.002 0 0 0-2 2v8H6V12.062l10-7.79l10 7.8V26z",fill:"currentColor"})],-1),je={class:"h-full",flex:"","flex-items-center":""},$e=ne({__name:"DevicePage",setup(M){const S=ce(),b=xe("新设备"),{api:o,origin:C}=Ve(),d=_e("device_link",""),m=y(),s=R(async()=>{d.value&&(C.value=W(()=>new URL(d.value.trim()),()=>"非法设备地址").origin,d.value=C.value,m.value=await o.device())});ie(async()=>{await ge(500),le(d.value)&&s.invoke()});const h=y([]);re(async()=>{if(!m.value)return;b.value="已连接 "+m.value.manufacturer,m.value.release;const e=await o.snapshots();e.sort((t,f)=>f.id-t.id),h.value=e,V.value=""});const x=R(async()=>{const e=await o.captureSnapshot(),t=await o.screenshot({id:e.id});await T.setItem(e.id,e),await N.setItem(e.id,t),c.success("保存快照成功");const f=await o.snapshots();f.sort((i,O)=>O.id-i.id),h.value=f}),u=R(async()=>{const e=(await o.snapshots()).map(p=>p.id),t=new Set((await N.keys()).map(p=>parseInt(p))),f=e.filter(p=>!t.has(p));if(f.length==0){c.success("没有新记录可导入");return}let i=0;const O=Pe(3);await Promise.all(f.map(p=>O(async()=>{const[E,oe]=await Promise.all([o.snapshot({id:p}),o.screenshot({id:p})]);E.nodes&&(await Promise.all([T.setItem(p,E),N.setItem(p,oe)]),i++)}))),c.success(`导入${i}条新记录`)}),{activityIdCol:I,appIdCol:g,appNameCol:P,ctimeCol:B,appVersionCodeCol:Q,appVersionNameCol:X,resetColWidth:Y}=ke(),Z=e=>{e.columnKey==B.key&&(B.sortOrder=e.order)},D=be(async e=>{if(await T.hasItem(e.id)||await T.setItem(e.id,await o.snapshot({id:e.id})),!await N.hasItem(e.id)){const t=await o.screenshot({id:e.id});await N.setItem(e.id,t)}window.open(S.resolve({name:"snapshot",params:{snapshotId:e.id}}).href)},e=>e.id),ee=[B,P,g,Q,X,I,{key:"actions",title:"操作",fixed:"right",width:"120px",render(e){return n(j,{size:"small"},{default:()=>[n(w,{size:"small",loading:D.loading[e.id],onClick:()=>D.invoke(e)},{default:()=>[k("查看")]})]})}}],_=G({page:1,pageSize:50,showSizePicker:!0,pageSizes:[50,100],onChange:e=>{_.page=e},onUpdatePageSize:e=>{_.pageSize=e,_.page=1}});q(_,Y);const z=y(!1),V=y(""),U=R(async()=>{const e=W(()=>Ie.parse(V.value.trim()));if(e){if(e.categories||e.globalGroups||e.apps)await o.updateSubscription(e);else if(typeof e.id=="string")await o.updateSubscription({apps:[e]});else if(Array.isArray(e)&&typeof e[0].id=="string")await o.updateSubscription({apps:e});else if(typeof e.key=="number")await o.updateSubscription({globalGroups:[e]});else if(Array.isArray(e)&&typeof e[0].key=="number")await o.updateSubscription({globalGroups:e});else{c.error("无法识别的订阅文本");return}c.success("修改成功")}}),A=y(!1),ae=[{label:"仅查询",value:void 0},{value:"click",label:"click"},{value:"clickNode",label:"clickNode"},{value:"clickCenter",label:"clickCenter"},{value:"back",label:"back"},{value:"longClick",label:"longClick"},{value:"longClickNode",label:"longClickNode"},{value:"longClickCenter",label:"longClickCenter"}],r=G({selector:"",selectorValid:!1,action:"click",quickFind:!1}),te=Ne(()=>{r.selectorValid=we(r.selector)},500);q(()=>r.selector.trim(),te);const L=R(async()=>{const e=await o.execSelector({...r});if(e.message){c.success("操作成功:"+e.message);return}e.action?c.success((e.result?"操作成功:":"操作失败")+e.action):!e.action&&e.result&&c.success("查询成功")}),se=`
2
+ 请输入订阅文本(JSON5语法):
3
+ 示例1-更新单个应用的规则:
4
+ {
5
+ id: 'appId',
6
+ groups: []
7
+ }
8
+
9
+ 示例2-更新多个应用的规则:
10
+ [
11
+ {
12
+ id: 'appId1',
13
+ groups: []
14
+ },
15
+ {
16
+ id: 'appId2',
17
+ groups: []
18
+ }
19
+ ]
20
+
21
+ 示例3-更新全局规则(1.7.0):
22
+ {
23
+ name: '全局规则-1',
24
+ key: 0,
25
+ rules: []
26
+ }
27
+
28
+ 示例3-更新多个全局规则(1.7.0):
29
+ [
30
+ {
31
+ name: '全局规则-1',
32
+ key: 0,
33
+ rules: []
34
+ },
35
+ {
36
+ name: '全局规则-2',
37
+ key: 1,
38
+ rules: []
39
+ }
40
+ ]
41
+
42
+ 示例4-更新整个订阅(1.7.0):
43
+ {
44
+ apps: [],
45
+ globalGroups: [],
46
+ categories: [],
47
+ }
48
+ `.trim();return(e,t)=>{const f=ue("RouterLink");return $(),J(K,null,[n(a(H),{show:z.value,"onUpdate:show":t[1]||(t[1]=i=>z.value=i),preset:"dialog",style:{width:"800px"},title:"修改内存订阅","positive-text":"确认",positiveButtonProps:{loading:a(U).loading,onClick(){a(U).invoke()}}},{default:l(()=>[n(a(F),{value:V.value,"onUpdate:value":t[0]||(t[0]=i=>V.value=i),disabled:a(U).loading,type:"textarea",class:"gkd_code",autosize:{minRows:20,maxRows:25},placeholder:a(se)},null,8,["value","disabled","placeholder"])]),_:1},8,["show","positiveButtonProps"]),n(a(H),{show:A.value,"onUpdate:show":t[5]||(t[5]=i=>A.value=i),preset:"dialog",style:{width:"800px"},title:"执行选择器","positive-text":"确认",positiveButtonProps:{loading:a(L).loading,disabled:!a(r).selectorValid,onClick(){a(L).invoke()}}},{default:l(()=>[n(a(F),{value:a(r).selector,"onUpdate:value":t[2]||(t[2]=i=>a(r).selector=i),disabled:a(L).loading,type:"textarea",class:"gkd_code",autosize:{minRows:4,maxRows:10},placeholder:"请输入合法的选择器"},null,8,["value","disabled"]),Te,n(a(j),null,{default:l(()=>[n(a(pe),{checked:a(r).quickFind,"onUpdate:checked":t[3]||(t[3]=i=>a(r).quickFind=i)},{default:l(()=>[k(" 快速查找 ")]),_:1},8,["checked"]),Be]),_:1}),ze,v("div",Ue,[n(a(ye),{value:a(r).action,"onUpdate:value":t[4]||(t[4]=i=>a(r).action=i),options:ae,class:"w-150px"},null,8,["value"]),Ae])]),_:1},8,["show","positiveButtonProps"]),v("div",Le,[n(a(j),null,{default:l(()=>[n(f,{to:"/"},{default:l(()=>[n(a(w),null,{icon:l(()=>[n(a(Re),null,{default:l(()=>[Oe]),_:1})]),_:1})]),_:1}),n(a(Ce),null,{default:l(()=>[n(a(F),{value:a(d),"onUpdate:value":t[6]||(t[6]=i=>de(d)?d.value=i:null),placeholder:"请输入设备地址",style:{minWidth:"250px"},onKeyup:he(a(s).invoke,["enter"])},null,8,["value","onKeyup"]),n(a(w),{onClick:a(s).invoke,loading:a(s).loading},{default:l(()=>[k(" 刷新连接 ")]),_:1},8,["onClick","loading"])]),_:1}),m.value?($(),J(K,{key:0},[v("div",je,fe(`已连接 ${m.value.manufacturer} Android ${m.value.release}`),1),n(a(w),{onClick:a(x).invoke,loading:a(x).loading},{default:l(()=>[k(" 快照 ")]),_:1},8,["onClick","loading"]),n(a(w),{onClick:a(u).invoke,loading:a(u).loading},{default:l(()=>[k(" 下载设备所有快照 ")]),_:1},8,["onClick","loading"]),n(a(w),{onClick:t[7]||(t[7]=i=>z.value=!0)},{default:l(()=>[k(" 修改内存订阅 ")]),_:1}),n(a(w),{onClick:t[8]||(t[8]=i=>A.value=!0)},{default:l(()=>[k(" 执行选择器 ")]),_:1})],64)):ve("",!0)]),_:1}),n(a(Se),{striped:"",flexHeight:"",data:h.value,columns:ee,pagination:a(_),"onUpdate:sorter":Z,size:"small",class:"flex-1",scrollX:1200},null,8,["data","pagination"])])],64)}}});export{$e as default};
49
+ //# sourceMappingURL=DevicePage-BkCVC2MY.js.map