From 34d024ee55b8826382fd8fa0957dd51389545918 Mon Sep 17 00:00:00 2001 From: lilnasy <69170106+lilnasy@users.noreply.github.com> Date: Fri, 26 Jan 2024 17:19:06 +0000 Subject: [PATCH 1/5] fix(i18n): use import.meta.env to deliver config to virtual module --- packages/astro/src/i18n/vite-plugin-i18n.ts | 29 ++++++--------------- packages/astro/src/virtual-modules/i18n.ts | 6 ++--- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/packages/astro/src/i18n/vite-plugin-i18n.ts b/packages/astro/src/i18n/vite-plugin-i18n.ts index 856ce46a7415..31fb957c3ac6 100644 --- a/packages/astro/src/i18n/vite-plugin-i18n.ts +++ b/packages/astro/src/i18n/vite-plugin-i18n.ts @@ -4,8 +4,6 @@ import { AstroError } from '../core/errors/errors.js'; import { AstroErrorData } from '../core/errors/index.js'; const virtualModuleId = 'astro:i18n'; -const configId = 'astro-internal:i18n-config'; -const resolvedConfigId = `\0${configId}`; type AstroInternationalization = { settings: AstroSettings; @@ -29,28 +27,17 @@ export default function astroInternationalization({ return { name: 'astro:i18n', enforce: 'pre', - async resolveId(id) { + config(config) { + const { defaultLocale, locales, routing, fallback } = i18n!; + const i18nConfig: I18nInternalConfig = { base, format, site, trailingSlash, defaultLocale, locales, routing, fallback }; + config.define ??= {} + config.define["import.meta.env._ASTRO_INTERNAL_I18N_CONFIG"] = JSON.stringify(i18nConfig); + }, + resolveId(id) { if (id === virtualModuleId) { if (i18n === undefined) throw new AstroError(AstroErrorData.i18nNotEnabled); return this.resolve('astro/virtual-modules/i18n.js'); } - if (id === configId) return resolvedConfigId; - }, - load(id) { - if (id === resolvedConfigId) { - const { defaultLocale, locales, routing, fallback } = i18n!; - const config: I18nInternalConfig = { - base, - format, - site, - trailingSlash, - defaultLocale, - locales, - routing, - fallback, - }; - return `export default ${JSON.stringify(config)};`; - } - }, + } }; } diff --git a/packages/astro/src/virtual-modules/i18n.ts b/packages/astro/src/virtual-modules/i18n.ts index d9d470431117..7fdcc0acd36f 100644 --- a/packages/astro/src/virtual-modules/i18n.ts +++ b/packages/astro/src/virtual-modules/i18n.ts @@ -1,10 +1,8 @@ import * as I18nInternals from '../i18n/index.js'; import type { I18nInternalConfig } from '../i18n/vite-plugin-i18n.js'; export { normalizeTheLocale, toCodes, toPaths } from '../i18n/index.js'; -// @ts-expect-error -import config from 'astro-internal:i18n-config'; -const { trailingSlash, format, site, defaultLocale, locales, routing } = - config as I18nInternalConfig; + +const { trailingSlash, format, site, defaultLocale, locales, routing } = import.meta.env._ASTRO_INTERNAL_I18N_CONFIG as I18nInternalConfig; const base = import.meta.env.BASE_URL; export type GetLocaleOptions = I18nInternals.GetLocaleOptions; From 60c0b1e34932c85c51cb15de673f7fa36706e3a9 Mon Sep 17 00:00:00 2001 From: lilnasy <69170106+lilnasy@users.noreply.github.com> Date: Fri, 26 Jan 2024 17:21:47 +0000 Subject: [PATCH 2/5] add changeset --- .changeset/silent-buckets-retire.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silent-buckets-retire.md diff --git a/.changeset/silent-buckets-retire.md b/.changeset/silent-buckets-retire.md new file mode 100644 index 000000000000..f682c97d786f --- /dev/null +++ b/.changeset/silent-buckets-retire.md @@ -0,0 +1,5 @@ +--- +"astro": patch +--- + +Fixes an issue where `astro:i18n` could not be used in framework components. From f2b0ba17767ca4debd8ae22dd0d85ec2007ec2a9 Mon Sep 17 00:00:00 2001 From: lilnasy <69170106+lilnasy@users.noreply.github.com> Date: Fri, 26 Jan 2024 17:32:03 +0000 Subject: [PATCH 3/5] prevent destructing i18n config unless enabled --- packages/astro/src/i18n/vite-plugin-i18n.ts | 8 ++++---- packages/astro/src/virtual-modules/i18n.ts | 3 ++- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/astro/src/i18n/vite-plugin-i18n.ts b/packages/astro/src/i18n/vite-plugin-i18n.ts index 31fb957c3ac6..4c96007fcbae 100644 --- a/packages/astro/src/i18n/vite-plugin-i18n.ts +++ b/packages/astro/src/i18n/vite-plugin-i18n.ts @@ -11,8 +11,9 @@ type AstroInternationalization = { export interface I18nInternalConfig extends Pick, - NonNullable, - Pick {} + Pick { + i18n: AstroConfig['i18n']; + } export default function astroInternationalization({ settings, @@ -28,8 +29,7 @@ export default function astroInternationalization({ name: 'astro:i18n', enforce: 'pre', config(config) { - const { defaultLocale, locales, routing, fallback } = i18n!; - const i18nConfig: I18nInternalConfig = { base, format, site, trailingSlash, defaultLocale, locales, routing, fallback }; + const i18nConfig: I18nInternalConfig = { base, format, site, trailingSlash, i18n }; config.define ??= {} config.define["import.meta.env._ASTRO_INTERNAL_I18N_CONFIG"] = JSON.stringify(i18nConfig); }, diff --git a/packages/astro/src/virtual-modules/i18n.ts b/packages/astro/src/virtual-modules/i18n.ts index 7fdcc0acd36f..1cb23a962e52 100644 --- a/packages/astro/src/virtual-modules/i18n.ts +++ b/packages/astro/src/virtual-modules/i18n.ts @@ -2,7 +2,8 @@ import * as I18nInternals from '../i18n/index.js'; import type { I18nInternalConfig } from '../i18n/vite-plugin-i18n.js'; export { normalizeTheLocale, toCodes, toPaths } from '../i18n/index.js'; -const { trailingSlash, format, site, defaultLocale, locales, routing } = import.meta.env._ASTRO_INTERNAL_I18N_CONFIG as I18nInternalConfig; +const { trailingSlash, format, site, i18n } = import.meta.env._ASTRO_INTERNAL_I18N_CONFIG as I18nInternalConfig; +const { defaultLocale, locales, routing } = i18n!; const base = import.meta.env.BASE_URL; export type GetLocaleOptions = I18nInternals.GetLocaleOptions; From 0666a05ddc6304418e5b15f914f17f9fa35a72d3 Mon Sep 17 00:00:00 2001 From: lilnasy <69170106+lilnasy@users.noreply.github.com> Date: Sat, 27 Jan 2024 16:26:04 +0000 Subject: [PATCH 4/5] use defined variable instead --- packages/astro/src/i18n/vite-plugin-i18n.ts | 2 +- packages/astro/src/virtual-modules/i18n.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/astro/src/i18n/vite-plugin-i18n.ts b/packages/astro/src/i18n/vite-plugin-i18n.ts index 4c96007fcbae..c1272f1e47d5 100644 --- a/packages/astro/src/i18n/vite-plugin-i18n.ts +++ b/packages/astro/src/i18n/vite-plugin-i18n.ts @@ -31,7 +31,7 @@ export default function astroInternationalization({ config(config) { const i18nConfig: I18nInternalConfig = { base, format, site, trailingSlash, i18n }; config.define ??= {} - config.define["import.meta.env._ASTRO_INTERNAL_I18N_CONFIG"] = JSON.stringify(i18nConfig); + config.define.__ASTRO_INTERNAL_I18N_CONFIG__ = JSON.stringify(i18nConfig); }, resolveId(id) { if (id === virtualModuleId) { diff --git a/packages/astro/src/virtual-modules/i18n.ts b/packages/astro/src/virtual-modules/i18n.ts index 1cb23a962e52..aff49a492dc0 100644 --- a/packages/astro/src/virtual-modules/i18n.ts +++ b/packages/astro/src/virtual-modules/i18n.ts @@ -2,7 +2,8 @@ import * as I18nInternals from '../i18n/index.js'; import type { I18nInternalConfig } from '../i18n/vite-plugin-i18n.js'; export { normalizeTheLocale, toCodes, toPaths } from '../i18n/index.js'; -const { trailingSlash, format, site, i18n } = import.meta.env._ASTRO_INTERNAL_I18N_CONFIG as I18nInternalConfig; +// @ts-expect-error +const { trailingSlash, format, site, i18n } = __ASTRO_INTERNAL_I18N_CONFIG__ as I18nInternalConfig; const { defaultLocale, locales, routing } = i18n!; const base = import.meta.env.BASE_URL; From 288128fad86791c064c5c909ef0e89265f0148da Mon Sep 17 00:00:00 2001 From: Arsh <69170106+lilnasy@users.noreply.github.com> Date: Mon, 29 Jan 2024 20:57:16 +0530 Subject: [PATCH 5/5] Update packages/astro/src/i18n/vite-plugin-i18n.ts Co-authored-by: Bjorn Lu --- packages/astro/src/i18n/vite-plugin-i18n.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/astro/src/i18n/vite-plugin-i18n.ts b/packages/astro/src/i18n/vite-plugin-i18n.ts index c1272f1e47d5..241f218f5a02 100644 --- a/packages/astro/src/i18n/vite-plugin-i18n.ts +++ b/packages/astro/src/i18n/vite-plugin-i18n.ts @@ -30,8 +30,11 @@ export default function astroInternationalization({ enforce: 'pre', config(config) { const i18nConfig: I18nInternalConfig = { base, format, site, trailingSlash, i18n }; - config.define ??= {} - config.define.__ASTRO_INTERNAL_I18N_CONFIG__ = JSON.stringify(i18nConfig); + return { + define: { + __ASTRO_INTERNAL_I18N_CONFIG__: JSON.stringify(i18nConfig) + } + } }, resolveId(id) { if (id === virtualModuleId) {