From 290c8483e88cc3e574304a72af042708f9f079f0 Mon Sep 17 00:00:00 2001 From: CrazyJasonwell Date: Tue, 26 Aug 2025 23:01:44 +0800 Subject: [PATCH] vault backup: 2025-08-26 23:01:44 --- .obsidian/community-plugins.json | 3 +- .obsidian/plugins/OnlyOffice/._.DS_Store | Bin 0 -> 4096 bytes .obsidian/plugins/OnlyOffice/._manifest.json | Bin 0 -> 4096 bytes .../plugins/OnlyOffice/assets/Start.docx | Bin 0 -> 21986 bytes .../plugins/OnlyOffice/assets/Start.pptx | Bin 0 -> 32505 bytes .../plugins/OnlyOffice/assets/Start.xlsx | Bin 0 -> 8473 bytes .obsidian/plugins/OnlyOffice/data.json | 12 + .../plugins/OnlyOffice/embedded-editor.html | 59 + .obsidian/plugins/OnlyOffice/main.js | 12295 ++++++++++++++++ .obsidian/plugins/OnlyOffice/manifest.json | 10 + .obsidian/plugins/cubox-sync/data.json | 2 +- .../plugins/recent-files-obsidian/data.json | 16 +- .../plugins/update-time-on-edit/data.json | 2 +- .obsidian/workspace.json | 49 +- 01-工作日记/2025-08-26.md | 3 +- 08-Inbox/Office/Start.docx | Bin 0 -> 21986 bytes 08-Inbox/Office/Start.pptx | Bin 0 -> 32505 bytes 08-Inbox/Office/Start.xlsx | Bin 0 -> 8473 bytes 18 files changed, 12402 insertions(+), 49 deletions(-) create mode 100644 .obsidian/plugins/OnlyOffice/._.DS_Store create mode 100644 .obsidian/plugins/OnlyOffice/._manifest.json create mode 100644 .obsidian/plugins/OnlyOffice/assets/Start.docx create mode 100644 .obsidian/plugins/OnlyOffice/assets/Start.pptx create mode 100644 .obsidian/plugins/OnlyOffice/assets/Start.xlsx create mode 100644 .obsidian/plugins/OnlyOffice/data.json create mode 100644 .obsidian/plugins/OnlyOffice/embedded-editor.html create mode 100644 .obsidian/plugins/OnlyOffice/main.js create mode 100644 .obsidian/plugins/OnlyOffice/manifest.json create mode 100644 08-Inbox/Office/Start.docx create mode 100644 08-Inbox/Office/Start.pptx create mode 100644 08-Inbox/Office/Start.xlsx diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index a605fbc1..7613edd6 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -60,5 +60,6 @@ "generate-timeline", "update-time-on-edit", "timelines-revamped", - "mehrmaid" + "mehrmaid", + "onlyoffice" ] \ No newline at end of file diff --git a/.obsidian/plugins/OnlyOffice/._.DS_Store b/.obsidian/plugins/OnlyOffice/._.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..28c42fb20a1f27e695fb64323501fc6476578b13 GIT binary patch literal 4096 zcmZQz6=P>$Vqox1Ojhs@R)|o50+1L3ClDJkFz{^v(m+1nBL)UWIhYCu0iY;W;207T z1d#ygV5q>VXjE`C1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E1%90H6$^FSC3 zQ-~jUS;+X>KLM$fsg^+ zl1%HgB$Kp$A6Q9pEyT6~YX)|D$S#^k2q*fi7;7R}?I#vN%W(kv#AsK98B=%8)AMBrM5!Ed09bFzj0h8g^AjW0?dQg!{fh zC~~bTAyq=5R#jTnbZf+MY|C)nDmAPscMXa#)tf{%t+@`he4eXrg>OBDkE$ar{LJ3u zT;@2;x3LkE`e3vy;$!_>hqYc3W>{?2o_(_!4U$WHnAleKmiFQMq`7EZo=xT&h|+AS z>U`aTd~hT#MeA)Jb;ZR=Yf2j|pL@3(4|PP#Eo-HOneChzk->HB-+9>(yUG(wF&y;g z-Yga@?90*J`DS#3rp)XFezTp8Z~#fOFZ@9#U}0xLqw9c1-H)~e_wC#^r|lb0dSTyU zC!W*pG1QrPtIJ*&ch*Zm!&a#ER-Mf)ZqLr_c5i6vK$k-u%a(8LpW!}a&DLVn?9cp0 zu%N;gwBd>i?Vp9WnU8~P)NoCQ!sM;>2Tqbd(>)|o|4PT35De~Oe&bcCn|D1K7uATil=dlM3tCI;R_NOaTKiM@mMhaRJgLD$fSbGu#CWS@b&&L`B|aQr@aRX_8;lf zG(UoNV~4;FfgJ)n1a=7Q5ZEEGL*V~}K;9WXb%)@fHx;s=yWTiU883|EbY2km7eC$b gk|0aYsLbgAX760&Dkz9RL6T literal 0 HcmV?d00001 diff --git a/.obsidian/plugins/OnlyOffice/assets/Start.docx b/.obsidian/plugins/OnlyOffice/assets/Start.docx new file mode 100644 index 0000000000000000000000000000000000000000..4c0241a3eadbdb073dbed18fddba738b9b7e95a4 GIT binary patch literal 21986 zcmcG019)BCw)T!~G`5X~jcwbuZKJV`#nG_Z?%*xz-#jb1nsGFmQChAAiJv`DsWcCMW>l*9Q%_Q(M^H&c)QuMPJ3!!PHro z!Nb;uhadPw|$tVVrXM;XUa?B zY3fYE&&Tr{fe2`8=gdoD;o{=J&B*9%Y+-6^=*(d6U}^_EVrK7TYv=;pbTVgjFf_I{ zG&f~rVPaxuH2y;cy~{5ZBz!y~re=n&HZDX&q8>nXe+Y56H6tPVQ|>P=UJ^^&UjQET zzm72e$3_lz=KrD5ul@gtiIs!te{A#nz<*){bnc&c3>_S7ER79afI(#Zb@V?mbTYMZ z{x2-u>`eYCc=Ue;jsa--8{OH$(!rVbzo0O(wELei*qfPI8k?Hf8@t*9n+Aiujj6nm zm8r4IFCXNA4a3RO#FU6g!O+P?&d?T^2S(tj3QqP8&cHl6nf_`+|1-Y7Jo;r#?*Ifc zb#k#Z{hLq!H6<|4|8vHF^3e2GD>E@Q`R|gu+dG*s0xj(9T}++-*X+O0fL2Zw)TM?q$mO`ZV$zveUp_Ei-_Bb)z^ME_IR|DEH1gZ|el z+)a&?OJ;1MO*v>_rJmaf0hjAKau~n zhQD30{>N9Kf7LMmhHPtSY4?{9#@}~5K7~JTu+YHUDKUWa0nlL!1^^tw001b!J-@r@ zUoQOWqRndScI%wTFBrlzuBKda1dE&kSyip{-&#I45DG{pi-znW3xAHixx<$#*lQEp zv7Mz1U-=Bu*u1_*2Z^eNVceM+V6&AiYz?VIfc6XRcS*sjlEZGjfg|vY+Lt;(i59lGRgYq| z7hwskYhmG5mGd`?nczp;_`63`Ckoo7O-{F+Bi7-)pN5&C#R>`1mWEMc0jIh>^08#9dwheRjDy$koR;N2(c2qy@b^GaEz)PliQi9TB<+|EA&IoB zaX*F&$UIXTtk2t^D>Pw`GLq*s8D0SU3VZ4-N1`pptRkaDQ><37hhbghZQ^;*2OhC! z)N%w7nVEnx%FJ4oSK1Bn9oZzFZU?tbo5r>%?IK$ZAQ!yLKkJW;^^DW9^Qn(Zq1$$| zEX669S`T`7Z_G4yr;md4weLHzvVw>Z$Ltq9GH@nh7)6FcOVpg9b@9kJu!9aBY+smR ze&A1g2>vLPf=n;(kF6KSGjRv#7uCAW5Nvr(j%o=}*5U5jV3?+`L@R?dcB<*x6N|Q4 zQ>wV6T!RS|(Q!iGYBM{=$H?=HhASgi36X?6M!us2<5^sk{&r z-{E_`AH+#)oU-oSZqAyJI@_M2#(lk0~9A25k`ed0n$pO>c@nw5!d;WnP`Nq~}KXhA(&!*U11bSJ{OtP-c*Vwzz88S6UrG|4~t}~LnKldm6$YWe3 zzl;VE!4z2C64w)_meU;9a~Ml>j41lk=RA+hqe0+ z+CTP9uXWtML|~t61%7@FiGTOazq{7|>Yl1Gl86IL@S?S-p7P2XL@KWF8n>W*AVSt_ z5;6FzC?In3L$Ujxw(P^zzf7Wu@+w0;RX_&6zdEx#-gd)xr)0{+o3b+=K-?;0x-FTK z9eILKrV(X>5L(+qTuwGJu9l;PEX5EnO61iDk{11J#5#c&N~uD>P`4_qOK9tmyB)rt z?sG|qr#U^Ksc3Wc{j2^P#6S9=i*tL}4FUkTLjK+L<*xz5@9RtQy4@}ja+v<`H@^PZ zhRPI-(swahcXmtXe1Kt2F*a6chc3^jSbV}vJJt3Gufcw%uWv}kUpAguRb3ROtwW;8 zC(=b>$qsPtv7ep}?XIFk`Jl%{L-SbNRB|_MIAkk`px{4?g9ARXtC>~7_m^aQYtoQD z&s!YN8l$A5B8(QyDqTV9POCejx|5zN&|FASl*p{d*1|WQ7>RFl2^X&Ou8X$ z`%a{l>>=BL;L}~L0A(PB42q=PIV8YKW$CU zQb($A*eL*yPx_ky4SOn)roMV`4jO_hnnUc%GrCDd(#=eSBu^m;y-{?!@s5tOgHcGB z$;e0G?SMJ65ujx>N!aBSy zbGM%2de>jWPi~YlM*N;&|1sBuP|PC)pa4MG-{<;ow<2I;Emr+%pT&gix8)!BoQt)_ zFr^?ts8)S4SR}F8WIl>#fbqn$9%APIVj~eyHlIqtc#r?-qEr7zmzPJ9YZI6;L`5{& zO}a=P=YdcP_T%I3x{V~sY5Hf)7+97DC~1P_O7^J)4%Fl*K2J!~1+|-KmFeSTr3u>j z$?4*4NP0}WX+*n8b6RZrV*!Wl#6x8x4d6o=rBCwEv; zCPK10`YO4Wp-D4@#%-RXc@w8vwW7>P1tMUL!{+)S<*a3AaW~L*QG> z#QEm$k~Y4={bOS);2m>kWCZ|3;vfJ>e_j0kZPfVPS37B!J@HOoadEK6Q>y6vwZ*+~ zGtE}q!;I(r{)|;rQMW-=sk+F?`(VYtOY$2;NW8!|iUXC9QfYFMz)6t0PW@RxKuCR}+Mbas*Q=k@XRiAC(~ z?eTec@kzg6!K{7NPVUVMK78<4cy&^+DCNbgJ0j`f>Bk+{YR>f`A<{Uztz+*8K3l!m z!{wfcrh8j|jc&YqM<<>VVZSZR@4Vt!o5dLh8&*f2XoUBpFF$Y7T$oJbu1n@egAHG6 z55G4D!c+xb&i6S#zr^XgKM6N&lyt~@vq<22k1h7Djb0?V-gfZfH|itt6Moj8_U>e2!K9+y;N9w?vWAh4ozu zqgQ6WTpGf+I?duwd}$Tf{vOY}oil_LBwu;RIxqZQ zvVEImvixq4@q3=0TRd2>{ChWjV&rPW7jYZEMp8JX@m6gW<4C;nbc?Nr-%i98TM=Zz zdRxAxKHQK;a(LFJN}jMBZ-*hJ>2LMq-tWKrJX3f_Es4*WuIF#BGrxf#$;eQ8scSsU;IfktJtgRk3%N65as zB8>9Ebk(gz4q88+J9r{o*%VGs4i^l2pS+Z1uqq-RFQ2c`@i|77qBHqb6Yu7(=F@`3`sM zPqXT0W}NUkqq6qy=uM~iW$ycZf5L&UmV1kkqk8|ZCG zA4`2I3E*ZMCLfgjE@$J@ENBrGxJm%}{upe0F`f}f!=e$r05a#%YvOY~SMC-4 zSl1}*a@T6TVmPEo{V>1YL+N_odzGqh{u?=oo6OiBC2^?-MzngszG%>2fq<8r3Iq@} zt3V@@eL@=!Eu$0jb(u4~5zJ*;bufjfd9Y>7SkwFNNcE-{fq(7GVNcfjofzhM%4z)1)~Z-FY!2DJvz zH33cFC_Uhy2Vk~9gB*an{)VC(gZeJ$T^EE2&<;e969|PYcS(Q?JWmN3cpmz1Q+f}$ zv43a!C)$4~;UXddND1*<1>6>B!*3OT3jb#n61*N?G5?)}T%7-vgg|5AmKnD!_>k68 zNQq9Ip@+eW^9y>&AJPqSh~o^HUnKLXE_s9kM25SE`OhADk%rja;<)idG#1U;H_vWt z+25?1d3SB4U!OYrOZOT!YwCBq$zQLuzqctY+xU4fzI;2@XIz#0QF??tT)G#J#Pzfg zw~CUd=r=}*#zlo>=F9!51G`I_klL#)dfxEO*ZuXg3n!y@&+3cct3v}7$2a{>uUF;A z@Pmlv=YX}W@YZly$5bl*RJF$!FP5`wMW3$cL=I10Pj&(px!e>&wb+n-(s#?#MamzD z6+SHN%$B${;Oo#trn}M@fvbrasG`tuU{iOD7bt%)u5%N*S<}P>a@rixWH%r>%cZ!a zn3Xc<%Jy~Oa1~WDORHNoGMph!E7#SGARb3LOK51RZ{~YJE-wwW)UXfxPg&G_XqoBH z%*tHJR@8MB{|TX?&KmB5QRjjIeR5LVlJHzriC)Cvs>(IB%zTTAoBW0SjpHrP&y$G% z&E50d&*!oDW`lR^h}z8xk*pR!4-)AEiUCuVW*4Z{A)Uep_3NFvCbsOGRmIDX-2GC> zF3}R=xp-6Bq@QO1Dq+eOZsrW|r^@z)v*n9$SveK>3P)!fU6sy-`67p3oSi4d3}M!P zBtZ=R*tN^^ssXbWW%XtNE3xM;u<)dNd!wV(KA=W_Yv4D7Q`zm(`+5-Uc~iH3kvP$K zXpXq*b+?~jfH!SkWlk^yYPvhph7W)v2P<7|>om|x#t+5rMWE$Bf1r%N>b&8>?p1L5 zV2LgjhSS?QlECVROW8}yh1$0KmE1p9i;%@g1tzD~+Ddn;Pxh*qW3uE~#xEk&^%l?E zy8j(S&0#+a|5ZlPyZzH4OX){Y$5|}`Xbl(+1?je3w*h+9t?zKVFeS9vERn%ppVsnv z2ZHFP3B_H3V!1%EpTef#U?~ZQLyxg}oL>Mtu@)tU(F}CubAssi-e;at+-}n^0 zSBYh>qv4(Y#;D%cyHJ1lCh;LdNBw8go#gBB{;SIx{{;W1QL@KT4omDhDZX;{OZinu z0__qFyRYQy-}MWHMO(kJq<=8aVCK*XkC~}B_W4=hZ3Y&1H_fBh1@~Tk?edyi9rAJg z;zKU;QdvfQ6+{|R?_P*AT8L*cnXtz_wIoVTp_I^&IZF^$!eb55!Fi#OH}%n>ZPO}3 zsgky>LB^2!QLBWhsX))rzY-GM!C~*VNu`HXMd6t z+@2Xe4f_^L+Eb>dcAp*NSHqY5v&PfleSvSE7=@|4r*TL5lLp6c9IH6Ocd5Tm3Kx^1 z>#+NGrN-SgIHte2T&=4~3D!@)G`t;{9JVBMMo#=Z2-qUZGnm)AtquyRv(FO%fbG%R zRUlN5`y@Qa&Q5)h_b=6`oUvfKGOk{L&S)$F#mK7!b39QH{9=!Rd~V=cQ%W3|ht7~} z)mu;_RE~l!Mc*V??&DGJ<}U&E?Qp7>aT9^TfaXo?1b6f6b|13>ODa>%Jp4ngT9vuo ze40!w?XKYMfY(>ArH>v$Mua z5W#9iMWM(=vZQ!YG;H#rF+oU6L4{cW<|64A0p+0~bmAXG`SPI1L4X3^_c>5ReNQXi zNJK)Ub0}n@hM9qTW8&iRSQr3eVhKb60QeoEz%2UQg#tKHz)vy&F*MN{4+{@q?vw7i z2EfRKj60}^N`^Ha@9_v4wGfnu4162}Iv{Tg1Ui%CCw?RVT;UTq5jcoQmQEBD(a**w zJUD^q7!mP!^iWI4L{dV0K_eAFNC*)Z00epQ13*w&q*oXv0C1872q6lvxVgLni1^D{ z8Gw9@NH~H{EMS@vaM~**m57E7h({)aA_4??K@nL*9=TJ2A`AGU1|WkWFR+^vA_>UA z2mtV%t^V8U%46n;$$4Z>AehT(0L3bDie`wun$yh@eE7fRK)o+1d#BHMi0GHuWl#myjNF&hd^O z4J=F2^vcgiH`+e0Y6SH&`d)_RBS;RrIwd54lkylWCS@15xuH2r^h}PLbm)+Q_Q?ZM zqhTU7cuhffgozvjk4yN>5BaP?hkQj$L5I0(AGg~J#qvFOBO{0|eMY)D3`DAEhAK#C z%b+f^HB`G6u=||}m9YAqZbmTB0=KyyKIfs-2cghv=-08=2YHsV z4y^I*kq)c@Mb@?aDN;Zq%iDkPqsQS#_ZmixERRDVv7s&DHHx7vP@%^9UkaqC&sS#sRssy2C~gNbsg#(+Kpb9ZgS| zVhM}EAul4jhAto#hha{43B{Qu)tJ@Y9Ys9phHVwcqgY^jx+FqFy9-4cZkUD^kIX3E zCZ?Z6r8C&eXM?O)5akS#OTf2tMb-hsiE|PeqUi;h6S~ zoFErnIl1;@MEK00RKRi`jbK2kx8#mS;CA&xK+CvEG1P2O5s}l9C1?{7b9%DJ8h~Cv z0SQ2__zjo<&?X}@>NbWM+NK3gJeVwUZ*-*Dpf7xLs7UIO)QKuxL(akN$$)A>)gS=< zLr-r#D7n@Jh;0e~V=xQIscAWZ0YSCoMK9k0&Ob}(FhUGpBFf9Zf2$Usy*RN{? zGE_d4HAs>dL8$_!f8C;M_6Ht zC=bjg5kjkK&Ei3;I$e-v!EcF&f6e!}wmVYaf!r`#fXLY0HOo>`elx3NVSO_zbmCN~ z)1*4-oI5jKz*nI1hYjbqhnV!k883^vKE!bz%BP^woU3Z!WQ}Ve?9ZK{sJNW@>R3mV zaheAs76q;zZjPl?$c^Pta=6xJ{Z(Nk926T4o51N}kY+odha4S56f_bXozayr4&SL= zZp8ZDa~=0N{%1c)=YwiG8}7(%i0{XB=DwpL4Il6r41{DTD~g33p0jyn!hk}v6c1$J^BDI)} z?l=! zu%)@e6t!9!+kE;MPL=5GJ?#?zVExiT{)5U!7}IhLF9Q{oP8e1%sCcYTwho!=2Q@V$ ztazXi&Lw&XOuYnxC{(=vcd1GhM{1b+^ z;0>5!8wiVIgS^QFp2JrvE9IBB!@{r#L!6LB(9zdhbBU}ASLJ-Y*X)z5;4;ls0zj7X+S_bVN^AQ8(>wP5IZ{sBaRPfOa`dJ&j^B7 zURiV@mPG0<0n`+qLXp%uh0`JGtTw`o43<1v;e%8W8nM9D+TY#O_0cF22$p&zY3=Vq z;TvF(i4q$ChkL=Qz~NpU4RE+u1q$8{tF|i41h01IAlBaBVPZ&U)<+X|NEEbW$f5;> zKcPSHFIZN<>wzq^zgPxLuhgJ4AS4x`HHf&bfplUJRZ`H2V3h#DnjqDCWcXlJ-VGJI zx(~o$Vb?|OaHSi#vc;u357(RkD$`#Epei?sCm}W1Y=s5utU9zI`zyjU;Xx}mPCsfG zq+n&|Df<+FWnJT_LW_5q?I%#ys$%4McItBJtZvp+GC6_9;e3{mMtYZmYa@p_Vg$)1 z#R*Fykv-IJ#1eQX14f~849N%HC4vk0QNC4h2#|ZOhc)DUasvncwe0~=zm2O%DOh@_ z0_C&IR)H+#G4*+nL$8wN^1EB7(`9w1Zje0!y{iC$Cn^<(MKWD<=(e`}&N}%TvJdGG z$PoJtI1jTSbrBJMk=tN-y?iLu`VJ-^eN8dg#!rxl$0TFp1Wh4j*;r5{ne!)%4co9R z*)flj3SzHczujyhXdVI0~ zV3bij3+Dz^lgbCGcjdFE!$s`E>!)({quqJ2s%Lj;jByeND&U)J<9M)=iPJ_iAV%yY z8I3z!sgb-dXy48wc@2PQUw~+yif7}&Kr~(;TH6=pZSwo_FTc^ezyCrLPyB^upD2N& z3Ph76g&j}-jV4TD+4SE)yZZ|b_d=%r9en#kOG8EXD{2esM0sRhrx};1;qijzcdkBo zDY{a2o>8^tQeUAB-DW6wS436sb4Y&13SLi#ZL?uJhOmy~a_*T5naOK`$ql(q>l(M%fGl6HLNH8;2fwxvymAn}Hk=)=#? z-PJolc2hqTXMISRjFOV&tN)-`ZrReaGXQUb=MUHDo!#*B?92jxq+;Fsd0bhU_Ab?5`Ne(?C@XMuIaz9xn+J~ zhyTLn{)K&7_ZRkZPt9xT)RoGzVgGh158-|BHK?JxO5~jo!r=|~s{EjLC)IKz6n($R z=`M0t>w(X1IJ{rC?+Z-fU8P*RWEh5tNHEm4CL64+p#<>;sm^wwxqbb*UD0GrkqZxF z0AKayMqSZTPfJHm)6cO^8w&q=$xW*SevNAFv=A5Paji*1x#-aA^cEg9W^_{)=Zv$K zHR`mK_A1|SM#i+eaJ6|825YBfmEAY5`p9pmG^6wtJg4oG*BVr5meZ!h`z*Na(WP#m zO-&iB^({V6n7$ZJv1CkSieFnd%cNJO!kImrGlOW(n5K>jwaYj&;3_gSCQNu(mFlP+ zG~D0Wb?Gb<${{DUS9xyNVZN!48%@=iYVbfUJ7?_ID=;i%PmCl_*zB?7{;A0u0jTM4 zsBv6pnWsrH=1me63Z^sF5dX9(cY-c1)G6aYhdp1%j5O_PQLepe($v<;Pmkerrkokb z(0X2o^IA5oPD@~R@Bv@ zS?zo=hJo5iJSWhI;PeD+2e4#ZoWgl6J26ghY7T#*5qw+xw8+S>>6lCb7ar|`NZ%eL z9N(QpdR?kaAIN0Bf&NxT;aPs82P+(Fi?cxEbhf+t&J}r_4=xCalzgwu;Q%>#&vNjj zo_ro#Q0jDCiv(|#XJlVyfI>qu_awY@AkQ=_BLRWl(iimvqq=gA&67|f7Pbi-`UIrO zYg~AZ6iA?@(P}y)cQJVeT{gnw7W|K{B@*)Jipp#18uaRF~ zv2wVVq&YY}zT}rY2a}ulMpl@tJaW$p!d%$kR2`|Yx;Uuj`aIK{?FI%5n8ZR*dXOM5 z0DTU(u{^NwJ(d`N3?kAP9PlbA#L0lT!i#=~65Ui9bYH zsV8Pieu;E{_sf;<#lQfNr}bvDYeaT}?y1QYQQYaTM$VVWb1L5~RpHQ;#P^&HEM!)& zO(OEf(v@4?JjXWM(6TdBFwjJW@mfVI&!P^<9*7jbpDH#ZL`jI^=@Xe=ZN+7C z6r@+GHl9bCxpPR+@KDFg8^hm1dY7>t4X-S+o_DW7L;T^ zPuD~eDIq0@kyki4-h0=X`k<_&pjmL5Oatp)GB22d$1Xq4Ao1HoUa54_Jv{;@5*CO@ z^f_)Qu9ZM80VO7R*XzBpaP@%nEki^o*-hukor5Bx$@~(uPrC6vwJke1N8lN_9SZ&t> z-7&D3mwLu)oaK_s-<#Rr#arN#d)#C6ZLWCZs3IlMTu6C7CUMVYKO%8IbQK%_WSn|^ zA23XZRiET9G0rdhsxvagj9->4|2m(h|I;6e{o5+D?)aygwFArGnl(2)^WP8c*e?>^{I^zgQi5;uDbK*}5dWODmNyZfvw}_TAFKJ9f(-i?}fB%0@Y zRj;U6TeW(io*|&>nhP~#I)@YL*OoML-n!XVQb{T?+}PeOf%G&C5DCPpNx7;?IxP2Q zY?707v&ZwkjOnhlU{m+WzMCL5#d@Nf^1CU?~Thetd~bAS7NxbiXW3 zziB>G%64wb_Qtwk7CEP5sPLhDRE(B93?f?aIA%>bc=%X9P5&y3^vUSz``EO}=+SS! zEeb)q4?St*kXkS`n*=og2ze=oOhT0)plE@hQq+yzcvE;gB^U;{&~osHD)7UtxlOwM z;}OK8XUk2Pd~;H68Tf-7{7m)&;XQ+tZJP|y5p8(&8*J~n4A-Zi(3qni-4~`2foeh4 zt>Lr+{Yj|V2T&>7DnTFOw}E(^CfLDQDnS!MhBW=WwEc%&s6O0d9~%5NmA=OeMZ`fg z1t{T|(v-0eb@aw_0cA)s@TiL609eh2CWgViK`7fVs_)*2kj!|G)k(UzWjaY~@`a*sVng{%J_7@P535|h$d1teYY+8=_o>Z2XeA`P+8{?a?8 z%*uU9>#Vj_I@qRoPs#@{t{aGOu5r;@sp=gIf*EsQKcE!E9{%+Yqp{%6kJ5})8S|Ir z;(8sc-`yoqIx0+vSL9E>eEZp+KWi2tFdCFo96Xd#U%Zi`{|5Xog4G!zXHQ<#K*52g z`A*yR0WKUL=TLfRr2aCLzaDV9hHgJz5eseEi^Mygazh9t7F zY;uZ3aQl%Ubp_%Nk;SmEo0}J9Ci7!8dHG^alnz{a=$mG*j=iw+Ha5nlNXen&rQC-E zlw_Hj7Zr(fa1aK?a1S(?YRB{XQdpic+c27NuOp7 zrO3UM$ww|eq8r59HX{K(Le4cVhhN|)KCgji9TYFlhyPtVh6QrsZZZzabO!IR$OIZL zl(JO4OVawZb5Q}$8m(wxiuC|Xu7qJ^Sc|sYzgm7m zc2^I}$e&-R|1i6`eJF|zS&-%03(xu;F>Hbf!pY#%=Q=$ZE8no*N|s3`F_08Pv~yn9 zDwe8Vyn^d5LuhXD=w948rs-hO=|kt1gU)m*hCeBXHd74EGz8d^fx|9-#?MU1$}LZ( z>6Y$HI$_k8nNKQVcScI5tk1eBhGERGRq(rd_2V>yKc)TY;$(e@DMk#I7d6AU1P-K! zhJYoh5_X9{uq4Gc3+vN>`jpq%KNH0QFLHh1hi$fo51(cTtIqP{pAn5W5xb<-(i$f0 z=2R;wYmY^NYH(}hid1_XYHNE)ix#E(o@9*KAwkoYD1AW zT`hcw+0ItTP^X&4j!B5i&*NI=on?D(o`Ie=i-RY$G`%$wCT2)Mun@0@|AdatqbE@hAai+6?@t!f2MXW2D8^V<4!7|xfA&zQWP3s(OCvy$)&riAe?n3|6?ESgY`iB&+iL^qajfvo0y1?}Ui!gEYI3|};j z=8>{XWU&cIn5sLD^7Z=^&`$6BaI6|+CWXr)6q2H#^E{h6BLQkru5~ypr3_K#r5t7B z4bwg%vI~`ABa-jok{A%~K-esm!@|oXD;d0w-Z3pM_MBC2lSl?G_>0UizS#@B$Mu0u zdDD$>4|5H8usw$XtzzvkkwDQ6EFPOJ3k+Mfe3DW0mvoQ2HS%*k4X zz8Gk|%S1vXw#_51DKgg8AZUdO)_vgPD>zJCG|gerWbImDBoS5!6>J;dysjIT>#A4@ ztz$|)erS}k~H`sW&)ik?@%JG2S|+Y2cG~xSRi9G=M}S{J!&RR#f<~)oh#-SC zQ%FaA!Tn;4O4Cb18yCLSn-O~dK&kZ+5_OX5i9H~L@H8^(B@%g0L@}wXggzg=R7OGh z3`6NwVGR?8u>K&dx9qLEvw90l(V!Vu!nzSnMGO(jqbz_3>0T0mg?A!jC|EI>!2xjx z%`%V9%q$Ac%?*i9i%C{xp};8T5v`Q`J{)rWL9b;l&y+$0Y0e-iO-#N5Oj0nPV=?nY zz{p_?fvr#wIGZ3}@b_$j**s^9_$dvs%h{5G>`Uq@&WajJtbjcokQ3PMoNz#cBzpnn zhoGW7hh@vDSR!W5XxB^-G697P0GTYx3!*4so(r(rv~45@m~Z);J#s*{<9UEfXyc?X zVAUjkHVI!)N#WyIlNoRh1Rf5{6abZ|%pH(e^3gAx1aOQOVB!pi63|pmMd<@e8(VP- z14+d7?x|f!WS=;|1~vO=JeG)>>P$(ikyHX6u{GHY0P|~JgXACc8e9+s*y$wz^F4pC zTj2;e*;zY>-i`gDUigE$Ecy>>64HN1ZKD;hXSlAOjK&v=A@15U5c{b>7`+s^283jN z#lcsq*Iz<#^P-jL+vz#AZ0*}q@|mCP+`jQJJlm4luDvomuWk`Kx4*4b9f2XY*j*yx z$tkgyr&V-??2q293;E6$YHSnp)r>rk#ERZA4a-`FS!ee4;xOauuE!?L>O|c%wT`-5 zEXWe+eZ6khbhwK0i66FzOL69GzLHDtJ<|9_=f{7f%3XG@m4tO@+{RZe6qvuG#BZL~ z*-ChmKrC%tpIVW&9$i_qjk_|uaZ+-bWB(-Bpe^ZnG<7xZT~-hrCM;Un8u#c+l`?cU zgZ+g+#d~c_-jBVs!F!ASlbd}`tNVwXdq=3RBg3-p88MlJEu&l~xnae|w$}~(gQUgM z2TWbh?y>a#pM9IakLfvbCo5uM34Nbbb=ke{ACzu#?5|sl~iQM zCh*5418!fOFMN1?9144D-BDrpyPvS^-bD%u+FY&!T@#>I26#KFHiC`>#$eBe>1TkN zv7 zFEYlFt?ihhe!RZ;t}m~dalb&g-q@B&&8;@kV^YZqoWWlB^*&sF)oImqGx{-&j5~LW zfJ5;vj_~u$^qB-6^A z<2v4@X$Iop$5RHBEr*EprQC`I@E|#~jmm{+p|FK$Eqk^AxrJB-^U?(Bk&(# zo`tp@z)toKApZ!}G!3k&a<36=OeNA4>PXL#Z69z`@iLloPiWcjR`TPblQfoNOgrOh zps1-qhF7Q6>7f&Hw2H^gHFaXWxqHO1rBWtCzx8ynLw8iQ(=F50$nRPXb5(v}jBen# zRaq3S^_}B1W~%0BnReS#Ot3a)Zf1HLr0tqs8uz-2nPrLH!a1sDtE|1IqnTfBSmT-a zP|1a=ql$O=cN^u5rIHTW&WG-`mg9|~$wdRvd$_r?=7WGvpPQZ^3)_c{@8BEq-7+YV zS&>Y@Tw7o=zYZIPT3(X-H%-`w;Foq#-!AhVxR1L%tx&zWwZqZA*eM(}J%0DOQ507` z{2rMjuirArjO$V5e$dg_tUc4Ya%k!_rY2(Dff&Z&%KO98`K+n8EVJJaXD^npmq3|q zZ@o+-=V{;7^UE_IGz~6dhu*IG;FO6Y?Z(DTX5^ZXPMV{T<8Fw+u1Td&o{j^5i<0)+ zNyC!Fh8k&IwHNK2u%yE-k%J z%8tHr{XfBL61_Tl=8D%c+N{hCmO#@ex-~V9ln!)sGMwvJ0#5^TmmhR1bU#+QfvC|t z5Km{ZbQ;%_+4NStHgMUlddGmkksDHO!-nN(zx$>VVL4Gdckf(()~^SeA^n}EHMp}j zX9ns`cb1RzeFlrdrU>(ENI(NRr|7_R$Dz&I)3V2kj8$*X3vecTzD$W+w)+;*P`V5- zL{6vcE#2gW&xOu#kMuXDKUPIB&?8ko^`5JZ?+|fVa>L~}!gw18);uow1^$d%d6D$J zb|IOm^G4gWzj~C`#7N?j7G_(rrLVFX6qGtFENGQ2(4q?^89wZsqUH|VY;RP8J*7=D zyPMtD`rhiZs&#d@1oCwhtJ7&z0A6|1j|UEdqs2|L`Ni*aROR429iES;mq&CI!JCxv zut;M}g0vOE!o^?o%ND;M0h?U$ljF;>9#VwP9(( zE$pi}0bw8OE3xeSb$Tx_I?1@h1VNJ0xs(!xqRD5UNW|Vxko79?-w_#w=di3)NDJMn zJ#vG3$8r_%Lvs?$HQ%cuKK;P6ZM`UXM@HUcFkK|fap;f#cKQbPk85j4r`zyZCEIBq@`+Sx)_mKT;z<-8F~|A_h)Ief8~` zTeHnPC^HuPytoJxpKa9`@Ts0G*F!-v&a)2f4scc80VvyOfr8LAa8=&BKUU>QTu7cH zPD1jm@7}88XjuYR<&_f8E>^cgKIpAu&(VY5mC#_c48_`e!JAdNQEZZ$1?RJqZDOyv z`-Wr{bi%cZD_UC$m5$|9je+6l(|jm#WQf6>AZXx984^>sp%Qd*)kHYQf4>;hM}2>z z8(-r#EsvJuAtb6bgv>lVP;Yi263kL~sVVO4&^CTI1BjXdboNwn#vxjNm|rw)qP*d& zTZ?)DTkaV%wsIJ;cT&MSWt2WB2AAg0h`P13o$c2a#a0|At;^oY`@^0VZU~ZS{Jea8BYp8j?H)p_Ah9NWK7OM2)*ikrv|p?;l{Lk)Y?) z_&l(uO24w^_y@l8#w{SNGUZcI(sghh>cs33PeKu6{T;@Z9*O<)qs^Ksf?;G( zC$pM?Rl96?bpu^yH3WY6qSl^~Fo?@H>n|pGgNHTvSV3x(txj9T!fI4(36vDiV)-SG zBR%n}fy0Xr=KWrnFuTjmS5>aPbKJ0}?D6%?*Kz%Xyt9amGJ1M~+cJ3)vN+e~auHsU z>&{D``rZJ$y&%I70OfAG_#iz`0$xg#=<%CdQT2RC1|G;#-?t5`A`9o5v*y}jn#H8d zvc!iQ8dLTxGx2R$ujQ@kpiV*h#UIgSbG%l^ePUN;AFkx`t{^oXI#3!-<>Sta!4ON| zL~{@w?-Bkn$m|%|^1HyEqyP*u9Pn5F*LzYJf4%d>xjJ!53QQ0_K;Lw%`@=dcNyCDk z$dPOjpFsNf>-IEKM%nju+@g<|+FqBO8G93H@pg@Ijh>V>%5sRQvT$LEGlo*Z!D*Yj z-wVnPq@_TxXz0xZs@_S{QP+@x#IbJ4keQ|*2h=lMK zGk5Kte$=!j>kkN8HZKu1tTxMVY5pokb5peQGsSW4=z#y7h<83Zm5$qhQmjT4e~9>hS{f%W&8JcXa+ z?m~Va$uAufvmL<5l8O4Y4bLD+*QrzRlI`{@=ADv?*QzwtX2((2sfqA$MImy8APQ40`a@R6D zd&sgyqS1$YJZY~z=i=yD(83Mud6ZL=Y=I{$dyc^+=A)>&9VjIFc4zV=(TUiRsV^Hydcm9YZx3pR^SNO) zfHUQj*+$#RSt8S05nQ8ZCBI*`CP=!4vdSt!Yis&eHYdVOABjEeEJCU%w*gJoJM>7s z1(%`*e-k>>;T|!%J0YK~he)M4s49^62Bv{zbz#-Hhr;OUFZ%_ircUZc|GE;SGu1n} z{3SgGaLL_n9FWZ)sVJ~X`*I}(BkdWm+Hm;+jIWhd)?LIrk<^` zZ`7H)Dm1enJ$O*J`;Fg%CCck(a8GXL=R9*SPBU3vymMuj6kB)mjcVI$UGF8lsajJj zrnqNHe>04}AUa*0?Gk%(->$z>57z#3{wt2^>f6=3lbC>UZpXsFAcN{^cx-I+#lTSKZJU$^O_p@4uOR-h!)uGcnC%y-s1(5am zqU6W6bK9qhq3RCL^ z>`!J)Q2+n;7uu-|$T5xoF~#<|?em_NDl)!$@@0y7L2Uq@dcKLn8;$F>;{OQ*21>&>cv2ZG#c6s8!%5nS4(VMjwb^kVXd}Lp+ z@?`kDYqR4&Or6QbG^Oz9l`Tixo!9K$D6y^Jh}#|wIk88JD>D|p?AErKP*Ylvc>ZqZ z`z;(RGn#i9t>ByKUsi9mWGk!Zq2fmw2I?GdJ69hTskW5qkZ|ua=L%g^RdvOprs%KX zitCQGwx-<`cHGAn)UorLyjc9!?&v)UlNSpXvVDEtKhavgnd>*x)E}6|!A>>qJcU>7@)|iCa+!@M6zo3UcJ<1PsaqTq zw3WFg&(&pFrKrg`iA|v6vupcSPSN<`XQNR?_?I`_qi;xzrXQ3 zp3I|uPL)SDb@|UgQ-*VuX0<1;E#P!8m|C6B$=n(6`bpO;%lRMbyzVqkDdFz>JNvp% z|AL?^$t>)r_c3T*;cfZxELHgU^Hs-WqgoFc&WdsQcxuP<;+Pg>o# zh`BGV@kf36&+6wtvSSY#*1uo-NB^a?2;0Kt#unF2_XI~5)cENCcuyql&?YUqZseK~)PO_iUg!n&HLm6yx>4w@Duhwt-Y7;P zCjoGki*6FKqd;v8gh`WqP)x#TaS(5khcAjr$f+8uo6u`xgq!}tOhT`l1H4&*BTS&K Pg#d#*u&KE=5X1ujp&cQ? literal 0 HcmV?d00001 diff --git a/.obsidian/plugins/OnlyOffice/assets/Start.pptx b/.obsidian/plugins/OnlyOffice/assets/Start.pptx new file mode 100644 index 0000000000000000000000000000000000000000..a2f4c71f5f2a92622b245fb6b089e8ba543fc82a GIT binary patch literal 32505 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 UMI-?LI_QTyv{}Ow=d+*w4@50Y`~Uy| literal 0 HcmV?d00001 diff --git a/.obsidian/plugins/OnlyOffice/assets/Start.xlsx b/.obsidian/plugins/OnlyOffice/assets/Start.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8d896833d98f23452c1276f803f806e073e08fd4 GIT binary patch literal 8473 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 literal 0 HcmV?d00001 diff --git a/.obsidian/plugins/OnlyOffice/data.json b/.obsidian/plugins/OnlyOffice/data.json new file mode 100644 index 00000000..8034db4b --- /dev/null +++ b/.obsidian/plugins/OnlyOffice/data.json @@ -0,0 +1,12 @@ +{ + "onlyOfficeServerPort": 3480, + "jwtSecret": "sIQDBApCLBgr2yZQsHJve07bHi4iZDv7", + "localServerAddress": "192.168.1.181", + "htmlServerPort": 0, + "callbackServerPort": 0, + "useRequestToken": true, + "useSystemSaveAs": false, + "hideDownloadAs": true, + "promptNameOnCreate": true, + "restrictToLocalhost": false +} \ No newline at end of file diff --git a/.obsidian/plugins/OnlyOffice/embedded-editor.html b/.obsidian/plugins/OnlyOffice/embedded-editor.html new file mode 100644 index 00000000..c553f014 --- /dev/null +++ b/.obsidian/plugins/OnlyOffice/embedded-editor.html @@ -0,0 +1,59 @@ + + + + + OnlyOffice Embedded Editor + + + +
+ + + diff --git a/.obsidian/plugins/OnlyOffice/main.js b/.obsidian/plugins/OnlyOffice/main.js new file mode 100644 index 00000000..1958c8e6 --- /dev/null +++ b/.obsidian/plugins/OnlyOffice/main.js @@ -0,0 +1,12295 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var __create = Object.create; +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __getProtoOf = Object.getPrototypeOf; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; +var __commonJS = (cb, mod) => function __require() { + return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( + // If the importer is in node compatibility mode or this is not an ESM + // file that has been converted to a CommonJS file using a Babel- + // compatible transform (i.e. "__esModule" has not been set), then set + // "default" to the CommonJS "module.exports" for node compatibility. + isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, + mod +)); +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); +var __publicField = (obj, key, value) => { + __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var __accessCheck = (obj, member, msg) => { + if (!member.has(obj)) + throw TypeError("Cannot " + msg); +}; +var __privateGet = (obj, member, getter) => { + __accessCheck(obj, member, "read from private field"); + return getter ? getter.call(obj) : member.get(obj); +}; +var __privateAdd = (obj, member, value) => { + if (member.has(obj)) + throw TypeError("Cannot add the same private member more than once"); + member instanceof WeakSet ? member.add(obj) : member.set(obj, value); +}; +var __privateSet = (obj, member, value, setter) => { + __accessCheck(obj, member, "write to private field"); + setter ? setter.call(obj, value) : member.set(obj, value); + return value; +}; + +// node_modules/mime-db/db.json +var require_db = __commonJS({ + "node_modules/mime-db/db.json"(exports2, module2) { + module2.exports = { + "application/1d-interleaved-parityfec": { + source: "iana" + }, + "application/3gpdash-qoe-report+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/3gpp-ims+xml": { + source: "iana", + compressible: true + }, + "application/3gpphal+json": { + source: "iana", + compressible: true + }, + "application/3gpphalforms+json": { + source: "iana", + compressible: true + }, + "application/a2l": { + source: "iana" + }, + "application/ace+cbor": { + source: "iana" + }, + "application/ace+json": { + source: "iana", + compressible: true + }, + "application/ace-groupcomm+cbor": { + source: "iana" + }, + "application/ace-trl+cbor": { + source: "iana" + }, + "application/activemessage": { + source: "iana" + }, + "application/activity+json": { + source: "iana", + compressible: true + }, + "application/aif+cbor": { + source: "iana" + }, + "application/aif+json": { + source: "iana", + compressible: true + }, + "application/alto-cdni+json": { + source: "iana", + compressible: true + }, + "application/alto-cdnifilter+json": { + source: "iana", + compressible: true + }, + "application/alto-costmap+json": { + source: "iana", + compressible: true + }, + "application/alto-costmapfilter+json": { + source: "iana", + compressible: true + }, + "application/alto-directory+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointcost+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointcostparams+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointprop+json": { + source: "iana", + compressible: true + }, + "application/alto-endpointpropparams+json": { + source: "iana", + compressible: true + }, + "application/alto-error+json": { + source: "iana", + compressible: true + }, + "application/alto-networkmap+json": { + source: "iana", + compressible: true + }, + "application/alto-networkmapfilter+json": { + source: "iana", + compressible: true + }, + "application/alto-propmap+json": { + source: "iana", + compressible: true + }, + "application/alto-propmapparams+json": { + source: "iana", + compressible: true + }, + "application/alto-tips+json": { + source: "iana", + compressible: true + }, + "application/alto-tipsparams+json": { + source: "iana", + compressible: true + }, + "application/alto-updatestreamcontrol+json": { + source: "iana", + compressible: true + }, + "application/alto-updatestreamparams+json": { + source: "iana", + compressible: true + }, + "application/aml": { + source: "iana" + }, + "application/andrew-inset": { + source: "iana", + extensions: ["ez"] + }, + "application/appinstaller": { + compressible: false, + extensions: ["appinstaller"] + }, + "application/applefile": { + source: "iana" + }, + "application/applixware": { + source: "apache", + extensions: ["aw"] + }, + "application/appx": { + compressible: false, + extensions: ["appx"] + }, + "application/appxbundle": { + compressible: false, + extensions: ["appxbundle"] + }, + "application/at+jwt": { + source: "iana" + }, + "application/atf": { + source: "iana" + }, + "application/atfx": { + source: "iana" + }, + "application/atom+xml": { + source: "iana", + compressible: true, + extensions: ["atom"] + }, + "application/atomcat+xml": { + source: "iana", + compressible: true, + extensions: ["atomcat"] + }, + "application/atomdeleted+xml": { + source: "iana", + compressible: true, + extensions: ["atomdeleted"] + }, + "application/atomicmail": { + source: "iana" + }, + "application/atomsvc+xml": { + source: "iana", + compressible: true, + extensions: ["atomsvc"] + }, + "application/atsc-dwd+xml": { + source: "iana", + compressible: true, + extensions: ["dwd"] + }, + "application/atsc-dynamic-event-message": { + source: "iana" + }, + "application/atsc-held+xml": { + source: "iana", + compressible: true, + extensions: ["held"] + }, + "application/atsc-rdt+json": { + source: "iana", + compressible: true + }, + "application/atsc-rsat+xml": { + source: "iana", + compressible: true, + extensions: ["rsat"] + }, + "application/atxml": { + source: "iana" + }, + "application/auth-policy+xml": { + source: "iana", + compressible: true + }, + "application/automationml-aml+xml": { + source: "iana", + compressible: true, + extensions: ["aml"] + }, + "application/automationml-amlx+zip": { + source: "iana", + compressible: false, + extensions: ["amlx"] + }, + "application/bacnet-xdd+zip": { + source: "iana", + compressible: false + }, + "application/batch-smtp": { + source: "iana" + }, + "application/bdoc": { + compressible: false, + extensions: ["bdoc"] + }, + "application/beep+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/bufr": { + source: "iana" + }, + "application/c2pa": { + source: "iana" + }, + "application/calendar+json": { + source: "iana", + compressible: true + }, + "application/calendar+xml": { + source: "iana", + compressible: true, + extensions: ["xcs"] + }, + "application/call-completion": { + source: "iana" + }, + "application/cals-1840": { + source: "iana" + }, + "application/captive+json": { + source: "iana", + compressible: true + }, + "application/cbor": { + source: "iana" + }, + "application/cbor-seq": { + source: "iana" + }, + "application/cccex": { + source: "iana" + }, + "application/ccmp+xml": { + source: "iana", + compressible: true + }, + "application/ccxml+xml": { + source: "iana", + compressible: true, + extensions: ["ccxml"] + }, + "application/cda+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/cdfx+xml": { + source: "iana", + compressible: true, + extensions: ["cdfx"] + }, + "application/cdmi-capability": { + source: "iana", + extensions: ["cdmia"] + }, + "application/cdmi-container": { + source: "iana", + extensions: ["cdmic"] + }, + "application/cdmi-domain": { + source: "iana", + extensions: ["cdmid"] + }, + "application/cdmi-object": { + source: "iana", + extensions: ["cdmio"] + }, + "application/cdmi-queue": { + source: "iana", + extensions: ["cdmiq"] + }, + "application/cdni": { + source: "iana" + }, + "application/ce+cbor": { + source: "iana" + }, + "application/cea": { + source: "iana" + }, + "application/cea-2018+xml": { + source: "iana", + compressible: true + }, + "application/cellml+xml": { + source: "iana", + compressible: true + }, + "application/cfw": { + source: "iana" + }, + "application/cid-edhoc+cbor-seq": { + source: "iana" + }, + "application/city+json": { + source: "iana", + compressible: true + }, + "application/city+json-seq": { + source: "iana" + }, + "application/clr": { + source: "iana" + }, + "application/clue+xml": { + source: "iana", + compressible: true + }, + "application/clue_info+xml": { + source: "iana", + compressible: true + }, + "application/cms": { + source: "iana" + }, + "application/cnrp+xml": { + source: "iana", + compressible: true + }, + "application/coap-eap": { + source: "iana" + }, + "application/coap-group+json": { + source: "iana", + compressible: true + }, + "application/coap-payload": { + source: "iana" + }, + "application/commonground": { + source: "iana" + }, + "application/concise-problem-details+cbor": { + source: "iana" + }, + "application/conference-info+xml": { + source: "iana", + compressible: true + }, + "application/cose": { + source: "iana" + }, + "application/cose-key": { + source: "iana" + }, + "application/cose-key-set": { + source: "iana" + }, + "application/cose-x509": { + source: "iana" + }, + "application/cpl+xml": { + source: "iana", + compressible: true, + extensions: ["cpl"] + }, + "application/csrattrs": { + source: "iana" + }, + "application/csta+xml": { + source: "iana", + compressible: true + }, + "application/cstadata+xml": { + source: "iana", + compressible: true + }, + "application/csvm+json": { + source: "iana", + compressible: true + }, + "application/cu-seeme": { + source: "apache", + extensions: ["cu"] + }, + "application/cwl": { + source: "iana", + extensions: ["cwl"] + }, + "application/cwl+json": { + source: "iana", + compressible: true + }, + "application/cwl+yaml": { + source: "iana" + }, + "application/cwt": { + source: "iana" + }, + "application/cybercash": { + source: "iana" + }, + "application/dart": { + compressible: true + }, + "application/dash+xml": { + source: "iana", + compressible: true, + extensions: ["mpd"] + }, + "application/dash-patch+xml": { + source: "iana", + compressible: true, + extensions: ["mpp"] + }, + "application/dashdelta": { + source: "iana" + }, + "application/davmount+xml": { + source: "iana", + compressible: true, + extensions: ["davmount"] + }, + "application/dca-rft": { + source: "iana" + }, + "application/dcd": { + source: "iana" + }, + "application/dec-dx": { + source: "iana" + }, + "application/dialog-info+xml": { + source: "iana", + compressible: true + }, + "application/dicom": { + source: "iana", + extensions: ["dcm"] + }, + "application/dicom+json": { + source: "iana", + compressible: true + }, + "application/dicom+xml": { + source: "iana", + compressible: true + }, + "application/dii": { + source: "iana" + }, + "application/dit": { + source: "iana" + }, + "application/dns": { + source: "iana" + }, + "application/dns+json": { + source: "iana", + compressible: true + }, + "application/dns-message": { + source: "iana" + }, + "application/docbook+xml": { + source: "apache", + compressible: true, + extensions: ["dbk"] + }, + "application/dots+cbor": { + source: "iana" + }, + "application/dpop+jwt": { + source: "iana" + }, + "application/dskpp+xml": { + source: "iana", + compressible: true + }, + "application/dssc+der": { + source: "iana", + extensions: ["dssc"] + }, + "application/dssc+xml": { + source: "iana", + compressible: true, + extensions: ["xdssc"] + }, + "application/dvcs": { + source: "iana" + }, + "application/eat+cwt": { + source: "iana" + }, + "application/eat+jwt": { + source: "iana" + }, + "application/eat-bun+cbor": { + source: "iana" + }, + "application/eat-bun+json": { + source: "iana", + compressible: true + }, + "application/eat-ucs+cbor": { + source: "iana" + }, + "application/eat-ucs+json": { + source: "iana", + compressible: true + }, + "application/ecmascript": { + source: "apache", + compressible: true, + extensions: ["ecma"] + }, + "application/edhoc+cbor-seq": { + source: "iana" + }, + "application/edi-consent": { + source: "iana" + }, + "application/edi-x12": { + source: "iana", + compressible: false + }, + "application/edifact": { + source: "iana", + compressible: false + }, + "application/efi": { + source: "iana" + }, + "application/elm+json": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/elm+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.cap+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/emergencycalldata.comment+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.control+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.deviceinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.ecall.msd": { + source: "iana" + }, + "application/emergencycalldata.legacyesn+json": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.providerinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.serviceinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.subscriberinfo+xml": { + source: "iana", + compressible: true + }, + "application/emergencycalldata.veds+xml": { + source: "iana", + compressible: true + }, + "application/emma+xml": { + source: "iana", + compressible: true, + extensions: ["emma"] + }, + "application/emotionml+xml": { + source: "iana", + compressible: true, + extensions: ["emotionml"] + }, + "application/encaprtp": { + source: "iana" + }, + "application/entity-statement+jwt": { + source: "iana" + }, + "application/epp+xml": { + source: "iana", + compressible: true + }, + "application/epub+zip": { + source: "iana", + compressible: false, + extensions: ["epub"] + }, + "application/eshop": { + source: "iana" + }, + "application/exi": { + source: "iana", + extensions: ["exi"] + }, + "application/expect-ct-report+json": { + source: "iana", + compressible: true + }, + "application/express": { + source: "iana", + extensions: ["exp"] + }, + "application/fastinfoset": { + source: "iana" + }, + "application/fastsoap": { + source: "iana" + }, + "application/fdf": { + source: "iana", + extensions: ["fdf"] + }, + "application/fdt+xml": { + source: "iana", + compressible: true, + extensions: ["fdt"] + }, + "application/fhir+json": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/fhir+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/fido.trusted-apps+json": { + compressible: true + }, + "application/fits": { + source: "iana" + }, + "application/flexfec": { + source: "iana" + }, + "application/font-sfnt": { + source: "iana" + }, + "application/font-tdpfr": { + source: "iana", + extensions: ["pfr"] + }, + "application/font-woff": { + source: "iana", + compressible: false + }, + "application/framework-attributes+xml": { + source: "iana", + compressible: true + }, + "application/geo+json": { + source: "iana", + compressible: true, + extensions: ["geojson"] + }, + "application/geo+json-seq": { + source: "iana" + }, + "application/geopackage+sqlite3": { + source: "iana" + }, + "application/geopose+json": { + source: "iana", + compressible: true + }, + "application/geoxacml+json": { + source: "iana", + compressible: true + }, + "application/geoxacml+xml": { + source: "iana", + compressible: true + }, + "application/gltf-buffer": { + source: "iana" + }, + "application/gml+xml": { + source: "iana", + compressible: true, + extensions: ["gml"] + }, + "application/gnap-binding-jws": { + source: "iana" + }, + "application/gnap-binding-jwsd": { + source: "iana" + }, + "application/gnap-binding-rotation-jws": { + source: "iana" + }, + "application/gnap-binding-rotation-jwsd": { + source: "iana" + }, + "application/gpx+xml": { + source: "apache", + compressible: true, + extensions: ["gpx"] + }, + "application/grib": { + source: "iana" + }, + "application/gxf": { + source: "apache", + extensions: ["gxf"] + }, + "application/gzip": { + source: "iana", + compressible: false, + extensions: ["gz"] + }, + "application/h224": { + source: "iana" + }, + "application/held+xml": { + source: "iana", + compressible: true + }, + "application/hjson": { + extensions: ["hjson"] + }, + "application/hl7v2+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/http": { + source: "iana" + }, + "application/hyperstudio": { + source: "iana", + extensions: ["stk"] + }, + "application/ibe-key-request+xml": { + source: "iana", + compressible: true + }, + "application/ibe-pkg-reply+xml": { + source: "iana", + compressible: true + }, + "application/ibe-pp-data": { + source: "iana" + }, + "application/iges": { + source: "iana" + }, + "application/im-iscomposing+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/index": { + source: "iana" + }, + "application/index.cmd": { + source: "iana" + }, + "application/index.obj": { + source: "iana" + }, + "application/index.response": { + source: "iana" + }, + "application/index.vnd": { + source: "iana" + }, + "application/inkml+xml": { + source: "iana", + compressible: true, + extensions: ["ink", "inkml"] + }, + "application/iotp": { + source: "iana" + }, + "application/ipfix": { + source: "iana", + extensions: ["ipfix"] + }, + "application/ipp": { + source: "iana" + }, + "application/isup": { + source: "iana" + }, + "application/its+xml": { + source: "iana", + compressible: true, + extensions: ["its"] + }, + "application/java-archive": { + source: "iana", + compressible: false, + extensions: ["jar", "war", "ear"] + }, + "application/java-serialized-object": { + source: "apache", + compressible: false, + extensions: ["ser"] + }, + "application/java-vm": { + source: "apache", + compressible: false, + extensions: ["class"] + }, + "application/javascript": { + source: "apache", + charset: "UTF-8", + compressible: true, + extensions: ["js"] + }, + "application/jf2feed+json": { + source: "iana", + compressible: true + }, + "application/jose": { + source: "iana" + }, + "application/jose+json": { + source: "iana", + compressible: true + }, + "application/jrd+json": { + source: "iana", + compressible: true + }, + "application/jscalendar+json": { + source: "iana", + compressible: true + }, + "application/jscontact+json": { + source: "iana", + compressible: true + }, + "application/json": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["json", "map"] + }, + "application/json-patch+json": { + source: "iana", + compressible: true + }, + "application/json-seq": { + source: "iana" + }, + "application/json5": { + extensions: ["json5"] + }, + "application/jsonml+json": { + source: "apache", + compressible: true, + extensions: ["jsonml"] + }, + "application/jsonpath": { + source: "iana" + }, + "application/jwk+json": { + source: "iana", + compressible: true + }, + "application/jwk-set+json": { + source: "iana", + compressible: true + }, + "application/jwk-set+jwt": { + source: "iana" + }, + "application/jwt": { + source: "iana" + }, + "application/kpml-request+xml": { + source: "iana", + compressible: true + }, + "application/kpml-response+xml": { + source: "iana", + compressible: true + }, + "application/ld+json": { + source: "iana", + compressible: true, + extensions: ["jsonld"] + }, + "application/lgr+xml": { + source: "iana", + compressible: true, + extensions: ["lgr"] + }, + "application/link-format": { + source: "iana" + }, + "application/linkset": { + source: "iana" + }, + "application/linkset+json": { + source: "iana", + compressible: true + }, + "application/load-control+xml": { + source: "iana", + compressible: true + }, + "application/logout+jwt": { + source: "iana" + }, + "application/lost+xml": { + source: "iana", + compressible: true, + extensions: ["lostxml"] + }, + "application/lostsync+xml": { + source: "iana", + compressible: true + }, + "application/lpf+zip": { + source: "iana", + compressible: false + }, + "application/lxf": { + source: "iana" + }, + "application/mac-binhex40": { + source: "iana", + extensions: ["hqx"] + }, + "application/mac-compactpro": { + source: "apache", + extensions: ["cpt"] + }, + "application/macwriteii": { + source: "iana" + }, + "application/mads+xml": { + source: "iana", + compressible: true, + extensions: ["mads"] + }, + "application/manifest+json": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["webmanifest"] + }, + "application/marc": { + source: "iana", + extensions: ["mrc"] + }, + "application/marcxml+xml": { + source: "iana", + compressible: true, + extensions: ["mrcx"] + }, + "application/mathematica": { + source: "iana", + extensions: ["ma", "nb", "mb"] + }, + "application/mathml+xml": { + source: "iana", + compressible: true, + extensions: ["mathml"] + }, + "application/mathml-content+xml": { + source: "iana", + compressible: true + }, + "application/mathml-presentation+xml": { + source: "iana", + compressible: true + }, + "application/mbms-associated-procedure-description+xml": { + source: "iana", + compressible: true + }, + "application/mbms-deregister+xml": { + source: "iana", + compressible: true + }, + "application/mbms-envelope+xml": { + source: "iana", + compressible: true + }, + "application/mbms-msk+xml": { + source: "iana", + compressible: true + }, + "application/mbms-msk-response+xml": { + source: "iana", + compressible: true + }, + "application/mbms-protection-description+xml": { + source: "iana", + compressible: true + }, + "application/mbms-reception-report+xml": { + source: "iana", + compressible: true + }, + "application/mbms-register+xml": { + source: "iana", + compressible: true + }, + "application/mbms-register-response+xml": { + source: "iana", + compressible: true + }, + "application/mbms-schedule+xml": { + source: "iana", + compressible: true + }, + "application/mbms-user-service-description+xml": { + source: "iana", + compressible: true + }, + "application/mbox": { + source: "iana", + extensions: ["mbox"] + }, + "application/media-policy-dataset+xml": { + source: "iana", + compressible: true, + extensions: ["mpf"] + }, + "application/media_control+xml": { + source: "iana", + compressible: true + }, + "application/mediaservercontrol+xml": { + source: "iana", + compressible: true, + extensions: ["mscml"] + }, + "application/merge-patch+json": { + source: "iana", + compressible: true + }, + "application/metalink+xml": { + source: "apache", + compressible: true, + extensions: ["metalink"] + }, + "application/metalink4+xml": { + source: "iana", + compressible: true, + extensions: ["meta4"] + }, + "application/mets+xml": { + source: "iana", + compressible: true, + extensions: ["mets"] + }, + "application/mf4": { + source: "iana" + }, + "application/mikey": { + source: "iana" + }, + "application/mipc": { + source: "iana" + }, + "application/missing-blocks+cbor-seq": { + source: "iana" + }, + "application/mmt-aei+xml": { + source: "iana", + compressible: true, + extensions: ["maei"] + }, + "application/mmt-usd+xml": { + source: "iana", + compressible: true, + extensions: ["musd"] + }, + "application/mods+xml": { + source: "iana", + compressible: true, + extensions: ["mods"] + }, + "application/moss-keys": { + source: "iana" + }, + "application/moss-signature": { + source: "iana" + }, + "application/mosskey-data": { + source: "iana" + }, + "application/mosskey-request": { + source: "iana" + }, + "application/mp21": { + source: "iana", + extensions: ["m21", "mp21"] + }, + "application/mp4": { + source: "iana", + extensions: ["mp4", "mpg4", "mp4s", "m4p"] + }, + "application/mpeg4-generic": { + source: "iana" + }, + "application/mpeg4-iod": { + source: "iana" + }, + "application/mpeg4-iod-xmt": { + source: "iana" + }, + "application/mrb-consumer+xml": { + source: "iana", + compressible: true + }, + "application/mrb-publish+xml": { + source: "iana", + compressible: true + }, + "application/msc-ivr+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/msc-mixer+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/msix": { + compressible: false, + extensions: ["msix"] + }, + "application/msixbundle": { + compressible: false, + extensions: ["msixbundle"] + }, + "application/msword": { + source: "iana", + compressible: false, + extensions: ["doc", "dot"] + }, + "application/mud+json": { + source: "iana", + compressible: true + }, + "application/multipart-core": { + source: "iana" + }, + "application/mxf": { + source: "iana", + extensions: ["mxf"] + }, + "application/n-quads": { + source: "iana", + extensions: ["nq"] + }, + "application/n-triples": { + source: "iana", + extensions: ["nt"] + }, + "application/nasdata": { + source: "iana" + }, + "application/news-checkgroups": { + source: "iana", + charset: "US-ASCII" + }, + "application/news-groupinfo": { + source: "iana", + charset: "US-ASCII" + }, + "application/news-transmission": { + source: "iana" + }, + "application/nlsml+xml": { + source: "iana", + compressible: true + }, + "application/node": { + source: "iana", + extensions: ["cjs"] + }, + "application/nss": { + source: "iana" + }, + "application/oauth-authz-req+jwt": { + source: "iana" + }, + "application/oblivious-dns-message": { + source: "iana" + }, + "application/ocsp-request": { + source: "iana" + }, + "application/ocsp-response": { + source: "iana" + }, + "application/octet-stream": { + source: "iana", + compressible: true, + extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"] + }, + "application/oda": { + source: "iana", + extensions: ["oda"] + }, + "application/odm+xml": { + source: "iana", + compressible: true + }, + "application/odx": { + source: "iana" + }, + "application/oebps-package+xml": { + source: "iana", + compressible: true, + extensions: ["opf"] + }, + "application/ogg": { + source: "iana", + compressible: false, + extensions: ["ogx"] + }, + "application/ohttp-keys": { + source: "iana" + }, + "application/omdoc+xml": { + source: "apache", + compressible: true, + extensions: ["omdoc"] + }, + "application/onenote": { + source: "apache", + extensions: ["onetoc", "onetoc2", "onetmp", "onepkg", "one", "onea"] + }, + "application/opc-nodeset+xml": { + source: "iana", + compressible: true + }, + "application/oscore": { + source: "iana" + }, + "application/oxps": { + source: "iana", + extensions: ["oxps"] + }, + "application/p21": { + source: "iana" + }, + "application/p21+zip": { + source: "iana", + compressible: false + }, + "application/p2p-overlay+xml": { + source: "iana", + compressible: true, + extensions: ["relo"] + }, + "application/parityfec": { + source: "iana" + }, + "application/passport": { + source: "iana" + }, + "application/patch-ops-error+xml": { + source: "iana", + compressible: true, + extensions: ["xer"] + }, + "application/pdf": { + source: "iana", + compressible: false, + extensions: ["pdf"] + }, + "application/pdx": { + source: "iana" + }, + "application/pem-certificate-chain": { + source: "iana" + }, + "application/pgp-encrypted": { + source: "iana", + compressible: false, + extensions: ["pgp"] + }, + "application/pgp-keys": { + source: "iana", + extensions: ["asc"] + }, + "application/pgp-signature": { + source: "iana", + extensions: ["sig", "asc"] + }, + "application/pics-rules": { + source: "apache", + extensions: ["prf"] + }, + "application/pidf+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/pidf-diff+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/pkcs10": { + source: "iana", + extensions: ["p10"] + }, + "application/pkcs12": { + source: "iana" + }, + "application/pkcs7-mime": { + source: "iana", + extensions: ["p7m", "p7c"] + }, + "application/pkcs7-signature": { + source: "iana", + extensions: ["p7s"] + }, + "application/pkcs8": { + source: "iana", + extensions: ["p8"] + }, + "application/pkcs8-encrypted": { + source: "iana" + }, + "application/pkix-attr-cert": { + source: "iana", + extensions: ["ac"] + }, + "application/pkix-cert": { + source: "iana", + extensions: ["cer"] + }, + "application/pkix-crl": { + source: "iana", + extensions: ["crl"] + }, + "application/pkix-pkipath": { + source: "iana", + extensions: ["pkipath"] + }, + "application/pkixcmp": { + source: "iana", + extensions: ["pki"] + }, + "application/pls+xml": { + source: "iana", + compressible: true, + extensions: ["pls"] + }, + "application/poc-settings+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/postscript": { + source: "iana", + compressible: true, + extensions: ["ai", "eps", "ps"] + }, + "application/ppsp-tracker+json": { + source: "iana", + compressible: true + }, + "application/private-token-issuer-directory": { + source: "iana" + }, + "application/private-token-request": { + source: "iana" + }, + "application/private-token-response": { + source: "iana" + }, + "application/problem+json": { + source: "iana", + compressible: true + }, + "application/problem+xml": { + source: "iana", + compressible: true + }, + "application/provenance+xml": { + source: "iana", + compressible: true, + extensions: ["provx"] + }, + "application/provided-claims+jwt": { + source: "iana" + }, + "application/prs.alvestrand.titrax-sheet": { + source: "iana" + }, + "application/prs.cww": { + source: "iana", + extensions: ["cww"] + }, + "application/prs.cyn": { + source: "iana", + charset: "7-BIT" + }, + "application/prs.hpub+zip": { + source: "iana", + compressible: false + }, + "application/prs.implied-document+xml": { + source: "iana", + compressible: true + }, + "application/prs.implied-executable": { + source: "iana" + }, + "application/prs.implied-object+json": { + source: "iana", + compressible: true + }, + "application/prs.implied-object+json-seq": { + source: "iana" + }, + "application/prs.implied-object+yaml": { + source: "iana" + }, + "application/prs.implied-structure": { + source: "iana" + }, + "application/prs.mayfile": { + source: "iana" + }, + "application/prs.nprend": { + source: "iana" + }, + "application/prs.plucker": { + source: "iana" + }, + "application/prs.rdf-xml-crypt": { + source: "iana" + }, + "application/prs.vcfbzip2": { + source: "iana" + }, + "application/prs.xsf+xml": { + source: "iana", + compressible: true, + extensions: ["xsf"] + }, + "application/pskc+xml": { + source: "iana", + compressible: true, + extensions: ["pskcxml"] + }, + "application/pvd+json": { + source: "iana", + compressible: true + }, + "application/qsig": { + source: "iana" + }, + "application/raml+yaml": { + compressible: true, + extensions: ["raml"] + }, + "application/raptorfec": { + source: "iana" + }, + "application/rdap+json": { + source: "iana", + compressible: true + }, + "application/rdf+xml": { + source: "iana", + compressible: true, + extensions: ["rdf", "owl"] + }, + "application/reginfo+xml": { + source: "iana", + compressible: true, + extensions: ["rif"] + }, + "application/relax-ng-compact-syntax": { + source: "iana", + extensions: ["rnc"] + }, + "application/remote-printing": { + source: "apache" + }, + "application/reputon+json": { + source: "iana", + compressible: true + }, + "application/resolve-response+jwt": { + source: "iana" + }, + "application/resource-lists+xml": { + source: "iana", + compressible: true, + extensions: ["rl"] + }, + "application/resource-lists-diff+xml": { + source: "iana", + compressible: true, + extensions: ["rld"] + }, + "application/rfc+xml": { + source: "iana", + compressible: true + }, + "application/riscos": { + source: "iana" + }, + "application/rlmi+xml": { + source: "iana", + compressible: true + }, + "application/rls-services+xml": { + source: "iana", + compressible: true, + extensions: ["rs"] + }, + "application/route-apd+xml": { + source: "iana", + compressible: true, + extensions: ["rapd"] + }, + "application/route-s-tsid+xml": { + source: "iana", + compressible: true, + extensions: ["sls"] + }, + "application/route-usd+xml": { + source: "iana", + compressible: true, + extensions: ["rusd"] + }, + "application/rpki-checklist": { + source: "iana" + }, + "application/rpki-ghostbusters": { + source: "iana", + extensions: ["gbr"] + }, + "application/rpki-manifest": { + source: "iana", + extensions: ["mft"] + }, + "application/rpki-publication": { + source: "iana" + }, + "application/rpki-roa": { + source: "iana", + extensions: ["roa"] + }, + "application/rpki-signed-tal": { + source: "iana" + }, + "application/rpki-updown": { + source: "iana" + }, + "application/rsd+xml": { + source: "apache", + compressible: true, + extensions: ["rsd"] + }, + "application/rss+xml": { + source: "apache", + compressible: true, + extensions: ["rss"] + }, + "application/rtf": { + source: "iana", + compressible: true, + extensions: ["rtf"] + }, + "application/rtploopback": { + source: "iana" + }, + "application/rtx": { + source: "iana" + }, + "application/samlassertion+xml": { + source: "iana", + compressible: true + }, + "application/samlmetadata+xml": { + source: "iana", + compressible: true + }, + "application/sarif+json": { + source: "iana", + compressible: true + }, + "application/sarif-external-properties+json": { + source: "iana", + compressible: true + }, + "application/sbe": { + source: "iana" + }, + "application/sbml+xml": { + source: "iana", + compressible: true, + extensions: ["sbml"] + }, + "application/scaip+xml": { + source: "iana", + compressible: true + }, + "application/scim+json": { + source: "iana", + compressible: true + }, + "application/scvp-cv-request": { + source: "iana", + extensions: ["scq"] + }, + "application/scvp-cv-response": { + source: "iana", + extensions: ["scs"] + }, + "application/scvp-vp-request": { + source: "iana", + extensions: ["spq"] + }, + "application/scvp-vp-response": { + source: "iana", + extensions: ["spp"] + }, + "application/sdp": { + source: "iana", + extensions: ["sdp"] + }, + "application/secevent+jwt": { + source: "iana" + }, + "application/senml+cbor": { + source: "iana" + }, + "application/senml+json": { + source: "iana", + compressible: true + }, + "application/senml+xml": { + source: "iana", + compressible: true, + extensions: ["senmlx"] + }, + "application/senml-etch+cbor": { + source: "iana" + }, + "application/senml-etch+json": { + source: "iana", + compressible: true + }, + "application/senml-exi": { + source: "iana" + }, + "application/sensml+cbor": { + source: "iana" + }, + "application/sensml+json": { + source: "iana", + compressible: true + }, + "application/sensml+xml": { + source: "iana", + compressible: true, + extensions: ["sensmlx"] + }, + "application/sensml-exi": { + source: "iana" + }, + "application/sep+xml": { + source: "iana", + compressible: true + }, + "application/sep-exi": { + source: "iana" + }, + "application/session-info": { + source: "iana" + }, + "application/set-payment": { + source: "iana" + }, + "application/set-payment-initiation": { + source: "iana", + extensions: ["setpay"] + }, + "application/set-registration": { + source: "iana" + }, + "application/set-registration-initiation": { + source: "iana", + extensions: ["setreg"] + }, + "application/sgml": { + source: "iana" + }, + "application/sgml-open-catalog": { + source: "iana" + }, + "application/shf+xml": { + source: "iana", + compressible: true, + extensions: ["shf"] + }, + "application/sieve": { + source: "iana", + extensions: ["siv", "sieve"] + }, + "application/simple-filter+xml": { + source: "iana", + compressible: true + }, + "application/simple-message-summary": { + source: "iana" + }, + "application/simplesymbolcontainer": { + source: "iana" + }, + "application/sipc": { + source: "iana" + }, + "application/slate": { + source: "iana" + }, + "application/smil": { + source: "apache" + }, + "application/smil+xml": { + source: "iana", + compressible: true, + extensions: ["smi", "smil"] + }, + "application/smpte336m": { + source: "iana" + }, + "application/soap+fastinfoset": { + source: "iana" + }, + "application/soap+xml": { + source: "iana", + compressible: true + }, + "application/sparql-query": { + source: "iana", + extensions: ["rq"] + }, + "application/sparql-results+xml": { + source: "iana", + compressible: true, + extensions: ["srx"] + }, + "application/spdx+json": { + source: "iana", + compressible: true + }, + "application/spirits-event+xml": { + source: "iana", + compressible: true + }, + "application/sql": { + source: "iana", + extensions: ["sql"] + }, + "application/srgs": { + source: "iana", + extensions: ["gram"] + }, + "application/srgs+xml": { + source: "iana", + compressible: true, + extensions: ["grxml"] + }, + "application/sru+xml": { + source: "iana", + compressible: true, + extensions: ["sru"] + }, + "application/ssdl+xml": { + source: "apache", + compressible: true, + extensions: ["ssdl"] + }, + "application/sslkeylogfile": { + source: "iana" + }, + "application/ssml+xml": { + source: "iana", + compressible: true, + extensions: ["ssml"] + }, + "application/st2110-41": { + source: "iana" + }, + "application/stix+json": { + source: "iana", + compressible: true + }, + "application/stratum": { + source: "iana" + }, + "application/swid+cbor": { + source: "iana" + }, + "application/swid+xml": { + source: "iana", + compressible: true, + extensions: ["swidtag"] + }, + "application/tamp-apex-update": { + source: "iana" + }, + "application/tamp-apex-update-confirm": { + source: "iana" + }, + "application/tamp-community-update": { + source: "iana" + }, + "application/tamp-community-update-confirm": { + source: "iana" + }, + "application/tamp-error": { + source: "iana" + }, + "application/tamp-sequence-adjust": { + source: "iana" + }, + "application/tamp-sequence-adjust-confirm": { + source: "iana" + }, + "application/tamp-status-query": { + source: "iana" + }, + "application/tamp-status-response": { + source: "iana" + }, + "application/tamp-update": { + source: "iana" + }, + "application/tamp-update-confirm": { + source: "iana" + }, + "application/tar": { + compressible: true + }, + "application/taxii+json": { + source: "iana", + compressible: true + }, + "application/td+json": { + source: "iana", + compressible: true + }, + "application/tei+xml": { + source: "iana", + compressible: true, + extensions: ["tei", "teicorpus"] + }, + "application/tetra_isi": { + source: "iana" + }, + "application/thraud+xml": { + source: "iana", + compressible: true, + extensions: ["tfi"] + }, + "application/timestamp-query": { + source: "iana" + }, + "application/timestamp-reply": { + source: "iana" + }, + "application/timestamped-data": { + source: "iana", + extensions: ["tsd"] + }, + "application/tlsrpt+gzip": { + source: "iana" + }, + "application/tlsrpt+json": { + source: "iana", + compressible: true + }, + "application/tm+json": { + source: "iana", + compressible: true + }, + "application/tnauthlist": { + source: "iana" + }, + "application/toc+cbor": { + source: "iana" + }, + "application/token-introspection+jwt": { + source: "iana" + }, + "application/toml": { + source: "iana", + compressible: true, + extensions: ["toml"] + }, + "application/trickle-ice-sdpfrag": { + source: "iana" + }, + "application/trig": { + source: "iana", + extensions: ["trig"] + }, + "application/trust-chain+json": { + source: "iana", + compressible: true + }, + "application/trust-mark+jwt": { + source: "iana" + }, + "application/trust-mark-delegation+jwt": { + source: "iana" + }, + "application/ttml+xml": { + source: "iana", + compressible: true, + extensions: ["ttml"] + }, + "application/tve-trigger": { + source: "iana" + }, + "application/tzif": { + source: "iana" + }, + "application/tzif-leap": { + source: "iana" + }, + "application/ubjson": { + compressible: false, + extensions: ["ubj"] + }, + "application/uccs+cbor": { + source: "iana" + }, + "application/ujcs+json": { + source: "iana", + compressible: true + }, + "application/ulpfec": { + source: "iana" + }, + "application/urc-grpsheet+xml": { + source: "iana", + compressible: true + }, + "application/urc-ressheet+xml": { + source: "iana", + compressible: true, + extensions: ["rsheet"] + }, + "application/urc-targetdesc+xml": { + source: "iana", + compressible: true, + extensions: ["td"] + }, + "application/urc-uisocketdesc+xml": { + source: "iana", + compressible: true + }, + "application/vc": { + source: "iana" + }, + "application/vc+cose": { + source: "iana" + }, + "application/vc+jwt": { + source: "iana" + }, + "application/vcard+json": { + source: "iana", + compressible: true + }, + "application/vcard+xml": { + source: "iana", + compressible: true + }, + "application/vemmi": { + source: "iana" + }, + "application/vividence.scriptfile": { + source: "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + source: "iana", + compressible: true, + extensions: ["1km"] + }, + "application/vnd.1ob": { + source: "iana" + }, + "application/vnd.3gpp-prose+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-prose-pc3a+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-prose-pc3ach+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-prose-pc8+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp-v2x-local-service-information": { + source: "iana" + }, + "application/vnd.3gpp.5gnas": { + source: "iana" + }, + "application/vnd.3gpp.5gsa2x": { + source: "iana" + }, + "application/vnd.3gpp.5gsa2x-local-service-information": { + source: "iana" + }, + "application/vnd.3gpp.5gsv2x": { + source: "iana" + }, + "application/vnd.3gpp.5gsv2x-local-service-information": { + source: "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.bsf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.crs+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.current-location-discovery+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.gmop+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.gtpc": { + source: "iana" + }, + "application/vnd.3gpp.interworking-data": { + source: "iana" + }, + "application/vnd.3gpp.lpp": { + source: "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + source: "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-payload": { + source: "iana" + }, + "application/vnd.3gpp.mcdata-regroup+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-signalling": { + source: "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-regroup+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-regroup+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.mid-call+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.ngap": { + source: "iana" + }, + "application/vnd.3gpp.pfcp": { + source: "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + source: "iana", + extensions: ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + source: "iana", + extensions: ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + source: "iana", + extensions: ["pvb"] + }, + "application/vnd.3gpp.pinapp-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.s1ap": { + source: "iana" + }, + "application/vnd.3gpp.seal-group-doc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-location-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-mbms-usage-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-network-qos-management-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-ue-config-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-unicast-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.seal-user-profile-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.sms": { + source: "iana" + }, + "application/vnd.3gpp.sms+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.srvcc-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.ussd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp.v2x": { + source: "iana" + }, + "application/vnd.3gpp.vae-info+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + source: "iana", + compressible: true + }, + "application/vnd.3gpp2.sms": { + source: "iana" + }, + "application/vnd.3gpp2.tcap": { + source: "iana", + extensions: ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + source: "iana" + }, + "application/vnd.3m.post-it-notes": { + source: "iana", + extensions: ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + source: "iana", + extensions: ["aso"] + }, + "application/vnd.accpac.simply.imp": { + source: "iana", + extensions: ["imp"] + }, + "application/vnd.acm.addressxfer+json": { + source: "iana", + compressible: true + }, + "application/vnd.acm.chatbot+json": { + source: "iana", + compressible: true + }, + "application/vnd.acucobol": { + source: "iana", + extensions: ["acu"] + }, + "application/vnd.acucorp": { + source: "iana", + extensions: ["atc", "acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + source: "apache", + compressible: false, + extensions: ["air"] + }, + "application/vnd.adobe.flash.movie": { + source: "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + source: "iana", + extensions: ["fcdt"] + }, + "application/vnd.adobe.fxp": { + source: "iana", + extensions: ["fxp", "fxpl"] + }, + "application/vnd.adobe.partial-upload": { + source: "iana" + }, + "application/vnd.adobe.xdp+xml": { + source: "iana", + compressible: true, + extensions: ["xdp"] + }, + "application/vnd.adobe.xfdf": { + source: "apache", + extensions: ["xfdf"] + }, + "application/vnd.aether.imp": { + source: "iana" + }, + "application/vnd.afpc.afplinedata": { + source: "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + source: "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + source: "iana" + }, + "application/vnd.afpc.foca-charset": { + source: "iana" + }, + "application/vnd.afpc.foca-codedfont": { + source: "iana" + }, + "application/vnd.afpc.foca-codepage": { + source: "iana" + }, + "application/vnd.afpc.modca": { + source: "iana" + }, + "application/vnd.afpc.modca-cmtable": { + source: "iana" + }, + "application/vnd.afpc.modca-formdef": { + source: "iana" + }, + "application/vnd.afpc.modca-mediummap": { + source: "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + source: "iana" + }, + "application/vnd.afpc.modca-overlay": { + source: "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + source: "iana" + }, + "application/vnd.age": { + source: "iana", + extensions: ["age"] + }, + "application/vnd.ah-barcode": { + source: "apache" + }, + "application/vnd.ahead.space": { + source: "iana", + extensions: ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + source: "iana", + extensions: ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + source: "iana", + extensions: ["azs"] + }, + "application/vnd.amadeus+json": { + source: "iana", + compressible: true + }, + "application/vnd.amazon.ebook": { + source: "apache", + extensions: ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + source: "iana" + }, + "application/vnd.americandynamics.acc": { + source: "iana", + extensions: ["acc"] + }, + "application/vnd.amiga.ami": { + source: "iana", + extensions: ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + source: "iana", + compressible: true + }, + "application/vnd.android.ota": { + source: "iana" + }, + "application/vnd.android.package-archive": { + source: "apache", + compressible: false, + extensions: ["apk"] + }, + "application/vnd.anki": { + source: "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + source: "iana", + extensions: ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + source: "apache", + extensions: ["fti"] + }, + "application/vnd.antix.game-component": { + source: "iana", + extensions: ["atx"] + }, + "application/vnd.apache.arrow.file": { + source: "iana" + }, + "application/vnd.apache.arrow.stream": { + source: "iana" + }, + "application/vnd.apache.parquet": { + source: "iana" + }, + "application/vnd.apache.thrift.binary": { + source: "iana" + }, + "application/vnd.apache.thrift.compact": { + source: "iana" + }, + "application/vnd.apache.thrift.json": { + source: "iana" + }, + "application/vnd.apexlang": { + source: "iana" + }, + "application/vnd.api+json": { + source: "iana", + compressible: true + }, + "application/vnd.aplextor.warrp+json": { + source: "iana", + compressible: true + }, + "application/vnd.apothekende.reservation+json": { + source: "iana", + compressible: true + }, + "application/vnd.apple.installer+xml": { + source: "iana", + compressible: true, + extensions: ["mpkg"] + }, + "application/vnd.apple.keynote": { + source: "iana", + extensions: ["key"] + }, + "application/vnd.apple.mpegurl": { + source: "iana", + extensions: ["m3u8"] + }, + "application/vnd.apple.numbers": { + source: "iana", + extensions: ["numbers"] + }, + "application/vnd.apple.pages": { + source: "iana", + extensions: ["pages"] + }, + "application/vnd.apple.pkpass": { + compressible: false, + extensions: ["pkpass"] + }, + "application/vnd.arastra.swi": { + source: "apache" + }, + "application/vnd.aristanetworks.swi": { + source: "iana", + extensions: ["swi"] + }, + "application/vnd.artisan+json": { + source: "iana", + compressible: true + }, + "application/vnd.artsquare": { + source: "iana" + }, + "application/vnd.astraea-software.iota": { + source: "iana", + extensions: ["iota"] + }, + "application/vnd.audiograph": { + source: "iana", + extensions: ["aep"] + }, + "application/vnd.autodesk.fbx": { + extensions: ["fbx"] + }, + "application/vnd.autopackage": { + source: "iana" + }, + "application/vnd.avalon+json": { + source: "iana", + compressible: true + }, + "application/vnd.avistar+xml": { + source: "iana", + compressible: true + }, + "application/vnd.balsamiq.bmml+xml": { + source: "iana", + compressible: true, + extensions: ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + source: "iana" + }, + "application/vnd.banana-accounting": { + source: "iana" + }, + "application/vnd.bbf.usp.error": { + source: "iana" + }, + "application/vnd.bbf.usp.msg": { + source: "iana" + }, + "application/vnd.bbf.usp.msg+json": { + source: "iana", + compressible: true + }, + "application/vnd.bekitzur-stech+json": { + source: "iana", + compressible: true + }, + "application/vnd.belightsoft.lhzd+zip": { + source: "iana", + compressible: false + }, + "application/vnd.belightsoft.lhzl+zip": { + source: "iana", + compressible: false + }, + "application/vnd.bint.med-content": { + source: "iana" + }, + "application/vnd.biopax.rdf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.blink-idb-value-wrapper": { + source: "iana" + }, + "application/vnd.blueice.multipass": { + source: "iana", + extensions: ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + source: "iana" + }, + "application/vnd.bluetooth.le.oob": { + source: "iana" + }, + "application/vnd.bmi": { + source: "iana", + extensions: ["bmi"] + }, + "application/vnd.bpf": { + source: "iana" + }, + "application/vnd.bpf3": { + source: "iana" + }, + "application/vnd.businessobjects": { + source: "iana", + extensions: ["rep"] + }, + "application/vnd.byu.uapi+json": { + source: "iana", + compressible: true + }, + "application/vnd.bzip3": { + source: "iana" + }, + "application/vnd.c3voc.schedule+xml": { + source: "iana", + compressible: true + }, + "application/vnd.cab-jscript": { + source: "iana" + }, + "application/vnd.canon-cpdl": { + source: "iana" + }, + "application/vnd.canon-lips": { + source: "iana" + }, + "application/vnd.capasystems-pg+json": { + source: "iana", + compressible: true + }, + "application/vnd.cendio.thinlinc.clientconf": { + source: "iana" + }, + "application/vnd.century-systems.tcp_stream": { + source: "iana" + }, + "application/vnd.chemdraw+xml": { + source: "iana", + compressible: true, + extensions: ["cdxml"] + }, + "application/vnd.chess-pgn": { + source: "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + source: "iana", + extensions: ["mmd"] + }, + "application/vnd.ciedi": { + source: "iana" + }, + "application/vnd.cinderella": { + source: "iana", + extensions: ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + source: "iana" + }, + "application/vnd.citationstyles.style+xml": { + source: "iana", + compressible: true, + extensions: ["csl"] + }, + "application/vnd.claymore": { + source: "iana", + extensions: ["cla"] + }, + "application/vnd.cloanto.rp9": { + source: "iana", + extensions: ["rp9"] + }, + "application/vnd.clonk.c4group": { + source: "iana", + extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + source: "iana", + extensions: ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + source: "iana", + extensions: ["c11amz"] + }, + "application/vnd.cncf.helm.chart.content.v1.tar+gzip": { + source: "iana" + }, + "application/vnd.cncf.helm.chart.provenance.v1.prov": { + source: "iana" + }, + "application/vnd.cncf.helm.config.v1+json": { + source: "iana", + compressible: true + }, + "application/vnd.coffeescript": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.document": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + source: "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + source: "iana" + }, + "application/vnd.collection+json": { + source: "iana", + compressible: true + }, + "application/vnd.collection.doc+json": { + source: "iana", + compressible: true + }, + "application/vnd.collection.next+json": { + source: "iana", + compressible: true + }, + "application/vnd.comicbook+zip": { + source: "iana", + compressible: false + }, + "application/vnd.comicbook-rar": { + source: "iana" + }, + "application/vnd.commerce-battelle": { + source: "iana" + }, + "application/vnd.commonspace": { + source: "iana", + extensions: ["csp"] + }, + "application/vnd.contact.cmsg": { + source: "iana", + extensions: ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + source: "iana", + compressible: true + }, + "application/vnd.cosmocaller": { + source: "iana", + extensions: ["cmc"] + }, + "application/vnd.crick.clicker": { + source: "iana", + extensions: ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + source: "iana", + extensions: ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + source: "iana", + extensions: ["clkp"] + }, + "application/vnd.crick.clicker.template": { + source: "iana", + extensions: ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + source: "iana", + extensions: ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + source: "iana", + compressible: true, + extensions: ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + source: "iana", + compressible: true + }, + "application/vnd.crypto-shade-file": { + source: "iana" + }, + "application/vnd.cryptomator.encrypted": { + source: "iana" + }, + "application/vnd.cryptomator.vault": { + source: "iana" + }, + "application/vnd.ctc-posml": { + source: "iana", + extensions: ["pml"] + }, + "application/vnd.ctct.ws+xml": { + source: "iana", + compressible: true + }, + "application/vnd.cups-pdf": { + source: "iana" + }, + "application/vnd.cups-postscript": { + source: "iana" + }, + "application/vnd.cups-ppd": { + source: "iana", + extensions: ["ppd"] + }, + "application/vnd.cups-raster": { + source: "iana" + }, + "application/vnd.cups-raw": { + source: "iana" + }, + "application/vnd.curl": { + source: "iana" + }, + "application/vnd.curl.car": { + source: "apache", + extensions: ["car"] + }, + "application/vnd.curl.pcurl": { + source: "apache", + extensions: ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + source: "iana", + compressible: true + }, + "application/vnd.cybank": { + source: "iana" + }, + "application/vnd.cyclonedx+json": { + source: "iana", + compressible: true + }, + "application/vnd.cyclonedx+xml": { + source: "iana", + compressible: true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + source: "iana", + compressible: false + }, + "application/vnd.d3m-dataset": { + source: "iana" + }, + "application/vnd.d3m-problem": { + source: "iana" + }, + "application/vnd.dart": { + source: "iana", + compressible: true, + extensions: ["dart"] + }, + "application/vnd.data-vision.rdz": { + source: "iana", + extensions: ["rdz"] + }, + "application/vnd.datalog": { + source: "iana" + }, + "application/vnd.datapackage+json": { + source: "iana", + compressible: true + }, + "application/vnd.dataresource+json": { + source: "iana", + compressible: true + }, + "application/vnd.dbf": { + source: "iana", + extensions: ["dbf"] + }, + "application/vnd.dcmp+xml": { + source: "iana", + compressible: true, + extensions: ["dcmp"] + }, + "application/vnd.debian.binary-package": { + source: "iana" + }, + "application/vnd.dece.data": { + source: "iana", + extensions: ["uvf", "uvvf", "uvd", "uvvd"] + }, + "application/vnd.dece.ttml+xml": { + source: "iana", + compressible: true, + extensions: ["uvt", "uvvt"] + }, + "application/vnd.dece.unspecified": { + source: "iana", + extensions: ["uvx", "uvvx"] + }, + "application/vnd.dece.zip": { + source: "iana", + extensions: ["uvz", "uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + source: "iana", + extensions: ["fe_launch"] + }, + "application/vnd.desmume.movie": { + source: "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + source: "iana" + }, + "application/vnd.dm.delegation+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dna": { + source: "iana", + extensions: ["dna"] + }, + "application/vnd.document+json": { + source: "iana", + compressible: true + }, + "application/vnd.dolby.mlp": { + source: "apache", + extensions: ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + source: "iana" + }, + "application/vnd.dolby.mobile.2": { + source: "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + source: "iana" + }, + "application/vnd.dpgraph": { + source: "iana", + extensions: ["dpg"] + }, + "application/vnd.dreamfactory": { + source: "iana", + extensions: ["dfac"] + }, + "application/vnd.drive+json": { + source: "iana", + compressible: true + }, + "application/vnd.ds-keypoint": { + source: "apache", + extensions: ["kpxx"] + }, + "application/vnd.dtg.local": { + source: "iana" + }, + "application/vnd.dtg.local.flash": { + source: "iana" + }, + "application/vnd.dtg.local.html": { + source: "iana" + }, + "application/vnd.dvb.ait": { + source: "iana", + extensions: ["ait"] + }, + "application/vnd.dvb.dvbisl+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.dvbj": { + source: "iana" + }, + "application/vnd.dvb.esgcontainer": { + source: "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + source: "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + source: "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + source: "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + source: "iana" + }, + "application/vnd.dvb.ipdcroaming": { + source: "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + source: "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + source: "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-container+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-generic+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.notif-init+xml": { + source: "iana", + compressible: true + }, + "application/vnd.dvb.pfr": { + source: "iana" + }, + "application/vnd.dvb.service": { + source: "iana", + extensions: ["svc"] + }, + "application/vnd.dxr": { + source: "iana" + }, + "application/vnd.dynageo": { + source: "iana", + extensions: ["geo"] + }, + "application/vnd.dzr": { + source: "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + source: "iana" + }, + "application/vnd.ecdis-update": { + source: "iana" + }, + "application/vnd.ecip.rlp": { + source: "iana" + }, + "application/vnd.eclipse.ditto+json": { + source: "iana", + compressible: true + }, + "application/vnd.ecowin.chart": { + source: "iana", + extensions: ["mag"] + }, + "application/vnd.ecowin.filerequest": { + source: "iana" + }, + "application/vnd.ecowin.fileupdate": { + source: "iana" + }, + "application/vnd.ecowin.series": { + source: "iana" + }, + "application/vnd.ecowin.seriesrequest": { + source: "iana" + }, + "application/vnd.ecowin.seriesupdate": { + source: "iana" + }, + "application/vnd.efi.img": { + source: "iana" + }, + "application/vnd.efi.iso": { + source: "iana" + }, + "application/vnd.eln+zip": { + source: "iana", + compressible: false + }, + "application/vnd.emclient.accessrequest+xml": { + source: "iana", + compressible: true + }, + "application/vnd.enliven": { + source: "iana", + extensions: ["nml"] + }, + "application/vnd.enphase.envoy": { + source: "iana" + }, + "application/vnd.eprints.data+xml": { + source: "iana", + compressible: true + }, + "application/vnd.epson.esf": { + source: "iana", + extensions: ["esf"] + }, + "application/vnd.epson.msf": { + source: "iana", + extensions: ["msf"] + }, + "application/vnd.epson.quickanime": { + source: "iana", + extensions: ["qam"] + }, + "application/vnd.epson.salt": { + source: "iana", + extensions: ["slt"] + }, + "application/vnd.epson.ssf": { + source: "iana", + extensions: ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + source: "iana" + }, + "application/vnd.erofs": { + source: "iana" + }, + "application/vnd.espass-espass+zip": { + source: "iana", + compressible: false + }, + "application/vnd.eszigno3+xml": { + source: "iana", + compressible: true, + extensions: ["es3", "et3"] + }, + "application/vnd.etsi.aoc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.asic-e+zip": { + source: "iana", + compressible: false + }, + "application/vnd.etsi.asic-s+zip": { + source: "iana", + compressible: false + }, + "application/vnd.etsi.cug+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvcommand+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvservice+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvsync+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.iptvueprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.mcid+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.mheg5": { + source: "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.pstn+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.sci+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.simservs+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.timestamp-token": { + source: "iana" + }, + "application/vnd.etsi.tsl+xml": { + source: "iana", + compressible: true + }, + "application/vnd.etsi.tsl.der": { + source: "iana" + }, + "application/vnd.eu.kasparian.car+json": { + source: "iana", + compressible: true + }, + "application/vnd.eudora.data": { + source: "iana" + }, + "application/vnd.evolv.ecig.profile": { + source: "iana" + }, + "application/vnd.evolv.ecig.settings": { + source: "iana" + }, + "application/vnd.evolv.ecig.theme": { + source: "iana" + }, + "application/vnd.exstream-empower+zip": { + source: "iana", + compressible: false + }, + "application/vnd.exstream-package": { + source: "iana" + }, + "application/vnd.ezpix-album": { + source: "iana", + extensions: ["ez2"] + }, + "application/vnd.ezpix-package": { + source: "iana", + extensions: ["ez3"] + }, + "application/vnd.f-secure.mobile": { + source: "iana" + }, + "application/vnd.familysearch.gedcom+zip": { + source: "iana", + compressible: false + }, + "application/vnd.fastcopy-disk-image": { + source: "iana" + }, + "application/vnd.fdf": { + source: "apache", + extensions: ["fdf"] + }, + "application/vnd.fdsn.mseed": { + source: "iana", + extensions: ["mseed"] + }, + "application/vnd.fdsn.seed": { + source: "iana", + extensions: ["seed", "dataless"] + }, + "application/vnd.fdsn.stationxml+xml": { + source: "iana", + charset: "XML-BASED", + compressible: true + }, + "application/vnd.ffsns": { + source: "iana" + }, + "application/vnd.ficlab.flb+zip": { + source: "iana", + compressible: false + }, + "application/vnd.filmit.zfc": { + source: "iana" + }, + "application/vnd.fints": { + source: "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + source: "iana" + }, + "application/vnd.flographit": { + source: "iana", + extensions: ["gph"] + }, + "application/vnd.fluxtime.clip": { + source: "iana", + extensions: ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + source: "iana" + }, + "application/vnd.framemaker": { + source: "iana", + extensions: ["fm", "frame", "maker", "book"] + }, + "application/vnd.freelog.comic": { + source: "iana" + }, + "application/vnd.frogans.fnc": { + source: "apache", + extensions: ["fnc"] + }, + "application/vnd.frogans.ltf": { + source: "apache", + extensions: ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + source: "iana", + extensions: ["fsc"] + }, + "application/vnd.fujifilm.fb.docuworks": { + source: "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + source: "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + source: "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + source: "iana", + compressible: true + }, + "application/vnd.fujitsu.oasys": { + source: "iana", + extensions: ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + source: "iana", + extensions: ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + source: "iana", + extensions: ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + source: "iana", + extensions: ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + source: "iana", + extensions: ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + source: "iana" + }, + "application/vnd.fujixerox.art4": { + source: "iana" + }, + "application/vnd.fujixerox.ddd": { + source: "iana", + extensions: ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + source: "iana", + extensions: ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + source: "iana", + extensions: ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + source: "iana" + }, + "application/vnd.fujixerox.hbpl": { + source: "iana" + }, + "application/vnd.fut-misnet": { + source: "iana" + }, + "application/vnd.futoin+cbor": { + source: "iana" + }, + "application/vnd.futoin+json": { + source: "iana", + compressible: true + }, + "application/vnd.fuzzysheet": { + source: "iana", + extensions: ["fzs"] + }, + "application/vnd.ga4gh.passport+jwt": { + source: "iana" + }, + "application/vnd.genomatix.tuxedo": { + source: "iana", + extensions: ["txd"] + }, + "application/vnd.genozip": { + source: "iana" + }, + "application/vnd.gentics.grd+json": { + source: "iana", + compressible: true + }, + "application/vnd.gentoo.catmetadata+xml": { + source: "iana", + compressible: true + }, + "application/vnd.gentoo.ebuild": { + source: "iana" + }, + "application/vnd.gentoo.eclass": { + source: "iana" + }, + "application/vnd.gentoo.gpkg": { + source: "iana" + }, + "application/vnd.gentoo.manifest": { + source: "iana" + }, + "application/vnd.gentoo.pkgmetadata+xml": { + source: "iana", + compressible: true + }, + "application/vnd.gentoo.xpak": { + source: "iana" + }, + "application/vnd.geo+json": { + source: "apache", + compressible: true + }, + "application/vnd.geocube+xml": { + source: "apache", + compressible: true + }, + "application/vnd.geogebra.file": { + source: "iana", + extensions: ["ggb"] + }, + "application/vnd.geogebra.pinboard": { + source: "iana" + }, + "application/vnd.geogebra.slides": { + source: "iana", + extensions: ["ggs"] + }, + "application/vnd.geogebra.tool": { + source: "iana", + extensions: ["ggt"] + }, + "application/vnd.geometry-explorer": { + source: "iana", + extensions: ["gex", "gre"] + }, + "application/vnd.geonext": { + source: "iana", + extensions: ["gxt"] + }, + "application/vnd.geoplan": { + source: "iana", + extensions: ["g2w"] + }, + "application/vnd.geospace": { + source: "iana", + extensions: ["g3w"] + }, + "application/vnd.gerber": { + source: "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + source: "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + source: "iana" + }, + "application/vnd.gmx": { + source: "iana", + extensions: ["gmx"] + }, + "application/vnd.gnu.taler.exchange+json": { + source: "iana", + compressible: true + }, + "application/vnd.gnu.taler.merchant+json": { + source: "iana", + compressible: true + }, + "application/vnd.google-apps.audio": {}, + "application/vnd.google-apps.document": { + compressible: false, + extensions: ["gdoc"] + }, + "application/vnd.google-apps.drawing": { + compressible: false, + extensions: ["gdraw"] + }, + "application/vnd.google-apps.drive-sdk": { + compressible: false + }, + "application/vnd.google-apps.file": {}, + "application/vnd.google-apps.folder": { + compressible: false + }, + "application/vnd.google-apps.form": { + compressible: false, + extensions: ["gform"] + }, + "application/vnd.google-apps.fusiontable": {}, + "application/vnd.google-apps.jam": { + compressible: false, + extensions: ["gjam"] + }, + "application/vnd.google-apps.mail-layout": {}, + "application/vnd.google-apps.map": { + compressible: false, + extensions: ["gmap"] + }, + "application/vnd.google-apps.photo": {}, + "application/vnd.google-apps.presentation": { + compressible: false, + extensions: ["gslides"] + }, + "application/vnd.google-apps.script": { + compressible: false, + extensions: ["gscript"] + }, + "application/vnd.google-apps.shortcut": {}, + "application/vnd.google-apps.site": { + compressible: false, + extensions: ["gsite"] + }, + "application/vnd.google-apps.spreadsheet": { + compressible: false, + extensions: ["gsheet"] + }, + "application/vnd.google-apps.unknown": {}, + "application/vnd.google-apps.video": {}, + "application/vnd.google-earth.kml+xml": { + source: "iana", + compressible: true, + extensions: ["kml"] + }, + "application/vnd.google-earth.kmz": { + source: "iana", + compressible: false, + extensions: ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + source: "apache", + compressible: true + }, + "application/vnd.gov.sk.e-form+zip": { + source: "iana", + compressible: false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + source: "iana", + compressible: true, + extensions: ["xdcf"] + }, + "application/vnd.gpxsee.map+xml": { + source: "iana", + compressible: true + }, + "application/vnd.grafeq": { + source: "iana", + extensions: ["gqf", "gqs"] + }, + "application/vnd.gridmp": { + source: "iana" + }, + "application/vnd.groove-account": { + source: "iana", + extensions: ["gac"] + }, + "application/vnd.groove-help": { + source: "iana", + extensions: ["ghf"] + }, + "application/vnd.groove-identity-message": { + source: "iana", + extensions: ["gim"] + }, + "application/vnd.groove-injector": { + source: "iana", + extensions: ["grv"] + }, + "application/vnd.groove-tool-message": { + source: "iana", + extensions: ["gtm"] + }, + "application/vnd.groove-tool-template": { + source: "iana", + extensions: ["tpl"] + }, + "application/vnd.groove-vcard": { + source: "iana", + extensions: ["vcg"] + }, + "application/vnd.hal+json": { + source: "iana", + compressible: true + }, + "application/vnd.hal+xml": { + source: "iana", + compressible: true, + extensions: ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + source: "iana", + compressible: true, + extensions: ["zmm"] + }, + "application/vnd.hbci": { + source: "iana", + extensions: ["hbci"] + }, + "application/vnd.hc+json": { + source: "iana", + compressible: true + }, + "application/vnd.hcl-bireports": { + source: "iana" + }, + "application/vnd.hdt": { + source: "iana" + }, + "application/vnd.heroku+json": { + source: "iana", + compressible: true + }, + "application/vnd.hhe.lesson-player": { + source: "iana", + extensions: ["les"] + }, + "application/vnd.hp-hpgl": { + source: "iana", + extensions: ["hpgl"] + }, + "application/vnd.hp-hpid": { + source: "iana", + extensions: ["hpid"] + }, + "application/vnd.hp-hps": { + source: "iana", + extensions: ["hps"] + }, + "application/vnd.hp-jlyt": { + source: "iana", + extensions: ["jlt"] + }, + "application/vnd.hp-pcl": { + source: "iana", + extensions: ["pcl"] + }, + "application/vnd.hp-pclxl": { + source: "iana", + extensions: ["pclxl"] + }, + "application/vnd.hsl": { + source: "iana" + }, + "application/vnd.httphone": { + source: "iana" + }, + "application/vnd.hydrostatix.sof-data": { + source: "iana", + extensions: ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + source: "iana", + compressible: true + }, + "application/vnd.hyper-item+json": { + source: "iana", + compressible: true + }, + "application/vnd.hyperdrive+json": { + source: "iana", + compressible: true + }, + "application/vnd.hzn-3d-crossword": { + source: "iana" + }, + "application/vnd.ibm.afplinedata": { + source: "apache" + }, + "application/vnd.ibm.electronic-media": { + source: "iana" + }, + "application/vnd.ibm.minipay": { + source: "iana", + extensions: ["mpy"] + }, + "application/vnd.ibm.modcap": { + source: "apache", + extensions: ["afp", "listafp", "list3820"] + }, + "application/vnd.ibm.rights-management": { + source: "iana", + extensions: ["irm"] + }, + "application/vnd.ibm.secure-container": { + source: "iana", + extensions: ["sc"] + }, + "application/vnd.iccprofile": { + source: "iana", + extensions: ["icc", "icm"] + }, + "application/vnd.ieee.1905": { + source: "iana" + }, + "application/vnd.igloader": { + source: "iana", + extensions: ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + source: "iana", + compressible: false + }, + "application/vnd.imagemeter.image+zip": { + source: "iana", + compressible: false + }, + "application/vnd.immervision-ivp": { + source: "iana", + extensions: ["ivp"] + }, + "application/vnd.immervision-ivu": { + source: "iana", + extensions: ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + source: "iana" + }, + "application/vnd.ims.imsccv1p2": { + source: "iana" + }, + "application/vnd.ims.imsccv1p3": { + source: "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + source: "iana", + compressible: true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + source: "iana", + compressible: true + }, + "application/vnd.informedcontrol.rms+xml": { + source: "iana", + compressible: true + }, + "application/vnd.informix-visionary": { + source: "apache" + }, + "application/vnd.infotech.project": { + source: "iana" + }, + "application/vnd.infotech.project+xml": { + source: "iana", + compressible: true + }, + "application/vnd.innopath.wamp.notification": { + source: "iana" + }, + "application/vnd.insors.igm": { + source: "iana", + extensions: ["igm"] + }, + "application/vnd.intercon.formnet": { + source: "iana", + extensions: ["xpw", "xpx"] + }, + "application/vnd.intergeo": { + source: "iana", + extensions: ["i2g"] + }, + "application/vnd.intertrust.digibox": { + source: "iana" + }, + "application/vnd.intertrust.nncp": { + source: "iana" + }, + "application/vnd.intu.qbo": { + source: "iana", + extensions: ["qbo"] + }, + "application/vnd.intu.qfx": { + source: "iana", + extensions: ["qfx"] + }, + "application/vnd.ipfs.ipns-record": { + source: "iana" + }, + "application/vnd.ipld.car": { + source: "iana" + }, + "application/vnd.ipld.dag-cbor": { + source: "iana" + }, + "application/vnd.ipld.dag-json": { + source: "iana" + }, + "application/vnd.ipld.raw": { + source: "iana" + }, + "application/vnd.iptc.g2.catalogitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.newsitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.packageitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.iptc.g2.planningitem+xml": { + source: "iana", + compressible: true + }, + "application/vnd.ipunplugged.rcprofile": { + source: "iana", + extensions: ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + source: "iana", + compressible: true, + extensions: ["irp"] + }, + "application/vnd.is-xpr": { + source: "iana", + extensions: ["xpr"] + }, + "application/vnd.isac.fcs": { + source: "iana", + extensions: ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + source: "iana", + compressible: false + }, + "application/vnd.jam": { + source: "iana", + extensions: ["jam"] + }, + "application/vnd.japannet-directory-service": { + source: "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + source: "iana" + }, + "application/vnd.japannet-payment-wakeup": { + source: "iana" + }, + "application/vnd.japannet-registration": { + source: "iana" + }, + "application/vnd.japannet-registration-wakeup": { + source: "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + source: "iana" + }, + "application/vnd.japannet-verification": { + source: "iana" + }, + "application/vnd.japannet-verification-wakeup": { + source: "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + source: "iana", + extensions: ["rms"] + }, + "application/vnd.jisp": { + source: "iana", + extensions: ["jisp"] + }, + "application/vnd.joost.joda-archive": { + source: "iana", + extensions: ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + source: "iana" + }, + "application/vnd.kahootz": { + source: "iana", + extensions: ["ktz", "ktr"] + }, + "application/vnd.kde.karbon": { + source: "iana", + extensions: ["karbon"] + }, + "application/vnd.kde.kchart": { + source: "iana", + extensions: ["chrt"] + }, + "application/vnd.kde.kformula": { + source: "iana", + extensions: ["kfo"] + }, + "application/vnd.kde.kivio": { + source: "iana", + extensions: ["flw"] + }, + "application/vnd.kde.kontour": { + source: "iana", + extensions: ["kon"] + }, + "application/vnd.kde.kpresenter": { + source: "iana", + extensions: ["kpr", "kpt"] + }, + "application/vnd.kde.kspread": { + source: "iana", + extensions: ["ksp"] + }, + "application/vnd.kde.kword": { + source: "iana", + extensions: ["kwd", "kwt"] + }, + "application/vnd.kdl": { + source: "iana" + }, + "application/vnd.kenameaapp": { + source: "iana", + extensions: ["htke"] + }, + "application/vnd.keyman.kmp+zip": { + source: "iana", + compressible: false + }, + "application/vnd.keyman.kmx": { + source: "iana" + }, + "application/vnd.kidspiration": { + source: "iana", + extensions: ["kia"] + }, + "application/vnd.kinar": { + source: "iana", + extensions: ["kne", "knp"] + }, + "application/vnd.koan": { + source: "iana", + extensions: ["skp", "skd", "skt", "skm"] + }, + "application/vnd.kodak-descriptor": { + source: "iana", + extensions: ["sse"] + }, + "application/vnd.las": { + source: "iana" + }, + "application/vnd.las.las+json": { + source: "iana", + compressible: true + }, + "application/vnd.las.las+xml": { + source: "iana", + compressible: true, + extensions: ["lasxml"] + }, + "application/vnd.laszip": { + source: "iana" + }, + "application/vnd.ldev.productlicensing": { + source: "iana" + }, + "application/vnd.leap+json": { + source: "iana", + compressible: true + }, + "application/vnd.liberty-request+xml": { + source: "iana", + compressible: true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + source: "iana", + extensions: ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + source: "iana", + compressible: true, + extensions: ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + source: "iana", + compressible: false + }, + "application/vnd.loom": { + source: "iana" + }, + "application/vnd.lotus-1-2-3": { + source: "iana", + extensions: ["123"] + }, + "application/vnd.lotus-approach": { + source: "iana", + extensions: ["apr"] + }, + "application/vnd.lotus-freelance": { + source: "iana", + extensions: ["pre"] + }, + "application/vnd.lotus-notes": { + source: "iana", + extensions: ["nsf"] + }, + "application/vnd.lotus-organizer": { + source: "iana", + extensions: ["org"] + }, + "application/vnd.lotus-screencam": { + source: "iana", + extensions: ["scm"] + }, + "application/vnd.lotus-wordpro": { + source: "iana", + extensions: ["lwp"] + }, + "application/vnd.macports.portpkg": { + source: "iana", + extensions: ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + source: "iana", + extensions: ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + source: "iana", + compressible: true + }, + "application/vnd.marlin.drm.conftoken+xml": { + source: "iana", + compressible: true + }, + "application/vnd.marlin.drm.license+xml": { + source: "iana", + compressible: true + }, + "application/vnd.marlin.drm.mdcf": { + source: "iana" + }, + "application/vnd.mason+json": { + source: "iana", + compressible: true + }, + "application/vnd.maxar.archive.3tz+zip": { + source: "iana", + compressible: false + }, + "application/vnd.maxmind.maxmind-db": { + source: "iana" + }, + "application/vnd.mcd": { + source: "iana", + extensions: ["mcd"] + }, + "application/vnd.mdl": { + source: "iana" + }, + "application/vnd.mdl-mbsdf": { + source: "iana" + }, + "application/vnd.medcalcdata": { + source: "iana", + extensions: ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + source: "iana", + extensions: ["cdkey"] + }, + "application/vnd.medicalholodeck.recordxr": { + source: "iana" + }, + "application/vnd.meridian-slingshot": { + source: "iana" + }, + "application/vnd.mermaid": { + source: "iana" + }, + "application/vnd.mfer": { + source: "iana", + extensions: ["mwf"] + }, + "application/vnd.mfmp": { + source: "iana", + extensions: ["mfm"] + }, + "application/vnd.micro+json": { + source: "iana", + compressible: true + }, + "application/vnd.micrografx.flo": { + source: "iana", + extensions: ["flo"] + }, + "application/vnd.micrografx.igx": { + source: "iana", + extensions: ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + source: "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + source: "iana" + }, + "application/vnd.miele+json": { + source: "iana", + compressible: true + }, + "application/vnd.mif": { + source: "iana", + extensions: ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + source: "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + source: "iana" + }, + "application/vnd.mobius.daf": { + source: "iana", + extensions: ["daf"] + }, + "application/vnd.mobius.dis": { + source: "iana", + extensions: ["dis"] + }, + "application/vnd.mobius.mbk": { + source: "iana", + extensions: ["mbk"] + }, + "application/vnd.mobius.mqy": { + source: "iana", + extensions: ["mqy"] + }, + "application/vnd.mobius.msl": { + source: "iana", + extensions: ["msl"] + }, + "application/vnd.mobius.plc": { + source: "iana", + extensions: ["plc"] + }, + "application/vnd.mobius.txf": { + source: "iana", + extensions: ["txf"] + }, + "application/vnd.modl": { + source: "iana" + }, + "application/vnd.mophun.application": { + source: "iana", + extensions: ["mpn"] + }, + "application/vnd.mophun.certificate": { + source: "iana", + extensions: ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + source: "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + source: "iana" + }, + "application/vnd.motorola.iprm": { + source: "iana" + }, + "application/vnd.mozilla.xul+xml": { + source: "iana", + compressible: true, + extensions: ["xul"] + }, + "application/vnd.ms-3mfdocument": { + source: "iana" + }, + "application/vnd.ms-artgalry": { + source: "iana", + extensions: ["cil"] + }, + "application/vnd.ms-asf": { + source: "iana" + }, + "application/vnd.ms-cab-compressed": { + source: "iana", + extensions: ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + source: "apache" + }, + "application/vnd.ms-excel": { + source: "iana", + compressible: false, + extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + source: "iana", + extensions: ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + source: "iana", + extensions: ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + source: "iana", + extensions: ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + source: "iana", + extensions: ["xltm"] + }, + "application/vnd.ms-fontobject": { + source: "iana", + compressible: true, + extensions: ["eot"] + }, + "application/vnd.ms-htmlhelp": { + source: "iana", + extensions: ["chm"] + }, + "application/vnd.ms-ims": { + source: "iana", + extensions: ["ims"] + }, + "application/vnd.ms-lrm": { + source: "iana", + extensions: ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + source: "iana", + compressible: true + }, + "application/vnd.ms-officetheme": { + source: "iana", + extensions: ["thmx"] + }, + "application/vnd.ms-opentype": { + source: "apache", + compressible: true + }, + "application/vnd.ms-outlook": { + compressible: false, + extensions: ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + source: "apache" + }, + "application/vnd.ms-pki.seccat": { + source: "apache", + extensions: ["cat"] + }, + "application/vnd.ms-pki.stl": { + source: "apache", + extensions: ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + source: "iana", + compressible: true + }, + "application/vnd.ms-powerpoint": { + source: "iana", + compressible: false, + extensions: ["ppt", "pps", "pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + source: "iana", + extensions: ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + source: "iana", + extensions: ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + source: "iana", + extensions: ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + source: "iana", + extensions: ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + source: "iana", + extensions: ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + source: "iana", + compressible: true + }, + "application/vnd.ms-printing.printticket+xml": { + source: "apache", + compressible: true + }, + "application/vnd.ms-printschematicket+xml": { + source: "iana", + compressible: true + }, + "application/vnd.ms-project": { + source: "iana", + extensions: ["mpp", "mpt"] + }, + "application/vnd.ms-tnef": { + source: "iana" + }, + "application/vnd.ms-visio.viewer": { + extensions: ["vdx"] + }, + "application/vnd.ms-windows.devicepairing": { + source: "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + source: "iana" + }, + "application/vnd.ms-windows.printerpairing": { + source: "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + source: "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + source: "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + source: "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + source: "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + source: "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + source: "iana", + extensions: ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + source: "iana", + extensions: ["dotm"] + }, + "application/vnd.ms-works": { + source: "iana", + extensions: ["wps", "wks", "wcm", "wdb"] + }, + "application/vnd.ms-wpl": { + source: "iana", + extensions: ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + source: "iana", + compressible: false, + extensions: ["xps"] + }, + "application/vnd.msa-disk-image": { + source: "iana" + }, + "application/vnd.mseq": { + source: "iana", + extensions: ["mseq"] + }, + "application/vnd.msgpack": { + source: "iana" + }, + "application/vnd.msign": { + source: "iana" + }, + "application/vnd.multiad.creator": { + source: "iana" + }, + "application/vnd.multiad.creator.cif": { + source: "iana" + }, + "application/vnd.music-niff": { + source: "iana" + }, + "application/vnd.musician": { + source: "iana", + extensions: ["mus"] + }, + "application/vnd.muvee.style": { + source: "iana", + extensions: ["msty"] + }, + "application/vnd.mynfc": { + source: "iana", + extensions: ["taglet"] + }, + "application/vnd.nacamar.ybrid+json": { + source: "iana", + compressible: true + }, + "application/vnd.nato.bindingdataobject+cbor": { + source: "iana" + }, + "application/vnd.nato.bindingdataobject+json": { + source: "iana", + compressible: true + }, + "application/vnd.nato.bindingdataobject+xml": { + source: "iana", + compressible: true, + extensions: ["bdo"] + }, + "application/vnd.nato.openxmlformats-package.iepd+zip": { + source: "iana", + compressible: false + }, + "application/vnd.ncd.control": { + source: "iana" + }, + "application/vnd.ncd.reference": { + source: "iana" + }, + "application/vnd.nearst.inv+json": { + source: "iana", + compressible: true + }, + "application/vnd.nebumind.line": { + source: "iana" + }, + "application/vnd.nervana": { + source: "iana" + }, + "application/vnd.netfpx": { + source: "iana" + }, + "application/vnd.neurolanguage.nlu": { + source: "iana", + extensions: ["nlu"] + }, + "application/vnd.nimn": { + source: "iana" + }, + "application/vnd.nintendo.nitro.rom": { + source: "iana" + }, + "application/vnd.nintendo.snes.rom": { + source: "iana" + }, + "application/vnd.nitf": { + source: "iana", + extensions: ["ntf", "nitf"] + }, + "application/vnd.noblenet-directory": { + source: "iana", + extensions: ["nnd"] + }, + "application/vnd.noblenet-sealer": { + source: "iana", + extensions: ["nns"] + }, + "application/vnd.noblenet-web": { + source: "iana", + extensions: ["nnw"] + }, + "application/vnd.nokia.catalogs": { + source: "iana" + }, + "application/vnd.nokia.conml+wbxml": { + source: "iana" + }, + "application/vnd.nokia.conml+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.iptv.config+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.isds-radio-presets": { + source: "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + source: "iana" + }, + "application/vnd.nokia.landmark+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.landmarkcollection+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.n-gage.ac+xml": { + source: "iana", + compressible: true, + extensions: ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + source: "iana", + extensions: ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + source: "apache", + extensions: ["n-gage"] + }, + "application/vnd.nokia.ncd": { + source: "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + source: "iana" + }, + "application/vnd.nokia.pcd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.nokia.radio-preset": { + source: "iana", + extensions: ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + source: "iana", + extensions: ["rpss"] + }, + "application/vnd.novadigm.edm": { + source: "iana", + extensions: ["edm"] + }, + "application/vnd.novadigm.edx": { + source: "iana", + extensions: ["edx"] + }, + "application/vnd.novadigm.ext": { + source: "iana", + extensions: ["ext"] + }, + "application/vnd.ntt-local.content-share": { + source: "iana" + }, + "application/vnd.ntt-local.file-transfer": { + source: "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + source: "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + source: "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + source: "iana" + }, + "application/vnd.oai.workflows": { + source: "iana" + }, + "application/vnd.oai.workflows+json": { + source: "iana", + compressible: true + }, + "application/vnd.oai.workflows+yaml": { + source: "iana" + }, + "application/vnd.oasis.opendocument.base": { + source: "iana" + }, + "application/vnd.oasis.opendocument.chart": { + source: "iana", + extensions: ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + source: "iana", + extensions: ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + source: "apache", + extensions: ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + source: "iana", + extensions: ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + source: "iana", + extensions: ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + source: "iana", + compressible: false, + extensions: ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + source: "iana", + extensions: ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + source: "iana", + extensions: ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + source: "iana", + extensions: ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + source: "iana", + compressible: false, + extensions: ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + source: "iana", + extensions: ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + source: "iana", + compressible: false, + extensions: ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + source: "iana", + extensions: ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + source: "iana", + compressible: false, + extensions: ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + source: "iana", + extensions: ["odm"] + }, + "application/vnd.oasis.opendocument.text-master-template": { + source: "iana" + }, + "application/vnd.oasis.opendocument.text-template": { + source: "iana", + extensions: ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + source: "iana", + extensions: ["oth"] + }, + "application/vnd.obn": { + source: "iana" + }, + "application/vnd.ocf+cbor": { + source: "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + source: "iana", + compressible: true + }, + "application/vnd.oftn.l10n+json": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.cspg-hexbinary": { + source: "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.dae.xhtml+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.pae.gem": { + source: "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.spdlist+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.ueprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oipf.userprofile+xml": { + source: "iana", + compressible: true + }, + "application/vnd.olpc-sugar": { + source: "iana", + extensions: ["xo"] + }, + "application/vnd.oma-scws-config": { + source: "iana" + }, + "application/vnd.oma-scws-http-request": { + source: "iana" + }, + "application/vnd.oma-scws-http-response": { + source: "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + source: "apache", + compressible: true + }, + "application/vnd.oma.bcast.imd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.ltkm": { + source: "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + source: "iana" + }, + "application/vnd.oma.bcast.sgboot": { + source: "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.sgdu": { + source: "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + source: "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + source: "apache", + compressible: true + }, + "application/vnd.oma.bcast.sprov+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.bcast.stkm": { + source: "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-feature-handler+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-pcc+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-subs-invite+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.cab-user-prefs+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.dcd": { + source: "iana" + }, + "application/vnd.oma.dcdc": { + source: "iana" + }, + "application/vnd.oma.dd2+xml": { + source: "iana", + compressible: true, + extensions: ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.group-usage-list+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.lwm2m+cbor": { + source: "iana" + }, + "application/vnd.oma.lwm2m+json": { + source: "iana", + compressible: true + }, + "application/vnd.oma.lwm2m+tlv": { + source: "iana" + }, + "application/vnd.oma.pal+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.final-report+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.groups+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.push": { + source: "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oma.xcap-directory+xml": { + source: "iana", + compressible: true + }, + "application/vnd.omads-email+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.omads-file+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.omads-folder+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.omaloc-supl-init": { + source: "iana" + }, + "application/vnd.onepager": { + source: "iana" + }, + "application/vnd.onepagertamp": { + source: "iana" + }, + "application/vnd.onepagertamx": { + source: "iana" + }, + "application/vnd.onepagertat": { + source: "iana" + }, + "application/vnd.onepagertatp": { + source: "iana" + }, + "application/vnd.onepagertatx": { + source: "iana" + }, + "application/vnd.onvif.metadata": { + source: "iana" + }, + "application/vnd.openblox.game+xml": { + source: "iana", + compressible: true, + extensions: ["obgx"] + }, + "application/vnd.openblox.game-binary": { + source: "iana" + }, + "application/vnd.openeye.oeb": { + source: "iana" + }, + "application/vnd.openofficeorg.extension": { + source: "apache", + extensions: ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + source: "iana", + compressible: true, + extensions: ["osm"] + }, + "application/vnd.opentimestamps.ots": { + source: "iana" + }, + "application/vnd.openvpi.dspx+json": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + source: "iana", + compressible: false, + extensions: ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + source: "iana", + extensions: ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + source: "iana", + extensions: ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + source: "iana", + extensions: ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + source: "iana", + compressible: false, + extensions: ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + source: "iana", + extensions: ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + source: "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + source: "iana", + compressible: false, + extensions: ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + source: "iana", + extensions: ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + source: "iana", + compressible: true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oracle.resource+json": { + source: "iana", + compressible: true + }, + "application/vnd.orange.indata": { + source: "iana" + }, + "application/vnd.osa.netdeploy": { + source: "iana" + }, + "application/vnd.osgeo.mapguide.package": { + source: "iana", + extensions: ["mgp"] + }, + "application/vnd.osgi.bundle": { + source: "iana" + }, + "application/vnd.osgi.dp": { + source: "iana", + extensions: ["dp"] + }, + "application/vnd.osgi.subsystem": { + source: "iana", + extensions: ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + source: "iana", + compressible: true + }, + "application/vnd.oxli.countgraph": { + source: "iana" + }, + "application/vnd.pagerduty+json": { + source: "iana", + compressible: true + }, + "application/vnd.palm": { + source: "iana", + extensions: ["pdb", "pqa", "oprc"] + }, + "application/vnd.panoply": { + source: "iana" + }, + "application/vnd.paos.xml": { + source: "iana" + }, + "application/vnd.patentdive": { + source: "iana" + }, + "application/vnd.patientecommsdoc": { + source: "iana" + }, + "application/vnd.pawaafile": { + source: "iana", + extensions: ["paw"] + }, + "application/vnd.pcos": { + source: "iana" + }, + "application/vnd.pg.format": { + source: "iana", + extensions: ["str"] + }, + "application/vnd.pg.osasli": { + source: "iana", + extensions: ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + source: "iana" + }, + "application/vnd.picsel": { + source: "iana", + extensions: ["efif"] + }, + "application/vnd.pmi.widget": { + source: "iana", + extensions: ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + source: "iana", + compressible: true + }, + "application/vnd.pocketlearn": { + source: "iana", + extensions: ["plf"] + }, + "application/vnd.powerbuilder6": { + source: "iana", + extensions: ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + source: "iana" + }, + "application/vnd.powerbuilder7": { + source: "iana" + }, + "application/vnd.powerbuilder7-s": { + source: "iana" + }, + "application/vnd.powerbuilder75": { + source: "iana" + }, + "application/vnd.powerbuilder75-s": { + source: "iana" + }, + "application/vnd.preminet": { + source: "iana" + }, + "application/vnd.previewsystems.box": { + source: "iana", + extensions: ["box"] + }, + "application/vnd.procrate.brushset": { + extensions: ["brushset"] + }, + "application/vnd.procreate.brush": { + extensions: ["brush"] + }, + "application/vnd.procreate.dream": { + extensions: ["drm"] + }, + "application/vnd.proteus.magazine": { + source: "iana", + extensions: ["mgz"] + }, + "application/vnd.psfs": { + source: "iana" + }, + "application/vnd.pt.mundusmundi": { + source: "iana" + }, + "application/vnd.publishare-delta-tree": { + source: "iana", + extensions: ["qps"] + }, + "application/vnd.pvi.ptid1": { + source: "iana", + extensions: ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + source: "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + source: "iana", + compressible: true, + extensions: ["xhtm"] + }, + "application/vnd.qualcomm.brew-app-res": { + source: "iana" + }, + "application/vnd.quarantainenet": { + source: "iana" + }, + "application/vnd.quark.quarkxpress": { + source: "iana", + extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"] + }, + "application/vnd.quobject-quoxdocument": { + source: "iana" + }, + "application/vnd.radisys.moml+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-conf+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + source: "iana", + compressible: true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + source: "iana", + compressible: true + }, + "application/vnd.rainstor.data": { + source: "iana" + }, + "application/vnd.rapid": { + source: "iana" + }, + "application/vnd.rar": { + source: "iana", + extensions: ["rar"] + }, + "application/vnd.realvnc.bed": { + source: "iana", + extensions: ["bed"] + }, + "application/vnd.recordare.musicxml": { + source: "iana", + extensions: ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + source: "iana", + compressible: true, + extensions: ["musicxml"] + }, + "application/vnd.relpipe": { + source: "iana" + }, + "application/vnd.renlearn.rlprint": { + source: "iana" + }, + "application/vnd.resilient.logic": { + source: "iana" + }, + "application/vnd.restful+json": { + source: "iana", + compressible: true + }, + "application/vnd.rig.cryptonote": { + source: "iana", + extensions: ["cryptonote"] + }, + "application/vnd.rim.cod": { + source: "apache", + extensions: ["cod"] + }, + "application/vnd.rn-realmedia": { + source: "apache", + extensions: ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + source: "apache", + extensions: ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + source: "iana", + compressible: true, + extensions: ["link66"] + }, + "application/vnd.rs-274x": { + source: "iana" + }, + "application/vnd.ruckus.download": { + source: "iana" + }, + "application/vnd.s3sms": { + source: "iana" + }, + "application/vnd.sailingtracker.track": { + source: "iana", + extensions: ["st"] + }, + "application/vnd.sar": { + source: "iana" + }, + "application/vnd.sbm.cid": { + source: "iana" + }, + "application/vnd.sbm.mid2": { + source: "iana" + }, + "application/vnd.scribus": { + source: "iana" + }, + "application/vnd.sealed.3df": { + source: "iana" + }, + "application/vnd.sealed.csf": { + source: "iana" + }, + "application/vnd.sealed.doc": { + source: "iana" + }, + "application/vnd.sealed.eml": { + source: "iana" + }, + "application/vnd.sealed.mht": { + source: "iana" + }, + "application/vnd.sealed.net": { + source: "iana" + }, + "application/vnd.sealed.ppt": { + source: "iana" + }, + "application/vnd.sealed.tiff": { + source: "iana" + }, + "application/vnd.sealed.xls": { + source: "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + source: "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + source: "iana" + }, + "application/vnd.seemail": { + source: "iana", + extensions: ["see"] + }, + "application/vnd.seis+json": { + source: "iana", + compressible: true + }, + "application/vnd.sema": { + source: "iana", + extensions: ["sema"] + }, + "application/vnd.semd": { + source: "iana", + extensions: ["semd"] + }, + "application/vnd.semf": { + source: "iana", + extensions: ["semf"] + }, + "application/vnd.shade-save-file": { + source: "iana" + }, + "application/vnd.shana.informed.formdata": { + source: "iana", + extensions: ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + source: "iana", + extensions: ["itp"] + }, + "application/vnd.shana.informed.interchange": { + source: "iana", + extensions: ["iif"] + }, + "application/vnd.shana.informed.package": { + source: "iana", + extensions: ["ipk"] + }, + "application/vnd.shootproof+json": { + source: "iana", + compressible: true + }, + "application/vnd.shopkick+json": { + source: "iana", + compressible: true + }, + "application/vnd.shp": { + source: "iana" + }, + "application/vnd.shx": { + source: "iana" + }, + "application/vnd.sigrok.session": { + source: "iana" + }, + "application/vnd.simtech-mindmapper": { + source: "iana", + extensions: ["twd", "twds"] + }, + "application/vnd.siren+json": { + source: "iana", + compressible: true + }, + "application/vnd.sketchometry": { + source: "iana" + }, + "application/vnd.smaf": { + source: "iana", + extensions: ["mmf"] + }, + "application/vnd.smart.notebook": { + source: "iana" + }, + "application/vnd.smart.teacher": { + source: "iana", + extensions: ["teacher"] + }, + "application/vnd.smintio.portals.archive": { + source: "iana" + }, + "application/vnd.snesdev-page-table": { + source: "iana" + }, + "application/vnd.software602.filler.form+xml": { + source: "iana", + compressible: true, + extensions: ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + source: "iana" + }, + "application/vnd.solent.sdkm+xml": { + source: "iana", + compressible: true, + extensions: ["sdkm", "sdkd"] + }, + "application/vnd.spotfire.dxp": { + source: "iana", + extensions: ["dxp"] + }, + "application/vnd.spotfire.sfs": { + source: "iana", + extensions: ["sfs"] + }, + "application/vnd.sqlite3": { + source: "iana" + }, + "application/vnd.sss-cod": { + source: "iana" + }, + "application/vnd.sss-dtf": { + source: "iana" + }, + "application/vnd.sss-ntf": { + source: "iana" + }, + "application/vnd.stardivision.calc": { + source: "apache", + extensions: ["sdc"] + }, + "application/vnd.stardivision.draw": { + source: "apache", + extensions: ["sda"] + }, + "application/vnd.stardivision.impress": { + source: "apache", + extensions: ["sdd"] + }, + "application/vnd.stardivision.math": { + source: "apache", + extensions: ["smf"] + }, + "application/vnd.stardivision.writer": { + source: "apache", + extensions: ["sdw", "vor"] + }, + "application/vnd.stardivision.writer-global": { + source: "apache", + extensions: ["sgl"] + }, + "application/vnd.stepmania.package": { + source: "iana", + extensions: ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + source: "iana", + extensions: ["sm"] + }, + "application/vnd.street-stream": { + source: "iana" + }, + "application/vnd.sun.wadl+xml": { + source: "iana", + compressible: true, + extensions: ["wadl"] + }, + "application/vnd.sun.xml.calc": { + source: "apache", + extensions: ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + source: "apache", + extensions: ["stc"] + }, + "application/vnd.sun.xml.draw": { + source: "apache", + extensions: ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + source: "apache", + extensions: ["std"] + }, + "application/vnd.sun.xml.impress": { + source: "apache", + extensions: ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + source: "apache", + extensions: ["sti"] + }, + "application/vnd.sun.xml.math": { + source: "apache", + extensions: ["sxm"] + }, + "application/vnd.sun.xml.writer": { + source: "apache", + extensions: ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + source: "apache", + extensions: ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + source: "apache", + extensions: ["stw"] + }, + "application/vnd.sus-calendar": { + source: "iana", + extensions: ["sus", "susp"] + }, + "application/vnd.svd": { + source: "iana", + extensions: ["svd"] + }, + "application/vnd.swiftview-ics": { + source: "iana" + }, + "application/vnd.sybyl.mol2": { + source: "iana" + }, + "application/vnd.sycle+xml": { + source: "iana", + compressible: true + }, + "application/vnd.syft+json": { + source: "iana", + compressible: true + }, + "application/vnd.symbian.install": { + source: "apache", + extensions: ["sis", "sisx"] + }, + "application/vnd.syncml+xml": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + source: "iana", + charset: "UTF-8", + extensions: ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + source: "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + source: "iana" + }, + "application/vnd.syncml.dmddf+xml": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + source: "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + source: "iana", + charset: "UTF-8", + compressible: true + }, + "application/vnd.syncml.ds.notification": { + source: "iana" + }, + "application/vnd.tableschema+json": { + source: "iana", + compressible: true + }, + "application/vnd.tao.intent-module-archive": { + source: "iana", + extensions: ["tao"] + }, + "application/vnd.tcpdump.pcap": { + source: "iana", + extensions: ["pcap", "cap", "dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + source: "iana", + compressible: true + }, + "application/vnd.tmd.mediaflex.api+xml": { + source: "iana", + compressible: true + }, + "application/vnd.tml": { + source: "iana" + }, + "application/vnd.tmobile-livetv": { + source: "iana", + extensions: ["tmo"] + }, + "application/vnd.tri.onesource": { + source: "iana" + }, + "application/vnd.trid.tpt": { + source: "iana", + extensions: ["tpt"] + }, + "application/vnd.triscape.mxs": { + source: "iana", + extensions: ["mxs"] + }, + "application/vnd.trueapp": { + source: "iana", + extensions: ["tra"] + }, + "application/vnd.truedoc": { + source: "iana" + }, + "application/vnd.ubisoft.webplayer": { + source: "iana" + }, + "application/vnd.ufdl": { + source: "iana", + extensions: ["ufd", "ufdl"] + }, + "application/vnd.uic.osdm+json": { + source: "iana", + compressible: true + }, + "application/vnd.uiq.theme": { + source: "iana", + extensions: ["utz"] + }, + "application/vnd.umajin": { + source: "iana", + extensions: ["umj"] + }, + "application/vnd.unity": { + source: "iana", + extensions: ["unityweb"] + }, + "application/vnd.uoml+xml": { + source: "iana", + compressible: true, + extensions: ["uoml", "uo"] + }, + "application/vnd.uplanet.alert": { + source: "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.bearer-choice": { + source: "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.cacheop": { + source: "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.channel": { + source: "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.list": { + source: "iana" + }, + "application/vnd.uplanet.list-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.listcmd": { + source: "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + source: "iana" + }, + "application/vnd.uplanet.signal": { + source: "iana" + }, + "application/vnd.uri-map": { + source: "iana" + }, + "application/vnd.valve.source.material": { + source: "iana" + }, + "application/vnd.vcx": { + source: "iana", + extensions: ["vcx"] + }, + "application/vnd.vd-study": { + source: "iana" + }, + "application/vnd.vectorworks": { + source: "iana" + }, + "application/vnd.vel+json": { + source: "iana", + compressible: true + }, + "application/vnd.veraison.tsm-report+cbor": { + source: "iana" + }, + "application/vnd.veraison.tsm-report+json": { + source: "iana", + compressible: true + }, + "application/vnd.verimatrix.vcas": { + source: "iana" + }, + "application/vnd.veritone.aion+json": { + source: "iana", + compressible: true + }, + "application/vnd.veryant.thin": { + source: "iana" + }, + "application/vnd.ves.encrypted": { + source: "iana" + }, + "application/vnd.vidsoft.vidconference": { + source: "iana" + }, + "application/vnd.visio": { + source: "iana", + extensions: ["vsd", "vst", "vss", "vsw", "vsdx", "vtx"] + }, + "application/vnd.visionary": { + source: "iana", + extensions: ["vis"] + }, + "application/vnd.vividence.scriptfile": { + source: "iana" + }, + "application/vnd.vocalshaper.vsp4": { + source: "iana" + }, + "application/vnd.vsf": { + source: "iana", + extensions: ["vsf"] + }, + "application/vnd.wap.sic": { + source: "iana" + }, + "application/vnd.wap.slc": { + source: "iana" + }, + "application/vnd.wap.wbxml": { + source: "iana", + charset: "UTF-8", + extensions: ["wbxml"] + }, + "application/vnd.wap.wmlc": { + source: "iana", + extensions: ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + source: "iana", + extensions: ["wmlsc"] + }, + "application/vnd.wasmflow.wafl": { + source: "iana" + }, + "application/vnd.webturbo": { + source: "iana", + extensions: ["wtb"] + }, + "application/vnd.wfa.dpp": { + source: "iana" + }, + "application/vnd.wfa.p2p": { + source: "iana" + }, + "application/vnd.wfa.wsc": { + source: "iana" + }, + "application/vnd.windows.devicepairing": { + source: "iana" + }, + "application/vnd.wmc": { + source: "iana" + }, + "application/vnd.wmf.bootstrap": { + source: "iana" + }, + "application/vnd.wolfram.mathematica": { + source: "iana" + }, + "application/vnd.wolfram.mathematica.package": { + source: "iana" + }, + "application/vnd.wolfram.player": { + source: "iana", + extensions: ["nbp"] + }, + "application/vnd.wordlift": { + source: "iana" + }, + "application/vnd.wordperfect": { + source: "iana", + extensions: ["wpd"] + }, + "application/vnd.wqd": { + source: "iana", + extensions: ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + source: "iana" + }, + "application/vnd.wt.stf": { + source: "iana", + extensions: ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + source: "iana" + }, + "application/vnd.wv.csp+xml": { + source: "iana", + compressible: true + }, + "application/vnd.wv.ssp+xml": { + source: "iana", + compressible: true + }, + "application/vnd.xacml+json": { + source: "iana", + compressible: true + }, + "application/vnd.xara": { + source: "iana", + extensions: ["xar"] + }, + "application/vnd.xarin.cpj": { + source: "iana" + }, + "application/vnd.xecrets-encrypted": { + source: "iana" + }, + "application/vnd.xfdl": { + source: "iana", + extensions: ["xfdl"] + }, + "application/vnd.xfdl.webform": { + source: "iana" + }, + "application/vnd.xmi+xml": { + source: "iana", + compressible: true + }, + "application/vnd.xmpie.cpkg": { + source: "iana" + }, + "application/vnd.xmpie.dpkg": { + source: "iana" + }, + "application/vnd.xmpie.plan": { + source: "iana" + }, + "application/vnd.xmpie.ppkg": { + source: "iana" + }, + "application/vnd.xmpie.xlim": { + source: "iana" + }, + "application/vnd.yamaha.hv-dic": { + source: "iana", + extensions: ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + source: "iana", + extensions: ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + source: "iana", + extensions: ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + source: "iana", + extensions: ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + source: "iana", + compressible: true, + extensions: ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + source: "iana" + }, + "application/vnd.yamaha.smaf-audio": { + source: "iana", + extensions: ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + source: "iana", + extensions: ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + source: "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + source: "iana" + }, + "application/vnd.yaoweme": { + source: "iana" + }, + "application/vnd.yellowriver-custom-menu": { + source: "iana", + extensions: ["cmp"] + }, + "application/vnd.zul": { + source: "iana", + extensions: ["zir", "zirz"] + }, + "application/vnd.zzazz.deck+xml": { + source: "iana", + compressible: true, + extensions: ["zaz"] + }, + "application/voicexml+xml": { + source: "iana", + compressible: true, + extensions: ["vxml"] + }, + "application/voucher-cms+json": { + source: "iana", + compressible: true + }, + "application/voucher-jws+json": { + source: "iana", + compressible: true + }, + "application/vp": { + source: "iana" + }, + "application/vp+cose": { + source: "iana" + }, + "application/vp+jwt": { + source: "iana" + }, + "application/vq-rtcpxr": { + source: "iana" + }, + "application/wasm": { + source: "iana", + compressible: true, + extensions: ["wasm"] + }, + "application/watcherinfo+xml": { + source: "iana", + compressible: true, + extensions: ["wif"] + }, + "application/webpush-options+json": { + source: "iana", + compressible: true + }, + "application/whoispp-query": { + source: "iana" + }, + "application/whoispp-response": { + source: "iana" + }, + "application/widget": { + source: "iana", + extensions: ["wgt"] + }, + "application/winhlp": { + source: "apache", + extensions: ["hlp"] + }, + "application/wita": { + source: "iana" + }, + "application/wordperfect5.1": { + source: "iana" + }, + "application/wsdl+xml": { + source: "iana", + compressible: true, + extensions: ["wsdl"] + }, + "application/wspolicy+xml": { + source: "iana", + compressible: true, + extensions: ["wspolicy"] + }, + "application/x-7z-compressed": { + source: "apache", + compressible: false, + extensions: ["7z"] + }, + "application/x-abiword": { + source: "apache", + extensions: ["abw"] + }, + "application/x-ace-compressed": { + source: "apache", + extensions: ["ace"] + }, + "application/x-amf": { + source: "apache" + }, + "application/x-apple-diskimage": { + source: "apache", + extensions: ["dmg"] + }, + "application/x-arj": { + compressible: false, + extensions: ["arj"] + }, + "application/x-authorware-bin": { + source: "apache", + extensions: ["aab", "x32", "u32", "vox"] + }, + "application/x-authorware-map": { + source: "apache", + extensions: ["aam"] + }, + "application/x-authorware-seg": { + source: "apache", + extensions: ["aas"] + }, + "application/x-bcpio": { + source: "apache", + extensions: ["bcpio"] + }, + "application/x-bdoc": { + compressible: false, + extensions: ["bdoc"] + }, + "application/x-bittorrent": { + source: "apache", + extensions: ["torrent"] + }, + "application/x-blender": { + extensions: ["blend"] + }, + "application/x-blorb": { + source: "apache", + extensions: ["blb", "blorb"] + }, + "application/x-bzip": { + source: "apache", + compressible: false, + extensions: ["bz"] + }, + "application/x-bzip2": { + source: "apache", + compressible: false, + extensions: ["bz2", "boz"] + }, + "application/x-cbr": { + source: "apache", + extensions: ["cbr", "cba", "cbt", "cbz", "cb7"] + }, + "application/x-cdlink": { + source: "apache", + extensions: ["vcd"] + }, + "application/x-cfs-compressed": { + source: "apache", + extensions: ["cfs"] + }, + "application/x-chat": { + source: "apache", + extensions: ["chat"] + }, + "application/x-chess-pgn": { + source: "apache", + extensions: ["pgn"] + }, + "application/x-chrome-extension": { + extensions: ["crx"] + }, + "application/x-cocoa": { + source: "nginx", + extensions: ["cco"] + }, + "application/x-compress": { + source: "apache" + }, + "application/x-compressed": { + extensions: ["rar"] + }, + "application/x-conference": { + source: "apache", + extensions: ["nsc"] + }, + "application/x-cpio": { + source: "apache", + extensions: ["cpio"] + }, + "application/x-csh": { + source: "apache", + extensions: ["csh"] + }, + "application/x-deb": { + compressible: false + }, + "application/x-debian-package": { + source: "apache", + extensions: ["deb", "udeb"] + }, + "application/x-dgc-compressed": { + source: "apache", + extensions: ["dgc"] + }, + "application/x-director": { + source: "apache", + extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"] + }, + "application/x-doom": { + source: "apache", + extensions: ["wad"] + }, + "application/x-dtbncx+xml": { + source: "apache", + compressible: true, + extensions: ["ncx"] + }, + "application/x-dtbook+xml": { + source: "apache", + compressible: true, + extensions: ["dtb"] + }, + "application/x-dtbresource+xml": { + source: "apache", + compressible: true, + extensions: ["res"] + }, + "application/x-dvi": { + source: "apache", + compressible: false, + extensions: ["dvi"] + }, + "application/x-envoy": { + source: "apache", + extensions: ["evy"] + }, + "application/x-eva": { + source: "apache", + extensions: ["eva"] + }, + "application/x-font-bdf": { + source: "apache", + extensions: ["bdf"] + }, + "application/x-font-dos": { + source: "apache" + }, + "application/x-font-framemaker": { + source: "apache" + }, + "application/x-font-ghostscript": { + source: "apache", + extensions: ["gsf"] + }, + "application/x-font-libgrx": { + source: "apache" + }, + "application/x-font-linux-psf": { + source: "apache", + extensions: ["psf"] + }, + "application/x-font-pcf": { + source: "apache", + extensions: ["pcf"] + }, + "application/x-font-snf": { + source: "apache", + extensions: ["snf"] + }, + "application/x-font-speedo": { + source: "apache" + }, + "application/x-font-sunos-news": { + source: "apache" + }, + "application/x-font-type1": { + source: "apache", + extensions: ["pfa", "pfb", "pfm", "afm"] + }, + "application/x-font-vfont": { + source: "apache" + }, + "application/x-freearc": { + source: "apache", + extensions: ["arc"] + }, + "application/x-futuresplash": { + source: "apache", + extensions: ["spl"] + }, + "application/x-gca-compressed": { + source: "apache", + extensions: ["gca"] + }, + "application/x-glulx": { + source: "apache", + extensions: ["ulx"] + }, + "application/x-gnumeric": { + source: "apache", + extensions: ["gnumeric"] + }, + "application/x-gramps-xml": { + source: "apache", + extensions: ["gramps"] + }, + "application/x-gtar": { + source: "apache", + extensions: ["gtar"] + }, + "application/x-gzip": { + source: "apache" + }, + "application/x-hdf": { + source: "apache", + extensions: ["hdf"] + }, + "application/x-httpd-php": { + compressible: true, + extensions: ["php"] + }, + "application/x-install-instructions": { + source: "apache", + extensions: ["install"] + }, + "application/x-ipynb+json": { + compressible: true, + extensions: ["ipynb"] + }, + "application/x-iso9660-image": { + source: "apache", + extensions: ["iso"] + }, + "application/x-iwork-keynote-sffkey": { + extensions: ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + extensions: ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + extensions: ["pages"] + }, + "application/x-java-archive-diff": { + source: "nginx", + extensions: ["jardiff"] + }, + "application/x-java-jnlp-file": { + source: "apache", + compressible: false, + extensions: ["jnlp"] + }, + "application/x-javascript": { + compressible: true + }, + "application/x-keepass2": { + extensions: ["kdbx"] + }, + "application/x-latex": { + source: "apache", + compressible: false, + extensions: ["latex"] + }, + "application/x-lua-bytecode": { + extensions: ["luac"] + }, + "application/x-lzh-compressed": { + source: "apache", + extensions: ["lzh", "lha"] + }, + "application/x-makeself": { + source: "nginx", + extensions: ["run"] + }, + "application/x-mie": { + source: "apache", + extensions: ["mie"] + }, + "application/x-mobipocket-ebook": { + source: "apache", + extensions: ["prc", "mobi"] + }, + "application/x-mpegurl": { + compressible: false + }, + "application/x-ms-application": { + source: "apache", + extensions: ["application"] + }, + "application/x-ms-shortcut": { + source: "apache", + extensions: ["lnk"] + }, + "application/x-ms-wmd": { + source: "apache", + extensions: ["wmd"] + }, + "application/x-ms-wmz": { + source: "apache", + extensions: ["wmz"] + }, + "application/x-ms-xbap": { + source: "apache", + extensions: ["xbap"] + }, + "application/x-msaccess": { + source: "apache", + extensions: ["mdb"] + }, + "application/x-msbinder": { + source: "apache", + extensions: ["obd"] + }, + "application/x-mscardfile": { + source: "apache", + extensions: ["crd"] + }, + "application/x-msclip": { + source: "apache", + extensions: ["clp"] + }, + "application/x-msdos-program": { + extensions: ["exe"] + }, + "application/x-msdownload": { + source: "apache", + extensions: ["exe", "dll", "com", "bat", "msi"] + }, + "application/x-msmediaview": { + source: "apache", + extensions: ["mvb", "m13", "m14"] + }, + "application/x-msmetafile": { + source: "apache", + extensions: ["wmf", "wmz", "emf", "emz"] + }, + "application/x-msmoney": { + source: "apache", + extensions: ["mny"] + }, + "application/x-mspublisher": { + source: "apache", + extensions: ["pub"] + }, + "application/x-msschedule": { + source: "apache", + extensions: ["scd"] + }, + "application/x-msterminal": { + source: "apache", + extensions: ["trm"] + }, + "application/x-mswrite": { + source: "apache", + extensions: ["wri"] + }, + "application/x-netcdf": { + source: "apache", + extensions: ["nc", "cdf"] + }, + "application/x-ns-proxy-autoconfig": { + compressible: true, + extensions: ["pac"] + }, + "application/x-nzb": { + source: "apache", + extensions: ["nzb"] + }, + "application/x-perl": { + source: "nginx", + extensions: ["pl", "pm"] + }, + "application/x-pilot": { + source: "nginx", + extensions: ["prc", "pdb"] + }, + "application/x-pkcs12": { + source: "apache", + compressible: false, + extensions: ["p12", "pfx"] + }, + "application/x-pkcs7-certificates": { + source: "apache", + extensions: ["p7b", "spc"] + }, + "application/x-pkcs7-certreqresp": { + source: "apache", + extensions: ["p7r"] + }, + "application/x-pki-message": { + source: "iana" + }, + "application/x-rar-compressed": { + source: "apache", + compressible: false, + extensions: ["rar"] + }, + "application/x-redhat-package-manager": { + source: "nginx", + extensions: ["rpm"] + }, + "application/x-research-info-systems": { + source: "apache", + extensions: ["ris"] + }, + "application/x-sea": { + source: "nginx", + extensions: ["sea"] + }, + "application/x-sh": { + source: "apache", + compressible: true, + extensions: ["sh"] + }, + "application/x-shar": { + source: "apache", + extensions: ["shar"] + }, + "application/x-shockwave-flash": { + source: "apache", + compressible: false, + extensions: ["swf"] + }, + "application/x-silverlight-app": { + source: "apache", + extensions: ["xap"] + }, + "application/x-sql": { + source: "apache", + extensions: ["sql"] + }, + "application/x-stuffit": { + source: "apache", + compressible: false, + extensions: ["sit"] + }, + "application/x-stuffitx": { + source: "apache", + extensions: ["sitx"] + }, + "application/x-subrip": { + source: "apache", + extensions: ["srt"] + }, + "application/x-sv4cpio": { + source: "apache", + extensions: ["sv4cpio"] + }, + "application/x-sv4crc": { + source: "apache", + extensions: ["sv4crc"] + }, + "application/x-t3vm-image": { + source: "apache", + extensions: ["t3"] + }, + "application/x-tads": { + source: "apache", + extensions: ["gam"] + }, + "application/x-tar": { + source: "apache", + compressible: true, + extensions: ["tar"] + }, + "application/x-tcl": { + source: "apache", + extensions: ["tcl", "tk"] + }, + "application/x-tex": { + source: "apache", + extensions: ["tex"] + }, + "application/x-tex-tfm": { + source: "apache", + extensions: ["tfm"] + }, + "application/x-texinfo": { + source: "apache", + extensions: ["texinfo", "texi"] + }, + "application/x-tgif": { + source: "apache", + extensions: ["obj"] + }, + "application/x-ustar": { + source: "apache", + extensions: ["ustar"] + }, + "application/x-virtualbox-hdd": { + compressible: true, + extensions: ["hdd"] + }, + "application/x-virtualbox-ova": { + compressible: true, + extensions: ["ova"] + }, + "application/x-virtualbox-ovf": { + compressible: true, + extensions: ["ovf"] + }, + "application/x-virtualbox-vbox": { + compressible: true, + extensions: ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + compressible: false, + extensions: ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + compressible: true, + extensions: ["vdi"] + }, + "application/x-virtualbox-vhd": { + compressible: true, + extensions: ["vhd"] + }, + "application/x-virtualbox-vmdk": { + compressible: true, + extensions: ["vmdk"] + }, + "application/x-wais-source": { + source: "apache", + extensions: ["src"] + }, + "application/x-web-app-manifest+json": { + compressible: true, + extensions: ["webapp"] + }, + "application/x-www-form-urlencoded": { + source: "iana", + compressible: true + }, + "application/x-x509-ca-cert": { + source: "iana", + extensions: ["der", "crt", "pem"] + }, + "application/x-x509-ca-ra-cert": { + source: "iana" + }, + "application/x-x509-next-ca-cert": { + source: "iana" + }, + "application/x-xfig": { + source: "apache", + extensions: ["fig"] + }, + "application/x-xliff+xml": { + source: "apache", + compressible: true, + extensions: ["xlf"] + }, + "application/x-xpinstall": { + source: "apache", + compressible: false, + extensions: ["xpi"] + }, + "application/x-xz": { + source: "apache", + extensions: ["xz"] + }, + "application/x-zip-compressed": { + extensions: ["zip"] + }, + "application/x-zmachine": { + source: "apache", + extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"] + }, + "application/x400-bp": { + source: "iana" + }, + "application/xacml+xml": { + source: "iana", + compressible: true + }, + "application/xaml+xml": { + source: "apache", + compressible: true, + extensions: ["xaml"] + }, + "application/xcap-att+xml": { + source: "iana", + compressible: true, + extensions: ["xav"] + }, + "application/xcap-caps+xml": { + source: "iana", + compressible: true, + extensions: ["xca"] + }, + "application/xcap-diff+xml": { + source: "iana", + compressible: true, + extensions: ["xdf"] + }, + "application/xcap-el+xml": { + source: "iana", + compressible: true, + extensions: ["xel"] + }, + "application/xcap-error+xml": { + source: "iana", + compressible: true + }, + "application/xcap-ns+xml": { + source: "iana", + compressible: true, + extensions: ["xns"] + }, + "application/xcon-conference-info+xml": { + source: "iana", + compressible: true + }, + "application/xcon-conference-info-diff+xml": { + source: "iana", + compressible: true + }, + "application/xenc+xml": { + source: "iana", + compressible: true, + extensions: ["xenc"] + }, + "application/xfdf": { + source: "iana", + extensions: ["xfdf"] + }, + "application/xhtml+xml": { + source: "iana", + compressible: true, + extensions: ["xhtml", "xht"] + }, + "application/xhtml-voice+xml": { + source: "apache", + compressible: true + }, + "application/xliff+xml": { + source: "iana", + compressible: true, + extensions: ["xlf"] + }, + "application/xml": { + source: "iana", + compressible: true, + extensions: ["xml", "xsl", "xsd", "rng"] + }, + "application/xml-dtd": { + source: "iana", + compressible: true, + extensions: ["dtd"] + }, + "application/xml-external-parsed-entity": { + source: "iana" + }, + "application/xml-patch+xml": { + source: "iana", + compressible: true + }, + "application/xmpp+xml": { + source: "iana", + compressible: true + }, + "application/xop+xml": { + source: "iana", + compressible: true, + extensions: ["xop"] + }, + "application/xproc+xml": { + source: "apache", + compressible: true, + extensions: ["xpl"] + }, + "application/xslt+xml": { + source: "iana", + compressible: true, + extensions: ["xsl", "xslt"] + }, + "application/xspf+xml": { + source: "apache", + compressible: true, + extensions: ["xspf"] + }, + "application/xv+xml": { + source: "iana", + compressible: true, + extensions: ["mxml", "xhvml", "xvml", "xvm"] + }, + "application/yaml": { + source: "iana" + }, + "application/yang": { + source: "iana", + extensions: ["yang"] + }, + "application/yang-data+cbor": { + source: "iana" + }, + "application/yang-data+json": { + source: "iana", + compressible: true + }, + "application/yang-data+xml": { + source: "iana", + compressible: true + }, + "application/yang-patch+json": { + source: "iana", + compressible: true + }, + "application/yang-patch+xml": { + source: "iana", + compressible: true + }, + "application/yang-sid+json": { + source: "iana", + compressible: true + }, + "application/yin+xml": { + source: "iana", + compressible: true, + extensions: ["yin"] + }, + "application/zip": { + source: "iana", + compressible: false, + extensions: ["zip"] + }, + "application/zip+dotlottie": { + extensions: ["lottie"] + }, + "application/zlib": { + source: "iana" + }, + "application/zstd": { + source: "iana" + }, + "audio/1d-interleaved-parityfec": { + source: "iana" + }, + "audio/32kadpcm": { + source: "iana" + }, + "audio/3gpp": { + source: "iana", + compressible: false, + extensions: ["3gpp"] + }, + "audio/3gpp2": { + source: "iana" + }, + "audio/aac": { + source: "iana", + extensions: ["adts", "aac"] + }, + "audio/ac3": { + source: "iana" + }, + "audio/adpcm": { + source: "apache", + extensions: ["adp"] + }, + "audio/amr": { + source: "iana", + extensions: ["amr"] + }, + "audio/amr-wb": { + source: "iana" + }, + "audio/amr-wb+": { + source: "iana" + }, + "audio/aptx": { + source: "iana" + }, + "audio/asc": { + source: "iana" + }, + "audio/atrac-advanced-lossless": { + source: "iana" + }, + "audio/atrac-x": { + source: "iana" + }, + "audio/atrac3": { + source: "iana" + }, + "audio/basic": { + source: "iana", + compressible: false, + extensions: ["au", "snd"] + }, + "audio/bv16": { + source: "iana" + }, + "audio/bv32": { + source: "iana" + }, + "audio/clearmode": { + source: "iana" + }, + "audio/cn": { + source: "iana" + }, + "audio/dat12": { + source: "iana" + }, + "audio/dls": { + source: "iana" + }, + "audio/dsr-es201108": { + source: "iana" + }, + "audio/dsr-es202050": { + source: "iana" + }, + "audio/dsr-es202211": { + source: "iana" + }, + "audio/dsr-es202212": { + source: "iana" + }, + "audio/dv": { + source: "iana" + }, + "audio/dvi4": { + source: "iana" + }, + "audio/eac3": { + source: "iana" + }, + "audio/encaprtp": { + source: "iana" + }, + "audio/evrc": { + source: "iana" + }, + "audio/evrc-qcp": { + source: "iana" + }, + "audio/evrc0": { + source: "iana" + }, + "audio/evrc1": { + source: "iana" + }, + "audio/evrcb": { + source: "iana" + }, + "audio/evrcb0": { + source: "iana" + }, + "audio/evrcb1": { + source: "iana" + }, + "audio/evrcnw": { + source: "iana" + }, + "audio/evrcnw0": { + source: "iana" + }, + "audio/evrcnw1": { + source: "iana" + }, + "audio/evrcwb": { + source: "iana" + }, + "audio/evrcwb0": { + source: "iana" + }, + "audio/evrcwb1": { + source: "iana" + }, + "audio/evs": { + source: "iana" + }, + "audio/flac": { + source: "iana" + }, + "audio/flexfec": { + source: "iana" + }, + "audio/fwdred": { + source: "iana" + }, + "audio/g711-0": { + source: "iana" + }, + "audio/g719": { + source: "iana" + }, + "audio/g722": { + source: "iana" + }, + "audio/g7221": { + source: "iana" + }, + "audio/g723": { + source: "iana" + }, + "audio/g726-16": { + source: "iana" + }, + "audio/g726-24": { + source: "iana" + }, + "audio/g726-32": { + source: "iana" + }, + "audio/g726-40": { + source: "iana" + }, + "audio/g728": { + source: "iana" + }, + "audio/g729": { + source: "iana" + }, + "audio/g7291": { + source: "iana" + }, + "audio/g729d": { + source: "iana" + }, + "audio/g729e": { + source: "iana" + }, + "audio/gsm": { + source: "iana" + }, + "audio/gsm-efr": { + source: "iana" + }, + "audio/gsm-hr-08": { + source: "iana" + }, + "audio/ilbc": { + source: "iana" + }, + "audio/ip-mr_v2.5": { + source: "iana" + }, + "audio/isac": { + source: "apache" + }, + "audio/l16": { + source: "iana" + }, + "audio/l20": { + source: "iana" + }, + "audio/l24": { + source: "iana", + compressible: false + }, + "audio/l8": { + source: "iana" + }, + "audio/lpc": { + source: "iana" + }, + "audio/matroska": { + source: "iana" + }, + "audio/melp": { + source: "iana" + }, + "audio/melp1200": { + source: "iana" + }, + "audio/melp2400": { + source: "iana" + }, + "audio/melp600": { + source: "iana" + }, + "audio/mhas": { + source: "iana" + }, + "audio/midi": { + source: "apache", + extensions: ["mid", "midi", "kar", "rmi"] + }, + "audio/midi-clip": { + source: "iana" + }, + "audio/mobile-xmf": { + source: "iana", + extensions: ["mxmf"] + }, + "audio/mp3": { + compressible: false, + extensions: ["mp3"] + }, + "audio/mp4": { + source: "iana", + compressible: false, + extensions: ["m4a", "mp4a", "m4b"] + }, + "audio/mp4a-latm": { + source: "iana" + }, + "audio/mpa": { + source: "iana" + }, + "audio/mpa-robust": { + source: "iana" + }, + "audio/mpeg": { + source: "iana", + compressible: false, + extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"] + }, + "audio/mpeg4-generic": { + source: "iana" + }, + "audio/musepack": { + source: "apache" + }, + "audio/ogg": { + source: "iana", + compressible: false, + extensions: ["oga", "ogg", "spx", "opus"] + }, + "audio/opus": { + source: "iana" + }, + "audio/parityfec": { + source: "iana" + }, + "audio/pcma": { + source: "iana" + }, + "audio/pcma-wb": { + source: "iana" + }, + "audio/pcmu": { + source: "iana" + }, + "audio/pcmu-wb": { + source: "iana" + }, + "audio/prs.sid": { + source: "iana" + }, + "audio/qcelp": { + source: "iana" + }, + "audio/raptorfec": { + source: "iana" + }, + "audio/red": { + source: "iana" + }, + "audio/rtp-enc-aescm128": { + source: "iana" + }, + "audio/rtp-midi": { + source: "iana" + }, + "audio/rtploopback": { + source: "iana" + }, + "audio/rtx": { + source: "iana" + }, + "audio/s3m": { + source: "apache", + extensions: ["s3m"] + }, + "audio/scip": { + source: "iana" + }, + "audio/silk": { + source: "apache", + extensions: ["sil"] + }, + "audio/smv": { + source: "iana" + }, + "audio/smv-qcp": { + source: "iana" + }, + "audio/smv0": { + source: "iana" + }, + "audio/sofa": { + source: "iana" + }, + "audio/sp-midi": { + source: "iana" + }, + "audio/speex": { + source: "iana" + }, + "audio/t140c": { + source: "iana" + }, + "audio/t38": { + source: "iana" + }, + "audio/telephone-event": { + source: "iana" + }, + "audio/tetra_acelp": { + source: "iana" + }, + "audio/tetra_acelp_bb": { + source: "iana" + }, + "audio/tone": { + source: "iana" + }, + "audio/tsvcis": { + source: "iana" + }, + "audio/uemclip": { + source: "iana" + }, + "audio/ulpfec": { + source: "iana" + }, + "audio/usac": { + source: "iana" + }, + "audio/vdvi": { + source: "iana" + }, + "audio/vmr-wb": { + source: "iana" + }, + "audio/vnd.3gpp.iufp": { + source: "iana" + }, + "audio/vnd.4sb": { + source: "iana" + }, + "audio/vnd.audiokoz": { + source: "iana" + }, + "audio/vnd.celp": { + source: "iana" + }, + "audio/vnd.cisco.nse": { + source: "iana" + }, + "audio/vnd.cmles.radio-events": { + source: "iana" + }, + "audio/vnd.cns.anp1": { + source: "iana" + }, + "audio/vnd.cns.inf1": { + source: "iana" + }, + "audio/vnd.dece.audio": { + source: "iana", + extensions: ["uva", "uvva"] + }, + "audio/vnd.digital-winds": { + source: "iana", + extensions: ["eol"] + }, + "audio/vnd.dlna.adts": { + source: "iana" + }, + "audio/vnd.dolby.heaac.1": { + source: "iana" + }, + "audio/vnd.dolby.heaac.2": { + source: "iana" + }, + "audio/vnd.dolby.mlp": { + source: "iana" + }, + "audio/vnd.dolby.mps": { + source: "iana" + }, + "audio/vnd.dolby.pl2": { + source: "iana" + }, + "audio/vnd.dolby.pl2x": { + source: "iana" + }, + "audio/vnd.dolby.pl2z": { + source: "iana" + }, + "audio/vnd.dolby.pulse.1": { + source: "iana" + }, + "audio/vnd.dra": { + source: "iana", + extensions: ["dra"] + }, + "audio/vnd.dts": { + source: "iana", + extensions: ["dts"] + }, + "audio/vnd.dts.hd": { + source: "iana", + extensions: ["dtshd"] + }, + "audio/vnd.dts.uhd": { + source: "iana" + }, + "audio/vnd.dvb.file": { + source: "iana" + }, + "audio/vnd.everad.plj": { + source: "iana" + }, + "audio/vnd.hns.audio": { + source: "iana" + }, + "audio/vnd.lucent.voice": { + source: "iana", + extensions: ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + source: "iana", + extensions: ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + source: "iana" + }, + "audio/vnd.nortel.vbk": { + source: "iana" + }, + "audio/vnd.nuera.ecelp4800": { + source: "iana", + extensions: ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + source: "iana", + extensions: ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + source: "iana", + extensions: ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + source: "iana" + }, + "audio/vnd.presonus.multitrack": { + source: "iana" + }, + "audio/vnd.qcelp": { + source: "apache" + }, + "audio/vnd.rhetorex.32kadpcm": { + source: "iana" + }, + "audio/vnd.rip": { + source: "iana", + extensions: ["rip"] + }, + "audio/vnd.rn-realaudio": { + compressible: false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + source: "iana" + }, + "audio/vnd.vmx.cvsd": { + source: "iana" + }, + "audio/vnd.wave": { + compressible: false + }, + "audio/vorbis": { + source: "iana", + compressible: false + }, + "audio/vorbis-config": { + source: "iana" + }, + "audio/wav": { + compressible: false, + extensions: ["wav"] + }, + "audio/wave": { + compressible: false, + extensions: ["wav"] + }, + "audio/webm": { + source: "apache", + compressible: false, + extensions: ["weba"] + }, + "audio/x-aac": { + source: "apache", + compressible: false, + extensions: ["aac"] + }, + "audio/x-aiff": { + source: "apache", + extensions: ["aif", "aiff", "aifc"] + }, + "audio/x-caf": { + source: "apache", + compressible: false, + extensions: ["caf"] + }, + "audio/x-flac": { + source: "apache", + extensions: ["flac"] + }, + "audio/x-m4a": { + source: "nginx", + extensions: ["m4a"] + }, + "audio/x-matroska": { + source: "apache", + extensions: ["mka"] + }, + "audio/x-mpegurl": { + source: "apache", + extensions: ["m3u"] + }, + "audio/x-ms-wax": { + source: "apache", + extensions: ["wax"] + }, + "audio/x-ms-wma": { + source: "apache", + extensions: ["wma"] + }, + "audio/x-pn-realaudio": { + source: "apache", + extensions: ["ram", "ra"] + }, + "audio/x-pn-realaudio-plugin": { + source: "apache", + extensions: ["rmp"] + }, + "audio/x-realaudio": { + source: "nginx", + extensions: ["ra"] + }, + "audio/x-tta": { + source: "apache" + }, + "audio/x-wav": { + source: "apache", + extensions: ["wav"] + }, + "audio/xm": { + source: "apache", + extensions: ["xm"] + }, + "chemical/x-cdx": { + source: "apache", + extensions: ["cdx"] + }, + "chemical/x-cif": { + source: "apache", + extensions: ["cif"] + }, + "chemical/x-cmdf": { + source: "apache", + extensions: ["cmdf"] + }, + "chemical/x-cml": { + source: "apache", + extensions: ["cml"] + }, + "chemical/x-csml": { + source: "apache", + extensions: ["csml"] + }, + "chemical/x-pdb": { + source: "apache" + }, + "chemical/x-xyz": { + source: "apache", + extensions: ["xyz"] + }, + "font/collection": { + source: "iana", + extensions: ["ttc"] + }, + "font/otf": { + source: "iana", + compressible: true, + extensions: ["otf"] + }, + "font/sfnt": { + source: "iana" + }, + "font/ttf": { + source: "iana", + compressible: true, + extensions: ["ttf"] + }, + "font/woff": { + source: "iana", + extensions: ["woff"] + }, + "font/woff2": { + source: "iana", + extensions: ["woff2"] + }, + "image/aces": { + source: "iana", + extensions: ["exr"] + }, + "image/apng": { + source: "iana", + compressible: false, + extensions: ["apng"] + }, + "image/avci": { + source: "iana", + extensions: ["avci"] + }, + "image/avcs": { + source: "iana", + extensions: ["avcs"] + }, + "image/avif": { + source: "iana", + compressible: false, + extensions: ["avif"] + }, + "image/bmp": { + source: "iana", + compressible: true, + extensions: ["bmp", "dib"] + }, + "image/cgm": { + source: "iana", + extensions: ["cgm"] + }, + "image/dicom-rle": { + source: "iana", + extensions: ["drle"] + }, + "image/dpx": { + source: "iana", + extensions: ["dpx"] + }, + "image/emf": { + source: "iana", + extensions: ["emf"] + }, + "image/fits": { + source: "iana", + extensions: ["fits"] + }, + "image/g3fax": { + source: "iana", + extensions: ["g3"] + }, + "image/gif": { + source: "iana", + compressible: false, + extensions: ["gif"] + }, + "image/heic": { + source: "iana", + extensions: ["heic"] + }, + "image/heic-sequence": { + source: "iana", + extensions: ["heics"] + }, + "image/heif": { + source: "iana", + extensions: ["heif"] + }, + "image/heif-sequence": { + source: "iana", + extensions: ["heifs"] + }, + "image/hej2k": { + source: "iana", + extensions: ["hej2"] + }, + "image/ief": { + source: "iana", + extensions: ["ief"] + }, + "image/j2c": { + source: "iana" + }, + "image/jaii": { + source: "iana", + extensions: ["jaii"] + }, + "image/jais": { + source: "iana", + extensions: ["jais"] + }, + "image/jls": { + source: "iana", + extensions: ["jls"] + }, + "image/jp2": { + source: "iana", + compressible: false, + extensions: ["jp2", "jpg2"] + }, + "image/jpeg": { + source: "iana", + compressible: false, + extensions: ["jpg", "jpeg", "jpe"] + }, + "image/jph": { + source: "iana", + extensions: ["jph"] + }, + "image/jphc": { + source: "iana", + extensions: ["jhc"] + }, + "image/jpm": { + source: "iana", + compressible: false, + extensions: ["jpm", "jpgm"] + }, + "image/jpx": { + source: "iana", + compressible: false, + extensions: ["jpx", "jpf"] + }, + "image/jxl": { + source: "iana", + extensions: ["jxl"] + }, + "image/jxr": { + source: "iana", + extensions: ["jxr"] + }, + "image/jxra": { + source: "iana", + extensions: ["jxra"] + }, + "image/jxrs": { + source: "iana", + extensions: ["jxrs"] + }, + "image/jxs": { + source: "iana", + extensions: ["jxs"] + }, + "image/jxsc": { + source: "iana", + extensions: ["jxsc"] + }, + "image/jxsi": { + source: "iana", + extensions: ["jxsi"] + }, + "image/jxss": { + source: "iana", + extensions: ["jxss"] + }, + "image/ktx": { + source: "iana", + extensions: ["ktx"] + }, + "image/ktx2": { + source: "iana", + extensions: ["ktx2"] + }, + "image/naplps": { + source: "iana" + }, + "image/pjpeg": { + compressible: false, + extensions: ["jfif"] + }, + "image/png": { + source: "iana", + compressible: false, + extensions: ["png"] + }, + "image/prs.btif": { + source: "iana", + extensions: ["btif", "btf"] + }, + "image/prs.pti": { + source: "iana", + extensions: ["pti"] + }, + "image/pwg-raster": { + source: "iana" + }, + "image/sgi": { + source: "apache", + extensions: ["sgi"] + }, + "image/svg+xml": { + source: "iana", + compressible: true, + extensions: ["svg", "svgz"] + }, + "image/t38": { + source: "iana", + extensions: ["t38"] + }, + "image/tiff": { + source: "iana", + compressible: false, + extensions: ["tif", "tiff"] + }, + "image/tiff-fx": { + source: "iana", + extensions: ["tfx"] + }, + "image/vnd.adobe.photoshop": { + source: "iana", + compressible: true, + extensions: ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + source: "iana", + extensions: ["azv"] + }, + "image/vnd.clip": { + source: "iana" + }, + "image/vnd.cns.inf2": { + source: "iana" + }, + "image/vnd.dece.graphic": { + source: "iana", + extensions: ["uvi", "uvvi", "uvg", "uvvg"] + }, + "image/vnd.djvu": { + source: "iana", + extensions: ["djvu", "djv"] + }, + "image/vnd.dvb.subtitle": { + source: "iana", + extensions: ["sub"] + }, + "image/vnd.dwg": { + source: "iana", + extensions: ["dwg"] + }, + "image/vnd.dxf": { + source: "iana", + extensions: ["dxf"] + }, + "image/vnd.fastbidsheet": { + source: "iana", + extensions: ["fbs"] + }, + "image/vnd.fpx": { + source: "iana", + extensions: ["fpx"] + }, + "image/vnd.fst": { + source: "iana", + extensions: ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + source: "iana", + extensions: ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + source: "iana", + extensions: ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + source: "iana" + }, + "image/vnd.microsoft.icon": { + source: "iana", + compressible: true, + extensions: ["ico"] + }, + "image/vnd.mix": { + source: "iana" + }, + "image/vnd.mozilla.apng": { + source: "iana" + }, + "image/vnd.ms-dds": { + compressible: true, + extensions: ["dds"] + }, + "image/vnd.ms-modi": { + source: "iana", + extensions: ["mdi"] + }, + "image/vnd.ms-photo": { + source: "apache", + extensions: ["wdp"] + }, + "image/vnd.net-fpx": { + source: "iana", + extensions: ["npx"] + }, + "image/vnd.pco.b16": { + source: "iana", + extensions: ["b16"] + }, + "image/vnd.radiance": { + source: "iana" + }, + "image/vnd.sealed.png": { + source: "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + source: "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + source: "iana" + }, + "image/vnd.svf": { + source: "iana" + }, + "image/vnd.tencent.tap": { + source: "iana", + extensions: ["tap"] + }, + "image/vnd.valve.source.texture": { + source: "iana", + extensions: ["vtf"] + }, + "image/vnd.wap.wbmp": { + source: "iana", + extensions: ["wbmp"] + }, + "image/vnd.xiff": { + source: "iana", + extensions: ["xif"] + }, + "image/vnd.zbrush.pcx": { + source: "iana", + extensions: ["pcx"] + }, + "image/webp": { + source: "iana", + extensions: ["webp"] + }, + "image/wmf": { + source: "iana", + extensions: ["wmf"] + }, + "image/x-3ds": { + source: "apache", + extensions: ["3ds"] + }, + "image/x-adobe-dng": { + extensions: ["dng"] + }, + "image/x-cmu-raster": { + source: "apache", + extensions: ["ras"] + }, + "image/x-cmx": { + source: "apache", + extensions: ["cmx"] + }, + "image/x-emf": { + source: "iana" + }, + "image/x-freehand": { + source: "apache", + extensions: ["fh", "fhc", "fh4", "fh5", "fh7"] + }, + "image/x-icon": { + source: "apache", + compressible: true, + extensions: ["ico"] + }, + "image/x-jng": { + source: "nginx", + extensions: ["jng"] + }, + "image/x-mrsid-image": { + source: "apache", + extensions: ["sid"] + }, + "image/x-ms-bmp": { + source: "nginx", + compressible: true, + extensions: ["bmp"] + }, + "image/x-pcx": { + source: "apache", + extensions: ["pcx"] + }, + "image/x-pict": { + source: "apache", + extensions: ["pic", "pct"] + }, + "image/x-portable-anymap": { + source: "apache", + extensions: ["pnm"] + }, + "image/x-portable-bitmap": { + source: "apache", + extensions: ["pbm"] + }, + "image/x-portable-graymap": { + source: "apache", + extensions: ["pgm"] + }, + "image/x-portable-pixmap": { + source: "apache", + extensions: ["ppm"] + }, + "image/x-rgb": { + source: "apache", + extensions: ["rgb"] + }, + "image/x-tga": { + source: "apache", + extensions: ["tga"] + }, + "image/x-wmf": { + source: "iana" + }, + "image/x-xbitmap": { + source: "apache", + extensions: ["xbm"] + }, + "image/x-xcf": { + compressible: false + }, + "image/x-xpixmap": { + source: "apache", + extensions: ["xpm"] + }, + "image/x-xwindowdump": { + source: "apache", + extensions: ["xwd"] + }, + "message/bhttp": { + source: "iana" + }, + "message/cpim": { + source: "iana" + }, + "message/delivery-status": { + source: "iana" + }, + "message/disposition-notification": { + source: "iana", + extensions: [ + "disposition-notification" + ] + }, + "message/external-body": { + source: "iana" + }, + "message/feedback-report": { + source: "iana" + }, + "message/global": { + source: "iana", + extensions: ["u8msg"] + }, + "message/global-delivery-status": { + source: "iana", + extensions: ["u8dsn"] + }, + "message/global-disposition-notification": { + source: "iana", + extensions: ["u8mdn"] + }, + "message/global-headers": { + source: "iana", + extensions: ["u8hdr"] + }, + "message/http": { + source: "iana", + compressible: false + }, + "message/imdn+xml": { + source: "iana", + compressible: true + }, + "message/mls": { + source: "iana" + }, + "message/news": { + source: "apache" + }, + "message/ohttp-req": { + source: "iana" + }, + "message/ohttp-res": { + source: "iana" + }, + "message/partial": { + source: "iana", + compressible: false + }, + "message/rfc822": { + source: "iana", + compressible: true, + extensions: ["eml", "mime", "mht", "mhtml"] + }, + "message/s-http": { + source: "apache" + }, + "message/sip": { + source: "iana" + }, + "message/sipfrag": { + source: "iana" + }, + "message/tracking-status": { + source: "iana" + }, + "message/vnd.si.simp": { + source: "apache" + }, + "message/vnd.wfa.wsc": { + source: "iana", + extensions: ["wsc"] + }, + "model/3mf": { + source: "iana", + extensions: ["3mf"] + }, + "model/e57": { + source: "iana" + }, + "model/gltf+json": { + source: "iana", + compressible: true, + extensions: ["gltf"] + }, + "model/gltf-binary": { + source: "iana", + compressible: true, + extensions: ["glb"] + }, + "model/iges": { + source: "iana", + compressible: false, + extensions: ["igs", "iges"] + }, + "model/jt": { + source: "iana", + extensions: ["jt"] + }, + "model/mesh": { + source: "iana", + compressible: false, + extensions: ["msh", "mesh", "silo"] + }, + "model/mtl": { + source: "iana", + extensions: ["mtl"] + }, + "model/obj": { + source: "iana", + extensions: ["obj"] + }, + "model/prc": { + source: "iana", + extensions: ["prc"] + }, + "model/step": { + source: "iana", + extensions: ["step", "stp", "stpnc", "p21", "210"] + }, + "model/step+xml": { + source: "iana", + compressible: true, + extensions: ["stpx"] + }, + "model/step+zip": { + source: "iana", + compressible: false, + extensions: ["stpz"] + }, + "model/step-xml+zip": { + source: "iana", + compressible: false, + extensions: ["stpxz"] + }, + "model/stl": { + source: "iana", + extensions: ["stl"] + }, + "model/u3d": { + source: "iana", + extensions: ["u3d"] + }, + "model/vnd.bary": { + source: "iana", + extensions: ["bary"] + }, + "model/vnd.cld": { + source: "iana", + extensions: ["cld"] + }, + "model/vnd.collada+xml": { + source: "iana", + compressible: true, + extensions: ["dae"] + }, + "model/vnd.dwf": { + source: "iana", + extensions: ["dwf"] + }, + "model/vnd.flatland.3dml": { + source: "iana" + }, + "model/vnd.gdl": { + source: "iana", + extensions: ["gdl"] + }, + "model/vnd.gs-gdl": { + source: "apache" + }, + "model/vnd.gs.gdl": { + source: "iana" + }, + "model/vnd.gtw": { + source: "iana", + extensions: ["gtw"] + }, + "model/vnd.moml+xml": { + source: "iana", + compressible: true + }, + "model/vnd.mts": { + source: "iana", + extensions: ["mts"] + }, + "model/vnd.opengex": { + source: "iana", + extensions: ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + source: "iana", + extensions: ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + source: "iana", + extensions: ["x_t"] + }, + "model/vnd.pytha.pyox": { + source: "iana", + extensions: ["pyo", "pyox"] + }, + "model/vnd.rosette.annotated-data-model": { + source: "iana" + }, + "model/vnd.sap.vds": { + source: "iana", + extensions: ["vds"] + }, + "model/vnd.usda": { + source: "iana", + extensions: ["usda"] + }, + "model/vnd.usdz+zip": { + source: "iana", + compressible: false, + extensions: ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + source: "iana", + extensions: ["bsp"] + }, + "model/vnd.vtu": { + source: "iana", + extensions: ["vtu"] + }, + "model/vrml": { + source: "iana", + compressible: false, + extensions: ["wrl", "vrml"] + }, + "model/x3d+binary": { + source: "apache", + compressible: false, + extensions: ["x3db", "x3dbz"] + }, + "model/x3d+fastinfoset": { + source: "iana", + extensions: ["x3db"] + }, + "model/x3d+vrml": { + source: "apache", + compressible: false, + extensions: ["x3dv", "x3dvz"] + }, + "model/x3d+xml": { + source: "iana", + compressible: true, + extensions: ["x3d", "x3dz"] + }, + "model/x3d-vrml": { + source: "iana", + extensions: ["x3dv"] + }, + "multipart/alternative": { + source: "iana", + compressible: false + }, + "multipart/appledouble": { + source: "iana" + }, + "multipart/byteranges": { + source: "iana" + }, + "multipart/digest": { + source: "iana" + }, + "multipart/encrypted": { + source: "iana", + compressible: false + }, + "multipart/form-data": { + source: "iana", + compressible: false + }, + "multipart/header-set": { + source: "iana" + }, + "multipart/mixed": { + source: "iana" + }, + "multipart/multilingual": { + source: "iana" + }, + "multipart/parallel": { + source: "iana" + }, + "multipart/related": { + source: "iana", + compressible: false + }, + "multipart/report": { + source: "iana" + }, + "multipart/signed": { + source: "iana", + compressible: false + }, + "multipart/vnd.bint.med-plus": { + source: "iana" + }, + "multipart/voice-message": { + source: "iana" + }, + "multipart/x-mixed-replace": { + source: "iana" + }, + "text/1d-interleaved-parityfec": { + source: "iana" + }, + "text/cache-manifest": { + source: "iana", + compressible: true, + extensions: ["appcache", "manifest"] + }, + "text/calendar": { + source: "iana", + extensions: ["ics", "ifb"] + }, + "text/calender": { + compressible: true + }, + "text/cmd": { + compressible: true + }, + "text/coffeescript": { + extensions: ["coffee", "litcoffee"] + }, + "text/cql": { + source: "iana" + }, + "text/cql-expression": { + source: "iana" + }, + "text/cql-identifier": { + source: "iana" + }, + "text/css": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["css"] + }, + "text/csv": { + source: "iana", + compressible: true, + extensions: ["csv"] + }, + "text/csv-schema": { + source: "iana" + }, + "text/directory": { + source: "iana" + }, + "text/dns": { + source: "iana" + }, + "text/ecmascript": { + source: "apache" + }, + "text/encaprtp": { + source: "iana" + }, + "text/enriched": { + source: "iana" + }, + "text/fhirpath": { + source: "iana" + }, + "text/flexfec": { + source: "iana" + }, + "text/fwdred": { + source: "iana" + }, + "text/gff3": { + source: "iana" + }, + "text/grammar-ref-list": { + source: "iana" + }, + "text/hl7v2": { + source: "iana" + }, + "text/html": { + source: "iana", + compressible: true, + extensions: ["html", "htm", "shtml"] + }, + "text/jade": { + extensions: ["jade"] + }, + "text/javascript": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["js", "mjs"] + }, + "text/jcr-cnd": { + source: "iana" + }, + "text/jsx": { + compressible: true, + extensions: ["jsx"] + }, + "text/less": { + compressible: true, + extensions: ["less"] + }, + "text/markdown": { + source: "iana", + compressible: true, + extensions: ["md", "markdown"] + }, + "text/mathml": { + source: "nginx", + extensions: ["mml"] + }, + "text/mdx": { + compressible: true, + extensions: ["mdx"] + }, + "text/mizar": { + source: "iana" + }, + "text/n3": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["n3"] + }, + "text/parameters": { + source: "iana", + charset: "UTF-8" + }, + "text/parityfec": { + source: "iana" + }, + "text/plain": { + source: "iana", + compressible: true, + extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"] + }, + "text/provenance-notation": { + source: "iana", + charset: "UTF-8" + }, + "text/prs.fallenstein.rst": { + source: "iana" + }, + "text/prs.lines.tag": { + source: "iana", + extensions: ["dsc"] + }, + "text/prs.prop.logic": { + source: "iana" + }, + "text/prs.texi": { + source: "iana" + }, + "text/raptorfec": { + source: "iana" + }, + "text/red": { + source: "iana" + }, + "text/rfc822-headers": { + source: "iana" + }, + "text/richtext": { + source: "iana", + compressible: true, + extensions: ["rtx"] + }, + "text/rtf": { + source: "iana", + compressible: true, + extensions: ["rtf"] + }, + "text/rtp-enc-aescm128": { + source: "iana" + }, + "text/rtploopback": { + source: "iana" + }, + "text/rtx": { + source: "iana" + }, + "text/sgml": { + source: "iana", + extensions: ["sgml", "sgm"] + }, + "text/shaclc": { + source: "iana" + }, + "text/shex": { + source: "iana", + extensions: ["shex"] + }, + "text/slim": { + extensions: ["slim", "slm"] + }, + "text/spdx": { + source: "iana", + extensions: ["spdx"] + }, + "text/strings": { + source: "iana" + }, + "text/stylus": { + extensions: ["stylus", "styl"] + }, + "text/t140": { + source: "iana" + }, + "text/tab-separated-values": { + source: "iana", + compressible: true, + extensions: ["tsv"] + }, + "text/troff": { + source: "iana", + extensions: ["t", "tr", "roff", "man", "me", "ms"] + }, + "text/turtle": { + source: "iana", + charset: "UTF-8", + extensions: ["ttl"] + }, + "text/ulpfec": { + source: "iana" + }, + "text/uri-list": { + source: "iana", + compressible: true, + extensions: ["uri", "uris", "urls"] + }, + "text/vcard": { + source: "iana", + compressible: true, + extensions: ["vcard"] + }, + "text/vnd.a": { + source: "iana" + }, + "text/vnd.abc": { + source: "iana" + }, + "text/vnd.ascii-art": { + source: "iana" + }, + "text/vnd.curl": { + source: "iana", + extensions: ["curl"] + }, + "text/vnd.curl.dcurl": { + source: "apache", + extensions: ["dcurl"] + }, + "text/vnd.curl.mcurl": { + source: "apache", + extensions: ["mcurl"] + }, + "text/vnd.curl.scurl": { + source: "apache", + extensions: ["scurl"] + }, + "text/vnd.debian.copyright": { + source: "iana", + charset: "UTF-8" + }, + "text/vnd.dmclientscript": { + source: "iana" + }, + "text/vnd.dvb.subtitle": { + source: "iana", + extensions: ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + source: "iana", + charset: "UTF-8" + }, + "text/vnd.exchangeable": { + source: "iana" + }, + "text/vnd.familysearch.gedcom": { + source: "iana", + extensions: ["ged"] + }, + "text/vnd.ficlab.flt": { + source: "iana" + }, + "text/vnd.fly": { + source: "iana", + extensions: ["fly"] + }, + "text/vnd.fmi.flexstor": { + source: "iana", + extensions: ["flx"] + }, + "text/vnd.gml": { + source: "iana" + }, + "text/vnd.graphviz": { + source: "iana", + extensions: ["gv"] + }, + "text/vnd.hans": { + source: "iana" + }, + "text/vnd.hgl": { + source: "iana" + }, + "text/vnd.in3d.3dml": { + source: "iana", + extensions: ["3dml"] + }, + "text/vnd.in3d.spot": { + source: "iana", + extensions: ["spot"] + }, + "text/vnd.iptc.newsml": { + source: "iana" + }, + "text/vnd.iptc.nitf": { + source: "iana" + }, + "text/vnd.latex-z": { + source: "iana" + }, + "text/vnd.motorola.reflex": { + source: "iana" + }, + "text/vnd.ms-mediapackage": { + source: "iana" + }, + "text/vnd.net2phone.commcenter.command": { + source: "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + source: "iana" + }, + "text/vnd.senx.warpscript": { + source: "iana" + }, + "text/vnd.si.uricatalogue": { + source: "apache" + }, + "text/vnd.sosi": { + source: "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + source: "iana", + charset: "UTF-8", + extensions: ["jad"] + }, + "text/vnd.trolltech.linguist": { + source: "iana", + charset: "UTF-8" + }, + "text/vnd.vcf": { + source: "iana" + }, + "text/vnd.wap.si": { + source: "iana" + }, + "text/vnd.wap.sl": { + source: "iana" + }, + "text/vnd.wap.wml": { + source: "iana", + extensions: ["wml"] + }, + "text/vnd.wap.wmlscript": { + source: "iana", + extensions: ["wmls"] + }, + "text/vnd.zoo.kcl": { + source: "iana" + }, + "text/vtt": { + source: "iana", + charset: "UTF-8", + compressible: true, + extensions: ["vtt"] + }, + "text/wgsl": { + source: "iana", + extensions: ["wgsl"] + }, + "text/x-asm": { + source: "apache", + extensions: ["s", "asm"] + }, + "text/x-c": { + source: "apache", + extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"] + }, + "text/x-component": { + source: "nginx", + extensions: ["htc"] + }, + "text/x-fortran": { + source: "apache", + extensions: ["f", "for", "f77", "f90"] + }, + "text/x-gwt-rpc": { + compressible: true + }, + "text/x-handlebars-template": { + extensions: ["hbs"] + }, + "text/x-java-source": { + source: "apache", + extensions: ["java"] + }, + "text/x-jquery-tmpl": { + compressible: true + }, + "text/x-lua": { + extensions: ["lua"] + }, + "text/x-markdown": { + compressible: true, + extensions: ["mkd"] + }, + "text/x-nfo": { + source: "apache", + extensions: ["nfo"] + }, + "text/x-opml": { + source: "apache", + extensions: ["opml"] + }, + "text/x-org": { + compressible: true, + extensions: ["org"] + }, + "text/x-pascal": { + source: "apache", + extensions: ["p", "pas"] + }, + "text/x-processing": { + compressible: true, + extensions: ["pde"] + }, + "text/x-sass": { + extensions: ["sass"] + }, + "text/x-scss": { + extensions: ["scss"] + }, + "text/x-setext": { + source: "apache", + extensions: ["etx"] + }, + "text/x-sfv": { + source: "apache", + extensions: ["sfv"] + }, + "text/x-suse-ymp": { + compressible: true, + extensions: ["ymp"] + }, + "text/x-uuencode": { + source: "apache", + extensions: ["uu"] + }, + "text/x-vcalendar": { + source: "apache", + extensions: ["vcs"] + }, + "text/x-vcard": { + source: "apache", + extensions: ["vcf"] + }, + "text/xml": { + source: "iana", + compressible: true, + extensions: ["xml"] + }, + "text/xml-external-parsed-entity": { + source: "iana" + }, + "text/yaml": { + compressible: true, + extensions: ["yaml", "yml"] + }, + "video/1d-interleaved-parityfec": { + source: "iana" + }, + "video/3gpp": { + source: "iana", + extensions: ["3gp", "3gpp"] + }, + "video/3gpp-tt": { + source: "iana" + }, + "video/3gpp2": { + source: "iana", + extensions: ["3g2"] + }, + "video/av1": { + source: "iana" + }, + "video/bmpeg": { + source: "iana" + }, + "video/bt656": { + source: "iana" + }, + "video/celb": { + source: "iana" + }, + "video/dv": { + source: "iana" + }, + "video/encaprtp": { + source: "iana" + }, + "video/evc": { + source: "iana" + }, + "video/ffv1": { + source: "iana" + }, + "video/flexfec": { + source: "iana" + }, + "video/h261": { + source: "iana", + extensions: ["h261"] + }, + "video/h263": { + source: "iana", + extensions: ["h263"] + }, + "video/h263-1998": { + source: "iana" + }, + "video/h263-2000": { + source: "iana" + }, + "video/h264": { + source: "iana", + extensions: ["h264"] + }, + "video/h264-rcdo": { + source: "iana" + }, + "video/h264-svc": { + source: "iana" + }, + "video/h265": { + source: "iana" + }, + "video/h266": { + source: "iana" + }, + "video/iso.segment": { + source: "iana", + extensions: ["m4s"] + }, + "video/jpeg": { + source: "iana", + extensions: ["jpgv"] + }, + "video/jpeg2000": { + source: "iana" + }, + "video/jpm": { + source: "apache", + extensions: ["jpm", "jpgm"] + }, + "video/jxsv": { + source: "iana" + }, + "video/lottie+json": { + source: "iana", + compressible: true + }, + "video/matroska": { + source: "iana" + }, + "video/matroska-3d": { + source: "iana" + }, + "video/mj2": { + source: "iana", + extensions: ["mj2", "mjp2"] + }, + "video/mp1s": { + source: "iana" + }, + "video/mp2p": { + source: "iana" + }, + "video/mp2t": { + source: "iana", + extensions: ["ts", "m2t", "m2ts", "mts"] + }, + "video/mp4": { + source: "iana", + compressible: false, + extensions: ["mp4", "mp4v", "mpg4"] + }, + "video/mp4v-es": { + source: "iana" + }, + "video/mpeg": { + source: "iana", + compressible: false, + extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"] + }, + "video/mpeg4-generic": { + source: "iana" + }, + "video/mpv": { + source: "iana" + }, + "video/nv": { + source: "iana" + }, + "video/ogg": { + source: "iana", + compressible: false, + extensions: ["ogv"] + }, + "video/parityfec": { + source: "iana" + }, + "video/pointer": { + source: "iana" + }, + "video/quicktime": { + source: "iana", + compressible: false, + extensions: ["qt", "mov"] + }, + "video/raptorfec": { + source: "iana" + }, + "video/raw": { + source: "iana" + }, + "video/rtp-enc-aescm128": { + source: "iana" + }, + "video/rtploopback": { + source: "iana" + }, + "video/rtx": { + source: "iana" + }, + "video/scip": { + source: "iana" + }, + "video/smpte291": { + source: "iana" + }, + "video/smpte292m": { + source: "iana" + }, + "video/ulpfec": { + source: "iana" + }, + "video/vc1": { + source: "iana" + }, + "video/vc2": { + source: "iana" + }, + "video/vnd.cctv": { + source: "iana" + }, + "video/vnd.dece.hd": { + source: "iana", + extensions: ["uvh", "uvvh"] + }, + "video/vnd.dece.mobile": { + source: "iana", + extensions: ["uvm", "uvvm"] + }, + "video/vnd.dece.mp4": { + source: "iana" + }, + "video/vnd.dece.pd": { + source: "iana", + extensions: ["uvp", "uvvp"] + }, + "video/vnd.dece.sd": { + source: "iana", + extensions: ["uvs", "uvvs"] + }, + "video/vnd.dece.video": { + source: "iana", + extensions: ["uvv", "uvvv"] + }, + "video/vnd.directv.mpeg": { + source: "iana" + }, + "video/vnd.directv.mpeg-tts": { + source: "iana" + }, + "video/vnd.dlna.mpeg-tts": { + source: "iana" + }, + "video/vnd.dvb.file": { + source: "iana", + extensions: ["dvb"] + }, + "video/vnd.fvt": { + source: "iana", + extensions: ["fvt"] + }, + "video/vnd.hns.video": { + source: "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + source: "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + source: "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + source: "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + source: "iana" + }, + "video/vnd.iptvforum.ttsavc": { + source: "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + source: "iana" + }, + "video/vnd.motorola.video": { + source: "iana" + }, + "video/vnd.motorola.videop": { + source: "iana" + }, + "video/vnd.mpegurl": { + source: "iana", + extensions: ["mxu", "m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + source: "iana", + extensions: ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + source: "iana" + }, + "video/vnd.nokia.mp4vr": { + source: "iana" + }, + "video/vnd.nokia.videovoip": { + source: "iana" + }, + "video/vnd.objectvideo": { + source: "iana" + }, + "video/vnd.planar": { + source: "iana" + }, + "video/vnd.radgamettools.bink": { + source: "iana" + }, + "video/vnd.radgamettools.smacker": { + source: "apache" + }, + "video/vnd.sealed.mpeg1": { + source: "iana" + }, + "video/vnd.sealed.mpeg4": { + source: "iana" + }, + "video/vnd.sealed.swf": { + source: "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + source: "iana" + }, + "video/vnd.uvvu.mp4": { + source: "iana", + extensions: ["uvu", "uvvu"] + }, + "video/vnd.vivo": { + source: "iana", + extensions: ["viv"] + }, + "video/vnd.youtube.yt": { + source: "iana" + }, + "video/vp8": { + source: "iana" + }, + "video/vp9": { + source: "iana" + }, + "video/webm": { + source: "apache", + compressible: false, + extensions: ["webm"] + }, + "video/x-f4v": { + source: "apache", + extensions: ["f4v"] + }, + "video/x-fli": { + source: "apache", + extensions: ["fli"] + }, + "video/x-flv": { + source: "apache", + compressible: false, + extensions: ["flv"] + }, + "video/x-m4v": { + source: "apache", + extensions: ["m4v"] + }, + "video/x-matroska": { + source: "apache", + compressible: false, + extensions: ["mkv", "mk3d", "mks"] + }, + "video/x-mng": { + source: "apache", + extensions: ["mng"] + }, + "video/x-ms-asf": { + source: "apache", + extensions: ["asf", "asx"] + }, + "video/x-ms-vob": { + source: "apache", + extensions: ["vob"] + }, + "video/x-ms-wm": { + source: "apache", + extensions: ["wm"] + }, + "video/x-ms-wmv": { + source: "apache", + compressible: false, + extensions: ["wmv"] + }, + "video/x-ms-wmx": { + source: "apache", + extensions: ["wmx"] + }, + "video/x-ms-wvx": { + source: "apache", + extensions: ["wvx"] + }, + "video/x-msvideo": { + source: "apache", + extensions: ["avi"] + }, + "video/x-sgi-movie": { + source: "apache", + extensions: ["movie"] + }, + "video/x-smv": { + source: "apache", + extensions: ["smv"] + }, + "x-conference/x-cooltalk": { + source: "apache", + extensions: ["ice"] + }, + "x-shader/x-fragment": { + compressible: true + }, + "x-shader/x-vertex": { + compressible: true + } + }; + } +}); + +// node_modules/mime-db/index.js +var require_mime_db = __commonJS({ + "node_modules/mime-db/index.js"(exports2, module2) { + module2.exports = require_db(); + } +}); + +// node_modules/mime-types/mimeScore.js +var require_mimeScore = __commonJS({ + "node_modules/mime-types/mimeScore.js"(exports2, module2) { + var FACET_SCORES = { + "prs.": 100, + "x-": 200, + "x.": 300, + "vnd.": 400, + default: 900 + }; + var SOURCE_SCORES = { + nginx: 10, + apache: 20, + iana: 40, + default: 30 + // definitions added by `jshttp/mime-db` project? + }; + var TYPE_SCORES = { + // prefer application/xml over text/xml + // prefer application/rtf over text/rtf + application: 1, + // prefer font/woff over application/font-woff + font: 2, + default: 0 + }; + module2.exports = function mimeScore(mimeType, source = "default") { + if (mimeType === "application/octet-stream") { + return 0; + } + const [type, subtype] = mimeType.split("/"); + const facet = subtype.replace(/(\.|x-).*/, "$1"); + const facetScore = FACET_SCORES[facet] || FACET_SCORES.default; + const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default; + const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default; + const lengthScore = 1 - mimeType.length / 100; + return facetScore + sourceScore + typeScore + lengthScore; + }; + } +}); + +// node_modules/mime-types/index.js +var require_mime_types = __commonJS({ + "node_modules/mime-types/index.js"(exports2) { + "use strict"; + var db = require_mime_db(); + var extname = require("path").extname; + var mimeScore = require_mimeScore(); + var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/; + var TEXT_TYPE_REGEXP = /^text\//i; + exports2.charset = charset; + exports2.charsets = { lookup: charset }; + exports2.contentType = contentType; + exports2.extension = extension; + exports2.extensions = /* @__PURE__ */ Object.create(null); + exports2.lookup = lookup2; + exports2.types = /* @__PURE__ */ Object.create(null); + exports2._extensionConflicts = []; + populateMaps(exports2.extensions, exports2.types); + function charset(type) { + if (!type || typeof type !== "string") { + return false; + } + var match = EXTRACT_TYPE_REGEXP.exec(type); + var mime2 = match && db[match[1].toLowerCase()]; + if (mime2 && mime2.charset) { + return mime2.charset; + } + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return "UTF-8"; + } + return false; + } + function contentType(str) { + if (!str || typeof str !== "string") { + return false; + } + var mime2 = str.indexOf("/") === -1 ? exports2.lookup(str) : str; + if (!mime2) { + return false; + } + if (mime2.indexOf("charset") === -1) { + var charset2 = exports2.charset(mime2); + if (charset2) + mime2 += "; charset=" + charset2.toLowerCase(); + } + return mime2; + } + function extension(type) { + if (!type || typeof type !== "string") { + return false; + } + var match = EXTRACT_TYPE_REGEXP.exec(type); + var exts = match && exports2.extensions[match[1].toLowerCase()]; + if (!exts || !exts.length) { + return false; + } + return exts[0]; + } + function lookup2(path2) { + if (!path2 || typeof path2 !== "string") { + return false; + } + var extension2 = extname("x." + path2).toLowerCase().slice(1); + if (!extension2) { + return false; + } + return exports2.types[extension2] || false; + } + function populateMaps(extensions, types) { + Object.keys(db).forEach(function forEachMimeType(type) { + var mime2 = db[type]; + var exts = mime2.extensions; + if (!exts || !exts.length) { + return; + } + extensions[type] = exts; + for (var i = 0; i < exts.length; i++) { + var extension2 = exts[i]; + types[extension2] = _preferredType(extension2, types[extension2], type); + const legacyType = _preferredTypeLegacy( + extension2, + types[extension2], + type + ); + if (legacyType !== types[extension2]) { + exports2._extensionConflicts.push([extension2, legacyType, types[extension2]]); + } + } + }); + } + function _preferredType(ext, type0, type1) { + var score0 = type0 ? mimeScore(type0, db[type0].source) : 0; + var score1 = type1 ? mimeScore(type1, db[type1].source) : 0; + return score0 > score1 ? type0 : type1; + } + function _preferredTypeLegacy(ext, type0, type1) { + var _a; + var SOURCE_RANK = ["nginx", "apache", void 0, "iana"]; + var score0 = type0 ? SOURCE_RANK.indexOf(db[type0].source) : 0; + var score1 = type1 ? SOURCE_RANK.indexOf(db[type1].source) : 0; + if (exports2.types[extension] !== "application/octet-stream" && (score0 > score1 || score0 === score1 && ((_a = exports2.types[extension]) == null ? void 0 : _a.slice(0, 12)) === "application/")) { + return type0; + } + return score0 > score1 ? type0 : type1; + } + } +}); + +// main.ts +var main_exports = {}; +__export(main_exports, { + default: () => OnlyOfficePlugin +}); +module.exports = __toCommonJS(main_exports); +var import_obsidian = require("obsidian"); +var path = __toESM(require("path")); +var fs = __toESM(require("fs")); + +// node_modules/jose/dist/webapi/lib/buffer_utils.js +var encoder = new TextEncoder(); +var decoder = new TextDecoder(); +var MAX_INT32 = 2 ** 32; +function concat(...buffers) { + const size = buffers.reduce((acc, { length }) => acc + length, 0); + const buf = new Uint8Array(size); + let i = 0; + for (const buffer of buffers) { + buf.set(buffer, i); + i += buffer.length; + } + return buf; +} + +// node_modules/jose/dist/webapi/lib/base64.js +function encodeBase64(input) { + if (Uint8Array.prototype.toBase64) { + return input.toBase64(); + } + const CHUNK_SIZE = 32768; + const arr = []; + for (let i = 0; i < input.length; i += CHUNK_SIZE) { + arr.push(String.fromCharCode.apply(null, input.subarray(i, i + CHUNK_SIZE))); + } + return btoa(arr.join("")); +} +function decodeBase64(encoded) { + if (Uint8Array.fromBase64) { + return Uint8Array.fromBase64(encoded); + } + const binary = atob(encoded); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) { + bytes[i] = binary.charCodeAt(i); + } + return bytes; +} + +// node_modules/jose/dist/webapi/util/base64url.js +function decode(input) { + if (Uint8Array.fromBase64) { + return Uint8Array.fromBase64(typeof input === "string" ? input : decoder.decode(input), { + alphabet: "base64url" + }); + } + let encoded = input; + if (encoded instanceof Uint8Array) { + encoded = decoder.decode(encoded); + } + encoded = encoded.replace(/-/g, "+").replace(/_/g, "/").replace(/\s/g, ""); + try { + return decodeBase64(encoded); + } catch (e) { + throw new TypeError("The input to be decoded is not correctly encoded."); + } +} +function encode(input) { + let unencoded = input; + if (typeof unencoded === "string") { + unencoded = encoder.encode(unencoded); + } + if (Uint8Array.prototype.toBase64) { + return unencoded.toBase64({ alphabet: "base64url", omitPadding: true }); + } + return encodeBase64(unencoded).replace(/=/g, "").replace(/\+/g, "-").replace(/\//g, "_"); +} + +// node_modules/jose/dist/webapi/util/errors.js +var JOSEError = class extends Error { + constructor(message2, options) { + var _a; + super(message2, options); + __publicField(this, "code", "ERR_JOSE_GENERIC"); + this.name = this.constructor.name; + (_a = Error.captureStackTrace) == null ? void 0 : _a.call(Error, this, this.constructor); + } +}; +__publicField(JOSEError, "code", "ERR_JOSE_GENERIC"); +var JOSENotSupported = class extends JOSEError { + constructor() { + super(...arguments); + __publicField(this, "code", "ERR_JOSE_NOT_SUPPORTED"); + } +}; +__publicField(JOSENotSupported, "code", "ERR_JOSE_NOT_SUPPORTED"); +var JWSInvalid = class extends JOSEError { + constructor() { + super(...arguments); + __publicField(this, "code", "ERR_JWS_INVALID"); + } +}; +__publicField(JWSInvalid, "code", "ERR_JWS_INVALID"); +var JWTInvalid = class extends JOSEError { + constructor() { + super(...arguments); + __publicField(this, "code", "ERR_JWT_INVALID"); + } +}; +__publicField(JWTInvalid, "code", "ERR_JWT_INVALID"); + +// node_modules/jose/dist/webapi/lib/crypto_key.js +function unusable(name, prop = "algorithm.name") { + return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`); +} +function isAlgorithm(algorithm, name) { + return algorithm.name === name; +} +function getHashLength(hash) { + return parseInt(hash.name.slice(4), 10); +} +function getNamedCurve(alg) { + switch (alg) { + case "ES256": + return "P-256"; + case "ES384": + return "P-384"; + case "ES512": + return "P-521"; + default: + throw new Error("unreachable"); + } +} +function checkUsage(key, usage) { + if (usage && !key.usages.includes(usage)) { + throw new TypeError(`CryptoKey does not support this operation, its usages must include ${usage}.`); + } +} +function checkSigCryptoKey(key, alg, usage) { + switch (alg) { + case "HS256": + case "HS384": + case "HS512": { + if (!isAlgorithm(key.algorithm, "HMAC")) + throw unusable("HMAC"); + const expected = parseInt(alg.slice(2), 10); + const actual = getHashLength(key.algorithm.hash); + if (actual !== expected) + throw unusable(`SHA-${expected}`, "algorithm.hash"); + break; + } + case "RS256": + case "RS384": + case "RS512": { + if (!isAlgorithm(key.algorithm, "RSASSA-PKCS1-v1_5")) + throw unusable("RSASSA-PKCS1-v1_5"); + const expected = parseInt(alg.slice(2), 10); + const actual = getHashLength(key.algorithm.hash); + if (actual !== expected) + throw unusable(`SHA-${expected}`, "algorithm.hash"); + break; + } + case "PS256": + case "PS384": + case "PS512": { + if (!isAlgorithm(key.algorithm, "RSA-PSS")) + throw unusable("RSA-PSS"); + const expected = parseInt(alg.slice(2), 10); + const actual = getHashLength(key.algorithm.hash); + if (actual !== expected) + throw unusable(`SHA-${expected}`, "algorithm.hash"); + break; + } + case "Ed25519": + case "EdDSA": { + if (!isAlgorithm(key.algorithm, "Ed25519")) + throw unusable("Ed25519"); + break; + } + case "ES256": + case "ES384": + case "ES512": { + if (!isAlgorithm(key.algorithm, "ECDSA")) + throw unusable("ECDSA"); + const expected = getNamedCurve(alg); + const actual = key.algorithm.namedCurve; + if (actual !== expected) + throw unusable(expected, "algorithm.namedCurve"); + break; + } + default: + throw new TypeError("CryptoKey does not support this operation"); + } + checkUsage(key, usage); +} + +// node_modules/jose/dist/webapi/lib/invalid_key_input.js +function message(msg, actual, ...types) { + var _a; + types = types.filter(Boolean); + if (types.length > 2) { + const last = types.pop(); + msg += `one of type ${types.join(", ")}, or ${last}.`; + } else if (types.length === 2) { + msg += `one of type ${types[0]} or ${types[1]}.`; + } else { + msg += `of type ${types[0]}.`; + } + if (actual == null) { + msg += ` Received ${actual}`; + } else if (typeof actual === "function" && actual.name) { + msg += ` Received function ${actual.name}`; + } else if (typeof actual === "object" && actual != null) { + if ((_a = actual.constructor) == null ? void 0 : _a.name) { + msg += ` Received an instance of ${actual.constructor.name}`; + } + } + return msg; +} +var invalid_key_input_default = (actual, ...types) => { + return message("Key must be ", actual, ...types); +}; +function withAlg(alg, actual, ...types) { + return message(`Key for the ${alg} algorithm must be `, actual, ...types); +} + +// node_modules/jose/dist/webapi/lib/is_key_like.js +function isCryptoKey(key) { + return (key == null ? void 0 : key[Symbol.toStringTag]) === "CryptoKey"; +} +function isKeyObject(key) { + return (key == null ? void 0 : key[Symbol.toStringTag]) === "KeyObject"; +} +var is_key_like_default = (key) => { + return isCryptoKey(key) || isKeyObject(key); +}; + +// node_modules/jose/dist/webapi/lib/is_disjoint.js +var is_disjoint_default = (...headers) => { + const sources = headers.filter(Boolean); + if (sources.length === 0 || sources.length === 1) { + return true; + } + let acc; + for (const header of sources) { + const parameters = Object.keys(header); + if (!acc || acc.size === 0) { + acc = new Set(parameters); + continue; + } + for (const parameter of parameters) { + if (acc.has(parameter)) { + return false; + } + acc.add(parameter); + } + } + return true; +}; + +// node_modules/jose/dist/webapi/lib/is_object.js +function isObjectLike(value) { + return typeof value === "object" && value !== null; +} +var is_object_default = (input) => { + if (!isObjectLike(input) || Object.prototype.toString.call(input) !== "[object Object]") { + return false; + } + if (Object.getPrototypeOf(input) === null) { + return true; + } + let proto = input; + while (Object.getPrototypeOf(proto) !== null) { + proto = Object.getPrototypeOf(proto); + } + return Object.getPrototypeOf(input) === proto; +}; + +// node_modules/jose/dist/webapi/lib/check_key_length.js +var check_key_length_default = (alg, key) => { + if (alg.startsWith("RS") || alg.startsWith("PS")) { + const { modulusLength } = key.algorithm; + if (typeof modulusLength !== "number" || modulusLength < 2048) { + throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`); + } + } +}; + +// node_modules/jose/dist/webapi/lib/jwk_to_key.js +function subtleMapping(jwk) { + let algorithm; + let keyUsages; + switch (jwk.kty) { + case "RSA": { + switch (jwk.alg) { + case "PS256": + case "PS384": + case "PS512": + algorithm = { name: "RSA-PSS", hash: `SHA-${jwk.alg.slice(-3)}` }; + keyUsages = jwk.d ? ["sign"] : ["verify"]; + break; + case "RS256": + case "RS384": + case "RS512": + algorithm = { name: "RSASSA-PKCS1-v1_5", hash: `SHA-${jwk.alg.slice(-3)}` }; + keyUsages = jwk.d ? ["sign"] : ["verify"]; + break; + case "RSA-OAEP": + case "RSA-OAEP-256": + case "RSA-OAEP-384": + case "RSA-OAEP-512": + algorithm = { + name: "RSA-OAEP", + hash: `SHA-${parseInt(jwk.alg.slice(-3), 10) || 1}` + }; + keyUsages = jwk.d ? ["decrypt", "unwrapKey"] : ["encrypt", "wrapKey"]; + break; + default: + throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value'); + } + break; + } + case "EC": { + switch (jwk.alg) { + case "ES256": + algorithm = { name: "ECDSA", namedCurve: "P-256" }; + keyUsages = jwk.d ? ["sign"] : ["verify"]; + break; + case "ES384": + algorithm = { name: "ECDSA", namedCurve: "P-384" }; + keyUsages = jwk.d ? ["sign"] : ["verify"]; + break; + case "ES512": + algorithm = { name: "ECDSA", namedCurve: "P-521" }; + keyUsages = jwk.d ? ["sign"] : ["verify"]; + break; + case "ECDH-ES": + case "ECDH-ES+A128KW": + case "ECDH-ES+A192KW": + case "ECDH-ES+A256KW": + algorithm = { name: "ECDH", namedCurve: jwk.crv }; + keyUsages = jwk.d ? ["deriveBits"] : []; + break; + default: + throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value'); + } + break; + } + case "OKP": { + switch (jwk.alg) { + case "Ed25519": + case "EdDSA": + algorithm = { name: "Ed25519" }; + keyUsages = jwk.d ? ["sign"] : ["verify"]; + break; + case "ECDH-ES": + case "ECDH-ES+A128KW": + case "ECDH-ES+A192KW": + case "ECDH-ES+A256KW": + algorithm = { name: jwk.crv }; + keyUsages = jwk.d ? ["deriveBits"] : []; + break; + default: + throw new JOSENotSupported('Invalid or unsupported JWK "alg" (Algorithm) Parameter value'); + } + break; + } + default: + throw new JOSENotSupported('Invalid or unsupported JWK "kty" (Key Type) Parameter value'); + } + return { algorithm, keyUsages }; +} +var jwk_to_key_default = async (jwk) => { + var _a, _b; + if (!jwk.alg) { + throw new TypeError('"alg" argument is required when "jwk.alg" is not present'); + } + const { algorithm, keyUsages } = subtleMapping(jwk); + const keyData = { ...jwk }; + delete keyData.alg; + delete keyData.use; + return crypto.subtle.importKey("jwk", keyData, algorithm, (_a = jwk.ext) != null ? _a : jwk.d ? false : true, (_b = jwk.key_ops) != null ? _b : keyUsages); +}; + +// node_modules/jose/dist/webapi/lib/validate_crit.js +var validate_crit_default = (Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) => { + if (joseHeader.crit !== void 0 && (protectedHeader == null ? void 0 : protectedHeader.crit) === void 0) { + throw new Err('"crit" (Critical) Header Parameter MUST be integrity protected'); + } + if (!protectedHeader || protectedHeader.crit === void 0) { + return /* @__PURE__ */ new Set(); + } + if (!Array.isArray(protectedHeader.crit) || protectedHeader.crit.length === 0 || protectedHeader.crit.some((input) => typeof input !== "string" || input.length === 0)) { + throw new Err('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present'); + } + let recognized; + if (recognizedOption !== void 0) { + recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]); + } else { + recognized = recognizedDefault; + } + for (const parameter of protectedHeader.crit) { + if (!recognized.has(parameter)) { + throw new JOSENotSupported(`Extension Header Parameter "${parameter}" is not recognized`); + } + if (joseHeader[parameter] === void 0) { + throw new Err(`Extension Header Parameter "${parameter}" is missing`); + } + if (recognized.get(parameter) && protectedHeader[parameter] === void 0) { + throw new Err(`Extension Header Parameter "${parameter}" MUST be integrity protected`); + } + } + return new Set(protectedHeader.crit); +}; + +// node_modules/jose/dist/webapi/lib/is_jwk.js +function isJWK(key) { + return is_object_default(key) && typeof key.kty === "string"; +} +function isPrivateJWK(key) { + return key.kty !== "oct" && typeof key.d === "string"; +} +function isPublicJWK(key) { + return key.kty !== "oct" && typeof key.d === "undefined"; +} +function isSecretJWK(key) { + return key.kty === "oct" && typeof key.k === "string"; +} + +// node_modules/jose/dist/webapi/lib/normalize_key.js +var cache; +var handleJWK = async (key, jwk, alg, freeze = false) => { + cache || (cache = /* @__PURE__ */ new WeakMap()); + let cached = cache.get(key); + if (cached == null ? void 0 : cached[alg]) { + return cached[alg]; + } + const cryptoKey = await jwk_to_key_default({ ...jwk, alg }); + if (freeze) + Object.freeze(key); + if (!cached) { + cache.set(key, { [alg]: cryptoKey }); + } else { + cached[alg] = cryptoKey; + } + return cryptoKey; +}; +var handleKeyObject = (keyObject, alg) => { + var _a; + cache || (cache = /* @__PURE__ */ new WeakMap()); + let cached = cache.get(keyObject); + if (cached == null ? void 0 : cached[alg]) { + return cached[alg]; + } + const isPublic = keyObject.type === "public"; + const extractable = isPublic ? true : false; + let cryptoKey; + if (keyObject.asymmetricKeyType === "x25519") { + switch (alg) { + case "ECDH-ES": + case "ECDH-ES+A128KW": + case "ECDH-ES+A192KW": + case "ECDH-ES+A256KW": + break; + default: + throw new TypeError("given KeyObject instance cannot be used for this algorithm"); + } + cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, isPublic ? [] : ["deriveBits"]); + } + if (keyObject.asymmetricKeyType === "ed25519") { + if (alg !== "EdDSA" && alg !== "Ed25519") { + throw new TypeError("given KeyObject instance cannot be used for this algorithm"); + } + cryptoKey = keyObject.toCryptoKey(keyObject.asymmetricKeyType, extractable, [ + isPublic ? "verify" : "sign" + ]); + } + if (keyObject.asymmetricKeyType === "rsa") { + let hash; + switch (alg) { + case "RSA-OAEP": + hash = "SHA-1"; + break; + case "RS256": + case "PS256": + case "RSA-OAEP-256": + hash = "SHA-256"; + break; + case "RS384": + case "PS384": + case "RSA-OAEP-384": + hash = "SHA-384"; + break; + case "RS512": + case "PS512": + case "RSA-OAEP-512": + hash = "SHA-512"; + break; + default: + throw new TypeError("given KeyObject instance cannot be used for this algorithm"); + } + if (alg.startsWith("RSA-OAEP")) { + return keyObject.toCryptoKey({ + name: "RSA-OAEP", + hash + }, extractable, isPublic ? ["encrypt"] : ["decrypt"]); + } + cryptoKey = keyObject.toCryptoKey({ + name: alg.startsWith("PS") ? "RSA-PSS" : "RSASSA-PKCS1-v1_5", + hash + }, extractable, [isPublic ? "verify" : "sign"]); + } + if (keyObject.asymmetricKeyType === "ec") { + const nist = /* @__PURE__ */ new Map([ + ["prime256v1", "P-256"], + ["secp384r1", "P-384"], + ["secp521r1", "P-521"] + ]); + const namedCurve = nist.get((_a = keyObject.asymmetricKeyDetails) == null ? void 0 : _a.namedCurve); + if (!namedCurve) { + throw new TypeError("given KeyObject instance cannot be used for this algorithm"); + } + if (alg === "ES256" && namedCurve === "P-256") { + cryptoKey = keyObject.toCryptoKey({ + name: "ECDSA", + namedCurve + }, extractable, [isPublic ? "verify" : "sign"]); + } + if (alg === "ES384" && namedCurve === "P-384") { + cryptoKey = keyObject.toCryptoKey({ + name: "ECDSA", + namedCurve + }, extractable, [isPublic ? "verify" : "sign"]); + } + if (alg === "ES512" && namedCurve === "P-521") { + cryptoKey = keyObject.toCryptoKey({ + name: "ECDSA", + namedCurve + }, extractable, [isPublic ? "verify" : "sign"]); + } + if (alg.startsWith("ECDH-ES")) { + cryptoKey = keyObject.toCryptoKey({ + name: "ECDH", + namedCurve + }, extractable, isPublic ? [] : ["deriveBits"]); + } + } + if (!cryptoKey) { + throw new TypeError("given KeyObject instance cannot be used for this algorithm"); + } + if (!cached) { + cache.set(keyObject, { [alg]: cryptoKey }); + } else { + cached[alg] = cryptoKey; + } + return cryptoKey; +}; +var normalize_key_default = async (key, alg) => { + if (key instanceof Uint8Array) { + return key; + } + if (isCryptoKey(key)) { + return key; + } + if (isKeyObject(key)) { + if (key.type === "secret") { + return key.export(); + } + if ("toCryptoKey" in key && typeof key.toCryptoKey === "function") { + try { + return handleKeyObject(key, alg); + } catch (err) { + if (err instanceof TypeError) { + throw err; + } + } + } + let jwk = key.export({ format: "jwk" }); + return handleJWK(key, jwk, alg); + } + if (isJWK(key)) { + if (key.k) { + return decode(key.k); + } + return handleJWK(key, key, alg, true); + } + throw new Error("unreachable"); +}; + +// node_modules/jose/dist/webapi/lib/check_key_type.js +var tag = (key) => key == null ? void 0 : key[Symbol.toStringTag]; +var jwkMatchesOp = (alg, key, usage) => { + var _a, _b; + if (key.use !== void 0) { + let expected; + switch (usage) { + case "sign": + case "verify": + expected = "sig"; + break; + case "encrypt": + case "decrypt": + expected = "enc"; + break; + } + if (key.use !== expected) { + throw new TypeError(`Invalid key for this operation, its "use" must be "${expected}" when present`); + } + } + if (key.alg !== void 0 && key.alg !== alg) { + throw new TypeError(`Invalid key for this operation, its "alg" must be "${alg}" when present`); + } + if (Array.isArray(key.key_ops)) { + let expectedKeyOp; + switch (true) { + case (usage === "sign" || usage === "verify"): + case alg === "dir": + case alg.includes("CBC-HS"): + expectedKeyOp = usage; + break; + case alg.startsWith("PBES2"): + expectedKeyOp = "deriveBits"; + break; + case /^A\d{3}(?:GCM)?(?:KW)?$/.test(alg): + if (!alg.includes("GCM") && alg.endsWith("KW")) { + expectedKeyOp = usage === "encrypt" ? "wrapKey" : "unwrapKey"; + } else { + expectedKeyOp = usage; + } + break; + case (usage === "encrypt" && alg.startsWith("RSA")): + expectedKeyOp = "wrapKey"; + break; + case usage === "decrypt": + expectedKeyOp = alg.startsWith("RSA") ? "unwrapKey" : "deriveBits"; + break; + } + if (expectedKeyOp && ((_b = (_a = key.key_ops) == null ? void 0 : _a.includes) == null ? void 0 : _b.call(_a, expectedKeyOp)) === false) { + throw new TypeError(`Invalid key for this operation, its "key_ops" must include "${expectedKeyOp}" when present`); + } + } + return true; +}; +var symmetricTypeCheck = (alg, key, usage) => { + if (key instanceof Uint8Array) + return; + if (isJWK(key)) { + if (isSecretJWK(key) && jwkMatchesOp(alg, key, usage)) + return; + throw new TypeError(`JSON Web Key for symmetric algorithms must have JWK "kty" (Key Type) equal to "oct" and the JWK "k" (Key Value) present`); + } + if (!is_key_like_default(key)) { + throw new TypeError(withAlg(alg, key, "CryptoKey", "KeyObject", "JSON Web Key", "Uint8Array")); + } + if (key.type !== "secret") { + throw new TypeError(`${tag(key)} instances for symmetric algorithms must be of type "secret"`); + } +}; +var asymmetricTypeCheck = (alg, key, usage) => { + if (isJWK(key)) { + switch (usage) { + case "decrypt": + case "sign": + if (isPrivateJWK(key) && jwkMatchesOp(alg, key, usage)) + return; + throw new TypeError(`JSON Web Key for this operation be a private JWK`); + case "encrypt": + case "verify": + if (isPublicJWK(key) && jwkMatchesOp(alg, key, usage)) + return; + throw new TypeError(`JSON Web Key for this operation be a public JWK`); + } + } + if (!is_key_like_default(key)) { + throw new TypeError(withAlg(alg, key, "CryptoKey", "KeyObject", "JSON Web Key")); + } + if (key.type === "secret") { + throw new TypeError(`${tag(key)} instances for asymmetric algorithms must not be of type "secret"`); + } + if (key.type === "public") { + switch (usage) { + case "sign": + throw new TypeError(`${tag(key)} instances for asymmetric algorithm signing must be of type "private"`); + case "decrypt": + throw new TypeError(`${tag(key)} instances for asymmetric algorithm decryption must be of type "private"`); + default: + break; + } + } + if (key.type === "private") { + switch (usage) { + case "verify": + throw new TypeError(`${tag(key)} instances for asymmetric algorithm verifying must be of type "public"`); + case "encrypt": + throw new TypeError(`${tag(key)} instances for asymmetric algorithm encryption must be of type "public"`); + default: + break; + } + } +}; +var check_key_type_default = (alg, key, usage) => { + const symmetric = alg.startsWith("HS") || alg === "dir" || alg.startsWith("PBES2") || /^A(?:128|192|256)(?:GCM)?(?:KW)?$/.test(alg) || /^A(?:128|192|256)CBC-HS(?:256|384|512)$/.test(alg); + if (symmetric) { + symmetricTypeCheck(alg, key, usage); + } else { + asymmetricTypeCheck(alg, key, usage); + } +}; + +// node_modules/jose/dist/webapi/lib/subtle_dsa.js +var subtle_dsa_default = (alg, algorithm) => { + const hash = `SHA-${alg.slice(-3)}`; + switch (alg) { + case "HS256": + case "HS384": + case "HS512": + return { hash, name: "HMAC" }; + case "PS256": + case "PS384": + case "PS512": + return { hash, name: "RSA-PSS", saltLength: parseInt(alg.slice(-3), 10) >> 3 }; + case "RS256": + case "RS384": + case "RS512": + return { hash, name: "RSASSA-PKCS1-v1_5" }; + case "ES256": + case "ES384": + case "ES512": + return { hash, name: "ECDSA", namedCurve: algorithm.namedCurve }; + case "Ed25519": + case "EdDSA": + return { name: "Ed25519" }; + default: + throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`); + } +}; + +// node_modules/jose/dist/webapi/lib/get_sign_verify_key.js +var get_sign_verify_key_default = async (alg, key, usage) => { + if (key instanceof Uint8Array) { + if (!alg.startsWith("HS")) { + throw new TypeError(invalid_key_input_default(key, "CryptoKey", "KeyObject", "JSON Web Key")); + } + return crypto.subtle.importKey("raw", key, { hash: `SHA-${alg.slice(-3)}`, name: "HMAC" }, false, [usage]); + } + checkSigCryptoKey(key, alg, usage); + return key; +}; + +// node_modules/jose/dist/webapi/lib/epoch.js +var epoch_default = (date) => Math.floor(date.getTime() / 1e3); + +// node_modules/jose/dist/webapi/lib/secs.js +var minute = 60; +var hour = minute * 60; +var day = hour * 24; +var week = day * 7; +var year = day * 365.25; +var REGEX = /^(\+|\-)? ?(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)(?: (ago|from now))?$/i; +var secs_default = (str) => { + const matched = REGEX.exec(str); + if (!matched || matched[4] && matched[1]) { + throw new TypeError("Invalid time period format"); + } + const value = parseFloat(matched[2]); + const unit = matched[3].toLowerCase(); + let numericDate; + switch (unit) { + case "sec": + case "secs": + case "second": + case "seconds": + case "s": + numericDate = Math.round(value); + break; + case "minute": + case "minutes": + case "min": + case "mins": + case "m": + numericDate = Math.round(value * minute); + break; + case "hour": + case "hours": + case "hr": + case "hrs": + case "h": + numericDate = Math.round(value * hour); + break; + case "day": + case "days": + case "d": + numericDate = Math.round(value * day); + break; + case "week": + case "weeks": + case "w": + numericDate = Math.round(value * week); + break; + default: + numericDate = Math.round(value * year); + break; + } + if (matched[1] === "-" || matched[4] === "ago") { + return -numericDate; + } + return numericDate; +}; + +// node_modules/jose/dist/webapi/lib/jwt_claims_set.js +function validateInput(label, input) { + if (!Number.isFinite(input)) { + throw new TypeError(`Invalid ${label} input`); + } + return input; +} +var _payload; +var JWTClaimsBuilder = class { + constructor(payload) { + __privateAdd(this, _payload, void 0); + if (!is_object_default(payload)) { + throw new TypeError("JWT Claims Set MUST be an object"); + } + __privateSet(this, _payload, structuredClone(payload)); + } + data() { + return encoder.encode(JSON.stringify(__privateGet(this, _payload))); + } + get iss() { + return __privateGet(this, _payload).iss; + } + set iss(value) { + __privateGet(this, _payload).iss = value; + } + get sub() { + return __privateGet(this, _payload).sub; + } + set sub(value) { + __privateGet(this, _payload).sub = value; + } + get aud() { + return __privateGet(this, _payload).aud; + } + set aud(value) { + __privateGet(this, _payload).aud = value; + } + set jti(value) { + __privateGet(this, _payload).jti = value; + } + set nbf(value) { + if (typeof value === "number") { + __privateGet(this, _payload).nbf = validateInput("setNotBefore", value); + } else if (value instanceof Date) { + __privateGet(this, _payload).nbf = validateInput("setNotBefore", epoch_default(value)); + } else { + __privateGet(this, _payload).nbf = epoch_default(/* @__PURE__ */ new Date()) + secs_default(value); + } + } + set exp(value) { + if (typeof value === "number") { + __privateGet(this, _payload).exp = validateInput("setExpirationTime", value); + } else if (value instanceof Date) { + __privateGet(this, _payload).exp = validateInput("setExpirationTime", epoch_default(value)); + } else { + __privateGet(this, _payload).exp = epoch_default(/* @__PURE__ */ new Date()) + secs_default(value); + } + } + set iat(value) { + if (typeof value === "undefined") { + __privateGet(this, _payload).iat = epoch_default(/* @__PURE__ */ new Date()); + } else if (value instanceof Date) { + __privateGet(this, _payload).iat = validateInput("setIssuedAt", epoch_default(value)); + } else if (typeof value === "string") { + __privateGet(this, _payload).iat = validateInput("setIssuedAt", epoch_default(/* @__PURE__ */ new Date()) + secs_default(value)); + } else { + __privateGet(this, _payload).iat = validateInput("setIssuedAt", value); + } + } +}; +_payload = new WeakMap(); + +// node_modules/jose/dist/webapi/lib/sign.js +var sign_default = async (alg, key, data) => { + const cryptoKey = await get_sign_verify_key_default(alg, key, "sign"); + check_key_length_default(alg, cryptoKey); + const signature = await crypto.subtle.sign(subtle_dsa_default(alg, cryptoKey.algorithm), cryptoKey, data); + return new Uint8Array(signature); +}; + +// node_modules/jose/dist/webapi/jws/flattened/sign.js +var _payload2, _protectedHeader, _unprotectedHeader; +var FlattenedSign = class { + constructor(payload) { + __privateAdd(this, _payload2, void 0); + __privateAdd(this, _protectedHeader, void 0); + __privateAdd(this, _unprotectedHeader, void 0); + if (!(payload instanceof Uint8Array)) { + throw new TypeError("payload must be an instance of Uint8Array"); + } + __privateSet(this, _payload2, payload); + } + setProtectedHeader(protectedHeader) { + if (__privateGet(this, _protectedHeader)) { + throw new TypeError("setProtectedHeader can only be called once"); + } + __privateSet(this, _protectedHeader, protectedHeader); + return this; + } + setUnprotectedHeader(unprotectedHeader) { + if (__privateGet(this, _unprotectedHeader)) { + throw new TypeError("setUnprotectedHeader can only be called once"); + } + __privateSet(this, _unprotectedHeader, unprotectedHeader); + return this; + } + async sign(key, options) { + if (!__privateGet(this, _protectedHeader) && !__privateGet(this, _unprotectedHeader)) { + throw new JWSInvalid("either setProtectedHeader or setUnprotectedHeader must be called before #sign()"); + } + if (!is_disjoint_default(__privateGet(this, _protectedHeader), __privateGet(this, _unprotectedHeader))) { + throw new JWSInvalid("JWS Protected and JWS Unprotected Header Parameter names must be disjoint"); + } + const joseHeader = { + ...__privateGet(this, _protectedHeader), + ...__privateGet(this, _unprotectedHeader) + }; + const extensions = validate_crit_default(JWSInvalid, /* @__PURE__ */ new Map([["b64", true]]), options == null ? void 0 : options.crit, __privateGet(this, _protectedHeader), joseHeader); + let b64 = true; + if (extensions.has("b64")) { + b64 = __privateGet(this, _protectedHeader).b64; + if (typeof b64 !== "boolean") { + throw new JWSInvalid('The "b64" (base64url-encode payload) Header Parameter must be a boolean'); + } + } + const { alg } = joseHeader; + if (typeof alg !== "string" || !alg) { + throw new JWSInvalid('JWS "alg" (Algorithm) Header Parameter missing or invalid'); + } + check_key_type_default(alg, key, "sign"); + let payload = __privateGet(this, _payload2); + if (b64) { + payload = encoder.encode(encode(payload)); + } + let protectedHeader; + if (__privateGet(this, _protectedHeader)) { + protectedHeader = encoder.encode(encode(JSON.stringify(__privateGet(this, _protectedHeader)))); + } else { + protectedHeader = encoder.encode(""); + } + const data = concat(protectedHeader, encoder.encode("."), payload); + const k = await normalize_key_default(key, alg); + const signature = await sign_default(alg, k, data); + const jws = { + signature: encode(signature), + payload: "" + }; + if (b64) { + jws.payload = decoder.decode(payload); + } + if (__privateGet(this, _unprotectedHeader)) { + jws.header = __privateGet(this, _unprotectedHeader); + } + if (__privateGet(this, _protectedHeader)) { + jws.protected = decoder.decode(protectedHeader); + } + return jws; + } +}; +_payload2 = new WeakMap(); +_protectedHeader = new WeakMap(); +_unprotectedHeader = new WeakMap(); + +// node_modules/jose/dist/webapi/jws/compact/sign.js +var _flattened; +var CompactSign = class { + constructor(payload) { + __privateAdd(this, _flattened, void 0); + __privateSet(this, _flattened, new FlattenedSign(payload)); + } + setProtectedHeader(protectedHeader) { + __privateGet(this, _flattened).setProtectedHeader(protectedHeader); + return this; + } + async sign(key, options) { + const jws = await __privateGet(this, _flattened).sign(key, options); + if (jws.payload === void 0) { + throw new TypeError("use the flattened module for creating JWS with b64: false"); + } + return `${jws.protected}.${jws.payload}.${jws.signature}`; + } +}; +_flattened = new WeakMap(); + +// node_modules/jose/dist/webapi/jwt/sign.js +var _protectedHeader2, _jwt; +var SignJWT = class { + constructor(payload = {}) { + __privateAdd(this, _protectedHeader2, void 0); + __privateAdd(this, _jwt, void 0); + __privateSet(this, _jwt, new JWTClaimsBuilder(payload)); + } + setIssuer(issuer) { + __privateGet(this, _jwt).iss = issuer; + return this; + } + setSubject(subject) { + __privateGet(this, _jwt).sub = subject; + return this; + } + setAudience(audience) { + __privateGet(this, _jwt).aud = audience; + return this; + } + setJti(jwtId) { + __privateGet(this, _jwt).jti = jwtId; + return this; + } + setNotBefore(input) { + __privateGet(this, _jwt).nbf = input; + return this; + } + setExpirationTime(input) { + __privateGet(this, _jwt).exp = input; + return this; + } + setIssuedAt(input) { + __privateGet(this, _jwt).iat = input; + return this; + } + setProtectedHeader(protectedHeader) { + __privateSet(this, _protectedHeader2, protectedHeader); + return this; + } + async sign(key, options) { + var _a; + const sig = new CompactSign(__privateGet(this, _jwt).data()); + sig.setProtectedHeader(__privateGet(this, _protectedHeader2)); + if (Array.isArray((_a = __privateGet(this, _protectedHeader2)) == null ? void 0 : _a.crit) && __privateGet(this, _protectedHeader2).crit.includes("b64") && __privateGet(this, _protectedHeader2).b64 === false) { + throw new JWTInvalid("JWTs MUST NOT use unencoded payload"); + } + return sig.sign(key, options); + } +}; +_protectedHeader2 = new WeakMap(); +_jwt = new WeakMap(); + +// main.ts +var http = __toESM(require("http")); +var mime = __toESM(require_mime_types()); +var DEFAULT_SETTINGS = { + onlyOfficeServerPort: 8080, + jwtSecret: "your-secret-key-please-change", + localServerAddress: "host.docker.internal", + htmlServerPort: 0, + // 0 = dynamic starting at 8081 + callbackServerPort: 0, + // 0 = dynamic starting at 8082 + useRequestToken: true, + useSystemSaveAs: false, + hideDownloadAs: true, + promptNameOnCreate: true, + restrictToLocalhost: false +}; +var VIEW_TYPE_ONLYOFFICE = "onlyoffice-docx"; +var OnlyOfficeDocumentView = class _OnlyOfficeDocumentView extends import_obsidian.FileView { + constructor(leaf, plugin) { + super(leaf); + // The `file` property is now inherited from ItemView and managed by Obsidian's core. + // We no longer need to declare it here. + this.webview = null; + this.iframe = null; + // Make viewId public and stable + this.boundMessageHandler = null; + this.fallbackEditor = null; + this.isDirty = false; + // Add a dirty flag + this.pendingSaveAsName = null; + // store name chosen before download phase + this.saveButton = null; + this.saveAsButton = null; + this.dirtyCheckInterval = null; + // For polling dirty state + this.systemSaveAsRetryPending = false; + // guard for new-doc system Save As + this.performingSystemSaveAsFallback = false; + // prevent concurrent fallback injections + this.currentExt = "docx"; + // track active document extension + // Add these properties for event listeners + this._didFinishLoadListener = null; + this._didFailLoadListener = null; + this.plugin = plugin; + this.viewId = Math.random().toString(36).substring(2, 15); + } + // Return the type for this view + getViewType() { + return VIEW_TYPE_ONLYOFFICE; + } + // Return the display text for this view (the file name) + getDisplayText() { + var _a; + return ((_a = this.file) == null ? void 0 : _a.name) || "Document"; + } + // Get the icon for this view + getIcon() { + return "file-text"; + } + // The custom setState method is removed. The default implementation is sufficient when using `openFile`. + // This method is called by Obsidian when a file is loaded into the view. + async onLoadFile(file) { + var _a, _b; + try { + const state = (_a = this.leaf) == null ? void 0 : _a.getViewState(); + const isTemplate = false; + const container = this.contentEl; + if (!container) { + console.error("OnlyOffice: Could not find view content container. Aborting onLoadFile."); + return; + } + if (!file && !isTemplate) { + container.empty(); + const errorDiv = container.createEl("div", { cls: "onlyoffice-error" }); + errorDiv.createEl("h2", { text: "File Error" }); + errorDiv.createEl("p", { text: "Could not open document: file not found or view was opened without a file." }); + return; + } + if (file) { + this.file = file; + } + if (this.leaf && file) { + const state2 = this.leaf.getViewState(); + if (!state2.state || state2.state.file !== file.path) { + await this.leaf.setViewState({ + ...state2, + state: { ...state2.state || {}, file: file.path } + }); + return; + } + } + if (this.webview) { + if (this._didFinishLoadListener) { + this.webview.removeEventListener("did-finish-load", this._didFinishLoadListener); + this._didFinishLoadListener = null; + } + if (this._didFailLoadListener) { + this.webview.removeEventListener("did-fail-load", this._didFailLoadListener); + this._didFailLoadListener = null; + } + this.webview.remove(); + this.webview = null; + } + this.isDirty = false; + if (this.dirtyCheckInterval) { + clearInterval(this.dirtyCheckInterval); + this.dirtyCheckInterval = null; + } + if (this.plugin.internalServerReady) { + try { + await this.plugin.internalServerReady; + } catch (e) { + } + } + const localHostBaseUrl = `http://127.0.0.1:${this.plugin.localServerPort}`; + const dockerHostBaseUrl = `http://${this.plugin.settings.localServerAddress || "host.docker.internal"}:${this.plugin.localServerPort}`; + const _editorUrl = `${localHostBaseUrl}/embedded-editor.html`; + let htmlOk = false; + let waited = 0; + const maxWait = 5e3; + const checkInterval = 250; + while (waited < maxWait && !htmlOk) { + try { + await (0, import_obsidian.requestUrl)({ + url: _editorUrl, + method: "HEAD", + headers: { "Cache-Control": "no-cache" } + }); + htmlOk = true; + } catch (e) { + await new Promise((res) => setTimeout(res, checkInterval)); + waited += checkInterval; + } + } + if (!htmlOk) { + const error = "OnlyOffice: editor.html is not available from the internal server."; + console.error(error); + new import_obsidian.Notice(error); + this.showEditorError(container, "Could not connect to the local server. Please check that the server is running."); + return; + } + let effectiveFile = file; + if (file) { + const relPathWait = file.path.replace(/\\/g, "/").split("/").map(encodeURIComponent).join("/"); + const docxUrl = `${localHostBaseUrl}/${relPathWait}`; + let docxOk = false; + waited = 0; + while (waited < maxWait && !docxOk) { + try { + await (0, import_obsidian.requestUrl)({ + url: docxUrl, + method: "HEAD", + headers: { "Cache-Control": "no-cache" } + }); + docxOk = true; + } catch (e) { + await new Promise((res) => setTimeout(res, checkInterval)); + waited += checkInterval; + } + } + if (!docxOk) { + const error = `OnlyOffice: The selected DOCX file '${file.name}' is not available from the internal server.`; + console.error(error); + new import_obsidian.Notice(error); + this.showEditorError(container, `File '${file.name}' could not be accessed by the server. Please try again or check the file permissions.`); + return; + } + } + container.empty(); + const randomId = Math.random().toString(36).slice(2, 10); + const mtimeOrNow = ((_b = effectiveFile.stat) == null ? void 0 : _b.mtime) || Date.now(); + const baseForKey = effectiveFile.path + "|" + mtimeOrNow + "|" + randomId; + let hash = 0; + for (let i = 0; i < baseForKey.length; i++) { + hash = hash * 31 + baseForKey.charCodeAt(i) >>> 0; + } + const uniqueKey = "oo_" + hash.toString(36) + "_" + randomId; + if (!this.plugin.keyFileMap) + this.plugin.keyFileMap = {}; + this.plugin.keyFileMap[uniqueKey] = effectiveFile.path; + const relPath2Eff = effectiveFile.path.replace(/\\/g, "/").split("/").map(encodeURIComponent).join("/"); + const hostFileUrlEff = `${localHostBaseUrl}/${relPath2Eff}`; + const dockerFileUrlEff = `${dockerHostBaseUrl}/${relPath2Eff}`; + const callbackUrlEff = `http://${this.plugin.settings.localServerAddress || "host.docker.internal"}:${this.plugin.callbackServerPort}/callback`; + const isStartDocx = false; + const ext = ((effectiveFile == null ? void 0 : effectiveFile.extension) || "").toLowerCase(); + this.currentExt = ext || "docx"; + const supported = ["docx", "xlsx", "pptx", "pdf"]; + if (!supported.includes(ext)) { + this.showEditorError(container, `Unsupported file type .${ext}. Supported: ${supported.join(", ")}`); + return; + } + await this.loadDirectOnlyOfficeInterface( + container, + hostFileUrlEff, + dockerFileUrlEff, + dockerHostBaseUrl, + callbackUrlEff, + effectiveFile, + isStartDocx, + uniqueKey + ); + } catch (error) { + console.error("OnlyOffice: Error in onLoadFile:", error); + new import_obsidian.Notice(`OnlyOffice: Failed to load document - ${error.message || "Unknown error"}`); + try { + const container = this.contentEl; + if (container) { + this.showEditorError(container, `An error occurred while loading the document: ${error.message || "Unknown error"}`); + } + } catch (e) { + console.error("OnlyOffice: Failed to show error in container:", e); + } + } + } + // This method is called by Obsidian when the file is about to be closed. + async onUnloadFile(file) { + var _a; + if (this.isDirty) { + console.log("OnlyOffice: onUnloadFile triggered for dirty file, attempting to save."); + try { + (_a = this.webview) == null ? void 0 : _a.executeJavaScript(`window.docEditor?.serviceCommand("c:forcesave", "");`); + new import_obsidian.Notice("Saving document on close..."); + } catch (error) { + console.error("OnlyOffice: Failed to trigger save on close.", error); + } + } else { + console.log("OnlyOffice: onUnloadFile triggered for clean file, no save needed."); + } + if (this.boundMessageHandler) { + window.removeEventListener("message", this.boundMessageHandler); + this.boundMessageHandler = null; + } + if (this.dirtyCheckInterval) { + clearInterval(this.dirtyCheckInterval); + this.dirtyCheckInterval = null; + } + if (this.webview) { + this.webview.remove(); + this.webview = null; + } + this.contentEl.empty(); + } + // Load the OnlyOffice editor directly in the interface + async loadDirectOnlyOfficeInterface(container, hostFileUrl, dockerFileUrl, dockerBaseUrl, callbackUrl, file, isStartDocx, uniqueKey) { + console.log("Loading OnlyOffice editor interface"); + console.log("OnlyOffice debug: hostFileUrl", hostFileUrl, "dockerFileUrl", dockerFileUrl, "callbackUrl", callbackUrl); + container.empty(); + container.style.cssText = "height: 100%; width: 100%; display: flex; flex-direction: column;"; + const webviewContainer = container.createEl("div", { + attr: { style: "flex-grow: 1; position: relative; width: 100%; height: 100%;" } + }); + const loadingDiv = container.createEl("div", { + attr: { style: "position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); z-index: 10; background: rgba(255,255,255,0.9); padding: 24px 40px; border-radius: 8px; box-shadow: 0 2px 8px rgba(0,0,0,0.1); font-size: 1.2em; color: #333;" } + }); + loadingDiv.textContent = "Loading OnlyOffice editor..."; + this._didFinishLoadListener = null; + this._didFailLoadListener = null; + if (this.boundMessageHandler) { + window.removeEventListener("message", this.boundMessageHandler); + this.boundMessageHandler = null; + } + const webview = document.createElement("webview"); + this.webview = webview; + webview.setAttribute("webpreferences", "contextIsolation=false, nodeIntegration=true"); + webview.setAttribute("partition", "persist:onlyoffice"); + webview.setAttribute("allowpopups", "true"); + webview.style.cssText = "width: 100%; height: 100%; border: none;"; + webview.src = `http://127.0.0.1:${this.plugin.localServerPort}/embedded-editor.html`; + webviewContainer.appendChild(webview); + const documentUrl = isStartDocx ? `${dockerBaseUrl}/assets/Start.docx` : dockerFileUrl; + const ext = ((file == null ? void 0 : file.extension) || "docx").toLowerCase(); + const documentType = ext === "xlsx" ? "cell" : ext === "pptx" ? "slide" : ext === "pdf" ? "word" : "word"; + const baseConfig = { + documentType, + document: { + fileType: ext || "docx", + key: uniqueKey, + title: file ? file.name : documentUrl.split("/").pop() || "Document.docx", + url: documentUrl, + permissions: { + edit: true, + download: true, + print: true, + chat: false, + comment: true, + copy: true, + fillForms: true, + modifyContent: true, + modifyFilter: true, + review: true, + rename: true + } + }, + editorConfig: { + mode: "edit", + lang: "en", + user: { + id: "obsidian-static-user", + name: "Obsidian User" + }, + customization: { + autosave: false, + toolbarNoTabs: false, + plugins: true, + comments: false, + compactChat: false, + forcesave: true + }, + callbackUrl, + // Keep these fallbacks as part of signed payload to avoid post-sign changes + createUrl: `http://127.0.0.1:${this.plugin.localServerPort}/api/createNew?fileType=${documentType}`, + saveAsUrl: `http://127.0.0.1:${this.plugin.localServerPort}/api/saveAs`, + coEditing: { + mode: "strict", + change: false, + fastCoAuthoring: false + } + }, + width: "100%", + height: "100%" + }; + let signedToken = null; + if (this.plugin.settings.jwtSecret && this.plugin.settings.jwtSecret.trim() !== "") { + try { + const secret = new TextEncoder().encode(this.plugin.settings.jwtSecret); + let requestToken = null; + if (this.plugin.settings.useRequestToken !== false) { + requestToken = await new SignJWT({ key: uniqueKey, ts: Math.floor(Date.now() / 1e3) }).setProtectedHeader({ alg: "HS256", typ: "JWT" }).sign(secret); + const append = (u) => u + (u.includes("?") ? "&" : "?") + "token=" + encodeURIComponent(requestToken); + baseConfig.document.url = append(baseConfig.document.url); + baseConfig.editorConfig.callbackUrl = append(baseConfig.editorConfig.callbackUrl); + baseConfig.editorConfig.createUrl = append(baseConfig.editorConfig.createUrl); + baseConfig.editorConfig.saveAsUrl = append(baseConfig.editorConfig.saveAsUrl); + console.log("OnlyOffice: appended request token to URLs"); + } else { + console.log("OnlyOffice: request token appending disabled"); + } + const payload = { + document: baseConfig.document, + editorConfig: { ...baseConfig.editorConfig }, + iat: Math.floor(Date.now() / 1e3) + }; + signedToken = await new SignJWT(payload).setProtectedHeader({ alg: "HS256", typ: "JWT" }).sign(secret); + } catch (err) { + this.showEditorError(container, `Failed to initialize editor: ${err.message}`); + return; + } + } + webview.addEventListener("did-finish-load", () => { + console.log("OnlyOffice webview did-finish-load, injecting init script"); + const apiScriptUrl = `http://${this.plugin.settings.localServerAddress || "host.docker.internal"}:${this.plugin.settings.onlyOfficeServerPort}/web-apps/apps/api/documents/api.js`; + console.log("OnlyOffice DEBUG: apiScriptUrl:", apiScriptUrl); + const initScript = ` + window.localServerPort = ${this.plugin.localServerPort}; + const __BASE64 = '${Buffer.from(JSON.stringify(baseConfig)).toString("base64")}'; + const __SIGNED_TOKEN = ${signedToken ? `'${signedToken}'` : "null"}; + + // Load the API script dynamically + const script = document.createElement('script'); + script.src = '${apiScriptUrl}'; + script.onload = function() { + console.log('API script loaded'); + try { + const { ipcRenderer } = (typeof require === 'function' ? require('electron') : { ipcRenderer: null }); + const __sendToHost = (channel, data) => { + try { + if (ipcRenderer && typeof ipcRenderer.sendToHost === 'function') { + ipcRenderer.sendToHost(channel, data); + return; + } + } catch (e) {} + try { + console.log('OO-EVT:' + JSON.stringify({ channel, data })); + } catch (e) {} + }; + // Parse base config and set token without mutating signed fields + const config = JSON.parse(atob(__BASE64)); + if (__SIGNED_TOKEN) config.token = __SIGNED_TOKEN; + + // Add event handlers as functions (per OnlyOffice API: use root-level config.events) + config.events = { + onDocumentStateChange: function(event) { + window.isOnlyOfficeDirty = event.data; + __sendToHost('onlyoffice-dirty-state', { isDirty: !!event.data }); + }, + onDocumentContentChanged: function(event) { + window.isOnlyOfficeDirty = true; + __sendToHost('onlyoffice-dirty-state', { isDirty: true }); + }, + onDownloadAs: function(event) { + // Fallback: when downloadAs is used, forward to host as Save As + try { __sendToHost('onlyoffice-save-as', event && event.data ? event.data : {}); } catch(_) {} + }, + onError: function(event) { + try { + console.log('OnlyOffice onError raw event', JSON.stringify(event)); + __sendToHost('onlyoffice-error', event && event.data ? event.data : {}); + // If the error suggests unsaved changes or callback failure, attempt a silent forcesave + try { + if (window.docEditor && event && event.data && (event.data.errorCode === 6 || event.data.errorCode === 7)) { + console.log('OnlyOffice: attempting silent forcesave after errorCode', event.data.errorCode); + window.docEditor.serviceCommand && window.docEditor.serviceCommand('c:forcesave', ''); + } + } catch(e) { console.warn('OnlyOffice: silent forcesave retry failed', e); } + } catch(_) {} + }, + onAppReady: function(event) { + console.log("OnlyOffice App is ready"); + try { window.docEditor.serviceCommand('TrackRevisions:Change', false); } catch(e) {} + try { window.docEditor.serviceCommand("Mode:Edit", true); } catch(e) {} + try { __sendToHost('onlyoffice-app-ready', {}); } catch(e) {} + }, + onRequestCreateNew: function(event) { + console.log('OnlyOffice onRequestCreateNew'); + __sendToHost('onlyoffice-create-new', { fileType: (event && event.data && event.data['fileType']) || 'docx' }); + }, + onRequestSaveAs: function(event) { + console.log('OnlyOffice onRequestSaveAs', event); + __sendToHost('onlyoffice-save-as', event && event.data ? event.data : {}); + } + }; + + // Also mirror events under editorConfig.events for compatibility with older builds + config.editorConfig.events = config.events; + + console.log('OnlyOffice: events wired', Object.keys(config.events||{})); + + // Initialize the editor with the constructed config + window.docEditor = new window.DocsAPI.DocEditor("placeholder", config); + console.log("OnlyOffice editor initialized with dynamic config"); + // Force-hide any 'Download' / 'Download as' / 'Download copy' menu entries (no user setting) + (function hideDownloadMenu(){ + // Extend labels and include ones with spacing/case variants + const LABELS = new Set([ + 'download','download as','download copy','download a copy','save copy','save copy as','download as..','download as...' + ]); + const matchText = (t) => { + if (!t) return false; const s = t.trim().toLowerCase().replace(/s+/g,' '); + if (LABELS.has(s)) return true; + // Partial heuristics + return /^download as/.test(s) || /^download copy/.test(s); + }; + const hide = () => { + try { + const els = Array.from(document.querySelectorAll('span,div,button,a,li')); + els.forEach(el => { + if (el.getAttribute('data-oo-hidden')==='download') return; + const txt = (el.textContent||''); + if (matchText(txt)) { + const container = el.closest('li,div,button') || el; + container.style.display='none'; + container.setAttribute('data-oo-hidden','download'); + } + }); + } catch(e){ console.warn('OnlyOffice: hideDownloadMenu scan error', e); } + }; + // Monkey patch downloadAs to no-op (prevent keyboard / programmatic) + try { + const guardProp = '__ooDownloadDisabled'; + const patch = () => { + try { + if (window.docEditor && !window.docEditor[guardProp] && window.docEditor.downloadAs) { + const orig = window.docEditor.downloadAs.bind(window.docEditor); + window.docEditor.downloadAs = function(){ console.log('OnlyOffice: downloadAs blocked'); return null; }; + window.docEditor[guardProp] = true; + } + } catch(e){} + }; + patch(); + setInterval(patch, 1500); // ensure after internal reloads + } catch(e){ console.warn('OnlyOffice: failed to patch downloadAs', e); } + hide(); + const obs = new MutationObserver(hide); + try { obs.observe(document.body,{childList:true,subtree:true}); } catch(_){} + // Timed passes; stop observer later + [400,800,1600,3000,5000,8000,12000].forEach(t=> setTimeout(hide, t)); + setTimeout(()=>{ try { obs.disconnect(); } catch(_){} }, 18000); + })(); + + // Bridge messages coming from /api/createNew and /api/saveAs HTML pages + window.addEventListener('message', function(ev) { + try { + if (!ev || !ev.data || !ev.data.type) return; + if (ev.data.type === 'onlyoffice-save-as') { + __sendToHost('onlyoffice-save-as', ev.data.data || {}); + } else if (ev.data.type === 'onlyoffice-create-new') { + __sendToHost('onlyoffice-create-new', ev.data); + } + } catch (_) {} + }); + + // (Removed legacy attachEvent attempts to reduce errors) + } catch (e) { + console.error("Error initializing editor with dynamic config:", e); + document.getElementById('placeholder').innerHTML = '
Failed to initialize editor: ' + e.message + '
'; + } + }; + document.head.appendChild(script); + `; + webview.executeJavaScript(initScript).then(() => { + loadingDiv.remove(); + }).catch((err) => { + this.showEditorError(container, `Failed to initialize editor: ${err.message}`); + loadingDiv.remove(); + }); + }); + webview.addEventListener("did-fail-load", (error) => { + this.showEditorError(container, `Failed to load editor view: ${error.errorDescription}`); + }); + webview.addEventListener("console-message", (event) => { + const msg = event.message || ""; + if (typeof msg === "string" && msg.startsWith("OO-EVT:")) { + try { + const payload = JSON.parse(msg.substring("OO-EVT:".length)); + const channel = payload.channel; + const data = payload.data; + if (channel === "onlyoffice-save-as") { + if (data && data.url) { + this.systemSaveAsRetryPending = false; + this.performingSystemSaveAsFallback = false; + this.saveAsDocument(false, data); + } else { + if (this.plugin.settings.useSystemSaveAs) { + if (!this.performingSystemSaveAsFallback) { + this.performingSystemSaveAsFallback = true; + this.fallbackSystemSaveAsFromVault(); + } + } else { + this.saveAsDocument(true); + } + } + } else if (channel === "onlyoffice-create-new") { + this.plugin.openNewDocument(); + } else if (channel === "onlyoffice-dirty-state") { + this.isDirty = !!(data && data.isDirty); + } + } catch (e) { + console.log("[OnlyOffice webview]", event.message); + } + } else { + console.log("[OnlyOffice webview]", event.message); + } + }); + webview.addEventListener("ipc-message", (event) => { + try { + if (!event) + return; + const channel = event.channel; + const arg = event.args && event.args[0] || {}; + if (channel === "onlyoffice-save-as") { + new import_obsidian.Notice("OnlyOffice: Save As event received"); + this.saveAsDocument(this.plugin.settings.useSystemSaveAs ? false : true, arg); + } else if (channel === "onlyoffice-create-new") { + new import_obsidian.Notice("OnlyOffice: Create New event received"); + const leaf = this.leaf; + if (leaf) { + leaf.setViewState({ type: VIEW_TYPE_ONLYOFFICE, state: { onlyOfficeTemplate: true } }); + } else { + this.plugin.openNewDocument(); + } + } else if (channel === "onlyoffice-app-ready") { + new import_obsidian.Notice("OnlyOffice: App Ready"); + } else if (channel === "onlyoffice-dirty-state") { + this.isDirty = !!arg.isDirty; + } else if (channel === "onlyoffice-error") { + const msg = arg && (arg.message || arg.code) ? `${arg.code || ""} ${arg.message || ""}`.trim() : "Unknown error"; + console.warn("OnlyOffice error:", arg); + new import_obsidian.Notice("OnlyOffice error: " + msg); + } + } catch (e) { + console.error("OnlyOffice: ipc-message handler error", e); + } + }); + } + onSaveComplete() { + this.isDirty = false; + if (this.saveButton) + this.saveButton.disabled = true; + if (this.saveAsButton) + this.saveAsButton.disabled = true; + } + // Load OnlyOffice API script + async loadOnlyOfficeAPI() { + return new Promise((resolve2, reject) => { + if (window.DocsAPI) { + resolve2(); + return; + } + const apiScriptUrl = `http://localhost:8080/web-apps/apps/api/documents/api.js`; + console.log("Loading OnlyOffice API script from:", apiScriptUrl); + const script = document.createElement("script"); + script.src = apiScriptUrl; + script.onload = () => resolve2(); + script.onerror = (e) => { + console.error("Failed to load OnlyOffice API:", e); + reject(new Error("Failed to load OnlyOffice API")); + }; + document.head.appendChild(script); + }); + } + // Show error message in the editor container + showEditorError(container, message2) { + container.empty(); + const errorDiv = container.createEl("div", { cls: "onlyoffice-error" }); + errorDiv.createEl("h2", { text: "OnlyOffice Editor Error" }); + errorDiv.createEl("p", { text: message2 }); + const fallbackButton = errorDiv.createEl("button", { + text: "Use Fallback Editor", + attr: { style: "margin-top: 10px; padding: 8px 16px; background: #007ACC; color: white; border: none; border-radius: 4px; cursor: pointer;" } + }); + fallbackButton.addEventListener("click", () => { + this.loadFallbackEditor(container); + }); + } + // Load a simple fallback editor + loadFallbackEditor(container) { + container.empty(); + const editorDiv = container.createEl("div", { + attr: { + style: "width: 100%; height: 100%; display: flex; flex-direction: column; background: white;" + } + }); + const toolbar = editorDiv.createEl("div", { + attr: { + style: "padding: 8px; border-bottom: 1px solid #ccc; background: #f5f5f5; display: flex; gap: 8px; flex-shrink: 0;" + } + }); + this.addToolbarButton(toolbar, "Bold", () => document.execCommand("bold")); + this.addToolbarButton(toolbar, "Italic", () => document.execCommand("italic")); + this.addToolbarButton(toolbar, "Underline", () => document.execCommand("underline")); + const saveButton = toolbar.createEl("button", { + text: "Save to Obsidian", + attr: { + style: "margin-left: auto; padding: 4px 12px; background: #007ACC; color: white; border: none; border-radius: 4px; cursor: pointer;" + } + }); + saveButton.addEventListener("click", () => this.saveFallbackToObsidian()); + this.fallbackEditor = editorDiv.createEl("div", { + attr: { + contenteditable: "true", + style: "flex: 1; padding: 20px; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.5; overflow-y: auto; background: white;" + } + }); + this.fallbackEditor.innerHTML = "

Start typing your document here...

"; + this.fallbackEditor.focus(); + } + // Add toolbar button helper + addToolbarButton(toolbar, text, action) { + const button = toolbar.createEl("button", { + text, + attr: { + style: "padding: 4px 8px; border: 1px solid #ccc; background: white; cursor: pointer; border-radius: 3px;" + } + }); + button.addEventListener("click", action); + } + // Save fallback editor content to Obsidian + async saveFallbackToObsidian() { + if (!this.fallbackEditor) { + new import_obsidian.Notice("No content to save"); + return; + } + try { + const htmlContent = this.fallbackEditor.innerHTML; + const markdownContent = _OnlyOfficeDocumentView.htmlToMarkdown(htmlContent); + const timestamp = (/* @__PURE__ */ new Date()).toISOString().replace(/[:.]/g, "-"); + const fileName = `OnlyOffice Document ${timestamp}.md`; + await this.app.vault.create(fileName, markdownContent); + new import_obsidian.Notice(`Document saved as: ${fileName}`); + const file = this.app.vault.getAbstractFileByPath(fileName); + if (file instanceof import_obsidian.TFile) { + await this.app.workspace.openLinkText(fileName, ""); + } + } catch (error) { + console.error("Error saving to Obsidian:", error); + new import_obsidian.Notice("Error saving document: " + error.message); + } + } + // Static HTML to Markdown converter for fallback editor + static htmlToMarkdown(html) { + let markdown = html.replace(/]*>(.*?)<\/strong>/gi, "**$1**").replace(/]*>(.*?)<\/b>/gi, "**$1**").replace(/]*>(.*?)<\/em>/gi, "*$1*").replace(/]*>(.*?)<\/i>/gi, "*$1*").replace(/]*>(.*?)<\/u>/gi, "$1").replace(/]*>(.*?)<\/p>/gi, "$1\n\n").replace(/]*>/gi, "\n").replace(/]*>(.*?)<\/div>/gi, "$1\n").replace(/<[^>]*>/g, "").replace(/ /g, " ").replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/\n\s*\n\s*\n/g, "\n\n").trim(); + return markdown || "Empty document"; + } + // Add a manual save method as fallback + async manualSaveFromEditor() { + if (!this.file) { + console.log("Cannot save: No file is open."); + return; + } + try { + const arrayBuffer = await this.getEditorContent(); + if (arrayBuffer) { + await this.app.vault.modifyBinary(this.file, arrayBuffer); + new import_obsidian.Notice("Document saved successfully"); + } else { + if (this.leaf.view) { + new import_obsidian.Notice("Could not get document from editor. Save failed."); + } + } + } catch (error) { + console.error("Error in manual save:", error); + if (this.leaf.view) { + new import_obsidian.Notice("Save failed. " + (error instanceof Error ? error.message : "Please check the console for details.")); + } + } + } + // Add the missing saveAsDocument method with improved functionality + async saveAsDocument(forceSaveAs = false, saveAsData) { + var _a, _b, _c; + if (this.fallbackEditor) { + await this.saveFallbackToObsidian(); + return; + } + try { + const activeExt = this.currentExt || ((_b = (_a = this.file) == null ? void 0 : _a.extension) == null ? void 0 : _b.toLowerCase()) || "docx"; + if (saveAsData && saveAsData.url) { + if (this.plugin.settings.useSystemSaveAs) { + let fileName2 = this.pendingSaveAsName || saveAsData.title || `Document.${activeExt}`; + this.pendingSaveAsName = null; + if (!fileName2.toLowerCase().endsWith("." + activeExt)) + fileName2 += "." + activeExt; + const js = `(() => { try { + const url = ${JSON.stringify(saveAsData.url)}; + const name = ${JSON.stringify(fileName2)}; + // Create hidden anchor to force download + const a = document.createElement('a'); + a.href = url; + a.download = name; + a.style.display='none'; + document.body.appendChild(a); + a.click(); + setTimeout(()=>{ try { a.remove(); } catch(_){} }, 4000); +} catch(e){ console.error('System Save As injection failed', e); } })();`; + (_c = this.webview) == null ? void 0 : _c.executeJavaScript(js).catch((e) => console.error("executeJavaScript download inject failed", e)); + new import_obsidian.Notice("Opening system Save dialog..."); + return; + } + new import_obsidian.Notice("Downloading document..."); + const response = await (0, import_obsidian.requestUrl)({ url: saveAsData.url, method: "GET" }); + if (response.status !== 200 || !response.arrayBuffer) + throw new Error(`Failed to download file: ${response.status}`); + let fileName = this.pendingSaveAsName || saveAsData.title || ""; + this.pendingSaveAsName = null; + if (!fileName) + fileName = await this.promptForFileName() || ""; + if (!fileName) { + new import_obsidian.Notice("Save As cancelled"); + return; + } + if (!fileName.toLowerCase().endsWith("." + activeExt)) + fileName += "." + activeExt; + let attempt = 0; + const originalBase = fileName.replace(new RegExp(`.${activeExt}$`, "i"), ""); + while (this.app.vault.getAbstractFileByPath(fileName)) { + attempt++; + const alt = `${originalBase} (${attempt}).${activeExt}`; + if (attempt === 1) { + const retry = await this.promptForFileName(); + if (retry) { + fileName = retry.toLowerCase().endsWith("." + activeExt) ? retry : retry + "." + activeExt; + continue; + } + } + fileName = alt; + } + const newFile = await this.app.vault.createBinary(fileName, response.arrayBuffer); + new import_obsidian.Notice(`Document saved as: ${fileName}`); + await this.plugin.openOnlyOfficeFile(newFile); + return; + } + if (this.webview) { + if (!this.plugin.settings.useSystemSaveAs) { + if (forceSaveAs) { + const chosen = await this.promptForFileName(); + if (!chosen) { + new import_obsidian.Notice("Save As cancelled"); + return; + } + this.pendingSaveAsName = chosen; + } + new import_obsidian.Notice("Requesting document data..."); + } else { + new import_obsidian.Notice("Preparing system download..."); + } + const format = activeExt === "pdf" ? "docx" : activeExt; + this.webview.executeJavaScript(`try { window.docEditor && window.docEditor.downloadAs && window.docEditor.downloadAs('${format}'); } catch(e){ console.error('downloadAs failed', e); }`); + } else { + new import_obsidian.Notice("Save As not available (editor not ready)"); + } + } catch (error) { + console.error("Error during 'Save As':", error); + new import_obsidian.Notice(`Save As failed: ${error.message}`); + } + } + // Fallback path for system Save As when OnlyOffice doesn't return a URL (new unsaved doc) + async fallbackSystemSaveAsFromVault() { + var _a; + try { + if (!this.file) { + new import_obsidian.Notice("No file to save"); + this.performingSystemSaveAsFallback = false; + return; + } + const bin = await this.app.vault.readBinary(this.file); + const base = this.file.basename || "Document"; + const ext = this.currentExt || this.file.extension || "docx"; + const name = base.toLowerCase().endsWith("." + ext) ? base : base + "." + ext; + const outName = name.endsWith("." + ext) ? name : name + "." + ext; + const b64 = Buffer.from(bin).toString("base64"); + const js = `(() => { try { + const b64='${b64}'; + const byteChars = atob(b64); + const len = byteChars.length; + const bytes = new Uint8Array(len); + for (let i=0;i{ try { URL.revokeObjectURL(a.href); a.remove(); } catch(_){} },4000); + } catch(e){ console.error('fallbackSystemSaveAsFromVault failed', e); } })();`; + (_a = this.webview) == null ? void 0 : _a.executeJavaScript(js).catch((e) => console.error("fallback executeJavaScript failed", e)); + new import_obsidian.Notice("Opening system Save dialog (fallback)"); + } catch (e) { + console.error("OnlyOffice: fallbackSystemSaveAsFromVault error", e); + new import_obsidian.Notice("System Save As fallback failed"); + } finally { + this.performingSystemSaveAsFallback = false; + } + } + // New helper method to get content from the editor + getEditorContent(forceContentRetrieval = false) { + return Promise.resolve(null); + } + // Helper to prompt for a new file name + async promptForFileName() { + return new Promise((resolve2) => { + new SaveAsModal(this.app, (result) => { + resolve2(result); + }).open(); + }); + } + // Clean up when view is closed + async onClose() { + if (this.boundMessageHandler) { + window.removeEventListener("message", this.boundMessageHandler); + this.boundMessageHandler = null; + } + if (this.dirtyCheckInterval) { + clearInterval(this.dirtyCheckInterval); + this.dirtyCheckInterval = null; + } + } +}; +var SaveAsModal = class extends import_obsidian.Modal { + constructor(app, onSubmit) { + super(app); + this.submitted = false; + this.onSubmit = onSubmit; + } + onOpen() { + const { contentEl } = this; + contentEl.createEl("h2", { text: "Save As" }); + contentEl.createEl("p", { text: "Enter the new file name:" }); + this.input = contentEl.createEl("input", { type: "text", placeholder: "NewDocument.docx" }); + const saveButton = contentEl.createEl("button", { text: "Save" }); + saveButton.addEventListener("click", () => { + const value = this.input.value.trim(); + if (value) { + this.submitted = true; + this.onSubmit(value); + this.close(); + } + }); + const cancelButton = contentEl.createEl("button", { text: "Cancel" }); + cancelButton.style.marginLeft = "10px"; + cancelButton.addEventListener("click", () => { + this.close(); + }); + } + onClose() { + if (!this.submitted) { + this.onSubmit(null); + } + this.contentEl.empty(); + } +}; +var OnlyOfficePlugin = class extends import_obsidian.Plugin { + constructor() { + super(...arguments); + this.httpServer = null; + this.callbackServer = null; + this.localServerPort = 0; + this.callbackServerPort = 0; + this.internalServerReady = null; + this._resolveInternalServerReady = null; + this._rejectInternalServerReady = null; + this.keyFileMap = {}; + this.saveAsPromise = null; + } + async onload() { + await this.loadSettings(); + await this.startInternalServer(); + await this.startCallbackServer(); + this.addRibbonIcon("file-plus", "New OnlyOffice Document", () => { + this.openNewDocument(); + }); + this.registerView( + VIEW_TYPE_ONLYOFFICE, + (leaf) => new OnlyOfficeDocumentView(leaf, this) + ); + const officeExts = ["docx", "xlsx", "pptx", "pdf"]; + const failed = []; + for (const ext of officeExts) { + try { + this.registerExtensions([ext], VIEW_TYPE_ONLYOFFICE); + console.log(`OnlyOffice: registered extension .${ext}`); + } catch (e) { + failed.push(ext); + console.warn(`OnlyOffice: failed to register .${ext}:`, (e == null ? void 0 : e.message) || e); + } + } + if (failed.length) { + console.log("OnlyOffice: installing context menu fallback for", failed.join(",")); + this.registerEvent( + this.app.workspace.on("file-menu", (menu, file) => { + if (file instanceof import_obsidian.TFile && officeExts.includes(file.extension)) { + menu.addItem((item) => { + item.setTitle("Open with OnlyOffice").setIcon("file-text").onClick(() => { + this.openOnlyOfficeFile(file); + }); + }); + } + }) + ); + } + this.addCommands(); + this.addSettingTab(new OnlyOfficeSettingTab(this.app, this)); + } + // Add commands to the command palette + addCommands() { + this.addCommand({ + id: "open-docx-in-onlyoffice", + name: "Open DOCX in OnlyOffice", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (file && file.extension === "docx") { + if (!checking) { + this.openDocxFile(file); + } + return true; + } + return false; + } + }); + this.addCommand({ + id: "open-xlsx-in-onlyoffice", + name: "Open XLSX in OnlyOffice", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (file && file.extension === "xlsx") { + if (!checking) { + this.openOnlyOfficeFile(file); + } + return true; + } + return false; + } + }); + this.addCommand({ + id: "open-pptx-in-onlyoffice", + name: "Open PPTX in OnlyOffice", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (file && file.extension === "pptx") { + if (!checking) { + this.openOnlyOfficeFile(file); + } + return true; + } + return false; + } + }); + this.addCommand({ + id: "open-pdf-in-onlyoffice", + name: "Open PDF in OnlyOffice (viewer)", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (file && file.extension === "pdf") { + if (!checking) { + this.openOnlyOfficeFile(file); + } + return true; + } + return false; + } + }); + this.addCommand({ + id: "onlyoffice-list-office-files", + name: "OnlyOffice: List Office Files (debug)", + callback: async () => { + try { + const vaultFiles = this.app.vault.getFiles().filter((f) => ["docx", "xlsx", "pptx", "pdf"].includes(f.extension)); + console.log("OnlyOffice DEBUG: vault reports", vaultFiles.length, "office files"); + vaultFiles.forEach((f) => console.log(" VAULT:", f.path)); + if (!(this.app.vault.adapter instanceof import_obsidian.FileSystemAdapter)) { + console.log("OnlyOffice DEBUG: not FS adapter, cannot disk-scan"); + return; + } + const root = this.app.vault.adapter.getBasePath(); + const found = []; + const exts = /* @__PURE__ */ new Set([".docx", ".xlsx", ".pptx", ".pdf"]); + const walk = (dir) => { + const entries = fs.readdirSync(dir, { withFileTypes: true }); + for (const e of entries) { + if (e.name.startsWith(".")) + continue; + const full = path.join(dir, e.name); + if (e.isDirectory()) { + walk(full); + } else { + const lower = e.name.toLowerCase(); + for (const x of exts) { + if (lower.endsWith(x)) { + found.push(full); + break; + } + } + } + } + }; + walk(root); + console.log("OnlyOffice DEBUG: disk scan found", found.length, "office files"); + const rel = (p) => p.replace(/\\/g, "/").substring(root.replace(/\\/g, "/").length + 1); + const vaultSet = new Set(vaultFiles.map((f) => f.path)); + const missingInVault = found.map(rel).filter((p) => !vaultSet.has(p)); + if (missingInVault.length === 0) + console.log("OnlyOffice DEBUG: no discrepancies"); + else { + console.warn("OnlyOffice DEBUG: files on disk NOT in vault index:", missingInVault); + } + new import_obsidian.Notice("OnlyOffice: debug listing complete (see console)"); + } catch (e) { + console.error("OnlyOffice DEBUG: listing failed", e); + new import_obsidian.Notice("OnlyOffice: listing failed (see console)"); + } + } + }); + this.addCommand({ + id: "open-xlsx-in-onlyoffice", + name: "Open XLSX in OnlyOffice", + checkCallback: (checking) => { + const file = this.app.workspace.getActiveFile(); + if (file && file.extension === "xlsx") { + if (!checking) { + this.openOnlyOfficeFile(file); + } + return true; + } + return false; + } + }); + this.addCommand({ + id: "create-new-onlyoffice-document", + name: "Create New OnlyOffice Document", + callback: () => { + this.openNewDocument(); + } + }); + } + // Open a new blank document in the OnlyOffice view + async openNewDocument() { + var _a; + try { + let requestedName = null; + let chosenType = "docx"; + if (((_a = this.settings) == null ? void 0 : _a.promptNameOnCreate) !== false) { + requestedName = await new Promise((resolve2) => { + const modal = new class extends import_obsidian.Modal { + constructor() { + super(...arguments); + this.submitted = false; + } + onOpen() { + const radius = "10px"; + const fieldHeight = "40px"; + const { contentEl } = this; + contentEl.empty(); + contentEl.style.padding = "26px 32px 22px"; + contentEl.style.minWidth = "600px"; + contentEl.style.maxWidth = "600px"; + contentEl.style.boxSizing = "border-box"; + contentEl.style.overflow = "hidden"; + contentEl.style.overflowX = "hidden"; + if (contentEl.parentElement) { + contentEl.parentElement.style.overflowX = "hidden"; + } + contentEl.createEl("h2", { text: "New OnlyOffice Document", attr: { style: "margin:0 0 16px 0; font-weight:600; font-size:22px; letter-spacing:.4px;" } }); + this.wrapper = contentEl.createEl("div", { attr: { style: "display:flex; flex-direction:column; gap:16px;" } }); + const formGap = 18; + const col1 = 320; + const col2 = 118; + const formWidth = col1 + col2 + formGap; + const row = this.wrapper.createEl("div", { attr: { style: `display:grid; grid-template-columns: ${col1}px ${col2}px; gap:${formGap}px; align-items:end; width:${formWidth}px;` } }); + const nameCol = row.createEl("div", { attr: { style: "display:flex; flex-direction:column; gap:6px; min-width:0;" } }); + nameCol.createEl("label", { text: "Filename", attr: { style: "font-size:11px; font-weight:600; letter-spacing:.5px; text-transform:uppercase; color:var(--text-muted);" } }); + this.input = nameCol.createEl("input", { type: "text", placeholder: "MyDocument", attr: { style: `padding:8px 12px; font-size:14px; line-height:20px; height:${fieldHeight}; border:1px solid var(--background-modifier-border); border-radius:${radius}; width:100%; max-width:${col1}px; box-sizing:border-box;` } }); + const typeCol = row.createEl("div", { attr: { style: "display:flex; flex-direction:column; gap:6px;" } }); + typeCol.createEl("label", { text: "Type", attr: { style: "font-size:11px; font-weight:600; letter-spacing:.5px; text-transform:uppercase; color:var(--text-muted);" } }); + this.select = typeCol.createEl("select", { attr: { style: `padding:8px 12px; font-size:14px; line-height:20px; height:${fieldHeight}; border:1px solid var(--background-modifier-border); border-radius:${radius}; background:var(--background-primary); box-sizing:border-box; width:${col2}px;` } }); + ["docx", "xlsx", "pptx"].forEach((t) => { + const o = document.createElement("option"); + o.value = t; + o.textContent = t.toUpperCase(); + this.select.appendChild(o); + }); + const btnRow = this.wrapper.createEl("div", { attr: { style: `display:flex; justify-content:flex-end; gap:10px; margin-top:6px; width:${formWidth}px;` } }); + const baseBtn = `padding:8px 20px; font-size:14px; font-weight:500; border:none; border-radius:${radius}; cursor:pointer; line-height:20px;`; + const cancelBtn = btnRow.createEl("button", { text: "Cancel", attr: { style: baseBtn + "background:var(--background-modifier-border); color:var(--text-normal);" } }); + this.okBtn = btnRow.createEl("button", { text: "Create", attr: { style: baseBtn + "background:var(--interactive-accent); color:var(--text-on-accent,#fff);" } }); + this.okBtn.addEventListener("click", () => { + const v = this.input.value.trim(); + if (v) { + chosenType = this.select.value; + this.submitted = true; + this.close(); + resolve2(v); + } + }); + cancelBtn.addEventListener("click", () => { + this.close(); + resolve2(null); + }); + this.input.addEventListener("keydown", (e) => { + if (e.key === "Enter") { + e.preventDefault(); + this.okBtn.click(); + } + }); + this.input.focus(); + } + onClose() { + if (!this.submitted) + resolve2(null); + this.contentEl.empty(); + } + }(this.app); + modal.open(); + }); + if (requestedName === null) { + new import_obsidian.Notice("Creation cancelled"); + return; + } + requestedName = requestedName.replace(/[\\/:*?"<>|]/g, "").trim(); + if (!requestedName) { + new import_obsidian.Notice("Invalid name"); + return; + } + const extRegex = new RegExp(`.${chosenType}$`, "i"); + if (!extRegex.test(requestedName)) + requestedName += `.${chosenType}`; + if (this.app.vault.getAbstractFileByPath(requestedName)) { + let base2 = requestedName.replace(new RegExp(`.${chosenType}$`, "i"), ""); + let i = 1; + let candidate = `${base2} (${i}).${chosenType}`; + while (this.app.vault.getAbstractFileByPath(candidate)) { + i++; + candidate = `${base2} (${i}).${chosenType}`; + } + requestedName = candidate; + } + } + let templateData; + const adapter = this.app.vault.adapter; + const base = adapter.getBasePath(); + const pluginDir = this.manifest.dir && path.isAbsolute(this.manifest.dir) ? this.manifest.dir : path.join(base, this.manifest.dir || ""); + const wantedExt = chosenType; + const candidateNames = wantedExt === "docx" ? ["Start.docx", "Start.dotx"] : wantedExt === "xlsx" ? ["Start.xlsx"] : ["Start.pptx"]; + const candidatePaths = []; + for (const nm of candidateNames) { + candidatePaths.push(path.join(pluginDir, "assets", nm)); + candidatePaths.push(path.join(base, nm)); + } + for (const p of candidatePaths) { + if (fs.existsSync(p)) { + const buf = await fs.promises.readFile(p); + const slice = buf.subarray(0); + const copy = new Uint8Array(slice.length); + copy.set(slice); + templateData = copy.buffer; + console.log("OnlyOffice: using template", p, "for new", wantedExt); + break; + } + } + if (!templateData && wantedExt === "docx") { + try { + const minimalB64 = "UEsDBBQABgAIAAAAIQAAAAAAAAAAAAAAAAAJAAAAd29yZC9VVAkAA0oJZ2ZKCWdzdXgLAAEE9QEAAAQUAAAAAABQSwMEFAAIAAgAAAAhAAAAAAAAAAAAAAAAABwAAAB3b3JkL19yZWxzL2RvY3VtZW50LnhtbC5yZWxzVVQJAAOSAmdmkgJndXgLAAEE9QEAAAQUAAAAAABQSwMEFAAIAAgAAAAhAAAAAAAAAAAAAAAAADwAAAB3b3JkL2RvY3VtZW50LnhtbFVUCQADjQJnZ40CZ3V4CwABBPUBAAAQFAAAAAA8eG1sIHZlcnNpb249IjEuMCI+PHc6d29yZGRvYyB4bWxucz13PSJodHRwOi8vc2NoZW1hcy5vcGVub3hwb3J5Lm9yZy93b3JkcHJvYy8yMDA2L21haW4iPjx3OnNlY3Rpb24geG1sbnM6dyA9ICJodHRwOi8vc2NoZW1hcy5vcGVub3hwb3J5Lm9yZy93b3JkcHJvYy8yMDA2L21haW4iPjx3OnA+PC93OnA+PC93OnNlY3Rpb24+PC93OndvcmRkb2M+"; + const buf = Buffer.from(minimalB64, "base64"); + const copy = new Uint8Array(buf.length); + copy.set(buf); + templateData = copy.buffer; + console.log("OnlyOffice: using embedded minimal DOCX fallback (no template found)"); + } catch (e) { + console.error("OnlyOffice: failed to build minimal DOCX fallback, creating empty file", e); + templateData = new ArrayBuffer(0); + } + } else if (!templateData) { + new import_obsidian.Notice(`No template found for ${wantedExt.toUpperCase()} (place Start.${wantedExt} in plugin assets). Creation cancelled.`); + return; + } + let finalName; + if (requestedName) { + finalName = requestedName; + } else { + let baseName = "Untitled Document"; + let idx = 1; + finalName = `${baseName}.${wantedExt}`; + while (this.app.vault.getAbstractFileByPath(finalName)) { + idx++; + finalName = `${baseName} ${idx}.${wantedExt}`; + } + } + const file = await this.app.vault.createBinary(finalName, templateData); + console.log("OnlyOffice: created new document", finalName, "size", templateData.byteLength, "prompted?", !!requestedName); + await this.openOnlyOfficeFile(file); + } catch (e) { + console.error("OnlyOffice: failed to create new document", e); + new import_obsidian.Notice("OnlyOffice: Failed to create new document"); + } + } + // Start an internal HTTP server to serve vault files and editor.html + async startInternalServer() { + var _a, _b, _c; + if (!(this.app.vault.adapter instanceof import_obsidian.FileSystemAdapter)) { + new import_obsidian.Notice("OnlyOffice plugin requires a file system adapter to run the local server."); + return; + } + this.internalServerReady = new Promise((resolve2, reject) => { + this._resolveInternalServerReady = resolve2; + this._rejectInternalServerReady = reject; + }); + const vaultPath = this.app.vault.adapter.getBasePath(); + let pluginPath = this.manifest.dir; + if (pluginPath && !path.isAbsolute(pluginPath)) { + pluginPath = path.resolve(vaultPath, pluginPath); + } + const resolvedPluginPath = pluginPath && path.isAbsolute(pluginPath) ? pluginPath : __dirname; + const editorHtmlPath = path.join(resolvedPluginPath, "editor.html"); + console.log("Vault path:", vaultPath); + console.log("Plugin path:", pluginPath); + console.log("Resolved plugin path:", resolvedPluginPath); + console.log("Editor HTML path:", editorHtmlPath); + console.log("Editor HTML exists:", fs.existsSync(editorHtmlPath)); + const explicitPort = this.settings.htmlServerPort && this.settings.htmlServerPort > 0 ? this.settings.htmlServerPort : 0; + const hashVault = (s) => { + let h = 0; + for (let i = 0; i < s.length; i++) + h = Math.imul(31, h) + s.charCodeAt(i) >>> 0; + return h; + }; + let candidatePorts = []; + if (explicitPort) { + candidatePorts.push(explicitPort); + } else { + const base = 28100 + hashVault(vaultPath) % 700; + for (let i = 0; i < 12; i++) + candidatePorts.push(base + i); + candidatePorts.push(0); + } + let serverStarted = false; + let port = 0; + for (const tryPort of candidatePorts) { + if (serverStarted) + break; + port = tryPort; + try { + this.httpServer = http.createServer((req, res) => { + var _a2; + console.log("[HTTP] Request URL:", req.url); + res.setHeader("Access-Control-Allow-Origin", "*"); + res.setHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, OPTIONS"); + res.setHeader("Access-Control-Allow-Headers", "Content-Type"); + if (req.method === "OPTIONS") { + res.writeHead(200); + res.end(); + return; + } + try { + let reqPath = decodeURIComponent(((_a2 = req.url) == null ? void 0 : _a2.split("?")[0]) || "/"); + if (reqPath === "/api/createNew") { + console.log("[HTTP] Create New document request"); + res.writeHead(200, { "Content-Type": "text/html" }); + res.end(`Creating new document...`); + return; + } + if (reqPath === "/api/saveAs") { + console.log("[HTTP] Save As request"); + const urlObj = new URL(req.url || "", `http://${req.headers.host || "localhost"}`); + const url = urlObj.searchParams.get("url") || ""; + const title = urlObj.searchParams.get("title") || ""; + res.writeHead(200, { "Content-Type": "text/html" }); + res.end(`Saving document as...`); + return; + } + if (reqPath === "/" || reqPath === "/embedded-editor.html") { + const embeddedPath = path.join(resolvedPluginPath, "embedded-editor.html"); + if (!fs.existsSync(embeddedPath)) { + res.writeHead(404, { "Content-Type": "text/plain" }); + res.end("embedded-editor.html not found"); + return; + } + fs.readFile(embeddedPath, (err, data) => { + if (err) { + res.writeHead(500, { "Content-Type": "text/plain" }); + res.end("Error reading embedded-editor.html"); + return; + } + res.writeHead(200, { "Content-Type": "text/html; charset=UTF-8", "Cache-Control": "no-store" }); + res.end(data); + }); + } else { + const filePath = path.join(vaultPath, reqPath.replace(/^\//, "")); + console.log("Attempting to serve file:", filePath); + console.log("File exists:", fs.existsSync(filePath)); + if (fs.existsSync(filePath) && fs.statSync(filePath).isFile()) { + const mimeType = mime.lookup(filePath) || "application/octet-stream"; + res.writeHead(200, { + "Content-Type": String(mimeType), + "Access-Control-Allow-Origin": "*", + "Cache-Control": "no-cache" + }); + fs.createReadStream(filePath).pipe(res); + } else { + const pluginFilePath = path.join(resolvedPluginPath, reqPath.replace(/^\//, "")); + if (fs.existsSync(pluginFilePath) && fs.statSync(pluginFilePath).isFile()) { + const mimeType = mime.lookup(pluginFilePath) || "application/octet-stream"; + res.writeHead(200, { + "Content-Type": String(mimeType), + "Access-Control-Allow-Origin": "*", + "Cache-Control": "no-cache" + }); + fs.createReadStream(pluginFilePath).pipe(res); + } else { + res.writeHead(404, { "Content-Type": "text/plain" }); + res.end(`File not found: ${filePath}`); + } + } + } + } catch (e) { + console.error("Server error:", e); + res.writeHead(500, { "Content-Type": "text/plain" }); + res.end("Internal server error: " + e.message); + } + }); + await new Promise((resolve2, reject) => { + this.httpServer.once("error", (err) => reject(err)); + const bindHost = this.settings.restrictToLocalhost ? "127.0.0.1" : "0.0.0.0"; + this.httpServer.listen(port, bindHost, () => resolve2()); + }); + if (port === 0) { + const addr = this.httpServer.address(); + if (addr && typeof addr === "object") + port = addr.port; + } + this.localServerPort = port; + serverStarted = true; + const os = require("os"); + const interfaces = os.networkInterfaces(); + let lanIps = []; + for (const name of Object.keys(interfaces)) { + for (const iface of interfaces[name]) { + if (iface.family === "IPv4" && !iface.internal) { + lanIps.push(iface.address); + } + } + } + console.log(`OnlyOffice internal HTML server running at:`); + console.log(` Local: http://127.0.0.1:${port}/embedded-editor.html`); + if (!this.settings.restrictToLocalhost) { + lanIps.forEach((ip) => console.log(` LAN: http://${ip}:${port}/`)); + } else { + console.log(" LAN: (disabled by restrictToLocalhost setting)"); + } + try { + const testResponse = await (0, import_obsidian.requestUrl)({ + url: `http://127.0.0.1:${port}/embedded-editor.html`, + method: "HEAD", + headers: { "Cache-Control": "no-cache" } + }); + console.log("Server test result:", testResponse.status); + } catch (err) { + console.error("Server test failed:", err); + } + } catch (err) { + console.warn(`OnlyOffice internal server: port ${port} failed (${(err == null ? void 0 : err.message) || err}).`); + try { + (_a = this.httpServer) == null ? void 0 : _a.close(); + } catch (e) { + } + } + } + if (!serverStarted) { + new import_obsidian.Notice("OnlyOffice: failed to start internal server (no free port)"); + (_b = this._rejectInternalServerReady) == null ? void 0 : _b.call(this, new Error("failed to start")); + } else { + (_c = this._resolveInternalServerReady) == null ? void 0 : _c.call(this); + } + } + // Start an internal OnlyOffice callback server + async startCallbackServer() { + var _a, _b; + if (!(this.app.vault.adapter instanceof import_obsidian.FileSystemAdapter)) { + console.warn("OnlyOffice callback server requires a file system adapter."); + this.callbackServerPort = 0; + return; + } + const vaultPath = this.app.vault.adapter.getBasePath(); + const explicitPort = this.settings.callbackServerPort && this.settings.callbackServerPort > 0 ? this.settings.callbackServerPort : 0; + const hashVault = (s) => { + let h = 0; + for (let i = 0; i < s.length; i++) + h = Math.imul(31, h) + s.charCodeAt(i) >>> 0; + return h; + }; + let candidatePorts = []; + if (explicitPort) { + candidatePorts.push(explicitPort); + } else { + const base = 28800 + hashVault(vaultPath) % 700; + for (let i = 0; i < 12; i++) + candidatePorts.push(base + i); + candidatePorts.push(0); + } + let serverStarted = false; + let chosenPort = 0; + for (const tryPort of candidatePorts) { + if (serverStarted) + break; + try { + this.callbackServer = http.createServer(async (req, res) => { + res.setHeader("Access-Control-Allow-Origin", "*"); + res.setHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS"); + res.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization"); + if (req.method === "OPTIONS") { + res.writeHead(200); + res.end(); + return; + } + console.log(`[Callback] ${req.method} ${req.url}`); + const rawUrl = req.url || "/"; + const pathOnly = rawUrl.split("?")[0]; + if (req.method === "POST" && pathOnly === "/callback") { + let body = ""; + req.on("data", (c) => { + body += c; + }); + req.on("end", async () => { + var _a2; + try { + console.log("[Callback] Received data:", body); + let data; + try { + data = JSON.parse(body); + } catch (e) { + console.error("[Callback] JSON parse failed, attempting form:", e); + if (body.includes("=") && body.includes("&")) { + const params = new URLSearchParams(body); + data = Object.fromEntries(params); + } else { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: 0 })); + return; + } + } + const status = parseInt(data == null ? void 0 : data.status) || 0; + if (data && (status === 2 || status === 6 || status === 0) && data.url) { + console.log("[Callback] Processing save with URL:", data.url); + let key = data.key; + if (!key && data.url) { + try { + const u = new URL(data.url); + key = u.searchParams.get("key"); + } catch (e) { + console.error("[Callback] URL parse error:", e); + } + } + if (key) { + let filePath = null; + if ((_a2 = this.keyFileMap) == null ? void 0 : _a2[key]) + filePath = this.keyFileMap[key]; + else { + const m = /^obsidian_(.+?)_\d+_[a-z0-9]+$/.exec(key); + if (m) + filePath = decodeURIComponent(m[1]); + } + if (filePath) { + const file = this.app.vault.getAbstractFileByPath(filePath); + if (file instanceof import_obsidian.TFile) { + try { + const response = await (0, import_obsidian.requestUrl)({ url: data.url, method: "GET", headers: { "Cache-Control": "no-cache" } }); + if (response.status === 200 && response.arrayBuffer) { + await this.app.vault.modifyBinary(file, response.arrayBuffer); + new import_obsidian.Notice("OnlyOffice: Document saved (callback)"); + console.log("[Callback] Saved successfully"); + } else { + console.error("[Callback] Download failed status:", response.status); + } + } catch (err) { + console.error("[Callback] Download error:", err); + } + } else + console.error("[Callback] File not found in vault:", filePath); + } else + console.error("[Callback] Could not resolve file path for key:", key); + } else + console.error("[Callback] No key in callback payload"); + } else { + console.log("[Callback] Ignored status / missing URL:", data); + } + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: 0 })); + } catch (err) { + console.error("[Callback] Handler error:", err); + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: 0 })); + } + }); + } else { + res.writeHead(200, { "Content-Type": "application/json" }); + res.end(JSON.stringify({ error: 0, info: "OnlyOffice callback server running" })); + } + }); + await new Promise((resolve2, reject) => { + const timeoutId = setTimeout(() => reject(new Error("Callback server start timeout")), 3e3); + this.callbackServer.once("error", (err) => { + clearTimeout(timeoutId); + reject(err); + }); + const bindHost = this.settings.restrictToLocalhost ? "127.0.0.1" : "0.0.0.0"; + this.callbackServer.listen(tryPort, bindHost, () => { + clearTimeout(timeoutId); + resolve2(); + }); + }); + const actual = ((_a = this.callbackServer.address()) == null ? void 0 : _a.port) || tryPort; + chosenPort = actual; + this.callbackServerPort = actual; + serverStarted = true; + console.log(`OnlyOffice callback server running at http://127.0.0.1:${actual}/ (candidate requested ${tryPort})`); + try { + const test = await (0, import_obsidian.requestUrl)({ url: `http://127.0.0.1:${actual}/`, method: "HEAD", headers: { "Cache-Control": "no-cache" } }); + console.log("Callback server test status:", test.status); + } catch (e) { + console.warn("Callback server test failed:", e.message); + } + } catch (err) { + console.warn(`Callback server port ${tryPort} failed:`, err.message); + try { + (_b = this.callbackServer) == null ? void 0 : _b.close(); + } catch (e) { + } + this.callbackServer = null; + } + } + if (!serverStarted) { + new import_obsidian.Notice("OnlyOffice: failed to start callback server (no free port)"); + this.callbackServerPort = 0; + } + } + // Load settings from disk + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + // Save settings to disk + async saveSettings() { + await this.saveData(this.settings); + } + // Clean up when the plugin is unloaded + async onunload() { + if (this.httpServer) { + this.httpServer.close(); + this.httpServer = null; + } + if (this.callbackServer) { + this.callbackServer.close(); + this.callbackServer = null; + } + } + // Open a DOCX file in the OnlyOffice view + async openDocxFile(file) { + const leaf = this.app.workspace.getLeaf(true); + await leaf.setViewState({ + type: VIEW_TYPE_ONLYOFFICE, + state: { file: file.path } + }); + this.app.workspace.setActiveLeaf(leaf, { focus: true }); + } + // Generic opener for any supported OnlyOffice extension + async openOnlyOfficeFile(file) { + return this.openDocxFile(file); + } +}; +var OnlyOfficeSettingTab = class extends import_obsidian.PluginSettingTab { + constructor(app, plugin) { + super(app, plugin); + this.plugin = plugin; + } + display() { + const { containerEl } = this; + containerEl.empty(); + new import_obsidian.Setting(containerEl).setName("OnlyOffice Server Port").setDesc("The port where your OnlyOffice Document Server is running.").addText((text) => text.setPlaceholder("8080").setValue(this.plugin.settings.onlyOfficeServerPort.toString()).onChange(async (value) => { + this.plugin.settings.onlyOfficeServerPort = Number(value) || 8080; + await this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("JWT Secret").setDesc("The secret key for JWT token generation (leave empty to disable).").addText((text) => text.setPlaceholder("your-secret-key").setValue(this.plugin.settings.jwtSecret || "").onChange(async (value) => { + this.plugin.settings.jwtSecret = value; + await this.plugin.saveSettings(); + })); + new import_obsidian.Setting(containerEl).setName("Local Server Address for Docker").setDesc("The address of your machine that the OnlyOffice Docker container can reach (e.g., host.docker.internal, or your LAN IP).").addText((text) => text.setPlaceholder("host.docker.internal").setValue(this.plugin.settings.localServerAddress || "").onChange(async (value) => { + this.plugin.settings.localServerAddress = value; + await this.plugin.saveSettings(); + })); + const advHeader = containerEl.createEl("h4", { text: "Advanced (normally leave defaults)" }); + advHeader.style.marginTop = "1.5em"; + new import_obsidian.Setting(containerEl).setName("Override HTML server port").setDesc("0 = automatic per-vault dynamic. Set only if you need a fixed port.").addText((text) => { + var _a; + return text.setPlaceholder("0 (auto)").setValue(String((_a = this.plugin.settings.htmlServerPort) != null ? _a : 0)).onChange(async (value) => { + const v = Number(value) || 0; + this.plugin.settings.htmlServerPort = v; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian.Setting(containerEl).setName("Override callback server port").setDesc("0 = automatic per-vault dynamic. Set only for special routing needs.").addText((text) => { + var _a; + return text.setPlaceholder("0 (auto)").setValue(String((_a = this.plugin.settings.callbackServerPort) != null ? _a : 0)).onChange(async (value) => { + const v = Number(value) || 0; + this.plugin.settings.callbackServerPort = v; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian.Setting(containerEl).setName("Restrict internal servers to localhost").setDesc("If ON, bind to 127.0.0.1 only (hide LAN URLs). Leave OFF if Docker/another host must reach them.").addToggle((toggle) => { + var _a; + return toggle.setValue((_a = this.plugin.settings.restrictToLocalhost) != null ? _a : false).onChange(async (value) => { + this.plugin.settings.restrictToLocalhost = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian.Setting(containerEl).setName("Append request token to URLs").setDesc("Toggle adding ?token=... to document and callback URLs (disable if your server does not use request verification).").addToggle((toggle) => { + var _a; + return toggle.setValue((_a = this.plugin.settings.useRequestToken) != null ? _a : true).onChange(async (value) => { + this.plugin.settings.useRequestToken = value; + await this.plugin.saveSettings(); + }); + }); + new import_obsidian.Setting(containerEl).setName("Use system Save As UI").setDesc("Open the document copy in your default browser (download UI) instead of Obsidian modal when using Save As / Download Copy.").addToggle((toggle) => { + var _a; + return toggle.setValue((_a = this.plugin.settings.useSystemSaveAs) != null ? _a : false).onChange(async (value) => { + this.plugin.settings.useSystemSaveAs = value; + await this.plugin.saveSettings(); + }); + }); + } +}; +/*! Bundled license information: + +mime-db/index.js: + (*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + *) + +mime-types/index.js: + (*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + *) +*/ diff --git a/.obsidian/plugins/OnlyOffice/manifest.json b/.obsidian/plugins/OnlyOffice/manifest.json new file mode 100644 index 00000000..2c808284 --- /dev/null +++ b/.obsidian/plugins/OnlyOffice/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "onlyoffice", + "name": "OnlyOffice", + "version": "1.0.0", + "minAppVersion": "0.15.0", + "description": "Edit DOCX files using OnlyOffice Document Server", + "author": "Jan Sansdtröm", + "authorUrl": "https://github.com/yourusername", + "isDesktopOnly": true +} \ No newline at end of file diff --git a/.obsidian/plugins/cubox-sync/data.json b/.obsidian/plugins/cubox-sync/data.json index 6098d9d6..3a7f50d1 100644 --- a/.obsidian/plugins/cubox-sync/data.json +++ b/.obsidian/plugins/cubox-sync/data.json @@ -34,7 +34,7 @@ "contentTemplate": "# {{{title}}}\n\n{{{description}}}\n\n{{{article_title}}} //文章内容标题\n{{{content}}} //文章正文\n\n\n[Read in Cubox]({{{cubox_url}}}) \n[Read Original]({{{url}}}) \n\n---\n\n{{#highlights.length}}\n## Annotations \n\n{{#highlights}}\n> {{{text}}} \n\n{{#note}}\n{{{note}}}\n{{/note}}\n[Link️]({{{cubox_url}}}) \n\n{{/highlights}}\n{{/highlights.length}}", "highlightInContent": true, "dateFormat": "yyyy-MM-dd", - "lastSyncTime": 1756217339834, + "lastSyncTime": 1756219139631, "lastSyncCardId": "7358083230366436785", "lastCardUpdateTime": "2025-08-21T13:52:28.950+0800", "syncing": false diff --git a/.obsidian/plugins/recent-files-obsidian/data.json b/.obsidian/plugins/recent-files-obsidian/data.json index 62e3a744..4bf4b02f 100644 --- a/.obsidian/plugins/recent-files-obsidian/data.json +++ b/.obsidian/plugins/recent-files-obsidian/data.json @@ -4,10 +4,18 @@ "basename": "2025-08-26", "path": "01-工作日记/2025-08-26.md" }, + { + "basename": "Start", + "path": "08-Inbox/Office/Start.pptx" + }, { "basename": "数据备份方案", "path": "03-学习笔记/数据备份方案.md" }, + { + "basename": "Start", + "path": "08-Inbox/Office/Start.docx" + }, { "basename": "2025-08-25", "path": "01-工作日记/2025-08-25.md" @@ -191,14 +199,6 @@ { "basename": "软件下载安装", "path": "90-学习教程/99-黑曜石玩家指南/1-obsidian入门/软件下载安装.md" - }, - { - "basename": "每周定期汇总小结", - "path": "90-学习教程/99-黑曜石玩家指南/1-obsidian入门/每周定期汇总小结.md" - }, - { - "basename": "开箱写日志", - "path": "90-学习教程/99-黑曜石玩家指南/1-obsidian入门/开箱写日志.md" } ], "omittedPaths": [], diff --git a/.obsidian/plugins/update-time-on-edit/data.json b/.obsidian/plugins/update-time-on-edit/data.json index 05c0e789..0c7ebcb7 100644 --- a/.obsidian/plugins/update-time-on-edit/data.json +++ b/.obsidian/plugins/update-time-on-edit/data.json @@ -18,6 +18,6 @@ "01-工作日记/2025-08-24.md": "b82a4f49459f0b3dd8f8b4b2411fc2c682fea28f69b72d5c2cdf28ecac49cfd4", "01-工作日记/2025-08-25.md": "2c6441d63702944db046c5637e0db95a969a26abc661ebd500662acfbf1e3a22", "60-Imports/63-WuCai/2025/08/Plex重大变更:无论使用自己还是别人的媒体服务器远程播放都必须付费 – 蓝点网.md": "7a61c7330f970a8283cc70a0511e8b43bd6a160fc65e42fb2bee5f46668c752f", - "01-工作日记/2025-08-26.md": "21a60c32fb116a5e9fa4ce0c36735214b885c22c661a0a1130f67692d847d272" + "01-工作日记/2025-08-26.md": "95ef1aaf127c499d538809bb85054c191268e360119c7c716505a73dc5a6c51b" } } \ No newline at end of file diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 54a8174f..cf35f12d 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,45 +4,21 @@ "type": "split", "children": [ { - "id": "68ba61e199a3006a", + "id": "cf20749da23c30a8", "type": "tabs", "children": [ { - "id": "210f6e255abf09ac", + "id": "88ed9de744392085", "type": "leaf", "state": { "type": "markdown", "state": { "file": "01-工作日记/2025-08-26.md", "mode": "source", - "source": false, - "backlinks": true, - "backlinkOpts": { - "collapseAll": false, - "extraContext": false, - "sortOrder": "alphabetical", - "showSearch": false, - "searchQuery": "", - "backlinkCollapsed": true, - "unlinkedCollapsed": true - } - }, - "icon": "lucide-file", - "title": "2025-08-26" - } - }, - { - "id": "79999341f21ff9a9", - "type": "leaf", - "state": { - "type": "markdown", - "state": { - "file": "03-学习笔记/数据备份方案.md", - "mode": "source", "source": false }, "icon": "lucide-file", - "title": "数据备份方案" + "title": "2025-08-26" } } ] @@ -321,7 +297,6 @@ "obsidian-importer:Open Importer": false, "copilot:Open Copilot Chat": false, "DEVONlink-obsidian:DEVONlink": false, - "periodic-notes:Open today": false, "memos-ai-sync:Sync Memos": false, "translate:Open translation view": false, "obsidian-calibre-plugin:Calibre": false, @@ -330,20 +305,26 @@ "diary-ics:日记日历订阅": false, "cubox-sync:Cubox": false, "file-tree-alternative:File Tree Alternative Plugin": true, - "hidden-folder-obsidian:隐藏文件夹": false, "password-protection:开启密码保护": false, "soundscapes:Soundscapes: My Music": false, "sheet-plus:创建 Excel 文件": false, "wucai-highlights-official:Start WuCai syncing": false, "note-to-mp:复制到公众号": false, "timelines-revamped:Insert Timeline Event": false, - "timelines-revamped:Insert Timeline Event (Frontmatter)": false + "timelines-revamped:Insert Timeline Event (Frontmatter)": false, + "periodic-notes:Open today": false, + "onlyoffice:New OnlyOffice Document": false } }, - "active": "210f6e255abf09ac", + "active": "88ed9de744392085", "lastOpenFiles": [ + "08-Inbox/Office/Start.pptx", "03-学习笔记/数据备份方案.md", + "08-Inbox/Office/Start.docx", "01-工作日记/2025-08-26.md", + "08-Inbox/Office/Start.xlsx", + "08-Inbox/Office", + "08-Inbox/未命名文件夹", "01-工作日记/2025-08-25.md", "50-Memos/2025/08/党员组织看山河为证2个多小时 晚上在最大的杨裕兴面馆吃面 (2025-08-25 19-25).md", "60-Imports/63-WuCai/2025/08/Plex重大变更:无论使用自己还是别人的媒体服务器远程播放都必须付费 – 蓝点网.md", @@ -367,7 +348,6 @@ "10-WebClipper/扩展无限可能:Obsidian Web Viewer插件解析.md", "10-WebClipper/Pocket.md", "02-技术评测/AI专题/免费使用Gemini 2.5 Pro的完整教程.md", - "02-技术评测/AI专题/AI使用评测.md", "50-Memos/2025/08/resources/npLDiAioDzxYNMCxDndP3Q_A0FB7954-FD46-4F7F-A39E-E5284AAD9223.jpg", "08-Inbox/B99016FB-F1A3-433A-BF44-75086CF8B7F6.txt", "08-Inbox/assets/68691ee74ca1b.png", @@ -375,11 +355,6 @@ "70-SimpRead/output/Obsidian 和 Logseq 对比 - 拾月/assets", "70-SimpRead/output/Obsidian 和 Logseq 对比 - 拾月", "70-SimpRead/output/本地快照系统.pdf", - "70-SimpRead/output/assets", - "70-SimpRead/Inbox/assets", - "70-SimpRead/output/tmp-本地快照系统.html", - "70-SimpRead/simpread_config.json", - "simpread_config.json", "50-Memos/2025/08/resources/JghbgqDFVMTm2ZbzCdqT3T_22902977-BC80-405E-8D23-996AFB1B7939.jpg", "50-Memos/2025/08/resources/QxEtttRT6WPdBi6WWzSgMj_E6DB1120-D906-409D-99DE-374ADE4B4E7E.jpg", "50-Memos/2025/08/resources/iBGNVYtLw8a8HuefAMGv6L_FD566CF2-5ECB-479D-844E-36A3977F3EE3.jpg", diff --git a/01-工作日记/2025-08-26.md b/01-工作日记/2025-08-26.md index fed97795..9778dd1a 100644 --- a/01-工作日记/2025-08-26.md +++ b/01-工作日记/2025-08-26.md @@ -6,7 +6,7 @@ tags: rating: ⭐️ excerpt: created: 2025-08-26T10:08 -updated: 2025-08-26T17:43 +updated: 2025-08-26T23:01 --- ## 1TODO - [x] 多喝水,避免久坐不动 ✅ 2025-08-26 @@ -128,6 +128,7 @@ nextcloud也需要域名信任,修改config.php文件!ssh->root权限! - fnOS-T:更新下载镜像到90%后失败? ## 3 Tips +- 偶然发现:OB有onlyoffice插件,实现office文件联动 ## 4 Questions diff --git a/08-Inbox/Office/Start.docx b/08-Inbox/Office/Start.docx new file mode 100644 index 0000000000000000000000000000000000000000..4c0241a3eadbdb073dbed18fddba738b9b7e95a4 GIT binary patch literal 21986 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%0DOQ507` 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 Pg#d#*u&KE=5X1ujp&cQ? literal 0 HcmV?d00001 diff --git a/08-Inbox/Office/Start.pptx b/08-Inbox/Office/Start.pptx new file mode 100644 index 0000000000000000000000000000000000000000..a2f4c71f5f2a92622b245fb6b089e8ba543fc82a GIT binary patch literal 32505 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 UMI-?LI_QTyv{}Ow=d+*w4@50Y`~Uy| literal 0 HcmV?d00001 diff --git a/08-Inbox/Office/Start.xlsx b/08-Inbox/Office/Start.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..8d896833d98f23452c1276f803f806e073e08fd4 GIT binary patch literal 8473 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 literal 0 HcmV?d00001