nuxt-og-image 3.0.0-rc.65 → 3.0.0-rc.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (469) hide show
  1. package/README.md +67 -67
  2. package/dist/client/200.html +222 -213
  3. package/dist/client/404.html +222 -213
  4. package/dist/client/_nuxt/{D33OKbkv.js → 0OCEc-sb.js} +1 -1
  5. package/dist/client/_nuxt/16nqZaIT.js +1 -0
  6. package/dist/client/_nuxt/3Ts0ZrM4.js +4 -0
  7. package/dist/client/_nuxt/44JOqR_V.js +1 -0
  8. package/dist/client/_nuxt/4FkZXfg1.js +3 -0
  9. package/dist/client/_nuxt/4WleZr1P.js +1 -0
  10. package/dist/client/_nuxt/5HixFuyr.js +1 -0
  11. package/dist/client/_nuxt/5bRVBCrv.js +1 -0
  12. package/dist/client/_nuxt/{CMDmr8et.js → 7LPQ6a13.js} +2 -2
  13. package/dist/client/_nuxt/8WiSp-0_.js +1 -0
  14. package/dist/client/_nuxt/9CfBjzQa.js +1 -0
  15. package/dist/client/_nuxt/B-9EjyZr.js +1 -0
  16. package/dist/client/_nuxt/B-a2BbyY.js +1 -0
  17. package/dist/client/_nuxt/B0LoMq2b.js +1 -0
  18. package/dist/client/_nuxt/B1ejXUAS.js +1 -0
  19. package/dist/client/_nuxt/{BR6CMsBL.js → B3LRAdDP.js} +1 -1
  20. package/dist/client/_nuxt/B3a86pAO.js +1 -0
  21. package/dist/client/_nuxt/B5La0Eyp.js +1 -0
  22. package/dist/client/_nuxt/B7-FEXAT.js +1 -0
  23. package/dist/client/_nuxt/B9HI_aQy.js +1 -0
  24. package/dist/client/_nuxt/B9vFkdfw.js +1 -0
  25. package/dist/client/_nuxt/BAGvEKUB.js +1 -0
  26. package/dist/client/_nuxt/BAp2aEeE.js +1 -0
  27. package/dist/client/_nuxt/BB9S_66N.js +1 -0
  28. package/dist/client/_nuxt/BC7ivatP.js +1 -0
  29. package/dist/client/_nuxt/{CJQrLysU.js → BCOu96sC.js} +1 -1
  30. package/dist/client/_nuxt/BD3t3nJY.js +1 -0
  31. package/dist/client/_nuxt/BDJ7po1j.js +1 -0
  32. package/dist/client/_nuxt/BGk6HrHT.js +1 -0
  33. package/dist/client/_nuxt/BHSTd-7M.js +1 -0
  34. package/dist/client/_nuxt/BKFBoKT4.js +1 -0
  35. package/dist/client/_nuxt/BKNiEhql.js +1 -0
  36. package/dist/client/_nuxt/BLmvGqlk.js +1 -0
  37. package/dist/client/_nuxt/BMRpS3Xo.js +1 -0
  38. package/dist/client/_nuxt/BMkdSFOr.js +1 -0
  39. package/dist/client/_nuxt/BNgG76gt.js +1 -0
  40. package/dist/client/_nuxt/BNofkYSZ.js +165 -0
  41. package/dist/client/_nuxt/BOp3HRET.js +1 -0
  42. package/dist/client/_nuxt/BPhJoBd6.js +1 -0
  43. package/dist/client/_nuxt/{DGDuLtS6.js → BQnHL-cn.js} +1 -8
  44. package/dist/client/_nuxt/BS9sT-GQ.js +1 -0
  45. package/dist/client/_nuxt/BU83OF-G.js +1 -0
  46. package/dist/client/_nuxt/BUeIC4cT.js +1 -0
  47. package/dist/client/_nuxt/BXP-NDAE.js +1 -0
  48. package/dist/client/_nuxt/BXUVD3TH.js +1 -0
  49. package/dist/client/_nuxt/BXWtGw2n.js +6 -0
  50. package/dist/client/_nuxt/BYLuaE_S.js +3 -0
  51. package/dist/client/_nuxt/BYelj_cE.js +1 -0
  52. package/dist/client/_nuxt/B_Sdu6N9.js +1 -0
  53. package/dist/client/_nuxt/{BXfENWL6.js → Ba_2pva2.js} +1 -1
  54. package/dist/client/_nuxt/BeX7BQ1y.js +1 -0
  55. package/dist/client/_nuxt/{CThH5sBG.js → BfVRrWqI.js} +1 -1
  56. package/dist/client/_nuxt/BgEvnnZj.js +1 -0
  57. package/dist/client/_nuxt/{DKb4lQY2.js → Bgrlo6mM.js} +1 -1
  58. package/dist/client/_nuxt/{CdedUr_-.js → BiVAY1KT.js} +1 -1
  59. package/dist/client/_nuxt/Bl6w8nq6.js +29 -0
  60. package/dist/client/_nuxt/BmUjtHPt.js +1 -0
  61. package/dist/client/_nuxt/BnYPtiAB.js +1 -0
  62. package/dist/client/_nuxt/{B9S9BZZh.js → BotTw_1M.js} +1 -1
  63. package/dist/client/_nuxt/BpDWT_aG.js +1 -0
  64. package/dist/client/_nuxt/BpqPLH6b.js +1 -0
  65. package/dist/client/_nuxt/{ChMCFiS0.js → Br4herk8.js} +1 -1
  66. package/dist/client/_nuxt/Brmco9EZ.js +2 -0
  67. package/dist/client/_nuxt/Bs9WCFOo.js +1 -0
  68. package/dist/client/_nuxt/BtPWTO6-.js +1 -0
  69. package/dist/client/_nuxt/BuqjW-Uc.js +1 -0
  70. package/dist/client/_nuxt/BwUg_Rem.js +1 -0
  71. package/dist/client/_nuxt/Bxuka25Y.js +1 -0
  72. package/dist/client/_nuxt/{DsfXcHUZ.js → BxwkrKyP.js} +1 -27
  73. package/dist/client/_nuxt/ByN1NmdT.js +11 -0
  74. package/dist/client/_nuxt/C2Z2wNnw.js +1 -0
  75. package/dist/client/_nuxt/{CarfVElc.js → C3wf4cjV.js} +1 -54
  76. package/dist/client/_nuxt/C5J_9lw5.js +1 -0
  77. package/dist/client/_nuxt/C6doOGgB.js +1 -0
  78. package/dist/client/_nuxt/C7n-thn-.js +1 -0
  79. package/dist/client/_nuxt/C7xspq5a.js +1 -0
  80. package/dist/client/_nuxt/C8DXlOXe.js +1 -0
  81. package/dist/client/_nuxt/C9CNr0dZ.js +1 -0
  82. package/dist/client/_nuxt/CA2blNRc.js +1 -0
  83. package/dist/client/_nuxt/CCW61mLD.js +1 -0
  84. package/dist/client/_nuxt/CDNnVXJ3.js +1 -0
  85. package/dist/client/_nuxt/CDP-pALJ.js +1 -0
  86. package/dist/client/_nuxt/{JgH_6NEN.js → CFy8Z7mU.js} +1 -1
  87. package/dist/client/_nuxt/CHDuk4cg.js +1 -0
  88. package/dist/client/_nuxt/{DGEpfOTx.js → CJYoS41Z.js} +1 -1
  89. package/dist/client/_nuxt/CKK8qrH7.js +3 -0
  90. package/dist/client/_nuxt/CKqhLkpw.js +1 -0
  91. package/dist/client/_nuxt/CLTURUqp.js +9 -0
  92. package/dist/client/_nuxt/CPQn-Lhb.js +1 -0
  93. package/dist/client/_nuxt/CPw9RxLe.js +1 -0
  94. package/dist/client/_nuxt/CRUEGcu5.js +1 -0
  95. package/dist/client/_nuxt/{BN4LRXf6.js → CS6sTstm.js} +1 -1
  96. package/dist/client/_nuxt/{BVLuctcA.js → CSPPpfsQ.js} +1 -1
  97. package/dist/client/_nuxt/CTeQKLZv.js +1 -0
  98. package/dist/client/_nuxt/CTsPJjdJ.js +1 -0
  99. package/dist/client/_nuxt/{CsYA0RN7.js → CUNQUWO_.js} +1 -1
  100. package/dist/client/_nuxt/CV5B5C80.js +1 -0
  101. package/dist/client/_nuxt/CZkFsSlX.js +1 -0
  102. package/dist/client/_nuxt/C_g069vW.js +1 -0
  103. package/dist/client/_nuxt/{DZqG9GXz.js → C_h5G2He.js} +1 -31
  104. package/dist/client/_nuxt/CaR_I2C-.js +1 -0
  105. package/dist/client/_nuxt/Cb48SAmt.js +1 -0
  106. package/dist/client/_nuxt/{BmCW-tYz.js → CeIpHJfZ.js} +4 -78
  107. package/dist/client/_nuxt/{B9CT-1u6.js → CidHYXz9.js} +1 -7
  108. package/dist/client/_nuxt/{beD-FUib.js → ClPxYbPx.js} +1 -1
  109. package/dist/client/_nuxt/Clj_IpB8.js +1 -0
  110. package/dist/client/_nuxt/CmN1UzhW.js +1 -0
  111. package/dist/client/_nuxt/Crs1WKlG.js +1 -0
  112. package/dist/client/_nuxt/{KPqz0Sb3.js → CsW3I34-.js} +1 -1
  113. package/dist/client/_nuxt/CsuMf1xJ.js +1 -0
  114. package/dist/client/_nuxt/Ctb_e1-I.js +1 -0
  115. package/dist/client/_nuxt/CvHWZNAB.js +1 -0
  116. package/dist/client/_nuxt/CyUS7F7b.js +17 -0
  117. package/dist/client/_nuxt/Cz-n9WvF.js +1 -0
  118. package/dist/client/_nuxt/{CrhH3_Og.js → Cz3ygVR-.js} +1 -1
  119. package/dist/client/_nuxt/{sQpxpyUs.js → CzK8D06Z.js} +1 -1
  120. package/dist/client/_nuxt/{B1nm99XP.js → D0N_qbs7.js} +1 -1
  121. package/dist/client/_nuxt/D0pnavP-.js +1 -0
  122. package/dist/client/_nuxt/D25Gr2Wc.js +1 -0
  123. package/dist/client/_nuxt/D46m5Xd3.js +1 -0
  124. package/dist/client/_nuxt/D4miJ1xw.js +1 -0
  125. package/dist/client/_nuxt/D5lQfeOG.js +1 -0
  126. package/dist/client/_nuxt/D6oCKXcX.js +1 -0
  127. package/dist/client/_nuxt/D8V69RRQ.js +1 -0
  128. package/dist/client/_nuxt/DBLgxP_1.js +2 -0
  129. package/dist/client/_nuxt/{ByMv4Xf1.js → DCmDdbvy.js} +1 -1
  130. package/dist/client/_nuxt/DDG_rSGg.js +8 -0
  131. package/dist/client/_nuxt/{CX_FIdg1.js → DDK5Hw8n.js} +1 -1
  132. package/dist/client/_nuxt/DFHN_7lU.js +3 -0
  133. package/dist/client/_nuxt/DFaziNDp.js +1 -0
  134. package/dist/client/_nuxt/DFsxFixh.js +1 -0
  135. package/dist/client/_nuxt/DGhhRy1e.js +1 -0
  136. package/dist/client/_nuxt/{DdacRhvC.js → DIw1DfnK.js} +1 -1
  137. package/dist/client/_nuxt/DJNHLfzP.js +1 -0
  138. package/dist/client/_nuxt/{I4qd5QHW.js → DJOPMAPO.js} +5 -5
  139. package/dist/client/_nuxt/DKgh9jPU.js +20 -0
  140. package/dist/client/_nuxt/DO04iIl4.js +1 -0
  141. package/dist/client/_nuxt/DOOuMSMh.js +1 -0
  142. package/dist/client/_nuxt/DQ-rpzxz.js +1 -0
  143. package/dist/client/_nuxt/DRuVOcqL.js +1 -0
  144. package/dist/client/_nuxt/DSmiUmWA.js +1 -0
  145. package/dist/client/_nuxt/DSv7Jr7N.js +5 -0
  146. package/dist/client/_nuxt/DTMFIK7w.js +1 -0
  147. package/dist/client/_nuxt/DV9_Ze0W.js +1 -0
  148. package/dist/client/_nuxt/{6XBPEST2.js → DXdsTRaC.js} +1 -1
  149. package/dist/client/_nuxt/{DouzTJIq.js → DXtfa3TF.js} +1 -1
  150. package/dist/client/_nuxt/DYgwfmdY.js +1 -0
  151. package/dist/client/_nuxt/DYikCEmq.js +1 -0
  152. package/dist/client/_nuxt/{8t4jSAMm.js → DYrknm32.js} +1 -1
  153. package/dist/client/_nuxt/D_lsq3cR.js +1 -0
  154. package/dist/client/_nuxt/D_nC6SfZ.js +1 -0
  155. package/dist/client/_nuxt/Dc3u8CCo.js +1 -0
  156. package/dist/client/_nuxt/Df4vQnuo.js +1 -0
  157. package/dist/client/_nuxt/Di1G_BEd.js +1 -0
  158. package/dist/client/_nuxt/Dk2kDqHs.js +1 -0
  159. package/dist/client/_nuxt/DkIL16gc.js +2 -0
  160. package/dist/client/_nuxt/DmixpzPA.js +1 -0
  161. package/dist/client/_nuxt/Dnd6U92I.js +25 -0
  162. package/dist/client/_nuxt/DofIr7ih.js +1 -0
  163. package/dist/client/_nuxt/DqFtmHIk.js +1 -0
  164. package/dist/client/_nuxt/{Bh8mriwU.js → DrUHIbQf.js} +1 -17
  165. package/dist/client/_nuxt/{6Kuza3Wr.js → DrhOmAGa.js} +1 -1
  166. package/dist/client/_nuxt/DsO5WfEU.js +1 -0
  167. package/dist/client/_nuxt/DsclqnHy.js +4 -0
  168. package/dist/client/_nuxt/Dwk9V841.js +1 -0
  169. package/dist/client/_nuxt/DyLIn2qo.js +1 -0
  170. package/dist/client/_nuxt/{C9d3aiqh.js → DzhYcJWo.js} +1 -1
  171. package/dist/client/_nuxt/Dziqk49f.js +1 -0
  172. package/dist/client/_nuxt/E5r7Moxb.js +16 -0
  173. package/dist/client/_nuxt/{B_SUYfiV.js → FMRyFT8D.js} +1 -1
  174. package/dist/client/_nuxt/GACPk8cj.js +16 -0
  175. package/dist/client/_nuxt/H94RPpLS.js +1 -0
  176. package/dist/client/_nuxt/{DBxHOdLe.js → HxmVvryO.js} +1 -1
  177. package/dist/client/_nuxt/JYC31MTV.js +1 -0
  178. package/dist/client/_nuxt/Jl0QvYgb.js +1 -0
  179. package/dist/client/_nuxt/{BeX7Iu5M.js → KA8c-whL.js} +1 -90
  180. package/dist/client/_nuxt/KN-DOLVO.js +1 -0
  181. package/dist/client/_nuxt/Ka_J5llu.js +1 -0
  182. package/dist/client/_nuxt/KuNYkU7X.js +1 -0
  183. package/dist/client/_nuxt/MkuNFWFs.js +204 -0
  184. package/dist/client/_nuxt/{BaedD2tq.js → N3zwmhmW.js} +1 -1
  185. package/dist/client/_nuxt/O4cDyHwR.js +1 -0
  186. package/dist/client/_nuxt/OPd3ySAa.js +1 -0
  187. package/dist/client/_nuxt/Opso89zU.js +16 -0
  188. package/dist/client/_nuxt/P3XzCKkX.js +1 -0
  189. package/dist/client/_nuxt/PBlC1IT3.js +1 -0
  190. package/dist/client/_nuxt/PauOf_jS.js +1 -0
  191. package/dist/client/_nuxt/Qj0mFepl.js +14 -0
  192. package/dist/client/_nuxt/R9SNgiQ9.js +1 -0
  193. package/dist/client/_nuxt/{C6XIsc4F.js → Rc0-bMtX.js} +1 -1
  194. package/dist/client/_nuxt/TYaudu4O.js +1 -0
  195. package/dist/client/_nuxt/VRCUJX8G.js +1 -0
  196. package/dist/client/_nuxt/{BH1M7C1g.js → VntNkNt1.js} +1 -1
  197. package/dist/client/_nuxt/{C_8Fx7bH.js → Ys9ZunwU.js} +1 -1
  198. package/dist/client/_nuxt/bEygH-WE.js +3 -0
  199. package/dist/client/_nuxt/builds/latest.json +1 -1
  200. package/dist/client/_nuxt/builds/meta/4133e154-aafc-47ec-8a1d-f5919be391d9.json +1 -0
  201. package/dist/client/_nuxt/eJKZXzCK.js +1 -0
  202. package/dist/client/_nuxt/eQYbbmqd.js +16 -0
  203. package/dist/client/_nuxt/entry.DtsycVcr.css +1 -0
  204. package/dist/client/_nuxt/error-404.CUF_CFKB.css +1 -0
  205. package/dist/client/_nuxt/error-500.BR60owpQ.css +1 -0
  206. package/dist/client/_nuxt/gwSZkKbG.js +1 -0
  207. package/dist/client/_nuxt/i0hkWYmE.js +1 -0
  208. package/dist/client/_nuxt/ithPx4uF.js +1 -0
  209. package/dist/client/_nuxt/{CiRxTSAc.js → jDrCW69G.js} +1 -1
  210. package/dist/client/_nuxt/kveMaAK5.js +1 -0
  211. package/dist/client/_nuxt/lBoe4CZw.js +1 -0
  212. package/dist/client/_nuxt/{Bgpqy2XC.js → lPxKsdjn.js} +1 -1
  213. package/dist/client/_nuxt/lRZxrFTT.js +1 -0
  214. package/dist/client/_nuxt/mvTh5Gok.js +1 -0
  215. package/dist/client/_nuxt/pCnzZaOt.js +1 -0
  216. package/dist/client/_nuxt/qpF8edk8.js +1 -0
  217. package/dist/client/_nuxt/qvnQm5y7.js +1 -0
  218. package/dist/client/_nuxt/qwoaayiL.js +1 -0
  219. package/dist/client/_nuxt/t1S7pxBA.js +1 -0
  220. package/dist/client/_nuxt/t6MJYFCU.js +5 -0
  221. package/dist/client/_nuxt/tEd5xQ4M.js +1 -0
  222. package/dist/client/_nuxt/xGgVA17b.js +1 -0
  223. package/dist/client/_nuxt/{Bj5xdiaE.js → xuIuMB9j.js} +1 -1
  224. package/dist/client/_nuxt/yvfKceIB.js +1 -0
  225. package/dist/client/_nuxt/z5DqfkHR.js +1 -0
  226. package/dist/client/index.html +222 -213
  227. package/dist/module.d.mts +6 -2
  228. package/dist/module.d.ts +6 -2
  229. package/dist/module.json +2 -2
  230. package/dist/module.mjs +246 -131
  231. package/dist/runtime/nitro/og-image/bindings/chromium/chrome-launcher.js +1 -1
  232. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.js +1 -1
  233. package/dist/runtime/nitro/og-image/bindings/satori/wasm.js +1 -1
  234. package/dist/runtime/nitro/og-image/{cache.d.ts → cache/lru.d.ts} +3 -1
  235. package/dist/runtime/nitro/og-image/{cache.js → cache/lru.js} +6 -0
  236. package/dist/runtime/nitro/og-image/cache/mock.d.ts +9 -0
  237. package/dist/runtime/nitro/og-image/cache/mock.js +9 -0
  238. package/dist/runtime/nitro/og-image/chromium/renderer.js +1 -1
  239. package/dist/runtime/nitro/og-image/chromium/screenshot.js +1 -1
  240. package/dist/runtime/nitro/og-image/context.js +8 -8
  241. package/dist/runtime/nitro/og-image/satori/font.d.ts +1 -0
  242. package/dist/runtime/nitro/og-image/satori/font.js +2 -2
  243. package/dist/runtime/nitro/og-image/satori/instances.d.ts +1 -1
  244. package/dist/runtime/nitro/og-image/satori/plugins/encoding.js +1 -1
  245. package/dist/runtime/nitro/og-image/satori/plugins/flex.js +27 -2
  246. package/dist/runtime/nitro/og-image/satori/plugins/imageSrc.js +4 -4
  247. package/dist/runtime/nitro/og-image/satori/plugins/unocss.js +1 -1
  248. package/dist/runtime/nitro/og-image/satori/renderer.js +3 -7
  249. package/dist/runtime/nitro/og-image/satori/transforms/emojis.d.ts +0 -2
  250. package/dist/runtime/nitro/og-image/satori/transforms/emojis.js +1 -5
  251. package/dist/runtime/nitro/og-image/satori/transforms/inlineCss.js +1 -1
  252. package/dist/runtime/nitro/og-image/satori/vnodes.js +8 -8
  253. package/dist/runtime/nitro/og-image/templates/html.js +16 -21
  254. package/dist/runtime/nitro/plugins/__zero-runtime/nuxt-content.d.ts +2 -0
  255. package/dist/runtime/nitro/plugins/__zero-runtime/nuxt-content.js +9 -0
  256. package/dist/runtime/nitro/plugins/nuxt-content.js +2 -51
  257. package/dist/runtime/nitro/plugins/prerender.js +9 -4
  258. package/dist/runtime/nitro/routes/__zero-runtime/font.d.ts +2 -0
  259. package/dist/runtime/nitro/routes/__zero-runtime/font.js +8 -0
  260. package/dist/runtime/nitro/routes/__zero-runtime/image.d.ts +2 -0
  261. package/dist/runtime/nitro/routes/__zero-runtime/image.js +8 -0
  262. package/dist/runtime/nitro/routes/debug.json.js +2 -2
  263. package/dist/runtime/nitro/routes/font.js +3 -49
  264. package/dist/runtime/nitro/routes/image.js +3 -87
  265. package/dist/runtime/nitro/tsconfig.json +3 -3
  266. package/dist/runtime/nitro/util/cache.js +3 -3
  267. package/dist/runtime/nitro/util/eventHandlers.d.ts +3 -0
  268. package/dist/runtime/nitro/util/eventHandlers.js +155 -0
  269. package/dist/runtime/nitro/util/kit.d.ts +1 -1
  270. package/dist/runtime/nitro/util/kit.js +3 -3
  271. package/dist/runtime/nitro/util/plugins.d.ts +2 -0
  272. package/dist/runtime/nitro/util/plugins.js +54 -0
  273. package/dist/runtime/nuxt/components/OgImage/OgImage.d.ts +1 -3
  274. package/dist/runtime/nuxt/components/OgImage/OgImage.js +1 -1
  275. package/dist/runtime/nuxt/components/OgImage/OgImageScreenshot.d.ts +1 -3
  276. package/dist/runtime/nuxt/components/OgImage/OgImageScreenshot.js +1 -1
  277. package/dist/runtime/nuxt/components/Templates/Community/BrandedLogo.vue +29 -29
  278. package/dist/runtime/nuxt/components/Templates/Community/Frame.vue +64 -64
  279. package/dist/runtime/nuxt/components/Templates/Community/Nuxt.vue +185 -185
  280. package/dist/runtime/nuxt/components/Templates/Community/NuxtSeo.vue +137 -137
  281. package/dist/runtime/nuxt/components/Templates/Community/Pergel.vue +103 -103
  282. package/dist/runtime/nuxt/components/Templates/Community/SimpleBlog.vue +35 -35
  283. package/dist/runtime/nuxt/components/Templates/Community/UnJs.vue +108 -108
  284. package/dist/runtime/nuxt/components/Templates/Community/Wave.vue +34 -34
  285. package/dist/runtime/nuxt/components/Templates/Community/WithEmoji.vue +28 -28
  286. package/dist/runtime/nuxt/composables/defineOgImage.js +7 -5
  287. package/dist/runtime/nuxt/composables/defineOgImageComponent.d.ts +1 -1
  288. package/dist/runtime/nuxt/composables/mock.d.ts +1 -1
  289. package/dist/runtime/nuxt/plugins/__zero-runtime/og-image-canonical-urls.server.d.ts +2 -0
  290. package/dist/runtime/nuxt/plugins/__zero-runtime/og-image-canonical-urls.server.js +9 -0
  291. package/dist/runtime/nuxt/plugins/__zero-runtime/route-rule-og-image.server.d.ts +2 -0
  292. package/dist/runtime/nuxt/plugins/__zero-runtime/route-rule-og-image.server.js +9 -0
  293. package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.js +3 -51
  294. package/dist/runtime/nuxt/plugins/route-rule-og-image.server.js +4 -36
  295. package/dist/runtime/nuxt/utils/plugins.d.ts +3 -0
  296. package/dist/runtime/nuxt/utils/plugins.js +87 -0
  297. package/dist/runtime/nuxt/utils.js +6 -4
  298. package/dist/runtime/shared.js +3 -3
  299. package/dist/runtime/types.d.ts +6 -5
  300. package/dist/types.d.mts +0 -4
  301. package/dist/types.d.ts +0 -4
  302. package/package.json +56 -48
  303. package/virtual.d.ts +49 -49
  304. package/dist/client/_nuxt/-7WWnkdy.js +0 -517
  305. package/dist/client/_nuxt/0ooBkv16.js +0 -1
  306. package/dist/client/_nuxt/1Je9_Reo.js +0 -136
  307. package/dist/client/_nuxt/1rqFXsGc.js +0 -666
  308. package/dist/client/_nuxt/37ic6j3l.js +0 -1
  309. package/dist/client/_nuxt/3ghuYFLd.js +0 -1
  310. package/dist/client/_nuxt/9B1nZgL-.js +0 -1
  311. package/dist/client/_nuxt/9ZOzOPqN.js +0 -1
  312. package/dist/client/_nuxt/AgnqFTPX.js +0 -13
  313. package/dist/client/_nuxt/B3g-KkBK.js +0 -1
  314. package/dist/client/_nuxt/B4yE-MfL.js +0 -38
  315. package/dist/client/_nuxt/B6bHXiXE.js +0 -25
  316. package/dist/client/_nuxt/B7rNE5kf.js +0 -1
  317. package/dist/client/_nuxt/BB42E8aY.js +0 -186
  318. package/dist/client/_nuxt/BBBqETUW.js +0 -1
  319. package/dist/client/_nuxt/BBJYjQ0k.js +0 -1
  320. package/dist/client/_nuxt/BEjL32p1.js +0 -5754
  321. package/dist/client/_nuxt/BF6G6X0H.js +0 -1
  322. package/dist/client/_nuxt/BH_RS3WO.js +0 -1
  323. package/dist/client/_nuxt/BICIrM8O.js +0 -1
  324. package/dist/client/_nuxt/BIxS-Weu.js +0 -1
  325. package/dist/client/_nuxt/BLluXI4E.js +0 -1
  326. package/dist/client/_nuxt/BMHPAh1U.js +0 -2
  327. package/dist/client/_nuxt/BOpLLL-w.js +0 -1
  328. package/dist/client/_nuxt/BPiaQZfK.js +0 -1
  329. package/dist/client/_nuxt/BT9ZzGyQ.js +0 -69
  330. package/dist/client/_nuxt/BUpeXbsf.js +0 -25
  331. package/dist/client/_nuxt/BVGdgKAv.js +0 -1
  332. package/dist/client/_nuxt/BVkeqZ59.js +0 -1
  333. package/dist/client/_nuxt/BWKJ1FCf.js +0 -239
  334. package/dist/client/_nuxt/BXR915QZ.js +0 -32
  335. package/dist/client/_nuxt/BYdKNJ10.js +0 -1
  336. package/dist/client/_nuxt/BZfs-ost.js +0 -1
  337. package/dist/client/_nuxt/BZz1Hhek.js +0 -1
  338. package/dist/client/_nuxt/BaNxgKSR.js +0 -17
  339. package/dist/client/_nuxt/BacI6-DX.js +0 -40
  340. package/dist/client/_nuxt/Bbv8ARUV.js +0 -13
  341. package/dist/client/_nuxt/Bdt_eLrj.js +0 -756
  342. package/dist/client/_nuxt/BeJnKnI_.js +0 -544
  343. package/dist/client/_nuxt/Bg0wAK5a.js +0 -100
  344. package/dist/client/_nuxt/Bi43K_FX.js +0 -6
  345. package/dist/client/_nuxt/BiDE021q.js +0 -1
  346. package/dist/client/_nuxt/BigF1UXR.js +0 -1
  347. package/dist/client/_nuxt/Bj0fF4lQ.js +0 -1
  348. package/dist/client/_nuxt/BlxWTfDV.js +0 -699
  349. package/dist/client/_nuxt/BnyYJeap.js +0 -129
  350. package/dist/client/_nuxt/Br6ll-O0.js +0 -1
  351. package/dist/client/_nuxt/BscxmKrE.js +0 -8
  352. package/dist/client/_nuxt/Btshr8M_.js +0 -70
  353. package/dist/client/_nuxt/BwXNTs7T.js +0 -1
  354. package/dist/client/_nuxt/Bxkoe-BC.js +0 -1
  355. package/dist/client/_nuxt/C15OxdQ5.js +0 -1
  356. package/dist/client/_nuxt/C1DVX8_8.js +0 -831
  357. package/dist/client/_nuxt/C1yTBzia.js +0 -1
  358. package/dist/client/_nuxt/C2TBxDwV.js +0 -1
  359. package/dist/client/_nuxt/C3qJFuQy.js +0 -3
  360. package/dist/client/_nuxt/C3qUB5O8.js +0 -301
  361. package/dist/client/_nuxt/C6Aznpr-.js +0 -1
  362. package/dist/client/_nuxt/CApMHEaB.js +0 -1
  363. package/dist/client/_nuxt/CBPJd_fO.js +0 -1
  364. package/dist/client/_nuxt/CBWrHyXe.js +0 -580
  365. package/dist/client/_nuxt/CCqFro8U.js +0 -3
  366. package/dist/client/_nuxt/CEfge3mM.js +0 -1
  367. package/dist/client/_nuxt/CFF2d1j6.js +0 -1
  368. package/dist/client/_nuxt/CG4fK2Nq.js +0 -21
  369. package/dist/client/_nuxt/CJGKC1_q.js +0 -40
  370. package/dist/client/_nuxt/CJIaz0BQ.js +0 -76
  371. package/dist/client/_nuxt/CO5hpdkB.js +0 -1
  372. package/dist/client/_nuxt/CQUCfALx.js +0 -13
  373. package/dist/client/_nuxt/CSPeAESR.js +0 -1
  374. package/dist/client/_nuxt/C_ZPRiAj.js +0 -26
  375. package/dist/client/_nuxt/Cb-F_BZP.js +0 -1
  376. package/dist/client/_nuxt/CbViG2Xw.js +0 -74
  377. package/dist/client/_nuxt/CbYhyuC0.js +0 -505
  378. package/dist/client/_nuxt/CfPQhs6g.js +0 -7
  379. package/dist/client/_nuxt/Cgl53LJQ.js +0 -1
  380. package/dist/client/_nuxt/Cicx_DS6.js +0 -1
  381. package/dist/client/_nuxt/ClXEvkw9.js +0 -68
  382. package/dist/client/_nuxt/CowR2XfX.js +0 -1
  383. package/dist/client/_nuxt/Cp2HGa90.js +0 -353
  384. package/dist/client/_nuxt/CpAANOdC.js +0 -1
  385. package/dist/client/_nuxt/CqYeW6XZ.js +0 -1
  386. package/dist/client/_nuxt/CrgTADc5.js +0 -1
  387. package/dist/client/_nuxt/CsyrCbsw.js +0 -699
  388. package/dist/client/_nuxt/Cthz8VOO.js +0 -771
  389. package/dist/client/_nuxt/CuJfdYLG.js +0 -1
  390. package/dist/client/_nuxt/CupVZNk8.js +0 -25
  391. package/dist/client/_nuxt/CxrokwfH.js +0 -1
  392. package/dist/client/_nuxt/D384ylkT.js +0 -1
  393. package/dist/client/_nuxt/D4LaosRr.js +0 -1
  394. package/dist/client/_nuxt/D6pmzCqS.js +0 -1
  395. package/dist/client/_nuxt/D7WeZTai.js +0 -1
  396. package/dist/client/_nuxt/DAGYewaG.js +0 -559
  397. package/dist/client/_nuxt/DAP_O-zg.js +0 -1
  398. package/dist/client/_nuxt/DAVo6uMX.js +0 -1
  399. package/dist/client/_nuxt/DAfrLhwG.js +0 -1
  400. package/dist/client/_nuxt/DBeuZS66.js +0 -1
  401. package/dist/client/_nuxt/DC4hdoM9.js +0 -87
  402. package/dist/client/_nuxt/DC8MraHL.js +0 -666
  403. package/dist/client/_nuxt/DGO8GyiP.js +0 -1
  404. package/dist/client/_nuxt/DGxQkqYo.js +0 -1
  405. package/dist/client/_nuxt/DHmGyzbM.js +0 -109
  406. package/dist/client/_nuxt/DJZWsvj0.js +0 -1
  407. package/dist/client/_nuxt/DJubGRtk.js +0 -1
  408. package/dist/client/_nuxt/DK4oFTHQ.js +0 -200
  409. package/dist/client/_nuxt/DLP9ZvWb.js +0 -3
  410. package/dist/client/_nuxt/DM4HHECw.js +0 -1
  411. package/dist/client/_nuxt/DOHBU7tp.js +0 -1
  412. package/dist/client/_nuxt/DOtRmeXT.js +0 -1
  413. package/dist/client/_nuxt/DR5YgmI2.js +0 -1
  414. package/dist/client/_nuxt/DS9ZWoKD.js +0 -1
  415. package/dist/client/_nuxt/DSrLtGYv.js +0 -15
  416. package/dist/client/_nuxt/DSsji4Hu.js +0 -1
  417. package/dist/client/_nuxt/DV9JwLIa.js +0 -1
  418. package/dist/client/_nuxt/DVC_qXWv.js +0 -1
  419. package/dist/client/_nuxt/DVLwECkk.js +0 -1
  420. package/dist/client/_nuxt/DVfdqzEq.js +0 -1
  421. package/dist/client/_nuxt/DVxyIIKo.js +0 -1
  422. package/dist/client/_nuxt/DXFkqnOI.js +0 -816
  423. package/dist/client/_nuxt/DXT9h7v2.js +0 -1
  424. package/dist/client/_nuxt/DY7_9Ga-.js +0 -1
  425. package/dist/client/_nuxt/DYI1rfmx.js +0 -25
  426. package/dist/client/_nuxt/DZLoTQm4.js +0 -1
  427. package/dist/client/_nuxt/DbK06e1c.js +0 -21
  428. package/dist/client/_nuxt/Dble9ECP.js +0 -1
  429. package/dist/client/_nuxt/Dch3xQiY.js +0 -699
  430. package/dist/client/_nuxt/Dd6f7Z5P.js +0 -1
  431. package/dist/client/_nuxt/DfeQjIbs.js +0 -5
  432. package/dist/client/_nuxt/Dg0DGYq4.js +0 -14
  433. package/dist/client/_nuxt/DhFF74a2.js +0 -1
  434. package/dist/client/_nuxt/Dit6kIrv.js +0 -11
  435. package/dist/client/_nuxt/DmDrTTlz.js +0 -1
  436. package/dist/client/_nuxt/DrnZp123.js +0 -40
  437. package/dist/client/_nuxt/Du6_OKDb.js +0 -159
  438. package/dist/client/_nuxt/DvyTQcux.js +0 -1
  439. package/dist/client/_nuxt/Dwo2i-71.js +0 -1
  440. package/dist/client/_nuxt/DwuVtWc2.js +0 -518
  441. package/dist/client/_nuxt/DzwdaLuO.js +0 -223
  442. package/dist/client/_nuxt/ECt0lbkd.js +0 -16
  443. package/dist/client/_nuxt/Eh5U-gDp.js +0 -52
  444. package/dist/client/_nuxt/Ksn5IXup.js +0 -1
  445. package/dist/client/_nuxt/PWN5J14X.js +0 -1
  446. package/dist/client/_nuxt/PifQWv0n.js +0 -1
  447. package/dist/client/_nuxt/QZ3jNtnE.js +0 -515
  448. package/dist/client/_nuxt/RCJZWN-0.js +0 -81
  449. package/dist/client/_nuxt/RE3ujT-k.js +0 -1
  450. package/dist/client/_nuxt/RqY_Nz63.js +0 -1
  451. package/dist/client/_nuxt/Sfo2eW0G.js +0 -274
  452. package/dist/client/_nuxt/T9ysyp6P.js +0 -62
  453. package/dist/client/_nuxt/Urb1RsFe.js +0 -1
  454. package/dist/client/_nuxt/VQMr7AbF.js +0 -1
  455. package/dist/client/_nuxt/WfFM8TlZ.js +0 -1
  456. package/dist/client/_nuxt/builds/meta/5876a781-42f1-459e-a560-bbe16edad6b7.json +0 -1
  457. package/dist/client/_nuxt/cw46T5ID.js +0 -61
  458. package/dist/client/_nuxt/dIHJ9UdL.js +0 -1
  459. package/dist/client/_nuxt/eJfcURhx.js +0 -1
  460. package/dist/client/_nuxt/entry.BJu2ITzA.css +0 -1
  461. package/dist/client/_nuxt/error-404.B3wjZPBT.css +0 -1
  462. package/dist/client/_nuxt/error-500.Dxoa4Ooo.css +0 -1
  463. package/dist/client/_nuxt/i0IPvypD.js +0 -1
  464. package/dist/client/_nuxt/kuh6G-Sk.js +0 -9
  465. package/dist/client/_nuxt/nclm9rTJ.js +0 -266
  466. package/dist/client/_nuxt/vMsNTMhM.js +0 -5
  467. package/dist/client/_nuxt/wChcbJ1V.js +0 -37
  468. package/dist/client/_nuxt/xettH10j.js +0 -131
  469. package/dist/client/_nuxt/yX2IItqj.js +0 -1
