breeze-plugin-nhentai 0.0.1 → 0.0.2

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.
@@ -1 +1 @@
1
- (()=>{"use strict";var e={};e.d=(t,n,a)=>{var r=(n,a)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,[a]:n[r]})};r(n,"get"),r(a,"value")},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{default:()=>R});let n="416598d0-84d0-4de9-8ec5-e74816e768f2";function a(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:e}function r(e,t={},n={}){return{name:String(null!=e?e:""),onTap:t,extern:n}}function l(e={}){var t,n,a,r,i;return{id:String(null!=(t=e.id)?t:""),url:String(null!=(n=e.url)?n:"").trim()||"",name:String(null!=(a=e.name)?a:""),path:String(null!=(r=e.path)?r:"").trim()||"placeholder/image-404.png",extern:null!=(i=e.extern)?i:{}}}let i="https://nhentai.net",o="https://nhentai.net/api/v2",u="https://t3.nhentai.net",s="main";function c(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function p(e){return Array.isArray(e)?e:[]}function d(e,t=0){let n=Number(e);return Number.isFinite(n)?n:t}function m(e){return String(null!=e?e:"").trim()}function h(e,t){let n=m(t);return n?/^https?:\/\//i.test(n)?n:`${e}/${n.replace(/^\/+/,"")}`:""}function g(e){let t=d(e);if(!t)return"";let n=new Date(1e3*t);return Number.isNaN(n.getTime())?"":n.toISOString().slice(0,10)}function y(e){if("string"==typeof e)return e.trim();let t=c(e),n=c(t.title||e);return m(t.pretty_title)||m(t.japanese_title)||m(t.english_title)||m(n.pretty)||m(n.english)||m(n.japanese)||"Untitled"}function f(e){let t=c(e),n=c(t.title||e);return m(t.japanese_title)||m(t.english_title)||m(n.japanese)||m(n.english)||""}function v(e,t){return e.filter(e=>e.type===t).map(e=>m(e.name)).filter(Boolean)}async function b(e,t=3e4){let n=await fetch(e,{headers:{Accept:"application/json",Referer:`${i}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(t)});if(!n.ok)throw Error(`nhentai 请求失败: HTTP ${n.status}`);return await n.json()}async function x(e){let t=m(e);if(!t)throw Error("comicId 不能为空");return b(`${o}/galleries/${encodeURIComponent(t)}?include=related,favorite`)}function w(e){return m(e.id)}function S(e){var t;return p(e.pages).length||d(null!=(t=e.num_pages)?t:e.page_count)}function $(e){let t=w(e),n=c(e.cover),a=m(n.thumbnail)||m(n.path)||m(e.thumbnail)||m(e.cover_url);return l({id:t,url:h(u,a),name:`${t||"cover"}.jpg`,path:a||`gallery/${t}/cover.jpg`,extern:{path:a}})}function B(e){let t=p(e.tags),a=[],l=(e,t,l)=>{var i;let o=(i=t=>r(t,{type:"openSearch",payload:{source:n,keyword:`${e}:"${t.replace(/"/g,'\\"')}"`}}),{type:e,name:t,value:(Array.isArray(l)?l:null==l?[]:[l]).map(e=>String(null!=e?e:"").trim()).filter(e=>e.length>0).map(e=>i?i(e):r(e))});o.value.length>0&&a.push(o)};return l("language","语言",v(t,"language")),l("artist","作者",v(t,"artist")),l("group","社团",v(t,"group")),l("parody","原作",v(t,"parody")),l("character","角色",v(t,"character")),l("category","分类",v(t,"category")),l("tag","标签",v(t,"tag")),a}function k(e){var t;let a=w(e),r=y(e),l=S(e),o=g(e.upload_date);return{source:n,id:a,title:r,subtitle:[l?`${l} pages`:"",o].filter(Boolean).join(" / "),finished:!0,likesCount:d(null!=(t=e.num_favorites)?t:e.favorites),viewsCount:0,updatedAt:o,cover:$(e),metadata:B(e),raw:e,extern:{webUrl:`${i}/g/${a}/`}}}function _(e){let t=k(e),n=t.metadata.flatMap(e=>e.value).slice(0,6);return{...t,metadata:n}}function j(e){return{id:s,requestId:s,logicalKey:s,storageChapterId:w(e)||s,name:"本篇",order:1,extern:{}}}function A(e){return{...j(e),pages:p(e.pages).map((e,t)=>{var n,a;let r=m(e.path),l=d(e.number,t+1),i=r.split("/").pop()||`${l}.jpg`;return{id:String(l),name:i,path:r,url:h("https://i3.nhentai.net",r),extern:{thumbnail:h(u,e.thumbnail),width:null!=(n=e.width)?n:null,height:null!=(a=e.height)?a:null}}})}}async function I(e={}){var t,r;let l,i,u,s=Math.max(1,d(e.page,1)),c=(r=m(e.keyword),[r||"all",...(l=[m(a(e.extern).languages)].filter(Boolean).slice(0,1)).includes("all")||0===l.length?[]:Array.from(new Set(l))].join(" ").trim()),h=(i=m(a(e.extern).sortBy),new Set(["date","popular","popular-today","popular-week","popular-month"]).has(i)?i:"date"),g=await b(((u=new URLSearchParams).set("query",c),u.set("page",String(s)),u.set("sort",h),`${o}/search?${u.toString()}`)),y=Math.max(1,d(g.num_pages,1)),f=d(g.total,p(g.result).length),v=p(g.result).map(k),x={page:s,pages:y,total:f,hasReachedMax:s>=y};return{source:n,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"searchResult",source:n,list:"comicGrid"},data:{paging:x,items:v},paging:x,items:v}}async function C(e={}){var t;let a=await I(e);return{source:n,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:n},data:{items:a.items,hasReachedMax:a.paging.hasReachedMax}}}let R={getInfo:async function(){return{name:"nhentai",uuid:n,iconUrl:"https://raw.githubusercontent.com/deretame/Breeze-plugin-nhentai/main/assets/Nhentai_idAD-FU-t__1.svg",creator:{name:"Breeze plugin",describe:"nhentai source adapter"},describe:"nhentai 漫画源插件",version:"0.0.1",updateUrl:"https://api.github.com/repos/deretame/Breeze-plugin-nhentai/releases/latest",home:"https://github.com/deretame/Breeze-plugin-nhentai",npmName:"breeze-plugin-nhentai",function:[{id:"latest",title:"最新",action:{type:"openComicList",payload:{scene:{title:"nhentai",source:n,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}}]}},searchComic:I,getComicDetail:async function(e={}){var t,a;let o,u,s,c,h,b,k=m(e.comicId),A=await x(k);return{source:n,comicId:k,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicDetail",source:n},data:{normal:(o=w(A),u=y(A),s=m(A.japanese_title)||f(A),v(p(A.tags),"artist"),c=S(A),h=g(A.upload_date),b=[s&&s!==u?r(`Japanese: ${s}`):null,o?r(`ID: ${o}`):null,null!=A.media_id?r(`Media ID: ${m(A.media_id)}`):null,c?r(`${c} pages`):null,h?r(h):null].filter(Boolean),{comicInfo:{id:o,title:u,titleMeta:b,creator:{id:"",name:"",avatar:l({id:"",url:"",name:"",path:"",extern:{}}),onTap:{},extern:{}},description:f(A),cover:$(A),metadata:B(A),extern:{webUrl:`${i}/g/${o}/`}},eps:[j(A)],recommend:p(A.related).map(_),totalViews:0,totalLikes:d(null!=(a=A.num_favorites)?a:A.favorites),totalComments:0,isFavourite:!!A.is_favorited,isLiked:!1,allowComments:!0,allowLike:!1,allowCollected:!1,allowDownload:!0,extern:{}}),raw:A}}},getReadSnapshot:async function(e={}){var t;let a=m(e.comicId),r=await x(a),l=A(r),o=j(r);return{source:n,extern:null!=(t=e.extern)?t:null,data:{comic:{id:w(r),source:n,title:y(r),extern:{webUrl:`${i}/g/${w(r)}/`}},chapter:l,chapters:[{id:o.id,name:o.name,order:o.order,extern:o.extern}]}}},getChapter:async function(e={}){var t;let a=m(e.comicId),r=await x(a),l=A(r);return{source:n,comicId:a,chapterId:s,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"chapterContent",source:n},data:{comic:{id:w(r),source:n,title:y(r),extern:{webUrl:`${i}/g/${w(r)}/`}},chapter:l,chapters:[j(r)]}}},fetchImageBytes:async function({url:e="",timeoutMs:t=3e4}={}){let n=m(e);if(!n)throw Error("url 不能为空");let a=await fetch(n,{headers:{Referer:`${i}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(t)});if(!a.ok)throw Error(`图片请求失败: HTTP ${a.status}`);return new Uint8Array(await a.arrayBuffer())},getAdvancedSearchScheme:async function(){return{source:n,scheme:{version:"1.0.0",type:"advancedSearch",title:"高级搜索",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date"},{label:"最热",value:"popular"},{label:"今日热门",value:"popular-today"},{label:"本周热门",value:"popular-week"},{label:"本月热门",value:"popular-month"}]},{key:"languages",kind:"choice",label:"语言",options:[{label:"所有",value:"all"},{label:"仅中文",value:"chinese"},{label:"仅日文",value:"japanese"},{label:"仅英文",value:"english"}]}]},data:{values:{sortBy:"date",languages:"all"}}}},getComicListSceneBundle:async function(){return{source:n,scheme:{version:"1.0.0",type:"comicListSceneBundle"},data:{scene:{title:"nhentai",source:n,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},getRankingData:C,getRankingFilterBundle:async function(){return{source:n,scheme:{version:"1.0.0",title:"排序",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date",result:{extern:{sortBy:"date"}}},{label:"最热",value:"popular",result:{extern:{sortBy:"popular"}}},{label:"今日热门",value:"popular-today",result:{extern:{sortBy:"popular-today"}}},{label:"本周热门",value:"popular-week",result:{extern:{sortBy:"popular-week"}}},{label:"本月热门",value:"popular-month",result:{extern:{sortBy:"popular-month"}}}]}]},data:{values:{sortBy:"date"}}}},getCommentFeed:async function(e={}){var t;let a=m(e.comicId);if(!a)throw Error("comicId 不能为空");let r=(await b(`${o}/galleries/${encodeURIComponent(a)}/comments`)).map((e,t)=>{let n=c(e.poster),a=m(n.avatar_url);return{id:m(e.id)||`comment-${t+1}`,author:{name:m(n.username)||"anonymous",avatar:{url:a||"",path:a}},content:m(e.body),createdAt:g(e.post_date),replyCount:0,replies:[],extern:{}}});return{source:n,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"commentFeed"},data:{topItems:[],items:r,paging:{hasReachedMax:!0},replyMode:"embedded",canComment:{comic:!1,reply:!1}}}},getSettingsBundle:async function(){return{source:n,scheme:{version:"1.0.0",type:"settings",sections:[]},data:{canShowUserInfo:!1,values:{}}}}};module.exports=t})();
1
+ (()=>{"use strict";var e={};e.d=(t,r,n)=>{var a=(r,n)=>{for(var a in r)e.o(r,a)&&!e.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,[n]:r[a]})};a(r,"get"),a(n,"value")},e.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var t={};e.r(t),e.d(t,{default:()=>eH});var r={},n=function(e,t,n,a,i){var o=new Worker(r[t]||(r[t]=URL.createObjectURL(new Blob([e+';addEventListener("error",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'],{type:"text/javascript"}))));return o.onmessage=function(e){var t=e.data,r=t.$e$;if(r){var n=Error(r[0]);n.code=r[1],n.stack=r[2],i(n,null)}else i(null,t)},o.postMessage(n,a),o},a=Uint8Array,i=Uint16Array,o=Int32Array,l=new a([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),u=new a([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),s=new a([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),c=function(e,t){for(var r=new i(31),n=0;n<31;++n)r[n]=t+=1<<e[n-1];for(var a=new o(r[30]),n=1;n<30;++n)for(var l=r[n];l<r[n+1];++l)a[l]=l-r[n]<<5|n;return{b:r,r:a}},f=c(l,2),p=f.b,d=f.r;p[28]=258,d[258]=28;var h=c(u,0),g=h.b;h.r;for(var m=new i(32768),v=0;v<32768;++v){var y=(43690&v)>>1|(21845&v)<<1;y=(61680&(y=(52428&y)>>2|(13107&y)<<2))>>4|(3855&y)<<4,m[v]=((65280&y)>>8|(255&y)<<8)>>1}for(var w=function(e,t,r){for(var n,a=e.length,o=0,l=new i(t);o<a;++o)e[o]&&++l[e[o]-1];var u=new i(t);for(o=1;o<t;++o)u[o]=u[o-1]+l[o-1]<<1;if(r){n=new i(1<<t);var s=15-t;for(o=0;o<a;++o)if(e[o])for(var c=o<<4|e[o],f=t-e[o],p=u[e[o]-1]++<<f,d=p|(1<<f)-1;p<=d;++p)n[m[p]>>s]=c}else for(n=new i(a),o=0;o<a;++o)e[o]&&(n[o]=m[u[e[o]-1]++]>>15-e[o]);return n},b=new a(288),v=0;v<144;++v)b[v]=8;for(var v=144;v<256;++v)b[v]=9;for(var v=256;v<280;++v)b[v]=7;for(var v=280;v<288;++v)b[v]=8;for(var x=new a(32),v=0;v<32;++v)x[v]=5;var $=w(b,9,1),S=w(x,5,1),k=function(e){for(var t=e[0],r=1;r<e.length;++r)e[r]>t&&(t=e[r]);return t},P=function(e,t,r){var n=t/8|0;return(e[n]|e[n+1]<<8)>>(7&t)&r},B=function(e,t){var r=t/8|0;return(e[r]|e[r+1]<<8|e[r+2]<<16)>>(7&t)},C=function(e){return(e+7)/8|0},A=function(e,t,r){return(null==t||t<0)&&(t=0),(null==r||r>e.length)&&(r=e.length),new a(e.subarray(t,r))},I=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],_=function(e,t,r){var n=Error(t||I[e]);if(n.code=e,Error.captureStackTrace&&Error.captureStackTrace(n,_),!r)throw n;return n},R=function(e,t,r,n){var i=e.length,o=n?n.length:0;if(!i||t.f&&!t.l)return r||new a(0);var c=!r,f=c||2!=t.i,d=t.i;c&&(r=new a(3*i));var h=function(e){var t=r.length;if(e>t){var n=new a(Math.max(2*t,e));n.set(r),r=n}},m=t.f||0,v=t.p||0,y=t.b||0,b=t.l,x=t.d,I=t.m,R=t.n,j=8*i;do{if(!b){m=P(e,v,1);var U=P(e,v+1,3);if(v+=3,U)if(1==U)b=$,x=S,I=9,R=5;else if(2==U){var M=P(e,v,31)+257,L=P(e,v+10,15)+4,E=M+P(e,v+5,31)+1;v+=14;for(var D=new a(E),T=new a(19),z=0;z<L;++z)T[s[z]]=P(e,v+3*z,7);v+=3*L;for(var O=k(T),F=(1<<O)-1,q=w(T,O,1),z=0;z<E;){var K=q[P(e,v,F)];v+=15&K;var N=K>>4;if(N<16)D[z++]=N;else{var W=0,H=0;for(16==N?(H=3+P(e,v,3),v+=2,W=D[z-1]):17==N?(H=3+P(e,v,7),v+=3):18==N&&(H=11+P(e,v,127),v+=7);H--;)D[z++]=W}}var J=D.subarray(0,M),G=D.subarray(M);I=k(J),R=k(G),b=w(J,I,1),x=w(G,R,1)}else _(1);else{var N=C(v)+4,V=e[N-4]|e[N-3]<<8,Q=N+V;if(Q>i){d&&_(0);break}f&&h(y+V),r.set(e.subarray(N,Q),y),t.b=y+=V,t.p=v=8*Q,t.f=m;continue}if(v>j){d&&_(0);break}}f&&h(y+131072);for(var X=(1<<I)-1,Y=(1<<R)-1,Z=v;;Z=v){var W=b[B(e,v)&X],ee=W>>4;if((v+=15&W)>j){d&&_(0);break}if(W||_(2),ee<256)r[y++]=ee;else if(256==ee){Z=v,b=null;break}else{var et=ee-254;if(ee>264){var z=ee-257,er=l[z];et=P(e,v,(1<<er)-1)+p[z],v+=er}var en=x[B(e,v)&Y],ea=en>>4;en||_(3),v+=15&en;var G=g[ea];if(ea>3){var er=u[ea];G+=B(e,v)&(1<<er)-1,v+=er}if(v>j){d&&_(0);break}f&&h(y+131072);var ei=y+et;if(y<G){var eo=o-G,el=Math.min(G,ei);for(eo+y<0&&_(3);y<el;++y)r[y]=n[eo+y]}for(;y<ei;++y)r[y]=r[y-G]}}t.l=b,t.p=Z,t.b=y,t.f=m,b&&(m=1,t.m=I,t.d=x,t.n=R)}while(!m);return y!=r.length&&c?A(r,0,y):r.subarray(0,y)},j=new a(0),U=function(e,t){var r={};for(var n in e)r[n]=e[n];for(var n in t)r[n]=t[n];return r},M=function(e,t,r){for(var n=e(),a=e.toString(),i=a.slice(a.indexOf("[")+1,a.lastIndexOf("]")).replace(/\s+/g,"").split(","),o=0;o<n.length;++o){var l=n[o],u=i[o];if("function"==typeof l){t+=";"+u+"=";var s=l.toString();if(l.prototype)if(-1!=s.indexOf("[native code]")){var c=s.indexOf(" ",8)+1;t+=s.slice(c,s.indexOf("(",c))}else for(var f in t+=s,l.prototype)t+=";"+u+".prototype."+f+"="+l.prototype[f].toString();else t+=s}else r[u]=l}return t},L=[],E=function(e){var t=[];for(var r in e)e[r].buffer&&t.push((e[r]=new e[r].constructor(e[r])).buffer);return t},D=function(e,t,r,a){if(!L[r]){for(var i="",o={},l=e.length-1,u=0;u<l;++u)i=M(e[u],i,o);L[r]={c:M(e[l],i,o),e:o}}var s=U({},L[r].e);return n(L[r].c+";onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage="+t.toString()+"}",r,s,E(s),a)},T=function(){return[a,i,o,l,u,s,p,g,$,S,m,I,w,k,P,B,C,A,_,R,W,z,O]},z=function(e){return postMessage(e,[e.buffer])},O=function(e){return e&&{out:e.size&&new a(e.size),dictionary:e.dictionary}},F=function(e,t,r,n,a,i){var o=D(r,n,a,function(e,t){o.terminate(),i(e,t)});return o.postMessage([e,t],t.consume?[e.buffer]:[]),function(){o.terminate()}},q=function(e,t){return e[t]|e[t+1]<<8},K=function(e,t){return(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0},N=function(e,t){return K(e,t)+0x100000000*K(e,t+4)};function W(e,t){return R(e,{i:2},t&&t.out,t&&t.dictionary)}var H="u">typeof TextDecoder&&new TextDecoder;try{H.decode(j,{stream:!0})}catch(e){}var J=function(e){for(var t="",r=0;;){var n=e[r++],a=(n>127)+(n>223)+(n>239);if(r+a>e.length)return{s:t,r:A(e,r-1)};a?3==a?t+=String.fromCharCode(55296|(n=((15&n)<<18|(63&e[r++])<<12|(63&e[r++])<<6|63&e[r++])-65536)>>10,56320|1023&n):1&a?t+=String.fromCharCode((31&n)<<6|63&e[r++]):t+=String.fromCharCode((15&n)<<12|(63&e[r++])<<6|63&e[r++]):t+=String.fromCharCode(n)}},G=function(e,t,r){var n=q(e,t+28),a=q(e,t+30),i=function(e,t){if(t){for(var r="",n=0;n<e.length;n+=16384)r+=String.fromCharCode.apply(null,e.subarray(n,n+16384));return r}if(H)return H.decode(e);var a=J(e),i=a.s,r=a.r;return r.length&&_(8),i}(e.subarray(t+46,t+46+n),!(2048&q(e,t+8))),o=t+46+n,l=V(e,o,a,r,K(e,t+20),K(e,t+24),K(e,t+42)),u=l[0],s=l[1],c=l[2];return[q(e,t+10),u,s,i,o+a+q(e,t+32),c]},V=function(e,t,r,n,a,i,o){var l=0xffffffff==a,u=0xffffffff==i,s=0xffffffff==o,c=t+r;if(n&&l+u+s){for(;t+4<c;t+=4+q(e,t+2))if(1==q(e,t))return[l?N(e,t+4+8*u):a,u?N(e,t+4):i,s?N(e,t+4+8*(u+l)):o,1];n<2&&_(13)}return[a,i,o,0]},Q="function"==typeof queueMicrotask?queueMicrotask:"function"==typeof setTimeout?setTimeout:function(e){e()};let X="416598d0-84d0-4de9-8ec5-e74816e768f2";function Y(e){return!e||"object"!=typeof e||Array.isArray(e)?{}:e}function Z(e,t={},r={}){return{name:String(null!=e?e:""),onTap:t,extern:r}}function ee(e={}){var t,r,n,a,i;return{id:String(null!=(t=e.id)?t:""),url:String(null!=(r=e.url)?r:"").trim()||"",name:String(null!=(n=e.name)?n:""),path:String(null!=(a=e.path)?a:"").trim()||"placeholder/image-404.png",extern:null!=(i=e.extern)?i:{}}}let et=(e,t)=>bridge.call("cache.set",e,t),er=e=>bridge.call("native.put",e),en="https://nhentai.net",ea="https://nhentai.net/api/v2",ei="main",eo="apiKey",el="cdnBases",eu={image:"https://i3.nhentai.net",thumb:"https://t3.nhentai.net"},es=[],ec=!1;function ef(e){return e&&"object"==typeof e&&!Array.isArray(e)?e:{}}function ep(e){return Array.isArray(e)?e:[]}function ed(e,t=0){let r=Number(e);return Number.isFinite(r)?r:t}function eh(e){return String(null!=e?e:"").trim()}function eg(e,t){let r=eh(t);return r?/^https?:\/\//i.test(r)?r:`${e}/${r.replace(/^\/+/,"")}`:""}function em(e){let t=ed(e);if(!t)return"";let r=new Date(1e3*t);return Number.isNaN(r.getTime())?"":r.toISOString().slice(0,10)}function ev(e){if("string"==typeof e)return e.trim();let t=ef(e),r=ef(t.title||e);return eh(t.pretty_title)||eh(t.japanese_title)||eh(t.english_title)||eh(r.pretty)||eh(r.english)||eh(r.japanese)||"Untitled"}function ey(e){let t=ef(e),r=ef(t.title||e);return eh(t.japanese_title)||eh(t.english_title)||eh(r.japanese)||eh(r.english)||""}function ew(e,t){return e.filter(e=>e.type===t).map(e=>eh(e.name)).filter(Boolean)}function eb(e,t){let r=eh(Y(e)[t]).trim();return r?r.toLowerCase().startsWith(`${t}:`)?r:`${t}:${r}`:""}async function ex(e,t=3e4,r){let n={},a=3e4;"number"==typeof t?a=t:(n=t,a="number"==typeof r?r:3e4);let i=await eA(n),o={Accept:"application/json",Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"};i&&(o.Authorization=`Key ${i}`);let l=await fetch(e,{headers:o,signal:AbortSignal.timeout(a)});if(!l.ok)throw Error(`nhentai 请求失败: HTTP ${l.status}`);return await l.json()}async function e$(e){let t=eh(e);if(!t)throw Error("comicId 不能为空");return ex(`${ea}/galleries/${encodeURIComponent(t)}?include=related,favorite`)}async function eS(e){let t=eh(e);if(!t)return 0;try{let e=await ex(`${ea}/galleries/${encodeURIComponent(t)}/comments/count`);return ed(e,0)}catch{return 0}}async function ek(){let e=eh((await ex(`${ea}/galleries/random`)).id);if(!e)throw Error("nhentai 未返回随机漫画 ID");return e}async function eP(){return ep(await ex(`${ea}/galleries/popular`))}async function eB(){if(!ec){if(ec=!0,!await eA({})){es=[];return}try{let e=await ex(`${ea}/blacklist`,{},1e4);es=ep(e.tags)}catch{es=[]}}}async function eC(){ec||await eB()}async function eA(e){let t=eh(Y(e).apiKey);if(t)return t;let r=await ((e,t="")=>bridge.call("load_plugin_config",e,t))(eo,"");if(!r)return"";try{let e=JSON.parse(r),t=eh(e.value);if(t)return t}catch{}return""}async function eI(){let e=await ((e,t="")=>bridge.call("load_plugin_config",e,t))(el,"");if(!e)return null;try{let t=JSON.parse(e),r=ef(t.value),n=eh(r.image),a=eh(r.thumb);if(n&&a)return{image:n,thumb:a}}catch{}return null}async function e_(e,t){let r,n;await (r=el,n=JSON.stringify({image:e,thumb:t}),bridge.call("save_plugin_config",r,n))}async function eR(e,t=5e3){let r=Date.now();try{if((await fetch(`${e}/favicon.ico`,{method:"HEAD",signal:AbortSignal.timeout(t)})).status>=500)return null;return Date.now()-r}catch{return null}}async function ej(e,t=5e3){let r=(await Promise.all(e.map(async e=>{let r=await eR(e,t);return{url:e,latency:r}}))).filter(e=>null!=e.latency);return 0===r.length?null:(r.sort((e,t)=>e.latency-t.latency),r[0].url)}async function eU(){let e=await eI();e&&(eu.image=e.image,eu.thumb=e.thumb);let t=await ex(`${ea}/cdn`,1e4),r=ep(t.image_servers),n=ep(t.thumb_servers),[a,i]=await Promise.all([r.length>0?ej(r):Promise.resolve(null),n.length>0?ej(n):Promise.resolve(null)]);a&&(eu.image=a),i&&(eu.thumb=i),await e_(eu.image,eu.thumb)}async function eM(e,t){let r=await fetch(`${ea}/galleries/${encodeURIComponent(e)}/download?format=zip`,{method:"POST",headers:{Accept:"application/json",Authorization:`Key ${t}`,Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(6e4)});if(!r.ok)throw Error(`nhentai 下载请求失败: HTTP ${r.status}`);let n=eh((await r.json()).url);if(!n)throw Error("nhentai 未返回下载链接");return n}async function eL(e,t=12e4){let r=eh(e);if(!r)throw Error("下载链接不能为空");let n=await fetch(r,{headers:{Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(t)});if(!n.ok)throw Error(`压缩包下载失败: HTTP ${n.status}`);return new Uint8Array(await n.arrayBuffer())}async function eE(e,t){let r=Object.entries(await new Promise((e,r)=>{!function(e,t,r){r||(r=t,t={}),"function"!=typeof r&&_(7);var n=[],i=function(){for(var e=0;e<n.length;++e)n[e]()},o={},l=function(e,t){Q(function(){r(e,t)})};Q(function(){l=r});for(var u=e.length-22;0x6054b50!=K(e,u);--u)if(!u||e.length-u>65558)return l(_(13,0,1),null),i;var s=q(e,u+8);if(s){var c=s,f=K(e,u+16),p=0x7064b50==K(e,u-20);if(p){var d=K(e,u-12);(p=0x6064b50==K(e,d))&&(c=s=K(e,d+32),f=K(e,d+48))}for(var h=t&&t.filter,g=0;g<c;++g)!function(){var t=G(e,f,p),r=t[0],u=t[1],c=t[2],d=t[3],g=t[4],m=t[5],v=m+30+q(e,m+26)+q(e,m+28);f=g;var y=function(e,t){e?(i(),l(e,null)):(t&&(o[d]=t),--s||l(null,o))};if(!h||h({name:d,size:u,originalSize:c,compression:r}))if(r)if(8==r){var w,b,x=e.subarray(v,v+u);if(c<524288||u>.8*c)try{y(null,W(x,{out:new a(c)}))}catch(e){y(e,null)}else n.push((w={size:c},(b=y)||(b=w,w={}),"function"!=typeof b&&_(7),F(x,w,[T],function(e){return z(W(e.data[0],O(e.data[1])))},1,b)))}else y(_(14,"unknown compression type "+r,1),null);else y(null,A(e,v,v+u));else y(null,null)}()}else l(null,{})}(t,(t,n)=>{t?r(t):e(n)})})).filter(([e,t])=>{let r;return!(r=e.toLowerCase()).endsWith("/")&&!r.endsWith(".json")&&(r.endsWith(".jpg")||r.endsWith(".jpeg")||r.endsWith(".png")||r.endsWith(".webp")||r.endsWith(".gif")||r.endsWith(".avif")||r.endsWith(".bmp"))&&t.length>0}).sort(([e],[t])=>e.localeCompare(t,void 0,{numeric:!0,sensitivity:"base"}));if(0===r.length)throw Error("压缩包中没有找到图片文件");let n=[];for(let t=0;t<r.length;t++){let[a,i]=r[t],o=t+1,l=`${X}:${e}:${a}`,u=await er(i);await et(l,u),n.push({id:String(o),name:a,path:a,url:"",extern:{comicId:e,imageName:a,imageKey:l}})}return n}function eD(e){return eh(e.id)}function eT(e){var t;return ep(e.pages).length||ed(null!=(t=e.num_pages)?t:e.page_count)}function ez(e){let t=eD(e),r=ef(e.cover),n=eh(r.thumbnail)||eh(r.path)||eh(e.thumbnail)||eh(e.cover_url);return ee({id:t,url:eg(eu.thumb,n),name:`${t||"cover"}.jpg`,path:n||`gallery/${t}/cover.jpg`,extern:{path:n}})}function eO(e){let t=ep(e.tags),r=[],n=(e,t,n)=>{var a;let i=(a=t=>Z(t,{type:"openSearch",payload:{source:X,keyword:`${e}:"${t.replace(/"/g,'\\"')}"`}}),{type:e,name:t,value:(Array.isArray(n)?n:null==n?[]:[n]).map(e=>String(null!=e?e:"").trim()).filter(e=>e.length>0).map(e=>a?a(e):Z(e))});i.value.length>0&&r.push(i)};return n("language","语言",ew(t,"language")),n("artist","作者",ew(t,"artist")),n("group","社团",ew(t,"group")),n("parody","原作",ew(t,"parody")),n("character","角色",ew(t,"character")),n("category","分类",ew(t,"category")),n("tag","标签",ew(t,"tag")),r}function eF(e){var t;let r=eD(e),n=ev(e),a=eT(e),i=em(e.upload_date);return{source:X,id:r,title:n,subtitle:[a?`${a} pages`:"",i].filter(Boolean).join(" / "),finished:!0,likesCount:ed(null!=(t=e.num_favorites)?t:e.favorites),viewsCount:0,updatedAt:i,cover:ez(e),metadata:eO(e),raw:e,extern:{webUrl:`${en}/g/${r}/`}}}function eq(e){let t=eF(e),r=t.metadata.flatMap(e=>e.value).slice(0,6);return{...t,metadata:r}}function eK(e){return{id:ei,requestId:ei,logicalKey:ei,storageChapterId:eD(e)||ei,name:"本篇",order:1,extern:{}}}async function eN(e={}){var t,r,n;let a,i,o;await eC();let l=Math.max(1,ed(e.page,1)),u=eh(e.keyword);if(/^\d+$/.test(u)&&1===l)try{let t=await e$(u),n=eF(t),a={page:1,pages:1,total:1,hasReachedMax:!0};return{source:X,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"searchResult",source:X,list:"comicGrid"},data:{paging:a,items:[n]},paging:a,items:[n]}}catch{}let s=[u||"all",...[...(o=[eh(Y(n=e.extern).languages)].filter(Boolean).slice(0,1)).includes("all")||0===o.length?[]:o.map(e=>`language:${e}`),...es.map(e=>{let t=eh(e.type),r=eh(e.name);if(!t||!r)return"";let n=r.replace(/"/g,'\\"');return`-${t}:"${n}"`}).filter(Boolean),eb(n,"pages"),eb(n,"favorites"),eb(n,"uploaded")].filter(Boolean)].join(" ").trim(),c=(a=eh(Y(e.extern).sortBy),new Set(["date","popular","popular-today","popular-week","popular-month"]).has(a)?a:"date"),f=await ex(((i=new URLSearchParams).set("query",s),i.set("page",String(l)),i.set("sort",c),`${ea}/search?${i.toString()}`)),p=Math.max(1,ed(f.num_pages,1)),d=ed(f.total,ep(f.result).length),h=ep(f.result).map(eF),g={page:l,pages:p,total:d,hasReachedMax:l>=p};return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"searchResult",source:X,list:"comicGrid"},data:{paging:g,items:h},paging:g,items:h}}async function eW(e={}){var t;let r=await eN(e);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:r.items,hasReachedMax:r.paging.hasReachedMax}}}let eH={init:async function(){try{await eU()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:814:5","[nhentai] CDN 初始化失败:",e)}try{await eB()}catch(e){console.error("D:/Project/web/Breeze-plugin-nhentai/src/index.ts:820:5","[nhentai] 黑名单加载失败:",e)}},getInfo:async function(){return{name:"nhentai",uuid:X,iconUrl:"https://raw.githubusercontent.com/deretame/Breeze-plugin-nhentai/main/assets/Nhentai_idAD-FU-t__1.svg",creator:{name:"Breeze plugin",describe:"nhentai source adapter"},describe:"nhentai 漫画源插件",version:"0.0.2",updateUrl:"https://api.github.com/repos/deretame/Breeze-plugin-nhentai/releases/latest",home:"https://github.com/deretame/Breeze-plugin-nhentai",npmName:"breeze-plugin-nhentai",function:[{id:"latest",title:"最新",action:{type:"openComicList",payload:{scene:{title:"nhentai",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},{id:"favorites",title:"收藏",action:{type:"openComicList",payload:{scene:{title:"我的收藏",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getFavoritesData",core:{},extern:{}}}}}}},{id:"popular",title:"热门",action:{type:"openComicList",payload:{scene:{title:"今日热门",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getPopularData",core:{},extern:{}}}}}}},{id:"random",title:"手气不错",action:{type:"openComicList",payload:{scene:{title:"手气不错",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRandomData",core:{},extern:{}}}}}}}]}},searchComic:eN,getComicDetail:async function(e={}){var t,r,n;let a,i,o,l,u,s,c=eh(e.comicId),[f,p,d]=await Promise.all([eA(null!=(t=e.extern)?t:{}),e$(c),eS(c)]);return{source:X,comicId:c,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"comicDetail",source:X},data:{normal:(a=eD(p),i=ev(p),o=eh(p.japanese_title)||ey(p),ew(ep(p.tags),"artist"),l=eT(p),u=em(p.upload_date),s=[o&&o!==i?Z(`Japanese: ${o}`):null,a?Z(`ID: ${a}`):null,null!=p.media_id?Z(`Media ID: ${eh(p.media_id)}`):null,l?Z(`${l} pages`):null,u?Z(u):null].filter(Boolean),{comicInfo:{id:a,title:i,titleMeta:s,creator:{id:"",name:"",avatar:ee({id:"",url:"",name:"",path:"",extern:{}}),onTap:{},extern:{}},description:ey(p),cover:ez(p),metadata:eO(p),extern:{webUrl:`${en}/g/${a}/`}},eps:[eK(p)],recommend:ep(p.related).map(eq),totalViews:0,totalLikes:ed(null!=(n=p.num_favorites)?n:p.favorites),totalComments:d,isFavourite:!!p.is_favorited,isLiked:!1,allowComments:!0,allowLike:!1,allowCollected:!!f,allowDownload:!!f,extern:{}}),raw:p}}},getReadSnapshot:async function(e={}){var t,r;let n=eh(e.comicId),a=await e$(n),i={...eK(r=a),pages:ep(r.pages).map((e,t)=>{var r,n;let a=eh(e.path),i=ed(e.number,t+1),o=a.split("/").pop()||`${i}.jpg`;return{id:String(i),name:o,path:a,url:eg(eu.image,a),extern:{thumbnail:eg(eu.thumb,e.thumbnail),width:null!=(r=e.width)?r:null,height:null!=(n=e.height)?n:null}}})},o=eK(a);return{source:X,extern:null!=(t=e.extern)?t:null,data:{comic:{id:eD(a),source:X,title:ev(a),extern:{webUrl:`${en}/g/${eD(a)}/`}},chapter:i,chapters:[{id:o.id,name:o.name,order:o.order,extern:o.extern}]}}},getChapter:async function(e={}){var t;let r,n=eh(e.comicId);if(!n)throw Error("comicId 不能为空");let a=await eA(e.extern);if(!a)throw Error("请设置api key");let i=await eM(n,a),o=await eL(i),l=await eE(n,o),u=await e$(n),s=eK(u),c=(r=ep(u.pages),l.map((e,t)=>{var n,a;let i=r[t];if(!i)return e;let o=eh(i.path);return{...e,url:eg(eu.image,o),extern:{...e.extern,thumbnail:eg(eu.thumb,i.thumbnail),width:null!=(n=i.width)?n:null,height:null!=(a=i.height)?a:null}}})),f={...s,pages:c};return{source:X,comicId:n,chapterId:ei,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"chapterContent",source:X},data:{comic:{id:eD(u),source:X,title:ev(u),extern:{webUrl:`${en}/g/${eD(u)}/`}},chapter:f,chapters:[s]}}},fetchImageBytes:async function(e={}){let t=eh(e.url),r=eh(Y(e.extern).imageKey);if(r)try{let e=await ((e,t=null)=>bridge.call("cache.get",e,t))(r,null);if(null!=e){let t;return await (t=e,bridge.call("native.take",t))}}catch{}if(!t)throw Error("url 不能为空");let n=await fetch(t,{headers:{Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0","x-rquickjs-host-offload-binary-v1":"1"},signal:AbortSignal.timeout(e.timeoutMs||3e4)});if(!n.ok)throw Error(`图片请求失败: HTTP ${n.status}`);return new Uint8Array(await n.arrayBuffer())},getAdvancedSearchScheme:async function(){return{source:X,scheme:{version:"1.0.0",type:"advancedSearch",title:"高级搜索",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date"},{label:"最热",value:"popular"},{label:"今日热门",value:"popular-today"},{label:"本周热门",value:"popular-week"},{label:"本月热门",value:"popular-month"}]},{key:"languages",kind:"choice",label:"语言",options:[{label:"所有",value:"all"},{label:"仅中文",value:"chinese"},{label:"仅日文",value:"japanese"},{label:"仅英文",value:"english"}]},{key:"pages",kind:"text",label:"页数(例:>20、<=50)"},{key:"favorites",kind:"text",label:"收藏数(例:>=100、<50)"},{key:"uploaded",kind:"text",label:"上传时间(例:<7d、>1m、<1y)"}]},data:{values:{sortBy:"date",languages:"all"}}}},getComicListSceneBundle:async function(){return{source:X,scheme:{version:"1.0.0",type:"comicListSceneBundle"},data:{scene:{title:"nhentai",source:X,body:{type:"pluginPagedComicList",request:{fnPath:"getRankingData",core:{},extern:{sortBy:"date"}}},filter:{fnPath:"getRankingFilterBundle",extern:{}}}}}},getRankingData:eW,getFavoritesData:async function(e={}){var t,r;if(!await eA(null!=(t=e.extern)?t:{}))throw Error("请设置 nhentai API Key");let n=Math.max(1,ed(e.page,1)),a=eh(e.keyword),i=new URLSearchParams;i.set("page",String(n)),a&&i.set("q",a);let o=await ex(`${ea}/favorites?${i.toString()}`,e.extern),l=Math.max(1,ed(o.num_pages,1)),u=ep(o.result).map(eF);return{source:X,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:u,hasReachedMax:n>=l}}},getPopularData:async function(e={}){var t;let r=(await eP()).map(eF);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:r,hasReachedMax:!0}}},getRandomData:async function(e={}){var t,r;if(Math.max(1,ed(e.page,1))>1)return{source:X,extern:null!=(r=e.extern)?r:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:[],hasReachedMax:!0}};let n=await ek(),a=await e$(n);return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"comicPagedList",source:X},data:{items:[eF(a)],hasReachedMax:!0}}},getRankingFilterBundle:async function(){return{source:X,scheme:{version:"1.0.0",title:"排序",fields:[{key:"sortBy",kind:"choice",label:"排序",options:[{label:"最新",value:"date",result:{extern:{sortBy:"date"}}},{label:"最热",value:"popular",result:{extern:{sortBy:"popular"}}},{label:"今日热门",value:"popular-today",result:{extern:{sortBy:"popular-today"}}},{label:"本周热门",value:"popular-week",result:{extern:{sortBy:"popular-week"}}},{label:"本月热门",value:"popular-month",result:{extern:{sortBy:"popular-month"}}}]}]},data:{values:{sortBy:"date"}}}},getCommentFeed:async function(e={}){var t;let r=eh(e.comicId);if(!r)throw Error("comicId 不能为空");let n=Math.max(1,ed(e.page,1)),a=new URLSearchParams;a.set("page",String(n)),a.set("per_page","50");let i=await ex(`${ea}/galleries/${encodeURIComponent(r)}/comments?${a.toString()}`,e.extern),o=Math.max(1,ed(i.num_pages,1)),l=ep(i.result).map((e,t)=>{let r=ef(e.poster),n=eh(r.avatar_url),a=n?eg(eu.image,n):"";return{id:eh(e.id)||`comment-${t+1}`,author:{name:eh(r.username)||"anonymous",avatar:{url:a||"",path:n}},content:eh(e.body),createdAt:em(e.post_date),replyCount:0,replies:[],extern:{}}});return{source:X,extern:null!=(t=e.extern)?t:null,scheme:{version:"1.0.0",type:"commentFeed"},data:{topItems:[],items:l,paging:{hasReachedMax:n>=o},replyMode:"embedded",canComment:{comic:!1,reply:!1}}}},getSettingsBundle:async function(){return{source:X,scheme:{version:"1.0.0",type:"settings",sections:[{id:"account",title:"账户",fields:[{key:eo,kind:"text",label:"nhentai API Key",persist:!0}]}]},data:{canShowUserInfo:!0,values:{[eo]:await eA({})}}}},getUserInfoBundle:async function(){if(!await eA({}))return{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"未登录",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["请设置 nhentai API Key"]}};try{var e;let t=await ex(`${ea}/user`,{},1e4),r=eh(t.username)||"User",n=eh(t.avatar_url),a=n?eg(eu.image,n):"",i=[`ID: ${eh(t.id)||""}`,`Slug: ${eh(t.slug)||""}`],o=eh(t.about);o&&i.push(`简介: ${o}`);let l=eh(t.favorite_tags);return l&&i.push(`偏好标签: ${l}`),{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:r,avatar:ee({id:String(null!=(e=t.id)?e:""),url:a,name:"avatar",path:n,extern:{}}),lines:i}}}catch{return{source:X,scheme:{version:"1.0.0",type:"userInfo"},data:{title:"获取失败",avatar:ee({id:"",url:"",name:"avatar",path:"",extern:{}}),lines:["请检查 API Key 是否有效"]}}}},toggleFavorite:async function(e={}){var t;let r=await eA(null!=(t=e.extern)?t:{});if(!r)throw Error("请设置 nhentai API Key");let n=eh(e.comicId);if(!n)throw Error("comicId 不能为空");let a=!!e.currentFavorite,i=await fetch(`${ea}/galleries/${encodeURIComponent(n)}/favorite`,{method:a?"DELETE":"POST",headers:{Accept:"application/json",Authorization:`Key ${r}`,Referer:`${en}/`,"User-Agent":"Breeze-plugin-nhentai/0.1.0"},signal:AbortSignal.timeout(15e3)});if(!i.ok)throw Error(`nhentai 收藏操作失败: HTTP ${i.status}`);return{favorited:!!(await i.json()).favorited,nextStep:"none"}},listFavoriteFolders:async function(){return{items:[{id:"default",name:"默认收藏夹"}]}},moveFavoriteToFolder:async function(e={}){return{ok:!0}}};module.exports=t})();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "breeze-plugin-nhentai",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "type": "module",
5
5
  "files": [
6
6
  "dist"
@@ -13,6 +13,9 @@
13
13
  "tsx": "^4.22.4",
14
14
  "typescript": "^6.0.3"
15
15
  },
16
+ "dependencies": {
17
+ "fflate": "^0.8.3"
18
+ },
16
19
  "scripts": {
17
20
  "typecheck": "tsc --noEmit",
18
21
  "build": "pnpm typecheck && node --import tsx build/generate-version.ts && node --import tsx build/generate-manifest.ts && cross-env NODE_OPTIONS=\"--import tsx\" rspack build && node --import tsx build/generate-brotli.ts",