nuxt-og-image 3.0.0-rc.9 → 3.0.0

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 (477) hide show
  1. package/README.md +8 -24
  2. package/dist/client/200.html +274 -15
  3. package/dist/client/404.html +274 -15
  4. package/dist/client/_nuxt/0OCEc-sb.js +1 -0
  5. package/dist/client/_nuxt/16nqZaIT.js +1 -0
  6. package/dist/client/_nuxt/3Ts0ZrM4.js +4 -0
  7. package/dist/client/_nuxt/44JOqR_V.js +1 -0
  8. package/dist/client/_nuxt/4FkZXfg1.js +3 -0
  9. package/dist/client/_nuxt/4WleZr1P.js +1 -0
  10. package/dist/client/_nuxt/5HixFuyr.js +1 -0
  11. package/dist/client/_nuxt/5bRVBCrv.js +1 -0
  12. package/dist/client/_nuxt/7LPQ6a13.js +2 -0
  13. package/dist/client/_nuxt/8WiSp-0_.js +1 -0
  14. package/dist/client/_nuxt/9CfBjzQa.js +1 -0
  15. package/dist/client/_nuxt/B-9EjyZr.js +1 -0
  16. package/dist/client/_nuxt/B-a2BbyY.js +1 -0
  17. package/dist/client/_nuxt/B0LoMq2b.js +1 -0
  18. package/dist/client/_nuxt/B1ejXUAS.js +1 -0
  19. package/dist/client/_nuxt/B2DkETJQ.js +1 -0
  20. package/dist/client/_nuxt/B3LRAdDP.js +1 -0
  21. package/dist/client/_nuxt/B3a86pAO.js +1 -0
  22. package/dist/client/_nuxt/B5La0Eyp.js +1 -0
  23. package/dist/client/_nuxt/B6E6ObS_.js +8 -0
  24. package/dist/client/_nuxt/B7-FEXAT.js +1 -0
  25. package/dist/client/_nuxt/B9HI_aQy.js +1 -0
  26. package/dist/client/_nuxt/B9vFkdfw.js +1 -0
  27. package/dist/client/_nuxt/BAGvEKUB.js +1 -0
  28. package/dist/client/_nuxt/BAp2aEeE.js +1 -0
  29. package/dist/client/_nuxt/BB9S_66N.js +1 -0
  30. package/dist/client/_nuxt/BBDuFDsq.js +1 -0
  31. package/dist/client/_nuxt/BC7ivatP.js +1 -0
  32. package/dist/client/_nuxt/BCOu96sC.js +1 -0
  33. package/dist/client/_nuxt/BD3t3nJY.js +1 -0
  34. package/dist/client/_nuxt/BDJ7po1j.js +1 -0
  35. package/dist/client/_nuxt/BGk6HrHT.js +1 -0
  36. package/dist/client/_nuxt/BHSTd-7M.js +1 -0
  37. package/dist/client/_nuxt/BITGhEdf.js +1 -0
  38. package/dist/client/_nuxt/BKFBoKT4.js +1 -0
  39. package/dist/client/_nuxt/BKNiEhql.js +1 -0
  40. package/dist/client/_nuxt/BLmvGqlk.js +1 -0
  41. package/dist/client/_nuxt/BMRpS3Xo.js +1 -0
  42. package/dist/client/_nuxt/BMkdSFOr.js +1 -0
  43. package/dist/client/_nuxt/BNgG76gt.js +1 -0
  44. package/dist/client/_nuxt/BNofkYSZ.js +165 -0
  45. package/dist/client/_nuxt/BOp3HRET.js +1 -0
  46. package/dist/client/_nuxt/BPhJoBd6.js +1 -0
  47. package/dist/client/_nuxt/BQnHL-cn.js +1 -0
  48. package/dist/client/_nuxt/BS9sT-GQ.js +1 -0
  49. package/dist/client/_nuxt/BSB_bK09.js +1 -0
  50. package/dist/client/_nuxt/BTtaZsq5.js +1 -0
  51. package/dist/client/_nuxt/BU83OF-G.js +1 -0
  52. package/dist/client/_nuxt/BUeIC4cT.js +1 -0
  53. package/dist/client/_nuxt/BXF7Vm5l.js +1 -0
  54. package/dist/client/_nuxt/BXP-NDAE.js +1 -0
  55. package/dist/client/_nuxt/BXUVD3TH.js +1 -0
  56. package/dist/client/_nuxt/BXWtGw2n.js +6 -0
  57. package/dist/client/_nuxt/BYLuaE_S.js +3 -0
  58. package/dist/client/_nuxt/BYelj_cE.js +1 -0
  59. package/dist/client/_nuxt/B_Sdu6N9.js +1 -0
  60. package/dist/client/_nuxt/BaWyeHV_.js +1 -0
  61. package/dist/client/_nuxt/Ba_2pva2.js +1 -0
  62. package/dist/client/_nuxt/BbJj1K1w.js +1 -0
  63. package/dist/client/_nuxt/BeX7BQ1y.js +1 -0
  64. package/dist/client/_nuxt/BeocmOPF.js +1 -0
  65. package/dist/client/_nuxt/BfVRrWqI.js +1 -0
  66. package/dist/client/_nuxt/BgEvnnZj.js +1 -0
  67. package/dist/client/_nuxt/Bgrlo6mM.js +1 -0
  68. package/dist/client/_nuxt/BiVAY1KT.js +1 -0
  69. package/dist/client/_nuxt/Bl6w8nq6.js +29 -0
  70. package/dist/client/_nuxt/BmUjtHPt.js +1 -0
  71. package/dist/client/_nuxt/Bn5gmY5k.js +1 -0
  72. package/dist/client/_nuxt/BnYPtiAB.js +1 -0
  73. package/dist/client/_nuxt/BotTw_1M.js +1 -0
  74. package/dist/client/_nuxt/BpDWT_aG.js +1 -0
  75. package/dist/client/_nuxt/BpqPLH6b.js +1 -0
  76. package/dist/client/_nuxt/Br4herk8.js +1 -0
  77. package/dist/client/_nuxt/Brmco9EZ.js +2 -0
  78. package/dist/client/_nuxt/Bs9WCFOo.js +1 -0
  79. package/dist/client/_nuxt/BsvsQ1iS.js +1 -0
  80. package/dist/client/_nuxt/BtPWTO6-.js +1 -0
  81. package/dist/client/_nuxt/BuqjW-Uc.js +1 -0
  82. package/dist/client/_nuxt/BvCdDh2R.js +1 -0
  83. package/dist/client/_nuxt/BwUg_Rem.js +1 -0
  84. package/dist/client/_nuxt/Bxuka25Y.js +1 -0
  85. package/dist/client/_nuxt/BxwAa5i0.js +1 -0
  86. package/dist/client/_nuxt/BxwkrKyP.js +3 -0
  87. package/dist/client/_nuxt/ByN1NmdT.js +11 -0
  88. package/dist/client/_nuxt/C2Z2wNnw.js +1 -0
  89. package/dist/client/_nuxt/C3wf4cjV.js +27 -0
  90. package/dist/client/_nuxt/C5J_9lw5.js +1 -0
  91. package/dist/client/_nuxt/C6doOGgB.js +1 -0
  92. package/dist/client/_nuxt/C7n-thn-.js +1 -0
  93. package/dist/client/_nuxt/C7oZ9nno.js +1 -0
  94. package/dist/client/_nuxt/C7xspq5a.js +1 -0
  95. package/dist/client/_nuxt/C86elO-m.js +1 -0
  96. package/dist/client/_nuxt/C8DXlOXe.js +1 -0
  97. package/dist/client/_nuxt/C9CNr0dZ.js +1 -0
  98. package/dist/client/_nuxt/CA2blNRc.js +1 -0
  99. package/dist/client/_nuxt/CA9nliXM.js +1 -0
  100. package/dist/client/_nuxt/CCW61mLD.js +1 -0
  101. package/dist/client/_nuxt/CDNnVXJ3.js +1 -0
  102. package/dist/client/_nuxt/CDP-pALJ.js +1 -0
  103. package/dist/client/_nuxt/CFTaR7kf.js +1 -0
  104. package/dist/client/_nuxt/CFy8Z7mU.js +1 -0
  105. package/dist/client/_nuxt/CGmujMTu.js +1 -0
  106. package/dist/client/_nuxt/CHDuk4cg.js +1 -0
  107. package/dist/client/_nuxt/CJYoS41Z.js +1 -0
  108. package/dist/client/_nuxt/CKK8qrH7.js +3 -0
  109. package/dist/client/_nuxt/CKqhLkpw.js +1 -0
  110. package/dist/client/_nuxt/CLTURUqp.js +9 -0
  111. package/dist/client/_nuxt/CO7HdiM_.js +1 -0
  112. package/dist/client/_nuxt/CPQn-Lhb.js +1 -0
  113. package/dist/client/_nuxt/CPw9RxLe.js +1 -0
  114. package/dist/client/_nuxt/CRDKj6ck.js +1 -0
  115. package/dist/client/_nuxt/CRUEGcu5.js +1 -0
  116. package/dist/client/_nuxt/CRlnGVMD.js +1 -0
  117. package/dist/client/_nuxt/CS6sTstm.js +4 -0
  118. package/dist/client/_nuxt/CSPPpfsQ.js +1 -0
  119. package/dist/client/_nuxt/CTeQKLZv.js +1 -0
  120. package/dist/client/_nuxt/CTsPJjdJ.js +1 -0
  121. package/dist/client/_nuxt/CUNQUWO_.js +1 -0
  122. package/dist/client/_nuxt/CV5B5C80.js +1 -0
  123. package/dist/client/_nuxt/CZZ6oYdA.js +1 -0
  124. package/dist/client/_nuxt/CZkFsSlX.js +1 -0
  125. package/dist/client/_nuxt/C_g069vW.js +1 -0
  126. package/dist/client/_nuxt/C_h5G2He.js +20 -0
  127. package/dist/client/_nuxt/CaR_I2C-.js +1 -0
  128. package/dist/client/_nuxt/Cb48SAmt.js +1 -0
  129. package/dist/client/_nuxt/Cda-MJFk.js +1 -0
  130. package/dist/client/_nuxt/CeIpHJfZ.js +12 -0
  131. package/dist/client/_nuxt/CgwOUXSn.js +1 -0
  132. package/dist/client/_nuxt/ChH25C4w.js +1 -0
  133. package/dist/client/_nuxt/CidHYXz9.js +1 -0
  134. package/dist/client/_nuxt/ClPxYbPx.js +1 -0
  135. package/dist/client/_nuxt/Clj_IpB8.js +1 -0
  136. package/dist/client/_nuxt/CmN1UzhW.js +1 -0
  137. package/dist/client/_nuxt/Crs1WKlG.js +1 -0
  138. package/dist/client/_nuxt/CsTmP73Z.js +1 -0
  139. package/dist/client/_nuxt/CsW3I34-.js +1 -0
  140. package/dist/client/_nuxt/CsuMf1xJ.js +1 -0
  141. package/dist/client/_nuxt/CsyjKwr8.js +1 -0
  142. package/dist/client/_nuxt/Ctb_e1-I.js +1 -0
  143. package/dist/client/_nuxt/CvHWZNAB.js +1 -0
  144. package/dist/client/_nuxt/CxK4ekaG.js +1 -0
  145. package/dist/client/_nuxt/CyUS7F7b.js +17 -0
  146. package/dist/client/_nuxt/Cz-n9WvF.js +1 -0
  147. package/dist/client/_nuxt/Cz3ygVR-.js +1 -0
  148. package/dist/client/_nuxt/CzK8D06Z.js +1 -0
  149. package/dist/client/_nuxt/CzPA46E-.js +1 -0
  150. package/dist/client/_nuxt/D0N_qbs7.js +2 -0
  151. package/dist/client/_nuxt/D0pnavP-.js +1 -0
  152. package/dist/client/_nuxt/D3VXSfF0.js +1 -0
  153. package/dist/client/_nuxt/D46m5Xd3.js +1 -0
  154. package/dist/client/_nuxt/D4miJ1xw.js +1 -0
  155. package/dist/client/_nuxt/D5lQfeOG.js +1 -0
  156. package/dist/client/_nuxt/D6oCKXcX.js +1 -0
  157. package/dist/client/_nuxt/D71BffLY.js +1 -0
  158. package/dist/client/_nuxt/D8V69RRQ.js +1 -0
  159. package/dist/client/_nuxt/DBLgxP_1.js +2 -0
  160. package/dist/client/_nuxt/DCmDdbvy.js +1 -0
  161. package/dist/client/_nuxt/DDG_rSGg.js +8 -0
  162. package/dist/client/_nuxt/DDK5Hw8n.js +1 -0
  163. package/dist/client/_nuxt/DFHN_7lU.js +3 -0
  164. package/dist/client/_nuxt/DFaziNDp.js +1 -0
  165. package/dist/client/_nuxt/DFsxFixh.js +1 -0
  166. package/dist/client/_nuxt/DGhhRy1e.js +1 -0
  167. package/dist/client/_nuxt/DIw1DfnK.js +1 -0
  168. package/dist/client/_nuxt/DJNHLfzP.js +1 -0
  169. package/dist/client/_nuxt/DJOPMAPO.js +10 -0
  170. package/dist/client/_nuxt/DKgh9jPU.js +20 -0
  171. package/dist/client/_nuxt/DNR26wTC.js +1 -0
  172. package/dist/client/_nuxt/DO04iIl4.js +1 -0
  173. package/dist/client/_nuxt/DOOuMSMh.js +1 -0
  174. package/dist/client/_nuxt/DOqtC9FP.js +1 -0
  175. package/dist/client/_nuxt/DQ-rpzxz.js +1 -0
  176. package/dist/client/_nuxt/DRuVOcqL.js +1 -0
  177. package/dist/client/_nuxt/DSmiUmWA.js +1 -0
  178. package/dist/client/_nuxt/DSv7Jr7N.js +5 -0
  179. package/dist/client/_nuxt/DTMFIK7w.js +1 -0
  180. package/dist/client/_nuxt/DV9_Ze0W.js +1 -0
  181. package/dist/client/_nuxt/DXZpi2gR.js +1 -0
  182. package/dist/client/_nuxt/DXdsTRaC.js +1 -0
  183. package/dist/client/_nuxt/DXtfa3TF.js +1 -0
  184. package/dist/client/_nuxt/DYgwfmdY.js +1 -0
  185. package/dist/client/_nuxt/DYikCEmq.js +1 -0
  186. package/dist/client/_nuxt/DYrknm32.js +1 -0
  187. package/dist/client/_nuxt/D_lsq3cR.js +1 -0
  188. package/dist/client/_nuxt/D_nC6SfZ.js +1 -0
  189. package/dist/client/_nuxt/Dc3u8CCo.js +1 -0
  190. package/dist/client/_nuxt/DeVv6D4_.js +1 -0
  191. package/dist/client/_nuxt/Df4vQnuo.js +1 -0
  192. package/dist/client/_nuxt/Di1G_BEd.js +1 -0
  193. package/dist/client/_nuxt/DjTlIhuc.js +1 -0
  194. package/dist/client/_nuxt/Dk2kDqHs.js +1 -0
  195. package/dist/client/_nuxt/DkIL16gc.js +2 -0
  196. package/dist/client/_nuxt/DkfuXiRx.js +204 -0
  197. package/dist/client/_nuxt/DmixpzPA.js +1 -0
  198. package/dist/client/_nuxt/DnLUQrgA.js +1 -0
  199. package/dist/client/_nuxt/Dnd6U92I.js +25 -0
  200. package/dist/client/_nuxt/DofIr7ih.js +1 -0
  201. package/dist/client/_nuxt/DrUHIbQf.js +1 -0
  202. package/dist/client/_nuxt/DrhOmAGa.js +1 -0
  203. package/dist/client/_nuxt/DsO5WfEU.js +1 -0
  204. package/dist/client/_nuxt/DsclqnHy.js +4 -0
  205. package/dist/client/_nuxt/Dwk9V841.js +1 -0
  206. package/dist/client/_nuxt/DyLIn2qo.js +1 -0
  207. package/dist/client/_nuxt/DzhYcJWo.js +1 -0
  208. package/dist/client/_nuxt/Dziqk49f.js +1 -0
  209. package/dist/client/_nuxt/E5r7Moxb.js +16 -0
  210. package/dist/client/_nuxt/FJDVp-XM.js +1 -0
  211. package/dist/client/_nuxt/FMRyFT8D.js +1 -0
  212. package/dist/client/_nuxt/GACPk8cj.js +16 -0
  213. package/dist/client/_nuxt/H94RPpLS.js +1 -0
  214. package/dist/client/_nuxt/HrnDn_2Q.js +1 -0
  215. package/dist/client/_nuxt/HxmVvryO.js +1 -0
  216. package/dist/client/_nuxt/JYC31MTV.js +1 -0
  217. package/dist/client/_nuxt/Jl0QvYgb.js +1 -0
  218. package/dist/client/_nuxt/KA8c-whL.js +1 -0
  219. package/dist/client/_nuxt/KEYLhlmT.js +1 -0
  220. package/dist/client/_nuxt/KN-DOLVO.js +1 -0
  221. package/dist/client/_nuxt/Ka_J5llu.js +1 -0
  222. package/dist/client/_nuxt/KuNYkU7X.js +1 -0
  223. package/dist/client/_nuxt/MS3qTAOR.js +1 -0
  224. package/dist/client/_nuxt/N3zwmhmW.js +1 -0
  225. package/dist/client/_nuxt/O4cDyHwR.js +1 -0
  226. package/dist/client/_nuxt/OPd3ySAa.js +1 -0
  227. package/dist/client/_nuxt/Opso89zU.js +16 -0
  228. package/dist/client/_nuxt/P3XzCKkX.js +1 -0
  229. package/dist/client/_nuxt/PBlC1IT3.js +1 -0
  230. package/dist/client/_nuxt/PauOf_jS.js +1 -0
  231. package/dist/client/_nuxt/Qj0mFepl.js +14 -0
  232. package/dist/client/_nuxt/R9SNgiQ9.js +1 -0
  233. package/dist/client/_nuxt/Rc0-bMtX.js +1 -0
  234. package/dist/client/_nuxt/TYaudu4O.js +1 -0
  235. package/dist/client/_nuxt/UREJT2Bw.js +1 -0
  236. package/dist/client/_nuxt/VRCUJX8G.js +1 -0
  237. package/dist/client/_nuxt/VntNkNt1.js +1 -0
  238. package/dist/client/_nuxt/Ys9ZunwU.js +1 -0
  239. package/dist/client/_nuxt/YxQm0tCS.js +1 -0
  240. package/dist/client/_nuxt/alpzPJ78.js +1 -0
  241. package/dist/client/_nuxt/bEygH-WE.js +3 -0
  242. package/dist/client/_nuxt/builds/latest.json +1 -1
  243. package/dist/client/_nuxt/builds/meta/c0255dff-4096-412a-b1f2-8c73ec29c527.json +1 -0
  244. package/dist/client/_nuxt/cW9vKj3g.js +1 -0
  245. package/dist/client/_nuxt/eJKZXzCK.js +1 -0
  246. package/dist/client/_nuxt/eQYbbmqd.js +16 -0
  247. package/dist/client/_nuxt/entry.DtsycVcr.css +1 -0
  248. package/dist/client/_nuxt/error-404.D2eZnIkK.css +1 -0
  249. package/dist/client/_nuxt/error-500.BJ-KsTwR.css +1 -0
  250. package/dist/client/_nuxt/gwSZkKbG.js +1 -0
  251. package/dist/client/_nuxt/hXH8Gyq8.js +1 -0
  252. package/dist/client/_nuxt/i0hkWYmE.js +1 -0
  253. package/dist/client/_nuxt/iSbrOpM4.js +1 -0
  254. package/dist/client/_nuxt/ithPx4uF.js +1 -0
  255. package/dist/client/_nuxt/jDrCW69G.js +1 -0
  256. package/dist/client/_nuxt/jaXbsbtS.js +1 -0
  257. package/dist/client/_nuxt/kveMaAK5.js +1 -0
  258. package/dist/client/_nuxt/lBoe4CZw.js +1 -0
  259. package/dist/client/_nuxt/lPxKsdjn.js +1 -0
  260. package/dist/client/_nuxt/lRZxrFTT.js +1 -0
  261. package/dist/client/_nuxt/mvTh5Gok.js +1 -0
  262. package/dist/client/_nuxt/pCnzZaOt.js +1 -0
  263. package/dist/client/_nuxt/qpF8edk8.js +1 -0
  264. package/dist/client/_nuxt/qvnQm5y7.js +1 -0
  265. package/dist/client/_nuxt/qwoaayiL.js +1 -0
  266. package/dist/client/_nuxt/qxoleWdb.js +1 -0
  267. package/dist/client/_nuxt/rS0jd3Ly.js +1 -0
  268. package/dist/client/_nuxt/sMI-pExk.js +1 -0
  269. package/dist/client/_nuxt/t1S7pxBA.js +1 -0
  270. package/dist/client/_nuxt/t6MJYFCU.js +5 -0
  271. package/dist/client/_nuxt/tEd5xQ4M.js +1 -0
  272. package/dist/client/_nuxt/xGgVA17b.js +1 -0
  273. package/dist/client/_nuxt/xPNGhBYe.js +1 -0
  274. package/dist/client/_nuxt/xuIuMB9j.js +1 -0
  275. package/dist/client/_nuxt/yvfKceIB.js +1 -0
  276. package/dist/client/_nuxt/z5DqfkHR.js +1 -0
  277. package/dist/client/index.html +274 -15
  278. package/dist/module.d.mts +23 -108
  279. package/dist/module.d.ts +23 -108
  280. package/dist/module.json +6 -2
  281. package/dist/module.mjs +430 -222
  282. package/dist/runtime/assets/Inter-400.ttf.base64 +1 -0
  283. package/dist/runtime/assets/Inter-700.ttf.base64 +1 -0
  284. package/dist/runtime/nitro/og-image/bindings/chromium/chrome-launcher.js +9 -0
  285. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.d.ts +2 -0
  286. package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.js +35 -0
  287. package/dist/runtime/nitro/og-image/bindings/chromium/playwright.d.ts +2 -0
  288. package/dist/runtime/nitro/og-image/bindings/chromium/playwright.js +6 -0
  289. package/dist/runtime/nitro/og-image/bindings/css-inline/node.d.ts +8 -0
  290. package/dist/runtime/nitro/og-image/bindings/css-inline/node.js +7 -0
  291. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm-fs.d.ts +7 -0
  292. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm-fs.js +8 -0
  293. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm.d.ts +7 -0
  294. package/dist/runtime/nitro/og-image/bindings/css-inline/wasm.js +7 -0
  295. package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm-fs.d.ts +1 -1
  296. package/dist/runtime/{core/bindings/resvg/wasm-fs.mjs → nitro/og-image/bindings/resvg/wasm-fs.js} +1 -1
  297. package/dist/runtime/{core → nitro/og-image}/bindings/resvg/wasm.d.ts +1 -1
  298. package/dist/runtime/nitro/og-image/bindings/resvg/wasm.js +5 -0
  299. package/dist/runtime/{core/bindings/satori/wasm-fs.mjs → nitro/og-image/bindings/satori/wasm-fs.js} +1 -1
  300. package/dist/runtime/{core/bindings/satori/wasm.mjs → nitro/og-image/bindings/satori/wasm.js} +2 -3
  301. package/dist/runtime/nitro/og-image/cache/lru.d.ts +9 -0
  302. package/dist/runtime/nitro/og-image/cache/lru.js +15 -0
  303. package/dist/runtime/nitro/og-image/cache/mock.d.ts +9 -0
  304. package/dist/runtime/nitro/og-image/cache/mock.js +9 -0
  305. package/dist/runtime/{core/renderers/chromium/index.d.ts → nitro/og-image/chromium/renderer.d.ts} +1 -1
  306. package/dist/runtime/{core/renderers/chromium/index.mjs → nitro/og-image/chromium/renderer.js} +2 -2
  307. package/dist/runtime/{core/renderers → nitro/og-image}/chromium/screenshot.d.ts +1 -2
  308. package/dist/runtime/{core/renderers/chromium/screenshot.mjs → nitro/og-image/chromium/screenshot.js} +2 -2
  309. package/dist/runtime/nitro/og-image/context.d.ts +5 -0
  310. package/dist/runtime/nitro/og-image/context.js +181 -0
  311. package/dist/runtime/nitro/og-image/instances.d.ts +2 -0
  312. package/dist/runtime/nitro/og-image/instances.js +10 -0
  313. package/dist/runtime/nitro/og-image/satori/font.d.ts +3 -0
  314. package/dist/runtime/nitro/og-image/satori/font.js +39 -0
  315. package/dist/runtime/{core/renderers → nitro/og-image}/satori/instances.d.ts +3 -4
  316. package/dist/runtime/{core/renderers/satori/instances.mjs → nitro/og-image/satori/instances.js} +2 -11
  317. package/dist/runtime/nitro/og-image/satori/plugins/classes.js +17 -0
  318. package/dist/runtime/{core/renderers/satori/plugins/emojis.mjs → nitro/og-image/satori/plugins/emojis.js} +2 -2
  319. package/dist/runtime/nitro/og-image/satori/plugins/encoding.js +17 -0
  320. package/dist/runtime/nitro/og-image/satori/plugins/flex.js +35 -0
  321. package/dist/runtime/nitro/og-image/satori/plugins/imageSrc.js +89 -0
  322. package/dist/runtime/{core/renderers/satori/plugins/unocss.mjs → nitro/og-image/satori/plugins/unocss.js} +2 -2
  323. package/dist/runtime/{core/renderers/satori/index.d.ts → nitro/og-image/satori/renderer.d.ts} +1 -1
  324. package/dist/runtime/{core/renderers/satori/index.mjs → nitro/og-image/satori/renderer.js} +26 -17
  325. package/dist/runtime/{core/html/applyEmojis.d.ts → nitro/og-image/satori/transforms/emojis.d.ts} +2 -2
  326. package/dist/runtime/nitro/og-image/satori/transforms/emojis.js +3593 -0
  327. package/dist/runtime/nitro/og-image/satori/transforms/inlineCss.d.ts +3 -0
  328. package/dist/runtime/nitro/og-image/satori/transforms/inlineCss.js +50 -0
  329. package/dist/runtime/{core/renderers → nitro/og-image}/satori/utils.d.ts +2 -2
  330. package/dist/runtime/{core/renderers/satori/utils.mjs → nitro/og-image/satori/utils.js} +9 -5
  331. package/dist/runtime/{core/renderers → nitro/og-image}/satori/vnodes.d.ts +1 -1
  332. package/dist/runtime/nitro/og-image/satori/vnodes.js +38 -0
  333. package/dist/runtime/nitro/og-image/templates/html.d.ts +2 -0
  334. package/dist/runtime/{core/html/devIframeTemplate.mjs → nitro/og-image/templates/html.js} +31 -29
  335. package/dist/runtime/nitro/plugins/__zero-runtime/nuxt-content.d.ts +2 -0
  336. package/dist/runtime/nitro/plugins/__zero-runtime/nuxt-content.js +9 -0
  337. package/dist/runtime/nitro/plugins/nuxt-content.d.ts +1 -1
  338. package/dist/runtime/nitro/plugins/nuxt-content.js +5 -0
  339. package/dist/runtime/nitro/plugins/prerender.js +33 -0
  340. package/dist/runtime/nitro/routes/__zero-runtime/font.js +8 -0
  341. package/dist/runtime/nitro/routes/__zero-runtime/image.js +8 -0
  342. package/dist/runtime/{server/routes/__og-image__ → nitro/routes}/debug.json.d.ts +1 -1
  343. package/dist/runtime/{server/routes/__og-image__/debug.json.mjs → nitro/routes/debug.json.js} +2 -2
  344. package/dist/runtime/nitro/routes/font.d.ts +2 -0
  345. package/dist/runtime/nitro/routes/font.js +3 -0
  346. package/dist/runtime/nitro/routes/image.d.ts +2 -0
  347. package/dist/runtime/nitro/routes/image.js +3 -0
  348. package/dist/runtime/nitro/tsconfig.json +3 -0
  349. package/dist/runtime/{cache.d.ts → nitro/util/cache.d.ts} +2 -2
  350. package/dist/runtime/{cache.mjs → nitro/util/cache.js} +5 -4
  351. package/dist/runtime/nitro/util/encoding.d.ts +3 -0
  352. package/dist/runtime/nitro/util/encoding.js +15 -0
  353. package/dist/runtime/nitro/util/eventHandlers.d.ts +3 -0
  354. package/dist/runtime/nitro/util/eventHandlers.js +155 -0
  355. package/dist/runtime/nitro/util/kit.d.ts +6 -0
  356. package/dist/runtime/nitro/util/kit.js +32 -0
  357. package/dist/runtime/nitro/util/logger.d.ts +1 -0
  358. package/dist/runtime/nitro/util/logger.js +6 -0
  359. package/dist/runtime/nitro/util/options.d.ts +2 -0
  360. package/dist/runtime/nitro/util/options.js +18 -0
  361. package/dist/runtime/nitro/util/plugins.d.ts +2 -0
  362. package/dist/runtime/nitro/{plugins/nuxt-content.mjs → util/plugins.js} +12 -8
  363. package/dist/runtime/{core/utils → nitro/util}/wasm.d.ts +0 -1
  364. package/dist/runtime/{components → nuxt/components}/OgImage/OgImage.d.ts +2 -4
  365. package/dist/runtime/nuxt/components/OgImage/OgImageScreenshot.d.ts +3 -0
  366. package/dist/runtime/nuxt/components/Templates/Community/Frame.vue +64 -0
  367. package/dist/runtime/{components → nuxt/components}/Templates/Community/Nuxt.vue +6 -5
  368. package/dist/runtime/{components → nuxt/components}/Templates/Community/NuxtSeo.vue +7 -7
  369. package/dist/runtime/{components → nuxt/components}/Templates/Community/Pergel.vue +1 -2
  370. package/dist/runtime/{components → nuxt/components}/Templates/Community/UnJs.vue +2 -2
  371. package/dist/runtime/{composables → nuxt/composables}/defineOgImage.d.ts +1 -1
  372. package/dist/runtime/{composables/defineOgImage.mjs → nuxt/composables/defineOgImage.js} +12 -15
  373. package/dist/runtime/{composables → nuxt/composables}/defineOgImageComponent.d.ts +1 -1
  374. package/dist/runtime/{composables/defineOgImageComponent.mjs → nuxt/composables/defineOgImageComponent.js} +1 -1
  375. package/dist/runtime/nuxt/composables/defineOgImageScreenshot.d.ts +2 -0
  376. package/dist/runtime/nuxt/composables/mock.d.ts +5 -0
  377. package/dist/runtime/nuxt/composables/mock.js +6 -0
  378. package/dist/runtime/nuxt/plugins/__zero-runtime/og-image-canonical-urls.server.d.ts +2 -0
  379. package/dist/runtime/nuxt/plugins/__zero-runtime/og-image-canonical-urls.server.js +9 -0
  380. package/dist/runtime/nuxt/plugins/__zero-runtime/route-rule-og-image.server.d.ts +2 -0
  381. package/dist/runtime/nuxt/plugins/__zero-runtime/route-rule-og-image.server.js +9 -0
  382. package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.d.ts +1 -1
  383. package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.js +5 -0
  384. package/dist/runtime/nuxt/plugins/route-rule-og-image.server.d.ts +1 -1
  385. package/dist/runtime/nuxt/plugins/route-rule-og-image.server.js +5 -0
  386. package/dist/runtime/nuxt/utils/plugins.d.ts +3 -0
  387. package/dist/runtime/nuxt/utils/plugins.js +87 -0
  388. package/dist/runtime/nuxt/utils.d.ts +3 -2
  389. package/dist/runtime/nuxt/{utils.mjs → utils.js} +12 -7
  390. package/dist/runtime/{utils.pure.d.ts → pure.d.ts} +2 -1
  391. package/dist/runtime/{utils.pure.mjs → pure.js} +22 -3
  392. package/dist/runtime/{utils.d.ts → shared.d.ts} +2 -2
  393. package/dist/runtime/{utils.mjs → shared.js} +5 -4
  394. package/dist/runtime/types.d.ts +19 -10
  395. package/dist/types.d.mts +2 -13
  396. package/dist/types.d.ts +2 -13
  397. package/package.json +87 -60
  398. package/dist/client/_nuxt/IconCSS.d0e7b355.js +0 -1
  399. package/dist/client/_nuxt/IconCSS.f0b56d3e.css +0 -1
  400. package/dist/client/_nuxt/builds/meta/bb3d9bad-71c2-44e9-bdfb-e309e6d8b22d.json +0 -1
  401. package/dist/client/_nuxt/entry.a30f63d0.css +0 -1
  402. package/dist/client/_nuxt/entry.c7946b24.js +0 -108
  403. package/dist/client/_nuxt/error-404.1290b959.js +0 -1
  404. package/dist/client/_nuxt/error-404.b751fa02.css +0 -1
  405. package/dist/client/_nuxt/error-500.69009e70.css +0 -1
  406. package/dist/client/_nuxt/error-500.de7cdd09.js +0 -1
  407. package/dist/client/_nuxt/vanilla-picker-NKbIFE8h.23409a58.js +0 -8
  408. package/dist/runtime/components/OgImage/OgImageScreenshot.d.ts +0 -5
  409. package/dist/runtime/composables/defineOgImageScreenshot.d.ts +0 -2
  410. package/dist/runtime/core/bindings/chromium/node.mjs +0 -33
  411. package/dist/runtime/core/bindings/css-inline/node.d.ts +0 -2
  412. package/dist/runtime/core/bindings/css-inline/node.mjs +0 -2
  413. package/dist/runtime/core/bindings/resvg/wasm.mjs +0 -6
  414. package/dist/runtime/core/cache/emojis.d.ts +0 -1
  415. package/dist/runtime/core/cache/emojis.mjs +0 -5
  416. package/dist/runtime/core/cache/fonts.d.ts +0 -3
  417. package/dist/runtime/core/cache/fonts.mjs +0 -6
  418. package/dist/runtime/core/cache/htmlPayload.d.ts +0 -5
  419. package/dist/runtime/core/cache/htmlPayload.mjs +0 -6
  420. package/dist/runtime/core/cache/prerender.d.ts +0 -2
  421. package/dist/runtime/core/cache/prerender.mjs +0 -5
  422. package/dist/runtime/core/env/assets.d.ts +0 -1
  423. package/dist/runtime/core/env/assets.mjs +0 -11
  424. package/dist/runtime/core/font/fetch.d.ts +0 -2
  425. package/dist/runtime/core/font/fetch.mjs +0 -36
  426. package/dist/runtime/core/html/applyEmojis.mjs +0 -37
  427. package/dist/runtime/core/html/applyInlineCss.d.ts +0 -3
  428. package/dist/runtime/core/html/applyInlineCss.mjs +0 -32
  429. package/dist/runtime/core/html/devIframeTemplate.d.ts +0 -2
  430. package/dist/runtime/core/html/fetchIsland.d.ts +0 -3
  431. package/dist/runtime/core/html/fetchIsland.mjs +0 -17
  432. package/dist/runtime/core/options/extract.d.ts +0 -3
  433. package/dist/runtime/core/options/extract.mjs +0 -49
  434. package/dist/runtime/core/options/fetch.d.ts +0 -3
  435. package/dist/runtime/core/options/fetch.mjs +0 -32
  436. package/dist/runtime/core/renderers/satori/plugins/encoding.mjs +0 -8
  437. package/dist/runtime/core/renderers/satori/plugins/flex.mjs +0 -10
  438. package/dist/runtime/core/renderers/satori/plugins/imageSrc.mjs +0 -75
  439. package/dist/runtime/core/renderers/satori/plugins/twClasses.mjs +0 -8
  440. package/dist/runtime/core/renderers/satori/vnodes.mjs +0 -31
  441. package/dist/runtime/core/utils/resolveRendererContext.d.ts +0 -3
  442. package/dist/runtime/core/utils/resolveRendererContext.mjs +0 -97
  443. package/dist/runtime/nitro/plugins/prerender.mjs +0 -36
  444. package/dist/runtime/nitro/utils.d.ts +0 -2
  445. package/dist/runtime/nitro/utils.mjs +0 -16
  446. package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.mjs +0 -43
  447. package/dist/runtime/nuxt/plugins/route-rule-og-image.server.mjs +0 -37
  448. package/dist/runtime/server/assets/inter-latin-ext-400-normal.woff +0 -0
  449. package/dist/runtime/server/assets/inter-latin-ext-700-normal.woff +0 -0
  450. package/dist/runtime/server/routes/__og-image__/font-[name]-[weight].[extension].mjs +0 -49
  451. package/dist/runtime/server/routes/__og-image__/image.mjs +0 -91
  452. package/dist/runtime/{core/bindings/chromium/node.d.ts → nitro/og-image/bindings/chromium/chrome-launcher.d.ts} +0 -0
  453. package/dist/runtime/{core → nitro/og-image}/bindings/resvg/node.d.ts +0 -0
  454. package/dist/runtime/{core/bindings/resvg/node.mjs → nitro/og-image/bindings/resvg/node.js} +0 -0
  455. package/dist/runtime/{core → nitro/og-image}/bindings/satori/node.d.ts +0 -0
  456. package/dist/runtime/{core/bindings/satori/node.mjs → nitro/og-image/bindings/satori/node.js} +0 -0
  457. package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm-fs.d.ts +0 -0
  458. package/dist/runtime/{core → nitro/og-image}/bindings/satori/wasm.d.ts +0 -0
  459. package/dist/runtime/{core → nitro/og-image}/bindings/sharp/node.d.ts +0 -0
  460. package/dist/runtime/{core/bindings/sharp/node.mjs → nitro/og-image/bindings/sharp/node.js} +0 -0
  461. package/dist/runtime/{core/renderers/satori/plugins/emojis.d.ts → nitro/og-image/satori/plugins/classes.d.ts} +0 -0
  462. package/dist/runtime/{core/renderers/satori/plugins/encoding.d.ts → nitro/og-image/satori/plugins/emojis.d.ts} +0 -0
  463. package/dist/runtime/{core/renderers/satori/plugins/flex.d.ts → nitro/og-image/satori/plugins/encoding.d.ts} +0 -0
  464. package/dist/runtime/{core/renderers/satori/plugins/imageSrc.d.ts → nitro/og-image/satori/plugins/flex.d.ts} +0 -0
  465. package/dist/runtime/{core/renderers/satori/plugins/twClasses.d.ts → nitro/og-image/satori/plugins/imageSrc.d.ts} +0 -0
  466. package/dist/runtime/{core/renderers → nitro/og-image}/satori/plugins/unocss.d.ts +0 -0
  467. package/dist/runtime/{server/routes/__og-image__/font-[name]-[weight].[extension].d.ts → nitro/routes/__zero-runtime/font.d.ts} +0 -0
  468. package/dist/runtime/{server/routes/__og-image__ → nitro/routes/__zero-runtime}/image.d.ts +0 -0
  469. package/dist/runtime/{core/utils/wasm.mjs → nitro/util/wasm.js} +0 -0
  470. package/dist/runtime/{components/OgImage/OgImage.mjs → nuxt/components/OgImage/OgImage.js} +1 -1
  471. package/dist/runtime/{components/OgImage/OgImageScreenshot.mjs → nuxt/components/OgImage/OgImageScreenshot.js} +1 -1
  472. package/dist/runtime/{components → nuxt/components}/Templates/Community/BrandedLogo.vue +0 -0
  473. package/dist/runtime/{components → nuxt/components}/Templates/Community/SimpleBlog.vue +1 -1
  474. /package/dist/runtime/{components → nuxt/components}/Templates/Community/Wave.vue +0 -0
  475. /package/dist/runtime/{components → nuxt/components}/Templates/Community/WithEmoji.vue +0 -0
  476. /package/dist/runtime/{composables/defineOgImageScreenshot.mjs → nuxt/composables/defineOgImageScreenshot.js} +0 -0
  477. /package/dist/runtime/{types.mjs → types.js} +0 -0
