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

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 (405) 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/2rhOc95h.js +135 -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/B2BuIiKK.js +1 -0
  19. package/dist/client/_nuxt/B2DkETJQ.js +1 -0
  20. package/dist/client/_nuxt/B4yE-MfL.js +38 -0
  21. package/dist/client/_nuxt/B6nY7VDA.js +25 -0
  22. package/dist/client/_nuxt/B9CT-1u6.js +7 -0
  23. package/dist/client/_nuxt/B9E_xdxs.js +666 -0
  24. package/dist/client/_nuxt/B9S9BZZh.js +1 -0
  25. package/dist/client/_nuxt/BBDuFDsq.js +1 -0
  26. package/dist/client/_nuxt/BBJYjQ0k.js +1 -0
  27. package/dist/client/_nuxt/BBv1LFm6.js +6 -0
  28. package/dist/client/_nuxt/BF6G6X0H.js +1 -0
  29. package/dist/client/_nuxt/BG_OyJVq.js +1 -0
  30. package/dist/client/_nuxt/BH1M7C1g.js +1 -0
  31. package/dist/client/_nuxt/BH_RS3WO.js +1 -0
  32. package/dist/client/_nuxt/BICIrM8O.js +1 -0
  33. package/dist/client/_nuxt/BILqrcpa.js +1 -0
  34. package/dist/client/_nuxt/BIMuYTWL.js +3 -0
  35. package/dist/client/_nuxt/BITGhEdf.js +1 -0
  36. package/dist/client/_nuxt/BIxS-Weu.js +1 -0
  37. package/dist/client/_nuxt/BLluXI4E.js +1 -0
  38. package/dist/client/_nuxt/BN4LRXf6.js +4 -0
  39. package/dist/client/_nuxt/BOnd8D4O.js +186 -0
  40. package/dist/client/_nuxt/BOpLLL-w.js +1 -0
  41. package/dist/client/_nuxt/BPiaQZfK.js +1 -0
  42. package/dist/client/_nuxt/BR6CMsBL.js +1 -0
  43. package/dist/client/_nuxt/BSB_bK09.js +1 -0
  44. package/dist/client/_nuxt/BSyl5yf0.js +1 -0
  45. package/dist/client/_nuxt/BT9ZzGyQ.js +69 -0
  46. package/dist/client/_nuxt/BTtaZsq5.js +1 -0
  47. package/dist/client/_nuxt/BUpeXbsf.js +25 -0
  48. package/dist/client/_nuxt/BWKJ1FCf.js +239 -0
  49. package/dist/client/_nuxt/BXF7Vm5l.js +1 -0
  50. package/dist/client/_nuxt/BXfENWL6.js +1 -0
  51. package/dist/client/_nuxt/BZz1Hhek.js +1 -0
  52. package/dist/client/_nuxt/B_SUYfiV.js +1 -0
  53. package/dist/client/_nuxt/BaNxgKSR.js +17 -0
  54. package/dist/client/_nuxt/BaWyeHV_.js +1 -0
  55. package/dist/client/_nuxt/BaedD2tq.js +1 -0
  56. package/dist/client/_nuxt/BbJj1K1w.js +1 -0
  57. package/dist/client/_nuxt/Bbv8ARUV.js +13 -0
  58. package/dist/client/_nuxt/Bd7iooY8.js +8 -0
  59. package/dist/client/_nuxt/Bdb36Id5.js +1 -0
  60. package/dist/client/_nuxt/BeX7Iu5M.js +90 -0
  61. package/dist/client/_nuxt/BeocmOPF.js +1 -0
  62. package/dist/client/_nuxt/Bg0wAK5a.js +100 -0
  63. package/dist/client/_nuxt/BgBwMnrY.js +76 -0
  64. package/dist/client/_nuxt/Bgpqy2XC.js +1 -0
  65. package/dist/client/_nuxt/Bh8mriwU.js +17 -0
  66. package/dist/client/_nuxt/BiDE021q.js +1 -0
  67. package/dist/client/_nuxt/Bj5xdiaE.js +1 -0
  68. package/dist/client/_nuxt/BlxWTfDV.js +699 -0
  69. package/dist/client/_nuxt/BmCW-tYz.js +86 -0
  70. package/dist/client/_nuxt/Bn5gmY5k.js +1 -0
  71. package/dist/client/_nuxt/BrGg7AAd.js +1 -0
  72. package/dist/client/_nuxt/BsfQk1vf.js +1 -0
  73. package/dist/client/_nuxt/Bsp1M94H.js +1 -0
  74. package/dist/client/_nuxt/BsvsQ1iS.js +1 -0
  75. package/dist/client/_nuxt/BswfO-CF.js +1 -0
  76. package/dist/client/_nuxt/Btshr8M_.js +70 -0
  77. package/dist/client/_nuxt/BxwAa5i0.js +1 -0
  78. package/dist/client/_nuxt/ByMv4Xf1.js +1 -0
  79. package/dist/client/_nuxt/Bz4xi2rU.js +1 -0
  80. package/dist/client/_nuxt/C-i5r_gR.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/DFF-wSSt.js +8 -0
  149. package/dist/client/_nuxt/DGO8GyiP.js +1 -0
  150. package/dist/client/_nuxt/DHmGyzbM.js +109 -0
  151. package/dist/client/_nuxt/DISxKEhY.js +756 -0
  152. package/dist/client/_nuxt/DIr-ordK.js +1 -0
  153. package/dist/client/_nuxt/DJZWsvj0.js +1 -0
  154. package/dist/client/_nuxt/DLP9ZvWb.js +3 -0
  155. package/dist/client/_nuxt/DNR26wTC.js +1 -0
  156. package/dist/client/_nuxt/DOtRmeXT.js +1 -0
  157. package/dist/client/_nuxt/DSrLtGYv.js +15 -0
  158. package/dist/client/_nuxt/DSsji4Hu.js +1 -0
  159. package/dist/client/_nuxt/DUdlC5k_.js +1 -0
  160. package/dist/client/_nuxt/DVfdqzEq.js +1 -0
  161. package/dist/client/_nuxt/DXFkqnOI.js +816 -0
  162. package/dist/client/_nuxt/DXT9h7v2.js +1 -0
  163. package/dist/client/_nuxt/DXZpi2gR.js +1 -0
  164. package/dist/client/_nuxt/DXpYegZJ.js +1 -0
  165. package/dist/client/_nuxt/DY7_9Ga-.js +1 -0
  166. package/dist/client/_nuxt/DYI1rfmx.js +25 -0
  167. package/dist/client/_nuxt/DZ3fVoEH.js +1 -0
  168. package/dist/client/_nuxt/DZ_89pU7.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/I4qd5QHW.js +10 -0
  198. package/dist/client/_nuxt/IHMnEr_d.js +1 -0
  199. package/dist/client/_nuxt/IconCSS.DI_jUTCX.css +1 -0
  200. package/dist/client/_nuxt/KEYLhlmT.js +1 -0
  201. package/dist/client/_nuxt/NL97_oaV.js +1 -0
  202. package/dist/client/_nuxt/PWN5J14X.js +1 -0
  203. package/dist/client/_nuxt/PifQWv0n.js +1 -0
  204. package/dist/client/_nuxt/QZ3jNtnE.js +515 -0
  205. package/dist/client/_nuxt/RCJZWN-0.js +81 -0
  206. package/dist/client/_nuxt/RE3ujT-k.js +1 -0
  207. package/dist/client/_nuxt/RgJsN3zu.js +1 -0
  208. package/dist/client/_nuxt/RqY_Nz63.js +1 -0
  209. package/dist/client/_nuxt/Sfo2eW0G.js +274 -0
  210. package/dist/client/_nuxt/T9ysyp6P.js +62 -0
  211. package/dist/client/_nuxt/TQ9oWRfF.js +1 -0
  212. package/dist/client/_nuxt/UREJT2Bw.js +1 -0
  213. package/dist/client/_nuxt/Urb1RsFe.js +1 -0
  214. package/dist/client/_nuxt/VEmPXi1y.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/daab05e2-db9f-459a-926a-1824e9329bff.json +1 -0
  222. package/dist/client/_nuxt/builds/meta/dev.json +1 -0
  223. package/dist/client/_nuxt/doGI2cFk.js +1 -0
  224. package/dist/client/_nuxt/eJfcURhx.js +1 -0
  225. package/dist/client/_nuxt/entry.CyZsr2dM.css +1 -0
  226. package/dist/client/_nuxt/error-404.BRldFSII.css +1 -0
  227. package/dist/client/_nuxt/error-500.D8yw_IbC.css +1 -0
  228. package/dist/client/_nuxt/hXH8Gyq8.js +1 -0
  229. package/dist/client/_nuxt/i0IPvypD.js +1 -0
  230. package/dist/client/_nuxt/iSbrOpM4.js +1 -0
  231. package/dist/client/_nuxt/j8KhMG0x.js +1 -0
  232. package/dist/client/_nuxt/jaXbsbtS.js +1 -0
  233. package/dist/client/_nuxt/nclm9rTJ.js +266 -0
  234. package/dist/client/_nuxt/o-cPXEvd.js +575 -0
  235. package/dist/client/_nuxt/rS0jd3Ly.js +1 -0
  236. package/dist/client/_nuxt/sMI-pExk.js +1 -0
  237. package/dist/client/_nuxt/sQpxpyUs.js +1 -0
  238. package/dist/client/_nuxt/vMsNTMhM.js +5 -0
  239. package/dist/client/_nuxt/wChcbJ1V.js +37 -0
  240. package/dist/client/_nuxt/wORFcijT.js +32 -0
  241. package/dist/client/_nuxt/wPLeKH6q.js +40 -0
  242. package/dist/client/_nuxt/xPNGhBYe.js +1 -0
  243. package/dist/client/index.html +238 -15
  244. package/dist/module.d.mts +13 -5
  245. package/dist/module.d.ts +13 -5
  246. package/dist/module.json +2 -2
  247. package/dist/module.mjs +195 -128
  248. package/dist/runtime/assets/Inter-400.ttf.base64 +1 -0
  249. package/dist/runtime/assets/Inter-700.ttf.base64 +1 -0
  250. package/dist/runtime/nitro/og-image/bindings/chromium/chrome-launcher.mjs +9 -0
  251. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.d.ts +2 -0
  252. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.mjs +36 -0
  253. package/dist/runtime/nitro/og-image/bindings/chromium/playwright.d.ts +2 -0
  254. package/dist/runtime/nitro/og-image/bindings/chromium/playwright.mjs +6 -0
  255. package/dist/runtime/nitro/og-image/bindings/css-inline/node.d.ts +8 -0
  256. package/dist/runtime/nitro/og-image/bindings/css-inline/node.mjs +7 -0
  257. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm-fs.d.ts +8 -0
  258. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm-fs.mjs +8 -0
  259. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm.d.ts +8 -0
  260. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm.mjs +7 -0
  261. package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm-fs.mjs +1 -1
  262. package/dist/runtime/nitro/og-image/bindings/resvg/wasm.mjs +5 -0
  263. package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm-fs.mjs +1 -1
  264. package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm.mjs +1 -2
  265. package/dist/runtime/nitro/og-image/cache.d.ts +7 -0
  266. package/dist/runtime/{core/cache/htmlPayload.mjs → nitro/og-image/cache.mjs} +4 -1
  267. package/dist/runtime/{core/renderers → nitro/og-image}/chromium/screenshot.mjs +1 -1
  268. package/dist/runtime/nitro/og-image/context.d.ts +5 -0
  269. package/dist/runtime/nitro/og-image/context.mjs +177 -0
  270. package/dist/runtime/nitro/og-image/instances.d.ts +2 -0
  271. package/dist/runtime/nitro/og-image/instances.mjs +10 -0
  272. package/dist/runtime/{core/font/fetch.d.ts → nitro/og-image/satori/font.d.ts} +1 -1
  273. package/dist/runtime/nitro/og-image/satori/font.mjs +33 -0
  274. package/dist/runtime/{core/renderers → nitro/og-image}/satori/instances.d.ts +0 -2
  275. package/dist/runtime/{core/renderers → nitro/og-image}/satori/instances.mjs +2 -11
  276. package/dist/runtime/nitro/og-image/satori/plugins/classes.mjs +17 -0
  277. package/dist/runtime/nitro/og-image/satori/plugins/encoding.mjs +17 -0
  278. package/dist/runtime/nitro/og-image/satori/plugins/imageSrc.mjs +82 -0
  279. package/dist/runtime/{core/renderers/satori/index.mjs → nitro/og-image/satori/renderer.mjs} +28 -15
  280. package/dist/runtime/{core/html/applyEmojis.d.ts → nitro/og-image/satori/transforms/emojis.d.ts} +3 -1
  281. package/dist/runtime/nitro/og-image/satori/transforms/emojis.mjs +3597 -0
  282. package/dist/runtime/{core/html/applyInlineCss.d.ts → nitro/og-image/satori/transforms/inlineCss.d.ts} +1 -1
  283. package/dist/runtime/nitro/og-image/satori/transforms/inlineCss.mjs +41 -0
  284. package/dist/runtime/{core/renderers → nitro/og-image}/satori/vnodes.mjs +9 -7
  285. package/dist/runtime/nitro/og-image/templates/html.d.ts +2 -0
  286. package/dist/runtime/{core/html/devIframeTemplate.mjs → nitro/og-image/templates/html.mjs} +17 -9
  287. package/dist/runtime/nitro/plugins/nuxt-content.mjs +7 -4
  288. package/dist/runtime/nitro/plugins/prerender.d.ts +1 -1
  289. package/dist/runtime/nitro/plugins/prerender.mjs +8 -16
  290. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/debug.json.d.ts +1 -1
  291. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/debug.json.mjs +1 -1
  292. package/dist/runtime/{server/routes/__og-image__/font-[name]-[weight].[extension].mjs → nitro/routes/font.mjs} +18 -1
  293. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/image.mjs +9 -10
  294. package/dist/runtime/nitro/tsconfig.json +3 -0
  295. package/dist/runtime/{cache.d.ts → nitro/util/cache.d.ts} +1 -1
  296. package/dist/runtime/nitro/util/encoding.d.ts +3 -0
  297. package/dist/runtime/nitro/util/encoding.mjs +15 -0
  298. package/dist/runtime/nitro/util/kit.d.ts +6 -0
  299. package/dist/runtime/nitro/util/kit.mjs +32 -0
  300. package/dist/runtime/{components → nuxt/components}/OgImage/OgImage.d.ts +2 -2
  301. package/dist/runtime/{components → nuxt/components}/OgImage/OgImageScreenshot.d.ts +2 -2
  302. package/dist/runtime/nuxt/components/Templates/Community/Frame.vue +64 -0
  303. package/dist/runtime/{components → nuxt/components}/Templates/Community/NuxtSeo.vue +1 -1
  304. package/dist/runtime/{components → nuxt/components}/Templates/Community/UnJs.vue +2 -2
  305. package/dist/runtime/{composables → nuxt/composables}/defineOgImage.d.ts +1 -1
  306. package/dist/runtime/{composables → nuxt/composables}/defineOgImage.mjs +6 -11
  307. package/dist/runtime/{composables → nuxt/composables}/defineOgImageComponent.d.ts +1 -1
  308. package/dist/runtime/{composables → nuxt/composables}/defineOgImageScreenshot.d.ts +1 -1
  309. package/dist/runtime/nuxt/composables/mock.d.ts +0 -0
  310. package/dist/runtime/nuxt/composables/mock.mjs +6 -0
  311. package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.mjs +14 -5
  312. package/dist/runtime/nuxt/plugins/route-rule-og-image.server.mjs +1 -1
  313. package/dist/runtime/nuxt/utils.d.ts +2 -1
  314. package/dist/runtime/nuxt/utils.mjs +1 -1
  315. package/dist/runtime/{utils.pure.d.ts → pure.d.ts} +1 -0
  316. package/dist/runtime/{utils.pure.mjs → pure.mjs} +12 -3
  317. package/dist/runtime/{utils.d.ts → shared.d.ts} +1 -1
  318. package/dist/runtime/{utils.mjs → shared.mjs} +3 -2
  319. package/dist/runtime/types.d.ts +12 -5
  320. package/dist/types.d.mts +2 -2
  321. package/package.json +78 -53
  322. package/dist/client/_nuxt/IconCSS.b7e5876d.js +0 -1
  323. package/dist/client/_nuxt/IconCSS.f0b56d3e.css +0 -1
  324. package/dist/client/_nuxt/builds/meta/4b44e059-802c-46c9-90d2-f73641cbd674.json +0 -1
  325. package/dist/client/_nuxt/entry.006451f1.js +0 -108
  326. package/dist/client/_nuxt/entry.a30f63d0.css +0 -1
  327. package/dist/client/_nuxt/error-404.b751fa02.css +0 -1
  328. package/dist/client/_nuxt/error-404.d6ff1eb0.js +0 -1
  329. package/dist/client/_nuxt/error-500.3acec475.js +0 -1
  330. package/dist/client/_nuxt/error-500.69009e70.css +0 -1
  331. package/dist/client/_nuxt/vanilla-picker-NKbIFE8h.23409a58.js +0 -8
  332. package/dist/runtime/core/bindings/chromium/node.mjs +0 -33
  333. package/dist/runtime/core/bindings/css-inline/node.d.ts +0 -2
  334. package/dist/runtime/core/bindings/css-inline/node.mjs +0 -2
  335. package/dist/runtime/core/bindings/resvg/wasm.mjs +0 -6
  336. package/dist/runtime/core/cache/emojis.d.ts +0 -1
  337. package/dist/runtime/core/cache/emojis.mjs +0 -5
  338. package/dist/runtime/core/cache/fonts.d.ts +0 -3
  339. package/dist/runtime/core/cache/fonts.mjs +0 -6
  340. package/dist/runtime/core/cache/htmlPayload.d.ts +0 -5
  341. package/dist/runtime/core/cache/prerender.d.ts +0 -2
  342. package/dist/runtime/core/cache/prerender.mjs +0 -5
  343. package/dist/runtime/core/env/assets.d.ts +0 -1
  344. package/dist/runtime/core/env/assets.mjs +0 -11
  345. package/dist/runtime/core/font/fetch.mjs +0 -36
  346. package/dist/runtime/core/html/applyEmojis.mjs +0 -37
  347. package/dist/runtime/core/html/applyInlineCss.mjs +0 -32
  348. package/dist/runtime/core/html/devIframeTemplate.d.ts +0 -2
  349. package/dist/runtime/core/html/fetchIsland.d.ts +0 -3
  350. package/dist/runtime/core/html/fetchIsland.mjs +0 -17
  351. package/dist/runtime/core/options/extract.d.ts +0 -3
  352. package/dist/runtime/core/options/extract.mjs +0 -49
  353. package/dist/runtime/core/options/fetch.d.ts +0 -3
  354. package/dist/runtime/core/options/fetch.mjs +0 -32
  355. package/dist/runtime/core/renderers/satori/plugins/encoding.mjs +0 -8
  356. package/dist/runtime/core/renderers/satori/plugins/imageSrc.mjs +0 -75
  357. package/dist/runtime/core/renderers/satori/plugins/twClasses.mjs +0 -8
  358. package/dist/runtime/core/utils/resolveRendererContext.d.ts +0 -3
  359. package/dist/runtime/core/utils/resolveRendererContext.mjs +0 -97
  360. package/dist/runtime/nitro/utils.d.ts +0 -2
  361. package/dist/runtime/nitro/utils.mjs +0 -16
  362. package/dist/runtime/server/assets/inter-latin-ext-400-normal.woff +0 -0
  363. package/dist/runtime/server/assets/inter-latin-ext-700-normal.woff +0 -0
  364. /package/dist/runtime/{core/bindings/chromium/node.d.ts → nitro/og-image/bindings/chromium/chrome-launcher.d.ts} +0 -0
  365. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/node.d.ts +0 -0
  366. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/node.mjs +0 -0
  367. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm-fs.d.ts +0 -0
  368. /package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm.d.ts +0 -0
  369. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/node.d.ts +0 -0
  370. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/node.mjs +0 -0
  371. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm-fs.d.ts +0 -0
  372. /package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm.d.ts +0 -0
  373. /package/dist/runtime/{core → nitro/og-image}/bindings/sharp/node.d.ts +0 -0
  374. /package/dist/runtime/{core → nitro/og-image}/bindings/sharp/node.mjs +0 -0
  375. /package/dist/runtime/{core/renderers/chromium/index.d.ts → nitro/og-image/chromium/renderer.d.ts} +0 -0
  376. /package/dist/runtime/{core/renderers/chromium/index.mjs → nitro/og-image/chromium/renderer.mjs} +0 -0
  377. /package/dist/runtime/{core/renderers → nitro/og-image}/chromium/screenshot.d.ts +0 -0
  378. /package/dist/runtime/{core/renderers/satori/plugins/emojis.d.ts → nitro/og-image/satori/plugins/classes.d.ts} +0 -0
  379. /package/dist/runtime/{core/renderers/satori/plugins/encoding.d.ts → nitro/og-image/satori/plugins/emojis.d.ts} +0 -0
  380. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/emojis.mjs +0 -0
  381. /package/dist/runtime/{core/renderers/satori/plugins/flex.d.ts → nitro/og-image/satori/plugins/encoding.d.ts} +0 -0
  382. /package/dist/runtime/{core/renderers/satori/plugins/imageSrc.d.ts → nitro/og-image/satori/plugins/flex.d.ts} +0 -0
  383. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/flex.mjs +0 -0
  384. /package/dist/runtime/{core/renderers/satori/plugins/twClasses.d.ts → nitro/og-image/satori/plugins/imageSrc.d.ts} +0 -0
  385. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/unocss.d.ts +0 -0
  386. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/unocss.mjs +0 -0
  387. /package/dist/runtime/{core/renderers/satori/index.d.ts → nitro/og-image/satori/renderer.d.ts} +0 -0
  388. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/utils.d.ts +0 -0
  389. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/utils.mjs +0 -0
  390. /package/dist/runtime/{core/renderers → nitro/og-image}/satori/vnodes.d.ts +0 -0
  391. /package/dist/runtime/{server/routes/__og-image__/font-[name]-[weight].[extension].d.ts → nitro/routes/font.d.ts} +0 -0
  392. /package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/image.d.ts +0 -0
  393. /package/dist/runtime/{cache.mjs → nitro/util/cache.mjs} +0 -0
  394. /package/dist/runtime/{core/utils → nitro/util}/wasm.d.ts +0 -0
  395. /package/dist/runtime/{core/utils → nitro/util}/wasm.mjs +0 -0
  396. /package/dist/runtime/{components → nuxt/components}/OgImage/OgImage.mjs +0 -0
  397. /package/dist/runtime/{components → nuxt/components}/OgImage/OgImageScreenshot.mjs +0 -0
  398. /package/dist/runtime/{components → nuxt/components}/Templates/Community/BrandedLogo.vue +0 -0
  399. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Nuxt.vue +0 -0
  400. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Pergel.vue +0 -0
  401. /package/dist/runtime/{components → nuxt/components}/Templates/Community/SimpleBlog.vue +0 -0
  402. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Wave.vue +0 -0
  403. /package/dist/runtime/{components → nuxt/components}/Templates/Community/WithEmoji.vue +0 -0
  404. /package/dist/runtime/{composables → nuxt/composables}/defineOgImageComponent.mjs +0 -0
  405. /package/dist/runtime/{composables → nuxt/composables}/defineOgImageScreenshot.mjs +0 -0
