intor 2.3.6 → 2.3.8
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/core/export/config/index.js +2 -0
- package/dist/core/export/index.js +8 -4
- package/dist/core/export/server/index.js +1 -4
- package/dist/core/src/config/define-intor-config.js +5 -2
- package/dist/core/src/config/resolvers/resolve-cache-options.js +2 -1
- package/dist/core/src/config/resolvers/resolve-cookie-options.js +2 -1
- package/dist/core/src/config/resolvers/resolve-routing-options.js +7 -2
- package/dist/core/src/config/validators/validate-default-locale.js +3 -1
- package/dist/core/src/config/validators/validate-supported-locales.js +8 -4
- package/dist/{react/src/server → core/src/core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +11 -11
- package/dist/core/src/{server → core}/messages/load-remote-messages/load-remote-messages.js +13 -15
- package/dist/core/src/core/utils/resolve-loader-options.js +25 -0
- package/dist/core/src/server/helpers/local-messages-from-url.js +12 -6
- package/dist/core/src/server/intor/intor.js +11 -7
- package/dist/core/src/server/messages/load-local-messages/load-local-messages.js +16 -16
- package/dist/core/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +5 -3
- package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +7 -5
- package/dist/core/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +2 -2
- package/dist/core/src/server/messages/load-messages.js +28 -22
- package/dist/core/src/server/translator/get-translator.js +10 -15
- package/dist/next/src/adapters/next/navigation/link.js +1 -12
- package/dist/next/src/adapters/next/navigation/redirect.js +4 -8
- package/dist/next/src/adapters/next/navigation/use-pathname.js +6 -4
- package/dist/next/src/adapters/next/navigation/use-router.js +4 -14
- package/dist/next/src/adapters/next/proxy/intor-proxy.js +5 -2
- package/dist/next/src/adapters/next/server/get-locale.js +4 -1
- package/dist/next/src/adapters/next/server/get-translator.js +9 -3
- package/dist/next/src/core/error/intor-error.js +9 -0
- package/dist/next/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +11 -11
- package/dist/next/src/{server → core}/messages/load-remote-messages/load-remote-messages.js +13 -15
- package/dist/next/src/core/utils/resolve-loader-options.js +25 -0
- package/dist/next/src/routing/pathname/resolve-pathname.js +4 -1
- package/dist/next/src/routing/resolve-routing.js +6 -3
- package/dist/next/src/server/messages/load-local-messages/load-local-messages.js +16 -16
- package/dist/next/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +5 -3
- package/dist/next/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +7 -5
- package/dist/next/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +2 -2
- package/dist/next/src/server/messages/load-messages.js +28 -22
- package/dist/next/src/server/translator/get-translator.js +10 -15
- package/dist/react/export/react/index.js +5 -15
- package/dist/react/src/client/helpers/get-client-locale.js +4 -1
- package/dist/react/src/client/react/helpers/use-load-messages.js +46 -0
- package/dist/{next → react}/src/client/react/navigation/use-navigation-strategy.js +11 -7
- package/dist/{next → react}/src/client/react/navigation/use-navigation-target.js +6 -3
- package/dist/react/src/client/react/provider/effects/use-locale-effects.js +14 -0
- package/dist/react/src/client/react/provider/effects/use-messages-effects.js +24 -0
- package/dist/react/src/client/react/provider/intor-provider.js +70 -0
- package/dist/react/src/client/react/provider/use-intor.js +11 -0
- package/dist/react/src/client/react/render/create-react-renderer.js +2 -2
- package/dist/react/src/client/react/translator/use-translator.js +9 -20
- package/dist/react/src/client/shared/messages/create-refetch-messages.js +61 -0
- package/dist/react/src/core/constants/prefix-placeholder.js +4 -0
- package/dist/react/src/core/error/intor-error.js +9 -0
- package/dist/{core/src/server → react/src/core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +11 -11
- package/dist/react/src/{server → core}/messages/load-remote-messages/load-remote-messages.js +13 -15
- package/dist/react/src/core/utils/is-external-destination.js +11 -0
- package/dist/react/src/core/utils/normalizers/normalize-pathname.js +43 -0
- package/dist/react/src/core/utils/pathname/get-unprefixed-pathname.js +39 -0
- package/dist/react/src/core/utils/pathname/locale-prefix-pathname.js +38 -0
- package/dist/react/src/core/utils/pathname/localize-pathname.js +36 -0
- package/dist/react/src/core/utils/pathname/standardize-pathname.js +30 -0
- package/dist/react/src/core/utils/resolve-loader-options.js +32 -0
- package/dist/{next → react}/src/routing/resolve-navigation-target.js +5 -2
- package/dist/svelte/export/svelte/index.js +6 -0
- package/dist/svelte/src/client/helpers/get-client-locale.js +27 -0
- package/dist/svelte/src/client/shared/messages/create-refetch-messages.js +61 -0
- package/dist/svelte/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
- package/dist/svelte/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
- package/dist/svelte/src/client/shared/utils/locale/set-document-locale.js +12 -0
- package/dist/svelte/src/client/svelte/runtime/create-intor.js +70 -0
- package/dist/svelte/src/client/svelte/runtime/effects/locale-effects.js +19 -0
- package/dist/svelte/src/client/svelte/runtime/effects/messages-effects.js +23 -0
- package/dist/svelte/src/core/error/intor-error.js +9 -0
- package/dist/svelte/src/core/logger/get-logger.js +39 -0
- package/dist/svelte/src/core/logger/global-logger-pool.js +8 -0
- package/dist/svelte/src/core/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +55 -0
- package/dist/svelte/src/core/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
- package/dist/svelte/src/core/messages/load-remote-messages/load-remote-messages.js +108 -0
- package/dist/svelte/src/core/messages/utils/is-valid-messages.js +36 -0
- package/dist/svelte/src/core/utils/deep-merge.js +31 -0
- package/dist/svelte/src/core/utils/normalizers/normalize-cache-key.js +45 -0
- package/dist/svelte/src/core/utils/normalizers/normalize-locale.js +59 -0
- package/dist/svelte/src/core/utils/resolve-loader-options.js +32 -0
- package/dist/types/export/index.d.ts +1 -3
- package/dist/types/export/internal/index.d.ts +1 -1
- package/dist/types/export/react/index.d.ts +4 -1
- package/dist/types/export/server/index.d.ts +1 -1
- package/dist/types/export/svelte/index.d.ts +1 -0
- package/dist/types/export/vue/index.d.ts +1 -0
- package/dist/types/src/adapters/next/navigation/link.d.ts +1 -1
- package/dist/types/src/adapters/next/navigation/redirect.d.ts +1 -1
- package/dist/types/src/adapters/next/navigation/use-router.d.ts +1 -1
- package/dist/types/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +1 -1
- package/dist/types/src/adapters/next/server/get-locale.d.ts +2 -2
- package/dist/types/src/adapters/next/server/get-translator.d.ts +9 -24
- package/dist/types/src/client/react/helpers/index.d.ts +1 -0
- package/dist/types/src/client/react/helpers/use-load-messages.d.ts +10 -0
- package/dist/types/src/client/react/index.d.ts +2 -1
- package/dist/types/src/client/react/navigation/use-navigation-strategy.d.ts +1 -1
- package/dist/types/src/client/react/navigation/use-navigation-target.d.ts +1 -1
- package/dist/types/src/client/react/provider/effects/use-locale-effects.d.ts +3 -0
- package/dist/types/src/client/react/provider/effects/use-messages-effects.d.ts +4 -0
- package/dist/types/src/client/react/{contexts/intor-provider → provider}/index.d.ts +1 -0
- package/dist/types/src/client/react/provider/intor-provider.d.ts +5 -0
- package/dist/types/src/client/react/provider/types.d.ts +22 -0
- package/dist/types/src/client/react/provider/use-intor.d.ts +2 -0
- package/dist/types/src/client/react/render/create-react-renderer.d.ts +1 -0
- package/dist/types/src/client/react/translator/create-t-rich.d.ts +1 -1
- package/dist/types/src/client/react/translator/t.d.ts +2 -2
- package/dist/types/src/client/react/translator/translator-instance.d.ts +12 -8
- package/dist/types/src/client/react/translator/use-translator.d.ts +3 -3
- package/dist/types/src/client/shared/messages/create-refetch-messages.d.ts +18 -0
- package/dist/types/src/client/shared/messages/index.d.ts +1 -0
- package/dist/types/src/client/shared/types/bootstrap.d.ts +16 -0
- package/dist/types/src/client/shared/types/index.d.ts +1 -1
- package/dist/types/src/client/shared/utils/build-cookie-string.d.ts +1 -1
- package/dist/types/src/client/shared/utils/locale/set-locale-cookie-browser.d.ts +1 -1
- package/dist/types/src/client/svelte/helpers/create-messages.d.ts +11 -0
- package/dist/types/src/client/svelte/helpers/index.d.ts +1 -0
- package/dist/types/src/client/svelte/index.d.ts +3 -0
- package/dist/types/src/client/svelte/runtime/create-intor.d.ts +13 -0
- package/dist/types/src/client/svelte/runtime/effects/locale-effects.d.ts +11 -0
- package/dist/types/src/client/svelte/runtime/effects/messages-effects.d.ts +9 -0
- package/dist/types/src/client/svelte/runtime/index.d.ts +1 -0
- package/dist/types/src/client/svelte/runtime/types.d.ts +9 -0
- package/dist/types/src/client/vue/helpers/index.d.ts +1 -0
- package/dist/types/src/client/vue/helpers/use-load-messages.d.ts +11 -0
- package/dist/types/src/client/vue/index.d.ts +4 -0
- package/dist/types/src/client/vue/provider/effects/use-locale-effects.d.ts +4 -0
- package/dist/types/src/client/vue/provider/effects/use-messages-effects.d.ts +11 -0
- package/dist/types/src/client/vue/provider/index.d.ts +2 -0
- package/dist/types/src/client/vue/provider/inject.d.ts +3 -0
- package/dist/types/src/client/vue/provider/intor-provider.d.ts +4 -0
- package/dist/types/src/client/vue/provider/types.d.ts +18 -0
- package/dist/types/src/client/vue/render/create-vue-renderer.d.ts +18 -0
- package/dist/types/src/client/vue/render/index.d.ts +2 -0
- package/dist/types/src/client/vue/render/render-rich-message-react.d.ts +13 -0
- package/dist/types/src/client/vue/render/types.d.ts +15 -0
- package/dist/types/src/client/vue/translator/create-t-rich.d.ts +16 -0
- package/dist/types/src/client/vue/translator/index.d.ts +2 -0
- package/dist/types/src/client/vue/translator/t.d.ts +38 -0
- package/dist/types/src/client/vue/translator/translator-instance.d.ts +16 -0
- package/dist/types/src/client/vue/translator/use-translator.d.ts +8 -0
- package/dist/types/src/config/constants/cache.d.ts +2 -0
- package/dist/types/src/config/constants/cookie.d.ts +2 -0
- package/dist/types/src/config/constants/index.d.ts +3 -0
- package/dist/types/src/config/constants/routing.d.ts +2 -0
- package/dist/types/src/config/define-intor-config.d.ts +1 -1
- package/dist/types/src/config/index.d.ts +2 -1
- package/dist/types/src/config/resolvers/resolve-cache-options.d.ts +1 -1
- package/dist/types/src/config/resolvers/resolve-cookie-options.d.ts +1 -1
- package/dist/types/src/config/resolvers/resolve-fallback-locales.d.ts +1 -1
- package/dist/types/src/config/resolvers/resolve-routing-options.d.ts +1 -1
- package/dist/types/src/config/types/index.d.ts +7 -0
- package/dist/types/src/config/types/{intor-config.types.d.ts → intor-config.d.ts} +28 -24
- package/dist/types/src/config/types/{loader.types.d.ts → loader.d.ts} +15 -12
- package/dist/types/src/config/types/{logger.types.d.ts → logger.d.ts} +1 -0
- package/dist/types/src/config/types/{routing.types.d.ts → routing.d.ts} +1 -1
- package/dist/types/src/config/types/translator.d.ts +7 -0
- package/dist/types/src/config/validators/validate-default-locale.d.ts +1 -1
- package/dist/types/src/config/validators/validate-supported-locales.d.ts +1 -1
- package/dist/types/src/core/index.d.ts +6 -0
- package/dist/types/src/{server/shared → core}/logger/get-logger.d.ts +3 -4
- package/dist/types/src/core/logger/index.d.ts +2 -0
- package/dist/types/src/core/messages/index.d.ts +4 -0
- package/dist/types/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +1 -1
- package/dist/types/src/core/messages/load-remote-messages/fetch-locale-messages/types.d.ts +12 -0
- package/dist/types/src/core/messages/load-remote-messages/index.d.ts +1 -0
- package/dist/types/src/{server → core}/messages/load-remote-messages/load-remote-messages.d.ts +1 -1
- package/dist/types/src/core/messages/load-remote-messages/types.d.ts +15 -0
- package/dist/types/src/{server/messages/shared → core/messages}/types.d.ts +8 -5
- package/dist/types/src/{server/messages/shared → core/messages}/utils/is-valid-messages.d.ts +1 -1
- package/dist/types/src/{shared → core}/types/generated.d.ts +1 -1
- package/dist/types/src/core/types/index.d.ts +3 -0
- package/dist/types/src/{shared → core}/types/translator-instance.d.ts +2 -6
- package/dist/types/src/{shared → core}/utils/index.d.ts +2 -0
- package/dist/types/src/{shared → core}/utils/locale/get-locale-from-pathname.d.ts +1 -1
- package/dist/types/src/{shared → core}/utils/locale/get-locale-from-query.d.ts +1 -1
- package/dist/types/src/{shared → core}/utils/pathname/get-unprefixed-pathname.d.ts +1 -1
- package/dist/types/src/{shared → core}/utils/pathname/locale-prefix-pathname.d.ts +1 -1
- package/dist/types/src/{shared → core}/utils/pathname/localize-pathname.d.ts +1 -1
- package/dist/types/src/{shared → core}/utils/pathname/standardize-pathname.d.ts +1 -1
- package/dist/types/src/core/utils/resolve-loader-options.d.ts +21 -0
- package/dist/types/src/routing/index.d.ts +2 -0
- package/dist/types/src/routing/locale/resolve-locale.d.ts +1 -1
- package/dist/types/src/routing/locale/types.d.ts +1 -1
- package/dist/types/src/routing/pathname/resolve-pathname.d.ts +1 -1
- package/dist/types/src/routing/pathname/types.d.ts +1 -1
- package/dist/types/src/routing/resolve-navigation-target.d.ts +1 -1
- package/dist/types/src/routing/resolve-routing.d.ts +1 -1
- package/dist/types/src/server/helpers/index.d.ts +1 -1
- package/dist/types/src/server/helpers/local-messages-from-url.d.ts +15 -5
- package/dist/types/src/server/index.d.ts +3 -5
- package/dist/types/src/server/intor/intor.d.ts +4 -4
- package/dist/types/src/server/intor/types.d.ts +4 -4
- package/dist/types/src/server/messages/index.d.ts +0 -2
- package/dist/types/src/server/messages/load-local-messages/index.d.ts +1 -1
- package/dist/types/src/server/messages/load-local-messages/load-local-messages.d.ts +1 -1
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +5 -7
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +1 -1
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +5 -7
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.d.ts +1 -1
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.d.ts +1 -1
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +2 -2
- package/dist/types/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +6 -8
- package/dist/types/src/server/messages/load-local-messages/types.d.ts +9 -16
- package/dist/types/src/server/messages/load-messages.d.ts +3 -3
- package/dist/types/src/server/messages/types.d.ts +11 -5
- package/dist/types/src/server/translator/get-translator.d.ts +11 -19
- package/dist/types/src/server/translator/index.d.ts +2 -1
- package/dist/types/src/server/translator/translator-instance.d.ts +8 -0
- package/dist/vue/export/vue/index.js +6 -0
- package/dist/vue/src/client/helpers/get-client-locale.js +27 -0
- package/dist/vue/src/client/shared/messages/create-refetch-messages.js +61 -0
- package/dist/vue/src/client/shared/utils/build-cookie-string.js +30 -0
- package/dist/vue/src/client/shared/utils/locale/detect-browser-locale.js +12 -0
- package/dist/vue/src/client/shared/utils/locale/get-locale-cookie-browser.js +16 -0
- package/dist/vue/src/client/shared/utils/locale/set-document-locale.js +12 -0
- package/dist/vue/src/client/shared/utils/locale/set-locale-cookie-browser.js +18 -0
- package/dist/vue/src/client/vue/helpers/use-load-messages.js +44 -0
- package/dist/vue/src/client/vue/provider/effects/use-locale-effects.js +13 -0
- package/dist/vue/src/client/vue/provider/effects/use-messages-effects.js +36 -0
- package/dist/vue/src/client/vue/provider/inject.js +11 -0
- package/dist/vue/src/client/vue/provider/intor-provider.js +79 -0
- package/dist/vue/src/client/vue/render/create-vue-renderer.js +36 -0
- package/dist/vue/src/client/vue/render/render-rich-message-react.js +19 -0
- package/dist/vue/src/client/vue/translator/create-t-rich.js +26 -0
- package/dist/vue/src/client/vue/translator/t.js +32 -0
- package/dist/vue/src/client/vue/translator/use-translator.js +28 -0
- package/dist/vue/src/core/error/intor-error.js +9 -0
- package/dist/vue/src/core/logger/get-logger.js +39 -0
- package/dist/vue/src/core/logger/global-logger-pool.js +8 -0
- package/dist/vue/src/core/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +55 -0
- package/dist/vue/src/core/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
- package/dist/vue/src/core/messages/load-remote-messages/load-remote-messages.js +108 -0
- package/dist/vue/src/core/messages/utils/is-valid-messages.js +36 -0
- package/dist/vue/src/core/utils/deep-merge.js +31 -0
- package/dist/vue/src/core/utils/normalizers/normalize-cache-key.js +45 -0
- package/dist/vue/src/core/utils/normalizers/normalize-locale.js +59 -0
- package/dist/vue/src/core/utils/resolve-loader-options.js +32 -0
- package/package.json +16 -6
- package/dist/next/src/client/react/contexts/config/context.js +0 -3
- package/dist/next/src/client/react/contexts/locale/context.js +0 -3
- package/dist/next/src/client/react/contexts/messages/context.js +0 -3
- package/dist/next/src/client/react/contexts/translator/context.js +0 -3
- package/dist/next/src/client/react/contexts/translator-runtime/context.js +0 -3
- package/dist/next/src/config/constants/cache.constants.js +0 -7
- package/dist/react/src/client/react/contexts/config/context.js +0 -5
- package/dist/react/src/client/react/contexts/config/hook.js +0 -11
- package/dist/react/src/client/react/contexts/config/provider.js +0 -14
- package/dist/react/src/client/react/contexts/intor-provider/intor-provider.js +0 -17
- package/dist/react/src/client/react/contexts/locale/context.js +0 -5
- package/dist/react/src/client/react/contexts/locale/hook.js +0 -11
- package/dist/react/src/client/react/contexts/locale/provider.js +0 -38
- package/dist/react/src/client/react/contexts/locale/utils/change-locale.js +0 -26
- package/dist/react/src/client/react/contexts/messages/context.js +0 -5
- package/dist/react/src/client/react/contexts/messages/hook.js +0 -11
- package/dist/react/src/client/react/contexts/messages/provider.js +0 -39
- package/dist/react/src/client/react/contexts/messages/utils/use-refetch-messages.js +0 -70
- package/dist/react/src/client/react/contexts/translator/context.js +0 -5
- package/dist/react/src/client/react/contexts/translator/hook.js +0 -11
- package/dist/react/src/client/react/contexts/translator/provider.js +0 -58
- package/dist/react/src/client/react/contexts/translator-runtime/context.js +0 -5
- package/dist/react/src/client/react/contexts/translator-runtime/hook.js +0 -9
- package/dist/react/src/client/react/contexts/translator-runtime/provider.js +0 -15
- package/dist/react/src/config/constants/cache.constants.js +0 -7
- package/dist/react/src/server/shared/messages/global-messages-pool.js +0 -10
- package/dist/types/src/client/react/contexts/config/context.d.ts +0 -3
- package/dist/types/src/client/react/contexts/config/hook.d.ts +0 -2
- package/dist/types/src/client/react/contexts/config/index.d.ts +0 -2
- package/dist/types/src/client/react/contexts/config/provider.d.ts +0 -2
- package/dist/types/src/client/react/contexts/config/types.d.ts +0 -11
- package/dist/types/src/client/react/contexts/index.d.ts +0 -6
- package/dist/types/src/client/react/contexts/intor-provider/intor-provider.d.ts +0 -2
- package/dist/types/src/client/react/contexts/intor-provider/types.d.ts +0 -13
- package/dist/types/src/client/react/contexts/locale/context.d.ts +0 -3
- package/dist/types/src/client/react/contexts/locale/hook.d.ts +0 -1
- package/dist/types/src/client/react/contexts/locale/index.d.ts +0 -2
- package/dist/types/src/client/react/contexts/locale/provider.d.ts +0 -3
- package/dist/types/src/client/react/contexts/locale/types.d.ts +0 -13
- package/dist/types/src/client/react/contexts/locale/utils/change-locale.d.ts +0 -20
- package/dist/types/src/client/react/contexts/messages/context.d.ts +0 -3
- package/dist/types/src/client/react/contexts/messages/hook.d.ts +0 -2
- package/dist/types/src/client/react/contexts/messages/index.d.ts +0 -2
- package/dist/types/src/client/react/contexts/messages/provider.d.ts +0 -3
- package/dist/types/src/client/react/contexts/messages/types.d.ts +0 -12
- package/dist/types/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +0 -20
- package/dist/types/src/client/react/contexts/translator/context.d.ts +0 -3
- package/dist/types/src/client/react/contexts/translator/hook.d.ts +0 -2
- package/dist/types/src/client/react/contexts/translator/index.d.ts +0 -2
- package/dist/types/src/client/react/contexts/translator/provider.d.ts +0 -2
- package/dist/types/src/client/react/contexts/translator/types.d.ts +0 -11
- package/dist/types/src/client/react/contexts/translator-runtime/context.d.ts +0 -3
- package/dist/types/src/client/react/contexts/translator-runtime/hook.d.ts +0 -2
- package/dist/types/src/client/react/contexts/translator-runtime/index.d.ts +0 -3
- package/dist/types/src/client/react/contexts/translator-runtime/provider.d.ts +0 -2
- package/dist/types/src/client/react/contexts/translator-runtime/types.d.ts +0 -13
- package/dist/types/src/client/shared/types/translator-instance.d.ts +0 -11
- package/dist/types/src/config/constants/cache.constants.d.ts +0 -2
- package/dist/types/src/config/constants/cookie.constants.d.ts +0 -2
- package/dist/types/src/config/constants/routing.constants.d.ts +0 -2
- package/dist/types/src/config/types/translator.types.d.ts +0 -7
- package/dist/types/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +0 -14
- package/dist/types/src/server/messages/load-remote-messages/index.d.ts +0 -2
- package/dist/types/src/server/messages/load-remote-messages/types.d.ts +0 -21
- package/dist/types/src/shared/types/index.d.ts +0 -2
- /package/dist/core/src/config/constants/{cache.constants.js → cache.js} +0 -0
- /package/dist/core/src/config/constants/{cookie.constants.js → cookie.js} +0 -0
- /package/dist/core/src/config/constants/{routing.constants.js → routing.js} +0 -0
- /package/dist/core/src/{shared → core}/constants/prefix-placeholder.js +0 -0
- /package/dist/core/src/{shared → core}/error/intor-error.js +0 -0
- /package/dist/core/src/{server/shared → core}/logger/get-logger.js +0 -0
- /package/dist/core/src/{server/shared → core}/logger/global-logger-pool.js +0 -0
- /package/dist/core/src/{server/shared → core}/messages/global-messages-pool.js +0 -0
- /package/dist/core/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
- /package/dist/core/src/{server/messages/shared → core/messages}/utils/is-valid-messages.js +0 -0
- /package/dist/core/src/{shared → core}/utils/deep-merge.js +0 -0
- /package/dist/core/src/{shared → core}/utils/normalizers/normalize-cache-key.js +0 -0
- /package/dist/core/src/{shared → core}/utils/normalizers/normalize-pathname.js +0 -0
- /package/dist/core/src/{shared → core}/utils/pathname/get-unprefixed-pathname.js +0 -0
- /package/dist/core/src/{shared → core}/utils/pathname/locale-prefix-pathname.js +0 -0
- /package/dist/core/src/{shared → core}/utils/pathname/localize-pathname.js +0 -0
- /package/dist/core/src/{shared → core}/utils/pathname/standardize-pathname.js +0 -0
- /package/dist/next/src/{shared → core}/constants/prefix-placeholder.js +0 -0
- /package/dist/next/src/{server/shared → core}/logger/get-logger.js +0 -0
- /package/dist/next/src/{server/shared → core}/logger/global-logger-pool.js +0 -0
- /package/dist/next/src/{server/shared → core}/messages/global-messages-pool.js +0 -0
- /package/dist/next/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
- /package/dist/next/src/{server/messages/shared → core/messages}/utils/is-valid-messages.js +0 -0
- /package/dist/next/src/{shared → core}/utils/deep-merge.js +0 -0
- /package/dist/next/src/{shared → core}/utils/is-external-destination.js +0 -0
- /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-accept-language.js +0 -0
- /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-host.js +0 -0
- /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-pathname.js +0 -0
- /package/dist/next/src/{shared → core}/utils/locale/get-locale-from-query.js +0 -0
- /package/dist/next/src/{shared → core}/utils/normalizers/normalize-cache-key.js +0 -0
- /package/dist/next/src/{shared → core}/utils/normalizers/normalize-locale.js +0 -0
- /package/dist/next/src/{shared → core}/utils/normalizers/normalize-pathname.js +0 -0
- /package/dist/next/src/{shared → core}/utils/pathname/get-unprefixed-pathname.js +0 -0
- /package/dist/next/src/{shared → core}/utils/pathname/locale-prefix-pathname.js +0 -0
- /package/dist/next/src/{shared → core}/utils/pathname/localize-pathname.js +0 -0
- /package/dist/next/src/{shared → core}/utils/pathname/standardize-pathname.js +0 -0
- /package/dist/react/src/{server/shared → core}/logger/get-logger.js +0 -0
- /package/dist/react/src/{server/shared → core}/logger/global-logger-pool.js +0 -0
- /package/dist/react/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +0 -0
- /package/dist/react/src/{server/messages/shared → core/messages}/utils/is-valid-messages.js +0 -0
- /package/dist/react/src/{shared → core}/utils/deep-merge.js +0 -0
- /package/dist/react/src/{shared → core}/utils/normalizers/normalize-cache-key.js +0 -0
- /package/dist/react/src/{shared → core}/utils/normalizers/normalize-locale.js +0 -0
- /package/dist/{next → svelte}/src/client/shared/utils/build-cookie-string.js +0 -0
- /package/dist/{next → svelte}/src/client/shared/utils/locale/set-locale-cookie-browser.js +0 -0
- /package/dist/types/src/config/types/{cache.types.d.ts → cache.d.ts} +0 -0
- /package/dist/types/src/config/types/{cookie.types.d.ts → cookie.d.ts} +0 -0
- /package/dist/types/src/{shared → core}/constants/index.d.ts +0 -0
- /package/dist/types/src/{shared → core}/constants/prefix-placeholder.d.ts +0 -0
- /package/dist/types/src/{shared → core}/error/index.d.ts +0 -0
- /package/dist/types/src/{shared → core}/error/intor-error.d.ts +0 -0
- /package/dist/types/src/{server/shared → core}/logger/global-logger-pool.d.ts +0 -0
- /package/dist/types/src/{server/shared → core}/messages/global-messages-pool.d.ts +0 -0
- /package/dist/types/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/index.d.ts +0 -0
- /package/dist/types/src/{server → core}/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.d.ts +0 -0
- /package/dist/types/src/{shared → core}/types/routing.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/deep-merge.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/is-external-destination.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/locale/get-locale-from-accept-language.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/locale/get-locale-from-host.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/locale/index.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/normalizers/index.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/normalizers/normalize-cache-key.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/normalizers/normalize-locale.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/normalizers/normalize-pathname.d.ts +0 -0
- /package/dist/types/src/{shared → core}/utils/pathname/index.d.ts +0 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
const CACHE_KEY_DELIMITER = "|";
|
|
2
|
+
const sanitize = (k) => k
|
|
3
|
+
.replaceAll(/[\u200B-\u200D\uFEFF]/g, "")
|
|
4
|
+
.replaceAll(/[\r\n]/g, "")
|
|
5
|
+
.trim();
|
|
6
|
+
/**
|
|
7
|
+
* Normalizes a value into a stable cache key string.
|
|
8
|
+
*
|
|
9
|
+
* - Supports primitive values and structured array keys.
|
|
10
|
+
* - Produces deterministic output suitable for cache identifiers.
|
|
11
|
+
*
|
|
12
|
+
* Notes:
|
|
13
|
+
* - `null`, `undefined`, or empty arrays return `null`.
|
|
14
|
+
* - Special tokens are used for boolean, null, and undefined values
|
|
15
|
+
* to preserve semantic differences.
|
|
16
|
+
*/
|
|
17
|
+
const normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
|
|
18
|
+
// Treat nullish values as "no cache key"
|
|
19
|
+
if (key === null || key === undefined)
|
|
20
|
+
return null;
|
|
21
|
+
if (Array.isArray(key)) {
|
|
22
|
+
// Empty array produces no meaningful cache key
|
|
23
|
+
if (key.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const normalized = key.map((k) => {
|
|
26
|
+
// Preserve semantic differences for special values
|
|
27
|
+
if (k === null)
|
|
28
|
+
return "__null";
|
|
29
|
+
if (k === undefined)
|
|
30
|
+
return "__undefined";
|
|
31
|
+
if (typeof k === "boolean")
|
|
32
|
+
return k ? "__true" : "__false";
|
|
33
|
+
return sanitize(String(k));
|
|
34
|
+
});
|
|
35
|
+
// Join segments into a single deterministic cache key
|
|
36
|
+
return normalized.join(delimiter);
|
|
37
|
+
}
|
|
38
|
+
// Normalize boolean primitives explicitly
|
|
39
|
+
if (typeof key === "boolean")
|
|
40
|
+
return key ? "__true" : "__false";
|
|
41
|
+
// Fallback: stringify primitive values
|
|
42
|
+
return String(key);
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
export { normalizeCacheKey };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
const toCanonical = (input) => {
|
|
2
|
+
try {
|
|
3
|
+
return Intl.getCanonicalLocales(input)[0];
|
|
4
|
+
}
|
|
5
|
+
catch {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Normalizes a locale string and resolves the best match
|
|
11
|
+
* from a list of supported locales.
|
|
12
|
+
*
|
|
13
|
+
* Resolution strategy:
|
|
14
|
+
*
|
|
15
|
+
* 1. Exact canonical match (BCP 47)
|
|
16
|
+
* 2. Base language fallback
|
|
17
|
+
* - Falls back by base language when no exact match is found
|
|
18
|
+
* (e.g. `"en"` → `"en-US"`).
|
|
19
|
+
* - Script and region subtags are ignored during this step
|
|
20
|
+
* (e.g. `"zh-Hans"` → `"zh-Hant-TW"`)
|
|
21
|
+
* - Preference is determined by the order of `supportedLocales`.
|
|
22
|
+
*
|
|
23
|
+
* Returns `undefined` if no suitable match is found.
|
|
24
|
+
*
|
|
25
|
+
* Notes:
|
|
26
|
+
* - Invalid locale inputs are ignored gracefully.
|
|
27
|
+
* - Always returns an original entry from `supportedLocales`.
|
|
28
|
+
* - Requires `Intl` locale support in the runtime.
|
|
29
|
+
*/
|
|
30
|
+
const normalizeLocale = (locale, supportedLocales = []) => {
|
|
31
|
+
if (!locale || supportedLocales.length === 0)
|
|
32
|
+
return;
|
|
33
|
+
const canonicalLocale = toCanonical(locale);
|
|
34
|
+
if (!canonicalLocale)
|
|
35
|
+
return;
|
|
36
|
+
const supportedCanonicalMap = new Map();
|
|
37
|
+
for (const l of supportedLocales) {
|
|
38
|
+
const normalized = toCanonical(l);
|
|
39
|
+
if (normalized) {
|
|
40
|
+
supportedCanonicalMap.set(normalized, l);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// 1. Exact match
|
|
44
|
+
if (supportedCanonicalMap.has(canonicalLocale)) {
|
|
45
|
+
return supportedCanonicalMap.get(canonicalLocale);
|
|
46
|
+
}
|
|
47
|
+
const baseLang = canonicalLocale.split("-")[0];
|
|
48
|
+
// 2. Match by same base language (e.g., "en" matches "en-US" or "en-GB")
|
|
49
|
+
for (const [key, original] of supportedCanonicalMap) {
|
|
50
|
+
const supportedBase = key.split("-")[0];
|
|
51
|
+
if (supportedBase === baseLang) {
|
|
52
|
+
return original;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
// 3. No match
|
|
56
|
+
return;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export { normalizeLocale };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve the effective message loader for a given runtime.
|
|
3
|
+
*
|
|
4
|
+
* Loader resolution follows an inheritance-based priority model:
|
|
5
|
+
*
|
|
6
|
+
* - client runtime:
|
|
7
|
+
* client.loader → server.loader → root loader
|
|
8
|
+
*
|
|
9
|
+
* - server runtime:
|
|
10
|
+
* server.loader → root loader
|
|
11
|
+
*
|
|
12
|
+
* This allows the client runtime to inherit server behavior
|
|
13
|
+
* when no explicit client loader is provided.
|
|
14
|
+
*
|
|
15
|
+
* Notes:
|
|
16
|
+
* - Static `messages` are intentionally NOT handled here.
|
|
17
|
+
* - Returning `undefined` indicates that no loader is enabled
|
|
18
|
+
* for the given runtime.
|
|
19
|
+
*/
|
|
20
|
+
const resolveLoaderOptions = (config, runtime) => {
|
|
21
|
+
// --- runtime: client ---
|
|
22
|
+
{
|
|
23
|
+
const client = config.client?.loader;
|
|
24
|
+
if (client) {
|
|
25
|
+
// Client loader is always remote by design
|
|
26
|
+
return { type: "remote", ...client };
|
|
27
|
+
}
|
|
28
|
+
return config.server?.loader ?? config.loader;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export { resolveLoaderOptions };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "intor",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.8",
|
|
4
4
|
"description": "A modular and extensible i18n core designed for TypeScript and JavaScript projects. Intor enables custom translation logic with support for both frontend and backend environments, featuring runtime configuration, caching, adapters, and message loaders.",
|
|
5
5
|
"author": "Yiming Liao",
|
|
6
6
|
"homepage": "https://github.com/yiming-liao/intor#readme",
|
|
@@ -64,6 +64,14 @@
|
|
|
64
64
|
"./next/server": {
|
|
65
65
|
"import": "./dist/next/export/next/server/index.js",
|
|
66
66
|
"types": "./dist/types/export/next/server/index.d.ts"
|
|
67
|
+
},
|
|
68
|
+
"./vue": {
|
|
69
|
+
"import": "./dist/vue/export/vue/index.js",
|
|
70
|
+
"types": "./dist/types/export/vue/index.d.ts"
|
|
71
|
+
},
|
|
72
|
+
"./svelte": {
|
|
73
|
+
"import": "./dist/svelte/export/svelte/index.js",
|
|
74
|
+
"types": "./dist/types/export/svelte/index.d.ts"
|
|
67
75
|
}
|
|
68
76
|
},
|
|
69
77
|
"main": "./dist/export/index.js",
|
|
@@ -89,15 +97,15 @@
|
|
|
89
97
|
"examples:html": "vite --config examples/html/vite.config.ts"
|
|
90
98
|
},
|
|
91
99
|
"dependencies": {
|
|
92
|
-
"intor-translator": "1.3.
|
|
100
|
+
"intor-translator": "1.3.2",
|
|
93
101
|
"keyv": "5.5.5",
|
|
94
102
|
"logry": "2.1.5",
|
|
95
103
|
"p-limit": "7.2.0"
|
|
96
104
|
},
|
|
97
105
|
"devDependencies": {
|
|
98
|
-
"@rollup/plugin-alias": "
|
|
106
|
+
"@rollup/plugin-alias": "6.0.0",
|
|
99
107
|
"@rollup/plugin-typescript": "12.3.0",
|
|
100
|
-
"@rollup/pluginutils": "
|
|
108
|
+
"@rollup/pluginutils": "5.3.0",
|
|
101
109
|
"@testing-library/dom": "10.4.1",
|
|
102
110
|
"@testing-library/jest-dom": "6.9.1",
|
|
103
111
|
"@testing-library/react": "16.3.1",
|
|
@@ -118,7 +126,7 @@
|
|
|
118
126
|
"eslint-plugin-unused-imports": "4.1.4",
|
|
119
127
|
"jsdom": "27.3.0",
|
|
120
128
|
"knip": "5.69.1",
|
|
121
|
-
"magic-string": "
|
|
129
|
+
"magic-string": "0.30.21",
|
|
122
130
|
"next": "16.0.3",
|
|
123
131
|
"prettier": "3.6.2",
|
|
124
132
|
"react": "19.0.0",
|
|
@@ -126,12 +134,14 @@
|
|
|
126
134
|
"remark": "15.0.1",
|
|
127
135
|
"remark-gfm": "4.0.1",
|
|
128
136
|
"rollup": "4.53.3",
|
|
137
|
+
"svelte": "5.46.1",
|
|
129
138
|
"tsc-alias": "1.8.16",
|
|
130
139
|
"tsd": "0.33.0",
|
|
131
140
|
"typescript": "5.8.3",
|
|
132
141
|
"typescript-eslint": "8.32.1",
|
|
133
142
|
"vite": "7.3.0",
|
|
134
143
|
"vite-tsconfig-paths": "6.0.3",
|
|
135
|
-
"vitest": "4.0.16"
|
|
144
|
+
"vitest": "4.0.16",
|
|
145
|
+
"vue": "3.5.26"
|
|
136
146
|
}
|
|
137
147
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { ConfigContext } from './context.js';
|
|
3
|
-
|
|
4
|
-
function useConfig() {
|
|
5
|
-
const context = React.useContext(ConfigContext);
|
|
6
|
-
if (!context)
|
|
7
|
-
throw new Error("useConfig must be used within ConfigProvider");
|
|
8
|
-
return context;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export { useConfig };
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import { ConfigContext } from './context.js';
|
|
5
|
-
|
|
6
|
-
function ConfigProvider({ value: { config }, children, }) {
|
|
7
|
-
// context value
|
|
8
|
-
const value = React.useMemo(() => ({
|
|
9
|
-
config,
|
|
10
|
-
}), [config]);
|
|
11
|
-
return (jsx(ConfigContext.Provider, { value: value, children: children }));
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export { ConfigProvider };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { ConfigProvider } from '../config/provider.js';
|
|
4
|
-
import 'react';
|
|
5
|
-
import '../config/context.js';
|
|
6
|
-
import { LocaleProvider } from '../locale/provider.js';
|
|
7
|
-
import '../locale/context.js';
|
|
8
|
-
import { MessagesProvider } from '../messages/provider.js';
|
|
9
|
-
import '../messages/context.js';
|
|
10
|
-
import { TranslatorProvider } from '../translator/provider.js';
|
|
11
|
-
import '../translator/context.js';
|
|
12
|
-
|
|
13
|
-
const IntorProvider = ({ value: { config, initialLocale, messages = config.messages, onLocaleChange, isLoading, }, children, }) => {
|
|
14
|
-
return (jsx(ConfigProvider, { value: { config }, children: jsx(LocaleProvider, { value: { initialLocale, onLocaleChange }, children: jsx(MessagesProvider, { value: { messages }, children: jsx(TranslatorProvider, { value: { isLoading }, children: children }) }) }) }));
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
export { IntorProvider };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { LocaleContext } from './context.js';
|
|
3
|
-
|
|
4
|
-
function useLocale() {
|
|
5
|
-
const context = React.useContext(LocaleContext);
|
|
6
|
-
if (!context)
|
|
7
|
-
throw new Error("useLocale must be used within a LocaleProvider");
|
|
8
|
-
return context;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export { useLocale };
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import '../config/context.js';
|
|
5
|
-
import { useConfig } from '../config/hook.js';
|
|
6
|
-
import { setLocaleCookieBrowser } from '../../../shared/utils/locale/set-locale-cookie-browser.js';
|
|
7
|
-
import { setDocumentLocale } from '../../../shared/utils/locale/set-document-locale.js';
|
|
8
|
-
import { LocaleContext } from './context.js';
|
|
9
|
-
import { changeLocale } from './utils/change-locale.js';
|
|
10
|
-
|
|
11
|
-
function LocaleProvider({ value: { initialLocale, onLocaleChange }, children, }) {
|
|
12
|
-
const { config } = useConfig();
|
|
13
|
-
const [locale, setLocaleState] = React.useState(initialLocale);
|
|
14
|
-
// Request a locale change.
|
|
15
|
-
const setLocale = React.useCallback(async (newLocale) => {
|
|
16
|
-
changeLocale({
|
|
17
|
-
locale,
|
|
18
|
-
newLocale,
|
|
19
|
-
fullReloadRequired: config.loader?.type === "local",
|
|
20
|
-
setLocaleState,
|
|
21
|
-
});
|
|
22
|
-
// Notify external listener (fire-and-forget)
|
|
23
|
-
onLocaleChange?.(newLocale);
|
|
24
|
-
}, [locale, config.loader, onLocaleChange]);
|
|
25
|
-
// Sync locale-related browser side effects.
|
|
26
|
-
React.useEffect(() => {
|
|
27
|
-
setLocaleCookieBrowser(config.cookie, locale);
|
|
28
|
-
setDocumentLocale(locale);
|
|
29
|
-
}, [config.cookie, locale]);
|
|
30
|
-
// context value
|
|
31
|
-
const value = React.useMemo(() => ({
|
|
32
|
-
locale,
|
|
33
|
-
setLocale,
|
|
34
|
-
}), [locale, setLocale]);
|
|
35
|
-
return (jsx(LocaleContext.Provider, { value: value, children: children }));
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export { LocaleProvider };
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Requests a locale change on the client.
|
|
3
|
-
*
|
|
4
|
-
* - This function updates the locale state only.
|
|
5
|
-
* - Side effects such as cookie persistence, `<html lang>` updates,
|
|
6
|
-
* or message refetching are handled by higher-level providers.
|
|
7
|
-
*
|
|
8
|
-
* Notes:
|
|
9
|
-
* - When using a `local` loader, client-side locale switching
|
|
10
|
-
* requires a full page reload to load new message bundles.
|
|
11
|
-
*/
|
|
12
|
-
const changeLocale = ({ locale, newLocale, fullReloadRequired, setLocaleState, }) => {
|
|
13
|
-
// No-op when locale does not change
|
|
14
|
-
if (newLocale === locale)
|
|
15
|
-
return;
|
|
16
|
-
// Informational warning when a full reload is required
|
|
17
|
-
if (fullReloadRequired) {
|
|
18
|
-
console.warn(`[Intor] Locale change requested while using a "local" loader. ` +
|
|
19
|
-
`Client-side navigation alone will not load new messages. ` +
|
|
20
|
-
`Use the provided <Link> wrapper or trigger a full page reload.`);
|
|
21
|
-
}
|
|
22
|
-
// Update locale state
|
|
23
|
-
setLocaleState(newLocale);
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export { changeLocale };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { MessagesContext } from './context.js';
|
|
3
|
-
|
|
4
|
-
function useMessages() {
|
|
5
|
-
const context = React.useContext(MessagesContext);
|
|
6
|
-
if (!context)
|
|
7
|
-
throw new Error("useMessages must be used within a MessagesProvider");
|
|
8
|
-
return context;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export { useMessages };
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import '../config/context.js';
|
|
5
|
-
import { useConfig } from '../config/hook.js';
|
|
6
|
-
import '../locale/context.js';
|
|
7
|
-
import { useLocale } from '../locale/hook.js';
|
|
8
|
-
import { useRefetchMessages } from './utils/use-refetch-messages.js';
|
|
9
|
-
import { MessagesContext } from './context.js';
|
|
10
|
-
|
|
11
|
-
function MessagesProvider({ value: { messages = {} }, children, }) {
|
|
12
|
-
const { config } = useConfig();
|
|
13
|
-
const { locale } = useLocale();
|
|
14
|
-
const [runtimeMessages, setRuntimeMessages] = React.useState(null);
|
|
15
|
-
const [isLoadingMessages, setIsLoadingMessages] = React.useState(false);
|
|
16
|
-
const isInitialRenderRef = React.useRef(true);
|
|
17
|
-
// Prepares message refetch function.
|
|
18
|
-
const { refetchMessages } = useRefetchMessages({
|
|
19
|
-
config,
|
|
20
|
-
setRuntimeMessages,
|
|
21
|
-
setIsLoadingMessages,
|
|
22
|
-
});
|
|
23
|
-
// Refetch messages when locale changes (except initial render).
|
|
24
|
-
React.useEffect(() => {
|
|
25
|
-
if (isInitialRenderRef.current) {
|
|
26
|
-
isInitialRenderRef.current = false;
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
refetchMessages(locale);
|
|
30
|
-
}, [refetchMessages, locale]);
|
|
31
|
-
// context value
|
|
32
|
-
const value = React.useMemo(() => ({
|
|
33
|
-
messages: runtimeMessages || messages,
|
|
34
|
-
isLoading: isLoadingMessages,
|
|
35
|
-
}), [runtimeMessages, messages, isLoadingMessages]);
|
|
36
|
-
return (jsx(MessagesContext.Provider, { value: value, children: children }));
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export { MessagesProvider };
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { loadRemoteMessages } from '../../../../../server/messages/load-remote-messages/load-remote-messages.js';
|
|
3
|
-
import { deepMerge } from '../../../../../shared/utils/deep-merge.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Refetch remote locale messages.
|
|
7
|
-
*
|
|
8
|
-
* This hook ensures that:
|
|
9
|
-
* - Only one remote request is active at a time
|
|
10
|
-
* - In-flight requests are aborted when a new locale is requested
|
|
11
|
-
* - State updates are applied only for the latest request
|
|
12
|
-
*/
|
|
13
|
-
const useRefetchMessages = ({ config, setRuntimeMessages, setIsLoadingMessages, }) => {
|
|
14
|
-
const { loader } = config;
|
|
15
|
-
// Holds the AbortController for the currently active remote request
|
|
16
|
-
const abortControllerRef = React.useRef(null);
|
|
17
|
-
// Refetch messages
|
|
18
|
-
const refetchMessages = React.useCallback(async (newLocale) => {
|
|
19
|
-
if (!loader || loader.type !== "remote")
|
|
20
|
-
return;
|
|
21
|
-
// Abort any in-flight request
|
|
22
|
-
abortControllerRef.current?.abort();
|
|
23
|
-
const controller = new AbortController();
|
|
24
|
-
abortControllerRef.current = controller;
|
|
25
|
-
setIsLoadingMessages(true);
|
|
26
|
-
try {
|
|
27
|
-
const loadedMessages = await loadRemoteMessages({
|
|
28
|
-
locale: newLocale,
|
|
29
|
-
fallbackLocales: config.fallbackLocales[newLocale] || [],
|
|
30
|
-
namespaces: loader.namespaces,
|
|
31
|
-
rootDir: loader.rootDir,
|
|
32
|
-
remoteUrl: loader.remoteUrl,
|
|
33
|
-
remoteHeaders: loader.remoteHeaders,
|
|
34
|
-
extraOptions: {
|
|
35
|
-
cacheOptions: config.cache,
|
|
36
|
-
loggerOptions: { id: config.id, ...config.logger },
|
|
37
|
-
},
|
|
38
|
-
signal: controller.signal,
|
|
39
|
-
});
|
|
40
|
-
// Update state only if this request was not aborted
|
|
41
|
-
if (!controller.signal.aborted) {
|
|
42
|
-
setRuntimeMessages(deepMerge(config.messages, loadedMessages));
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
finally {
|
|
46
|
-
// Clear loading state only if this is still the active request
|
|
47
|
-
if (abortControllerRef.current === controller) {
|
|
48
|
-
setIsLoadingMessages(false);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}, [
|
|
52
|
-
loader,
|
|
53
|
-
config.id,
|
|
54
|
-
config.messages,
|
|
55
|
-
config.fallbackLocales,
|
|
56
|
-
config.logger,
|
|
57
|
-
config.cache,
|
|
58
|
-
setRuntimeMessages,
|
|
59
|
-
setIsLoadingMessages,
|
|
60
|
-
]);
|
|
61
|
-
// Abort in-flight request on unmount
|
|
62
|
-
React.useEffect(() => {
|
|
63
|
-
return () => {
|
|
64
|
-
abortControllerRef.current?.abort();
|
|
65
|
-
};
|
|
66
|
-
}, []);
|
|
67
|
-
return { refetchMessages };
|
|
68
|
-
};
|
|
69
|
-
|
|
70
|
-
export { useRefetchMessages };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import * as React from 'react';
|
|
2
|
-
import { TranslatorContext } from './context.js';
|
|
3
|
-
|
|
4
|
-
function useTranslator() {
|
|
5
|
-
const context = React.useContext(TranslatorContext);
|
|
6
|
-
if (!context)
|
|
7
|
-
throw new Error("useTranslator must be used within IntorTranslatorProvider");
|
|
8
|
-
return context;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export { useTranslator };
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import { Translator } from 'intor-translator';
|
|
4
|
-
import * as React from 'react';
|
|
5
|
-
import '../config/context.js';
|
|
6
|
-
import { useConfig } from '../config/hook.js';
|
|
7
|
-
import '../locale/context.js';
|
|
8
|
-
import { useLocale } from '../locale/hook.js';
|
|
9
|
-
import '../../../../config/constants/cache.constants.js';
|
|
10
|
-
import 'logry';
|
|
11
|
-
import 'keyv';
|
|
12
|
-
import '../messages/context.js';
|
|
13
|
-
import { useMessages } from '../messages/hook.js';
|
|
14
|
-
import '../translator-runtime/context.js';
|
|
15
|
-
import { useTranslatorRuntime } from '../translator-runtime/hook.js';
|
|
16
|
-
import { TranslatorContext } from './context.js';
|
|
17
|
-
|
|
18
|
-
function TranslatorProvider({ value: { isLoading: externalIsLoading } = {}, children, }) {
|
|
19
|
-
const { config } = useConfig();
|
|
20
|
-
const { messages, isLoading: internalIsLoading } = useMessages();
|
|
21
|
-
const { locale } = useLocale();
|
|
22
|
-
const runtime = useTranslatorRuntime();
|
|
23
|
-
// Treat locale changes as a loading boundary to avoid transient missing states.
|
|
24
|
-
// isLoading defaults to false, but is eagerly set to true on locale switches.
|
|
25
|
-
const prevLocaleRef = React.useRef(locale);
|
|
26
|
-
// eslint-disable-next-line react-hooks/refs -- intentional render-time read to detect locale switches
|
|
27
|
-
const localeChanged = prevLocaleRef.current !== locale;
|
|
28
|
-
React.useEffect(() => {
|
|
29
|
-
prevLocaleRef.current = locale;
|
|
30
|
-
}, [locale]);
|
|
31
|
-
const isLoading = !!externalIsLoading || internalIsLoading || localeChanged;
|
|
32
|
-
// context value
|
|
33
|
-
const value = React.useMemo(() => {
|
|
34
|
-
const translator = new Translator({
|
|
35
|
-
messages,
|
|
36
|
-
locale,
|
|
37
|
-
isLoading,
|
|
38
|
-
fallbackLocales: config.fallbackLocales,
|
|
39
|
-
loadingMessage: config.translator?.loadingMessage,
|
|
40
|
-
placeholder: config.translator?.placeholder,
|
|
41
|
-
handlers: runtime?.handlers,
|
|
42
|
-
plugins: runtime?.plugins,
|
|
43
|
-
});
|
|
44
|
-
return { translator };
|
|
45
|
-
}, [
|
|
46
|
-
messages,
|
|
47
|
-
locale,
|
|
48
|
-
isLoading,
|
|
49
|
-
config.fallbackLocales,
|
|
50
|
-
config.translator?.loadingMessage,
|
|
51
|
-
config.translator?.placeholder,
|
|
52
|
-
runtime?.handlers,
|
|
53
|
-
runtime?.plugins,
|
|
54
|
-
]);
|
|
55
|
-
return (jsx(TranslatorContext.Provider, { value: value, children: children }));
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export { TranslatorProvider };
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { jsx } from 'react/jsx-runtime';
|
|
3
|
-
import * as React from 'react';
|
|
4
|
-
import { TranslatorRuntimeContext } from './context.js';
|
|
5
|
-
|
|
6
|
-
const TranslatorRuntimeProvider = ({ value: { handlers, plugins }, children, }) => {
|
|
7
|
-
// context value
|
|
8
|
-
const value = React.useMemo(() => ({
|
|
9
|
-
handlers,
|
|
10
|
-
plugins,
|
|
11
|
-
}), [handlers, plugins]);
|
|
12
|
-
return (jsx(TranslatorRuntimeContext.Provider, { value: value, children: children }));
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export { TranslatorRuntimeProvider };
|