@@ -0,0 +1,3 @@
1
+ import type { NuxtIslandResponse } from 'nuxt/dist/core/runtime/nitro/renderer';
2
+ import type { OgImageRenderEventContext } from '../../../../types.js';
3
+ export declare function applyInlineCss(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<boolean>;
@@ -0,0 +1,50 @@
1
+ import { useNitroOrigin } from "#imports";
2
+ import { createConsola } from "consola";
3
+ import { useCssInline } from "../instances.js";
4
+ export async function applyInlineCss(ctx, island) {
5
+ const { e } = ctx;
6
+ let html = island.html;
7
+ let css = island.head.style.map((s) => s.innerHTML).filter(Boolean).join("\n");
8
+ const componentInlineStyles = island.head.link.filter((l) => l.href.startsWith("/_nuxt/components") && l.href.replaceAll("/", "").includes(ctx.options.component));
9
+ if (!import.meta.prerender && !componentInlineStyles.length) {
10
+ return false;
11
+ }
12
+ let linksToCss = [];
13
+ if (import.meta.dev) {
14
+ linksToCss = componentInlineStyles.length ? (await Promise.all(
15
+ componentInlineStyles.map((l) => {
16
+ const url = l.href.endsWith("lang.css") ? `${l.href}&hmr=false` : l.href;
17
+ return e.$fetch(url, {
18
+ responseType: "text",
19
+ baseURL: useNitroOrigin(e)
20
+ }).then((res) => {
21
+ if (res.includes("__vite__css"))
22
+ return res.match(/__vite__css = "([^"]+)"/)?.[1];
23
+ return res.trim().split("\n").filter((l2) => !l2.startsWith("//")).join("\n").trim();
24
+ }).catch(() => {
25
+ return "";
26
+ });
27
+ })
28
+ )).join("\n") : "";
29
+ css = [linksToCss, css].join("\n");
30
+ }
31
+ if (!css.trim().length)
32
+ return false;
33
+ const cssInline = await useCssInline();
34
+ if (!cssInline || cssInline?.__unenv__) {
35
+ if (componentInlineStyles.length) {
36
+ const logger = createConsola().withTag("Nuxt OG Image");
37
+ logger.warn("To have inline styles applied you need to install either the `@css-inline/css-inline` or `@css-inline/css-inline-wasm` package.");
38
+ }
39
+ return false;
40
+ }
41
+ html = cssInline.inline(island.html, {
42
+ loadRemoteStylesheets: false,
43
+ extraCss: css
44
+ });
45
+ const classes = css.match(/\.([\w-]+)/g)?.map((c) => c.replace(".", ""));
46
+ if (classes)
47
+ html = html.replace(new RegExp(`class="(${classes.join("|")})"`, "g"), "");
48
+ island.html = html;
49
+ return true;
50
+ }
@@ -1,3 +1,3 @@
1
- import type { OgImageRenderEventContext, SatoriTransformer, VNode } from '../../../types';
2
- export declare function walkSatoriTree(e: OgImageRenderEventContext, node: VNode, plugins: (SatoriTransformer | SatoriTransformer[])[]): Promise<void>;
1
+ import type { OgImageRenderEventContext, SatoriTransformer, VNode } from '../../../types.js';
2
+ export declare function walkSatoriTree(e: OgImageRenderEventContext, node: VNode, plugins: (SatoriTransformer | SatoriTransformer[])[]): (void | Promise<void>)[];
3
3
  export declare function defineSatoriTransformer(transformer: SatoriTransformer | SatoriTransformer[]): SatoriTransformer | SatoriTransformer[];
