nuxt-og-image 3.1.1 → 4.0.1

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.
@@ -1,7 +1,7 @@
1
1
  <!DOCTYPE html><html data-capo=""><head><meta charset="utf-8">
2
2
  <meta name="viewport" content="width=device-width, initial-scale=1">
3
- <link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.CGZ3zn-m.css" crossorigin>
4
- <link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Ce3NjAxN.js">
3
+ <link rel="stylesheet" href="/__nuxt-og-image/_nuxt/entry.0k2jyAbH.css" crossorigin>
4
+ <link rel="modulepreload" as="script" crossorigin href="/__nuxt-og-image/_nuxt/spWmiL_5.js">
5
5
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BwpQXVS2.js">
6
6
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Ci-La1BS.js">
7
7
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DOAn35dn.js">
@@ -272,9 +272,9 @@
272
272
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CVO1_9PV.js">
273
273
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CG6Dc4jp.js">
274
274
  <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/B6E6ObS_.js">
275
- <link rel="prefetch" as="style" crossorigin href="/__nuxt-og-image/_nuxt/error-404.CSJ9Dkgh.css">
276
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/DwSUWO6N.js">
277
- <link rel="prefetch" as="style" crossorigin href="/__nuxt-og-image/_nuxt/error-500.BJcKCN8F.css">
278
- <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/BeUwqJEY.js">
279
- <script type="module" src="/__nuxt-og-image/_nuxt/Ce3NjAxN.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1732426781055,false]</script>
280
- <script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"52ed68a4-7100-435e-b5ed-e39bac0de095",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
275
+ <link rel="prefetch" as="style" crossorigin href="/__nuxt-og-image/_nuxt/error-404.LcFwT6vm.css">
276
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/Lr4bgMV6.js">
277
+ <link rel="prefetch" as="style" crossorigin href="/__nuxt-og-image/_nuxt/error-500.DzDak7Sw.css">
278
+ <link rel="prefetch" as="script" crossorigin href="/__nuxt-og-image/_nuxt/CbgzOxfU.js">
279
+ <script type="module" src="/__nuxt-og-image/_nuxt/spWmiL_5.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1733623960699,false]</script>
280
+ <script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-og-image",buildId:"a089ef48-3edd-438e-9106-89949d355348",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
package/dist/module.d.mts CHANGED
@@ -3,7 +3,111 @@ import { AddComponentOptions } from '@nuxt/kit';
3
3
  import { ResvgRenderOptions } from '@resvg/resvg-js';
4
4
  import { SatoriOptions } from 'satori';
5
5
  import { SharpOptions } from 'sharp';