@@ -1,3 +1,3 @@
1
1
  import type { NuxtIslandResponse } from 'nuxt/dist/core/runtime/nitro/renderer';
2
- import type { OgImageRenderEventContext } from '../../types';
2
+ import type { OgImageRenderEventContext } from '../../../../types';
3
3
  export declare function applyInlineCss({ e }: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<boolean>;
@@ -0,0 +1,41 @@
1
+ import { useCssInline } from "../instances.mjs";
2
+ import { useNitroOrigin } from "#imports";
3
+ import cssInline from "#nuxt-og-image/bindings/css-inline";
4
+ export async function applyInlineCss({ e }, island) {
5
+ let html = island.html;
6
+ if (!cssInline.__unenv__) {
7
+ let css = island.head.style.map((s) => s.innerHTML).join("\n");
8
+ const componentInlineStyles = island.head.link.filter((l) => l.href.startsWith("/_nuxt/components"));
9
+ if (process.dev) {
10
+ const linksToCss = componentInlineStyles.length ? (await Promise.all(
11
+ componentInlineStyles.map((l) => {
12
+ const url = l.href.endsWith("lang.css") ? `${l.href}&hmr=false` : l.href;
13
+ return e.$fetch(url, {
14
+ responseType: "text",
15
+ baseURL: useNitroOrigin(e)
16
+ }).then((res) => {
17
+ if (res.includes("__vite__css"))
18
+ return res.match(/__vite__css = "([^"]+)"/)?.[1];
19
+ return res.trim().split("\n").filter((l2) => !l2.startsWith("//")).join("\n").trim();
20
+ }).catch(() => {
21
+ return "";
22
+ });
23
+ })
24
+ )).join("\n") : "";
25
+ css = `${linksToCss}${css}`;
26
+ }
27
+ if (!css.trim().length)
28
+ return false;
29
+ const cssInline2 = await useCssInline();
30
+ html = cssInline2.inline(island.html, {
31
+ loadRemoteStylesheets: false,
32
+ extraCss: css
33
+ });
34
+ const classes = css.match(/\.([a-zA-Z0-9-_]+)/g)?.map((c) => c.replace(".", ""));
35
+ if (classes)
36
+ html = html.replace(new RegExp(`class="(${classes.join("|")})"`, "g"), "");
37
+ island.html = html;
38
+ return true;
39
+ }
40
+ return false;
41
+ }
@@ -1,28 +1,30 @@
1
1
  import { html as convertHtmlToSatori } from "satori-html";
