nuxt-i18n-micro 3.18.2 → 3.18.3

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 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"a653a17d-86f7-440a-a09c-9871b01bc761",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779781937006,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1781272696441,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"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"a653a17d-86f7-440a-a09c-9871b01bc761",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779781937006,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1781272696442,false]</script></body></html>
@@ -1 +1 @@
1
- {"id":"a653a17d-86f7-440a-a09c-9871b01bc761","timestamp":1779781934227}
1
+ {"id":"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f","timestamp":1781272693310}
@@ -0,0 +1 @@
1
+ {"id":"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f","timestamp":1781272693310,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"a653a17d-86f7-440a-a09c-9871b01bc761",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1779781937006,false]</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/entry.Kj_DYE7z.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js"><script type="module" src="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/B-cq5x_h.js" crossorigin></script><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-404.CyBDSRXN.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BCTbvRLO.js"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/D6byAye8.js"><link rel="prefetch" as="style" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/error-500.DJtCwW7w.css"><link rel="prefetch" as="script" crossorigin href="/__NUXT_DEVTOOLS_I18N_BASE__/_nuxt/BNXusRXY.js"></head><body><div id="__nuxt"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__NUXT_DEVTOOLS_I18N_BASE__/",buildId:"c5d2004e-f981-4363-a9ec-4d72cf7f4a8f",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1781272696442,false]</script></body></html>
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "nuxt-i18n-micro",
3
3
  "configKey": "i18n",