6
- import { OgImageOptions, InputFontConfig, CompatibilityFlagEnvOverrides, OgImageComponent } from '../dist/runtime/types.js';
6
+ import { OgImageComponents } from '#og-image/components';
7
+ import { NitroOptions } from 'nitropack';
8
+
9
+ type IconifyEmojiIconSets = 'twemoji' | 'noto' | 'fluent-emoji' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'streamline-emojis' | 'openmoji';
10
+ interface OgImageComponent {
11
+ path?: string;
12
+ pascalName: string;
13
+ kebabName: string;
14
+ hash: string;
15
+ category: 'app' | 'community' | 'pro';
16
+ credits?: string;
17
+ }
18
+ interface ScreenshotOptions {
19
+ colorScheme?: 'dark' | 'light';
20
+ selector?: string;
21
+ mask?: string;
22
+ /**
23
+ * The width of the screenshot.
24
+ *
25
+ * @default 1200
26
+ */
27
+ width: number;
28
+ /**
29
+ * The height of the screenshot.
30
+ *
31
+ * @default 630
32
+ */
33
+ height: number;
34
+ /**
35
+ * How long to wait before taking the screenshot. Useful for waiting for animations.
36
+ */
37
+ delay?: number;
38
+ }
39
+ interface OgImageOptions<T extends keyof OgImageComponents = 'NuxtSeo'> {
40
+ /**
41
+ * The width of the screenshot.
42
+ *
43
+ * @default 1200
44
+ */
45
+ width?: number;
46
+ /**
47
+ * The height of the screenshot.
48
+ *
49
+ * @default 630
50
+ */
51
+ height?: number;
52
+ /**
53
+ * The alt text for the image.
54
+ */
55
+ alt?: string;
56
+ /**
57
+ * Use a prebuilt image instead of generating one.
58
+ *
59
+ * Should be an absolute URL.
60
+ */
61
+ url?: string;
62
+ /**
63
+ * The name of the component to render.
64
+ */
65
+ component?: T | string;
66
+ /**
67
+ * Props to pass to the component.
68
+ */
69
+ props?: OgImageComponents[T] | Record<string, any>;
70
+ renderer?: 'chromium' | 'satori';
71
+ extension?: 'png' | 'jpeg' | 'jpg';
72
+ emojis?: IconifyEmojiIconSets;
73
+ /**
74
+ * Provide a static HTML template to render the OG Image instead of a component.
75
+ */
76
+ html?: string;
77
+ resvg?: ResvgRenderOptions;
78
+ satori?: SatoriOptions;
79
+ screenshot?: Partial<ScreenshotOptions>;
80
+ sharp?: SharpOptions;
81
+ fonts?: InputFontConfig[];
82
+ cacheMaxAgeSeconds?: number;
83
+ /**
84
+ * @internal
85
+ */
86
+ _query?: Record<string, any>;
87
+ }
88
+ interface FontConfig {
89
+ name: string;
90
+ style?: string;
91
+ weight?: string | number;
92
+ path?: string;
93
+ key?: string;
94
+ absolutePath?: boolean;
95
+ }
96
+ type InputFontConfig = (`${string}:${number}` | string | FontConfig);
97
+ interface RuntimeCompatibilitySchema {
98
+ chromium: 'chrome-launcher' | 'on-demand' | 'playwright' | false;
99
+ ['css-inline']: 'node' | 'wasm' | 'wasm-fs' | false;
100
+ resvg: 'node' | 'wasm' | 'wasm-fs' | false;
101
+ satori: 'node' | 'wasm' | 'wasm-fs' | false;
102
+ sharp: 'node' | false;
103
+ wasm?: NitroOptions['wasm'];
104
+ }
105
+ type CompatibilityFlags = Partial<Omit<RuntimeCompatibilitySchema, 'wasm'>>;
106
+ interface CompatibilityFlagEnvOverrides {
107
+ dev?: CompatibilityFlags;
108
+ runtime?: CompatibilityFlags;
109
+ prerender?: CompatibilityFlags;
110
+ }
7
111
 