@@ -1,19 +1,23 @@
1
- export async function walkSatoriTree(e, node, plugins) {
1
+ export function walkSatoriTree(e, node, plugins) {
2
+ const promises = [];
2
3
  if (!node.props?.children || !Array.isArray(node.props.children))
3
- return;
4
+ return promises;
4
5
  if (node.props.children.length === 0) {
5
6
  delete node.props.children;
6
- return;
7
+ return promises;
7
8
  }
8
9
  for (const child of node.props.children || []) {
9
10
  if (child) {
10
11
  for (const plugin of plugins.flat()) {
11
12
  if (plugin.filter(child))
12
- await plugin.transform(child, e);
13
+ promises.push(plugin.transform(child, e));
13
14
  }
14
- await walkSatoriTree(e, child, plugins);
15
+ promises.push(
16
+ ...walkSatoriTree(e, child, plugins)
17
+ );
15
18
  }
16
19
  }
20
+ return promises;
17
21
  }
18
22
  export function defineSatoriTransformer(transformer) {
19
23
  return transformer;
@@ -1,2 +1,2 @@
1
- import type { OgImageRenderEventContext, VNode } from '../../../types';
1
+ import type { OgImageRenderEventContext, VNode } from '../../../types.js';
2
2
  export declare function createVNodes(ctx: OgImageRenderEventContext): Promise<VNode>;
@@ -0,0 +1,38 @@
1
+ import { html as convertHtmlToSatori } from "satori-html";
2
+ import { htmlDecodeQuotes } from "../../util/encoding.js";
3
+ import { fetchIsland } from "../../util/kit.js";
4
+ import classes from "./plugins/classes.js";
5
+ import emojis from "./plugins/emojis.js";
6
+ import encoding from "./plugins/encoding.js";
7
+ import flex from "./plugins/flex.js";
8
+ import imageSrc from "./plugins/imageSrc.js";
9
+ import unocss from "./plugins/unocss.js";
10
+ import { applyEmojis } from "./transforms/emojis.js";
11
+ import { applyInlineCss } from "./transforms/inlineCss.js";
12
+ import { walkSatoriTree } from "./utils.js";
13
+ export async function createVNodes(ctx) {
14
+ let html = ctx.options.html;
15
+ if (!html) {
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);
18
+ await applyInlineCss(ctx, island);
19
+ await applyEmojis(ctx, island);
20
+ html = island.html;
21
+ if (html?.includes("<body>")) {
22
+ html = html.match(/<body>([\s\S]*)<\/body>/)?.[1] || "";
23
+ }
24
+ }
25
+ 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>`;
26
+ const satoriTree = convertHtmlToSatori(template);
27
+ walkSatoriTree(ctx, satoriTree, [
28
+ emojis,
29
+ classes,
30
+ flex,
31
+ encoding
32
+ ]);
33
+ await Promise.all(walkSatoriTree(ctx, satoriTree, [
34
+ unocss,
35
+ imageSrc
36
+ ]));
37
+ return satoriTree;
38
+ }
@@ -0,0 +1,2 @@
1
+ import type { OgImageRenderEventContext } from '../../../types.js';
2
+ export declare function html(ctx: OgImageRenderEventContext): Promise<string>;
@@ -1,13 +1,20 @@
1
- import { createHeadCore } from "@unhead/vue";
2
- import { renderSSRHead } from "@unhead/ssr";
3
- import { normaliseFontInput, useOgImageRuntimeConfig } from "../../utils.mjs";
4
- import { applyEmojis } from "./applyEmojis.mjs";
5
- import { fetchIsland } from "./fetchIsland.mjs";
6
1
  import { theme } from "#nuxt-og-image/unocss-config.mjs";
7
- export async function devIframeTemplate(ctx) {
2
+ import { renderSSRHead } from "@unhead/ssr";
3
+ import { createHeadCore } from "@unhead/vue";
4
+ import { createError } from "h3";
5
+ import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.js";
6
+ import { fetchIsland } from "../../util/kit.js";
7
+ import { applyEmojis } from "../satori/transforms/emojis.js";
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";
@@ -16,13 +23,7 @@ export async function devIframeTemplate(ctx) {
16
23
  if (firstFont)
17
24
  defaultFontFamily = firstFont.name;
18
25
  await applyEmojis(ctx, island);
19
- let html = island.html;
20
- const googleFonts = {};
21
- fonts.filter((font) => !font.path).forEach((font) => {
22
- if (!googleFonts[font.name])
23
- googleFonts[font.name] = [];
24
- googleFonts[font.name].push(font);
25
- });
26
+ let html2 = island.html;
26
27
  head.push({
27
28
  style: [
28
29
  {
@@ -31,31 +32,40 @@ export async function devIframeTemplate(ctx) {
31
32
  },
32
33
  {
33
34
  innerHTML: `body {
34
- transform: scale(${options.props.scale || 1});
35
+ transform: scale(${options.props?.scale || 1});
35
36
  transform-origin: top left;
36
37
  max-height: 100vh;
37
38
  position: relative;
38
39
  width: ${options.width}px;
39
40
  height: ${options.height}px;
40
41
  overflow: hidden;
41
- background-color: ${options.props.colorMode === "dark" ? "#1b1b1b" : "#fff"};
42
+ background-color: ${options.props?.colorMode === "dark" ? "#1b1b1b" : "#fff"};
42
43
  }
43
44
  div {
44
45
  display: flex;
46
+ }
47
+ div:has(div, p, ul, ol, li, blockquote, pre, hr, table, dl) {
48
+ display: flex;
45
49
  flex-direction: column;
46
50
  }
51
+ div:not(:has(div, p, ul, ol, li, blockquote, pre, hr, table, dl)) {
52
+ display: flex;
53
+ flex-wrap: wrap;
54
+ gap: 12px;
55
+ }
56
+
47
57
  svg[data-emoji] {
48
58
  display: inline-block;
49
59
  }
50
60
  `
51
61
  },
52
- ...fonts.filter((font) => font.path).map((font) => {
62
+ ...fonts.map((font) => {
53
63
  return `
54
64
  @font-face {
55
65
  font-family: '${font.name}';
56
66
  font-style: normal;
57
67
  font-weight: ${font.weight};
58
- src: url('${font.path}') format('truetype');
68
+ src: url('/__og-image__/font/${font.key}') format('truetype');
59
69
  }
60
70
  `;
61
71
  })
@@ -88,22 +98,14 @@ svg[data-emoji] {
88
98
  // reset css to match svg output
89
99
  href: "https://cdn.jsdelivr.net/npm/gardevoir",
90
100
  rel: "stylesheet"
91
- },
92
- // have to add each weight as their own stylesheet
93
- // we should use the local font file no?
94
- ...Object.entries(googleFonts).map(([name, fonts2]) => {
95
- return {
96
- href: `https://fonts.googleapis.com/css2?family=${name}:wght@${fonts2.map((f) => f.weight).join(";")}&display=swap`,
97
- rel: "stylesheet"
98
- };
99
- })
101
+ }
100
102
  ]
