nuxt-og-image 3.0.0-rc.5 → 3.0.0-rc.50

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 (403) hide show
  1. package/README.md +5 -10
  2. package/dist/client/200.html +238 -15
  3. package/dist/client/404.html +238 -15
  4. package/dist/client/_nuxt/-7WWnkdy.js +517 -0
  5. package/dist/client/_nuxt/1Je9_Reo.js +136 -0
  6. package/dist/client/_nuxt/1PhbusK7.js +1 -0
  7. package/dist/client/_nuxt/37ic6j3l.js +1 -0
  8. package/dist/client/_nuxt/3ghuYFLd.js +1 -0
  9. package/dist/client/_nuxt/6Kuza3Wr.js +1 -0
  10. package/dist/client/_nuxt/6XBPEST2.js +1 -0
  11. package/dist/client/_nuxt/7fd6vGzb.js +1 -0
  12. package/dist/client/_nuxt/8t4jSAMm.js +1 -0
  13. package/dist/client/_nuxt/9B1nZgL-.js +1 -0
  14. package/dist/client/_nuxt/9ZOzOPqN.js +1 -0
  15. package/dist/client/_nuxt/A1WiD9SJ.js +1 -0
  16. package/dist/client/_nuxt/AgnqFTPX.js +13 -0
  17. package/dist/client/_nuxt/B1nm99XP.js +2 -0
  18. package/dist/client/_nuxt/B1oDq3oi.js +135 -0
  19. package/dist/client/_nuxt/B2BuIiKK.js +1 -0
  20. package/dist/client/_nuxt/B2DkETJQ.js +1 -0
  21. package/dist/client/_nuxt/B4yE-MfL.js +38 -0
  22. package/dist/client/_nuxt/B6nY7VDA.js +25 -0
  23. package/dist/client/_nuxt/B9CT-1u6.js +7 -0
  24. package/dist/client/_nuxt/B9E_xdxs.js +666 -0
  25. package/dist/client/_nuxt/B9S9BZZh.js +1 -0
  26. package/dist/client/_nuxt/BBDuFDsq.js +1 -0
  27. package/dist/client/_nuxt/BBJYjQ0k.js +1 -0
  28. package/dist/client/_nuxt/BBv1LFm6.js +6 -0
  29. package/dist/client/_nuxt/BF6G6X0H.js +1 -0
  30. package/dist/client/_nuxt/BG_OyJVq.js +1 -0
  31. package/dist/client/_nuxt/BH1M7C1g.js +1 -0
  32. package/dist/client/_nuxt/BH_RS3WO.js +1 -0
  33. package/dist/client/_nuxt/BICIrM8O.js +1 -0
  34. package/dist/client/_nuxt/BILqrcpa.js +1 -0
  35. package/dist/client/_nuxt/BIMuYTWL.js +3 -0
  36. package/dist/client/_nuxt/BITGhEdf.js +1 -0
  37. package/dist/client/_nuxt/BIxS-Weu.js +1 -0
  38. package/dist/client/_nuxt/BLluXI4E.js +1 -0
  39. package/dist/client/_nuxt/BN4LRXf6.js +4 -0
  40. package/dist/client/_nuxt/BOnd8D4O.js +186 -0
  41. package/dist/client/_nuxt/BOpLLL-w.js +1 -0
  42. package/dist/client/_nuxt/BPiaQZfK.js +1 -0
  43. package/dist/client/_nuxt/BR6CMsBL.js +1 -0
  44. package/dist/client/_nuxt/BSB_bK09.js +1 -0
  45. package/dist/client/_nuxt/BSyl5yf0.js +1 -0
  46. package/dist/client/_nuxt/BT9ZzGyQ.js +69 -0
  47. package/dist/client/_nuxt/BTtaZsq5.js +1 -0
  48. package/dist/client/_nuxt/BUpeXbsf.js +25 -0
  49. package/dist/client/_nuxt/BWKJ1FCf.js +239 -0
  50. package/dist/client/_nuxt/BXF7Vm5l.js +1 -0
  51. package/dist/client/_nuxt/BXfENWL6.js +1 -0
  52. package/dist/client/_nuxt/BZz1Hhek.js +1 -0
  53. package/dist/client/_nuxt/B_SUYfiV.js +1 -0
  54. package/dist/client/_nuxt/BaNxgKSR.js +17 -0
  55. package/dist/client/_nuxt/BaWyeHV_.js +1 -0
  56. package/dist/client/_nuxt/BaedD2tq.js +1 -0
  57. package/dist/client/_nuxt/BbJj1K1w.js +1 -0
  58. package/dist/client/_nuxt/Bbv8ARUV.js +13 -0
  59. package/dist/client/_nuxt/Bd7iooY8.js +8 -0
  60. package/dist/client/_nuxt/Bdb36Id5.js +1 -0
  61. package/dist/client/_nuxt/BeX7Iu5M.js +90 -0
  62. package/dist/client/_nuxt/BeocmOPF.js +1 -0
  63. package/dist/client/_nuxt/Bg0wAK5a.js +100 -0
  64. package/dist/client/_nuxt/BgBwMnrY.js +76 -0
  65. package/dist/client/_nuxt/Bgpqy2XC.js +1 -0
  66. package/dist/client/_nuxt/Bh8mriwU.js +17 -0
  67. package/dist/client/_nuxt/BiDE021q.js +1 -0
  68. package/dist/client/_nuxt/Bj5xdiaE.js +1 -0
  69. package/dist/client/_nuxt/BlxWTfDV.js +699 -0
  70. package/dist/client/_nuxt/BmCW-tYz.js +86 -0
  71. package/dist/client/_nuxt/Bn5gmY5k.js +1 -0
  72. package/dist/client/_nuxt/BrGg7AAd.js +1 -0
  73. package/dist/client/_nuxt/BsfQk1vf.js +1 -0
  74. package/dist/client/_nuxt/Bsp1M94H.js +1 -0
  75. package/dist/client/_nuxt/BsvsQ1iS.js +1 -0
  76. package/dist/client/_nuxt/BswfO-CF.js +1 -0
  77. package/dist/client/_nuxt/Btshr8M_.js +70 -0
  78. package/dist/client/_nuxt/BxwAa5i0.js +1 -0
  79. package/dist/client/_nuxt/ByMv4Xf1.js +1 -0
  80. package/dist/client/_nuxt/Bz4xi2rU.js +1 -0
  81. package/dist/client/_nuxt/C15OxdQ5.js +1 -0
  82. package/dist/client/_nuxt/C1DVX8_8.js +831 -0
  83. package/dist/client/_nuxt/C2TBxDwV.js +1 -0
  84. package/dist/client/_nuxt/C3YqBJkQ.js +1 -0
  85. package/dist/client/_nuxt/C5gCGmDW.js +200 -0
  86. package/dist/client/_nuxt/C6Aznpr-.js +1 -0
  87. package/dist/client/_nuxt/C7oZ9nno.js +1 -0
  88. package/dist/client/_nuxt/C86elO-m.js +1 -0
  89. package/dist/client/_nuxt/C9d3aiqh.js +1 -0
  90. package/dist/client/_nuxt/CApMHEaB.js +1 -0
  91. package/dist/client/_nuxt/CBL0qBdF.js +1 -0
  92. package/dist/client/_nuxt/CBPJd_fO.js +1 -0
  93. package/dist/client/_nuxt/CG4fK2Nq.js +21 -0
  94. package/dist/client/_nuxt/CGQbO34C.js +1 -0
  95. package/dist/client/_nuxt/CIekO_uJ.js +1 -0
  96. package/dist/client/_nuxt/CJQrLysU.js +1 -0
  97. package/dist/client/_nuxt/CL7Ixq1B.js +1 -0
  98. package/dist/client/_nuxt/CMDmr8et.js +2 -0
  99. package/dist/client/_nuxt/CPHkTjfH.js +1 -0
  100. package/dist/client/_nuxt/CQTpvb7m.js +1 -0
  101. package/dist/client/_nuxt/CQUCfALx.js +13 -0
  102. package/dist/client/_nuxt/CRDKj6ck.js +1 -0
  103. package/dist/client/_nuxt/CRWwmX0L.js +1 -0
  104. package/dist/client/_nuxt/CRlnGVMD.js +1 -0
  105. package/dist/client/_nuxt/CThH5sBG.js +1 -0
  106. package/dist/client/_nuxt/CUVblut_.js +1 -0
  107. package/dist/client/_nuxt/CX_FIdg1.js +1 -0
  108. package/dist/client/_nuxt/CZZ6oYdA.js +1 -0
  109. package/dist/client/_nuxt/C_8Fx7bH.js +1 -0
  110. package/dist/client/_nuxt/CbViG2Xw.js +74 -0
  111. package/dist/client/_nuxt/CbYhyuC0.js +505 -0
  112. package/dist/client/_nuxt/Cda-MJFk.js +1 -0
  113. package/dist/client/_nuxt/CdedUr_-.js +1 -0
  114. package/dist/client/_nuxt/CfPQhs6g.js +7 -0
  115. package/dist/client/_nuxt/Cicx_DS6.js +1 -0
  116. package/dist/client/_nuxt/ClXEvkw9.js +68 -0
  117. package/dist/client/_nuxt/CoEqzGFw.js +44 -0
  118. package/dist/client/_nuxt/CowR2XfX.js +1 -0
  119. package/dist/client/_nuxt/CrhH3_Og.js +1 -0
  120. package/dist/client/_nuxt/CrjQeCwm.js +1 -0
  121. package/dist/client/_nuxt/CsTmP73Z.js +1 -0
  122. package/dist/client/_nuxt/CsYA0RN7.js +1 -0
  123. package/dist/client/_nuxt/CsyjKwr8.js +1 -0
  124. package/dist/client/_nuxt/CsyrCbsw.js +699 -0
  125. package/dist/client/_nuxt/Cthz8VOO.js +771 -0
  126. package/dist/client/_nuxt/CupVZNk8.js +25 -0
  127. package/dist/client/_nuxt/CxrokwfH.js +1 -0
  128. package/dist/client/_nuxt/CzPA46E-.js +1 -0
  129. package/dist/client/_nuxt/D-pQtGOP.js +1 -0
  130. package/dist/client/_nuxt/D384ylkT.js +1 -0
  131. package/dist/client/_nuxt/D3VXSfF0.js +1 -0
  132. package/dist/client/_nuxt/D4LaosRr.js +1 -0
  133. package/dist/client/_nuxt/D4LhxNOI.js +1 -0
  134. package/dist/client/_nuxt/D4k753MY.js +1 -0
  135. package/dist/client/_nuxt/D6NljDpC.js +1 -0
  136. package/dist/client/_nuxt/D6pmzCqS.js +1 -0
  137. package/dist/client/_nuxt/D7gg1Usp.js +1 -0
  138. package/dist/client/_nuxt/DAGYewaG.js +559 -0
  139. package/dist/client/_nuxt/DAVo6uMX.js +1 -0
  140. package/dist/client/_nuxt/DBxHOdLe.js +1 -0
  141. package/dist/client/_nuxt/DC4hdoM9.js +87 -0
  142. package/dist/client/_nuxt/DC8MraHL.js +666 -0
  143. package/dist/client/_nuxt/DCAtC51B.js +80 -0
  144. package/dist/client/_nuxt/DCdPDLy4.js +40 -0
  145. package/dist/client/_nuxt/DCj4DH6i.js +1 -0
  146. package/dist/client/_nuxt/DCk2z-Tu.js +129 -0
  147. package/dist/client/_nuxt/DDRuGeQH.js +1 -0
  148. package/dist/client/_nuxt/DE2vi0a_.js +1 -0
  149. package/dist/client/_nuxt/DFF-wSSt.js +8 -0
  150. package/dist/client/_nuxt/DGO8GyiP.js +1 -0
  151. package/dist/client/_nuxt/DHmGyzbM.js +109 -0
  152. package/dist/client/_nuxt/DISxKEhY.js +756 -0
  153. package/dist/client/_nuxt/DIr-ordK.js +1 -0
  154. package/dist/client/_nuxt/DJZWsvj0.js +1 -0
  155. package/dist/client/_nuxt/DLP9ZvWb.js +3 -0
  156. package/dist/client/_nuxt/DNR26wTC.js +1 -0
  157. package/dist/client/_nuxt/DOtRmeXT.js +1 -0
  158. package/dist/client/_nuxt/DSrLtGYv.js +15 -0
  159. package/dist/client/_nuxt/DSsji4Hu.js +1 -0
  160. package/dist/client/_nuxt/DUdlC5k_.js +1 -0
  161. package/dist/client/_nuxt/DVfdqzEq.js +1 -0
  162. package/dist/client/_nuxt/DXFkqnOI.js +816 -0
  163. package/dist/client/_nuxt/DXT9h7v2.js +1 -0
  164. package/dist/client/_nuxt/DXZpi2gR.js +1 -0
  165. package/dist/client/_nuxt/DXpYegZJ.js +1 -0
  166. package/dist/client/_nuxt/DY7_9Ga-.js +1 -0
  167. package/dist/client/_nuxt/DYI1rfmx.js +25 -0
  168. package/dist/client/_nuxt/DZ3fVoEH.js +1 -0
  169. package/dist/client/_nuxt/DZqG9GXz.js +50 -0
  170. package/dist/client/_nuxt/DbK06e1c.js +21 -0
  171. package/dist/client/_nuxt/Dble9ECP.js +1 -0
  172. package/dist/client/_nuxt/Dch3xQiY.js +699 -0
  173. package/dist/client/_nuxt/DdacRhvC.js +1 -0
  174. package/dist/client/_nuxt/DeVv6D4_.js +1 -0
  175. package/dist/client/_nuxt/Dez-Qvcc.js +544 -0
  176. package/dist/client/_nuxt/DfUNg_8t.js +1 -0
  177. package/dist/client/_nuxt/DfeQjIbs.js +5 -0
  178. package/dist/client/_nuxt/Dg0DGYq4.js +14 -0
  179. package/dist/client/_nuxt/DggdVF2v.js +1 -0
  180. package/dist/client/_nuxt/DhFF74a2.js +1 -0
  181. package/dist/client/_nuxt/DjTlIhuc.js +1 -0
  182. package/dist/client/_nuxt/DmDrTTlz.js +1 -0
  183. package/dist/client/_nuxt/DnLUQrgA.js +1 -0
  184. package/dist/client/_nuxt/DnhXxWz-.js +1 -0
  185. package/dist/client/_nuxt/DouzTJIq.js +1 -0
  186. package/dist/client/_nuxt/DsfXcHUZ.js +29 -0
  187. package/dist/client/_nuxt/DsudziMp.js +16 -0
  188. package/dist/client/_nuxt/Dszwcx0o.js +1 -0
  189. package/dist/client/_nuxt/DvyTQcux.js +1 -0
  190. package/dist/client/_nuxt/Dwo2i-71.js +1 -0
  191. package/dist/client/_nuxt/DwuVtWc2.js +518 -0
  192. package/dist/client/_nuxt/DywwDckn.js +159 -0
  193. package/dist/client/_nuxt/Dz2Ca8U2.js +1 -0
  194. package/dist/client/_nuxt/DzPyIVdT.js +9 -0
  195. package/dist/client/_nuxt/DzwdaLuO.js +223 -0
  196. package/dist/client/_nuxt/Eh5U-gDp.js +52 -0
  197. package/dist/client/_nuxt/GYW2pyXg.js +1 -0
  198. package/dist/client/_nuxt/I4qd5QHW.js +10 -0
  199. package/dist/client/_nuxt/IHMnEr_d.js +1 -0
  200. package/dist/client/_nuxt/IconCSS.R7ZScADi.css +1 -0
  201. package/dist/client/_nuxt/KEYLhlmT.js +1 -0
  202. package/dist/client/_nuxt/NL97_oaV.js +1 -0
  203. package/dist/client/_nuxt/PWN5J14X.js +1 -0
  204. package/dist/client/_nuxt/PifQWv0n.js +1 -0
  205. package/dist/client/_nuxt/QZ3jNtnE.js +515 -0
  206. package/dist/client/_nuxt/RCJZWN-0.js +81 -0
  207. package/dist/client/_nuxt/RE3ujT-k.js +1 -0
  208. package/dist/client/_nuxt/RgJsN3zu.js +1 -0
  209. package/dist/client/_nuxt/RqY_Nz63.js +1 -0
  210. package/dist/client/_nuxt/Sfo2eW0G.js +274 -0
  211. package/dist/client/_nuxt/T9ysyp6P.js +62 -0
  212. package/dist/client/_nuxt/TQ9oWRfF.js +1 -0
  213. package/dist/client/_nuxt/UREJT2Bw.js +1 -0
  214. package/dist/client/_nuxt/Urb1RsFe.js +1 -0
  215. package/dist/client/_nuxt/WoBtJUue.js +1 -0
  216. package/dist/client/_nuxt/YxQm0tCS.js +1 -0
  217. package/dist/client/_nuxt/ZQC2c-5V.js +9 -0
  218. package/dist/client/_nuxt/beD-FUib.js +1 -0
  219. package/dist/client/_nuxt/bmJ2objS.js +1 -0
  220. package/dist/client/_nuxt/builds/latest.json +1 -1
  221. package/dist/client/_nuxt/builds/meta/00641375-8e8c-44ba-9041-bba25cf56aef.json +1 -0
  222. package/dist/client/_nuxt/doGI2cFk.js +1 -0
  223. package/dist/client/_nuxt/eJfcURhx.js +1 -0
  224. package/dist/client/_nuxt/entry.DSfe2lIv.css +1 -0
  225. package/dist/client/_nuxt/error-404.ORekjfyJ.css +1 -0
  226. package/dist/client/_nuxt/hXH8Gyq8.js +1 -0
  227. package/dist/client/_nuxt/i0IPvypD.js +1 -0
  228. package/dist/client/_nuxt/iSbrOpM4.js +1 -0
  229. package/dist/client/_nuxt/j8KhMG0x.js +1 -0
  230. package/dist/client/_nuxt/jaXbsbtS.js +1 -0
  231. package/dist/client/_nuxt/nclm9rTJ.js +266 -0
  232. package/dist/client/_nuxt/o-cPXEvd.js +575 -0
  233. package/dist/client/_nuxt/rS0jd3Ly.js +1 -0
  234. package/dist/client/_nuxt/sMI-pExk.js +1 -0
  235. package/dist/client/_nuxt/sQpxpyUs.js +1 -0
  236. package/dist/client/_nuxt/vMsNTMhM.js +5 -0
  237. package/dist/client/_nuxt/wChcbJ1V.js +37 -0
  238. package/dist/client/_nuxt/wORFcijT.js +32 -0
  239. package/dist/client/_nuxt/wPLeKH6q.js +40 -0
  240. package/dist/client/_nuxt/xPNGhBYe.js +1 -0
  241. package/dist/client/index.html +238 -15
  242. package/dist/module.d.mts +13 -5
  243. package/dist/module.d.ts +13 -5
  244. package/dist/module.json +2 -2
  245. package/dist/module.mjs +195 -128
  246. package/dist/runtime/assets/Inter-400.ttf.base64 +1 -0
  247. package/dist/runtime/assets/Inter-700.ttf.base64 +1 -0
  248. package/dist/runtime/nitro/og-image/bindings/chromium/chrome-launcher.mjs +9 -0
  249. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.d.ts +2 -0
  250. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.mjs +36 -0
  251. package/dist/runtime/nitro/og-image/bindings/chromium/playwright.d.ts +2 -0
  252. package/dist/runtime/nitro/og-image/bindings/chromium/playwright.mjs +6 -0
  253. package/dist/runtime/nitro/og-image/bindings/css-inline/node.d.ts +8 -0
  254. package/dist/runtime/nitro/og-image/bindings/css-inline/node.mjs +7 -0
  255. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm-fs.d.ts +8 -0
  256. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm-fs.mjs +8 -0
  257. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm.d.ts +8 -0
  258. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm.mjs +7 -0
  259. package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm-fs.mjs +1 -1
  260. package/dist/runtime/nitro/og-image/bindings/resvg/wasm.mjs +5 -0
  261. package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm-fs.mjs +1 -1
  262. package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm.mjs +1 -2
  263. package/dist/runtime/nitro/og-image/cache.d.ts +7 -0
  264. package/dist/runtime/{core/cache/htmlPayload.mjs → nitro/og-image/cache.mjs} +4 -1
  265. package/dist/runtime/{core/renderers → nitro/og-image}/chromium/screenshot.mjs +1 -1
  266. package/dist/runtime/nitro/og-image/context.d.ts +5 -0
  267. package/dist/runtime/nitro/og-image/context.mjs +177 -0
  268. package/dist/runtime/nitro/og-image/instances.d.ts +2 -0
  269. package/dist/runtime/nitro/og-image/instances.mjs +10 -0
  270. package/dist/runtime/{core/font/fetch.d.ts → nitro/og-image/satori/font.d.ts} +1 -1
  271. package/dist/runtime/nitro/og-image/satori/font.mjs +33 -0
  272. package/dist/runtime/{core/renderers → nitro/og-image}/satori/instances.d.ts +0 -2
  273. package/dist/runtime/{core/renderers → nitro/og-image}/satori/instances.mjs +2 -11
  274. package/dist/runtime/nitro/og-image/satori/plugins/classes.mjs +17 -0
  275. package/dist/runtime/nitro/og-image/satori/plugins/encoding.mjs +17 -0
  276. package/dist/runtime/nitro/og-image/satori/plugins/imageSrc.mjs +82 -0
  277. package/dist/runtime/{core/renderers/satori/index.mjs → nitro/og-image/satori/renderer.mjs} +28 -15
  278. package/dist/runtime/{core/html/applyEmojis.d.ts → nitro/og-image/satori/transforms/emojis.d.ts} +3 -1
  279. package/dist/runtime/nitro/og-image/satori/transforms/emojis.mjs +3597 -0
  280. package/dist/runtime/{core/html/applyInlineCss.d.ts → nitro/og-image/satori/transforms/inlineCss.d.ts} +1 -1
  281. package/dist/runtime/nitro/og-image/satori/transforms/inlineCss.mjs +41 -0
  282. package/dist/runtime/{core/renderers → nitro/og-image}/satori/vnodes.mjs +9 -7
  283. package/dist/runtime/nitro/og-image/templates/html.d.ts +2 -0
  284. package/dist/runtime/{core/html/devIframeTemplate.mjs → nitro/og-image/templates/html.mjs} +17 -9
  285. package/dist/runtime/nitro/plugins/nuxt-content.mjs +7 -4
  286. package/dist/runtime/nitro/plugins/prerender.d.ts +1 -1
  287. package/dist/runtime/nitro/plugins/prerender.mjs +8 -16
  288. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/debug.json.d.ts +1 -1
  289. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/debug.json.mjs +1 -1
  290. package/dist/runtime/{server/routes/__og-image__/font-[name]-[weight].[extension].mjs → nitro/routes/font.mjs} +18 -1
  291. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/image.mjs +9 -10
  292. package/dist/runtime/nitro/tsconfig.json +3 -0
  293. package/dist/runtime/{cache.d.ts → nitro/util/cache.d.ts} +1 -1
  294. package/dist/runtime/nitro/util/encoding.d.ts +3 -0
  295. package/dist/runtime/nitro/util/encoding.mjs +15 -0
  296. package/dist/runtime/nitro/util/kit.d.ts +6 -0
  297. package/dist/runtime/nitro/util/kit.mjs +32 -0
  298. package/dist/runtime/{components → nuxt/components}/OgImage/OgImage.d.ts +2 -2
  299. package/dist/runtime/{components → nuxt/components}/OgImage/OgImageScreenshot.d.ts +2 -2
  300. package/dist/runtime/nuxt/components/Templates/Community/Frame.vue +64 -0
  301. package/dist/runtime/{components → nuxt/components}/Templates/Community/NuxtSeo.vue +1 -1
  302. package/dist/runtime/{components → nuxt/components}/Templates/Community/UnJs.vue +2 -2
  303. package/dist/runtime/{composables → nuxt/composables}/defineOgImage.d.ts +1 -1
  304. package/dist/runtime/{composables → nuxt/composables}/defineOgImage.mjs +6 -11
  305. package/dist/runtime/{composables → nuxt/composables}/defineOgImageComponent.d.ts +1 -1
  306. package/dist/runtime/{composables → nuxt/composables}/defineOgImageScreenshot.d.ts +1 -1
  307. package/dist/runtime/nuxt/composables/mock.d.ts +0 -0
  308. package/dist/runtime/nuxt/composables/mock.mjs +6 -0
  309. package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.mjs +14 -5
  310. package/dist/runtime/nuxt/plugins/route-rule-og-image.server.mjs +1 -1
  311. package/dist/runtime/nuxt/utils.d.ts +2 -1
  312. package/dist/runtime/nuxt/utils.mjs +1 -1
  313. package/dist/runtime/{utils.pure.d.ts → pure.d.ts} +1 -0
  314. package/dist/runtime/{utils.pure.mjs → pure.mjs} +12 -3
  315. package/dist/runtime/{utils.d.ts → shared.d.ts} +1 -1
  316. package/dist/runtime/{utils.mjs → shared.mjs} +3 -2
  317. package/dist/runtime/types.d.ts +12 -5
  318. package/dist/types.d.mts +2 -2
  319. package/package.json +78 -53
  320. package/dist/client/_nuxt/IconCSS.b7e5876d.js +0 -1
  321. package/dist/client/_nuxt/IconCSS.f0b56d3e.css +0 -1
  322. package/dist/client/_nuxt/builds/meta/4b44e059-802c-46c9-90d2-f73641cbd674.json +0 -1
  323. package/dist/client/_nuxt/entry.006451f1.js +0 -108
  324. package/dist/client/_nuxt/entry.a30f63d0.css +0 -1
  325. package/dist/client/_nuxt/error-404.b751fa02.css +0 -1
  326. package/dist/client/_nuxt/error-404.d6ff1eb0.js +0 -1
  327. package/dist/client/_nuxt/error-500.3acec475.js +0 -1
  328. package/dist/client/_nuxt/vanilla-picker-NKbIFE8h.23409a58.js +0 -8
  329. package/dist/runtime/core/bindings/chromium/node.mjs +0 -33
  330. package/dist/runtime/core/bindings/css-inline/node.d.ts +0 -2
  331. package/dist/runtime/core/bindings/css-inline/node.mjs +0 -2
  332. package/dist/runtime/core/bindings/resvg/wasm.mjs +0 -6
  333. package/dist/runtime/core/cache/emojis.d.ts +0 -1
  334. package/dist/runtime/core/cache/emojis.mjs +0 -5
  335. package/dist/runtime/core/cache/fonts.d.ts +0 -3
  336. package/dist/runtime/core/cache/fonts.mjs +0 -6
  337. package/dist/runtime/core/cache/htmlPayload.d.ts +0 -5
  338. package/dist/runtime/core/cache/prerender.d.ts +0 -2
  339. package/dist/runtime/core/cache/prerender.mjs +0 -5
  340. package/dist/runtime/core/env/assets.d.ts +0 -1
  341. package/dist/runtime/core/env/assets.mjs +0 -11
  342. package/dist/runtime/core/font/fetch.mjs +0 -36
  343. package/dist/runtime/core/html/applyEmojis.mjs +0 -37
  344. package/dist/runtime/core/html/applyInlineCss.mjs +0 -32
  345. package/dist/runtime/core/html/devIframeTemplate.d.ts +0 -2
  346. package/dist/runtime/core/html/fetchIsland.d.ts +0 -3
  347. package/dist/runtime/core/html/fetchIsland.mjs +0 -17
  348. package/dist/runtime/core/options/extract.d.ts +0 -3
  349. package/dist/runtime/core/options/extract.mjs +0 -49
  350. package/dist/runtime/core/options/fetch.d.ts +0 -3
  351. package/dist/runtime/core/options/fetch.mjs +0 -32
  352. package/dist/runtime/core/renderers/satori/plugins/encoding.mjs +0 -8
  353. package/dist/runtime/core/renderers/satori/plugins/imageSrc.mjs +0 -75
  354. package/dist/runtime/core/renderers/satori/plugins/twClasses.mjs +0 -8
  355. package/dist/runtime/core/utils/resolveRendererContext.d.ts +0 -3
  356. package/dist/runtime/core/utils/resolveRendererContext.mjs +0 -97
  357. package/dist/runtime/nitro/utils.d.ts +0 -2
  358. package/dist/runtime/nitro/utils.mjs +0 -16
  359. package/dist/runtime/server/assets/inter-latin-ext-400-normal.woff +0 -0
  360. package/dist/runtime/server/assets/inter-latin-ext-700-normal.woff +0 -0
  361. /package/dist/client/_nuxt/{error-500.69009e70.css → error-500.BIuFL0tW.css} +0 -0
  362. /package/dist/runtime/{core/bindings/chromium/node.d.ts → nitro/og-image/bindings/chromium/chrome-launcher.d.ts} +0 -0
  363. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/node.d.ts +0 -0
  364. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/node.mjs +0 -0
  365. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm-fs.d.ts +0 -0
  366. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm.d.ts +0 -0
  367. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/node.d.ts +0 -0
  368. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/node.mjs +0 -0
  369. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm-fs.d.ts +0 -0
  370. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm.d.ts +0 -0
  371. /package/dist/runtime/{core → nitro/og-image}/bindings/sharp/node.d.ts +0 -0
  372. /package/dist/runtime/{core → nitro/og-image}/bindings/sharp/node.mjs +0 -0
  373. /package/dist/runtime/{core/renderers/chromium/index.d.ts → nitro/og-image/chromium/renderer.d.ts} +0 -0
  374. /package/dist/runtime/{core/renderers/chromium/index.mjs → nitro/og-image/chromium/renderer.mjs} +0 -0
  375. /package/dist/runtime/{core/renderers → nitro/og-image}/chromium/screenshot.d.ts +0 -0
  376. /package/dist/runtime/{core/renderers/satori/plugins/emojis.d.ts → nitro/og-image/satori/plugins/classes.d.ts} +0 -0
  377. /package/dist/runtime/{core/renderers/satori/plugins/encoding.d.ts → nitro/og-image/satori/plugins/emojis.d.ts} +0 -0
  378. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/emojis.mjs +0 -0
  379. /package/dist/runtime/{core/renderers/satori/plugins/flex.d.ts → nitro/og-image/satori/plugins/encoding.d.ts} +0 -0
  380. /package/dist/runtime/{core/renderers/satori/plugins/imageSrc.d.ts → nitro/og-image/satori/plugins/flex.d.ts} +0 -0
  381. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/flex.mjs +0 -0
  382. /package/dist/runtime/{core/renderers/satori/plugins/twClasses.d.ts → nitro/og-image/satori/plugins/imageSrc.d.ts} +0 -0
  383. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/unocss.d.ts +0 -0
  384. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/unocss.mjs +0 -0
  385. /package/dist/runtime/{core/renderers/satori/index.d.ts → nitro/og-image/satori/renderer.d.ts} +0 -0
  386. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/utils.d.ts +0 -0
  387. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/utils.mjs +0 -0
  388. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/vnodes.d.ts +0 -0
  389. /package/dist/runtime/{server/routes/__og-image__/font-[name]-[weight].[extension].d.ts → nitro/routes/font.d.ts} +0 -0
  390. /package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/image.d.ts +0 -0
  391. /package/dist/runtime/{cache.mjs → nitro/util/cache.mjs} +0 -0
  392. /package/dist/runtime/{core/utils → nitro/util}/wasm.d.ts +0 -0
  393. /package/dist/runtime/{core/utils → nitro/util}/wasm.mjs +0 -0
  394. /package/dist/runtime/{components → nuxt/components}/OgImage/OgImage.mjs +0 -0
  395. /package/dist/runtime/{components → nuxt/components}/OgImage/OgImageScreenshot.mjs +0 -0
  396. /package/dist/runtime/{components → nuxt/components}/Templates/Community/BrandedLogo.vue +0 -0
  397. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Nuxt.vue +0 -0
  398. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Pergel.vue +0 -0
  399. /package/dist/runtime/{components → nuxt/components}/Templates/Community/SimpleBlog.vue +0 -0
  400. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Wave.vue +0 -0
  401. /package/dist/runtime/{components → nuxt/components}/Templates/Community/WithEmoji.vue +0 -0
  402. /package/dist/runtime/{composables → nuxt/composables}/defineOgImageComponent.mjs +0 -0
  403. /package/dist/runtime/{composables → nuxt/composables}/defineOgImageScreenshot.mjs +0 -0