8
112
  interface ModuleOptions {
9
113
  /**
package/dist/module.d.ts CHANGED
@@ -3,7 +3,111 @@ import { AddComponentOptions } from '@nuxt/kit';
3
3
  import { ResvgRenderOptions } from '@resvg/resvg-js';
4
4
  import { SatoriOptions } from 'satori';
5
5
  import { SharpOptions } from 'sharp';
6
- import { OgImageOptions, InputFontConfig, CompatibilityFlagEnvOverrides, OgImageComponent } from '../dist/runtime/types.js';
6
+ import { OgImageComponents } from '#og-image/components';
7
+ import { NitroOptions } from 'nitropack';
8
+
9
+ type IconifyEmojiIconSets = 'twemoji' | 'noto' | 'fluent-emoji' | 'fluent-emoji-flat' | 'fluent-emoji-high-contrast' | 'noto-v1' | 'emojione' | 'emojione-monotone' | 'emojione-v1' | 'streamline-emojis' | 'openmoji';
10
+ interface OgImageComponent {
11
+ path?: string;
12
+ pascalName: string;
13
+ kebabName: string;
14
+ hash: string;
15
+ category: 'app' | 'community' | 'pro';
16
+ credits?: string;
17
+ }
18
+ interface ScreenshotOptions {
19
+ colorScheme?: 'dark' | 'light';
20
+ selector?: string;
21
+ mask?: string;
22
+ /**
23
+ * The width of the screenshot.
24
+ *
25
+ * @default 1200
26
+ */
27
+ width: number;
28
+ /**
29
+ * The height of the screenshot.
30
+ *
31
+ * @default 630
32
+ */
33
+ height: number;
34
+ /**
35
+ * How long to wait before taking the screenshot. Useful for waiting for animations.
36
+ */
37
+ delay?: number;
38
+ }
39
+ interface OgImageOptions<T extends keyof OgImageComponents = 'NuxtSeo'> {
40
+ /**
41
+ * The width of the screenshot.
42
+ *
43
+ * @default 1200
44
+ */
45
+ width?: number;
46
+ /**
47
+ * The height of the screenshot.
48
+ *
49
+ * @default 630
50
+ */
51
+ height?: number;
52
+ /**
53
+ * The alt text for the image.
54
+ */
55
+ alt?: string;
56
+ /**
57
+ * Use a prebuilt image instead of generating one.
58
+ *
59
+ * Should be an absolute URL.
60
+ */
61
+ url?: string;
62
+ /**
63
+ * The name of the component to render.
64
+ */
65
+ component?: T | string;
66
+ /**
67
+ * Props to pass to the component.
68
+ */
69
+ props?: OgImageComponents[T] | Record<string, any>;
70
+ renderer?: 'chromium' | 'satori';
71
+ extension?: 'png' | 'jpeg' | 'jpg';
72
+ emojis?: IconifyEmojiIconSets;
73
+ /**
74
+ * Provide a static HTML template to render the OG Image instead of a component.
75
+ */
76
+ html?: string;
77
+ resvg?: ResvgRenderOptions;
78
+ satori?: SatoriOptions;
79
+ screenshot?: Partial<ScreenshotOptions>;
80
+ sharp?: SharpOptions;
81
+ fonts?: InputFontConfig[];
82
+ cacheMaxAgeSeconds?: number;
83
+ /**
84
+ * @internal
85
+ */
86
+ _query?: Record<string, any>;
87
+ }
88
+ interface FontConfig {
89
+ name: string;
90
+ style?: string;
91
+ weight?: string | number;
92
+ path?: string;
93
+ key?: string;
94
+ absolutePath?: boolean;
95
+ }
96
+ type InputFontConfig = (`${string}:${number}` | string | FontConfig);
97
+ interface RuntimeCompatibilitySchema {
98
+ chromium: 'chrome-launcher' | 'on-demand' | 'playwright' | false;
99
+ ['css-inline']: 'node' | 'wasm' | 'wasm-fs' | false;
100
+ resvg: 'node' | 'wasm' | 'wasm-fs' | false;
101
+ satori: 'node' | 'wasm' | 'wasm-fs' | false;
102
+ sharp: 'node' | false;
103
+ wasm?: NitroOptions['wasm'];
104
+ }
105
+ type CompatibilityFlags = Partial<Omit<RuntimeCompatibilitySchema, 'wasm'>>;
106
+ interface CompatibilityFlagEnvOverrides {
107
+ dev?: CompatibilityFlags;
108
+ runtime?: CompatibilityFlags;
109
+ prerender?: CompatibilityFlags;
110
+ }
7
111
 