101
103
  });
102
- html = html.replaceAll(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
104
+ html2 = html2.replaceAll(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
103
105
  const headChunk = await renderSSRHead(head);
104
106
  return `<!DOCTYPE html>
105
107
  <html ${headChunk.htmlAttrs}>
106
108
  <head>${headChunk.headTags}</head>
107
- <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>
109
+ <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>
108
110
  </html>`;
109
111
  }
@@ -0,0 +1,2 @@
1
+ declare const _default: import("nitropack").NitroAppPlugin;
2
+ export default _default;
@@ -0,0 +1,9 @@
1
+ import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
2
+ import { nuxtContentPlugin } from "../../util/plugins.js";
3
+ export default defineNitroPlugin((nitroApp) => {
4
+ if (import.meta.dev || import.meta.prerender) {
5
+ nuxtContentPlugin(nitroApp);
6
+ return;
7
+ }
8
+ throw new Error("Not supported in zeroRuntime mode.");
9
+ });
@@ -1,2 +1,2 @@
1
- declare const _default: import("nitropack/dist/runtime/plugin").NitroAppPlugin;
1
+ declare const _default: import("nitropack").NitroAppPlugin;
2
2
  export default _default;
@@ -0,0 +1,5 @@
1
+ import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
2
+ import { nuxtContentPlugin } from "../util/plugins.js";
3
+ export default defineNitroPlugin((nitroApp) => {
4
+ nuxtContentPlugin(nitroApp);
5
+ });
@@ -0,0 +1,33 @@
1
+ import { prerenderOptionsCache } from "#nuxt-og-image-cache";
2
+ import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
3
+ import { parseURL } from "ufo";
4
+ import { isInternalRoute } from "../../pure.js";
5
+ import { extractAndNormaliseOgImageOptions, resolvePathCacheKey } from "../og-image/context.js";
6
+ import { createNitroRouteRuleMatcher } from "../util/kit.js";
7
+ export default defineNitroPlugin(async (nitro) => {
8
+ if (!import.meta.prerender)
9
+ return;
10
+ const routeRuleMatcher = createNitroRouteRuleMatcher();
11
+ nitro.hooks.hook("render:html", async (html, ctx) => {
12
+ const { head, bodyAppend } = html;
13
+ const path = parseURL(ctx.event.path).pathname;
14
+ if (isInternalRoute(path))
15
+ return;
16
+ const routeRules = routeRuleMatcher(path);
17
+ if (routeRules.ogImage === false)
18
+ return;
19
+ const options = extractAndNormaliseOgImageOptions([
20
+ head.join("\n"),
21
+ bodyAppend.join("\n")
22
+ ].join("\n"));
23
+ if (!options)
24
+ return;
25
+ const key = resolvePathCacheKey(ctx.event);
26
+ await prerenderOptionsCache.setItem(key, options);
27
+ const index = html.bodyAppend.findIndex((script) => script.includes('id="nuxt-og-image-options"'));
28
+ if (index !== -1) {
29
+ html.bodyAppend[index] = html.bodyAppend[index].replace(/<script id="nuxt-og-image-options" type="application\/json">[\s\S]*?<\/script>/, "");
30
+ html.bodyAppend[index] = html.bodyAppend[index].replace(/<script id="nuxt-og-image-overrides" type="application\/json">[\s\S]*?<\/script>/, "");
31
+ }
32
+ });
33
+ });
@@ -0,0 +1,8 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { fontEventHandler } from "../../util/eventHandlers.js";
3
+ export default defineEventHandler(async (e) => {
4
+ if (import.meta.dev || import.meta.prerender) {
5
+ return await fontEventHandler(e);
6
+ }
7
+ throw new Error("Not supported in zeroRuntime mode.");
8
+ });
@@ -0,0 +1,8 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { imageEventHandler } from "../../util/eventHandlers.js";
3
+ export default defineEventHandler(async (e) => {
4
+ if (import.meta.dev || import.meta.prerender) {
5
+ return await imageEventHandler(e);
6
+ }
7
+ throw new Error("Not supported in zeroRuntime mode.");
8
+ });
@@ -1,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,7 +1,7 @@
1
- import { defineEventHandler, setHeader } from "h3";
2
- import { useOgImageRuntimeConfig } from "../../../utils.mjs";
3
1
  import compatibility from "#nuxt-og-image/compatibility";
4
2
  import { componentNames } from "#nuxt-og-image/component-names.mjs";
3
+ import { defineEventHandler, setHeader } from "h3";
4
+ import { useOgImageRuntimeConfig } from "../../shared.js";
5
5
  export default defineEventHandler(async (e) => {
6
6
  setHeader(e, "Content-Type", "application/json");
7
7
  const runtimeConfig = useOgImageRuntimeConfig();
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { fontEventHandler } from "../util/eventHandlers.js";
3
+ export default defineEventHandler(fontEventHandler);
@@ -0,0 +1,2 @@
1
+ declare const _default: import("h3").EventHandler<import("h3").EventHandlerRequest, Promise<any>>;
2
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import { defineEventHandler } from "h3";
2
+ import { imageEventHandler } from "../util/eventHandlers.js";
3
+ export default defineEventHandler(imageEventHandler);
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../../../.nuxt/tsconfig.server.json"
3
+ }
@@ -1,5 +1,5 @@
1
- import { type H3Error } from 'h3';
2
- import type { OgImageRenderEventContext } from './types';
1
+ import type { H3Error } from 'h3';
2
+ import type { OgImageRenderEventContext } from '../../types.js';
3
3
  export declare function useOgImageBufferCache(ctx: OgImageRenderEventContext, options: {
4
4
  baseCacheKey: string | false;
5
5
  cacheMaxAgeSeconds?: number;
@@ -1,8 +1,8 @@
1
- import { prefixStorage } from "unstorage";
1
+ import { useStorage } from "#imports";
2
2
  import { createError, getQuery, handleCacheHeaders, setHeader, setHeaders } from "h3";
3
- import { withTrailingSlash } from "ufo";
4
3
  import { hash } from "ohash";
5
- import { useStorage } from "#imports";
4
+ import { withTrailingSlash } from "ufo";
5
+ import { prefixStorage } from "unstorage";
6
6
  export async function useOgImageBufferCache(ctx, options) {
7
7
  const maxAge = Number(options.cacheMaxAgeSeconds);
8
8
  let enabled = !import.meta.dev && import.meta.env.MODE !== "test" && maxAge > 0;
@@ -34,8 +34,9 @@ export async function useOgImageBufferCache(ctx, options) {
34
34
  modifiedTime: new Date(headers["last-modified"]),
35
35
  etag: headers.etag,
36
36
  maxAge
37
- }))
37
+ })) {
38
38
  return;
39
+ }
39
40
  setHeaders(ctx.e, headers);