@@ -0,0 +1,9 @@
1
+ import playwrightCore from "playwright-core";
2
+ import { Launcher } from "chrome-launcher";
3
+ const chromePath = Launcher.getFirstInstallation();
4
+ export async function createBrowser() {
5
+ return playwrightCore.chromium.launch({
6
+ headless: true,
7
+ executablePath: chromePath
8
+ });
9
+ }
@@ -0,0 +1,2 @@
1
+ import type { Browser } from 'playwright-core';
2
+ export declare function createBrowser(): Promise<Browser | void>;
@@ -0,0 +1,36 @@
1
+ import { execa } from "execa";
2
+ import terminate from "terminate";
3
+ import { createConsola } from "consola";
4
+ import playwrightCore from "playwright-core";
5
+ let installedChromium = false;
6
+ let installChromiumPromise;
7
+ export async function createBrowser() {
8
+ if (installChromiumPromise)
9
+ await installChromiumPromise;
10
+ if (!installedChromium) {
11
+ installChromiumPromise = new Promise((_resolve) => {
12
+ const logger = createConsola().withTag("Nuxt OG Image");
13
+ logger.info("Installing Chromium install for og:image generation...");
14
+ const installChromeProcess = execa("npx", ["playwright", "install", "chromium"], {
15
+ stdio: "inherit"
16
+ });
17
+ installChromeProcess.stderr?.pipe(process.stderr);
18
+ new Promise((resolve) => {
19
+ installChromeProcess.on("exit", (e) => {
20
+ if (e !== 0)
21
+ logger.error("Failed to install Playwright dependency for og:image generation. Trying anyway...");
22
+ resolve(true);
23
+ });
24
+ }).then(() => {
25
+ installChromeProcess.pid && terminate(installChromeProcess.pid);
26
+ logger.info("Installed Chromium install for og:image generation.");
27
+ _resolve();
28
+ });
29
+ }).then(() => {
30
+ installedChromium = true;
31
+ });
32
+ }
33
+ return await playwrightCore.chromium.launch({
34
+ headless: true
35
+ });
36
+ }
@@ -0,0 +1,2 @@
1
+ import type { Browser } from 'playwright-core';
2
+ export declare function createBrowser(): Promise<Browser | void>;
@@ -0,0 +1,6 @@
1
+ import playwright from "playwright";
2
+ export async function createBrowser() {
3
+ return await playwright.chromium.launch({
4
+ headless: true
5
+ });
6
+ }
@@ -0,0 +1,8 @@
1
+ import { inline } from '@css-inline/css-inline';
2
+ declare const _default: {
3
+ initWasmPromise: Promise<void>;
4
+ cssInline: {
5
+ inline: typeof inline;
6
+ };
7
+ };
8
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import { inline } from "@css-inline/css-inline";
2
+ export default {
3
+ initWasmPromise: Promise.resolve(),
4
+ cssInline: {
5
+ inline
6
+ }
7
+ };
@@ -0,0 +1,8 @@
1
+ import { inline } from '@css-inline/css-inline-wasm';
2
+ declare const _default: {
3
+ initWasmPromise: Promise<void>;
4
+ cssInline: {
5
+ inline: typeof inline;
6
+ };
7
+ };
8
+ export default _default;
@@ -0,0 +1,8 @@
1
+ import { initWasm, inline } from "@css-inline/css-inline-wasm";
2
+ import { readWasmFile } from "../../../util/wasm.mjs";
3
+ export default {
4
+ initWasmPromise: initWasm(readWasmFile("@css-inline/css-inline-wasm/index_bg.wasm")),
5
+ cssInline: {
6
+ inline
7
+ }
8
+ };
@@ -0,0 +1,8 @@
1
+ import { inline } from '@css-inline/css-inline-wasm';
2
+ declare const _default: {
3
+ initWasmPromise: Promise<void>;
4
+ cssInline: {
5
+ inline: typeof inline;
6
+ };
7
+ };
8
+ export default _default;
@@ -0,0 +1,7 @@
1
+ import { initWasm, inline } from "@css-inline/css-inline-wasm";
2
+ export default {
3
+ initWasmPromise: initWasm(import("@css-inline/css-inline-wasm/index_bg.wasm?module").then((r) => r.default || r)),
4
+ cssInline: {
5
+ inline
6
+ }
7
+ };
@@ -1,5 +1,5 @@
1
1
  import { Resvg as _Resvg, initWasm } from "@resvg/resvg-wasm";