8
112
  interface ModuleOptions {
9
113
  /**
package/dist/module.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "bridge": false
6
6
  },
7
7
  "configKey": "ogImage",
8
- "version": "3.1.0",
8
+ "version": "4.0.0",
9
9
  "builder": {
10
10
  "@nuxt/module-builder": "0.8.4",
11
11
  "unbuild": "2.0.0"
package/dist/module.mjs CHANGED
@@ -3,7 +3,7 @@ import { existsSync } from 'node:fs';
3
3
  import { readFile, writeFile } from 'node:fs/promises';
4
4
  import { useNuxt, tryResolveModule, addTemplate, resolvePath, loadNuxtModuleInstance, createResolver, defineNuxtModule, useLogger, addImports, addBuildPlugin, hasNuxtModule, addServerPlugin, addServerHandler, addComponentsDir, addComponent, addPlugin } from '@nuxt/kit';
5
5
  import { defu } from 'defu';
6
- import { assertSiteConfig, installNuxtSiteConfig } from 'nuxt-site-config-kit';
6
+ import { installNuxtSiteConfig } from 'nuxt-site-config/kit';
7
7
  import { hash } from 'ohash';
8
8
  import { dirname, relative as relative$1, isAbsolute, basename } from 'pathe';
9
9
  import { readPackageJSON } from 'pkg-types';
@@ -329,11 +329,6 @@ function setupGenerateHandler(options, resolve, nuxt = useNuxt()) {
329
329
  },
330
330
  resolve
331
331
  });
332
- assertSiteConfig("nuxt-og-image", {
333
- url: "OG Image tags are required to be absolute URLs."
334
- }, {
335
- throwError: true
336
- });
337
332
  });
338
333
  }
339
334
 
@@ -343,14 +338,6 @@ function setupPrerenderHandler(options, resolve, nuxt = useNuxt()) {
343
338
  await applyNitroPresetCompatibility(nitroConfig, { compatibility: options.compatibility?.prerender, resolve });
344
339
  nitroConfig.wasm = nitroConfig.wasm || {};
345
340
  nitroConfig.wasm.esmImport = false;
346
- const prerenderingPages = (nuxt.options.nitro.prerender?.routes || []).some((r) => r && (!r.includes(".") || r.includes("*")));
347
- if (prerenderingPages) {
348
- assertSiteConfig("nuxt-og-image", {
349
- url: "OG Image tags are required to be absolute URLs."
350
- }, {
351
- throwError: false
352
- });
353
- }
354
341
  });
355
342
  });
356
343
  }
@@ -1,5 +1,8 @@
1
1
  import { useNitroApp } from "#imports";
2
2
  import { htmlPayloadCache, prerenderOptionsCache } from "#og-image-cache";
3
+ import { theme } from "#og-image-virtual/unocss-config.mjs";
4
+ import { createGenerator } from "@unocss/core";
5
+ import presetWind from "@unocss/preset-wind";
3
6
  import { defu } from "defu";
4
7
  import { parse } from "devalue";
5
8
  import { createError, getQuery } from "h3";
@@ -9,9 +12,9 @@ import { normalizeKey } from "unstorage";
9
12
  import { separateProps, useOgImageRuntimeConfig } from "../../shared.js";
10
13
  import { decodeObjectHtmlEntities } from "../util/encoding.js";
11
14
  import { createNitroRouteRuleMatcher } from "../util/kit.js";
15
+ import { logger } from "../util/logger.js";
12
16
  import { normaliseOptions } from "../util/options.js";
13
17
  import { useChromiumRenderer, useSatoriRenderer } from "./instances.js";
14
- import { logger } from "#og-image/server/util/logger";
15
18
  export function resolvePathCacheKey(e, path) {
16
19
  const siteConfig = e.context.siteConfig.get();
17
20
  const basePath = withoutTrailingSlash(withoutLeadingSlash(normalizeKey(path || e.path)));
@@ -94,7 +97,13 @@ export async function resolveContext(e) {
94
97
  statusMessage: `[Nuxt OG Image] Renderer ${options.renderer} is missing.`
95
98
  });
96
99
  }
100
+ const unocss = await createGenerator({ theme }, {
101
+ presets: [
102
+ presetWind()
103
+ ]
104
+ });
97
105
  const ctx = {
106
+ unocss,
98
107
  e,
99
108
  key,
100
109
  renderer,
@@ -1,20 +1,12 @@
1
- import { theme } from "#og-image-virtual/unocss-config.mjs";
2
- import { createGenerator } from "@unocss/core";
3
- import presetWind from "@unocss/preset-wind";
4
1
  import { defineSatoriTransformer } from "../utils.js";
5
- const uno = createGenerator({ theme }, {
6
- presets: [
7
- presetWind()
8
- ]
9
- });
10
2
  export default defineSatoriTransformer({
11
3
  filter: (node) => !!node.props?.class,
12
- transform: async (node) => {
4
+ transform: async (node, ctx) => {
13
5
  const classes = node.props.class || "";
14
6
  const styles = node.props.style || {};
15
7
  const replacedClasses = /* @__PURE__ */ new Set();
16
8
  for (const token of classes.split(" ").filter((c) => c.trim())) {
17
- const parsedToken = await uno.parseToken(token);
9
+ const parsedToken = await ctx.unocss.parseToken(token);
18
10
  if (parsedToken) {
19
11
  const inlineStyles = parsedToken[0][2].split(";").filter((s) => !!s?.trim());
20
12
  const vars = {
@@ -1,12 +1,15 @@
1
1
  import type { OgImageComponents } from '#og-image/components';
2
2
  import type { ResvgRenderOptions } from '@resvg/resvg-js';
3
+ import type { UnoGenerator } from '@unocss/core';
3
4
  import type { AllowedComponentProps, Component, ComponentCustomProps, VNodeProps } from '@vue/runtime-core';
4
5
  import type { H3Error, H3Event } from 'h3';
5
- import type { NitroApp, NitroOptions } from 'nitropack';
6
+ import type { NitroOptions } from 'nitropack';
7
+ import type { NitroApp } from 'nitropack/types';
6
8
  import type { SatoriOptions } from 'satori';
7
9
  import type { html } from 'satori-html';
8
10
  import type { SharpOptions } from 'sharp';
9
11
  export interface OgImageRenderEventContext {
12
+ unocss: UnoGenerator;
10
13
  e: H3Event;
11
14
  extension: 'png' | 'jpeg' | 'jpg' | 'svg' | 'html' | 'json';
12
15
  key: string;
package/package.json CHANGED
@@ -1,7 +1,8 @@
1
1
  {
2
2
  "name": "nuxt-og-image",
3
3
  "type": "module",
4
- "version": "3.1.1",
4
+ "version": "4.0.1",
5
+ "packageManager": "pnpm@9.14.2",
5
6
  "description": "Enlightened OG Image generation for Nuxt.",
6
7
  "author": {
7
8
  "website": "https://harlanzw.com",
@@ -35,20 +36,19 @@
35
36
  "node": ">=18.0.0"
36
37
  },
37
38
  "dependencies": {
38
- "@nuxt/devtools-kit": "^1.6.1",
39
+ "@nuxt/devtools-kit": "^1.6.3",
39
40
  "@nuxt/kit": "^3.14.1592",
40
41
  "@resvg/resvg-js": "^2.6.2",
41
42
  "@resvg/resvg-wasm": "^2.6.2",
42
- "@unocss/core": "^0.64.1",
43
- "@unocss/preset-wind": "^0.64.1",
43
+ "@unocss/core": "^0.65.1",
44
+ "@unocss/preset-wind": "^0.65.1",
44
45
  "chrome-launcher": "^1.1.2",
45
46
  "defu": "^6.1.4",
46
- "execa": "^9.5.1",
47
+ "execa": "^9.5.2",
47
48
  "image-size": "^1.1.1",
48
- "magic-string": "^0.30.13",
49
- "nuxt-site-config": "^2.2.21",
50
- "nuxt-site-config-kit": "^2.2.21",
51
- "nypm": "^0.3.12",
49
+ "magic-string": "^0.30.14",
50
+ "nuxt-site-config": "^3.0.6",
51
+ "nypm": "^0.4.1",
52
52
  "ofetch": "^1.4.1",
53
53
  "ohash": "^1.1.4",
54
54
  "pathe": "^1.1.2",
@@ -61,53 +61,53 @@
61
61
  "std-env": "^3.8.0",
62
62
  "strip-literal": "^2.1.1",
63
63
  "ufo": "^1.5.4",
64
- "unplugin": "^1.16.0",
64
+ "unplugin": "^2.0.0",
65
65
  "unwasm": "^0.3.9",
66
66
  "yoga-wasm-web": "^0.3.3"
67
67
  },
68
68
  "devDependencies": {
69
- "@antfu/eslint-config": "^3.9.2",
69
+ "@antfu/eslint-config": "^3.11.2",
70
70
  "@css-inline/css-inline": "^0.14.3",
71
71
  "@headlessui/vue": "^1.7.23",
72
72
  "@iconify-json/carbon": "^1.2.4",
73
73
  "@iconify-json/logos": "^1.2.3",
74
74
  "@iconify-json/noto": "^1.2.1",
75
75
  "@iconify-json/ri": "^1.2.3",
76
- "@iconify-json/tabler": "^1.2.8",
76
+ "@iconify-json/tabler": "^1.2.10",
77
77
  "@img/sharp-linux-x64": "0.33.5",
78
78
  "@nuxt/content": "^2.13.4",
79
- "@nuxt/devtools": "1.6.1",
80
- "@nuxt/devtools-ui-kit": "^1.6.1",
81
- "@nuxt/icon": "^1.8.2",
79
+ "@nuxt/devtools": "1.6.3",
80
+ "@nuxt/devtools-ui-kit": "^1.6.3",
81
+ "@nuxt/icon": "^1.9.1",
82
82
  "@nuxt/image": "^1.8.1",
83
83
  "@nuxt/module-builder": "^0.8.4",
84
- "@nuxt/test-utils": "3.14.4",
84
+ "@nuxt/test-utils": "3.15.1",
85
85
  "@nuxt/ui": "^2.19.2",
86
86
  "@nuxtjs/color-mode": "^3.5.2",
87
87
  "@nuxtjs/eslint-config-typescript": "^12.1.0",
88
- "@nuxtjs/i18n": "^9.1.0",
88
+ "@nuxtjs/i18n": "^9.1.1",
89
89
  "@nuxtjs/tailwindcss": "^6.12.2",
90
- "@unocss/nuxt": "^0.64.1",
91
- "@unocss/preset-icons": "^0.64.1",
92
- "@unocss/preset-uno": "^0.64.1",
93
- "@unocss/runtime": "^0.64.1",
94
- "@vueuse/nuxt": "^11.3.0",
90
+ "@unocss/nuxt": "^0.65.1",
91
+ "@unocss/preset-icons": "^0.65.1",
92
+ "@unocss/preset-uno": "^0.65.1",
93
+ "@unocss/runtime": "^0.65.1",
94
+ "@vueuse/nuxt": "^12.0.0",
95
95
  "bumpp": "^9.8.1",
96
- "eslint": "9.15.0",
96
+ "eslint": "9.16.0",
97
97
  "jest-image-snapshot": "^6.4.0",
98
98
  "nuxt": "^3.14.1592",
99
99
  "playwright": "^1.49.0",
100
- "sass": "^1.81.0",
100
+ "sass": "^1.82.0",
101
101
  "sharp": "^0.33.5",
102
- "unocss": "^0.64.1",
103
- "vitest": "^2.1.5",
104
- "typescript": "5.6.3"
102
+ "typescript": "5.6.3",
103
+ "unocss": "^0.65.1",
104
+ "vitest": "^2.1.8"
105
105
  },
106
106
  "resolutions": {
107
107
  "typescript": "5.6.3",
108
108
  "@vue/server-renderer": "3.5.13",
109
109
  "vue": "3.5.13",
110
- "vue-router": "4.4.5"
110
+ "vue-router": "4.5.0"
111
111
  },
112
112
  "build": {
113
113
  "externals": [
@@ -1 +0,0 @@
1
- {"id":"52ed68a4-7100-435e-b5ed-e39bac0de095","timestamp":1732426743929,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}