40
41
  } else {
41
42
  await cache.removeItem(key).catch(() => {
@@ -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(/&#(\d+);/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,3 @@
1
+ import type { H3Event } from 'h3';
2
+ export declare function fontEventHandler(e: H3Event): Promise<any>;
3
+ export declare function imageEventHandler(e: H3Event): Promise<any>;
@@ -0,0 +1,155 @@
1
+ import { createError, getQuery, H3Error, proxyRequest, sendRedirect, setHeader, setResponseHeader } from "h3";
2
+ import { parseURL } from "ufo";
3
+ import { normaliseFontInput, useOgImageRuntimeConfig } from "../../shared.js";
4
+ import { resolveContext } from "../og-image/context.js";
5
+ import { assets } from "../og-image/satori/font.js";
6
+ import { html } from "../og-image/templates/html.js";
7
+ import { useOgImageBufferCache } from "./cache.js";
8
+ export async function fontEventHandler(e) {
9
+ const path = parseURL(e.path).pathname;
10
+ const { fonts } = useOgImageRuntimeConfig();
11
+ const key = path.split("/font/")[1];
12
+ if (key.includes(":")) {
13
+ const font2 = fonts.find((f) => f.key === key);
14
+ if (font2?.key && await assets.hasItem(font2.key)) {
15
+ let fontData = await assets.getItem(font2.key);
16
+ if (fontData instanceof Uint8Array) {
17
+ const decoder = new TextDecoder();
18
+ fontData = decoder.decode(fontData);
19
+ }
20
+ if (key.includes(".oft")) {
21
+ setResponseHeader(e, "Content-Type", "font/otf");
22
+ } else if (key.includes(".woff2")) {
23
+ setResponseHeader(e, "Content-Type", "font/woff2");
24
+ } else if (key.includes(".ttf")) {
25
+ setResponseHeader(e, "Content-Type", "font/ttf");
26
+ }
27
+ return Buffer.from(fontData, "base64");
28
+ }
29
+ }
30
+ const [_name, _weight] = key.split(".")[0].split("/");
31
+ if (!_name || !_weight)
32
+ return "Provide a font name and weight";
33
+ const name = _name[0].toUpperCase() + _name.slice(1);
34
+ const weight = Math.round(Number.parseInt(_weight) / 100) * 100;
35
+ const config = useOgImageRuntimeConfig();
36
+ const normalisedFonts = normaliseFontInput(config.fonts);
37
+ let font;
38
+ if (typeof getQuery(e).font === "string")
39
+ font = JSON.parse(getQuery(e).font);
40
+ if (!font) {
41
+ font = normalisedFonts.find((font2) => {
42
+ return font2.name.toLowerCase() === name.toLowerCase() && weight === Number(font2.weight);
43
+ });
44
+ }
45
+ if (!font) {
46
+ return createError({
47
+ statusCode: 404,
48
+ statusMessage: `[Nuxt OG Image] Font ${name}:${weight} not found`
49
+ });
50
+ }
51
+ const css = await globalThis.$fetch(`https://fonts.googleapis.com/css2?family=${name}:wght@${weight}`, {
52
+ headers: {
53
+ // Make sure it returns TTF.
54
+ "User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
55
+ }
56
+ });
57
+ if (!css) {
58
+ return createError({
59
+ statusCode: 500,
60
+ statusMessage: `[Nuxt OG Image] Invalid Google Font ${name}:${weight}`
61
+ });
62
+ }
63
+ const ttfResource = css.match(/src: url\((.+)\) format\('(opentype|truetype)'\)/);
64
+ if (ttfResource?.[1])
65
+ return proxyRequest(e, ttfResource[1], {});
66
+ const woff2Resource = css.match(/src: url\((.+)\) format\('woff2'\)/);
67
+ if (woff2Resource?.[1])
68
+ return sendRedirect(e, woff2Resource[1]);
69
+ return createError({
70
+ statusCode: 500,
71
+ statusMessage: `[Nuxt OG Image] Malformed Google Font CSS ${css}`
72
+ });
73
+ }
74
+ export async function imageEventHandler(e) {
75
+ const ctx = await resolveContext(e);
76
+ if (ctx instanceof H3Error)
77
+ return ctx;
78
+ const { isDebugJsonPayload, extension, options, renderer } = ctx;
79
+ const { debug, baseCacheKey } = useOgImageRuntimeConfig();
80
+ const compatibilityHints = [];
81
+ if (isDebugJsonPayload) {
82
+ const queryExtension = getQuery(e).extension || ctx.options.extension;
83
+ if (["jpeg", "jpg"].includes(queryExtension) && options.renderer === "satori")
84
+ compatibilityHints.push("Converting PNGs to JPEGs requires Sharp which only runs on Node based systems.");
85
+ if (options.renderer === "chromium")
86
+ 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");
87
+ setHeader(e, "Content-Type", "application/json");
88
+ return {
89
+ siteConfig: {
90
+ url: e.context.siteConfig.get().url
91
+ },
92
+ compatibilityHints,
93
+ cacheKey: ctx.key,
94
+ options: ctx.options,
95
+ ...options.renderer === "satori" ? await renderer.debug(ctx) : void 0
96
+ };
97
+ }
98
+ switch (extension) {
99
+ case "html":
100
+ setHeader(e, "Content-Type", `text/html`);
101
+ return html(ctx);
102
+ case "svg":
103
+ if (!debug && !import.meta.dev) {
104
+ return createError({
105
+ statusCode: 404
106
+ });
107
+ }
108
+ if (ctx.renderer.name !== "satori") {
109
+ return createError({
110
+ statusCode: 400,
111
+ statusMessage: `[Nuxt OG Image] Generating ${extension}'s with ${renderer.name} is not supported.`
112
+ });
113
+ }
114
+ setHeader(e, "Content-Type", `image/svg+xml`);
115
+ return (await ctx.renderer.debug(ctx)).svg;
116
+ case "png":
117
+ case "jpeg":
118
+ case "jpg":
119
+ if (!renderer.supportedFormats.includes(extension)) {
120
+ return createError({
121
+ statusCode: 400,
122
+ statusMessage: `[Nuxt OG Image] Generating ${extension}'s with ${renderer.name} is not supported.`
123
+ });
124
+ }
125
+ setHeader(e, "Content-Type", `image/${extension === "jpg" ? "jpeg" : extension}`);
126
+ break;
127
+ default:
128
+ return createError({
129
+ statusCode: 400,
130
+ statusMessage: `[Nuxt OG Image] Invalid request for og.${extension}.`
131
+ });
132
+ }
133
+ const cacheApi = await useOgImageBufferCache(ctx, {
134
+ cacheMaxAgeSeconds: ctx.options.cacheMaxAgeSeconds,
135
+ baseCacheKey
136
+ });
137
+ if (typeof cacheApi === "undefined")
138
+ return;
139
+ if (cacheApi instanceof H3Error)
140
+ return cacheApi;
141
+ let image = cacheApi.cachedItem;
142
+ if (!image) {
143
+ image = await renderer.createImage(ctx);
144
+ if (image instanceof H3Error)
145
+ return image;
146
+ if (!image) {
147
+ return createError({
148
+ statusCode: 500,
149
+ statusMessage: `Failed to generate og.${extension}.`
150
+ });
151
+ }
152
+ await cacheApi.update(image);
153
+ }
154
+ return image;
155
+ }
@@ -0,0 +1,6 @@
1
+ import type { H3Event } from 'h3';
2
+ import type { NitroRouteRules } from 'nitropack';
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 { useRuntimeConfig } from "#imports";
2
+ import { defu } from "defu";
3
+ import { hash } from "ohash";
4
+ import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
5
+ import { withoutBase, withoutTrailingSlash } from "ufo";
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
+ }
@@ -0,0 +1 @@
1
+ export declare const logger: import("consola").ConsolaInstance;
@@ -0,0 +1,6 @@
1
+ import { createConsola } from "consola";
2
+ export const logger = createConsola({
3
+ defaults: {
4
+ tag: "Nuxt OG Image"
5
+ }
6
+ });
@@ -0,0 +1,2 @@
1
+ import type { DefineOgImageInput, OgImageOptions, OgImagePrebuilt } from '../../types.js';
2
+ export declare function normaliseOptions(_options: DefineOgImageInput): OgImageOptions | OgImagePrebuilt;