4
- "version": "3.18.2",
4
+ "version": "3.18.3",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "3.6.1"
@@ -4,6 +4,7 @@ import { createError, defineNuxtPlugin, navigateTo, useRequestEvent, useRoute, u
4
4
  import { useI18nLocale } from "../composables/useI18nLocale.js";
5
5
  import { getEnabledLocaleCodes } from "../utils/active-locales.js";
6
6
  import { getLocaleCookieName, getLocaleCookieOptions } from "../utils/cookie.js";
7
+ import { resolvePreferredLocale } from "../utils/resolve-server-locale.js";
7
8
  import { resolveI18nConfigWithRuntimeOverrides } from "../utils/runtime-i18n-config.js";
8
9
  const DEBUG = process.env.NUXT_I18N_DEBUG_REDIRECT === "1";
9
10
  const DEFAULT_STATIC_PATTERNS = [
@@ -42,13 +43,6 @@ function isInternalPath(path, excludePatterns) {
42
43
  }
43
44
  return false;
44
45
  }
45
- function parseAcceptLanguage(header) {
46
- if (!header) return [];
47
- return header.split(",").map((entry) => {
48
- const [lang] = entry.split(";");
49
- return (lang ?? "").trim();
50
- }).filter((s) => s.length > 0);
51
- }
52
46
  export default defineNuxtPlugin({
53
47
  name: "i18n-redirect",
54
48
  enforce: "pre",
@@ -107,32 +101,16 @@ export default defineNuxtPlugin({
107
101
  const isPrerenderOrBot = !!(prerenderHeader || userAgent.includes("Nitro") || !userAgent);
108
102
  const skipRedirect = !isRootPath && autoDetectPath !== "*" && isPrerenderOrBot;
109
103
  if (!skipRedirect) {
110
- let preferredLocale = defaultLocale;
111
- if (autoDetectPath !== "*") {
112
- const localeState = useState("i18n-locale", () => null);
113
- if (localeState.value && validLocales.includes(localeState.value)) {
114
- preferredLocale = localeState.value;
115
- }
116
- }
117
- if (preferredLocale === defaultLocale && cookieName) {
118
- const cookieVal = getCookie(event, cookieName);
119
- if (cookieVal && validLocales.includes(cookieVal)) {
120
- preferredLocale = cookieVal;
121
- }
122
- }
123
- if (i18nConfig.autoDetectLanguage && preferredLocale === defaultLocale) {
124
- const acceptHeader = getHeader(event, "accept-language");
125
- const langs = parseAcceptLanguage(acceptHeader);
126
- for (const lang of langs) {
127
- const lowerCaseLanguage = lang.toLowerCase();
128
- const primaryLanguage = lowerCaseLanguage.split("-")[0];
129
- const found = validLocales.find((l) => l.toLowerCase() === lowerCaseLanguage || l.toLowerCase() === primaryLanguage);
130
- if (found) {
131
- preferredLocale = found;
132
- break;
133
- }
134
- }
135
- }
104
+ const localeState = autoDetectPath !== "*" ? useState("i18n-locale", () => null) : null;
105
+ let preferredLocale = resolvePreferredLocale({
106
+ defaultLocale,
107
+ validLocales,
108
+ autoDetectLanguage: i18nConfig.autoDetectLanguage,
109
+ stateLocale: localeState?.value ?? null,
110
+ cookieLocale: cookieName ? getCookie(event, cookieName) : null,
111
+ acceptLanguageHeader: getHeader(event, "accept-language"),
112
+ ignoreStateLocale: autoDetectPath === "*"
113
+ });
136
114
  if (autoDetectPath === "*" && !hasLocalePrefix) {
137
115
  preferredLocale = defaultLocale;
138
116
  }
@@ -3,14 +3,8 @@ import { getI18nConfig } from "#i18n-internal/strategy";
3
3
  import { useRuntimeConfig } from "#imports";
4
4
  import { getEnabledLocaleCodes } from "../../utils/active-locales.js";
5
5
  import { getLocaleCookieName } from "../../utils/cookie.js";
6
+ import { resolveServerLocale } from "../../utils/resolve-server-locale.js";
6
7
  import { resolveI18nConfigWithRuntimeOverrides } from "../../utils/runtime-i18n-config.js";
7
- function parseAcceptLanguage(header) {
8
- if (!header) return [];
9
- return header.split(",").map((entry) => {
10
- const [lang] = entry.split(";");
11
- return (lang ?? "").trim();
12
- }).filter((s) => s.length > 0);
13
- }
14
8
  export default defineEventHandler(async (event) => {
15
9
  const path = event.path || getRequestURL(event).pathname;
16
10
  if (path.startsWith("/api") || path.startsWith("/_nuxt") || path.startsWith("/_locales") || path.startsWith("/__")) return;
@@ -24,31 +18,19 @@ export default defineEventHandler(async (event) => {
24
18
  const pathSegments = path.split("/").filter(Boolean);
25
19
  const firstSegment = pathSegments[0];
26
20
  const hasLocaleInUrl = Boolean(firstSegment && validLocales.includes(firstSegment));
27
- let locale = defaultLocale;
28
- if (hasLocaleInUrl) {
29
- locale = firstSegment;
30
- } else if (getQuery(event).locale && validLocales.includes(String(getQuery(event).locale))) {
31
- locale = String(getQuery(event).locale);
32
- } else {
33
- const cookieName = getLocaleCookieName(config);
34
- if (cookieName) {
35
- const cookieVal = getCookie(event, cookieName);
36
- if (cookieVal && validLocales.includes(cookieVal)) locale = cookieVal;
37
- }
38
- }
39
- if (config.autoDetectLanguage && locale === defaultLocale) {
40
- const acceptHeader = getHeader(event, "accept-language");
41
- const langs = parseAcceptLanguage(acceptHeader);
42
- for (const lang of langs) {
43
- const lowerCaseLanguage = lang.toLowerCase();
44
- const primaryLanguage = lowerCaseLanguage.split("-")[0];
45
- const found = validLocales.find((l) => l.toLowerCase() === lowerCaseLanguage || l.toLowerCase() === primaryLanguage);
46
- if (found) {
47
- locale = found;
48
- break;
49
- }
50
- }
51
- }
21
+ const cookieName = getLocaleCookieName(config);
22
+ const queryLocale = getQuery(event).locale ? String(getQuery(event).locale) : null;
23
+ const cookieLocale = cookieName ? getCookie(event, cookieName) : null;
24
+ const locale = resolveServerLocale({
25
+ defaultLocale,
26
+ validLocales,
27
+ autoDetectLanguage: config.autoDetectLanguage,
28
+ hasLocaleInUrl,
29
+ urlLocale: firstSegment ?? null,
30
+ queryLocale,
31
+ cookieLocale,
32
+ acceptLanguageHeader: getHeader(event, "accept-language")
33
+ });
52
34
  event.context.i18n = {
53
35
  locale,
54
36
  translations: {}
@@ -0,0 +1,3 @@
1
+ export declare function parseAcceptLanguage(header: string | undefined): string[];
2
+ export declare function detectLocaleFromAcceptLanguage(header: string | undefined, validLocales: string[]): string | null;
3
+ export declare function applyAutoDetectLanguage(locale: string, hasExplicitPreference: boolean, autoDetectLanguage: boolean | undefined, acceptLanguageHeader: string | undefined, validLocales: string[]): string;
@@ -0,0 +1,21 @@
1
+ export function parseAcceptLanguage(header) {
2
+ if (!header) return [];
3
+ return header.split(",").map((entry) => {
4
+ const [lang] = entry.split(";");
5
+ return (lang ?? "").trim();
6
+ }).filter((s) => s.length > 0);
7
+ }
8
+ export function detectLocaleFromAcceptLanguage(header, validLocales) {
9
+ const langs = parseAcceptLanguage(header);
10
+ for (const lang of langs) {
11
+ const lowerCaseLanguage = lang.toLowerCase();
12
+ const primaryLanguage = lowerCaseLanguage.split("-")[0];
13
+ const found = validLocales.find((l) => l.toLowerCase() === lowerCaseLanguage || l.toLowerCase() === primaryLanguage);
14
+ if (found) return found;
15
+ }
16
+ return null;
17
+ }
18
+ export function applyAutoDetectLanguage(locale, hasExplicitPreference, autoDetectLanguage, acceptLanguageHeader, validLocales) {
19
+ if (!autoDetectLanguage || hasExplicitPreference) return locale;
20
+ return detectLocaleFromAcceptLanguage(acceptLanguageHeader, validLocales) ?? locale;
21
+ }
@@ -0,0 +1,21 @@
1
+ export interface ResolveServerLocaleInput {
2
+ defaultLocale: string;
3
+ validLocales: string[];
4
+ autoDetectLanguage?: boolean;
5
+ hasLocaleInUrl: boolean;
6
+ urlLocale?: string | null;
7
+ queryLocale?: string | null;
8
+ cookieLocale?: string | null;
9
+ acceptLanguageHeader?: string | null;
10
+ }
11
+ export declare function resolveServerLocale(input: ResolveServerLocaleInput): string;
12
+ export interface ResolvePreferredLocaleInput {
13
+ defaultLocale: string;
14
+ validLocales: string[];
15
+ autoDetectLanguage?: boolean;
16
+ stateLocale?: string | null;
17
+ cookieLocale?: string | null;
18
+ acceptLanguageHeader?: string | null;
19
+ ignoreStateLocale?: boolean;
20
+ }
21
+ export declare function resolvePreferredLocale(input: ResolvePreferredLocaleInput): string;
@@ -0,0 +1,30 @@
1
+ import { applyAutoDetectLanguage } from "./accept-language.js";
2
+ export function resolveServerLocale(input) {
3
+ const { defaultLocale, validLocales, autoDetectLanguage, hasLocaleInUrl, urlLocale, queryLocale, cookieLocale, acceptLanguageHeader } = input;
4
+ let locale = defaultLocale;
5
+ let hasExplicitPreference = false;
6
+ if (hasLocaleInUrl && urlLocale && validLocales.includes(urlLocale)) {
7
+ locale = urlLocale;
8
+ hasExplicitPreference = true;
9
+ } else if (queryLocale && validLocales.includes(queryLocale)) {
10
+ locale = queryLocale;
11
+ hasExplicitPreference = true;
12
+ } else if (cookieLocale && validLocales.includes(cookieLocale)) {
13
+ locale = cookieLocale;
14
+ hasExplicitPreference = true;
15
+ }
16
+ return applyAutoDetectLanguage(locale, hasExplicitPreference, autoDetectLanguage, acceptLanguageHeader ?? void 0, validLocales);
17
+ }
18
+ export function resolvePreferredLocale(input) {
19
+ const { defaultLocale, validLocales, autoDetectLanguage, stateLocale, cookieLocale, acceptLanguageHeader, ignoreStateLocale = false } = input;
20
+ let preferredLocale = defaultLocale;
21
+ let hasExplicitPreference = false;
22
+ if (!ignoreStateLocale && stateLocale && validLocales.includes(stateLocale)) {
23
+ preferredLocale = stateLocale;
24
+ hasExplicitPreference = true;
25
+ } else if (cookieLocale && validLocales.includes(cookieLocale)) {
26
+ preferredLocale = cookieLocale;
27
+ hasExplicitPreference = true;
28
+ }
29
+ return applyAutoDetectLanguage(preferredLocale, hasExplicitPreference, autoDetectLanguage, acceptLanguageHeader ?? void 0, validLocales);
30
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nuxt-i18n-micro",
3
- "version": "3.18.2",
3
+ "version": "3.18.3",
4
4
  "description": "Nuxt I18n Micro is a lightweight, high-performance internationalization module for Nuxt, designed to handle multi-language support with minimal overhead, fast build times, and efficient runtime performance.",
5
5
  "repository": "s00d/nuxt-i18n-micro",
6
6
  "license": "MIT",
@@ -77,8 +77,8 @@
77
77
  "@i18n-micro/core": "1.3.1",
78
78
  "@i18n-micro/route-strategy": "1.1.7",
79
79
  "@i18n-micro/test-utils": "1.2.1",
80
- "@i18n-micro/types": "1.2.2",
81
- "@i18n-micro/path-strategy": "1.3.2"
80
+ "@i18n-micro/path-strategy": "1.3.2",
81
+ "@i18n-micro/types": "1.2.2"
82
82
  },
83
83
  "devDependencies": {
84
84
  "@biomejs/biome": "^2.3.14",
@@ -1 +0,0 @@
1
- {"id":"a653a17d-86f7-440a-a09c-9871b01bc761","timestamp":1779781934227,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}