nuxt-og-image 3.0.0-rc.3 → 3.0.0-rc.30
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 +4 -4
- package/dist/client/200.html +226 -15
- package/dist/client/404.html +226 -15
- package/dist/client/_nuxt/{IconCSS.a9e1bda0.js → IconCSS.CZ8ZjA39.js} +1 -1
- package/dist/client/_nuxt/IconCSS.UISSK5sv.css +1 -0
- package/dist/client/_nuxt/abap.bJqzlTLD.js +816 -0
- package/dist/client/_nuxt/actionscript-3.NUzLYz6e.js +1 -0
- package/dist/client/_nuxt/ada.HSb8VHJ5.js +1 -0
- package/dist/client/_nuxt/andromeeda.TE0Toi4a.js +1 -0
- package/dist/client/_nuxt/angular-html.ngCY688K.js +16 -0
- package/dist/client/_nuxt/angular-ts.JfRveWw0.js +666 -0
- package/dist/client/_nuxt/apache.TpqIaH_y.js +1 -0
- package/dist/client/_nuxt/apex.rLr5RF8N.js +274 -0
- package/dist/client/_nuxt/apl.ojEktQcO.js +87 -0
- package/dist/client/_nuxt/applescript.uEUaUzem.js +38 -0
- package/dist/client/_nuxt/ara.yxVemEif.js +21 -0
- package/dist/client/_nuxt/asm.N3zWSyW8.js +1 -0
- package/dist/client/_nuxt/astro.bVipJGkW.js +1 -0
- package/dist/client/_nuxt/aurora-x.23vffHpO.js +1 -0
- package/dist/client/_nuxt/awk.tQAliBPt.js +1 -0
- package/dist/client/_nuxt/ayu-dark.09-XTo9D.js +1 -0
- package/dist/client/_nuxt/ballerina.j08zL6tL.js +62 -0
- package/dist/client/_nuxt/bat.4hprCtpO.js +1 -0
- package/dist/client/_nuxt/beancount.B4bgLeBI.js +1 -0
- package/dist/client/_nuxt/berry.99Qqo7Pl.js +1 -0
- package/dist/client/_nuxt/bibtex.PUS4KD1G.js +1 -0
- package/dist/client/_nuxt/bicep.U1vZFTkg.js +1 -0
- package/dist/client/_nuxt/blade.HvKjdph-.js +831 -0
- package/dist/client/_nuxt/builds/latest.json +1 -1
- package/dist/client/_nuxt/builds/meta/bb98bdc4-cb43-44eb-b961-cca8b9050d48.json +1 -0
- package/dist/client/_nuxt/c.1HqcaTLZ.js +81 -0
- package/dist/client/_nuxt/cadence.wPBjDAPG.js +1 -0
- package/dist/client/_nuxt/catppuccin-frappe.3zzElYQH.js +1 -0
- package/dist/client/_nuxt/catppuccin-latte.7_seQpm6.js +1 -0
- package/dist/client/_nuxt/catppuccin-macchiato.xyLZ1Mzm.js +1 -0
- package/dist/client/_nuxt/catppuccin-mocha.sKQhYBeR.js +1 -0
- package/dist/client/_nuxt/clarity.9V3ikNUm.js +1 -0
- package/dist/client/_nuxt/clojure.m464_LIc.js +1 -0
- package/dist/client/_nuxt/cmake.YiKLaZ9A.js +1 -0
- package/dist/client/_nuxt/cobol.DIpfQcy2.js +1 -0
- package/dist/client/_nuxt/codeql.i7fhVOvX.js +1 -0
- package/dist/client/_nuxt/coffee.09Ode5TL.js +100 -0
- package/dist/client/_nuxt/cpp.UIU91NPT.js +186 -0
- package/dist/client/_nuxt/crystal.KqWgScGa.js +25 -0
- package/dist/client/_nuxt/csharp.SlsguwGx.js +755 -0
- package/dist/client/_nuxt/css.tuEqSfZX.js +505 -0
- package/dist/client/_nuxt/csv.REIP-dDb.js +1 -0
- package/dist/client/_nuxt/cue.ts9p4IYJ.js +1 -0
- package/dist/client/_nuxt/cypher.y2dXjvht.js +1 -0
- package/dist/client/_nuxt/d.91KOtcJM.js +1 -0
- package/dist/client/_nuxt/dark-plus.kgh98KCl.js +1 -0
- package/dist/client/_nuxt/dart.ATU8nP6d.js +1 -0
- package/dist/client/_nuxt/dax.M4oDHFBw.js +29 -0
- package/dist/client/_nuxt/diff.-l9-nN5b.js +1 -0
- package/dist/client/_nuxt/docker.FKXxym4E.js +1 -0
- package/dist/client/_nuxt/dracula-soft.E92bUq8i.js +1 -0
- package/dist/client/_nuxt/dracula.mNVTF5-9.js +1 -0
- package/dist/client/_nuxt/dream-maker.5lPMrnJr.js +52 -0
- package/dist/client/_nuxt/elixir.Q1fiwhg2.js +17 -0
- package/dist/client/_nuxt/elm.AR6G1sGv.js +1 -0
- package/dist/client/_nuxt/entry.OczI2MjB.css +1 -0
- package/dist/client/_nuxt/entry.v1zp98GR.js +134 -0
- package/dist/client/_nuxt/erb.K_ppY6Ln.js +1 -0
- package/dist/client/_nuxt/erlang._Br9gip-.js +1 -0
- package/dist/client/_nuxt/error-404.DkXpI38i.css +1 -0
- package/dist/client/_nuxt/{error-404.b7c0506a.js → error-404.VV5ycc25.js} +1 -1
- package/dist/client/_nuxt/{error-500.c45b2f29.js → error-500.VNY3c4OJ.js} +1 -1
- package/dist/client/_nuxt/fish.k6NZEVUm.js +5 -0
- package/dist/client/_nuxt/fsharp.37PDbGQ_.js +1 -0
- package/dist/client/_nuxt/gdresource.7GKJFf55.js +1 -0
- package/dist/client/_nuxt/gdscript.E1_SGClP.js +44 -0
- package/dist/client/_nuxt/gdshader.6pjKCTQy.js +1 -0
- package/dist/client/_nuxt/gherkin.hgsyILVZ.js +1 -0
- package/dist/client/_nuxt/git-commit.RtAxFnK2.js +1 -0
- package/dist/client/_nuxt/git-rebase.-_3Z3F37.js +1 -0
- package/dist/client/_nuxt/github-dark-dimmed.yDYFqRVv.js +1 -0
- package/dist/client/_nuxt/github-dark.WrpzPehD.js +1 -0
- package/dist/client/_nuxt/github-light.QjB713Ax.js +1 -0
- package/dist/client/_nuxt/glimmer-js.OxCy_kio.js +1 -0
- package/dist/client/_nuxt/glimmer-ts.ZLbawe8H.js +1 -0
- package/dist/client/_nuxt/glsl.yLv_V-GM.js +1 -0
- package/dist/client/_nuxt/gnuplot.fIlAWhXw.js +266 -0
- package/dist/client/_nuxt/go.2bJKq9hO.js +1 -0
- package/dist/client/_nuxt/graphql.Mw2TwDQV.js +4 -0
- package/dist/client/_nuxt/groovy.Z1Lrhk2B.js +37 -0
- package/dist/client/_nuxt/hack.8bxbrxw3.js +86 -0
- package/dist/client/_nuxt/haml.9njXWWYk.js +1 -0
- package/dist/client/_nuxt/handlebars.e6aZXt-Z.js +1 -0
- package/dist/client/_nuxt/haskell.HW0BBkRd.js +559 -0
- package/dist/client/_nuxt/hcl.M9siRbiv.js +1 -0
- package/dist/client/_nuxt/hjson.fLk7JbZa.js +50 -0
- package/dist/client/_nuxt/hlsl.Do_j-o-7.js +1 -0
- package/dist/client/_nuxt/html.q2IluNCo.js +74 -0
- package/dist/client/_nuxt/http.suDZEQUg.js +1 -0
- package/dist/client/_nuxt/imba.Shm_xfQD.js +223 -0
- package/dist/client/_nuxt/ini.T6bxBy5-.js +1 -0
- package/dist/client/_nuxt/java.tY-NU26U.js +68 -0
- package/dist/client/_nuxt/javascript.4rbEI_qn.js +699 -0
- package/dist/client/_nuxt/jinja.E4nwqofd.js +1 -0
- package/dist/client/_nuxt/jison.gkHJeffy.js +1 -0
- package/dist/client/_nuxt/json.xL80yL3n.js +25 -0
- package/dist/client/_nuxt/json5.NRuQoh_0.js +17 -0
- package/dist/client/_nuxt/jsonc.Bb1R3obU.js +25 -0
- package/dist/client/_nuxt/jsonl.Yjg0VwMG.js +25 -0
- package/dist/client/_nuxt/jsonnet.WK26vH-O.js +1 -0
- package/dist/client/_nuxt/jssm.eioTUq4-.js +1 -0
- package/dist/client/_nuxt/jsx.O5ZRGASz.js +699 -0
- package/dist/client/_nuxt/julia.ku4F-e-8.js +9 -0
- package/dist/client/_nuxt/kotlin.1iwCeGA4.js +1 -0
- package/dist/client/_nuxt/kusto.UpRCclYC.js +1 -0
- package/dist/client/_nuxt/latex.6xV8tHRw.js +3 -0
- package/dist/client/_nuxt/less.Mq8TrjER.js +159 -0
- package/dist/client/_nuxt/light-plus.TzXGjDsL.js +1 -0
- package/dist/client/_nuxt/liquid.O0W9gNJ1.js +14 -0
- package/dist/client/_nuxt/lisp.iIZdsWzX.js +1 -0
- package/dist/client/_nuxt/logo.WuHqTpFy.js +1 -0
- package/dist/client/_nuxt/lua.OGbZEs3U.js +1 -0
- package/dist/client/_nuxt/make.8zIAVqFD.js +1 -0
- package/dist/client/_nuxt/markdown.Y8p9X7h3.js +129 -0
- package/dist/client/_nuxt/marko.sELZHXF6.js +8 -0
- package/dist/client/_nuxt/material-theme-darker.e1lAwchJ.js +1 -0
- package/dist/client/_nuxt/material-theme-lighter.y77yPuAI.js +1 -0
- package/dist/client/_nuxt/material-theme-ocean.oIMAIpse.js +1 -0
- package/dist/client/_nuxt/material-theme-palenight.Z44VU5rQ.js +1 -0
- package/dist/client/_nuxt/material-theme.49YjOoAR.js +1 -0
- package/dist/client/_nuxt/matlab.LaB98_jd.js +70 -0
- package/dist/client/_nuxt/mdc.NowVT77H.js +76 -0
- package/dist/client/_nuxt/mdx.VhCSg2DJ.js +1 -0
- package/dist/client/_nuxt/mermaid.WuNnVULj.js +1 -0
- package/dist/client/_nuxt/min-dark._Ja8ZF5C.js +1 -0
- package/dist/client/_nuxt/min-light.N1m_6E3S.js +1 -0
- package/dist/client/_nuxt/mojo.zLNDSfD9.js +519 -0
- package/dist/client/_nuxt/monokai.WLw4Glvg.js +1 -0
- package/dist/client/_nuxt/narrat.KYi2rZr0.js +7 -0
- package/dist/client/_nuxt/nextflow.lYJjOZ_l.js +1 -0
- package/dist/client/_nuxt/nginx.CrBM8z2W.js +1 -0
- package/dist/client/_nuxt/night-owl.GWZK5Ce7.js +1 -0
- package/dist/client/_nuxt/nim.OZ1TiK9r.js +1 -0
- package/dist/client/_nuxt/nix.z3u_V08Q.js +1 -0
- package/dist/client/_nuxt/nord.1NrVtx79.js +1 -0
- package/dist/client/_nuxt/nushell.GDk9yul-.js +1 -0
- package/dist/client/_nuxt/objective-c.Eci2Q5FN.js +109 -0
- package/dist/client/_nuxt/objective-cpp.nGsV46Zk.js +239 -0
- package/dist/client/_nuxt/ocaml.oQRvlYTD.js +1 -0
- package/dist/client/_nuxt/one-dark-pro.qlkgvdEn.js +1 -0
- package/dist/client/_nuxt/onig.mBJmD8D5.js +1 -0
- package/dist/client/_nuxt/pascal.aIRIFbih.js +1 -0
- package/dist/client/_nuxt/perl.CaKiGeyl.js +1 -0
- package/dist/client/_nuxt/php.Q2jqa0n_.js +771 -0
- package/dist/client/_nuxt/plsql.vhhXsReo.js +1 -0
- package/dist/client/_nuxt/poimandres.oZrO-I17.js +1 -0
- package/dist/client/_nuxt/postcss.57yKeRpx.js +1 -0
- package/dist/client/_nuxt/powerquery.wBQvr9E-.js +1 -0
- package/dist/client/_nuxt/powershell.6Y_bsqLY.js +1 -0
- package/dist/client/_nuxt/prisma.fG9Ut-9i.js +1 -0
- package/dist/client/_nuxt/prolog.vggnm0Hd.js +1 -0
- package/dist/client/_nuxt/proto.yigfBmiL.js +1 -0
- package/dist/client/_nuxt/pug.dmyiUMO7.js +1 -0
- package/dist/client/_nuxt/puppet.NqXa_cO1.js +1 -0
- package/dist/client/_nuxt/purescript.NA5qsvV2.js +7 -0
- package/dist/client/_nuxt/python.V9Nu427R.js +518 -0
- package/dist/client/_nuxt/r.xMXDrvl2.js +1 -0
- package/dist/client/_nuxt/raku.NSWyGF40.js +1 -0
- package/dist/client/_nuxt/razor.X4IfBpol.js +40 -0
- package/dist/client/_nuxt/red.sV5NnIRC.js +1 -0
- package/dist/client/_nuxt/reg.Dr-lXfN9.js +1 -0
- package/dist/client/_nuxt/rel.vATIbX_E.js +1 -0
- package/dist/client/_nuxt/riscv.L73dAZEB.js +13 -0
- package/dist/client/_nuxt/rose-pine-dawn.qPi4euik.js +1 -0
- package/dist/client/_nuxt/rose-pine-moon.Im6VgKOx.js +1 -0
- package/dist/client/_nuxt/rose-pine._tQyNI4L.js +1 -0
- package/dist/client/_nuxt/rst.GKtlS3h3.js +1 -0
- package/dist/client/_nuxt/ruby.P9eGVNW4.js +80 -0
- package/dist/client/_nuxt/rust.FLHuhIzG.js +1 -0
- package/dist/client/_nuxt/sas.fTu4QUYF.js +1 -0
- package/dist/client/_nuxt/sass.URKSWxt9.js +2 -0
- package/dist/client/_nuxt/scala.7DKpDMtV.js +5 -0
- package/dist/client/_nuxt/scheme.S0VUhbaV.js +136 -0
- package/dist/client/_nuxt/scss.9u5wOjnF.js +90 -0
- package/dist/client/_nuxt/shaderlab.MYTNW71C.js +1 -0
- package/dist/client/_nuxt/shellscript.82BvnTib.js +4 -0
- package/dist/client/_nuxt/shellsession.e2TODbDv.js +1 -0
- package/dist/client/_nuxt/slack-dark.1ZggNzwg.js +1 -0
- package/dist/client/_nuxt/slack-ochin.IcMt0x71.js +1 -0
- package/dist/client/_nuxt/smalltalk.ymyryZ3T.js +1 -0
- package/dist/client/_nuxt/solarized-dark.3DcwRX9o.js +1 -0
- package/dist/client/_nuxt/solarized-light.iUVMuJ2F.js +1 -0
- package/dist/client/_nuxt/solidity.rGqtk2dD.js +1 -0
- package/dist/client/_nuxt/sparql.b6B4dWwT.js +1 -0
- package/dist/client/_nuxt/splunk.OYnOZZCZ.js +1 -0
- package/dist/client/_nuxt/sql.KWFjTZGI.js +21 -0
- package/dist/client/_nuxt/ssh-config.jdYjUr9x.js +1 -0
- package/dist/client/_nuxt/stata.cF_ucIcM.js +3 -0
- package/dist/client/_nuxt/stylus.sPHLw37c.js +15 -0
- package/dist/client/_nuxt/svelte.6zdtIlwM.js +1 -0
- package/dist/client/_nuxt/swift.YwiPyWKn.js +544 -0
- package/dist/client/_nuxt/synthwave-84.QD7ZGwpp.js +1 -0
- package/dist/client/_nuxt/system-verilog.gwJe9XJI.js +9 -0
- package/dist/client/_nuxt/tasl.IM3fg-4x.js +1 -0
- package/dist/client/_nuxt/tcl.h_zrCUh3.js +1 -0
- package/dist/client/_nuxt/tex.uNByjuDB.js +1 -0
- package/dist/client/_nuxt/tokyo-night.3j08uV2M.js +1 -0
- package/dist/client/_nuxt/toml.p_xIKQcU.js +69 -0
- package/dist/client/_nuxt/tsx.vbVEYvAd.js +699 -0
- package/dist/client/_nuxt/turtle.qvOLXpiq.js +1 -0
- package/dist/client/_nuxt/twig.h5iAhXmS.js +40 -0
- package/dist/client/_nuxt/typescript.IWNmnGsa.js +666 -0
- package/dist/client/_nuxt/v.BcVLQyAr.js +1 -0
- package/dist/client/_nuxt/vanilla-picker.P0dws0ou.js +8 -0
- package/dist/client/_nuxt/vb.nfm3ZogP.js +1 -0
- package/dist/client/_nuxt/verilog.32GaFvLA.js +1 -0
- package/dist/client/_nuxt/vhdl.BgfvI7C9.js +515 -0
- package/dist/client/_nuxt/viml.Ob-szSvk.js +1 -0
- package/dist/client/_nuxt/vitesse-black.uLlG6AUB.js +1 -0
- package/dist/client/_nuxt/vitesse-dark.5VceXvs6.js +1 -0
- package/dist/client/_nuxt/vitesse-light.HOMMxGxw.js +1 -0
- package/dist/client/_nuxt/vue-html.B2XvVFLk.js +1 -0
- package/dist/client/_nuxt/vue.CmUal76M.js +6 -0
- package/dist/client/_nuxt/vyper.0ItMHLZu.js +575 -0
- package/dist/client/_nuxt/wasm.5qeU6UJI.js +1 -0
- package/dist/client/_nuxt/wenyan.gl1zQYA8.js +1 -0
- package/dist/client/_nuxt/wgsl.KpVp-DWl.js +1 -0
- package/dist/client/_nuxt/wolfram.K_QzNdW-.js +1 -0
- package/dist/client/_nuxt/xml.GygmfNh9.js +1 -0
- package/dist/client/_nuxt/xsl.TptR0G-3.js +1 -0
- package/dist/client/_nuxt/yaml.zytfnWoA.js +200 -0
- package/dist/client/_nuxt/zenscript.htRIWiQY.js +2 -0
- package/dist/client/_nuxt/zig.VzlkOal1.js +1 -0
- package/dist/client/index.html +226 -15
- package/dist/module.d.mts +4 -3
- package/dist/module.d.ts +4 -3
- package/dist/module.json +2 -2
- package/dist/module.mjs +110 -87
- package/dist/runtime/components/OgImage/OgImage.d.ts +1 -1
- package/dist/runtime/components/OgImage/OgImageScreenshot.d.ts +1 -1
- package/dist/runtime/components/Templates/Community/NuxtSeo.vue +1 -1
- package/dist/runtime/components/Templates/Community/UnJs.vue +2 -2
- package/dist/runtime/composables/defineOgImage.mjs +4 -9
- package/dist/runtime/core/bindings/chromium/chrome-launcher.mjs +9 -0
- package/dist/runtime/core/bindings/chromium/on-demand.d.ts +2 -0
- package/dist/runtime/core/bindings/chromium/on-demand.mjs +36 -0
- package/dist/runtime/core/bindings/chromium/playwright.d.ts +2 -0
- package/dist/runtime/core/bindings/chromium/playwright.mjs +6 -0
- package/dist/runtime/core/bindings/css-inline/node.d.ts +8 -2
- package/dist/runtime/core/bindings/css-inline/node.mjs +7 -2
- package/dist/runtime/core/bindings/css-inline/wasm-fs.d.ts +8 -0
- package/dist/runtime/core/bindings/css-inline/wasm-fs.mjs +8 -0
- package/dist/runtime/core/bindings/css-inline/wasm.d.ts +8 -0
- package/dist/runtime/core/bindings/css-inline/wasm.mjs +8 -0
- package/dist/runtime/core/font/fetch.mjs +4 -1
- package/dist/runtime/core/html/applyInlineCss.mjs +26 -19
- package/dist/runtime/core/html/devIframeTemplate.mjs +3 -2
- package/dist/runtime/core/options/extract.d.ts +1 -0
- package/dist/runtime/core/options/extract.mjs +9 -0
- package/dist/runtime/core/renderers/satori/index.mjs +6 -5
- package/dist/runtime/core/renderers/satori/instances.mjs +2 -1
- package/dist/runtime/core/renderers/satori/plugins/encoding.mjs +14 -5
- package/dist/runtime/core/renderers/satori/plugins/imageSrc.mjs +49 -40
- package/dist/runtime/core/renderers/satori/vnodes.mjs +3 -1
- package/dist/runtime/core/utils/resolveRendererContext.mjs +5 -9
- package/dist/runtime/nitro/kit.d.ts +3 -0
- package/dist/runtime/nitro/kit.mjs +23 -0
- package/dist/runtime/nitro/plugins/nuxt-content.mjs +6 -3
- package/dist/runtime/nitro/plugins/prerender.d.ts +1 -1
- package/dist/runtime/nitro/plugins/prerender.mjs +5 -12
- package/dist/runtime/{server → nitro}/routes/__og-image__/debug.json.d.ts +0 -4
- package/dist/runtime/{server → nitro}/routes/__og-image__/debug.json.mjs +0 -6
- package/dist/runtime/nitro/routes/__og-image__/font-[name]-[weight].[extension].mjs +56 -0
- package/dist/runtime/{server → nitro}/routes/__og-image__/image.mjs +4 -3
- package/dist/runtime/nitro/tsconfig.json +3 -0
- package/dist/runtime/nitro/utils.mjs +1 -2
- package/dist/runtime/nuxt/plugins/og-image-canonical-urls.server.mjs +9 -2
- package/dist/runtime/nuxt/utils.d.ts +2 -1
- package/dist/runtime/nuxt/utils.mjs +5 -3
- package/dist/runtime/types.d.ts +5 -3
- package/dist/runtime/utils.pure.d.ts +2 -0
- package/dist/runtime/utils.pure.mjs +9 -1
- package/dist/types.d.mts +2 -2
- package/package.json +67 -44
- package/dist/client/_nuxt/IconCSS.f0b56d3e.css +0 -1
- package/dist/client/_nuxt/builds/meta/f6f30fc8-72d3-4090-90f8-10aeee14e041.json +0 -1
- package/dist/client/_nuxt/entry.a30f63d0.css +0 -1
- package/dist/client/_nuxt/entry.dd086114.js +0 -108
- package/dist/client/_nuxt/error-404.b751fa02.css +0 -1
- package/dist/client/_nuxt/vanilla-picker-NKbIFE8h.23409a58.js +0 -8
- package/dist/runtime/core/bindings/chromium/node.mjs +0 -33
- package/dist/runtime/server/routes/__og-image__/font-[name]-[weight].[extension].mjs +0 -30
- /package/dist/client/_nuxt/{error-500.69009e70.css → error-500.SLhS9LVu.css} +0 -0
- /package/dist/runtime/core/bindings/chromium/{node.d.ts → chrome-launcher.d.ts} +0 -0
- /package/dist/runtime/{server → nitro}/routes/__og-image__/font-[name]-[weight].[extension].d.ts +0 -0
- /package/dist/runtime/{server → nitro}/routes/__og-image__/image.d.ts +0 -0
package/dist/module.mjs
CHANGED
|
@@ -1,20 +1,17 @@
|
|
|
1
1
|
import * as fs from 'node:fs';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
|
-
import { useNuxt, addTemplate, loadNuxtModuleInstance, createResolver, resolvePath, defineNuxtModule, useLogger,
|
|
3
|
+
import { useNuxt, addTemplate, loadNuxtModuleInstance, createResolver, resolvePath, tryResolveModule, defineNuxtModule, useLogger, hasNuxtModule, addServerPlugin, addServerHandler, addImports, addComponentsDir, addComponent, addPlugin } from '@nuxt/kit';
|
|
4
4
|
import { assertSiteConfig, installNuxtSiteConfig } from 'nuxt-site-config-kit';
|
|
5
|
-
import { provider, env,
|
|
5
|
+
import { provider, env, isCI, isDevelopment } from 'std-env';
|
|
6
6
|
import { hash } from 'ohash';
|
|
7
7
|
import { relative, dirname } from 'pathe';
|
|
8
8
|
import { defu } from 'defu';
|
|
9
|
-
import {
|
|
9
|
+
import { readPackageJSON } from 'pkg-types';
|
|
10
10
|
import { ensureDependencyInstalled } from 'nypm';
|
|
11
11
|
import { onDevToolsInitialized, extendServerRpc } from '@nuxt/devtools-kit';
|
|
12
12
|
import { readFile, writeFile } from 'node:fs/promises';
|
|
13
13
|
import { createHash } from 'node:crypto';
|
|
14
|
-
import {
|
|
15
|
-
import terminate from 'terminate';
|
|
16
|
-
|
|
17
|
-
const version = "3.0.0-rc.3";
|
|
14
|
+
import { Launcher } from 'chrome-launcher';
|
|
18
15
|
|
|
19
16
|
const autodetectableProviders = {
|
|
20
17
|
azure_static: "azure",
|
|
@@ -56,22 +53,24 @@ const awsLambda = {
|
|
|
56
53
|
"sharp": false
|
|
57
54
|
// 0.33.x has issues
|
|
58
55
|
};
|
|
56
|
+
const WebContainer = {
|
|
57
|
+
"chromium": false,
|
|
58
|
+
"css-inline": "wasm-fs",
|
|
59
|
+
"resvg": "wasm-fs",
|
|
60
|
+
"satori": "wasm-fs",
|
|
61
|
+
"sharp": false
|
|
62
|
+
};
|
|
59
63
|
const RuntimeCompatibility = {
|
|
60
64
|
"nitro-dev": NodeRuntime,
|
|
61
65
|
"nitro-prerender": NodeRuntime,
|
|
62
66
|
"node-server": NodeRuntime,
|
|
63
|
-
"stackblitz":
|
|
64
|
-
|
|
65
|
-
"css-inline": false,
|
|
66
|
-
"resvg": "wasm-fs",
|
|
67
|
-
"satori": "wasm-fs",
|
|
68
|
-
"sharp": false
|
|
69
|
-
},
|
|
67
|
+
"stackblitz": WebContainer,
|
|
68
|
+
"codesandbox": WebContainer,
|
|
70
69
|
"aws-lambda": awsLambda,
|
|
71
70
|
"netlify": awsLambda,
|
|
72
71
|
"netlify-edge": {
|
|
73
72
|
"chromium": false,
|
|
74
|
-
"css-inline":
|
|
73
|
+
"css-inline": "wasm",
|
|
75
74
|
"resvg": "wasm",
|
|
76
75
|
"satori": "node",
|
|
77
76
|
"sharp": false,
|
|
@@ -86,7 +85,7 @@ const RuntimeCompatibility = {
|
|
|
86
85
|
"vercel": awsLambda,
|
|
87
86
|
"vercel-edge": {
|
|
88
87
|
"chromium": false,
|
|
89
|
-
"css-inline":
|
|
88
|
+
"css-inline": "wasm",
|
|
90
89
|
"resvg": "wasm",
|
|
91
90
|
"satori": "node",
|
|
92
91
|
"sharp": false,
|
|
@@ -96,14 +95,15 @@ const RuntimeCompatibility = {
|
|
|
96
95
|
}
|
|
97
96
|
},
|
|
98
97
|
"cloudflare-pages": cloudflare,
|
|
99
|
-
"cloudflare": cloudflare
|
|
98
|
+
"cloudflare": cloudflare,
|
|
99
|
+
"cloudflare-module": cloudflare
|
|
100
100
|
};
|
|
101
101
|
function detectTarget(options = {}) {
|
|
102
102
|
return options?.static ? autodetectableStaticProviders[provider] : autodetectableProviders[provider];
|
|
103
103
|
}
|
|
104
104
|
function resolveNitroPreset(nitroConfig) {
|
|
105
|
-
if (provider === "stackblitz")
|
|
106
|
-
return
|
|
105
|
+
if (provider === "stackblitz" || provider === "codesandbox")
|
|
106
|
+
return provider;
|
|
107
107
|
let preset;
|
|
108
108
|
if (nitroConfig && nitroConfig?.preset)
|
|
109
109
|
preset = nitroConfig.preset;
|
|
@@ -130,6 +130,8 @@ function applyNitroPresetCompatibility(nitroConfig, options) {
|
|
|
130
130
|
let binding = options.compatibility?.[key];
|
|
131
131
|
if (typeof binding === "undefined")
|
|
132
132
|
binding = compatibility[key];
|
|
133
|
+
if (key === "chromium" && binding === "node")
|
|
134
|
+
binding = "playwright";
|
|
133
135
|
resolvedCompatibility[key] = binding;
|
|
134
136
|
return {
|
|
135
137
|
[`#nuxt-og-image/bindings/${key}`]: binding === false ? "unenv/runtime/mock/empty" : resolve(`./runtime/core/bindings/${key}/${binding}`)
|
|
@@ -205,6 +207,9 @@ export {}
|
|
|
205
207
|
references.push({ path: resolve(nuxt.options.buildDir, `module/${module}.d.ts`) });
|
|
206
208
|
});
|
|
207
209
|
}
|
|
210
|
+
function isNuxtGenerate(nuxt = useNuxt()) {
|
|
211
|
+
return nuxt.options._generate || nuxt.options.nitro.static || nuxt.options.nitro.preset === "static";
|
|
212
|
+
}
|
|
208
213
|
|
|
209
214
|
const DEVTOOLS_UI_ROUTE = "/__nuxt-og-image";
|
|
210
215
|
const DEVTOOLS_UI_LOCAL_PORT = 3030;
|
|
@@ -295,7 +300,9 @@ function setupGenerateHandler(options, resolve, nuxt = useNuxt()) {
|
|
|
295
300
|
function setupPrerenderHandler(options, resolve, nuxt = useNuxt()) {
|
|
296
301
|
nuxt.hooks.hook("nitro:init", async (nitro) => {
|
|
297
302
|
nitro.hooks.hook("prerender:config", async (nitroConfig) => {
|
|
298
|
-
|
|
303
|
+
nitroConfig.serverAssets = nitroConfig.serverAssets || [];
|
|
304
|
+
nitroConfig.serverAssets.push({ baseName: "nuxt-og-image:fonts", dir: resolve("./runtime/server/assets") });
|
|
305
|
+
applyNitroPresetCompatibility(nitroConfig, { compatibility: options.compatibility?.prerender, resolve });
|
|
299
306
|
nitroConfig.wasm = nitroConfig.wasm || {};
|
|
300
307
|
nitroConfig.wasm.esmImport = false;
|
|
301
308
|
const prerenderingPages = (nuxt.options.nitro.prerender?.routes || []).some((r) => r && (!r.includes(".") || r.includes("*")));
|
|
@@ -327,14 +334,16 @@ async function setupBuildHandler(config, resolve, nuxt = useNuxt()) {
|
|
|
327
334
|
return;
|
|
328
335
|
const configuredEntry = nitro.options.rollupConfig?.output.entryFileNames;
|
|
329
336
|
let serverEntry = resolve(_nitro.options.output.serverDir, typeof configuredEntry === "string" ? configuredEntry : "index.mjs");
|
|
330
|
-
|
|
337
|
+
const isCloudflarePagesOrModule = target === "cloudflare-pages" || target === "cloudflare-module";
|
|
338
|
+
if (isCloudflarePagesOrModule)
|
|
331
339
|
serverEntry = resolve(dirname(serverEntry), "./chunks/wasm.mjs");
|
|
332
340
|
const contents = await readFile(serverEntry, "utf-8");
|
|
333
341
|
const resvgHash = sha1(await readFile(await resolvePath("@resvg/resvg-wasm/index_bg.wasm")));
|
|
334
342
|
const yogaHash = sha1(await readFile(await resolvePath("yoga-wasm-web/dist/yoga.wasm")));
|
|
343
|
+
const cssInlineHash = sha1(await readFile(await resolvePath("@css-inline/css-inline-wasm/index_bg.wasm")));
|
|
335
344
|
const postfix = target === "vercel-edge" ? "?module" : "";
|
|
336
|
-
const path =
|
|
337
|
-
await writeFile(serverEntry, contents.replaceAll('"@resvg/resvg-wasm/index_bg.wasm"', `"${path}index_bg-${resvgHash}.wasm${postfix}"`).replaceAll('"yoga-wasm-web/dist/yoga.wasm"', `"${path}yoga-${yogaHash}.wasm${postfix}"`), { encoding: "utf-8" });
|
|
345
|
+
const path = isCloudflarePagesOrModule ? `../wasm/` : `./wasm/`;
|
|
346
|
+
await writeFile(serverEntry, contents.replaceAll('"@resvg/resvg-wasm/index_bg.wasm"', `"${path}index_bg-${resvgHash}.wasm${postfix}"`).replaceAll('"@css-inline/css-inline-wasm/index_bg.wasm"', `"${path}index_bg-${cssInlineHash}.wasm${postfix}"`).replaceAll('"yoga-wasm-web/dist/yoga.wasm"', `"${path}yoga-${yogaHash}.wasm${postfix}"`), { encoding: "utf-8" });
|
|
338
347
|
});
|
|
339
348
|
});
|
|
340
349
|
}
|
|
@@ -342,20 +351,19 @@ function sha1(source) {
|
|
|
342
351
|
return createHash("sha1").update(source).digest("hex").slice(0, 16);
|
|
343
352
|
}
|
|
344
353
|
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
installChromeProcess.pid && terminate(installChromeProcess.pid);
|
|
354
|
+
const isUndefinedOrTruthy = (v) => typeof v === "undefined" || v !== false;
|
|
355
|
+
function checkLocalChrome() {
|
|
356
|
+
if (isCI)
|
|
357
|
+
return false;
|
|
358
|
+
let hasChromeLocally = false;
|
|
359
|
+
try {
|
|
360
|
+
hasChromeLocally = !!Launcher.getFirstInstallation();
|
|
361
|
+
} catch {
|
|
362
|
+
}
|
|
363
|
+
return hasChromeLocally;
|
|
364
|
+
}
|
|
365
|
+
async function checkPlaywrightDependency() {
|
|
366
|
+
return !!await tryResolveModule("playwright");
|
|
359
367
|
}
|
|
360
368
|
|
|
361
369
|
function normaliseFontInput(fonts) {
|
|
@@ -365,7 +373,7 @@ function normaliseFontInput(fonts) {
|
|
|
365
373
|
return {
|
|
366
374
|
cacheKey: f,
|
|
367
375
|
name,
|
|
368
|
-
weight: weight ||
|
|
376
|
+
weight: weight || 400,
|
|
369
377
|
style: "normal",
|
|
370
378
|
path: void 0
|
|
371
379
|
};
|
|
@@ -383,7 +391,7 @@ const module = defineNuxtModule({
|
|
|
383
391
|
meta: {
|
|
384
392
|
name: "nuxt-og-image",
|
|
385
393
|
compatibility: {
|
|
386
|
-
nuxt: "^3.
|
|
394
|
+
nuxt: "^3.9.0",
|
|
387
395
|
bridge: false
|
|
388
396
|
},
|
|
389
397
|
configKey: "ogImage"
|
|
@@ -395,6 +403,7 @@ const module = defineNuxtModule({
|
|
|
395
403
|
emojis: "noto",
|
|
396
404
|
renderer: "satori",
|
|
397
405
|
component: "NuxtSeo",
|
|
406
|
+
extension: "png",
|
|
398
407
|
width: 1200,
|
|
399
408
|
height: 600,
|
|
400
409
|
// default is to cache the image for 3 day (72 hours)
|
|
@@ -407,7 +416,9 @@ const module = defineNuxtModule({
|
|
|
407
416
|
};
|
|
408
417
|
},
|
|
409
418
|
async setup(config, nuxt) {
|
|
410
|
-
const
|
|
419
|
+
const { resolve } = createResolver(import.meta.url);
|
|
420
|
+
const { name, version } = await readPackageJSON(resolve("../package.json"));
|
|
421
|
+
const logger = useLogger(name);
|
|
411
422
|
logger.level = config.debug || nuxt.options.debug ? 4 : 3;
|
|
412
423
|
if (config.enabled === false) {
|
|
413
424
|
logger.debug("The module is disabled, skipping setup.");
|
|
@@ -417,13 +428,12 @@ const module = defineNuxtModule({
|
|
|
417
428
|
logger.warn("Nuxt OG Image is enabled but SSR is disabled.\n\nYou should enable SSR (`ssr: true`) or disable the module (`ogImage: { enabled: false }`).");
|
|
418
429
|
return;
|
|
419
430
|
}
|
|
420
|
-
|
|
431
|
+
nuxt.options.build.transpile.push(resolve("./runtime"));
|
|
421
432
|
const preset = resolveNitroPreset(nuxt.options.nitro);
|
|
422
433
|
const targetCompatibility = getPresetNitroPresetCompatibility(preset);
|
|
423
434
|
const hasSharpDependency = !!await tryResolveModule("sharp");
|
|
424
435
|
const userConfiguredExtension = config.defaults.extension;
|
|
425
436
|
const hasConfiguredJpegs = userConfiguredExtension && ["jpeg", "jpg"].includes(userConfiguredExtension);
|
|
426
|
-
config.defaults.extension = userConfiguredExtension || (hasSharpDependency && targetCompatibility.sharp ? "jpg" : "png");
|
|
427
437
|
if (hasConfiguredJpegs && config.defaults.renderer !== "chromium") {
|
|
428
438
|
if (hasSharpDependency && !targetCompatibility.sharp) {
|
|
429
439
|
logger.warn(`Rendering JPEGs requires sharp which does not work with ${preset}. Images will be rendered as PNG at runtime.`);
|
|
@@ -442,32 +452,32 @@ const module = defineNuxtModule({
|
|
|
442
452
|
prerender: { sharp: false }
|
|
443
453
|
});
|
|
444
454
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
prerender: { chromium: "node" }
|
|
466
|
-
});
|
|
467
|
-
}
|
|
468
|
-
} else if (!hasChromeLocally && nuxt.options.dev && config.compatibility?.dev?.chromium === "node") {
|
|
469
|
-
await ensureChromium(logger);
|
|
455
|
+
const hasChromeLocally = checkLocalChrome();
|
|
456
|
+
const hasPlaywrightDependency = await checkPlaywrightDependency();
|
|
457
|
+
const chromeCompatibilityFlags = {
|
|
458
|
+
prerender: config.compatibility?.prerender?.chromium,
|
|
459
|
+
dev: config.compatibility?.dev?.chromium,
|
|
460
|
+
runtime: config.compatibility?.runtime?.chromium
|
|
461
|
+
};
|
|
462
|
+
const chromiumBinding = {
|
|
463
|
+
dev: null,
|
|
464
|
+
prerender: null,
|
|
465
|
+
runtime: null
|
|
466
|
+
};
|
|
467
|
+
if (nuxt.options.dev) {
|
|
468
|
+
if (isUndefinedOrTruthy(chromeCompatibilityFlags.dev))
|
|
469
|
+
chromiumBinding.dev = hasChromeLocally ? "chrome-launcher" : hasPlaywrightDependency ? "playwright" : "on-demand";
|
|
470
|
+
} else {
|
|
471
|
+
if (isUndefinedOrTruthy(chromeCompatibilityFlags.prerender))
|
|
472
|
+
chromiumBinding.prerender = hasChromeLocally ? "chrome-launcher" : hasPlaywrightDependency ? "playwright" : "on-demand";
|
|
473
|
+
if (isUndefinedOrTruthy(chromeCompatibilityFlags.runtime))
|
|
474
|
+
chromiumBinding.runtime = hasPlaywrightDependency ? "playwright" : null;
|
|
470
475
|
}
|
|
476
|
+
config.compatibility = defu(config.compatibility, {
|
|
477
|
+
runtime: { chromium: chromiumBinding.runtime },
|
|
478
|
+
dev: { chromium: chromiumBinding.dev },
|
|
479
|
+
prerender: { chromium: chromiumBinding.prerender }
|
|
480
|
+
});
|
|
471
481
|
await import('@resvg/resvg-js').catch(() => {
|
|
472
482
|
logger.warn("ReSVG is missing dependencies for environment. Falling back to WASM version, this may slow down PNG rendering.");
|
|
473
483
|
config.compatibility = defu(config.compatibility, {
|
|
@@ -485,7 +495,7 @@ const module = defineNuxtModule({
|
|
|
485
495
|
addServerPlugin(resolve("./runtime/nitro/plugins/nuxt-content"));
|
|
486
496
|
if (!config.fonts.length)
|
|
487
497
|
config.fonts = ["Inter:400", "Inter:700"];
|
|
488
|
-
if (preset === "cloudflare") {
|
|
498
|
+
if (preset === "cloudflare" || preset === "cloudflare-module") {
|
|
489
499
|
config.fonts = config.fonts.filter((f) => {
|
|
490
500
|
if (typeof f !== "string" && f.path) {
|
|
491
501
|
logger.warn(`The ${f.name}:${f.weight} font was skipped because remote fonts are not available in Cloudflare Workers, please use a Google font.`);
|
|
@@ -520,27 +530,27 @@ const module = defineNuxtModule({
|
|
|
520
530
|
addServerHandler({
|
|
521
531
|
lazy: true,
|
|
522
532
|
route: "/__og-image__/font/**",
|
|
523
|
-
handler: resolve("./runtime/
|
|
533
|
+
handler: resolve("./runtime/nitro/routes/__og-image__/font-[name]-[weight].[extension]")
|
|
524
534
|
});
|
|
525
535
|
if (config.debug || nuxt.options.dev) {
|
|
526
536
|
addServerHandler({
|
|
527
537
|
lazy: true,
|
|
528
538
|
route: "/__og-image__/debug.json",
|
|
529
|
-
handler: resolve("./runtime/
|
|
539
|
+
handler: resolve("./runtime/nitro/routes/__og-image__/debug.json")
|
|
530
540
|
});
|
|
531
541
|
}
|
|
532
542
|
addServerHandler({
|
|
533
543
|
lazy: true,
|
|
534
544
|
route: "/__og-image__/image/**",
|
|
535
|
-
handler: resolve("./runtime/
|
|
545
|
+
handler: resolve("./runtime/nitro/routes/__og-image__/image")
|
|
536
546
|
});
|
|
537
547
|
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"] = [];
|
|
538
|
-
["defineOgImage", "defineOgImageComponent", "defineOgImageScreenshot"].forEach((
|
|
548
|
+
["defineOgImage", "defineOgImageComponent", "defineOgImageScreenshot"].forEach((name2) => {
|
|
539
549
|
addImports({
|
|
540
|
-
name,
|
|
541
|
-
from: resolve(`./runtime/composables/${
|
|
550
|
+
name: name2,
|
|
551
|
+
from: resolve(`./runtime/composables/${name2}`)
|
|
542
552
|
});
|
|
543
|
-
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"].push(
|
|
553
|
+
nuxt.options.optimization.treeShake.composables.client["nuxt-og-image"].push(name2);
|
|
544
554
|
});
|
|
545
555
|
await addComponentsDir({
|
|
546
556
|
path: resolve("./runtime/components/Templates/Community"),
|
|
@@ -551,10 +561,10 @@ const module = defineNuxtModule({
|
|
|
551
561
|
// new
|
|
552
562
|
"OgImage",
|
|
553
563
|
"OgImageScreenshot"
|
|
554
|
-
].forEach((
|
|
564
|
+
].forEach((name2) => {
|
|
555
565
|
addComponent({
|
|
556
|
-
name,
|
|
557
|
-
filePath: resolve(`./runtime/components/OgImage/${
|
|
566
|
+
name: name2,
|
|
567
|
+
filePath: resolve(`./runtime/components/OgImage/${name2}`),
|
|
558
568
|
...config.componentOptions
|
|
559
569
|
});
|
|
560
570
|
});
|
|
@@ -603,9 +613,9 @@ const module = defineNuxtModule({
|
|
|
603
613
|
nuxt.options.nitro.virtual["#nuxt-og-image/component-names.mjs"] = () => {
|
|
604
614
|
return `export const componentNames = ${JSON.stringify(ogImageComponentCtx.components)}`;
|
|
605
615
|
};
|
|
606
|
-
let unoCssConfig = {
|
|
616
|
+
let unoCssConfig = {};
|
|
607
617
|
nuxt.hook("tailwindcss:config", (tailwindConfig) => {
|
|
608
|
-
unoCssConfig = defu(tailwindConfig.theme
|
|
618
|
+
unoCssConfig = defu(tailwindConfig.theme?.extend, { ...tailwindConfig.theme, extend: void 0 });
|
|
609
619
|
});
|
|
610
620
|
nuxt.hook("unocss:config", (_unoCssConfig) => {
|
|
611
621
|
unoCssConfig = { ..._unoCssConfig.theme };
|
|
@@ -616,7 +626,10 @@ const module = defineNuxtModule({
|
|
|
616
626
|
extendTypes("nuxt-og-image", ({ typesPath }) => {
|
|
617
627
|
const componentImports = ogImageComponentCtx.components.map((component) => {
|
|
618
628
|
const relativeComponentPath = relative(resolve(nuxt.options.rootDir, nuxt.options.buildDir, "module"), component.path);
|
|
619
|
-
|
|
629
|
+
const name2 = config.componentDirs.sort((a, b) => b.length - a.length).reduce((name3, dir) => {
|
|
630
|
+
return name3.replace(new RegExp(`^${dir}`), "");
|
|
631
|
+
}, component.pascalName);
|
|
632
|
+
return ` '${name2}': typeof import('${relativeComponentPath}')['default']`;
|
|
620
633
|
}).join("\n");
|
|
621
634
|
return `
|
|
622
635
|
declare module 'nitropack' {
|
|
@@ -628,7 +641,7 @@ declare module 'nitropack' {
|
|
|
628
641
|
}
|
|
629
642
|
interface NitroRuntimeHooks {
|
|
630
643
|
'nuxt-og-image:context': (ctx: import('${typesPath}').OgImageRenderEventContext) => void | Promise<void>
|
|
631
|
-
'nuxt-og-image:satori:vnodes': (vnodes: import('${typesPath}').VNode, ctx:
|
|
644
|
+
'nuxt-og-image:satori:vnodes': (vnodes: import('${typesPath}').VNode, ctx: import('${typesPath}').OgImageRenderEventContext) => void | Promise<void>
|
|
632
645
|
}
|
|
633
646
|
}
|
|
634
647
|
|
|
@@ -650,11 +663,19 @@ ${componentImports}
|
|
|
650
663
|
}
|
|
651
664
|
nuxt.hooks.hook("modules:done", async () => {
|
|
652
665
|
const normalisedFonts = normaliseFontInput(config.fonts);
|
|
653
|
-
if (!
|
|
666
|
+
if (!isNuxtGenerate() && nuxt.options.build) {
|
|
667
|
+
nuxt.options.nitro = nuxt.options.nitro || {};
|
|
654
668
|
nuxt.options.nitro.prerender = nuxt.options.nitro.prerender || {};
|
|
655
669
|
nuxt.options.nitro.prerender.routes = nuxt.options.nitro.prerender.routes || [];
|
|
656
|
-
normalisedFonts.filter((f) => !f.path && !f.key).forEach((
|
|
657
|
-
|
|
670
|
+
normalisedFonts.filter((f) => !f.path && !f.key).forEach((entry, key) => {
|
|
671
|
+
const { name: name2, weight } = entry;
|
|
672
|
+
if (preset !== "cloudflare" && preset !== "cloudflare-module") {
|
|
673
|
+
entry.path = `/__og-image__/font/${name2}/${weight}.ttf`;
|
|
674
|
+
nuxt.options.nitro.prerender.routes.unshift(entry.path);
|
|
675
|
+
}
|
|
676
|
+
if (name2 === "Inter" && [400, 700].includes(Number(weight)))
|
|
677
|
+
entry.key = `nuxt-og-image:fonts:inter-latin-ext-${weight}-normal.woff`;
|
|
678
|
+
normalisedFonts[key] = entry;
|
|
658
679
|
});
|
|
659
680
|
}
|
|
660
681
|
const hasColorModeModule = hasNuxtModule("@nuxtjs/color-mode");
|
|
@@ -677,7 +698,9 @@ ${componentImports}
|
|
|
677
698
|
// convert the fonts to uniform type to fix ts issue
|
|
678
699
|
fonts: normalisedFonts,
|
|
679
700
|
hasNuxtIcon: hasNuxtModule("nuxt-icon"),
|
|
680
|
-
colorPreference
|
|
701
|
+
colorPreference,
|
|
702
|
+
// @ts-expect-error runtime type
|
|
703
|
+
isNuxtContentDocumentDriven: !!nuxt.options.content?.documentDriven
|
|
681
704
|
};
|
|
682
705
|
nuxt.hooks.callHook("nuxt-og-image:runtime-config", runtimeConfig);
|
|
683
706
|
nuxt.options.runtimeConfig["nuxt-og-image"] = runtimeConfig;
|
|
@@ -685,7 +708,7 @@ ${componentImports}
|
|
|
685
708
|
if (nuxt.options.dev) {
|
|
686
709
|
setupDevHandler(config, resolve);
|
|
687
710
|
setupDevToolsUI(config, resolve);
|
|
688
|
-
} else if (
|
|
711
|
+
} else if (isNuxtGenerate()) {
|
|
689
712
|
setupGenerateHandler(config, resolve);
|
|
690
713
|
} else if (nuxt.options.build) {
|
|
691
714
|
await setupBuildHandler(config, resolve);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { OgImageOptions } from '../../types';
|
|
2
|
-
declare const _default: import("vue").DefineComponent<OgImageOptions<"NuxtSeo">, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").
|
|
2
|
+
declare const _default: import("vue").DefineComponent<OgImageOptions<"NuxtSeo">, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<OgImageOptions<"NuxtSeo">>, {
|
|
3
3
|
props?: any;
|
|
4
4
|
}, {}>;
|
|
5
5
|
export default _default;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { OgImagePageScreenshotOptions } from '../../types';
|
|
2
|
-
declare const _default: import("vue").DefineComponent<OgImagePageScreenshotOptions, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").
|
|
2
|
+
declare const _default: import("vue").DefineComponent<OgImagePageScreenshotOptions, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<OgImagePageScreenshotOptions>, {
|
|
3
3
|
props?: any;
|
|
4
4
|
}, {}>;
|
|
5
5
|
export default _default;
|
|
@@ -117,7 +117,7 @@ if (typeof props.icon === 'string' && !runtimeConfig.hasNuxtIcon && process.dev)
|
|
|
117
117
|
{{ description }}
|
|
118
118
|
</p>
|
|
119
119
|
</div>
|
|
120
|
-
<div v-if="icon" style="width: 30%;" class="flex justify-end">
|
|
120
|
+
<div v-if="Boolean(icon)" style="width: 30%;" class="flex justify-end">
|
|
121
121
|
<IconComponent :name="icon" size="250px" style="margin: 0 auto; opacity: 0.7;" />
|
|
122
122
|
</div>
|
|
123
123
|
</div>
|
|
@@ -25,10 +25,10 @@ const org = computed(() => props.title.split('/')[0])
|
|
|
25
25
|
const repo = computed(() => props.title.split('/')[1])
|
|
26
26
|
|
|
27
27
|
const stars = computed(() => {
|
|
28
|
-
return new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(props.stars || 0)
|
|
28
|
+
return new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' }).format(Number(props.stars || 0))
|
|
29
29
|
})
|
|
30
30
|
const downloads = computed(() => new Intl.NumberFormat('en-US', { notation: 'compact', compactDisplay: 'short' })
|
|
31
|
-
.format(props.downloads || 0),
|
|
31
|
+
.format(Number(props.downloads || 0)),
|
|
32
32
|
)
|
|
33
33
|
|
|
34
34
|
const description = computed(() => (props.description || '').slice(0, 200))
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { defu } from "defu";
|
|
2
2
|
import { appendHeader } from "h3";
|
|
3
|
-
import { createRouter as createRadixRouter, toRouteMatcher } from "radix3";
|
|
4
|
-
import { withoutBase } from "ufo";
|
|
5
3
|
import { getOgImagePath, separateProps, useOgImageRuntimeConfig } from "../utils.mjs";
|
|
6
4
|
import { createOgImageMeta, normaliseOptions } from "../nuxt/utils.mjs";
|
|
7
|
-
import {
|
|
5
|
+
import { createNitroRouteRuleMatcher } from "../nitro/kit.mjs";
|
|
6
|
+
import { useNuxtApp, useRequestEvent, useRoute } from "#imports";
|
|
8
7
|
export function defineOgImage(_options = {}) {
|
|
9
8
|
if (!import.meta.server)
|
|
10
9
|
return;
|
|
@@ -12,12 +11,8 @@ export function defineOgImage(_options = {}) {
|
|
|
12
11
|
const ogImageInstances = nuxtApp.ssrContext._ogImageInstances || [];
|
|
13
12
|
const route = useRoute();
|
|
14
13
|
const basePath = route.path || "/";
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
);
|
|
18
|
-
const routeRules = defu({}, ..._routeRulesMatcher.matchAll(
|
|
19
|
-
withoutBase(basePath.split("?")[0], useRuntimeConfig().app.baseURL)
|
|
20
|
-
).reverse()).ogImage;
|
|
14
|
+
const routeRuleMatcher = createNitroRouteRuleMatcher();
|
|
15
|
+
const routeRules = routeRuleMatcher(basePath).ogImage;
|
|
21
16
|
if (!_options || nuxtApp.ssrContext?.event.context._nitro?.routeRules?.ogImage === false || typeof routeRules !== "undefined" && routeRules === false) {
|
|
22
17
|
ogImageInstances.forEach((e) => {
|
|
23
18
|
e.dispose();
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import playwrightCore from "playwright-core";
|
|
2
|
+
import { Launcher } from "chrome-launcher";
|
|
3
|
+
const chromePath = Launcher.getFirstInstallation();
|
|
4
|
+
export async function createBrowser() {
|
|
5
|
+
return playwrightCore.chromium.launch({
|
|
6
|
+
headless: true,
|
|
7
|
+
executablePath: chromePath
|
|
8
|
+
});
|
|
9
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { execa } from "execa";
|
|
2
|
+
import terminate from "terminate";
|
|
3
|
+
import { createConsola } from "consola";
|
|
4
|
+
import playwrightCore from "playwright-core";
|
|
5
|
+
let installedChromium = false;
|
|
6
|
+
let installChromiumPromise;
|
|
7
|
+
export async function createBrowser() {
|
|
8
|
+
if (installChromiumPromise)
|
|
9
|
+
await installChromiumPromise;
|
|
10
|
+
if (!installedChromium) {
|
|
11
|
+
installChromiumPromise = new Promise((_resolve) => {
|
|
12
|
+
const logger = createConsola().withTag("Nuxt OG Image");
|
|
13
|
+
logger.info("Installing Chromium install for og:image generation...");
|
|
14
|
+
const installChromeProcess = execa("npx", ["playwright", "install", "chromium"], {
|
|
15
|
+
stdio: "inherit"
|
|
16
|
+
});
|
|
17
|
+
installChromeProcess.stderr?.pipe(process.stderr);
|
|
18
|
+
new Promise((resolve) => {
|
|
19
|
+
installChromeProcess.on("exit", (e) => {
|
|
20
|
+
if (e !== 0)
|
|
21
|
+
logger.error("Failed to install Playwright dependency for og:image generation. Trying anyway...");
|
|
22
|
+
resolve(true);
|
|
23
|
+
});
|
|
24
|
+
}).then(() => {
|
|
25
|
+
installChromeProcess.pid && terminate(installChromeProcess.pid);
|
|
26
|
+
logger.info("Installed Chromium install for og:image generation.");
|
|
27
|
+
_resolve();
|
|
28
|
+
});
|
|
29
|
+
}).then(() => {
|
|
30
|
+
installedChromium = true;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
return await playwrightCore.chromium.launch({
|
|
34
|
+
headless: true
|
|
35
|
+
});
|
|
36
|
+
}
|