2
- import { readWasmFile } from "../../utils/wasm.mjs";
2
+ import { readWasmFile } from "../../../util/wasm.mjs";
3
3
  export default {
4
4
  initWasmPromise: initWasm(readWasmFile("@resvg/resvg-wasm/index_bg.wasm")),
5
5
  Resvg: _Resvg
@@ -0,0 +1,5 @@
1
+ import { Resvg as _Resvg, initWasm } from "@resvg/resvg-wasm";
2
+ export default {
3
+ initWasmPromise: initWasm(import("@resvg/resvg-wasm/index_bg.wasm?module").then((r) => r.default || r)),
4
+ Resvg: _Resvg
5
+ };
@@ -1,6 +1,6 @@
1
1
  import _satori, { init } from "satori/wasm";
2
2
  import initYoga from "yoga-wasm-web";
3
- import { readWasmFile } from "../../utils/wasm.mjs";
3
+ import { readWasmFile } from "../../../util/wasm.mjs";
4
4
  const wasm = readWasmFile("yoga-wasm-web/dist/yoga.wasm").then(async (yoga) => await initYoga(yoga));
5
5
  export default {
6
6
  initWasmPromise: new Promise((resolve) => {
@@ -1,8 +1,7 @@
1
1
  import _satori from "satori/wasm";
2
2
  import initYoga from "yoga-wasm-web";
3
3
  import { init } from "satori";
4
- import { importWasm } from "../../utils/wasm.mjs";
5
- const wasm = importWasm(import("yoga-wasm-web/dist/yoga.wasm")).then(async (yoga) => await initYoga(yoga));
4
+ const wasm = import("yoga-wasm-web/dist/yoga.wasm?module").then(async (yoga) => await initYoga(yoga.default || yoga));
6
5
  export default {
7
6
  initWasmPromise: new Promise((resolve) => {
8
7
  wasm.then((yoga) => {
@@ -0,0 +1,7 @@
1
+ import type { Storage } from 'unstorage';
2
+ import type { OgImageOptions } from '../../types';
3
+ export declare const htmlPayloadCache: Storage<{
4
+ expiresAt: number;
5
+ value: OgImageOptions;
6
+ }>;
7
+ export declare const prerenderOptionsCache: Storage<OgImageOptions> | undefined;
@@ -2,5 +2,8 @@ import { createStorage } from "unstorage";
2
2
  import lruCacheDriver from "unstorage/drivers/lru-cache";
3
3
  export const htmlPayloadCache = createStorage({
4
4
  // short cache time so we don't need many entries at runtime
5
- driver: lruCacheDriver({ max: import.meta.prerender ? 1e3 : 50 })
5
+ driver: lruCacheDriver({ max: import.meta.prerender ? 1e4 : 50 })
6
6
  });
7
+ export const prerenderOptionsCache = import.meta.prerender ? createStorage({
8
+ driver: lruCacheDriver({ max: 1e4 })
9
+ }) : void 0;
@@ -1,5 +1,5 @@
1
1
  import { joinURL, withQuery } from "ufo";
2
- import { useOgImageRuntimeConfig } from "../../../utils.mjs";
2
+ import { useOgImageRuntimeConfig } from "../../../shared.mjs";
3
3
  import { useNitroOrigin } from "#imports";
4
4
  export async function createScreenshot({ basePath, e, options, extension }, browser) {
5
5
  const { colorPreference } = useOgImageRuntimeConfig();
@@ -0,0 +1,5 @@
1
+ import type { H3Error, H3Event } from 'h3';
2
+ import type { OgImageOptions, OgImageRenderEventContext } from '../../types';
3
+ export declare function resolvePathCacheKey(e: H3Event, path?: string): string;
4
+ export declare function resolveContext(e: H3Event): Promise<H3Error | OgImageRenderEventContext>;
5
+ export declare function extractAndNormaliseOgImageOptions(html: string): OgImageOptions | false;
@@ -0,0 +1,177 @@
1
+ import { parseURL, withQuery, withoutLeadingSlash, withoutTrailingSlash } from "ufo";
2
+ import { createError, getQuery } from "h3";
3
+ import { defu } from "defu";
4
+ import { normalizeKey } from "unstorage";
5
+ import { hash } from "ohash";
6
+ import { separateProps, useOgImageRuntimeConfig } from "../../shared.mjs";
7
+ import { createNitroRouteRuleMatcher } from "../util/kit.mjs";
8
+ import { decodeObjectHtmlEntities } from "../util/encoding.mjs";
9
+ import { htmlPayloadCache, prerenderOptionsCache } from "./cache.mjs";
10
+ import { useChromiumRenderer, useSatoriRenderer } from "./instances.mjs";
11
+ import { useNitroApp } from "#internal/nitro/app";
12
+ export function resolvePathCacheKey(e, path) {
13
+ const siteConfig = e.context.siteConfig.get();
14
+ const basePath = withoutTrailingSlash(withoutLeadingSlash(normalizeKey(path || e.path)));
15
+ return [
16
+ !basePath || basePath === "/" ? "index" : basePath,
17
+ hash([
18
+ basePath,
19
+ siteConfig.url,
20
+ hash(getQuery(e))
21
+ ])
22
+ ].join(":");
23
+ }
24
+ export async function resolveContext(e) {
25
+ const runtimeConfig = useOgImageRuntimeConfig();
26
+ const path = parseURL(e.path).pathname;
27
+ const extension = path.split(".").pop();
28
+ if (!extension) {
29
+ return createError({
30
+ statusCode: 400,
31
+ statusMessage: `[Nuxt OG Image] Missing OG Image type.`
32
+ });
33
+ }
34
+ if (!["png", "jpeg", "jpg", "svg", "html", "json"].includes(extension)) {
35
+ return createError({
36
+ statusCode: 400,
37
+ statusMessage: `[Nuxt OG Image] Unknown OG Image type ${extension}.`
38
+ });
39
+ }
40
+ let queryParams = { ...getQuery(e) };
41
+ queryParams.props = JSON.parse(queryParams.props || "{}");
42
+ queryParams = separateProps(queryParams);
43
+ let basePath = withoutTrailingSlash(
44
+ path.replace(`/__og-image__/image`, "").replace(`/og.${extension}`, "")
45
+ );
46
+ if (queryParams._query)
47
+ basePath = withQuery(basePath, JSON.parse(queryParams._query));
48
+ const isDebugJsonPayload = extension === "json" && runtimeConfig.debug;
49
+ const key = resolvePathCacheKey(e, basePath);
50
+ let options = queryParams.options;
51
+ if (!options) {
52
+ if (import.meta.prerender)
53
+ options = await prerenderOptionsCache?.getItem(key);
54
+ if (!options) {
55
+ const payload = await fetchPathHtmlAndExtractOptions(e, basePath, key);
56
+ if (payload instanceof Error)
57
+ return payload;
58
+ options = payload;
59
+ }
60
+ }
61
+ delete queryParams.options;
62
+ const routeRuleMatcher = createNitroRouteRuleMatcher();
63
+ const routeRules = routeRuleMatcher(basePath);
64
+ if (typeof routeRules.ogImage === "undefined" && !options) {
65
+ return createError({
66
+ statusCode: 400,
67
+ statusMessage: "The route is missing the Nuxt OG Image payload or route rules."
68
+ });
69
+ }
70
+ const ogImageRouteRules = separateProps(routeRules.ogImage);
71
+ options = defu(queryParams, ogImageRouteRules, options, runtimeConfig.defaults);
72
+ if (!options) {
73
+ return createError({
74
+ statusCode: 404,
75
+ statusMessage: "[Nuxt OG Image] OG Image not found."
76
+ });
77
+ }
78
+ let renderer;
79
+ switch (options.renderer) {
80
+ case "satori":
81
+ renderer = await useSatoriRenderer();
82
+ break;
83
+ case "chromium":
84
+ renderer = await useChromiumRenderer();
85
+ break;
86
+ }
87
+ if (!renderer || renderer.__unenv__) {
88
+ throw createError({
89
+ statusCode: 400,
90
+ statusMessage: `[Nuxt OG Image] Renderer ${options.renderer} is missing.`
91
+ });
92
+ }
93
+ const ctx = {
94
+ e,
95
+ key,
96
+ renderer,
97
+ isDebugJsonPayload,
98
+ extension,
99
+ basePath,
100
+ options,
101
+ _nitro: useNitroApp()
102
+ };
103
+ await ctx._nitro.hooks.callHook("nuxt-og-image:context", ctx);
104
+ return ctx;
105
+ }
106
+ export function extractAndNormaliseOgImageOptions(html) {
107
+ const htmlPayload = html.match(/<script.+id="nuxt-og-image-options"[^>]*>(.+?)<\/script>/)?.[1];
108
+ if (!htmlPayload)
109
+ return false;
110
+ let options;
111
+ try {
112
+ const payload2 = JSON.parse(htmlPayload);
113
+ Object.entries(payload2).forEach(([key, value]) => {
114
+ if (!value)
115
+ delete payload2[key];
116
+ });
117
+ options = payload2;
118
+ } catch (e) {
119
+ if (import.meta.dev)
120
+ console.warn("Failed to parse #nuxt-og-image-options", e, options);
121
+ }
122
+ if (!options)
123
+ return false;
124
+ const description = html.match(/<meta[^>]+name="description"[^>]*>/)?.[0];
125
+ if (description) {
126
+ const [, content] = description.match(/content="([^"]+)"/) || [];
127
+ if (content && !options.props.description)
128
+ options.props.description = content;
129
+ }
130
+ const payload = decodeObjectHtmlEntities(options);
131
+ if (import.meta.dev) {
132
+ const socialPreview = {};
133
+ const socialMetaTags = html.match(/<meta[^>]+(property|name)="(twitter|og):([^"]+)"[^>]*>/g);
134
+ if (socialMetaTags) {
135
+ socialMetaTags.forEach((tag) => {
136
+ const [, , type, key] = tag.match(/(property|name)="(twitter|og):([^"]+)"/);
137
+ const value = tag.match(/content="([^"]+)"/)?.[1];
138
+ if (!value)
139
+ return;
140
+ if (!socialPreview[type])
141
+ socialPreview[type] = {};
142
+ socialPreview[type][key] = value;
143
+ });
144
+ }
145
+ payload.socialPreview = socialPreview;
146
+ }
147
+ return payload;
148
+ }
149
+ async function fetchPathHtmlAndExtractOptions(e, path, key) {
150
+ const cachedHtmlPayload = await htmlPayloadCache.getItem(key);
151
+ if (!import.meta.dev && cachedHtmlPayload && cachedHtmlPayload.expiresAt < Date.now())
152
+ return cachedHtmlPayload.value;
153
+ let html;
154
+ try {
155
+ html = await e.$fetch(path);
156
+ } catch (err) {
157
+ return createError({
158
+ statusCode: 500,
159
+ statusMessage: `[Nuxt OG Image] Failed to read the path ${path} for og-image extraction. ${err.message}.`
160
+ });
161
+ }
162
+ if (typeof html !== "string") {
163
+ return createError({
164
+ statusCode: 500,
165
+ statusMessage: `[Nuxt OG Image] Got invalid response from ${path} for og-image extraction.`
166
+ });
167
+ }
168
+ const payload = extractAndNormaliseOgImageOptions(html);
169
+ if (payload) {
170
+ await htmlPayloadCache.setItem(key, {
171
+ // 60 minutes for prerender, 10 seconds for runtime
172
+ expiresAt: Date.now() + 1e3 * (import.meta.prerender ? 60 * 60 : 10),
173
+ value: payload
174
+ });
175
+ }
176
+ return payload;
177
+ }
@@ -0,0 +1,2 @@
1
+ export declare function useSatoriRenderer(): Promise<import("../../types").Renderer>;
2
+ export declare function useChromiumRenderer(): Promise<import("../../types").Renderer>;
@@ -0,0 +1,10 @@
1
+ const satoriRendererInstance = { instance: void 0 };
2
+ const chromiumRendererInstance = { instance: void 0 };
3
+ export async function useSatoriRenderer() {
4
+ satoriRendererInstance.instance = satoriRendererInstance.instance || await import("#nuxt-og-image/renderers/satori").then((m) => m.default);
5
+ return satoriRendererInstance.instance;
6
+ }
7
+ export async function useChromiumRenderer() {
8
+ chromiumRendererInstance.instance = chromiumRendererInstance.instance || await import("#nuxt-og-image/renderers/chromium").then((m) => m.default);
9
+ return chromiumRendererInstance.instance;
10
+ }
@@ -1,2 +1,2 @@
1
- import type { OgImageRenderEventContext, ResolvedFontConfig } from '../../types';
1
+ import type { OgImageRenderEventContext, ResolvedFontConfig } from '../../../types';
2
2
  export declare function loadFont({ e }: OgImageRenderEventContext, font: ResolvedFontConfig): Promise<ResolvedFontConfig>;
@@ -0,0 +1,33 @@
1
+ import { prefixStorage } from "unstorage";
2
+ import { useNitroOrigin, useStorage } from "#imports";
3
+ const assets = prefixStorage(useStorage(), "/assets");
4
+ export async function loadFont({ e }, font) {
5
+ const { name, weight } = font;
6
+ if (font.data)
7
+ return font;
8
+ if (font.key && await assets.hasItem(font.key)) {
9
+ let fontData = await assets.getItem(font.key);
10
+ if (fontData instanceof Uint8Array) {
11
+ const decoder = new TextDecoder();
12
+ fontData = decoder.decode(fontData);
13
+ }
14
+ font.data = Buffer.from(fontData, "base64");
15
+ return font;
16
+ }
17
+ let data;
18
+ if (font.path) {
19
+ data = await e.$fetch(font.path, {
20
+ baseURL: useNitroOrigin(e),
21
+ responseType: "arrayBuffer"
22
+ });
23
+ } else {
24
+ data = await e.$fetch(`/__og-image__/font/${name}/${weight}.ttf`, {
25
+ responseType: "arrayBuffer",
26
+ query: {
27
+ font
28
+ }
29
+ });
30
+ }
31
+ font.data = data;
32
+ return font;
33
+ }
@@ -1,6 +1,4 @@
1
1
  import type _satori from 'satori';
2
- export declare function useSatoriRenderer(): Promise<import("../../../types").Renderer>;
3
- export declare function useChromiumRenderer(): Promise<import("../../../types").Renderer>;
4
2
  export declare function useResvg(): Promise<new (svg: string | Uint8Array, options?: import("@resvg/resvg-wasm").ResvgRenderOptions | undefined) => {
5
3
  free(): void;
6
4
  render(): {
@@ -2,16 +2,6 @@ const cssInlineInstance = { instance: void 0 };
2
2
  const sharpInstance = { instance: void 0 };
3
3
  const resvgInstance = { instance: void 0 };
4
4
  const satoriInstance = { instance: void 0 };
5
- const satoriRendererInstance = { instance: void 0 };
6
- const chromiumRendererInstance = { instance: void 0 };
7
- export async function useSatoriRenderer() {
8
- satoriRendererInstance.instance = satoriRendererInstance.instance || await import("#nuxt-og-image/renderers/satori").then((m) => m.default);
9
- return satoriRendererInstance.instance;
10
- }
11
- export async function useChromiumRenderer() {
12
- chromiumRendererInstance.instance = chromiumRendererInstance.instance || await import("#nuxt-og-image/renderers/chromium").then((m) => m.default);
13
- return chromiumRendererInstance.instance;
14
- }
15
5
  export async function useResvg() {
16
6
  resvgInstance.instance = resvgInstance.instance || await import("#nuxt-og-image/bindings/resvg").then((m) => m.default);
17
7
  await resvgInstance.instance.initWasmPromise;
@@ -28,5 +18,6 @@ export async function useSharp() {
28
18
  }
29
19
  export async function useCssInline() {
30
20
  cssInlineInstance.instance = cssInlineInstance.instance || await import("#nuxt-og-image/bindings/css-inline").then((m) => m.default);
31
- return cssInlineInstance.instance;
21
+ await cssInlineInstance.instance.initWasmPromise;
22
+ return cssInlineInstance.instance.cssInline;
32
23
  }
@@ -0,0 +1,17 @@
1
+ import { defineSatoriTransformer } from "../utils.mjs";
2
+ export default defineSatoriTransformer([
3
+ {
4
+ filter: (node) => !!node.props?.class && !node.props?.tw,
5
+ transform: async (node) => {
6
+ node.props.tw = node.props.class;
7
+ node.props.tw = node.props.tw.replace(/icon|inline-style/g, "");
8
+ }
9
+ },
10
+ {
11
+ filter: (node) => !!node.props?.style?.display,
12
+ transform: async (node) => {
13
+ if (["inline-block", "inline"].includes(node.props.style.display))
14
+ delete node.props.style.display;
15
+ }
16
+ }
17
+ ]);
@@ -0,0 +1,17 @@
1
+ import { defineSatoriTransformer } from "../utils.mjs";
2
+ import { decodeHtml } from "../../../util/encoding.mjs";
3
+ export default defineSatoriTransformer([
4
+ // clean up
5
+ {
6
+ filter: (node) => node.props?.["data-v-inspector"],
7
+ transform: async (node) => {
8
+ delete node.props["data-v-inspector"];
9
+ }
10
+ },
11
+ {
12
+ filter: (node) => typeof node.props?.children === "string",
13
+ transform: async (node) => {
14
+ node.props.children = decodeHtml(node.props.children);
15
+ }
16
+ }
17
+ ]);
@@ -0,0 +1,82 @@
1
+ import { withBase } from "ufo";
2
+ import sizeOf from "image-size";
3
+ import { defineSatoriTransformer } from "../utils.mjs";
4
+ import { toBase64Image } from "../../../../pure.mjs";
5
+ import { useNitroOrigin, useStorage } from "#imports";
6
+ export default defineSatoriTransformer([
7
+ // fix <img src="">
8
+ {
9
+ filter: (node) => node.type === "img" && node.props?.src,
10
+ transform: async (node, { e }) => {
11
+ const src = node.props.src;
12
+ const isRelative = src.startsWith("/");
13
+ let dimensions;
14
+ let imageBuffer;
15
+ if (isRelative) {
16
+ if (import.meta.prerender || import.meta.dev) {
17
+ const key = `root:public${src.replace("./", ":").replace("/", ":")}`;
18
+ if (await useStorage().hasItem(key))
19
+ imageBuffer = await useStorage().getItemRaw(key);
20
+ } else {
21
+ imageBuffer = await e.$fetch(src, {
22
+ baseURL: useNitroOrigin(e),
23
+ responseType: "arrayBuffer"
24
+ }).catch(() => {
25
+ });
26
+ }
27
+ } else {
28
+ imageBuffer = await $fetch(src, {
29
+ responseType: "arrayBuffer"
30
+ }).catch(() => {
31
+ });
32
+ }
33
+ if (imageBuffer)
34
+ imageBuffer = Buffer.from(imageBuffer);
35
+ if (imageBuffer) {
36
+ node.props.src = toBase64Image(src, imageBuffer);
37
+ try {
38
+ const imageSize = sizeOf(imageBuffer);
39
+ dimensions = { width: imageSize.width, height: imageSize.height };
40
+ } catch (e2) {
41
+ }
42
+ }
43
+ if (dimensions?.width && dimensions?.height) {
44
+ const naturalAspectRatio = dimensions.width / dimensions.height;
45
+ if (node.props.width && !node.props.height) {
46
+ node.props.height = Math.round(node.props.width / naturalAspectRatio);
47
+ } else if (node.props.height && !node.props.width) {
48
+ node.props.width = Math.round(node.props.height * naturalAspectRatio);
49
+ } else if (!node.props.width && !node.props.height) {
50
+ node.props.width = dimensions.width;
51
+ node.props.height = dimensions.height;
52
+ }
53
+ }
54
+ if (node.props.src.startsWith("/")) {
55
+ node.props.src = `${withBase(src, `${useNitroOrigin(e)}`)}?${Date.now()}`;
56
+ }
57
+ }
58
+ },
59
+ // fix style="background-image: url('')"
60
+ {
61
+ filter: (node) => node.props?.style?.backgroundImage?.includes("url("),
62
+ transform: async (node, { e }) => {
63
+ const backgroundImage = node.props.style.backgroundImage;
64
+ const src = backgroundImage.replace(/^url\(['"]?/, "").replace(/['"]?\)$/, "");
65
+ const isRelative = src?.startsWith("/");
66
+ if (isRelative) {
67
+ if (import.meta.prerender || import.meta.dev) {
68
+ const key = `root:public${src.replace("./", ":").replace("/", ":")}`;
69
+ if (await useStorage().hasItem(key)) {
70
+ const imageBuffer = await useStorage().getItemRaw(key);
71
+ if (imageBuffer) {
72
+ const base64 = toBase64Image(src, Buffer.from(imageBuffer));
73
+ node.props.style.backgroundImage = `url(${base64})`;
74
+ }
75
+ }
76
+ } else {
77
+ node.props.style.backgroundImage = `url(${withBase(src, `${useNitroOrigin(e)}`)}?${Date.now()})`;
78
+ }
79
+ }
80
+ }
81
+ }
82
+ ]);
@@ -1,16 +1,18 @@
1
1
  import { defu } from "defu";
2
- import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../utils.mjs";
3
- import { loadFont } from "../../font/fetch.mjs";
4
- import { fontCache, fontPromises } from "../../cache/fonts.mjs";
2
+ import { createStorage } from "unstorage";
3
+ import lruCacheDriver from "unstorage/drivers/lru-cache";
4
+ import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.mjs";
5
+ import { loadFont } from "./font.mjs";
5
6
  import { createVNodes } from "./vnodes.mjs";
6
7
  import { useResvg, useSatori, useSharp } from "./instances.mjs";
7
8
  import { theme } from "#nuxt-og-image/unocss-config.mjs";
8
- export async function createSvg(event) {
9
- const { options } = event;
10
- const { fonts, satoriOptions } = useOgImageRuntimeConfig();
11
- const vnodes = await createVNodes(event);
12
- await event._nitro.hooks.callHook("nuxt-og-image:satori:vnodes", vnodes, event);
13
- const normalisedFonts = normaliseFontInput([...fonts, ...event.options.fonts || []]);
9
+ const fontPromises = {};
10
+ const fontCache = createStorage({
11
+ driver: lruCacheDriver({ max: 10 })
12
+ });
13
+ async function resolveFonts(event) {
14
+ const { fonts } = useOgImageRuntimeConfig();
15
+ const normalisedFonts = normaliseFontInput([...event.options.fonts || [], ...fonts]);
14
16
  const localFontPromises = [];
15
17
  const preloadedFonts = [];
16
18
  for (const font of normalisedFonts) {
@@ -29,16 +31,27 @@ export async function createSvg(event) {
29
31
  }
30
32
  }
31
33
  const awaitedFonts = await Promise.all(localFontPromises);
32
- const satori = await useSatori();
33
- return satori(vnodes, defu(options.satori, satoriOptions, {
34
- fonts: [...preloadedFonts, ...awaitedFonts].map((_f) => {
35
- return { ..._f, weight: Number(_f.weight) };
36
- }),
34
+ return [...preloadedFonts, ...awaitedFonts].map((_f) => {
35
+ return { name: _f.name, data: _f.data, style: _f.style, weight: Number(_f.weight) };
36
+ });
37
+ }
38
+ export async function createSvg(event) {
39
+ const { options } = event;
40
+ const { satoriOptions: _satoriOptions } = useOgImageRuntimeConfig();
41
+ const [satori, vnodes, fonts] = await Promise.all([
42
+ useSatori(),
43
+ createVNodes(event),
44
+ resolveFonts(event)
45
+ ]);
46
+ await event._nitro.hooks.callHook("nuxt-og-image:satori:vnodes", vnodes, event);
47
+ const satoriOptions = defu(options.satori, _satoriOptions, {
48
+ fonts,
37
49
  tailwindConfig: { theme },
38
50
  embedFont: true,
39
51
  width: options.width,
40
52
  height: options.height
41
- }));
53
+ });
54
+ return satori(vnodes, satoriOptions);
42
55
  }
43
56
  async function createPng(event) {
44
57
  const { resvgOptions } = useOgImageRuntimeConfig();
@@ -1,3 +1,5 @@
1
1
  import type { NuxtIslandResponse } from 'nuxt/dist/core/runtime/nitro/renderer';
2
- import type { OgImageRenderEventContext } from '../../types';
2
+ import type { Storage } from 'unstorage';
3
+ import type { OgImageRenderEventContext } from '../../../../types';
4
+ export declare const emojiCache: Storage<string>;
3
5
  export declare function applyEmojis(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<string | boolean>;