2
- import { fetchIsland } from "../../html/fetchIsland.mjs";
3
- import { applyInlineCss } from "../../html/applyInlineCss.mjs";
4
- import { applyEmojis } from "../../html/applyEmojis.mjs";
2
+ import { fetchIsland } from "../../util/kit.mjs";
3
+ import { htmlDecodeQuotes } from "../../util/encoding.mjs";
4
+ import { applyInlineCss } from "./transforms/inlineCss.mjs";
5
+ import { applyEmojis } from "./transforms/emojis.mjs";
5
6
  import { walkSatoriTree } from "./utils.mjs";
6
7
  import unocss from "./plugins/unocss.mjs";
7
8
  import emojis from "./plugins/emojis.mjs";
8
- import twClasses from "./plugins/twClasses.mjs";
9
+ import classes from "./plugins/classes.mjs";
9
10
  import imageSrc from "./plugins/imageSrc.mjs";
10
11
  import flex from "./plugins/flex.mjs";
11
12
  import encoding from "./plugins/encoding.mjs";
12
13
  export async function createVNodes(ctx) {
13
14
  let html = ctx.options.html;
14
15
  if (!html) {
15
- const island = await fetchIsland(ctx);
16
+ const island = await fetchIsland(ctx.e, ctx.options.component, typeof ctx.options.props !== "undefined" ? ctx.options.props : ctx.options);
17
+ island.html = htmlDecodeQuotes(island.html);
16
18
  await applyInlineCss(ctx, island);
17
19
  await applyEmojis(ctx, island);
18
20
  html = island.html;
19
21
  }
20
- const template = `<div data-v-inspector-ignore="true" style="position: relative; display: flex; margin: 0 auto; width: ${ctx.options.width}px; height: ${ctx.options.height}px; overflow: hidden;">${html}</div>`;
22
+ const template = `<div style="position: relative; display: flex; margin: 0 auto; width: ${ctx.options.width}px; height: ${ctx.options.height}px; overflow: hidden;">${html}</div>`;
21
23
  const satoriTree = convertHtmlToSatori(template);
22
24
  await walkSatoriTree(ctx, satoriTree, [
23
25
  unocss,
24
26
  emojis,
25
- twClasses,
27
+ classes,
26
28
  imageSrc,
27
29
  flex,
28
30
  encoding
@@ -0,0 +1,2 @@
1
+ import type { OgImageRenderEventContext } from '../../../types';
2
+ export declare function html(ctx: OgImageRenderEventContext): Promise<string>;
@@ -1,21 +1,29 @@
1
1
  import { createHeadCore } from "@unhead/vue";
2
2
  import { renderSSRHead } from "@unhead/ssr";
3
- import { useOgImageRuntimeConfig } from "../../utils.mjs";
4
- import { applyEmojis } from "./applyEmojis.mjs";
5
- import { fetchIsland } from "./fetchIsland.mjs";
3
+ import { createError } from "h3";
4
+ import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.mjs";
5
+ import { fetchIsland } from "../../util/kit.mjs";
6
+ import { applyEmojis } from "../satori/transforms/emojis.mjs";
6
7
  import { theme } from "#nuxt-og-image/unocss-config.mjs";
7
- export async function devIframeTemplate(ctx) {
8
+ export async function html(ctx) {
8
9
  const { options } = ctx;
9
10
  const { fonts } = useOgImageRuntimeConfig();
10
- const island = await fetchIsland(ctx);
11
+ if (!options.component) {
12
+ throw createError({
13
+ statusCode: 500,
14
+ statusMessage: `[Nuxt OG Image] Rendering an invalid component. Received options: ${JSON.stringify(options)}.`
15
+ });
16
+ }
17
+ const island = await fetchIsland(ctx.e, ctx.options.component, typeof ctx.options.props !== "undefined" ? ctx.options.props : ctx.options);
11
18
  const head = createHeadCore();
12
19
  head.push(island.head);
13
20
  let defaultFontFamily = "sans-serif";
14
- const firstFont = fonts[0];
21
+ const normalisedFonts = normaliseFontInput([...options.fonts || [], ...fonts]);
22
+ const firstFont = normalisedFonts[0];
15
23
  if (firstFont)
16
24
  defaultFontFamily = firstFont.name;
17
25
  await applyEmojis(ctx, island);
18
- let html = island.html;
26
+ let html2 = island.html;
19
27
  const googleFonts = {};
20
28
  fonts.filter((font) => !font.path).forEach((font) => {
21
29
  if (!googleFonts[font.name])
@@ -98,11 +106,11 @@ svg[data-emoji] {
98
106
  })
99
107
  ]
100
108
  });
101
- html = html.replaceAll(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
109
+ html2 = html2.replaceAll(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
102
110
  const headChunk = await renderSSRHead(head);
103
111
  return `<!DOCTYPE html>
104
112
  <html ${headChunk.htmlAttrs}>
105
113
  <head>${headChunk.headTags}</head>
106
- <body ${headChunk.bodyAttrs}>${headChunk.bodyTagsOpen}<div data-v-inspector-ignore="true" style="position: relative; display: flex; margin: 0 auto; width: ${options.width}px; height: ${options.height}px; overflow: hidden;">${html}</div>${headChunk.bodyTags}</body>
114
+ <body ${headChunk.bodyAttrs}>${headChunk.bodyTagsOpen}<div data-v-inspector-ignore="true" style="position: relative; display: flex; margin: 0 auto; width: ${options.width}px; height: ${options.height}px; overflow: hidden;">${html2}</div>${headChunk.bodyTags}</body>
107
115
  </html>`;
108
116
  }
@@ -1,15 +1,18 @@
1
1
  import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
2
2
  import { defu } from "defu";
3
- import { getOgImagePath, useOgImageRuntimeConfig } from "../../utils.mjs";
3
+ import { getOgImagePath, useOgImageRuntimeConfig } from "../../shared.mjs";
4
4
  export default defineNitroPlugin((nitroApp) => {
5
+ const { isNuxtContentDocumentDriven, defaults } = useOgImageRuntimeConfig();
5
6
  nitroApp.hooks.hook("content:file:afterParse", async (content) => {
6
7
  if (content._draft || content._extension !== "md" || content._partial || content.indexable === false || content.index === false)
7
8
  return;
8
- if (content.path && content.ogImage) {
9
+ let path = content.path;
10
+ if (isNuxtContentDocumentDriven)
11
+ path = content._path;
12
+ if (path && content.ogImage) {
9
13
  const ogImageConfig = typeof content.ogImage === "object" ? content.ogImage : {};
10
- const { defaults } = useOgImageRuntimeConfig();
11
14
  const optionsWithDefault = defu(ogImageConfig, defaults);
12
- const src = getOgImagePath(content.path, optionsWithDefault);
15
+ const src = getOgImagePath(path, optionsWithDefault);
13
16
  const payload = {
14
17
  title: content.title,
15
18
  excerpt: content.description || content.excerpt,
@@ -1,2 +1,2 @@
1
- declare const _default: import("nitropack").NitroAppPlugin;
1
+ declare const _default: import("nitropack/dist/runtime/plugin").NitroAppPlugin;
2
2
  export default _default;
@@ -1,12 +1,9 @@
1
- import { parseURL, withoutBase } from "ufo";
1
+ import { parseURL } from "ufo";
2
2
  import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
3
- import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
4
- import { defu } from "defu";
5
- import { extractAndNormaliseOgImageOptions } from "../../core/options/extract.mjs";
6
- import { prerenderOptionsCache } from "../../core/cache/prerender.mjs";
7
- import { isInternalRoute } from "../../utils.pure.mjs";
8
- import { resolvePathCacheKey } from "../utils.mjs";
9
- import { useRuntimeConfig } from "#internal/nitro";
3
+ import { extractAndNormaliseOgImageOptions, resolvePathCacheKey } from "../og-image/context.mjs";
4
+ import { prerenderOptionsCache } from "../og-image/cache.mjs";
5
+ import { isInternalRoute } from "../../pure.mjs";
6
+ import { createNitroRouteRuleMatcher } from "../util/kit.mjs";
10
7
  export default defineNitroPlugin(async (nitro) => {
11
8
  if (!import.meta.prerender)
12
9
  return;
@@ -15,14 +12,9 @@ export default defineNitroPlugin(async (nitro) => {
15
12
  const path = parseURL(ctx.event.path).pathname;
16
13
  if (isInternalRoute(path))
17
14
  return;
18
- const runtimeConfig = useRuntimeConfig();
19
- const _routeRulesMatcher = toRouteMatcher(
20
- createRadixRouter({ routes: runtimeConfig.nitro?.routeRules })
21
- );
22
- const routeRules = defu({}, ..._routeRulesMatcher.matchAll(
23
- withoutBase(path.split("?")[0], runtimeConfig.app.baseURL)
24
- ).reverse()).ogImage;
25
- if (routeRules === false)
15
+ const routeRuleMatcher = createNitroRouteRuleMatcher();
16
+ const routeRules = routeRuleMatcher(path);
17
+ if (routeRules.ogImage === false)
26
18
  return;
27
19
  const options = extractAndNormaliseOgImageOptions([
28
20
  head.join("\n"),
@@ -1,6 +1,6 @@
1
1
  declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<{
2
2
  componentNames: any;
3
- runtimeConfig: import("../../../types").OgImageRuntimeConfig;
3
+ runtimeConfig: import("../../types").OgImageRuntimeConfig;
4
4
  compatibility: any;
5
5
  }>>;
6
6
  export default _default;
@@ -1,5 +1,5 @@
1
1
  import { defineEventHandler, setHeader } from "h3";
2
- import { useOgImageRuntimeConfig } from "../../../utils.mjs";
2
+ import { useOgImageRuntimeConfig } from "../../shared.mjs";
3
3
  import compatibility from "#nuxt-og-image/compatibility";
4
4
  import { componentNames } from "#nuxt-og-image/component-names.mjs";
5
5
  export default defineEventHandler(async (e) => {
@@ -1,5 +1,6 @@
1
- import { createError, defineEventHandler, proxyRequest, sendRedirect } from "h3";
1
+ import { createError, defineEventHandler, getQuery, proxyRequest, sendRedirect } from "h3";
2
2
  import { parseURL } from "ufo";
3
+ import { normaliseFontInput, useOgImageRuntimeConfig } from "../../shared.mjs";
3
4
  export default defineEventHandler(async (e) => {
4
5
  const path = parseURL(e.path).pathname;
5
6
  const [_name, _weight] = path.split("/font/")[1].split(".")[0].split("/");
@@ -7,6 +8,22 @@ export default defineEventHandler(async (e) => {
7
8
  return "Provide a font name and weight";
8
9
  const name = _name[0].toUpperCase() + _name.slice(1);
9
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
+ }
10
27
  const css = await globalThis.$fetch(`https://fonts.googleapis.com/css2?family=${name}:wght@${weight}`, {
11
28
  headers: {
12
29
  // Make sure it returns TTF.
@@ -1,12 +1,10 @@
1
1
  import { H3Error, createError, defineEventHandler, getQuery, setHeader } from "h3";
2
- import { resolveRendererContext } from "../../../core/utils/resolveRendererContext.mjs";
3
- import { fetchIsland } from "../../../core/html/fetchIsland.mjs";
4
- import { devIframeTemplate } from "../../../core/html/devIframeTemplate.mjs";
5
- import { applyInlineCss } from "../../../core/html/applyInlineCss.mjs";
6
- import { useOgImageBufferCache } from "../../../cache.mjs";
7
- import { useOgImageRuntimeConfig } from "../../../utils.mjs";
2
+ import { useOgImageBufferCache } from "../util/cache.mjs";
3
+ import { useOgImageRuntimeConfig } from "../../shared.mjs";
4
+ import { resolveContext } from "../og-image/context.mjs";
5
+ import { html } from "../og-image/templates/html.mjs";
8
6
  export default defineEventHandler(async (e) => {
9
- const ctx = await resolveRendererContext(e);
7
+ const ctx = await resolveContext(e);
10
8
  if (ctx instanceof H3Error)
11
9
  return ctx;
12
10
  const { isDebugJsonPayload, extension, options, renderer } = ctx;
@@ -18,10 +16,11 @@ export default defineEventHandler(async (e) => {
18
16
  compatibilityHints.push("Converting PNGs to JPEGs requires Sharp which only runs on Node based systems.");
19
17
  if (options.renderer === "chromium")
20
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");
21
- if (options.component !== "PageScreenshot" && await applyInlineCss(ctx, await fetchIsland(ctx)))
22
- compatibilityHints.push("Inlining CSS is only supported in Node based environments.");
23
19
  setHeader(e, "Content-Type", "application/json");
24
20
  return {
21
+ siteConfig: {
22
+ url: e.context.siteConfig.get().url
23
+ },
25
24
  compatibilityHints,
26
25
  cacheKey: ctx.key,
27
26
  options: ctx.options,
@@ -31,7 +30,7 @@ export default defineEventHandler(async (e) => {
31
30
  switch (extension) {
32
31
  case "html":
33
32
  setHeader(e, "Content-Type", `text/html`);
34
- return devIframeTemplate(ctx);
33
+ return html(ctx);
35
34
  case "svg":
36
35
  if (!debug && !import.meta.dev) {
37
36
  return createError({
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../../../.nuxt/tsconfig.server.json"
3
+ }
@@ -1,5 +1,5 @@
1
1
  import { type H3Error } from 'h3';
2
- import type { OgImageRenderEventContext } from './types';
2
+ import type { OgImageRenderEventContext } from '../../types';
3
3
  export declare function useOgImageBufferCache(ctx: OgImageRenderEventContext, options: {
4
4
  baseCacheKey: string | false;
5
5
  cacheMaxAgeSeconds?: number;
@@ -0,0 +1,3 @@
1
+ export declare function htmlDecodeQuotes(html: string): string;
2
+ export declare function decodeHtml(html: string): string;
3
+ export declare function decodeObjectHtmlEntities(obj: Record<string, string | any>): Record<string, any>;
@@ -0,0 +1,15 @@
1
+ export function htmlDecodeQuotes(html) {
2
+ return html.replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&#x27;/g, "'");
3
+ }
4
+ export function decodeHtml(html) {
5
+ return html.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&").replace(/&cent;/g, "\xA2").replace(/&pound;/g, "\xA3").replace(/&yen;/g, "\xA5").replace(/&euro;/g, "\u20AC").replace(/&copy;/g, "\xA9").replace(/&reg;/g, "\xAE").replace(/&quot;/g, '"').replace(/&#39;/g, "'").replace(/&#x27;/g, "'").replace(/&#x2F;/g, "/").replace(/&#([0-9]+);/g, (full, int) => {
6
+ return String.fromCharCode(Number.parseInt(int));
7
+ });
8
+ }
9
+ export function decodeObjectHtmlEntities(obj) {
10
+ Object.entries(obj).forEach(([key, value]) => {
11
+ if (typeof value === "string")
12
+ obj[key] = decodeHtml(value);
13
+ });
14
+ return obj;
15
+ }
@@ -0,0 +1,6 @@
1
+ import type { NitroRouteRules } from 'nitropack';
2
+ import type { H3Event } from 'h3';
3
+ import type { NuxtIslandResponse } from 'nuxt/dist/core/runtime/nitro/renderer';
4
+ export declare function fetchIsland(e: H3Event, component: string, props: Record<string, any>): Promise<NuxtIslandResponse>;
5
+ export declare function withoutQuery(path: string): string;
6
+ export declare function createNitroRouteRuleMatcher(): ((path: string) => NitroRouteRules);
@@ -0,0 +1,32 @@
1
+ import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
2
+ import { defu } from "defu";
3
+ import { withoutBase, withoutTrailingSlash } from "ufo";
4
+ import { hash } from "ohash";
5
+ import { useRuntimeConfig } from "#imports";
6
+ export function fetchIsland(e, component, props) {
7
+ const hashId = hash([component, props]);
8
+ return e.$fetch(`/__nuxt_island/${component}_${hashId}.json`, {
9
+ params: {
10
+ props: JSON.stringify(props)
11
+ }
12
+ });
13
+ }
14
+ export function withoutQuery(path) {
15
+ return path.split("?")[0];
16
+ }
17
+ export function createNitroRouteRuleMatcher() {
18
+ const { nitro, app } = useRuntimeConfig();
19
+ const _routeRulesMatcher = toRouteMatcher(
20
+ createRadixRouter({
21
+ routes: Object.fromEntries(
22
+ Object.entries(nitro?.routeRules || {}).map(([path, rules]) => [withoutTrailingSlash(path), rules])
23
+ )
24
+ })
25
+ );
26
+ return (path) => {
27
+ return defu({}, ..._routeRulesMatcher.matchAll(
28
+ // radix3 does not support trailing slashes
29
+ withoutBase(withoutTrailingSlash(withoutQuery(path)), app.baseURL)
30
+ ).reverse());
31
+ };
32
+ }
@@ -1,5 +1,5 @@
1
- import type { OgImageOptions } from '../../types';
2
- declare const _default: import("vue").DefineComponent<OgImageOptions<"NuxtSeo">, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<OgImageOptions<"NuxtSeo">>, {
1
+ import type { OgImageOptions } from '../../../types';
2
+ declare const _default: import("vue").DefineComponent<OgImageOptions<"NuxtSeo">, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<OgImageOptions<"NuxtSeo">>, {
3
3
  props?: any;
4
4
  }, {}>;
5
5
  export default _default;
@@ -1,5 +1,5 @@
1
- import type { OgImagePageScreenshotOptions } from '../../types';
2
- declare const _default: import("vue").DefineComponent<OgImagePageScreenshotOptions, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<OgImagePageScreenshotOptions>, {
1
+ import type { OgImagePageScreenshotOptions } from '../../../types';
2
+ declare const _default: import("vue").DefineComponent<OgImagePageScreenshotOptions, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<OgImagePageScreenshotOptions>, {
3
3
  props?: any;
4
4
  }, {}>;
5
5
  export default _default;
@@ -0,0 +1,64 @@
1
+ <script setup lang="ts">
2
+ /**
3
+ * @credits @arashsheyda <https://github.com/arashsheyda>
4
+ */
5
+
6
+ withDefaults(defineProps<{
7
+ title?: string
8
+ description?: string
9
+ bg?: string
10
+ icon?: string
11
+ logo?: string
12
+ image?: string
13
+ username?: string
14
+ socials?: { name: string, icon: string }[]
15
+ }>(), {
16
+ bg: 'linear-gradient(to bottom right, #171717, #131313)',
17
+ })
18
+ </script>
19
+
20
+ <template>
21
+ <div
22
+ class="relative h-full w-full flex items-center justify-center bg-neutral-900 text-white border-2 border-white"
23
+ :style="{ backgroundImage: bg }"
24
+ >
25
+ <div
26
+ v-if="image"
27
+ class="absolute inset-0 w-full h-full bg-center opacity-10"
28
+ :style="{ backgroundImage: `url(${image})` }"
29
+ />
30
+ <div class="flex flex-col items-center text-center">
31
+ <h1 class="flex gap-4 text-7xl font-bold">
32
+ <Icon
33
+ v-if="icon"
34
+ :name="icon"
35
+ />
36
+ {{ title }}
37
+ </h1>
38
+ <p class="text-2xl max-w-3xl">
39
+ {{ description }}
40
+ </p>
41
+ </div>
42
+
43
+ <img
44
+ v-if="logo"
45
+ :src="logo"
46
+ class="absolute bottom-0 left-0 p-5"
47
+ style="height: 125px; width: 153px;"
48
+ >
49
+ <div class="absolute bottom-5 right-5 flex gap-4">
50
+ <div
51
+ v-if="username"
52
+ class="absolute bottom-12 right-8 font-bold"
53
+ >
54
+ {{ username }}
55
+ </div>
56
+ <Icon
57
+ v-for="social of socials"
58
+ :key="social.name"
59
+ :name="social.icon!"
60
+ class="w-7 h-7"
61
+ />
62
+ </div>
63
+ </div>
64
+ </template>
@@ -4,7 +4,7 @@
4
4
  */
5
5
 
6
6
  import { computed, defineComponent, h, resolveComponent } from 'vue'
7
- import { useOgImageRuntimeConfig } from '../../../utils'
7
+ import { useOgImageRuntimeConfig } from '../../../../shared'
8
8
  import { useSiteConfig } from '#imports'
9
9
 
10
10
  // convert to typescript props
@@ -25,10 +25,10 @@ const org = computed(() => props.title.split('/')[0])
25
25
  const repo = computed(() => props.title.split('/')[1])
26
26
 
27
27
  const stars = computed(() => {
28
- return new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(props.stars || 0)
28
+ return new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(Number(props.stars || 0))
29
29
  })
30
30
  const downloads = computed(() => new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' })
31
- .format(props.downloads || 0),
31
+ .format(Number(props.downloads || 0)),
32
32
  )
33
33
 
34
34
  const description = computed(() => (props.description || '').slice(0, 200))
@@ -1,2 +1,2 @@
1
- import type { DefineOgImageInput } from '../types';
1
+ import type { DefineOgImageInput } from '../../types';
2
2
  export declare function defineOgImage(_options?: DefineOgImageInput): void;
@@ -1,10 +1,9 @@
1
1
  import { defu } from "defu";
2
2
  import { appendHeader } from "h3";
3
- import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
4
- import { withoutBase } from "ufo";
5
- import { getOgImagePath, separateProps, useOgImageRuntimeConfig, withoutQuery } from "../utils.mjs";
6
- import { createOgImageMeta, normaliseOptions } from "../nuxt/utils.mjs";
7
- import { useNuxtApp, useRequestEvent, useRoute, useRuntimeConfig } from "#imports";
3
+ import { getOgImagePath, separateProps, useOgImageRuntimeConfig } from "../../shared.mjs";
4
+ import { createOgImageMeta, normaliseOptions } from "../utils.mjs";
5
+ import { createNitroRouteRuleMatcher } from "../../nitro/util/kit.mjs";
6
+ import { useNuxtApp, useRequestEvent, useRoute } from "#imports";
8
7
  export function defineOgImage(_options = {}) {
9
8
  if (!import.meta.server)
10
9
  return;
@@ -12,12 +11,8 @@ export function defineOgImage(_options = {}) {
12
11
  const ogImageInstances = nuxtApp.ssrContext._ogImageInstances || [];
13
12
  const route = useRoute();
14
13
  const basePath = route.path || "/";
15
- const _routeRulesMatcher = toRouteMatcher(
16
- createRadixRouter({ routes: useRuntimeConfig().nitro?.routeRules })
17
- );
18
- const routeRules = defu({}, ..._routeRulesMatcher.matchAll(
19
- withoutBase(withoutQuery(basePath), useRuntimeConfig().app.baseURL)
20
- ).reverse()).ogImage;
14
+ const routeRuleMatcher = createNitroRouteRuleMatcher();
15
+ const routeRules = routeRuleMatcher(basePath).ogImage;
21
16
  if (!_options || nuxtApp.ssrContext?.event.context._nitro?.routeRules?.ogImage === false || typeof routeRules !== "undefined" && routeRules === false) {
22
17
  ogImageInstances.forEach((e) => {
23
18
  e.dispose();
@@ -1,3 +1,3 @@
1
- import type { ExtractComponentProps, OgImageOptions } from '../types';
1
+ import type { ExtractComponentProps, OgImageOptions } from '../../types';
2
2
  import type { OgImageComponents } from '#nuxt-og-image/components';
3
3
  export declare function defineOgImageComponent<T extends keyof OgImageComponents>(component: T, props?: Partial<ExtractComponentProps<OgImageComponents[T]>>, options?: OgImageOptions): void;
@@ -1,2 +1,2 @@
1
- import type { OgImagePageScreenshotOptions } from '../types';
1
+ import type { OgImagePageScreenshotOptions } from '../../types';
2
2
  export declare function defineOgImageScreenshot(options?: OgImagePageScreenshotOptions): any;
File without changes
@@ -0,0 +1,6 @@
1
+ export function defineOgImage(_options = {}) {
2
+ }
3
+ export function defineOgImageComponent(component, props = {}, options = {}) {
4
+ }
5
+ export function defineOgImageScreenshot(options = {}) {
6
+ }
@@ -1,7 +1,7 @@
1
1
  import { parseURL } from "ufo";
2
2
  import { toValue } from "vue";
3
3
  import { defu } from "defu";
4
- import { isInternalRoute, separateProps } from "../../utils.pure.mjs";
4
+ import { isInternalRoute, separateProps } from "../../pure.mjs";
5
5
  import { defineNuxtPlugin, useRequestEvent, withSiteUrl } from "#imports";
6
6
  export default defineNuxtPlugin({
7
7
  setup(nuxtApp) {
@@ -15,20 +15,29 @@ export default defineNuxtPlugin({
15
15
  key: "nuxt-og-image:overrides-and-canonical-urls",
16
16
  hooks: {
17
17
  "tags:resolve": async (ctx2) => {
18
+ const hasPrimaryPayload = ctx2.tags.some((tag) => tag.tag === "script" && tag.props.id === "nuxt-og-image-options");
18
19
  let overrides;
19
20
  for (const tag of ctx2.tags) {
20
21
  if (tag.tag === "script" && tag.props.id === "nuxt-og-image-overrides") {
21
- overrides = separateProps(JSON.parse(tag.innerHTML || "{}"));
22
- delete ctx2.tags[ctx2.tags.indexOf(tag)];
22
+ if (hasPrimaryPayload) {
23
+ overrides = separateProps(JSON.parse(tag.innerHTML || "{}"));
24
+ delete ctx2.tags[ctx2.tags.indexOf(tag)];
25
+ } else {
26
+ tag.props.id = "nuxt-og-image-options";
27
+ tag.innerHTML = JSON.stringify(separateProps(JSON.parse(tag.innerHTML || "{}")));
28
+ tag._d = "script:id:nuxt-og-image-options";
29
+ }
23
30
  break;
24
31
  }
25
32
  }
26
33
  ctx2.tags = ctx2.tags.filter(Boolean);
27
34
  for (const tag of ctx2.tags) {
28
- if (tag.tag === "meta" && (tag.props.property === "og:image" || tag.props.name === "twitter:image:src")) {
35
+ if (tag.tag === "meta" && (tag.props.property === "og:image" || ["twitter:image:src", "twitter:image"].includes(tag.props.name))) {
29
36
  if (!tag.props.content.startsWith("https")) {
30
37
  await nuxtApp.runWithContext(() => {
31
- tag.props.content = toValue(withSiteUrl(tag.props.content));
38
+ tag.props.content = toValue(withSiteUrl(tag.props.content, {
39
+ withBase: true
40
+ }));
32
41
  });
33
42
  }
34
43
  } else if (overrides && tag.tag === "script" && tag.props.id === "nuxt-og-image-options") {
@@ -1,7 +1,7 @@
1
1
  import { defu } from "defu";
2
2
  import { parseURL, withoutBase } from "ufo";
3
3
  import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
4
- import { getOgImagePath, isInternalRoute, useOgImageRuntimeConfig } from "../../utils.mjs";
4
+ import { getOgImagePath, isInternalRoute, useOgImageRuntimeConfig } from "../../shared.mjs";
5
5
  import { createOgImageMeta, normaliseOptions } from "../utils.mjs";
6
6
  import { defineNuxtPlugin, useRequestEvent } from "#imports";
7
7
  export default defineNuxtPlugin((nuxtApp) => {
@@ -1,3 +1,4 @@
1
+ import type { NuxtSSRContext } from 'nuxt/app';
1
2
  import type { DefineOgImageInput, OgImageOptions, OgImagePrebuilt } from '../types';
2
- export declare function createOgImageMeta(src: string | null, input: OgImageOptions | OgImagePrebuilt, resolvedOptions: OgImageOptions, ssrContext: Record<string, any>): void;
3
+ export declare function createOgImageMeta(src: string | null, input: OgImageOptions | OgImagePrebuilt, resolvedOptions: OgImageOptions, ssrContext: NuxtSSRContext): void;
3
4
  export declare function normaliseOptions(_options: DefineOgImageInput): OgImageOptions | OgImagePrebuilt;
@@ -1,6 +1,6 @@
1
1
  import { defu } from "defu";
2
2
  import { withQuery } from "ufo";
3
- import { getExtension, separateProps } from "../utils.mjs";
3
+ import { getExtension, separateProps } from "../shared.mjs";
4
4
  import { unref, useServerHead } from "#imports";
5
5
  import { componentNames } from "#build/nuxt-og-image/components.mjs";
6
6
  export function createOgImageMeta(src, input, resolvedOptions, ssrContext) {
@@ -1,4 +1,5 @@
1
1
  import type { InputFontConfig, OgImageOptions, ResolvedFontConfig } from './types';
2
+ export declare function toBase64Image(fileName: string, data: string | ArrayBuffer): string;
2
3
  export declare function isInternalRoute(path: string): boolean;
3
4
  export declare function separateProps(options: OgImageOptions | undefined, ignoreKeys?: string[]): {
4
5
  props: Record<string, any>;