nuxt-og-image 1.4.2 → 1.4.4
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 +5 -3
- package/dist/module.d.ts +2 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +36 -15
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -43,7 +43,7 @@ Enlightened OG Image generation for Nuxt 3.
|
|
|
43
43
|
- 🤖 Browser provider: Supporting painless, complex templates
|
|
44
44
|
- ✨ Prerendering enabled for static images
|
|
45
45
|
- 📸 Feeling lazy? Just generate screenshots with options for hiding elements, waiting for animations, and more
|
|
46
|
-
- ⚙️
|
|
46
|
+
- ⚙️ Satori support in Vercel Edge and Cloudflare Workers
|
|
47
47
|
|
|
48
48
|
## Install
|
|
49
49
|
|
|
@@ -80,7 +80,9 @@ _nuxt.config.ts_
|
|
|
80
80
|
export default defineNuxtConfig({
|
|
81
81
|
// Recommended
|
|
82
82
|
runtimeConfig: {
|
|
83
|
-
|
|
83
|
+
public: {
|
|
84
|
+
siteUrl: process.env.NUXT_PUBLIC_SITE_URL || 'https://example.com',
|
|
85
|
+
}
|
|
84
86
|
},
|
|
85
87
|
// OR
|
|
86
88
|
ogImage: {
|
|
@@ -475,7 +477,7 @@ The selector to take a screenshot of. This is useful if you want to exclude head
|
|
|
475
477
|
|
|
476
478
|
```ts
|
|
477
479
|
defineOgImageScreenshot({
|
|
478
|
-
|
|
480
|
+
selector: '.page-content'
|
|
479
481
|
})
|
|
480
482
|
```
|
|
481
483
|
|
package/dist/module.d.ts
CHANGED
|
@@ -43,6 +43,8 @@ interface ModuleOptions {
|
|
|
43
43
|
forcePrerender: boolean;
|
|
44
44
|
satoriProvider: boolean;
|
|
45
45
|
browserProvider: boolean;
|
|
46
|
+
experimentalInlineWasm: boolean;
|
|
47
|
+
experimentalRuntimeBrowser: boolean;
|
|
46
48
|
}
|
|
47
49
|
declare const _default: _nuxt_schema.NuxtModule<ModuleOptions>;
|
|
48
50
|
|
package/dist/module.json
CHANGED
package/dist/module.mjs
CHANGED
|
@@ -186,6 +186,11 @@ function stripOgImageOptions(html) {
|
|
|
186
186
|
const PATH = "/__nuxt_og_image__";
|
|
187
187
|
const PATH_ENTRY = `${PATH}/entry`;
|
|
188
188
|
const PATH_PLAYGROUND = `${PATH}/client`;
|
|
189
|
+
const edgeProvidersSupported = [
|
|
190
|
+
"cloudflare",
|
|
191
|
+
"vercel-edge",
|
|
192
|
+
"netlify-edge"
|
|
193
|
+
];
|
|
189
194
|
const module = defineNuxtModule({
|
|
190
195
|
meta: {
|
|
191
196
|
name: "nuxt-og-image",
|
|
@@ -199,7 +204,7 @@ const module = defineNuxtModule({
|
|
|
199
204
|
return {
|
|
200
205
|
// when we run `nuxi generate` we need to force prerendering
|
|
201
206
|
forcePrerender: !nuxt.options.dev && nuxt.options._generate,
|
|
202
|
-
host: nuxt.options.runtimeConfig.public?.siteUrl,
|
|
207
|
+
host: process.env.NUXT_PUBLIC_SITE_URL || nuxt.options.runtimeConfig.public?.siteUrl,
|
|
203
208
|
defaults: {
|
|
204
209
|
component: "OgImageBasic",
|
|
205
210
|
width: 1200,
|
|
@@ -208,7 +213,9 @@ const module = defineNuxtModule({
|
|
|
208
213
|
satoriProvider: true,
|
|
209
214
|
browserProvider: true,
|
|
210
215
|
fonts: [],
|
|
211
|
-
satoriOptions: {}
|
|
216
|
+
satoriOptions: {},
|
|
217
|
+
experimentalInlineWasm: process.env.NITRO_PRESET === "netlify-edge" || nuxt.options.nitro.preset === "netlify-edge" || false,
|
|
218
|
+
experimentalRuntimeBrowser: false
|
|
212
219
|
};
|
|
213
220
|
},
|
|
214
221
|
async setup(config, nuxt) {
|
|
@@ -305,7 +312,7 @@ export {}
|
|
|
305
312
|
];
|
|
306
313
|
exposeModuleConfig("nuxt-og-image", { ...config, assetDirs });
|
|
307
314
|
const nitroPreset = process.env.NITRO_PRESET || nuxt.options.nitro.preset;
|
|
308
|
-
const isWebWorkerEnv = process.env.NODE_ENV !== "development" && (provider === "stackblitz" ||
|
|
315
|
+
const isWebWorkerEnv = process.env.NODE_ENV !== "development" && (provider === "stackblitz" || edgeProvidersSupported.includes(nitroPreset));
|
|
309
316
|
nuxt.hooks.hook("nitro:config", async (nitroConfig) => {
|
|
310
317
|
nitroConfig.externals = defu(nitroConfig.externals || {}, {
|
|
311
318
|
inline: [runtimeDir]
|
|
@@ -314,8 +321,10 @@ export {}
|
|
|
314
321
|
nitroConfig.publicAssets.push({ dir: moduleAssetDir, maxAge: 31536e3 });
|
|
315
322
|
const providerPath = `${runtimeDir}/nitro/providers`;
|
|
316
323
|
if (config.browserProvider) {
|
|
317
|
-
nitroConfig.virtual["#nuxt-og-image/browser"] = `
|
|
318
|
-
|
|
324
|
+
nitroConfig.virtual["#nuxt-og-image/browser"] = config.experimentalRuntimeBrowser ? `export default async function() {
|
|
325
|
+
return await import('${providerPath}/browser/node').then(m => m.default)
|
|
326
|
+
}
|
|
327
|
+
` : `export default async function() {
|
|
319
328
|
return (process.env.prerender || process.env.dev === 'true') ? await import('${providerPath}/browser/node').then(m => m.default) : () => {}
|
|
320
329
|
}
|
|
321
330
|
`;
|
|
@@ -337,25 +346,37 @@ export default function() {
|
|
|
337
346
|
if (provider === 'satori')
|
|
338
347
|
return ${config.satoriProvider ? `await import('${relative(nuxt.options.rootDir, resolve("./runtime/nitro/renderers/satori"))}').then(m => m.default)` : null}
|
|
339
348
|
if (provider === 'browser')
|
|
340
|
-
|
|
349
|
+
${config.experimentalRuntimeBrowser ? `return await import('${relative(nuxt.options.rootDir, resolve("./runtime/nitro/renderers/browser"))}').then(m => m.default)` : ""}
|
|
350
|
+
${!config.experimentalRuntimeBrowser ? `return (process.env.prerender || process.env.dev) ? ${config.browserProvider ? `await import('${relative(nuxt.options.rootDir, resolve("./runtime/nitro/renderers/browser"))}').then(m => m.default)` : null} : null` : ""}
|
|
341
351
|
}
|
|
342
352
|
`;
|
|
343
353
|
});
|
|
344
354
|
nuxt.hooks.hook("nitro:init", async (nitro) => {
|
|
345
355
|
let screenshotQueue = [];
|
|
346
356
|
nitro.hooks.hook("compiled", async (_nitro) => {
|
|
347
|
-
if (
|
|
357
|
+
if (edgeProvidersSupported.includes(_nitro.options.preset)) {
|
|
348
358
|
await copy(resolve("./runtime/public-assets/inter-latin-ext-400-normal.woff"), resolve(_nitro.options.output.publicDir, "inter-latin-ext-400-normal.woff"));
|
|
349
359
|
await copy(resolve("./runtime/public-assets/inter-latin-ext-700-normal.woff"), resolve(_nitro.options.output.publicDir, "inter-latin-ext-700-normal.woff"));
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
360
|
+
if (config.experimentalInlineWasm) {
|
|
361
|
+
await copy(resolve("./runtime/public-assets/svg2png.wasm"), resolve(_nitro.options.output.serverDir, "svg2png.wasm"));
|
|
362
|
+
await copy(resolve("./runtime/public-assets/yoga.wasm"), resolve(_nitro.options.output.serverDir, "yoga.wasm"));
|
|
363
|
+
}
|
|
364
|
+
const indexFile = resolve(_nitro.options.output.serverDir, _nitro.options.preset === "netlify-edge" ? "server.mjs" : "index.mjs");
|
|
353
365
|
if (await pathExists(indexFile)) {
|
|
354
|
-
const indexContents = await readFile(indexFile, "utf-8");
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
366
|
+
const indexContents = (await readFile(indexFile, "utf-8")).replace(".cwd(),", '?.cwd || "/",');
|
|
367
|
+
if (!config.experimentalInlineWasm) {
|
|
368
|
+
await writeFile(
|
|
369
|
+
indexFile,
|
|
370
|
+
indexContents.replace('"/* NUXT_OG_IMAGE_SVG2PNG_WASM */"', 'import("./svg2png.wasm").then(m => m.default || m)').replace('"/* NUXT_OG_IMAGE_YOGA_WASM */"', 'import("./yoga.wasm").then(m => m.default || m)')
|
|
371
|
+
);
|
|
372
|
+
} else {
|
|
373
|
+
const svg2pngWasm = await readFile(resolve("./runtime/public-assets/svg2png.wasm"), "base64");
|
|
374
|
+
const yogaWasm = await readFile(resolve("./runtime/public-assets/yoga.wasm"), "base64");
|
|
375
|
+
await writeFile(
|
|
376
|
+
indexFile,
|
|
377
|
+
indexContents.replace('"/* NUXT_OG_IMAGE_SVG2PNG_WASM */"', `Buffer.from("${svg2pngWasm}", "base64")`).replace('"/* NUXT_OG_IMAGE_YOGA_WASM */"', `Buffer.from("${yogaWasm}", "base64")`)
|
|
378
|
+
);
|
|
379
|
+
}
|
|
359
380
|
}
|
|
360
381
|
}
|
|
361
382
|
});
|