nuxt-og-image 6.0.0-beta.1 → 6.0.0-beta.2

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/dist/cli.mjs CHANGED
@@ -1,27 +1,34 @@
1
1
  #!/usr/bin/env node
2
- import { execSync } from 'node:child_process';
3
2
  import { existsSync, readdirSync, mkdirSync, readFileSync, writeFileSync, renameSync } from 'node:fs';
4
3
  import { dirname, resolve, join } from 'node:path';
5
- import { createInterface } from 'node:readline';
6
4
  import { fileURLToPath } from 'node:url';
5
+ import * as p from '@clack/prompts';
6
+ import { loadFile } from 'magicast';
7
+ import { detectPackageManager, addDependency } from 'nypm';
7
8
 
8
- async function confirm(message) {
9
- const rl = createInterface({ input: process.stdin, output: process.stdout });
10
- return new Promise((resolve2) => {
11
- rl.question(`${message} (y/N) `, (answer) => {
12
- rl.close();
13
- resolve2(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
14
- });
15
- });
16
- }
17
9
  const __dirname$1 = dirname(fileURLToPath(import.meta.url));
18
10
  const communityDir = resolve(__dirname$1, "runtime/app/components/Templates/Community");
19
11
  const defaultComponentDirs = ["OgImage", "OgImageCommunity", "og-image", "OgImageTemplate"];
20
- const RENDERER_DEPS = {
21
- satori: ["satori", "@resvg/resvg-js"],
22
- chromium: ["playwright-core"],
23
- takumi: ["@aspect-build/aspect", "linkedom"]
24
- };
12
+ const RENDERERS = [
13
+ {
14
+ name: "satori",
15
+ label: "Satori",
16
+ description: "SVG-based renderer - fast, works everywhere (recommended)",
17
+ deps: ["satori", "@resvg/resvg-js"]
18
+ },
19
+ {
20
+ name: "takumi",
21
+ label: "Takumi",
22
+ description: "Rust-based high-performance renderer",
23
+ deps: ["@takumi-rs/core"]
24
+ },
25
+ {
26
+ name: "chromium",
27
+ label: "Chromium",
28
+ description: "Browser screenshot renderer - pixel-perfect but slower",
29
+ deps: ["playwright-core"]
30
+ }
31
+ ];
25
32
  function getBaseName(filename) {
26
33
  return filename.replace(/\.(satori|chromium|takumi)\.vue$/, "");
27
34
  }
@@ -42,7 +49,7 @@ function findTemplateFile(name) {
42
49
  function ejectTemplate(name, targetDir) {
43
50
  const templateFile = findTemplateFile(name);
44
51
  if (!templateFile) {
45
- console.error(`Template "${name}" not found.`);
52
+ p.log.error(`Template "${name}" not found.`);
46
53
  listTemplates();
47
54
  process.exit(1);
48
55
  }
@@ -52,12 +59,12 @@ function ejectTemplate(name, targetDir) {
52
59
  mkdirSync(outputDir, { recursive: true });
53
60
  const outputPath = join(outputDir, templateFile);
54
61
  if (existsSync(outputPath)) {
55
- console.error(`File already exists: ${outputPath}`);
62
+ p.log.error(`File already exists: ${outputPath}`);
56
63
  process.exit(1);
57
64
  }
58
65
  const content = readFileSync(templatePath, "utf-8");
59
66
  writeFileSync(outputPath, content, "utf-8");
60
- console.log(`\u2713 Ejected "${name}" to ${outputPath}`);
67
+ p.log.success(`Ejected "${name}" to ${outputPath}`);
61
68
  }
62
69
  function findOgImageComponents(dir) {
63
70
  const components = [];
@@ -93,14 +100,62 @@ function globFiles(dir, pattern, exclude = []) {
93
100
  walk(dir);
94
101
  return results;
95
102
  }
103
+ async function checkNuxtConfig(rootDir) {
104
+ const configPaths = ["nuxt.config.ts", "nuxt.config.js", "nuxt.config.mjs"];
105
+ let configPath = null;
106
+ for (const _p of configPaths) {
107
+ const fullPath = join(rootDir, _p);
108
+ if (existsSync(fullPath)) {
109
+ configPath = fullPath;
110
+ break;
111
+ }
112
+ }
113
+ if (!configPath)
114
+ return { hasDeprecatedFonts: false, hasNuxtFonts: false, configPath: null };
115
+ const mod = await loadFile(configPath).catch(() => null);
116
+ if (!mod)
117
+ return { hasDeprecatedFonts: false, hasNuxtFonts: false, configPath };
118
+ const config = mod.exports.default;
119
+ const hasDeprecatedFonts = !!config?.ogImage?.fonts;
120
+ const modules = config?.modules || [];
121
+ const hasNuxtFonts = modules.some(
122
+ (m) => typeof m === "string" && m === "@nuxt/fonts" || Array.isArray(m) && m[0] === "@nuxt/fonts"
123
+ );
124
+ return { hasDeprecatedFonts, hasNuxtFonts, configPath };
125
+ }
126
+ async function checkMigrationNeeded(rootDir) {
127
+ const result = {
128
+ needsComponentRename: false,
129
+ needsFontsMigration: false,
130
+ needsNuxtFonts: false,
131
+ componentsToRename: []
132
+ };
133
+ const dirs = [rootDir];
134
+ if (existsSync(join(rootDir, "app")))
135
+ dirs.push(join(rootDir, "app"));
136
+ const layersDir = join(rootDir, "layers");
137
+ if (existsSync(layersDir)) {
138
+ const layerDirs = readdirSync(layersDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => join(layersDir, d.name));
139
+ dirs.push(...layerDirs);
140
+ }
141
+ for (const dir of dirs) {
142
+ const components = findOgImageComponents(dir);
143
+ for (const filepath of components) {
144
+ const filename = filepath.split("/").pop();
145
+ if (!hasRendererSuffix(filename)) {
146
+ result.componentsToRename.push({ from: filepath, to: "" });
147
+ }
148
+ }
149
+ }
150
+ result.needsComponentRename = result.componentsToRename.length > 0;
151
+ const configCheck = await checkNuxtConfig(rootDir);
152
+ result.needsFontsMigration = configCheck.hasDeprecatedFonts;
153
+ result.needsNuxtFonts = !configCheck.hasNuxtFonts;
154
+ return result;
155
+ }
96
156
  function migrateDefineOgImageApi(dryRun) {
97
157
  const cwd = process.cwd();
98
- const excludePatterns = [
99
- /node_modules/,
100
- /\.nuxt/,
101
- /\.output/,
102
- /dist/
103
- ];
158
+ const excludePatterns = [/node_modules/, /\.nuxt/, /\.output/, /dist/];
104
159
  const files = globFiles(cwd, /\.(?:vue|ts|tsx|js|jsx)$/, excludePatterns);
105
160
  const changes = [];
106
161
  for (const file of files) {
@@ -121,10 +176,7 @@ function migrateDefineOgImageApi(dryRun) {
121
176
  const remaining = inner.replace(/renderer\s*:\s*['"][^'"]+['"]\s*,?\s*/g, "").replace(/,\s*$/, "").trim();
122
177
  modified = true;
123
178
  changeCount++;
124
- if (remaining) {
125
- return `defineOgImageScreenshot({ ${remaining} })`;
126
- }
127
- return `defineOgImageScreenshot()`;
179
+ return remaining ? `defineOgImageScreenshot({ ${remaining} })` : `defineOgImageScreenshot()`;
128
180
  }
129
181
  if (componentMatch || rendererMatch) {
130
182
  const componentName = componentMatch ? componentMatch[1] : "NuxtSeo";
@@ -158,108 +210,178 @@ function migrateDefineOgImageApi(dryRun) {
158
210
  }
159
211
  }
160
212
  }
161
- if (changes.length === 0) {
162
- console.log("\u2713 No defineOgImage calls need migration.");
213
+ return { changes };
214
+ }
215
+ function migrateV6Components(componentsToRename, defaultRenderer, dryRun) {
216
+ for (const item of componentsToRename) {
217
+ const filename = item.from.split("/").pop();
218
+ const newName = filename.replace(".vue", `.${defaultRenderer}.vue`);
219
+ item.to = item.from.replace(filename, newName);
220
+ }
221
+ if (dryRun) {
222
+ console.log("\nWould rename:");
223
+ for (const { from, to } of componentsToRename) {
224
+ console.log(` ${from.split("/").pop()} \u2192 ${to.split("/").pop()}`);
225
+ }
163
226
  return;
164
227
  }
165
- console.log(`
166
- Found ${changes.length} file(s) with changes:
167
- `);
168
- for (const { file, count } of changes) {
169
- const relPath = file.replace(`${cwd}/`, "");
170
- console.log(` ${relPath} (${count} change${count > 1 ? "s" : ""})`);
228
+ for (const { from, to } of componentsToRename) {
229
+ renameSync(from, to);
230
+ console.log(`\u2713 Renamed ${from.split("/").pop()}`);
171
231
  }
172
- if (dryRun) {
173
- console.log("\n[Dry run - no changes made]");
174
- console.log(`
175
- Run without --dry-run to apply changes.`);
176
- } else {
177
- console.log(`
178
- \u2713 Migration complete. ${changes.length} file(s) updated.`);
232
+ }
233
+ async function installRendererDeps(renderers) {
234
+ const cwd = process.cwd();
235
+ const pm = await detectPackageManager(cwd);
236
+ const pmName = pm?.name || "npm";
237
+ const allDeps = [];
238
+ for (const renderer of renderers) {
239
+ const def = RENDERERS.find((r) => r.name === renderer);
240
+ if (def) {
241
+ allDeps.push(...def.deps);
242
+ }
243
+ }
244
+ if (allDeps.length === 0)
245
+ return;
246
+ const spinner = p.spinner();
247
+ spinner.start(`Installing dependencies with ${pmName}...`);
248
+ for (const dep of allDeps) {
249
+ await addDependency(dep, { cwd, dev: false }).catch(() => {
250
+ spinner.stop(`Failed to install ${dep}`);
251
+ p.log.warn(`Run manually: ${pmName} add ${dep}`);
252
+ });
179
253
  }
254
+ spinner.stop("Dependencies installed");
180
255
  }
181
- function migrateV6(dryRun, defaultRenderer = "satori") {
256
+ async function installNuxtFonts() {
182
257
  const cwd = process.cwd();
183
- const dirs = [cwd];
184
- if (existsSync(join(cwd, "app")))
185
- dirs.push(join(cwd, "app"));
186
- const layersDir = join(cwd, "layers");
187
- if (existsSync(layersDir)) {
188
- const layerDirs = readdirSync(layersDir, { withFileTypes: true }).filter((d) => d.isDirectory()).map((d) => join(layersDir, d.name));
189
- dirs.push(...layerDirs);
258
+ const spinner = p.spinner();
259
+ spinner.start("Adding @nuxt/fonts module...");
260
+ const { execa } = await import('execa');
261
+ await execa("npx", ["nuxi", "module", "add", "@nuxt/fonts"], { cwd }).then(() => {
262
+ spinner.stop("@nuxt/fonts module added");
263
+ }).catch(() => {
264
+ spinner.stop("Failed to add @nuxt/fonts");
265
+ p.log.warn("Run manually: npx nuxi module add @nuxt/fonts");
266
+ });
267
+ }
268
+ async function runMigrate(args2) {
269
+ const dryRun = args2.includes("--dry-run") || args2.includes("-d");
270
+ const skipConfirm = args2.includes("--yes") || args2.includes("-y");
271
+ const rendererIdx = args2.indexOf("--renderer");
272
+ const cliRenderer = rendererIdx !== -1 ? args2[rendererIdx + 1] : null;
273
+ if (cliRenderer && !["satori", "chromium", "takumi"].includes(cliRenderer)) {
274
+ console.error(`Invalid renderer: ${cliRenderer}. Must be satori, chromium, or takumi.`);
275
+ process.exit(1);
190
276
  }
191
- const toRename = [];
192
- for (const dir of dirs) {
193
- const components = findOgImageComponents(dir);
194
- for (const filepath of components) {
195
- const filename = filepath.split("/").pop();
196
- if (!hasRendererSuffix(filename)) {
197
- const newName = filename.replace(".vue", `.${defaultRenderer}.vue`);
198
- toRename.push({
199
- from: filepath,
200
- to: filepath.replace(filename, newName)
201
- });
277
+ p.intro("nuxt-og-image v6 Migration");
278
+ const cwd = process.cwd();
279
+ const migrationCheck = await checkMigrationNeeded(cwd);
280
+ const noComponentWork = !migrationCheck.needsComponentRename;
281
+ const noFontsWork = !migrationCheck.needsFontsMigration && !migrationCheck.needsNuxtFonts;
282
+ if (noComponentWork && noFontsWork) {
283
+ console.log("\u2713 All OG Image components already have renderer suffixes.");
284
+ p.outro("Done");
285
+ return;
286
+ }
287
+ const tasks = [];
288
+ if (migrationCheck.needsComponentRename) {
289
+ tasks.push(`Rename ${migrationCheck.componentsToRename.length} component(s) to include renderer suffix`);
290
+ }
291
+ if (migrationCheck.needsFontsMigration) {
292
+ tasks.push("Migrate ogImage.fonts to @nuxt/fonts config");
293
+ }
294
+ if (migrationCheck.needsNuxtFonts) {
295
+ tasks.push("Install @nuxt/fonts module");
296
+ }
297
+ tasks.push("Update defineOgImage() calls to new API");
298
+ p.note(tasks.map((t) => `\u2022 ${t}`).join("\n"), "Migration tasks");
299
+ if (dryRun) {
300
+ p.log.warn("[Dry run mode - no changes will be made]");
301
+ }
302
+ let selectedRenderers;
303
+ if (skipConfirm) {
304
+ selectedRenderers = cliRenderer ? [cliRenderer] : ["satori"];
305
+ } else {
306
+ const confirmed = await p.confirm({
307
+ message: "This will modify files. Continue?",
308
+ initialValue: false
309
+ });
310
+ if (p.isCancel(confirmed) || !confirmed) {
311
+ p.cancel("Migration cancelled");
312
+ process.exit(0);
313
+ }
314
+ const rendererSelection = await p.multiselect({
315
+ message: "Which renderers do you want to use?",
316
+ options: RENDERERS.map((r) => ({
317
+ value: r.name,
318
+ label: r.label,
319
+ hint: r.description
320
+ })),
321
+ initialValues: ["satori"],
322
+ required: true
323
+ });
324
+ if (p.isCancel(rendererSelection)) {
325
+ p.cancel("Migration cancelled");
326
+ process.exit(0);
327
+ }
328
+ selectedRenderers = rendererSelection;
329
+ if (!dryRun) {
330
+ const installDeps = await p.confirm({
331
+ message: "Install renderer dependencies?",
332
+ initialValue: true
333
+ });
334
+ if (!p.isCancel(installDeps) && installDeps) {
335
+ await installRendererDeps(selectedRenderers);
202
336
  }
203
337
  }
204
338
  }
205
- if (toRename.length === 0) {
206
- console.log("\u2713 All OG Image components already have renderer suffixes.");
207
- return;
339
+ if (migrationCheck.needsComponentRename) {
340
+ console.log("\nRenaming components...");
341
+ migrateV6Components(migrationCheck.componentsToRename, selectedRenderers[0] || "satori", dryRun);
342
+ }
343
+ console.log("\nMigrating defineOgImage calls...");
344
+ const apiChanges = migrateDefineOgImageApi(dryRun);
345
+ if (apiChanges.changes.length > 0) {
346
+ for (const { file, count } of apiChanges.changes) {
347
+ const relPath = file.replace(`${cwd}/`, "");
348
+ console.log(` ${relPath} (${count} change${count > 1 ? "s" : ""})`);
349
+ }
350
+ } else {
351
+ console.log(" No API changes needed");
208
352
  }
209
- console.log(`
210
- Found ${toRename.length} component(s) to rename:
211
- `);
212
- for (const { from, to } of toRename) {
213
- const fromName = from.split("/").pop();
214
- const toName = to.split("/").pop();
215
- console.log(` ${fromName} \u2192 ${toName}`);
353
+ if (migrationCheck.needsNuxtFonts && !dryRun && !skipConfirm) {
354
+ const addFonts = await p.confirm({
355
+ message: "@nuxt/fonts is recommended for custom fonts. Add it?",
356
+ initialValue: true
357
+ });
358
+ if (!p.isCancel(addFonts) && addFonts) {
359
+ await installNuxtFonts();
360
+ }
216
361
  }
217
362
  if (dryRun) {
218
363
  console.log("\n[Dry run - no changes made]");
219
- console.log(`
220
- Run without --dry-run to apply changes.`);
221
- return;
222
- }
223
- console.log("");
224
- for (const { from, to } of toRename) {
225
- renameSync(from, to);
226
- console.log(`\u2713 Renamed ${from.split("/").pop()}`);
364
+ console.log("Run without --dry-run to apply changes.");
227
365
  }
228
- console.log(`
229
- \u2713 Migration complete. ${toRename.length} file(s) renamed.`);
366
+ p.outro(dryRun ? "Dry run complete" : "Migration complete!");
230
367
  }
231
- function enableRenderer(renderer) {
232
- const deps = RENDERER_DEPS[renderer];
233
- if (!deps) {
234
- console.error(`Unknown renderer: ${renderer}`);
235
- console.log("Available renderers: satori, chromium, takumi");
368
+ async function runEnable(renderer) {
369
+ const def = RENDERERS.find((r) => r.name === renderer);
370
+ if (!def) {
371
+ p.log.error(`Unknown renderer: ${renderer}`);
372
+ p.log.info(`Available: ${RENDERERS.map((r) => r.name).join(", ")}`);
236
373
  process.exit(1);
237
374
  }
238
- console.log(`Installing dependencies for ${renderer} renderer:`);
239
- console.log(` ${deps.join(", ")}
240
- `);
241
- const cwd = process.cwd();
242
- let pm = "npm";
243
- if (existsSync(join(cwd, "pnpm-lock.yaml")))
244
- pm = "pnpm";
245
- else if (existsSync(join(cwd, "yarn.lock")))
246
- pm = "yarn";
247
- else if (existsSync(join(cwd, "bun.lockb")))
248
- pm = "bun";
249
- const installCmd = pm === "npm" ? `${pm} install` : `${pm} add`;
250
- const cmd = `${installCmd} ${deps.join(" ")}`;
251
- console.log(`Running: ${cmd}
252
- `);
253
- execSync(cmd, { stdio: "inherit", cwd });
254
- console.log(`
255
- \u2713 ${renderer} renderer enabled.`);
375
+ p.intro(`Enable ${def.label} renderer`);
376
+ await installRendererDeps([renderer]);
377
+ p.outro("Done");
256
378
  }
257
379
  const args = process.argv.slice(2);
258
380
  const command = args[0];
259
381
  if (command === "eject") {
260
382
  const templateName = args[1];
261
383
  if (!templateName) {
262
- console.error("Please specify a template name.");
384
+ p.log.error("Please specify a template name.");
263
385
  listTemplates();
264
386
  process.exit(1);
265
387
  }
@@ -271,60 +393,24 @@ if (command === "eject") {
271
393
  } else if (command === "migrate") {
272
394
  const version = args[1];
273
395
  if (version !== "v6") {
274
- console.error("Usage: npx nuxt-og-image migrate v6 [--dry-run] [--renderer <satori|chromium|takumi>]");
275
- process.exit(1);
276
- }
277
- const dryRun = args.includes("--dry-run") || args.includes("-d");
278
- const skipConfirm = args.includes("--yes") || args.includes("-y");
279
- const rendererIdx = args.indexOf("--renderer");
280
- const renderer = rendererIdx !== -1 ? args[rendererIdx + 1] || "satori" : "satori";
281
- if (!["satori", "chromium", "takumi"].includes(renderer)) {
282
- console.error(`Invalid renderer: ${renderer}. Must be satori, chromium, or takumi.`);
396
+ p.log.error("Usage: npx nuxt-og-image migrate v6 [--dry-run] [--yes] [--renderer <satori|chromium|takumi>]");
283
397
  process.exit(1);
284
398
  }
285
- console.log("nuxt-og-image v6 Migration\n");
286
- console.log("This will:");
287
- console.log(" 1. Rename OgImage components to include renderer suffix (.satori.vue, etc.)");
288
- console.log(" 2. Update defineOgImage() calls to new component-first API");
289
- console.log("");
290
- console.log("\x1B[33m\u26A0 WARNING: This modifies files directly and could break your code.\x1B[0m");
291
- console.log("\x1B[33m Make sure you have committed or backed up your changes first.\x1B[0m");
292
- console.log("");
293
- if (dryRun) {
294
- console.log("[Dry run mode - no files will be modified]\n");
295
- migrateV6(true, renderer);
296
- console.log("");
297
- migrateDefineOgImageApi(true);
298
- } else if (skipConfirm) {
299
- migrateV6(false, renderer);
300
- console.log("");
301
- migrateDefineOgImageApi(false);
302
- } else {
303
- confirm("Continue with migration?").then((confirmed) => {
304
- if (!confirmed) {
305
- console.log("Migration cancelled.");
306
- process.exit(0);
307
- }
308
- console.log("");
309
- migrateV6(false, renderer);
310
- console.log("");
311
- migrateDefineOgImageApi(false);
312
- });
313
- }
399
+ runMigrate(args);
314
400
  } else if (command === "enable") {
315
401
  const renderer = args[1];
316
402
  if (!renderer) {
317
- console.error("Usage: npx nuxt-og-image enable <renderer>");
318
- console.log("Available renderers: satori, chromium, takumi");
403
+ p.log.error("Usage: npx nuxt-og-image enable <renderer>");
404
+ p.log.info(`Available: ${RENDERERS.map((r) => r.name).join(", ")}`);
319
405
  process.exit(1);
320
406
  }
321
- enableRenderer(renderer);
407
+ runEnable(renderer);
322
408
  } else {
323
409
  console.log("nuxt-og-image CLI\n");
324
410
  console.log("Commands:");
325
411
  console.log(" list List available community templates");
326
412
  console.log(" eject <name> Eject a community template to your project");
327
413
  console.log(" migrate v6 Migrate to v6 (component suffixes + new API)");
328
- console.log(" Options: --dry-run, --renderer <satori|chromium|takumi>");
414
+ console.log(" Options: --dry-run, --yes, --renderer <satori|chromium|takumi>");
329
415
  console.log(" enable <renderer> Install dependencies for a renderer (satori, chromium, takumi)");
330
416
  }
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"5205806b-8e5a-41ea-90c0-9cd83a75fc0a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1769156794534,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1769234619446,false]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"5205806b-8e5a-41ea-90c0-9cd83a75fc0a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1769156794534,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1769234619446,false]</script></body></html>
@@ -1 +1 @@
1
- {"id":"5205806b-8e5a-41ea-90c0-9cd83a75fc0a","timestamp":1769156785841}
1
+ {"id":"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5","timestamp":1769234610675}
@@ -0,0 +1 @@
1
+ {"id":"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5","timestamp":1769234610675,"prerendered":["/docs","/debug","/templates","/"]}
@@ -1 +1 @@
1
- [{"data":-1,"prerenderedAt":1},1769156794532]
1
+ [{"data":-1,"prerenderedAt":1},1769234619444]
@@ -1 +1 @@
1
- [{"data":-1,"prerenderedAt":1},1769156794534]
1
+ [{"data":-1,"prerenderedAt":1},1769234619445]
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/debug/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"5205806b-8e5a-41ea-90c0-9cd83a75fc0a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/debug/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a">[{"serverRendered":1,"prerenderedAt":2},false,1769156794534]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/debug/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/debug/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5">[{"serverRendered":1,"prerenderedAt":2},false,1769234619445]</script></body></html>
@@ -1 +1 @@
1
- [{"data":-1,"prerenderedAt":1},1769156794534]
1
+ [{"data":-1,"prerenderedAt":1},1769234619445]
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/docs/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"5205806b-8e5a-41ea-90c0-9cd83a75fc0a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/docs/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a">[{"serverRendered":1,"prerenderedAt":2},false,1769156794534]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/docs/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/docs/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5">[{"serverRendered":1,"prerenderedAt":2},false,1769234619445]</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"5205806b-8e5a-41ea-90c0-9cd83a75fc0a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a">[{"serverRendered":1,"prerenderedAt":2},false,1769156794532]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5">[{"serverRendered":1,"prerenderedAt":2},false,1769234619444]</script></body></html>
@@ -1 +1 @@
1
- [{"data":-1,"prerenderedAt":1},1769156794534]
1
+ [{"data":-1,"prerenderedAt":1},1769234619445]
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/templates/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"5205806b-8e5a-41ea-90c0-9cd83a75fc0a",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/templates/_payload.json?5205806b-8e5a-41ea-90c0-9cd83a75fc0a">[{"serverRendered":1,"prerenderedAt":2},false,1769156794534]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-og-image/_nuxt/DXObZt09.js"}}</script><link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.BEExJd9R.css" crossorigin><link rel="preload" as="fetch" crossorigin="anonymous" href="/__nuxt-og-image/templates/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5"><link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DXObZt09.js"><link rel="preload" as="font" crossorigin href="/__nuxt-og-image/fonts/HubotSans-Regular.woff2"><script type="module" src="/__nuxt-og-image/_nuxt/DXObZt09.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"8e2df3bd-1df7-4172-a3c9-b46cdb9070e5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__" data-src="/__nuxt-og-image/templates/_payload.json?8e2df3bd-1df7-4172-a3c9-b46cdb9070e5">[{"serverRendered":1,"prerenderedAt":2},false,1769234619445]</script></body></html>
package/dist/module.cjs CHANGED
@@ -10,7 +10,7 @@ require('ohash');
10
10
  require('pathe');
11
11
  require('pkg-types');
12
12
  require('std-env');
13
- const module$1 = require('./shared/nuxt-og-image.DroaQ3v-.cjs');
13
+ const module$1 = require('./shared/nuxt-og-image.iluFGbPR.cjs');
14
14
  require('../dist/runtime/logger.js');
15
15
  require('node:crypto');
16
16
  require('nypm');
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "nuxt": ">=3.16.0"
5
5
  },
6
6
  "configKey": "ogImage",
7
- "version": "6.0.0-beta.1",
7
+ "version": "6.0.0-beta.2",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -8,7 +8,7 @@ import 'ohash';
8
8
  import 'pathe';
9
9
  import 'pkg-types';
10
10
  import 'std-env';
11
- export { m as default } from './shared/nuxt-og-image.HMyihp-D.mjs';
11
+ export { m as default } from './shared/nuxt-og-image.D-QhzI76.mjs';
12
12
  import '../dist/runtime/logger.js';
13
13
  import 'node:crypto';
14
14
  import 'nypm';