@@ -1,5 +1,5 @@
1
- import { defineSatoriTransformer } from "../utils.js";
2
1
  import { decodeHtml } from "../../../util/encoding.js";
2
+ import { defineSatoriTransformer } from "../utils.js";
3
3
  export default defineSatoriTransformer([
4
4
  // clean up
5
5
  {
@@ -1,10 +1,35 @@
1
1
  import { defineSatoriTransformer } from "../utils.js";
2
+ const BLOCK_ELEMENTS = [
3
+ "div",
4
+ "p",
5
+ "ul",
6
+ "ol",
7
+ "li",
8
+ "blockquote",
9
+ "pre",
10
+ "hr",
11
+ "table",
12
+ "dl"
13
+ ];
2
14
  export default defineSatoriTransformer({
3
- filter: (node) => node.type === "div" && (Array.isArray(node.props?.children) && node.props?.children.length >= 1) && (!node.props.style?.display && !node.props?.class?.includes("hidden")),
15
+ filter: (node) => node.type === "div" && (Array.isArray(node.props?.children) && node.props?.children.length >= 1) && !node.props?.class?.includes("hidden"),
4
16
  transform: (node) => {
5
17
  node.props.style = node.props.style || {};
18
+ if (node.props.style?.display && node.props.style?.display !== "flex") {
19
+ return;
20
+ }
6
21
  node.props.style.display = "flex";
7
- if (!node.props?.class?.includes("flex-"))
22
+ if (!node.props?.class?.includes("flex-") && node.props.children.some((child) => BLOCK_ELEMENTS.includes(child.type))) {
8
23
  node.props.style.flexDirection = "column";
24
+ return;
25
+ }
26
+ let flexWrap = node.props?.class?.includes("flex-wrap");
27
+ if (!node.props?.class?.includes("flex-")) {
28
+ node.props.style.flexWrap = "wrap";
29
+ flexWrap = true;
30
+ }
31
+ if (flexWrap && !node.props?.class?.includes("gap")) {
32
+ node.props.style.gap = "0.2em";
33
+ }
9
34
  }
10
35
  });
@@ -1,9 +1,9 @@
1
- import { withBase } from "ufo";
1
+ import { useNitroOrigin, useStorage } from "#imports";
2
2
  import sizeOf from "image-size";
3
- import { defineSatoriTransformer } from "../utils.js";
3
+ import { withBase } from "ufo";
4
4
  import { toBase64Image } from "../../../../pure.js";
5
5
  import { logger } from "../../../util/logger.js";
6
- import { useNitroOrigin, useStorage } from "#imports";
6
+ import { defineSatoriTransformer } from "../utils.js";
7
7
  async function resolveLocalFilePathImage(publicStoragePath, src) {
8
8
  const key = `${publicStoragePath}${src.replace("./", ":").replace("/", ":")}`;
9
9
  if (await useStorage().hasItem(key))
@@ -43,7 +43,7 @@ export default defineSatoriTransformer([
43
43
  try {
44
44
  const imageSize = sizeOf(imageBuffer);
45
45
  dimensions = { width: imageSize.width, height: imageSize.height };
46
- } catch (e2) {
46
+ } catch {
47
47
  }
48
48
  if (dimensions?.width && dimensions?.height) {
49
49
  const naturalAspectRatio = dimensions.width / dimensions.height;
@@ -1,7 +1,7 @@
1
+ import { theme } from "#nuxt-og-image/unocss-config.mjs";
1
2
  import { createGenerator } from "@unocss/core";
2
3
  import presetWind from "@unocss/preset-wind";
3
4
  import { defineSatoriTransformer } from "../utils.js";
4
- import { theme } from "#nuxt-og-image/unocss-config.mjs";
5
5
  const uno = createGenerator({ theme }, {
6
6
  presets: [
7
7
  presetWind()
@@ -1,15 +1,11 @@
1
+ import { theme } from "#nuxt-og-image/unocss-config.mjs";
2
+ import { fontCache } from "#nuxt-og-image-cache";
1
3
  import { defu } from "defu";
2
- import { createStorage } from "unstorage";
3
- import lruCacheDriver from "unstorage/drivers/lru-cache";
4
4
  import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.js";
5
5
  import { loadFont } from "./font.js";
6
- import { createVNodes } from "./vnodes.js";
7
6
  import { useResvg, useSatori, useSharp } from "./instances.js";
8
- import { theme } from "#nuxt-og-image/unocss-config.mjs";
7
+ import { createVNodes } from "./vnodes.js";
9
8
  const fontPromises = {};
10
- const fontCache = createStorage({
11
- driver: lruCacheDriver({ max: 10 })
12
- });
13
9
  async function resolveFonts(event) {
14
10
  const { fonts } = useOgImageRuntimeConfig();
15
11
  const normalisedFonts = normaliseFontInput([...event.options.fonts || [], ...fonts]);
@@ -1,5 +1,3 @@
1
1
  import type { NuxtIslandResponse } from 'nuxt/dist/core/runtime/nitro/renderer';
2
- import type { Storage } from 'unstorage';
3
2
  import type { OgImageRenderEventContext } from '../../../../types.js';
4
- export declare const emojiCache: Storage<string>;
5
3
  export declare function applyEmojis(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<any>;
@@ -1,5 +1,4 @@
1
- import { createStorage } from "unstorage";
2
- import lruCacheDriver from "unstorage/drivers/lru-cache";
1
+ import { emojiCache } from "#nuxt-og-image-cache";
3
2
  const charMap = {
4
3
  "2049": "exclamation-question-mark",
5
4
  "2122": "trade-mark",
@@ -3557,9 +3556,6 @@ const charMap = {
3557
3556
  "1f9df": "zombie",
3558
3557
  "1f4a4": "zzz"
3559
3558
  };
3560
- export const emojiCache = createStorage({
3561
- driver: lruCacheDriver({ max: 1e3 })
3562
- });
3563
3559
  const RE_MATCH_EMOJIS = /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
3564
3560
  export async function applyEmojis(ctx, island) {
3565
3561
  const html = island.html;
@@ -1,6 +1,6 @@
1
+ import { useNitroOrigin } from "#imports";
1
2
  import { createConsola } from "consola";
2
3
  import { useCssInline } from "../instances.js";
3
- import { useNitroOrigin } from "#imports";
4
4
  export async function applyInlineCss(ctx, island) {
5
5
  const { e } = ctx;
6
6
  let html = island.html;
@@ -1,15 +1,15 @@
1
1
  import { html as convertHtmlToSatori } from "satori-html";
2
- import { fetchIsland } from "../../util/kit.js";
3
2
  import { htmlDecodeQuotes } from "../../util/encoding.js";
4
- import { applyInlineCss } from "./transforms/inlineCss.js";
5
- import { applyEmojis } from "./transforms/emojis.js";
6
- import { walkSatoriTree } from "./utils.js";
7
- import unocss from "./plugins/unocss.js";
8
- import emojis from "./plugins/emojis.js";
3
+ import { fetchIsland } from "../../util/kit.js";
9
4
  import classes from "./plugins/classes.js";
10
- import imageSrc from "./plugins/imageSrc.js";
11
- import flex from "./plugins/flex.js";
5
+ import emojis from "./plugins/emojis.js";
12
6
  import encoding from "./plugins/encoding.js";
7
+ import flex from "./plugins/flex.js";
8
+ import imageSrc from "./plugins/imageSrc.js";
9
+ import unocss from "./plugins/unocss.js";
10
+ import { applyEmojis } from "./transforms/emojis.js";
11
+ import { applyInlineCss } from "./transforms/inlineCss.js";
12
+ import { walkSatoriTree } from "./utils.js";
13
13
  export async function createVNodes(ctx) {
14
14
  let html = ctx.options.html;
15
15
  if (!html) {
@@ -1,10 +1,10 @@
1
- import { createHeadCore } from "@unhead/vue";
1
+ import { theme } from "#nuxt-og-image/unocss-config.mjs";
2
2
  import { renderSSRHead } from "@unhead/ssr";
3
+ import { createHeadCore } from "@unhead/vue";
3
4
  import { createError } from "h3";
4
5
  import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.js";
5
6
  import { fetchIsland } from "../../util/kit.js";
6
7
  import { applyEmojis } from "../satori/transforms/emojis.js";
7
- import { theme } from "#nuxt-og-image/unocss-config.mjs";
8
8
  export async function html(ctx) {
9
9
  const { options } = ctx;
10
10
  const { fonts } = useOgImageRuntimeConfig();
@@ -24,12 +24,6 @@ export async function html(ctx) {
24
24
  defaultFontFamily = firstFont.name;
25
25
  await applyEmojis(ctx, island);
26
26
  let html2 = island.html;
27
- const googleFonts = {};
28
- fonts.filter((font) => !font.path).forEach((font) => {
29
- if (!googleFonts[font.name])
30
- googleFonts[font.name] = [];
31
- googleFonts[font.name].push(font);
32
- });
33
27
  head.push({
34
28
  style: [
35
29
  {
@@ -38,31 +32,40 @@ export async function html(ctx) {
38
32
  },
39
33
  {
40
34
  innerHTML: `body {
41
- transform: scale(${options.props.scale || 1});
35
+ transform: scale(${options.props?.scale || 1});
42
36
  transform-origin: top left;
43
37
  max-height: 100vh;
44
38
  position: relative;
45
39
  width: ${options.width}px;
46
40
  height: ${options.height}px;
47
41
  overflow: hidden;
48
- background-color: ${options.props.colorMode === "dark" ? "#1b1b1b" : "#fff"};
42
+ background-color: ${options.props?.colorMode === "dark" ? "#1b1b1b" : "#fff"};
49
43
  }
50
44
  div {
51
45
  display: flex;
46
+ }
47
+ div:has(div, p, ul, ol, li, blockquote, pre, hr, table, dl) {
48
+ display: flex;
52
49
  flex-direction: column;
53
50
  }
51
+ div:not(:has(div, p, ul, ol, li, blockquote, pre, hr, table, dl)) {
52
+ display: flex;
53
+ flex-wrap: wrap;
54
+ gap: 12px;
55
+ }
56
+
54
57
  svg[data-emoji] {
55
58
  display: inline-block;
56
59
  }
57
60
  `
58
61
  },
59
- ...fonts.filter((font) => font.path).map((font) => {
62
+ ...fonts.map((font) => {
60
63
  return `
61
64
  @font-face {
62
65
  font-family: '${font.name}';
63
66
  font-style: normal;
64
67
  font-weight: ${font.weight};
65
- src: url('${font.path}') format('truetype');
68
+ src: url('/__og-image__/font/${font.key}') format('truetype');
66
69
  }
67
70
  `;
68
71
  })
@@ -95,15 +98,7 @@ svg[data-emoji] {
95
98
  // reset css to match svg output
96
99
  href: "https://cdn.jsdelivr.net/npm/gardevoir",
97
100
  rel: "stylesheet"
98
- },
99
- // have to add each weight as their own stylesheet
100
- // we should use the local font file no?
101
- ...Object.entries(googleFonts).map(([name, fonts2]) => {
102
- return {
103
- href: `https://fonts.googleapis.com/css2?family=${name}:wght@${fonts2.map((f) => f.weight).join(";")}&display=swap`,
104
- rel: "stylesheet"
105
- };
106
- })
101
+ }
107
102
  ]
108
103
  });
109
104
  html2 = html2.replaceAll(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
@@ -0,0 +1,2 @@
1
+ declare const _default: import("nitropack").NitroAppPlugin;
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
2
+ import { nuxtContentPlugin } from "../../util/plugins.js";
3
+ export default defineNitroPlugin((nitroApp) => {
4
+ if (import.meta.dev || import.meta.prerender) {
5
+ nuxtContentPlugin(nitroApp);
6
+ return;
7
+ }
8
+ throw new Error("Not supported in zeroRuntime mode.");
9
+ });
@@ -1,54 +1,5 @@
1
1
  import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
2
- import { defu } from "defu";
3
- import { getOgImagePath, useOgImageRuntimeConfig } from "../../shared.js";
2
+ import { nuxtContentPlugin } from "../util/plugins.js";
4
3
  export default defineNitroPlugin((nitroApp) => {
5
- const { isNuxtContentDocumentDriven, defaults } = useOgImageRuntimeConfig();
6
- nitroApp.hooks.hook("content:file:afterParse", async (content) => {
7
- if (content._draft || content._extension !== "md" || content._partial || content.indexable === false || content.index === false)
8
- return;
9
- let path = content.path;
10
- if (isNuxtContentDocumentDriven)
11
- path = content._path;
12
- if (path && content.ogImage) {
13
- const ogImageConfig = typeof content.ogImage === "object" ? content.ogImage : {};
14
- const optionsWithDefault = defu(ogImageConfig, defaults);
15
- const src = getOgImagePath(path, optionsWithDefault);
16
- const payload = {
17
- title: content.title,
18
- excerpt: content.description || content.excerpt,
19
- ...content.ogImage
20
- };
21
- Object.entries(ogImageConfig).forEach(([key, val]) => {
22
- payload[key.replace(/-([a-z])/g, (g) => g[1].toUpperCase())] = val;
23
- });
24
- content.head = defu({
25
- script: [
26
- {
27
- id: "nuxt-og-image-overrides",
28
- type: "application/json",
29
- processTemplateParams: true,
30
- innerHTML: payload,
31
- // we want this to be last in our head
32
- tagPosition: "bodyClose",
33
- tagPriority: 30
34
- // slighty higher priority
35
- }
36
- ],
37
- meta: [
38
- { property: "og:image", content: src },
39
- { property: "og:image:width", content: optionsWithDefault.width },
40
- { property: "og:image:height", content: optionsWithDefault.height },
41
- { property: "og:image:type", content: `image/${optionsWithDefault.extension}` },
42
- { property: "og:image:alt", content: optionsWithDefault.alt },
43
- // twitter
44
- { name: "twitter:card", content: "summary_large_image" },
45
- { name: "twitter:image:src", content: src },
46
- { name: "twitter:image:width", content: optionsWithDefault.width },
47
- { name: "twitter:image:height", content: optionsWithDefault.height },
48
- { name: "twitter:image:alt", content: optionsWithDefault.alt }
49
- ]
50
- });
51
- }
52
- return content;
53
- });
4
+ nuxtContentPlugin(nitroApp);
54
5
  });
@@ -1,18 +1,18 @@
1
- import { parseURL } from "ufo";
1
+ import { prerenderOptionsCache } from "#nuxt-og-image-cache";
2
2
  import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
3
- import { extractAndNormaliseOgImageOptions, resolvePathCacheKey } from "../og-image/context.js";
4
- import { prerenderOptionsCache } from "../og-image/cache.js";
3
+ import { parseURL } from "ufo";
5
4
  import { isInternalRoute } from "../../pure.js";
5
+ import { extractAndNormaliseOgImageOptions, resolvePathCacheKey } from "../og-image/context.js";
6
6
  import { createNitroRouteRuleMatcher } from "../util/kit.js";
7
7
  export default defineNitroPlugin(async (nitro) => {
8
8
  if (!import.meta.prerender)
9
9
  return;
10
+ const routeRuleMatcher = createNitroRouteRuleMatcher();
10
11
  nitro.hooks.hook("render:html", async (html, ctx) => {
11
12
  const { head, bodyAppend } = html;
12
13
  const path = parseURL(ctx.event.path).pathname;
13
14
  if (isInternalRoute(path))
14
15
  return;
15
- const routeRuleMatcher = createNitroRouteRuleMatcher();
16
16
  const routeRules = routeRuleMatcher(path);
17
17
  if (routeRules.ogImage === false)
18
18
  return;
@@ -24,5 +24,10 @@ export default defineNitroPlugin(async (nitro) => {
24
24
  return;
25
25
  const key = resolvePathCacheKey(ctx.event);
26
26
  await prerenderOptionsCache.setItem(key, options);
27
+ const index = html.bodyAppend.findIndex((script) => script.includes('id="nuxt-og-image-options"'));
28
+ if (index !== -1) {
29
+ html.bodyAppend[index] = html.bodyAppend[index].replace(/<script id="nuxt-og-image-options" type="application\/json">[\s\S]*?<\/script>/, "");
30
+ html.bodyAppend[index] = html.bodyAppend[index].replace(/<script id="nuxt-og-image-overrides" type="application\/json">[\s\S]*?<\/script>/, "");
31
+ }
27
32
  });
28
33
  });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
2
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { fontEventHandler } from "../../util/eventHandlers.js";
3
+ export default defineEventHandler(async (e) => {
4
+ if (import.meta.dev || import.meta.prerender) {
5
+ return await fontEventHandler(e);
6
+ }
7
+ throw new Error("Not supported in zeroRuntime mode.");
8
+ });
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
2
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { imageEventHandler } from "../../util/eventHandlers.js";
3
+ export default defineEventHandler(async (e) => {
4
+ if (import.meta.dev || import.meta.prerender) {
5
+ return await imageEventHandler(e);
6
+ }
7
+ throw new Error("Not supported in zeroRuntime mode.");
8
+ });
@@ -1,7 +1,7 @@
1
- import { defineEventHandler, setHeader } from "h3";
2
- import { useOgImageRuntimeConfig } from "../../shared.js";
3
1
  import compatibility from "#nuxt-og-image/compatibility";
4
2
  import { componentNames } from "#nuxt-og-image/component-names.mjs";
3
+ import { defineEventHandler, setHeader } from "h3";
4
+ import { useOgImageRuntimeConfig } from "../../shared.js";
5
5
  export default defineEventHandler(async (e) => {
6
6
  setHeader(e, "Content-Type", "application/json");
7
7
  const runtimeConfig = useOgImageRuntimeConfig();
@@ -1,49 +1,3 @@
1
- import { createError, defineEventHandler, getQuery, proxyRequest, sendRedirect } from "h3";
2
- import { parseURL } from "ufo";
3
- import { normaliseFontInput, useOgImageRuntimeConfig } from "../../shared.js";
4
- export default defineEventHandler(async (e) => {
5
- const path = parseURL(e.path).pathname;
6
- const [_name, _weight] = path.split("/font/")[1].split(".")[0].split("/");
7
- if (!_name || !_weight)
8
- return "Provide a font name and weight";
9
- const name = _name[0].toUpperCase() + _name.slice(1);
10
- const weight = Math.round(Number.parseInt(_weight) / 100) * 100;
11
- const config = useOgImageRuntimeConfig();
12
- const normalisedFonts = normaliseFontInput(config.fonts);
13
- let font;
14
- if (typeof getQuery(e).font === "string")
15
- font = JSON.parse(getQuery(e).font);
16
- if (!font) {
17
- font = normalisedFonts.find((font2) => {
18
- return font2.name.toLowerCase() === name.toLowerCase() && weight === Number(font2.weight);
19
- });
20
- }
21
- if (!font) {
22
- return createError({
23
- statusCode: 404,
24
- statusMessage: `[Nuxt OG Image] Font ${name}:${weight} not found`
25
- });
26
- }
27
- const css = await globalThis.$fetch(`https://fonts.googleapis.com/css2?family=${name}:wght@${weight}`, {
28
- headers: {
29
- // Make sure it returns TTF.
30
- "User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
31
- }
32
- });
33
- if (!css) {
34
- return createError({
35
- statusCode: 500,
36
- statusMessage: `[Nuxt OG Image] Invalid Google Font ${name}:${weight}`
37
- });
38
- }
39
- const ttfResource = css.match(/src: url\((.+)\) format\('(opentype|truetype)'\)/);
40
- if (ttfResource?.[1])
41
- return proxyRequest(e, ttfResource[1], {});
42
- const woff2Resource = css.match(/src: url\((.+)\) format\('woff2'\)/);
43
- if (woff2Resource?.[1])
44
- return sendRedirect(e, woff2Resource[1]);
45
- return createError({
46
- statusCode: 500,
47
- statusMessage: `[Nuxt OG Image] Malformed Google Font CSS ${css}`
48
- });
49
- });
1
+ import { defineEventHandler } from "h3";
2
+ import { fontEventHandler } from "../util/eventHandlers.js";
3
+ export default defineEventHandler(fontEventHandler);
@@ -1,87 +1,3 @@
1
- import { H3Error, createError, defineEventHandler, getQuery, setHeader } from "h3";
2
- import { useOgImageBufferCache } from "../util/cache.js";
3
- import { useOgImageRuntimeConfig } from "../../shared.js";
4
- import { resolveContext } from "../og-image/context.js";
5
- import { html } from "../og-image/templates/html.js";
6
- export default defineEventHandler(async (e) => {
7
- const ctx = await resolveContext(e);
8
- if (ctx instanceof H3Error)
9
- return ctx;
10
- const { isDebugJsonPayload, extension, options, renderer } = ctx;
11
- const { debug, baseCacheKey } = useOgImageRuntimeConfig();
12
- const compatibilityHints = [];
13
- if (isDebugJsonPayload) {
14
- const queryExtension = getQuery(e).extension || ctx.options.extension;
15
- if (["jpeg", "jpg"].includes(queryExtension) && options.renderer === "satori")
16
- compatibilityHints.push("Converting PNGs to JPEGs requires Sharp which only runs on Node based systems.");
17
- if (options.renderer === "chromium")
18
- compatibilityHints.push("Using Chromium to generate images is only supported in Node based environments. It's recommended to only use this if you're prerendering");
19
- setHeader(e, "Content-Type", "application/json");
20
- return {
21
- siteConfig: {
22
- url: e.context.siteConfig.get().url
23
- },
24
- compatibilityHints,
25
- cacheKey: ctx.key,
26
- options: ctx.options,
27
- ...options.renderer === "satori" ? await renderer.debug(ctx) : void 0
28
- };
29
- }
30
- switch (extension) {
31
- case "html":
32
- setHeader(e, "Content-Type", `text/html`);
33
- return html(ctx);
34
- case "svg":
35
- if (!debug && !import.meta.dev) {
36
- return createError({
37
- statusCode: 404
38
- });
39
- }
40
- if (ctx.renderer.name !== "satori") {
41
- return createError({
42
- statusCode: 400,
43
- statusMessage: `[Nuxt OG Image] Generating ${extension}'s with ${renderer.name} is not supported.`
44
- });
45
- }
46
- setHeader(e, "Content-Type", `image/svg+xml`);
47
- return (await ctx.renderer.debug(ctx)).svg;
48
- case "png":
49
- case "jpeg":
50
- case "jpg":
51
- if (!renderer.supportedFormats.includes(extension)) {
52
- return createError({
53
- statusCode: 400,
54
- statusMessage: `[Nuxt OG Image] Generating ${extension}'s with ${renderer.name} is not supported.`
55
- });
56
- }
57
- setHeader(e, "Content-Type", `image/${extension === "jpg" ? "jpeg" : extension}`);
58
- break;
59
- default:
60
- return createError({
61
- statusCode: 400,
62
- statusMessage: `[Nuxt OG Image] Invalid request for og.${extension}.`
63
- });
64
- }
65
- const cacheApi = await useOgImageBufferCache(ctx, {
66
- cacheMaxAgeSeconds: ctx.options.cacheMaxAgeSeconds,
67
- baseCacheKey
68
- });
69
- if (typeof cacheApi === "undefined")
70
- return;
71
- if (cacheApi instanceof H3Error)
72
- return cacheApi;
73
- let image = cacheApi.cachedItem;
74
- if (!image) {
75
- image = await renderer.createImage(ctx);
76
- if (image instanceof H3Error)
77
- return image;
78
- if (!image) {
79
- return createError({
80
- statusCode: 500,
81
- statusMessage: `Failed to generate og.${extension}.`
82
- });
83
- }
84
- await cacheApi.update(image);
85
- }
86
- return image;
87
- });
1
+ import { defineEventHandler } from "h3";
2
+ import { imageEventHandler } from "../util/eventHandlers.js";
3
+ export default defineEventHandler(imageEventHandler);
@@ -1,3 +1,3 @@
1
- {
2
- "extends": "../../../.nuxt/tsconfig.server.json"
3
- }
1
+ {
2
+ "extends": "../../../.nuxt/tsconfig.server.json"
3
+ }
@@ -1,8 +1,8 @@
1
- import { prefixStorage } from "unstorage";
1
+ import { useStorage } from "#imports";
2
2
  import { createError, getQuery, handleCacheHeaders, setHeader, setHeaders } from "h3";
3
- import { withTrailingSlash } from "ufo";
4
3
  import { hash } from "ohash";
5
- import { useStorage } from "#imports";
4
+ import { withTrailingSlash } from "ufo";
5
+ import { prefixStorage } from "unstorage";
6
6
  export async function useOgImageBufferCache(ctx, options) {
7
7
  const maxAge = Number(options.cacheMaxAgeSeconds);
8
8
  let enabled = !import.meta.dev && import.meta.env.MODE !== "test" && maxAge > 0;
@@ -0,0 +1,3 @@
1
+ import type { H3Event } from 'h3';
2
+ export declare function fontEventHandler(e: H3Event): Promise<any>;
3
+ export declare function imageEventHandler(e: H3Event): Promise<any>;