nuxt-og-image 3.0.0-rc.66 → 3.0.0-rc.68
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.
- package/README.md +3 -6
- package/dist/client/200.html +179 -179
- package/dist/client/404.html +179 -179
- package/dist/client/_nuxt/{BfBkfEDj.js → 0OCEc-sb.js} +1 -1
- package/dist/client/_nuxt/16nqZaIT.js +1 -0
- package/dist/client/_nuxt/3Ts0ZrM4.js +4 -0
- package/dist/client/_nuxt/44JOqR_V.js +1 -0
- package/dist/client/_nuxt/4FkZXfg1.js +3 -0
- package/dist/client/_nuxt/{DoY4Dbtn.js → 4WleZr1P.js} +1 -1
- package/dist/client/_nuxt/5HixFuyr.js +1 -0
- package/dist/client/_nuxt/{C31OBGbl.js → 5bRVBCrv.js} +1 -1
- package/dist/client/_nuxt/{DanM9F4-.js → 7LPQ6a13.js} +2 -2
- package/dist/client/_nuxt/8WiSp-0_.js +1 -0
- package/dist/client/_nuxt/9CfBjzQa.js +1 -0
- package/dist/client/_nuxt/B-9EjyZr.js +1 -0
- package/dist/client/_nuxt/B-a2BbyY.js +1 -0
- package/dist/client/_nuxt/B0LoMq2b.js +1 -0
- package/dist/client/_nuxt/{BSSAUge4.js → B1ejXUAS.js} +1 -1
- package/dist/client/_nuxt/{DhldU3XI.js → B3LRAdDP.js} +1 -1
- package/dist/client/_nuxt/B7-FEXAT.js +1 -0
- package/dist/client/_nuxt/B9HI_aQy.js +1 -0
- package/dist/client/_nuxt/{D85lwgPO.js → B9vFkdfw.js} +1 -1
- package/dist/client/_nuxt/BAGvEKUB.js +1 -0
- package/dist/client/_nuxt/BAp2aEeE.js +1 -0
- package/dist/client/_nuxt/{C3NvtN4M.js → BB9S_66N.js} +1 -1
- package/dist/client/_nuxt/{AoxqhCl0.js → BCOu96sC.js} +1 -1
- package/dist/client/_nuxt/BGk6HrHT.js +1 -0
- package/dist/client/_nuxt/BHSTd-7M.js +1 -0
- package/dist/client/_nuxt/BKFBoKT4.js +1 -0
- package/dist/client/_nuxt/BKNiEhql.js +1 -0
- package/dist/client/_nuxt/BNgG76gt.js +1 -0
- package/dist/client/_nuxt/{BbPU79SD.js → BNofkYSZ.js} +14 -14
- package/dist/client/_nuxt/BOp3HRET.js +1 -0
- package/dist/client/_nuxt/{DaDGU6kf.js → BQnHL-cn.js} +1 -1
- package/dist/client/_nuxt/BS9sT-GQ.js +1 -0
- package/dist/client/_nuxt/BU83OF-G.js +1 -0
- package/dist/client/_nuxt/BUeIC4cT.js +1 -0
- package/dist/client/_nuxt/BXUVD3TH.js +1 -0
- package/dist/client/_nuxt/BXWtGw2n.js +6 -0
- package/dist/client/_nuxt/{VVtMly4c.js → BYLuaE_S.js} +1 -1
- package/dist/client/_nuxt/{C46DigdT.js → Ba_2pva2.js} +1 -1
- package/dist/client/_nuxt/BeX7BQ1y.js +1 -0
- package/dist/client/_nuxt/{ChVe37jp.js → BfVRrWqI.js} +1 -1
- package/dist/client/_nuxt/BgEvnnZj.js +1 -0
- package/dist/client/_nuxt/{BEPTDMGr.js → Bgrlo6mM.js} +1 -1
- package/dist/client/_nuxt/{CBoehFVA.js → Bl6w8nq6.js} +2 -2
- package/dist/client/_nuxt/BmUjtHPt.js +1 -0
- package/dist/client/_nuxt/BnYPtiAB.js +1 -0
- package/dist/client/_nuxt/{B9S9BZZh.js → BotTw_1M.js} +1 -1
- package/dist/client/_nuxt/BpqPLH6b.js +1 -0
- package/dist/client/_nuxt/{DT2db06B.js → Br4herk8.js} +1 -1
- package/dist/client/_nuxt/Brmco9EZ.js +2 -0
- package/dist/client/_nuxt/{BiU8-mv6.js → Bs9WCFOo.js} +1 -1
- package/dist/client/_nuxt/BtPWTO6-.js +1 -0
- package/dist/client/_nuxt/BwUg_Rem.js +1 -0
- package/dist/client/_nuxt/Bxuka25Y.js +1 -0
- package/dist/client/_nuxt/{Bcn1f5Rp.js → BxwkrKyP.js} +1 -1
- package/dist/client/_nuxt/{D9s3Eyz8.js → ByN1NmdT.js} +2 -2
- package/dist/client/_nuxt/C2Z2wNnw.js +1 -0
- package/dist/client/_nuxt/{DGTPbQyx.js → C3wf4cjV.js} +1 -1
- package/dist/client/_nuxt/{16u1w-DC.js → C5J_9lw5.js} +1 -1
- package/dist/client/_nuxt/C6doOGgB.js +1 -0
- package/dist/client/_nuxt/{BY8_eel9.js → C7xspq5a.js} +1 -1
- package/dist/client/_nuxt/C9CNr0dZ.js +1 -0
- package/dist/client/_nuxt/CA2blNRc.js +1 -0
- package/dist/client/_nuxt/{DFQMbhFG.js → CCW61mLD.js} +1 -1
- package/dist/client/_nuxt/{DOt8O2FJ.js → CDP-pALJ.js} +1 -1
- package/dist/client/_nuxt/{LrshOcZ2.js → CFy8Z7mU.js} +1 -1
- package/dist/client/_nuxt/CHDuk4cg.js +1 -0
- package/dist/client/_nuxt/{B5v32tNS.js → CKK8qrH7.js} +2 -2
- package/dist/client/_nuxt/CKqhLkpw.js +1 -0
- package/dist/client/_nuxt/{MJ0gDQnJ.js → CLTURUqp.js} +3 -3
- package/dist/client/_nuxt/CPQn-Lhb.js +1 -0
- package/dist/client/_nuxt/CRUEGcu5.js +1 -0
- package/dist/client/_nuxt/{CT9A9Qiu.js → CS6sTstm.js} +1 -1
- package/dist/client/_nuxt/{DWE3vCE5.js → CSPPpfsQ.js} +1 -1
- package/dist/client/_nuxt/CTeQKLZv.js +1 -0
- package/dist/client/_nuxt/CTsPJjdJ.js +1 -0
- package/dist/client/_nuxt/{A4Fa72hX.js → CUNQUWO_.js} +1 -1
- package/dist/client/_nuxt/CV5B5C80.js +1 -0
- package/dist/client/_nuxt/CZkFsSlX.js +1 -0
- package/dist/client/_nuxt/{8R90CSQj.js → C_h5G2He.js} +1 -1
- package/dist/client/_nuxt/{B5--Xptx.js → CaR_I2C-.js} +1 -1
- package/dist/client/_nuxt/Cb48SAmt.js +1 -0
- package/dist/client/_nuxt/{nc-bU77P.js → CeIpHJfZ.js} +3 -3
- package/dist/client/_nuxt/{coyhVBVA.js → ClPxYbPx.js} +1 -1
- package/dist/client/_nuxt/Clj_IpB8.js +1 -0
- package/dist/client/_nuxt/CmN1UzhW.js +1 -0
- package/dist/client/_nuxt/CvHWZNAB.js +1 -0
- package/dist/client/_nuxt/CyUS7F7b.js +17 -0
- package/dist/client/_nuxt/{D4LJwL2b.js → Cz-n9WvF.js} +1 -1
- package/dist/client/_nuxt/{CDzo4tzE.js → Cz3ygVR-.js} +1 -1
- package/dist/client/_nuxt/{CEuqc8ZQ.js → CzK8D06Z.js} +1 -1
- package/dist/client/_nuxt/{CXYaz1c9.js → D0N_qbs7.js} +1 -1
- package/dist/client/_nuxt/D0pnavP-.js +1 -0
- package/dist/client/_nuxt/D25Gr2Wc.js +1 -0
- package/dist/client/_nuxt/D4miJ1xw.js +1 -0
- package/dist/client/_nuxt/D6oCKXcX.js +1 -0
- package/dist/client/_nuxt/DBLgxP_1.js +2 -0
- package/dist/client/_nuxt/{ByMv4Xf1.js → DCmDdbvy.js} +1 -1
- package/dist/client/_nuxt/{zt9m_cFA.js → DDG_rSGg.js} +1 -1
- package/dist/client/_nuxt/DFHN_7lU.js +3 -0
- package/dist/client/_nuxt/DFsxFixh.js +1 -0
- package/dist/client/_nuxt/DGhhRy1e.js +1 -0
- package/dist/client/_nuxt/{DdacRhvC.js → DIw1DfnK.js} +1 -1
- package/dist/client/_nuxt/DJNHLfzP.js +1 -0
- package/dist/client/_nuxt/{XP2_9bVu.js → DJOPMAPO.js} +1 -1
- package/dist/client/_nuxt/DO04iIl4.js +1 -0
- package/dist/client/_nuxt/DOOuMSMh.js +1 -0
- package/dist/client/_nuxt/DRuVOcqL.js +1 -0
- package/dist/client/_nuxt/{B2Zkg-Ae.js → DSv7Jr7N.js} +2 -2
- package/dist/client/_nuxt/DTMFIK7w.js +1 -0
- package/dist/client/_nuxt/{6XBPEST2.js → DXdsTRaC.js} +1 -1
- package/dist/client/_nuxt/{DgraCSOE.js → DXtfa3TF.js} +1 -1
- package/dist/client/_nuxt/{iYrPSY0y.js → DYgwfmdY.js} +1 -1
- package/dist/client/_nuxt/DYikCEmq.js +1 -0
- package/dist/client/_nuxt/{D6SwP_ef.js → DYrknm32.js} +1 -1
- package/dist/client/_nuxt/D_lsq3cR.js +1 -0
- package/dist/client/_nuxt/{4JG6XROL.js → Dc3u8CCo.js} +1 -1
- package/dist/client/_nuxt/Df4vQnuo.js +1 -0
- package/dist/client/_nuxt/Di1G_BEd.js +1 -0
- package/dist/client/_nuxt/Dk2kDqHs.js +1 -0
- package/dist/client/_nuxt/DkIL16gc.js +2 -0
- package/dist/client/_nuxt/DmixpzPA.js +1 -0
- package/dist/client/_nuxt/{CkoJTUbt.js → Dnd6U92I.js} +1 -1
- package/dist/client/_nuxt/DofIr7ih.js +1 -0
- package/dist/client/_nuxt/DqFtmHIk.js +1 -0
- package/dist/client/_nuxt/{DLpTrZod.js → DrUHIbQf.js} +1 -1
- package/dist/client/_nuxt/{CJ21IjBY.js → DrhOmAGa.js} +1 -1
- package/dist/client/_nuxt/{DmAvib0Y.js → DsO5WfEU.js} +1 -1
- package/dist/client/_nuxt/{CIlkkgNU.js → DsclqnHy.js} +1 -1
- package/dist/client/_nuxt/Dwk9V841.js +1 -0
- package/dist/client/_nuxt/DyLIn2qo.js +1 -0
- package/dist/client/_nuxt/{C9d3aiqh.js → DzhYcJWo.js} +1 -1
- package/dist/client/_nuxt/{DxX6t7GH.js → Dziqk49f.js} +1 -1
- package/dist/client/_nuxt/{DqvgqZmm.js → E5r7Moxb.js} +1 -1
- package/dist/client/_nuxt/{B_SUYfiV.js → FMRyFT8D.js} +1 -1
- package/dist/client/_nuxt/{TDVTyJvX.js → GACPk8cj.js} +1 -1
- package/dist/client/_nuxt/H94RPpLS.js +1 -0
- package/dist/client/_nuxt/{DBxHOdLe.js → HxmVvryO.js} +1 -1
- package/dist/client/_nuxt/JYC31MTV.js +1 -0
- package/dist/client/_nuxt/Jl0QvYgb.js +1 -0
- package/dist/client/_nuxt/{C17JnZbq.js → KA8c-whL.js} +1 -1
- package/dist/client/_nuxt/Ka_J5llu.js +1 -0
- package/dist/client/_nuxt/KuNYkU7X.js +1 -0
- package/dist/client/_nuxt/MkuNFWFs.js +204 -0
- package/dist/client/_nuxt/{BaedD2tq.js → N3zwmhmW.js} +1 -1
- package/dist/client/_nuxt/O4cDyHwR.js +1 -0
- package/dist/client/_nuxt/OPd3ySAa.js +1 -0
- package/dist/client/_nuxt/{BqpV9M7Y.js → Opso89zU.js} +1 -1
- package/dist/client/_nuxt/{CV8JdvfZ.js → PauOf_jS.js} +1 -1
- package/dist/client/_nuxt/Qj0mFepl.js +14 -0
- package/dist/client/_nuxt/R9SNgiQ9.js +1 -0
- package/dist/client/_nuxt/{C6XIsc4F.js → Rc0-bMtX.js} +1 -1
- package/dist/client/_nuxt/{CKpfY2P2.js → TYaudu4O.js} +1 -1
- package/dist/client/_nuxt/VRCUJX8G.js +1 -0
- package/dist/client/_nuxt/{CMiaevpY.js → Ys9ZunwU.js} +1 -1
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/353519f1-2e76-4016-9b50-2f26f3cb8794.json +1 -0
- package/dist/client/_nuxt/{CD1ynQRS.js → eJKZXzCK.js} +1 -1
- package/dist/client/_nuxt/{PSVKygaU.js → eQYbbmqd.js} +1 -1
- package/dist/client/_nuxt/{entry.cOhDjBNG.css → entry.DtsycVcr.css} +1 -1
- package/dist/client/_nuxt/error-404.CUF_CFKB.css +1 -0
- package/dist/client/_nuxt/error-500.BR60owpQ.css +1 -0
- package/dist/client/_nuxt/i0hkWYmE.js +1 -0
- package/dist/client/_nuxt/{ByGMIDPY.js → ithPx4uF.js} +1 -1
- package/dist/client/_nuxt/{I-_ljZ1M.js → jDrCW69G.js} +1 -1
- package/dist/client/_nuxt/kveMaAK5.js +1 -0
- package/dist/client/_nuxt/lBoe4CZw.js +1 -0
- package/dist/client/_nuxt/{DoQu802G.js → lPxKsdjn.js} +1 -1
- package/dist/client/_nuxt/lRZxrFTT.js +1 -0
- package/dist/client/_nuxt/mvTh5Gok.js +1 -0
- package/dist/client/_nuxt/pCnzZaOt.js +1 -0
- package/dist/client/_nuxt/qpF8edk8.js +1 -0
- package/dist/client/_nuxt/qvnQm5y7.js +1 -0
- package/dist/client/_nuxt/qwoaayiL.js +1 -0
- package/dist/client/_nuxt/t1S7pxBA.js +1 -0
- package/dist/client/_nuxt/t6MJYFCU.js +5 -0
- package/dist/client/_nuxt/tEd5xQ4M.js +1 -0
- package/dist/client/_nuxt/{DZwJH60W.js → xGgVA17b.js} +1 -1
- package/dist/client/_nuxt/yvfKceIB.js +1 -0
- package/dist/client/_nuxt/{E1IWMS2c.js → z5DqfkHR.js} +1 -1
- package/dist/client/index.html +179 -179
- package/dist/module.d.mts +5 -1
- package/dist/module.d.ts +5 -1
- package/dist/module.json +2 -2
- package/dist/module.mjs +246 -131
- package/dist/runtime/nitro/og-image/bindings/chromium/chrome-launcher.js +1 -1
- package/dist/runtime/nitro/og-image/bindings/chromium/on-demand.js +1 -1
- package/dist/runtime/nitro/og-image/bindings/satori/wasm.js +1 -1
- package/dist/runtime/nitro/og-image/{cache.d.ts → cache/lru.d.ts} +3 -1
- package/dist/runtime/nitro/og-image/{cache.js → cache/lru.js} +6 -0
- package/dist/runtime/nitro/og-image/cache/mock.d.ts +9 -0
- package/dist/runtime/nitro/og-image/cache/mock.js +9 -0
- package/dist/runtime/nitro/og-image/chromium/renderer.js +1 -1
- package/dist/runtime/nitro/og-image/chromium/screenshot.js +1 -1
- package/dist/runtime/nitro/og-image/context.js +8 -8
- package/dist/runtime/nitro/og-image/satori/font.d.ts +1 -0
- package/dist/runtime/nitro/og-image/satori/font.js +2 -2
- package/dist/runtime/nitro/og-image/satori/instances.d.ts +1 -1
- package/dist/runtime/nitro/og-image/satori/plugins/encoding.js +1 -1
- package/dist/runtime/nitro/og-image/satori/plugins/flex.js +27 -2
- package/dist/runtime/nitro/og-image/satori/plugins/imageSrc.js +3 -3
- package/dist/runtime/nitro/og-image/satori/plugins/unocss.js +1 -1
- package/dist/runtime/nitro/og-image/satori/renderer.js +3 -7
- package/dist/runtime/nitro/og-image/satori/transforms/emojis.d.ts +0 -2
- package/dist/runtime/nitro/og-image/satori/transforms/emojis.js +1 -5
- package/dist/runtime/nitro/og-image/satori/transforms/inlineCss.js +1 -1
- package/dist/runtime/nitro/og-image/satori/vnodes.js +8 -8
- package/dist/runtime/nitro/og-image/templates/html.js +16 -21
- package/dist/runtime/nitro/plugins/__zero-runtime/nuxt-content.d.ts +2 -0
- package/dist/runtime/nitro/plugins/__zero-runtime/nuxt-content.js +9 -0
- package/dist/runtime/nitro/plugins/nuxt-content.js +2 -52
- package/dist/runtime/nitro/plugins/prerender.js +9 -4
- package/dist/runtime/nitro/routes/__zero-runtime/font.d.ts +2 -0
- package/dist/runtime/nitro/routes/__zero-runtime/font.js +8 -0
- package/dist/runtime/nitro/routes/__zero-runtime/image.d.ts +2 -0
- package/dist/runtime/nitro/routes/__zero-runtime/image.js +8 -0
- package/dist/runtime/nitro/routes/debug.json.js +2 -2
- package/dist/runtime/nitro/routes/font.js +3 -49
- package/dist/runtime/nitro/routes/image.js +3 -87
- package/dist/runtime/nitro/util/cache.js +3 -3
- package/dist/runtime/nitro/util/eventHandlers.d.ts +3 -0
- package/dist/runtime/nitro/util/eventHandlers.js +155 -0
- package/dist/runtime/nitro/util/kit.d.ts +1 -1
- package/dist/runtime/nitro/util/kit.js +3 -3
- package/dist/runtime/nitro/util/plugins.d.ts +2 -0
- package/dist/runtime/nitro/util/plugins.js +54 -0
- package/dist/runtime/nuxt/components/OgImage/OgImage.d.ts +1 -3
- package/dist/runtime/nuxt/components/OgImage/OgImage.js +1 -1
- package/dist/runtime/nuxt/components/OgImage/OgImageScreenshot.d.ts +1 -3
- package/dist/runtime/nuxt/components/OgImage/OgImageScreenshot.js +1 -1
- package/dist/runtime/nuxt/components/Templates/Community/NuxtSeo.vue +2 -2
- package/dist/runtime/nuxt/components/Templates/Community/SimpleBlog.vue +1 -1
- package/dist/runtime/nuxt/composables/defineOgImage.js +7 -5
- package/dist/runtime/nuxt/composables/defineOgImageComponent.d.ts +1 -1
- package/dist/runtime/nuxt/composables/mock.d.ts +1 -1
- package/dist/runtime/nuxt/plugins/__zero-runtime/og-image-canonical-urls.server.d.ts +2 -0
- package/dist/runtime/nuxt/plugins/__zero-runtime/og-image-canonical-urls.server.js +9 -0
- package/dist/runtime/nuxt/plugins/__zero-runtime/route-rule-og-image.server.d.ts +2 -0
- package/dist/runtime/nuxt/plugins/__zero-runtime/route-rule-og-image.server.js +9 -0
- package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.js +3 -51
- package/dist/runtime/nuxt/plugins/route-rule-og-image.server.js +4 -36
- package/dist/runtime/nuxt/utils/plugins.d.ts +3 -0
- package/dist/runtime/nuxt/utils/plugins.js +87 -0
- package/dist/runtime/nuxt/utils.js +6 -4
- package/dist/runtime/shared.js +3 -3
- package/dist/runtime/types.d.ts +6 -5
- package/dist/types.d.mts +0 -4
- package/dist/types.d.ts +0 -4
- package/package.json +31 -23
- package/dist/client/_nuxt/6bkCFmAg.js +0 -1
- package/dist/client/_nuxt/B3yJX9Qu.js +0 -1
- package/dist/client/_nuxt/B5USdwzW.js +0 -1
- package/dist/client/_nuxt/B7zm8LFH.js +0 -2
- package/dist/client/_nuxt/B8yeR86s.js +0 -1
- package/dist/client/_nuxt/B9MAV_WH.js +0 -1
- package/dist/client/_nuxt/B9afuS00.js +0 -1
- package/dist/client/_nuxt/BDUkJJFZ.js +0 -1
- package/dist/client/_nuxt/BEIEqD7s.js +0 -1
- package/dist/client/_nuxt/BESheOyt.js +0 -1
- package/dist/client/_nuxt/BFO9THtE.js +0 -1
- package/dist/client/_nuxt/BICcMyTi.js +0 -1
- package/dist/client/_nuxt/BIboXAcp.js +0 -1
- package/dist/client/_nuxt/BNuYtHxo.js +0 -1
- package/dist/client/_nuxt/BOCDpWc1.js +0 -17
- package/dist/client/_nuxt/BOtZLFcM.js +0 -3
- package/dist/client/_nuxt/BPiaQZfK.js +0 -1
- package/dist/client/_nuxt/BQgbS7Yt.js +0 -1
- package/dist/client/_nuxt/BSrQBeSJ.js +0 -131
- package/dist/client/_nuxt/BTO_K1fm.js +0 -1
- package/dist/client/_nuxt/BUQ2FcJX.js +0 -1
- package/dist/client/_nuxt/BVsCzzYp.js +0 -1
- package/dist/client/_nuxt/BccEf5hb.js +0 -1
- package/dist/client/_nuxt/BeqgMazi.js +0 -1
- package/dist/client/_nuxt/BltGI4TE.js +0 -1
- package/dist/client/_nuxt/BrHEiNXv.js +0 -1
- package/dist/client/_nuxt/BspO9hSn.js +0 -1
- package/dist/client/_nuxt/Bszlo9K_.js +0 -1
- package/dist/client/_nuxt/Bt3jdO27.js +0 -1
- package/dist/client/_nuxt/BzeF2RWN.js +0 -1
- package/dist/client/_nuxt/C5QX-GgJ.js +0 -1
- package/dist/client/_nuxt/C6F4YvHi.js +0 -1
- package/dist/client/_nuxt/C6pBAdyX.js +0 -1
- package/dist/client/_nuxt/C7O_L2NY.js +0 -1
- package/dist/client/_nuxt/C8KGJGmD.js +0 -1
- package/dist/client/_nuxt/C9X_x5J1.js +0 -1
- package/dist/client/_nuxt/CAkjjYd_.js +0 -1
- package/dist/client/_nuxt/CDLXdqou.js +0 -6
- package/dist/client/_nuxt/CTjLfFPV.js +0 -1
- package/dist/client/_nuxt/CY-WakqA.js +0 -1
- package/dist/client/_nuxt/C_D4IvTY.js +0 -1
- package/dist/client/_nuxt/CbFpZgCV.js +0 -1
- package/dist/client/_nuxt/CbjS_D4a.js +0 -1
- package/dist/client/_nuxt/CeUooOMz.js +0 -1
- package/dist/client/_nuxt/Clnf9f06.js +0 -1
- package/dist/client/_nuxt/CmHkUvIV.js +0 -1
- package/dist/client/_nuxt/CmonagEV.js +0 -1
- package/dist/client/_nuxt/CowR2XfX.js +0 -1
- package/dist/client/_nuxt/CuJfdYLG.js +0 -1
- package/dist/client/_nuxt/CwZIVF5c.js +0 -1
- package/dist/client/_nuxt/Cwv93qcC.js +0 -4
- package/dist/client/_nuxt/CzrtbdtR.js +0 -1
- package/dist/client/_nuxt/D1i8Vxii.js +0 -1
- package/dist/client/_nuxt/D384ylkT.js +0 -1
- package/dist/client/_nuxt/D7Nx8OLD.js +0 -1
- package/dist/client/_nuxt/D8YTaFMU.js +0 -1
- package/dist/client/_nuxt/D8ecWW_g.js +0 -1
- package/dist/client/_nuxt/DA288kE2.js +0 -3
- package/dist/client/_nuxt/DAVo6uMX.js +0 -1
- package/dist/client/_nuxt/DFRYOy8B.js +0 -1
- package/dist/client/_nuxt/DHCC4-m4.js +0 -1
- package/dist/client/_nuxt/DIC-ECB_.js +0 -1
- package/dist/client/_nuxt/DKluMpTE.js +0 -1
- package/dist/client/_nuxt/DKrjeWrU.js +0 -1
- package/dist/client/_nuxt/DOwv4Xrr.js +0 -1
- package/dist/client/_nuxt/DQdnirlo.js +0 -1
- package/dist/client/_nuxt/DRgydeCt.js +0 -1
- package/dist/client/_nuxt/DS9ZWoKD.js +0 -1
- package/dist/client/_nuxt/DSPtUMMI.js +0 -1
- package/dist/client/_nuxt/DYQagCV4.js +0 -1
- package/dist/client/_nuxt/DfqM7apN.js +0 -1
- package/dist/client/_nuxt/Dm9yFT8Y.js +0 -2
- package/dist/client/_nuxt/DoDCNZ2x.js +0 -1
- package/dist/client/_nuxt/Dtv2yyrc.js +0 -1
- package/dist/client/_nuxt/DvreHBtf.js +0 -1
- package/dist/client/_nuxt/DvyTQcux.js +0 -1
- package/dist/client/_nuxt/H2A8RXvM.js +0 -1
- package/dist/client/_nuxt/KCgU82S2.js +0 -1
- package/dist/client/_nuxt/NboNzovp.js +0 -1
- package/dist/client/_nuxt/PYrcYqZ1.js +0 -1
- package/dist/client/_nuxt/SXuYmi6B.js +0 -1
- package/dist/client/_nuxt/Sm_sVxcW.js +0 -14
- package/dist/client/_nuxt/Wkyh6-uf.js +0 -1
- package/dist/client/_nuxt/XrZDCB4K.js +0 -1
- package/dist/client/_nuxt/_fwBhpzY.js +0 -1
- package/dist/client/_nuxt/a0z0KVy-.js +0 -5
- package/dist/client/_nuxt/bPMpiWut.js +0 -1
- package/dist/client/_nuxt/builds/meta/517cb958-776a-47e2-bd34-69240f18e412.json +0 -1
- package/dist/client/_nuxt/d2PdAb0u.js +0 -2
- package/dist/client/_nuxt/error-404.F6YJ8FEX.css +0 -1
- package/dist/client/_nuxt/error-500.TGideFTg.css +0 -1
- package/dist/client/_nuxt/g4vhSHS2.js +0 -1
- package/dist/client/_nuxt/kZiYIjIU.js +0 -1
- package/dist/client/_nuxt/lOwNZ7_V.js +0 -1
- package/dist/client/_nuxt/nfCtBF4F.js +0 -1
- package/dist/client/_nuxt/pit2X7C0.js +0 -1
- package/dist/client/_nuxt/r5D-aIjp.js +0 -1
- package/dist/client/_nuxt/rh45RTDP.js +0 -1
- package/dist/client/_nuxt/tgs8ujlj.js +0 -1
- package/dist/client/_nuxt/v_4dTNAb.js +0 -1
- package/dist/client/_nuxt/vvK2q8Zt.js +0 -1
- package/dist/client/_nuxt/yOCz8xPT.js +0 -1
|
@@ -1,10 +1,35 @@
|
|
|
1
1
|
import { defineSatoriTransformer } from "../utils.js";
|
|
2
|
+
const BLOCK_ELEMENTS = [
|
|
3
|
+
"div",
|
|
4
|
+
"p",
|
|
5
|
+
"ul",
|
|
6
|
+
"ol",
|
|
7
|
+
"li",
|
|
8
|
+
"blockquote",
|
|
9
|
+
"pre",
|
|
10
|
+
"hr",
|
|
11
|
+
"table",
|
|
12
|
+
"dl"
|
|
13
|
+
];
|
|
2
14
|
export default defineSatoriTransformer({
|
|
3
|
-
filter: (node) => node.type === "div" && (Array.isArray(node.props?.children) && node.props?.children.length >= 1) &&
|
|
15
|
+
filter: (node) => node.type === "div" && (Array.isArray(node.props?.children) && node.props?.children.length >= 1) && !node.props?.class?.includes("hidden"),
|
|
4
16
|
transform: (node) => {
|
|
5
17
|
node.props.style = node.props.style || {};
|
|
18
|
+
if (node.props.style?.display && node.props.style?.display !== "flex") {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
6
21
|
node.props.style.display = "flex";
|
|
7
|
-
if (!node.props?.class?.includes("flex-"))
|
|
22
|
+
if (!node.props?.class?.includes("flex-") && node.props.children.some((child) => BLOCK_ELEMENTS.includes(child.type))) {
|
|
8
23
|
node.props.style.flexDirection = "column";
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
let flexWrap = node.props?.class?.includes("flex-wrap");
|
|
27
|
+
if (!node.props?.class?.includes("flex-")) {
|
|
28
|
+
node.props.style.flexWrap = "wrap";
|
|
29
|
+
flexWrap = true;
|
|
30
|
+
}
|
|
31
|
+
if (flexWrap && !node.props?.class?.includes("gap")) {
|
|
32
|
+
node.props.style.gap = "0.2em";
|
|
33
|
+
}
|
|
9
34
|
}
|
|
10
35
|
});
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { useNitroOrigin, useStorage } from "#imports";
|
|
2
2
|
import sizeOf from "image-size";
|
|
3
|
-
import {
|
|
3
|
+
import { withBase } from "ufo";
|
|
4
4
|
import { toBase64Image } from "../../../../pure.js";
|
|
5
5
|
import { logger } from "../../../util/logger.js";
|
|
6
|
-
import {
|
|
6
|
+
import { defineSatoriTransformer } from "../utils.js";
|
|
7
7
|
async function resolveLocalFilePathImage(publicStoragePath, src) {
|
|
8
8
|
const key = `${publicStoragePath}${src.replace("./", ":").replace("/", ":")}`;
|
|
9
9
|
if (await useStorage().hasItem(key))
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { theme } from "#nuxt-og-image/unocss-config.mjs";
|
|
1
2
|
import { createGenerator } from "@unocss/core";
|
|
2
3
|
import presetWind from "@unocss/preset-wind";
|
|
3
4
|
import { defineSatoriTransformer } from "../utils.js";
|
|
4
|
-
import { theme } from "#nuxt-og-image/unocss-config.mjs";
|
|
5
5
|
const uno = createGenerator({ theme }, {
|
|
6
6
|
presets: [
|
|
7
7
|
presetWind()
|
|
@@ -1,15 +1,11 @@
|
|
|
1
|
+
import { theme } from "#nuxt-og-image/unocss-config.mjs";
|
|
2
|
+
import { fontCache } from "#nuxt-og-image-cache";
|
|
1
3
|
import { defu } from "defu";
|
|
2
|
-
import { createStorage } from "unstorage";
|
|
3
|
-
import lruCacheDriver from "unstorage/drivers/lru-cache";
|
|
4
4
|
import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.js";
|
|
5
5
|
import { loadFont } from "./font.js";
|
|
6
|
-
import { createVNodes } from "./vnodes.js";
|
|
7
6
|
import { useResvg, useSatori, useSharp } from "./instances.js";
|
|
8
|
-
import {
|
|
7
|
+
import { createVNodes } from "./vnodes.js";
|
|
9
8
|
const fontPromises = {};
|
|
10
|
-
const fontCache = createStorage({
|
|
11
|
-
driver: lruCacheDriver({ max: 10 })
|
|
12
|
-
});
|
|
13
9
|
async function resolveFonts(event) {
|
|
14
10
|
const { fonts } = useOgImageRuntimeConfig();
|
|
15
11
|
const normalisedFonts = normaliseFontInput([...event.options.fonts || [], ...fonts]);
|
|
@@ -1,5 +1,3 @@
|
|
|
1
1
|
import type { NuxtIslandResponse } from 'nuxt/dist/core/runtime/nitro/renderer';
|
|
2
|
-
import type { Storage } from 'unstorage';
|
|
3
2
|
import type { OgImageRenderEventContext } from '../../../../types.js';
|
|
4
|
-
export declare const emojiCache: Storage<string>;
|
|
5
3
|
export declare function applyEmojis(ctx: OgImageRenderEventContext, island: NuxtIslandResponse): Promise<any>;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import lruCacheDriver from "unstorage/drivers/lru-cache";
|
|
1
|
+
import { emojiCache } from "#nuxt-og-image-cache";
|
|
3
2
|
const charMap = {
|
|
4
3
|
"2049": "exclamation-question-mark",
|
|
5
4
|
"2122": "trade-mark",
|
|
@@ -3557,9 +3556,6 @@ const charMap = {
|
|
|
3557
3556
|
"1f9df": "zombie",
|
|
3558
3557
|
"1f4a4": "zzz"
|
|
3559
3558
|
};
|
|
3560
|
-
export const emojiCache = createStorage({
|
|
3561
|
-
driver: lruCacheDriver({ max: 1e3 })
|
|
3562
|
-
});
|
|
3563
3559
|
const RE_MATCH_EMOJIS = /[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE])))?))?|\uDC6F(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDD75(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE88\uDE90-\uDEBD\uDEBF-\uDEC2\uDECE-\uDEDB\uDEE0-\uDEE8]|\uDD3C(?:\u200D[\u2640\u2642]\uFE0F?|\uD83C[\uDFFB-\uDFFF])?|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;
|
|
3564
3560
|
export async function applyEmojis(ctx, island) {
|
|
3565
3561
|
const html = island.html;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { useNitroOrigin } from "#imports";
|
|
1
2
|
import { createConsola } from "consola";
|
|
2
3
|
import { useCssInline } from "../instances.js";
|
|
3
|
-
import { useNitroOrigin } from "#imports";
|
|
4
4
|
export async function applyInlineCss(ctx, island) {
|
|
5
5
|
const { e } = ctx;
|
|
6
6
|
let html = island.html;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { html as convertHtmlToSatori } from "satori-html";
|
|
2
|
-
import { fetchIsland } from "../../util/kit.js";
|
|
3
2
|
import { htmlDecodeQuotes } from "../../util/encoding.js";
|
|
4
|
-
import {
|
|
5
|
-
import { applyEmojis } from "./transforms/emojis.js";
|
|
6
|
-
import { walkSatoriTree } from "./utils.js";
|
|
7
|
-
import unocss from "./plugins/unocss.js";
|
|
8
|
-
import emojis from "./plugins/emojis.js";
|
|
3
|
+
import { fetchIsland } from "../../util/kit.js";
|
|
9
4
|
import classes from "./plugins/classes.js";
|
|
10
|
-
import
|
|
11
|
-
import flex from "./plugins/flex.js";
|
|
5
|
+
import emojis from "./plugins/emojis.js";
|
|
12
6
|
import encoding from "./plugins/encoding.js";
|
|
7
|
+
import flex from "./plugins/flex.js";
|
|
8
|
+
import imageSrc from "./plugins/imageSrc.js";
|
|
9
|
+
import unocss from "./plugins/unocss.js";
|
|
10
|
+
import { applyEmojis } from "./transforms/emojis.js";
|
|
11
|
+
import { applyInlineCss } from "./transforms/inlineCss.js";
|
|
12
|
+
import { walkSatoriTree } from "./utils.js";
|
|
13
13
|
export async function createVNodes(ctx) {
|
|
14
14
|
let html = ctx.options.html;
|
|
15
15
|
if (!html) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { theme } from "#nuxt-og-image/unocss-config.mjs";
|
|
2
2
|
import { renderSSRHead } from "@unhead/ssr";
|
|
3
|
+
import { createHeadCore } from "@unhead/vue";
|
|
3
4
|
import { createError } from "h3";
|
|
4
5
|
import { normaliseFontInput, useOgImageRuntimeConfig } from "../../../shared.js";
|
|
5
6
|
import { fetchIsland } from "../../util/kit.js";
|
|
6
7
|
import { applyEmojis } from "../satori/transforms/emojis.js";
|
|
7
|
-
import { theme } from "#nuxt-og-image/unocss-config.mjs";
|
|
8
8
|
export async function html(ctx) {
|
|
9
9
|
const { options } = ctx;
|
|
10
10
|
const { fonts } = useOgImageRuntimeConfig();
|
|
@@ -24,12 +24,6 @@ export async function html(ctx) {
|
|
|
24
24
|
defaultFontFamily = firstFont.name;
|
|
25
25
|
await applyEmojis(ctx, island);
|
|
26
26
|
let html2 = island.html;
|
|
27
|
-
const googleFonts = {};
|
|
28
|
-
fonts.filter((font) => !font.path).forEach((font) => {
|
|
29
|
-
if (!googleFonts[font.name])
|
|
30
|
-
googleFonts[font.name] = [];
|
|
31
|
-
googleFonts[font.name].push(font);
|
|
32
|
-
});
|
|
33
27
|
head.push({
|
|
34
28
|
style: [
|
|
35
29
|
{
|
|
@@ -38,31 +32,40 @@ export async function html(ctx) {
|
|
|
38
32
|
},
|
|
39
33
|
{
|
|
40
34
|
innerHTML: `body {
|
|
41
|
-
transform: scale(${options.props
|
|
35
|
+
transform: scale(${options.props?.scale || 1});
|
|
42
36
|
transform-origin: top left;
|
|
43
37
|
max-height: 100vh;
|
|
44
38
|
position: relative;
|
|
45
39
|
width: ${options.width}px;
|
|
46
40
|
height: ${options.height}px;
|
|
47
41
|
overflow: hidden;
|
|
48
|
-
background-color: ${options.props
|
|
42
|
+
background-color: ${options.props?.colorMode === "dark" ? "#1b1b1b" : "#fff"};
|
|
49
43
|
}
|
|
50
44
|
div {
|
|
51
45
|
display: flex;
|
|
46
|
+
}
|
|
47
|
+
div:has(div, p, ul, ol, li, blockquote, pre, hr, table, dl) {
|
|
48
|
+
display: flex;
|
|
52
49
|
flex-direction: column;
|
|
53
50
|
}
|
|
51
|
+
div:not(:has(div, p, ul, ol, li, blockquote, pre, hr, table, dl)) {
|
|
52
|
+
display: flex;
|
|
53
|
+
flex-wrap: wrap;
|
|
54
|
+
gap: 12px;
|
|
55
|
+
}
|
|
56
|
+
|
|
54
57
|
svg[data-emoji] {
|
|
55
58
|
display: inline-block;
|
|
56
59
|
}
|
|
57
60
|
`
|
|
58
61
|
},
|
|
59
|
-
...fonts.
|
|
62
|
+
...fonts.map((font) => {
|
|
60
63
|
return `
|
|
61
64
|
@font-face {
|
|
62
65
|
font-family: '${font.name}';
|
|
63
66
|
font-style: normal;
|
|
64
67
|
font-weight: ${font.weight};
|
|
65
|
-
src: url('
|
|
68
|
+
src: url('/__og-image__/font/${font.key}') format('truetype');
|
|
66
69
|
}
|
|
67
70
|
`;
|
|
68
71
|
})
|
|
@@ -95,15 +98,7 @@ svg[data-emoji] {
|
|
|
95
98
|
// reset css to match svg output
|
|
96
99
|
href: "https://cdn.jsdelivr.net/npm/gardevoir",
|
|
97
100
|
rel: "stylesheet"
|
|
98
|
-
}
|
|
99
|
-
// have to add each weight as their own stylesheet
|
|
100
|
-
// we should use the local font file no?
|
|
101
|
-
...Object.entries(googleFonts).map(([name, fonts2]) => {
|
|
102
|
-
return {
|
|
103
|
-
href: `https://fonts.googleapis.com/css2?family=${name}:wght@${fonts2.map((f) => f.weight).join(";")}&display=swap`,
|
|
104
|
-
rel: "stylesheet"
|
|
105
|
-
};
|
|
106
|
-
})
|
|
101
|
+
}
|
|
107
102
|
]
|
|
108
103
|
});
|
|
109
104
|
html2 = html2.replaceAll(/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi, "");
|
|
@@ -0,0 +1,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,55 +1,5 @@
|
|
|
1
1
|
import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
|
|
2
|
-
import {
|
|
3
|
-
import { stringify } from "devalue";
|
|
4
|
-
import { getOgImagePath, useOgImageRuntimeConfig } from "../../shared.js";
|
|
2
|
+
import { nuxtContentPlugin } from "../util/plugins.js";
|
|
5
3
|
export default defineNitroPlugin((nitroApp) => {
|
|
6
|
-
|
|
7
|
-
nitroApp.hooks.hook("content:file:afterParse", async (content) => {
|
|
8
|
-
if (content._draft || content._extension !== "md" || content._partial || content.indexable === false || content.index === false)
|
|
9
|
-
return;
|
|
10
|
-
let path = content.path;
|
|
11
|
-
if (isNuxtContentDocumentDriven)
|
|
12
|
-
path = content._path;
|
|
13
|
-
if (path && content.ogImage) {
|
|
14
|
-
const ogImageConfig = typeof content.ogImage === "object" ? content.ogImage : {};
|
|
15
|
-
const optionsWithDefault = defu(ogImageConfig, defaults);
|
|
16
|
-
const src = getOgImagePath(path, optionsWithDefault);
|
|
17
|
-
const payload = {
|
|
18
|
-
title: content.title,
|
|
19
|
-
excerpt: content.description || content.excerpt,
|
|
20
|
-
...content.ogImage
|
|
21
|
-
};
|
|
22
|
-
Object.entries(ogImageConfig).forEach(([key, val]) => {
|
|
23
|
-
payload[key.replace(/-([a-z])/g, (g) => g[1].toUpperCase())] = val;
|
|
24
|
-
});
|
|
25
|
-
content.head = defu({
|
|
26
|
-
script: [
|
|
27
|
-
{
|
|
28
|
-
id: "nuxt-og-image-overrides",
|
|
29
|
-
type: "application/json",
|
|
30
|
-
processTemplateParams: true,
|
|
31
|
-
innerHTML: stringify(payload),
|
|
32
|
-
// we want this to be last in our head
|
|
33
|
-
tagPosition: "bodyClose",
|
|
34
|
-
tagPriority: 30
|
|
35
|
-
// slighty higher priority
|
|
36
|
-
}
|
|
37
|
-
],
|
|
38
|
-
meta: [
|
|
39
|
-
{ property: "og:image", content: src },
|
|
40
|
-
{ property: "og:image:width", content: optionsWithDefault.width },
|
|
41
|
-
{ property: "og:image:height", content: optionsWithDefault.height },
|
|
42
|
-
{ property: "og:image:type", content: `image/${optionsWithDefault.extension}` },
|
|
43
|
-
{ property: "og:image:alt", content: optionsWithDefault.alt },
|
|
44
|
-
// twitter
|
|
45
|
-
{ name: "twitter:card", content: "summary_large_image" },
|
|
46
|
-
{ name: "twitter:image:src", content: src },
|
|
47
|
-
{ name: "twitter:image:width", content: optionsWithDefault.width },
|
|
48
|
-
{ name: "twitter:image:height", content: optionsWithDefault.height },
|
|
49
|
-
{ name: "twitter:image:alt", content: optionsWithDefault.alt }
|
|
50
|
-
]
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
return content;
|
|
54
|
-
});
|
|
4
|
+
nuxtContentPlugin(nitroApp);
|
|
55
5
|
});
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { prerenderOptionsCache } from "#nuxt-og-image-cache";
|
|
2
2
|
import { defineNitroPlugin } from "nitropack/dist/runtime/plugin";
|
|
3
|
-
import {
|
|
4
|
-
import { prerenderOptionsCache } from "../og-image/cache.js";
|
|
3
|
+
import { parseURL } from "ufo";
|
|
5
4
|
import { isInternalRoute } from "../../pure.js";
|
|
5
|
+
import { extractAndNormaliseOgImageOptions, resolvePathCacheKey } from "../og-image/context.js";
|
|
6
6
|
import { createNitroRouteRuleMatcher } from "../util/kit.js";
|
|
7
7
|
export default defineNitroPlugin(async (nitro) => {
|
|
8
8
|
if (!import.meta.prerender)
|
|
9
9
|
return;
|
|
10
|
+
const routeRuleMatcher = createNitroRouteRuleMatcher();
|
|
10
11
|
nitro.hooks.hook("render:html", async (html, ctx) => {
|
|
11
12
|
const { head, bodyAppend } = html;
|
|
12
13
|
const path = parseURL(ctx.event.path).pathname;
|
|
13
14
|
if (isInternalRoute(path))
|
|
14
15
|
return;
|
|
15
|
-
const routeRuleMatcher = createNitroRouteRuleMatcher();
|
|
16
16
|
const routeRules = routeRuleMatcher(path);
|
|
17
17
|
if (routeRules.ogImage === false)
|
|
18
18
|
return;
|
|
@@ -24,5 +24,10 @@ export default defineNitroPlugin(async (nitro) => {
|
|
|
24
24
|
return;
|
|
25
25
|
const key = resolvePathCacheKey(ctx.event);
|
|
26
26
|
await prerenderOptionsCache.setItem(key, options);
|
|
27
|
+
const index = html.bodyAppend.findIndex((script) => script.includes('id="nuxt-og-image-options"'));
|
|
28
|
+
if (index !== -1) {
|
|
29
|
+
html.bodyAppend[index] = html.bodyAppend[index].replace(/<script id="nuxt-og-image-options" type="application\/json">[\s\S]*?<\/script>/, "");
|
|
30
|
+
html.bodyAppend[index] = html.bodyAppend[index].replace(/<script id="nuxt-og-image-overrides" type="application\/json">[\s\S]*?<\/script>/, "");
|
|
31
|
+
}
|
|
27
32
|
});
|
|
28
33
|
});
|
|
@@ -0,0 +1,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,7 +1,7 @@
|
|
|
1
|
-
import { defineEventHandler, setHeader } from "h3";
|
|
2
|
-
import { useOgImageRuntimeConfig } from "../../shared.js";
|
|
3
1
|
import compatibility from "#nuxt-og-image/compatibility";
|
|
4
2
|
import { componentNames } from "#nuxt-og-image/component-names.mjs";
|
|
3
|
+
import { defineEventHandler, setHeader } from "h3";
|
|
4
|
+
import { useOgImageRuntimeConfig } from "../../shared.js";
|
|
5
5
|
export default defineEventHandler(async (e) => {
|
|
6
6
|
setHeader(e, "Content-Type", "application/json");
|
|
7
7
|
const runtimeConfig = useOgImageRuntimeConfig();
|
|
@@ -1,49 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export default defineEventHandler(async (e) => {
|
|
5
|
-
const path = parseURL(e.path).pathname;
|
|
6
|
-
const [_name, _weight] = path.split("/font/")[1].split(".")[0].split("/");
|
|
7
|
-
if (!_name || !_weight)
|
|
8
|
-
return "Provide a font name and weight";
|
|
9
|
-
const name = _name[0].toUpperCase() + _name.slice(1);
|
|
10
|
-
const weight = Math.round(Number.parseInt(_weight) / 100) * 100;
|
|
11
|
-
const config = useOgImageRuntimeConfig();
|
|
12
|
-
const normalisedFonts = normaliseFontInput(config.fonts);
|
|
13
|
-
let font;
|
|
14
|
-
if (typeof getQuery(e).font === "string")
|
|
15
|
-
font = JSON.parse(getQuery(e).font);
|
|
16
|
-
if (!font) {
|
|
17
|
-
font = normalisedFonts.find((font2) => {
|
|
18
|
-
return font2.name.toLowerCase() === name.toLowerCase() && weight === Number(font2.weight);
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
if (!font) {
|
|
22
|
-
return createError({
|
|
23
|
-
statusCode: 404,
|
|
24
|
-
statusMessage: `[Nuxt OG Image] Font ${name}:${weight} not found`
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
const css = await globalThis.$fetch(`https://fonts.googleapis.com/css2?family=${name}:wght@${weight}`, {
|
|
28
|
-
headers: {
|
|
29
|
-
// Make sure it returns TTF.
|
|
30
|
-
"User-Agent": "Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1"
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
if (!css) {
|
|
34
|
-
return createError({
|
|
35
|
-
statusCode: 500,
|
|
36
|
-
statusMessage: `[Nuxt OG Image] Invalid Google Font ${name}:${weight}`
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
const ttfResource = css.match(/src: url\((.+)\) format\('(opentype|truetype)'\)/);
|
|
40
|
-
if (ttfResource?.[1])
|
|
41
|
-
return proxyRequest(e, ttfResource[1], {});
|
|
42
|
-
const woff2Resource = css.match(/src: url\((.+)\) format\('woff2'\)/);
|
|
43
|
-
if (woff2Resource?.[1])
|
|
44
|
-
return sendRedirect(e, woff2Resource[1]);
|
|
45
|
-
return createError({
|
|
46
|
-
statusCode: 500,
|
|
47
|
-
statusMessage: `[Nuxt OG Image] Malformed Google Font CSS ${css}`
|
|
48
|
-
});
|
|
49
|
-
});
|
|
1
|
+
import { defineEventHandler } from "h3";
|
|
2
|
+
import { fontEventHandler } from "../util/eventHandlers.js";
|
|
3
|
+
export default defineEventHandler(fontEventHandler);
|
|
@@ -1,87 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
import { resolveContext } from "../og-image/context.js";
|
|
5
|
-
import { html } from "../og-image/templates/html.js";
|
|
6
|
-
export default defineEventHandler(async (e) => {
|
|
7
|
-
const ctx = await resolveContext(e);
|
|
8
|
-
if (ctx instanceof H3Error)
|
|
9
|
-
return ctx;
|
|
10
|
-
const { isDebugJsonPayload, extension, options, renderer } = ctx;
|
|
11
|
-
const { debug, baseCacheKey } = useOgImageRuntimeConfig();
|
|
12
|
-
const compatibilityHints = [];
|
|
13
|
-
if (isDebugJsonPayload) {
|
|
14
|
-
const queryExtension = getQuery(e).extension || ctx.options.extension;
|
|
15
|
-
if (["jpeg", "jpg"].includes(queryExtension) && options.renderer === "satori")
|
|
16
|
-
compatibilityHints.push("Converting PNGs to JPEGs requires Sharp which only runs on Node based systems.");
|
|
17
|
-
if (options.renderer === "chromium")
|
|
18
|
-
compatibilityHints.push("Using Chromium to generate images is only supported in Node based environments. It's recommended to only use this if you're prerendering");
|
|
19
|
-
setHeader(e, "Content-Type", "application/json");
|
|
20
|
-
return {
|
|
21
|
-
siteConfig: {
|
|
22
|
-
url: e.context.siteConfig.get().url
|
|
23
|
-
},
|
|
24
|
-
compatibilityHints,
|
|
25
|
-
cacheKey: ctx.key,
|
|
26
|
-
options: ctx.options,
|
|
27
|
-
...options.renderer === "satori" ? await renderer.debug(ctx) : void 0
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
switch (extension) {
|
|
31
|
-
case "html":
|
|
32
|
-
setHeader(e, "Content-Type", `text/html`);
|
|
33
|
-
return html(ctx);
|
|
34
|
-
case "svg":
|
|
35
|
-
if (!debug && !import.meta.dev) {
|
|
36
|
-
return createError({
|
|
37
|
-
statusCode: 404
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
if (ctx.renderer.name !== "satori") {
|
|
41
|
-
return createError({
|
|
42
|
-
statusCode: 400,
|
|
43
|
-
statusMessage: `[Nuxt OG Image] Generating ${extension}'s with ${renderer.name} is not supported.`
|
|
44
|
-
});
|
|
45
|
-
}
|
|
46
|
-
setHeader(e, "Content-Type", `image/svg+xml`);
|
|
47
|
-
return (await ctx.renderer.debug(ctx)).svg;
|
|
48
|
-
case "png":
|
|
49
|
-
case "jpeg":
|
|
50
|
-
case "jpg":
|
|
51
|
-
if (!renderer.supportedFormats.includes(extension)) {
|
|
52
|
-
return createError({
|
|
53
|
-
statusCode: 400,
|
|
54
|
-
statusMessage: `[Nuxt OG Image] Generating ${extension}'s with ${renderer.name} is not supported.`
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
setHeader(e, "Content-Type", `image/${extension === "jpg" ? "jpeg" : extension}`);
|
|
58
|
-
break;
|
|
59
|
-
default:
|
|
60
|
-
return createError({
|
|
61
|
-
statusCode: 400,
|
|
62
|
-
statusMessage: `[Nuxt OG Image] Invalid request for og.${extension}.`
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
const cacheApi = await useOgImageBufferCache(ctx, {
|
|
66
|
-
cacheMaxAgeSeconds: ctx.options.cacheMaxAgeSeconds,
|
|
67
|
-
baseCacheKey
|
|
68
|
-
});
|
|
69
|
-
if (typeof cacheApi === "undefined")
|
|
70
|
-
return;
|
|
71
|
-
if (cacheApi instanceof H3Error)
|
|
72
|
-
return cacheApi;
|
|
73
|
-
let image = cacheApi.cachedItem;
|
|
74
|
-
if (!image) {
|
|
75
|
-
image = await renderer.createImage(ctx);
|
|
76
|
-
if (image instanceof H3Error)
|
|
77
|
-
return image;
|
|
78
|
-
if (!image) {
|
|
79
|
-
return createError({
|
|
80
|
-
statusCode: 500,
|
|
81
|
-
statusMessage: `Failed to generate og.${extension}.`
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
await cacheApi.update(image);
|
|
85
|
-
}
|
|
86
|
-
return image;
|
|
87
|
-
});
|
|
1
|
+
import { defineEventHandler } from "h3";
|
|
2
|
+
import { imageEventHandler } from "../util/eventHandlers.js";
|
|
3
|
+
export default defineEventHandler(imageEventHandler);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
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 {
|
|
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;
|