@sebbro/paraglide-lite 0.1.0
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/LICENSE +21 -0
- package/README.md +67 -0
- package/bin/run.js +4 -0
- package/dist/bundler-plugins/esbuild.d.ts +1 -0
- package/dist/bundler-plugins/esbuild.d.ts.map +1 -0
- package/dist/bundler-plugins/esbuild.js +4 -0
- package/dist/bundler-plugins/esbuild.js.map +1 -0
- package/dist/bundler-plugins/index.d.ts +6 -0
- package/dist/bundler-plugins/index.d.ts.map +1 -0
- package/dist/bundler-plugins/index.js +7 -0
- package/dist/bundler-plugins/index.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.d.ts +19 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.js +85 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.d.ts +2 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.js +53 -0
- package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/ssr.d.ts +31 -0
- package/dist/bundler-plugins/lazy-modules/ssr.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/ssr.js +42 -0
- package/dist/bundler-plugins/lazy-modules/ssr.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/ssr.test.d.ts +2 -0
- package/dist/bundler-plugins/lazy-modules/ssr.test.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/ssr.test.js +48 -0
- package/dist/bundler-plugins/lazy-modules/ssr.test.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/virtual-ids.d.ts +7 -0
- package/dist/bundler-plugins/lazy-modules/virtual-ids.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/virtual-ids.js +30 -0
- package/dist/bundler-plugins/lazy-modules/virtual-ids.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/virtual.d.ts +86 -0
- package/dist/bundler-plugins/lazy-modules/virtual.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/virtual.js +2 -0
- package/dist/bundler-plugins/lazy-modules/virtual.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.d.ts +18 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.js +328 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.js.map +1 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.test.d.ts +2 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.test.d.ts.map +1 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.test.js +45 -0
- package/dist/bundler-plugins/lazy-modules/vite-plugin.test.js.map +1 -0
- package/dist/bundler-plugins/per-locale-build/constants.d.ts +2 -0
- package/dist/bundler-plugins/per-locale-build/constants.d.ts.map +1 -0
- package/dist/bundler-plugins/per-locale-build/constants.js +3 -0
- package/dist/bundler-plugins/per-locale-build/constants.js.map +1 -0
- package/dist/bundler-plugins/per-locale-build/index.d.ts +6 -0
- package/dist/bundler-plugins/per-locale-build/index.d.ts.map +1 -0
- package/dist/bundler-plugins/per-locale-build/index.js +43 -0
- package/dist/bundler-plugins/per-locale-build/index.js.map +1 -0
- package/dist/bundler-plugins/per-locale-build/locale-id.d.ts +8 -0
- package/dist/bundler-plugins/per-locale-build/locale-id.d.ts.map +1 -0
- package/dist/bundler-plugins/per-locale-build/locale-id.js +13 -0
- package/dist/bundler-plugins/per-locale-build/locale-id.js.map +1 -0
- package/dist/bundler-plugins/per-locale-build/types.d.ts +4 -0
- package/dist/bundler-plugins/per-locale-build/types.d.ts.map +1 -0
- package/dist/bundler-plugins/per-locale-build/types.js +2 -0
- package/dist/bundler-plugins/per-locale-build/types.js.map +1 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.d.ts +51 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.d.ts.map +1 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.js +250 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.js.map +1 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.test.d.ts +1 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.test.d.ts.map +1 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.test.js +250 -0
- package/dist/bundler-plugins/per-locale-build/vite-environments.test.js.map +1 -0
- package/dist/bundler-plugins/plugin-core.d.ts +74 -0
- package/dist/bundler-plugins/plugin-core.d.ts.map +1 -0
- package/dist/bundler-plugins/plugin-core.js +292 -0
- package/dist/bundler-plugins/plugin-core.js.map +1 -0
- package/dist/bundler-plugins/rolldown.d.ts +10 -0
- package/dist/bundler-plugins/rolldown.d.ts.map +1 -0
- package/dist/bundler-plugins/rolldown.js +36 -0
- package/dist/bundler-plugins/rolldown.js.map +1 -0
- package/dist/bundler-plugins/rolldown.test.d.ts +1 -0
- package/dist/bundler-plugins/rolldown.test.d.ts.map +1 -0
- package/dist/bundler-plugins/rolldown.test.js +72 -0
- package/dist/bundler-plugins/rolldown.test.js.map +1 -0
- package/dist/bundler-plugins/rollup.d.ts +1 -0
- package/dist/bundler-plugins/rollup.d.ts.map +1 -0
- package/dist/bundler-plugins/rollup.js +4 -0
- package/dist/bundler-plugins/rollup.js.map +1 -0
- package/dist/bundler-plugins/rspack.d.ts +1 -0
- package/dist/bundler-plugins/rspack.d.ts.map +1 -0
- package/dist/bundler-plugins/rspack.js +4 -0
- package/dist/bundler-plugins/rspack.js.map +1 -0
- package/dist/bundler-plugins/unplugin.d.ts +3 -0
- package/dist/bundler-plugins/unplugin.d.ts.map +1 -0
- package/dist/bundler-plugins/unplugin.js +62 -0
- package/dist/bundler-plugins/unplugin.js.map +1 -0
- package/dist/bundler-plugins/unplugin.test.d.ts +1 -0
- package/dist/bundler-plugins/unplugin.test.d.ts.map +1 -0
- package/dist/bundler-plugins/unplugin.test.js +256 -0
- package/dist/bundler-plugins/unplugin.test.js.map +1 -0
- package/dist/bundler-plugins/virtual-modules.test.d.ts +1 -0
- package/dist/bundler-plugins/virtual-modules.test.d.ts.map +1 -0
- package/dist/bundler-plugins/virtual-modules.test.js +77 -0
- package/dist/bundler-plugins/virtual-modules.test.js.map +1 -0
- package/dist/bundler-plugins/vite.d.ts +17 -0
- package/dist/bundler-plugins/vite.d.ts.map +1 -0
- package/dist/bundler-plugins/vite.js +15 -0
- package/dist/bundler-plugins/vite.js.map +1 -0
- package/dist/bundler-plugins/vite.test.d.ts +1 -0
- package/dist/bundler-plugins/vite.test.d.ts.map +1 -0
- package/dist/bundler-plugins/vite.test.js +61 -0
- package/dist/bundler-plugins/vite.test.js.map +1 -0
- package/dist/bundler-plugins/webpack.d.ts +1 -0
- package/dist/bundler-plugins/webpack.d.ts.map +1 -0
- package/dist/bundler-plugins/webpack.js +4 -0
- package/dist/bundler-plugins/webpack.js.map +1 -0
- package/dist/cli/commands/compile/command.d.ts +2 -0
- package/dist/cli/commands/compile/command.d.ts.map +1 -0
- package/dist/cli/commands/compile/command.js +225 -0
- package/dist/cli/commands/compile/command.js.map +1 -0
- package/dist/cli/commands/compile/command.test.d.ts +1 -0
- package/dist/cli/commands/compile/command.test.d.ts.map +1 -0
- package/dist/cli/commands/compile/command.test.js +69 -0
- package/dist/cli/commands/compile/command.test.js.map +1 -0
- package/dist/cli/commands/init/command.d.ts +2 -0
- package/dist/cli/commands/init/command.d.ts.map +1 -0
- package/dist/cli/commands/init/command.js +90 -0
- package/dist/cli/commands/init/command.js.map +1 -0
- package/dist/cli/defaults.d.ts +11 -0
- package/dist/cli/defaults.d.ts.map +1 -0
- package/dist/cli/defaults.js +13 -0
- package/dist/cli/defaults.js.map +1 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/steps/add-vite-plugin.d.ts +31 -0
- package/dist/cli/steps/add-vite-plugin.d.ts.map +1 -0
- package/dist/cli/steps/add-vite-plugin.js +65 -0
- package/dist/cli/steps/add-vite-plugin.js.map +1 -0
- package/dist/cli/steps/add-vite-plugin.test.d.ts +1 -0
- package/dist/cli/steps/add-vite-plugin.test.d.ts.map +1 -0
- package/dist/cli/steps/add-vite-plugin.test.js +74 -0
- package/dist/cli/steps/add-vite-plugin.test.js.map +1 -0
- package/dist/cli/steps/check-for-uncomitted-changes.d.ts +5 -0
- package/dist/cli/steps/check-for-uncomitted-changes.d.ts.map +1 -0
- package/dist/cli/steps/check-for-uncomitted-changes.js +37 -0
- package/dist/cli/steps/check-for-uncomitted-changes.js.map +1 -0
- package/dist/cli/steps/detect-bundler.d.ts +10 -0
- package/dist/cli/steps/detect-bundler.d.ts.map +1 -0
- package/dist/cli/steps/detect-bundler.js +22 -0
- package/dist/cli/steps/detect-bundler.js.map +1 -0
- package/dist/cli/steps/detect-bundler.test.d.ts +1 -0
- package/dist/cli/steps/detect-bundler.test.d.ts.map +1 -0
- package/dist/cli/steps/detect-bundler.test.js +29 -0
- package/dist/cli/steps/detect-bundler.test.js.map +1 -0
- package/dist/cli/steps/initialize-messages.d.ts +11 -0
- package/dist/cli/steps/initialize-messages.d.ts.map +1 -0
- package/dist/cli/steps/initialize-messages.js +31 -0
- package/dist/cli/steps/initialize-messages.js.map +1 -0
- package/dist/cli/steps/prompt-for-outdir.d.ts +8 -0
- package/dist/cli/steps/prompt-for-outdir.d.ts.map +1 -0
- package/dist/cli/steps/prompt-for-outdir.js +19 -0
- package/dist/cli/steps/prompt-for-outdir.js.map +1 -0
- package/dist/cli/steps/update-package-json.d.ts +11 -0
- package/dist/cli/steps/update-package-json.d.ts.map +1 -0
- package/dist/cli/steps/update-package-json.js +34 -0
- package/dist/cli/steps/update-package-json.js.map +1 -0
- package/dist/cli/steps/update-ts-config.d.ts +26 -0
- package/dist/cli/steps/update-ts-config.d.ts.map +1 -0
- package/dist/cli/steps/update-ts-config.js +270 -0
- package/dist/cli/steps/update-ts-config.js.map +1 -0
- package/dist/cli/steps/update-ts-config.test.d.ts +1 -0
- package/dist/cli/steps/update-ts-config.test.d.ts.map +1 -0
- package/dist/cli/steps/update-ts-config.test.js +60 -0
- package/dist/cli/steps/update-ts-config.test.js.map +1 -0
- package/dist/cli/utils.d.ts +36 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +20 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/compiler/assert-url-pattern-available.d.ts +7 -0
- package/dist/compiler/assert-url-pattern-available.d.ts.map +1 -0
- package/dist/compiler/assert-url-pattern-available.js +17 -0
- package/dist/compiler/assert-url-pattern-available.js.map +1 -0
- package/dist/compiler/compile-annotation.d.ts +12 -0
- package/dist/compiler/compile-annotation.d.ts.map +1 -0
- package/dist/compiler/compile-annotation.js +136 -0
- package/dist/compiler/compile-annotation.js.map +1 -0
- package/dist/compiler/compile-bundle.d.ts +28 -0
- package/dist/compiler/compile-bundle.d.ts.map +1 -0
- package/dist/compiler/compile-bundle.js +431 -0
- package/dist/compiler/compile-bundle.js.map +1 -0
- package/dist/compiler/compile-bundle.test.d.ts +1 -0
- package/dist/compiler/compile-bundle.test.d.ts.map +1 -0
- package/dist/compiler/compile-bundle.test.js +399 -0
- package/dist/compiler/compile-bundle.test.js.map +1 -0
- package/dist/compiler/compile-local-variable.d.ts +16 -0
- package/dist/compiler/compile-local-variable.d.ts.map +1 -0
- package/dist/compiler/compile-local-variable.js +28 -0
- package/dist/compiler/compile-local-variable.js.map +1 -0
- package/dist/compiler/compile-local-variable.test.d.ts +1 -0
- package/dist/compiler/compile-local-variable.test.d.ts.map +1 -0
- package/dist/compiler/compile-local-variable.test.js +359 -0
- package/dist/compiler/compile-local-variable.test.js.map +1 -0
- package/dist/compiler/compile-message.d.ts +8 -0
- package/dist/compiler/compile-message.d.ts.map +1 -0
- package/dist/compiler/compile-message.js +174 -0
- package/dist/compiler/compile-message.js.map +1 -0
- package/dist/compiler/compile-message.test.d.ts +1 -0
- package/dist/compiler/compile-message.test.d.ts.map +1 -0
- package/dist/compiler/compile-message.test.js +1060 -0
- package/dist/compiler/compile-message.test.js.map +1 -0
- package/dist/compiler/compile-pattern.d.ts +29 -0
- package/dist/compiler/compile-pattern.d.ts.map +1 -0
- package/dist/compiler/compile-pattern.js +143 -0
- package/dist/compiler/compile-pattern.js.map +1 -0
- package/dist/compiler/compile-pattern.test.d.ts +1 -0
- package/dist/compiler/compile-pattern.test.d.ts.map +1 -0
- package/dist/compiler/compile-pattern.test.js +255 -0
- package/dist/compiler/compile-pattern.test.js.map +1 -0
- package/dist/compiler/compile-project.d.ts +21 -0
- package/dist/compiler/compile-project.d.ts.map +1 -0
- package/dist/compiler/compile-project.js +147 -0
- package/dist/compiler/compile-project.js.map +1 -0
- package/dist/compiler/compile-project.test.d.ts +1 -0
- package/dist/compiler/compile-project.test.d.ts.map +1 -0
- package/dist/compiler/compile-project.test.js +1709 -0
- package/dist/compiler/compile-project.test.js.map +1 -0
- package/dist/compiler/compile.bench.d.ts +1 -0
- package/dist/compiler/compile.bench.d.ts.map +1 -0
- package/dist/compiler/compile.bench.js +89 -0
- package/dist/compiler/compile.bench.js.map +1 -0
- package/dist/compiler/compile.d.ts +24 -0
- package/dist/compiler/compile.d.ts.map +1 -0
- package/dist/compiler/compile.js +106 -0
- package/dist/compiler/compile.js.map +1 -0
- package/dist/compiler/compile.test.d.ts +1 -0
- package/dist/compiler/compile.test.d.ts.map +1 -0
- package/dist/compiler/compile.test.js +66 -0
- package/dist/compiler/compile.test.js.map +1 -0
- package/dist/compiler/compiler-options.d.ts +466 -0
- package/dist/compiler/compiler-options.d.ts.map +1 -0
- package/dist/compiler/compiler-options.js +22 -0
- package/dist/compiler/compiler-options.js.map +1 -0
- package/dist/compiler/create-paraglide.d.ts +21 -0
- package/dist/compiler/create-paraglide.d.ts.map +1 -0
- package/dist/compiler/create-paraglide.js +69 -0
- package/dist/compiler/create-paraglide.js.map +1 -0
- package/dist/compiler/create-paraglide.test.d.ts +1 -0
- package/dist/compiler/create-paraglide.test.d.ts.map +1 -0
- package/dist/compiler/create-paraglide.test.js +55 -0
- package/dist/compiler/create-paraglide.test.js.map +1 -0
- package/dist/compiler/create-readme.d.ts +9 -0
- package/dist/compiler/create-readme.d.ts.map +1 -0
- package/dist/compiler/create-readme.js +127 -0
- package/dist/compiler/create-readme.js.map +1 -0
- package/dist/compiler/emit-files.d.ts +15 -0
- package/dist/compiler/emit-files.d.ts.map +1 -0
- package/dist/compiler/emit-files.js +58 -0
- package/dist/compiler/emit-files.js.map +1 -0
- package/dist/compiler/emit-files.test.d.ts +1 -0
- package/dist/compiler/emit-files.test.d.ts.map +1 -0
- package/dist/compiler/emit-files.test.js +43 -0
- package/dist/compiler/emit-files.test.js.map +1 -0
- package/dist/compiler/emit-ts-declarations.d.ts +11 -0
- package/dist/compiler/emit-ts-declarations.d.ts.map +1 -0
- package/dist/compiler/emit-ts-declarations.interop.test.d.ts +1 -0
- package/dist/compiler/emit-ts-declarations.interop.test.d.ts.map +1 -0
- package/dist/compiler/emit-ts-declarations.interop.test.js +33 -0
- package/dist/compiler/emit-ts-declarations.interop.test.js.map +1 -0
- package/dist/compiler/emit-ts-declarations.js +353 -0
- package/dist/compiler/emit-ts-declarations.js.map +1 -0
- package/dist/compiler/emit-ts-declarations.test.d.ts +1 -0
- package/dist/compiler/emit-ts-declarations.test.d.ts.map +1 -0
- package/dist/compiler/emit-ts-declarations.test.js +161 -0
- package/dist/compiler/emit-ts-declarations.test.js.map +1 -0
- package/dist/compiler/index.d.ts +13 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +11 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/jsdoc-types.d.ts +21 -0
- package/dist/compiler/jsdoc-types.d.ts.map +1 -0
- package/dist/compiler/jsdoc-types.js +59 -0
- package/dist/compiler/jsdoc-types.js.map +1 -0
- package/dist/compiler/jsdoc-types.test.d.ts +1 -0
- package/dist/compiler/jsdoc-types.test.d.ts.map +1 -0
- package/dist/compiler/jsdoc-types.test.js +100 -0
- package/dist/compiler/jsdoc-types.test.js.map +1 -0
- package/dist/compiler/lazy-modules/compile-cache.d.ts +37 -0
- package/dist/compiler/lazy-modules/compile-cache.d.ts.map +1 -0
- package/dist/compiler/lazy-modules/compile-cache.js +34 -0
- package/dist/compiler/lazy-modules/compile-cache.js.map +1 -0
- package/dist/compiler/lazy-modules/compile-project.lazy.test.d.ts +2 -0
- package/dist/compiler/lazy-modules/compile-project.lazy.test.d.ts.map +1 -0
- package/dist/compiler/lazy-modules/compile-project.lazy.test.js +65 -0
- package/dist/compiler/lazy-modules/compile-project.lazy.test.js.map +1 -0
- package/dist/compiler/lazy-modules/create-loader.d.ts +18 -0
- package/dist/compiler/lazy-modules/create-loader.d.ts.map +1 -0
- package/dist/compiler/lazy-modules/create-loader.js +182 -0
- package/dist/compiler/lazy-modules/create-loader.js.map +1 -0
- package/dist/compiler/lazy-modules/create-loader.test.d.ts +2 -0
- package/dist/compiler/lazy-modules/create-loader.test.d.ts.map +1 -0
- package/dist/compiler/lazy-modules/create-loader.test.js +82 -0
- package/dist/compiler/lazy-modules/create-loader.test.js.map +1 -0
- package/dist/compiler/lazy-modules/manifest.d.ts +32 -0
- package/dist/compiler/lazy-modules/manifest.d.ts.map +1 -0
- package/dist/compiler/lazy-modules/manifest.js +11 -0
- package/dist/compiler/lazy-modules/manifest.js.map +1 -0
- package/dist/compiler/match-literals.d.ts +2 -0
- package/dist/compiler/match-literals.d.ts.map +1 -0
- package/dist/compiler/match-literals.js +42 -0
- package/dist/compiler/match-literals.js.map +1 -0
- package/dist/compiler/output-structure/lazy-modules.d.ts +27 -0
- package/dist/compiler/output-structure/lazy-modules.d.ts.map +1 -0
- package/dist/compiler/output-structure/lazy-modules.js +157 -0
- package/dist/compiler/output-structure/lazy-modules.js.map +1 -0
- package/dist/compiler/output-structure/lazy-modules.test.d.ts +2 -0
- package/dist/compiler/output-structure/lazy-modules.test.d.ts.map +1 -0
- package/dist/compiler/output-structure/lazy-modules.test.js +128 -0
- package/dist/compiler/output-structure/lazy-modules.test.js.map +1 -0
- package/dist/compiler/output-structure/locale-modules.d.ts +4 -0
- package/dist/compiler/output-structure/locale-modules.d.ts.map +1 -0
- package/dist/compiler/output-structure/locale-modules.js +81 -0
- package/dist/compiler/output-structure/locale-modules.js.map +1 -0
- package/dist/compiler/output-structure/locale-modules.test.d.ts +1 -0
- package/dist/compiler/output-structure/locale-modules.test.d.ts.map +1 -0
- package/dist/compiler/output-structure/locale-modules.test.js +163 -0
- package/dist/compiler/output-structure/locale-modules.test.js.map +1 -0
- package/dist/compiler/output-structure/message-modules.d.ts +4 -0
- package/dist/compiler/output-structure/message-modules.d.ts.map +1 -0
- package/dist/compiler/output-structure/message-modules.js +100 -0
- package/dist/compiler/output-structure/message-modules.js.map +1 -0
- package/dist/compiler/output-structure/message-modules.test.d.ts +1 -0
- package/dist/compiler/output-structure/message-modules.test.d.ts.map +1 -0
- package/dist/compiler/output-structure/message-modules.test.js +148 -0
- package/dist/compiler/output-structure/message-modules.test.js.map +1 -0
- package/dist/compiler/per-locale-build.d.ts +2 -0
- package/dist/compiler/per-locale-build.d.ts.map +1 -0
- package/dist/compiler/per-locale-build.js +3 -0
- package/dist/compiler/per-locale-build.js.map +1 -0
- package/dist/compiler/registry.d.ts +13 -0
- package/dist/compiler/registry.d.ts.map +1 -0
- package/dist/compiler/registry.js +60 -0
- package/dist/compiler/registry.js.map +1 -0
- package/dist/compiler/resolve-tsc-js-path.d.ts +9 -0
- package/dist/compiler/resolve-tsc-js-path.d.ts.map +1 -0
- package/dist/compiler/resolve-tsc-js-path.js +23 -0
- package/dist/compiler/resolve-tsc-js-path.js.map +1 -0
- package/dist/compiler/runtime/check-locale.d.ts +31 -0
- package/dist/compiler/runtime/check-locale.d.ts.map +1 -0
- package/dist/compiler/runtime/check-locale.js +51 -0
- package/dist/compiler/runtime/check-locale.js.map +1 -0
- package/dist/compiler/runtime/check-locale.test.d.ts +1 -0
- package/dist/compiler/runtime/check-locale.test.d.ts.map +1 -0
- package/dist/compiler/runtime/check-locale.test.js +84 -0
- package/dist/compiler/runtime/check-locale.test.js.map +1 -0
- package/dist/compiler/runtime/create-runtime.d.ts +35 -0
- package/dist/compiler/runtime/create-runtime.d.ts.map +1 -0
- package/dist/compiler/runtime/create-runtime.js +196 -0
- package/dist/compiler/runtime/create-runtime.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.d.ts +13 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.js +43 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.test.d.ts +1 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.test.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.test.js +149 -0
- package/dist/compiler/runtime/extract-locale-from-cookie.test.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-header.d.ts +13 -0
- package/dist/compiler/runtime/extract-locale-from-header.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-header.js +45 -0
- package/dist/compiler/runtime/extract-locale-from-header.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-header.test.d.ts +1 -0
- package/dist/compiler/runtime/extract-locale-from-header.test.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-header.test.js +55 -0
- package/dist/compiler/runtime/extract-locale-from-header.test.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.d.ts +12 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.js +33 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.test.d.ts +1 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.test.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.test.js +45 -0
- package/dist/compiler/runtime/extract-locale-from-navigator.test.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.d.ts +34 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.js +70 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.test.d.ts +1 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.test.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.test.js +119 -0
- package/dist/compiler/runtime/extract-locale-from-request-async.test.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request.d.ts +41 -0
- package/dist/compiler/runtime/extract-locale-from-request.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request.js +96 -0
- package/dist/compiler/runtime/extract-locale-from-request.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request.test.d.ts +1 -0
- package/dist/compiler/runtime/extract-locale-from-request.test.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-request.test.js +351 -0
- package/dist/compiler/runtime/extract-locale-from-request.test.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-url.d.ts +11 -0
- package/dist/compiler/runtime/extract-locale-from-url.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-url.js +68 -0
- package/dist/compiler/runtime/extract-locale-from-url.js.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-url.test.d.ts +1 -0
- package/dist/compiler/runtime/extract-locale-from-url.test.d.ts.map +1 -0
- package/dist/compiler/runtime/extract-locale-from-url.test.js +127 -0
- package/dist/compiler/runtime/extract-locale-from-url.test.js.map +1 -0
- package/dist/compiler/runtime/generate-static-localized-urls.d.ts +44 -0
- package/dist/compiler/runtime/generate-static-localized-urls.d.ts.map +1 -0
- package/dist/compiler/runtime/generate-static-localized-urls.js +133 -0
- package/dist/compiler/runtime/generate-static-localized-urls.js.map +1 -0
- package/dist/compiler/runtime/generate-static-localized-urls.test.d.ts +1 -0
- package/dist/compiler/runtime/generate-static-localized-urls.test.d.ts.map +1 -0
- package/dist/compiler/runtime/generate-static-localized-urls.test.js +159 -0
- package/dist/compiler/runtime/generate-static-localized-urls.test.js.map +1 -0
- package/dist/compiler/runtime/get-locale.d.ts +42 -0
- package/dist/compiler/runtime/get-locale.d.ts.map +1 -0
- package/dist/compiler/runtime/get-locale.js +158 -0
- package/dist/compiler/runtime/get-locale.js.map +1 -0
- package/dist/compiler/runtime/get-locale.test.d.ts +1 -0
- package/dist/compiler/runtime/get-locale.test.d.ts.map +1 -0
- package/dist/compiler/runtime/get-locale.test.js +295 -0
- package/dist/compiler/runtime/get-locale.test.js.map +1 -0
- package/dist/compiler/runtime/get-text-direction.d.ts +15 -0
- package/dist/compiler/runtime/get-text-direction.d.ts.map +1 -0
- package/dist/compiler/runtime/get-text-direction.js +46 -0
- package/dist/compiler/runtime/get-text-direction.js.map +1 -0
- package/dist/compiler/runtime/get-text-direction.test.d.ts +1 -0
- package/dist/compiler/runtime/get-text-direction.test.d.ts.map +1 -0
- package/dist/compiler/runtime/get-text-direction.test.js +40 -0
- package/dist/compiler/runtime/get-text-direction.test.js.map +1 -0
- package/dist/compiler/runtime/get-url-origin.d.ts +19 -0
- package/dist/compiler/runtime/get-url-origin.d.ts.map +1 -0
- package/dist/compiler/runtime/get-url-origin.js +31 -0
- package/dist/compiler/runtime/get-url-origin.js.map +1 -0
- package/dist/compiler/runtime/get-url-origin.test.d.ts +1 -0
- package/dist/compiler/runtime/get-url-origin.test.d.ts.map +1 -0
- package/dist/compiler/runtime/get-url-origin.test.js +18 -0
- package/dist/compiler/runtime/get-url-origin.test.js.map +1 -0
- package/dist/compiler/runtime/host-routing.d.ts +28 -0
- package/dist/compiler/runtime/host-routing.d.ts.map +1 -0
- package/dist/compiler/runtime/host-routing.js +79 -0
- package/dist/compiler/runtime/host-routing.js.map +1 -0
- package/dist/compiler/runtime/host-routing.test.d.ts +1 -0
- package/dist/compiler/runtime/host-routing.test.d.ts.map +1 -0
- package/dist/compiler/runtime/host-routing.test.js +128 -0
- package/dist/compiler/runtime/host-routing.test.js.map +1 -0
- package/dist/compiler/runtime/localize-href.d.ts +84 -0
- package/dist/compiler/runtime/localize-href.d.ts.map +1 -0
- package/dist/compiler/runtime/localize-href.js +115 -0
- package/dist/compiler/runtime/localize-href.js.map +1 -0
- package/dist/compiler/runtime/localize-href.test.d.ts +1 -0
- package/dist/compiler/runtime/localize-href.test.d.ts.map +1 -0
- package/dist/compiler/runtime/localize-href.test.js +139 -0
- package/dist/compiler/runtime/localize-href.test.js.map +1 -0
- package/dist/compiler/runtime/localize-url.d.ts +95 -0
- package/dist/compiler/runtime/localize-url.d.ts.map +1 -0
- package/dist/compiler/runtime/localize-url.js +327 -0
- package/dist/compiler/runtime/localize-url.js.map +1 -0
- package/dist/compiler/runtime/localize-url.test.d.ts +1 -0
- package/dist/compiler/runtime/localize-url.test.d.ts.map +1 -0
- package/dist/compiler/runtime/localize-url.test.js +533 -0
- package/dist/compiler/runtime/localize-url.test.js.map +1 -0
- package/dist/compiler/runtime/route-strategy.d.ts +32 -0
- package/dist/compiler/runtime/route-strategy.d.ts.map +1 -0
- package/dist/compiler/runtime/route-strategy.js +72 -0
- package/dist/compiler/runtime/route-strategy.js.map +1 -0
- package/dist/compiler/runtime/set-locale.d.ts +46 -0
- package/dist/compiler/runtime/set-locale.d.ts.map +1 -0
- package/dist/compiler/runtime/set-locale.js +172 -0
- package/dist/compiler/runtime/set-locale.js.map +1 -0
- package/dist/compiler/runtime/set-locale.test.d.ts +1 -0
- package/dist/compiler/runtime/set-locale.test.d.ts.map +1 -0
- package/dist/compiler/runtime/set-locale.test.js +555 -0
- package/dist/compiler/runtime/set-locale.test.js.map +1 -0
- package/dist/compiler/runtime/should-redirect.d.ts +100 -0
- package/dist/compiler/runtime/should-redirect.d.ts.map +1 -0
- package/dist/compiler/runtime/should-redirect.js +155 -0
- package/dist/compiler/runtime/should-redirect.js.map +1 -0
- package/dist/compiler/runtime/should-redirect.test.d.ts +1 -0
- package/dist/compiler/runtime/should-redirect.test.d.ts.map +1 -0
- package/dist/compiler/runtime/should-redirect.test.js +270 -0
- package/dist/compiler/runtime/should-redirect.test.js.map +1 -0
- package/dist/compiler/runtime/strategy.d.ts +63 -0
- package/dist/compiler/runtime/strategy.d.ts.map +1 -0
- package/dist/compiler/runtime/strategy.js +65 -0
- package/dist/compiler/runtime/strategy.js.map +1 -0
- package/dist/compiler/runtime/strategy.test.d.ts +1 -0
- package/dist/compiler/runtime/strategy.test.d.ts.map +1 -0
- package/dist/compiler/runtime/strategy.test.js +90 -0
- package/dist/compiler/runtime/strategy.test.js.map +1 -0
- package/dist/compiler/runtime/track-message-call.d.ts +5 -0
- package/dist/compiler/runtime/track-message-call.d.ts.map +1 -0
- package/dist/compiler/runtime/track-message-call.js +14 -0
- package/dist/compiler/runtime/track-message-call.js.map +1 -0
- package/dist/compiler/runtime/track-message-call.test.d.ts +1 -0
- package/dist/compiler/runtime/track-message-call.test.d.ts.map +1 -0
- package/dist/compiler/runtime/track-message-call.test.js +22 -0
- package/dist/compiler/runtime/track-message-call.test.js.map +1 -0
- package/dist/compiler/runtime/type-definitions.d.ts +197 -0
- package/dist/compiler/runtime/type-definitions.d.ts.map +1 -0
- package/dist/compiler/runtime/type-definitions.js +150 -0
- package/dist/compiler/runtime/type-definitions.js.map +1 -0
- package/dist/compiler/runtime/type.d.ts +47 -0
- package/dist/compiler/runtime/type.d.ts.map +1 -0
- package/dist/compiler/runtime/type.js +2 -0
- package/dist/compiler/runtime/type.js.map +1 -0
- package/dist/compiler/runtime/type.test.d.ts +1 -0
- package/dist/compiler/runtime/type.test.d.ts.map +1 -0
- package/dist/compiler/runtime/type.test.js +153 -0
- package/dist/compiler/runtime/type.test.js.map +1 -0
- package/dist/compiler/runtime/url-pattern.d.ts +12 -0
- package/dist/compiler/runtime/url-pattern.d.ts.map +1 -0
- package/dist/compiler/runtime/url-pattern.js +35 -0
- package/dist/compiler/runtime/url-pattern.js.map +1 -0
- package/dist/compiler/runtime/variables.d.ts +128 -0
- package/dist/compiler/runtime/variables.d.ts.map +1 -0
- package/dist/compiler/runtime/variables.js +111 -0
- package/dist/compiler/runtime/variables.js.map +1 -0
- package/dist/compiler/safe-module-id.d.ts +7 -0
- package/dist/compiler/safe-module-id.d.ts.map +1 -0
- package/dist/compiler/safe-module-id.js +78 -0
- package/dist/compiler/safe-module-id.js.map +1 -0
- package/dist/compiler/safe-module-id.test.d.ts +1 -0
- package/dist/compiler/safe-module-id.test.d.ts.map +1 -0
- package/dist/compiler/safe-module-id.test.js +36 -0
- package/dist/compiler/safe-module-id.test.js.map +1 -0
- package/dist/compiler/seed-previous-compilation.d.ts +7 -0
- package/dist/compiler/seed-previous-compilation.d.ts.map +1 -0
- package/dist/compiler/seed-previous-compilation.js +9 -0
- package/dist/compiler/seed-previous-compilation.js.map +1 -0
- package/dist/compiler/server/create-server-file.d.ts +12 -0
- package/dist/compiler/server/create-server-file.d.ts.map +1 -0
- package/dist/compiler/server/create-server-file.js +91 -0
- package/dist/compiler/server/create-server-file.js.map +1 -0
- package/dist/compiler/server/create-server-file.test.d.ts +1 -0
- package/dist/compiler/server/create-server-file.test.d.ts.map +1 -0
- package/dist/compiler/server/create-server-file.test.js +48 -0
- package/dist/compiler/server/create-server-file.test.js.map +1 -0
- package/dist/compiler/server/middleware.d.ts +98 -0
- package/dist/compiler/server/middleware.d.ts.map +1 -0
- package/dist/compiler/server/middleware.js +278 -0
- package/dist/compiler/server/middleware.js.map +1 -0
- package/dist/compiler/server/middleware.test.d.ts +1 -0
- package/dist/compiler/server/middleware.test.d.ts.map +1 -0
- package/dist/compiler/server/middleware.test.js +1001 -0
- package/dist/compiler/server/middleware.test.js.map +1 -0
- package/dist/compiler/server/type.d.ts +6 -0
- package/dist/compiler/server/type.d.ts.map +1 -0
- package/dist/compiler/server/type.js +2 -0
- package/dist/compiler/server/type.js.map +1 -0
- package/dist/compiler/test-helpers.d.ts +30 -0
- package/dist/compiler/test-helpers.d.ts.map +1 -0
- package/dist/compiler/test-helpers.js +50 -0
- package/dist/compiler/test-helpers.js.map +1 -0
- package/dist/compiler/types.d.ts +7 -0
- package/dist/compiler/types.d.ts.map +1 -0
- package/dist/compiler/types.js +2 -0
- package/dist/compiler/types.js.map +1 -0
- package/dist/compiler/variable-access.d.ts +3 -0
- package/dist/compiler/variable-access.d.ts.map +1 -0
- package/dist/compiler/variable-access.js +15 -0
- package/dist/compiler/variable-access.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/messages/ast.d.ts +102 -0
- package/dist/messages/ast.d.ts.map +1 -0
- package/dist/messages/ast.js +8 -0
- package/dist/messages/ast.js.map +1 -0
- package/dist/messages/create-bundle-nested.d.ts +16 -0
- package/dist/messages/create-bundle-nested.d.ts.map +1 -0
- package/dist/messages/create-bundle-nested.js +22 -0
- package/dist/messages/create-bundle-nested.js.map +1 -0
- package/dist/messages/index.d.ts +5 -0
- package/dist/messages/index.d.ts.map +1 -0
- package/dist/messages/index.js +5 -0
- package/dist/messages/index.js.map +1 -0
- package/dist/messages/load-messages.d.ts +19 -0
- package/dist/messages/load-messages.d.ts.map +1 -0
- package/dist/messages/load-messages.js +49 -0
- package/dist/messages/load-messages.js.map +1 -0
- package/dist/messages/message-format/flatten.d.ts +9 -0
- package/dist/messages/message-format/flatten.d.ts.map +1 -0
- package/dist/messages/message-format/flatten.js +32 -0
- package/dist/messages/message-format/flatten.js.map +1 -0
- package/dist/messages/message-format/import-files.d.ts +32 -0
- package/dist/messages/message-format/import-files.d.ts.map +1 -0
- package/dist/messages/message-format/import-files.js +53 -0
- package/dist/messages/message-format/import-files.js.map +1 -0
- package/dist/messages/message-format/import-files.test.d.ts +1 -0
- package/dist/messages/message-format/import-files.test.d.ts.map +1 -0
- package/dist/messages/message-format/import-files.test.js +145 -0
- package/dist/messages/message-format/import-files.test.js.map +1 -0
- package/dist/messages/message-format/index.d.ts +6 -0
- package/dist/messages/message-format/index.d.ts.map +1 -0
- package/dist/messages/message-format/index.js +7 -0
- package/dist/messages/message-format/index.js.map +1 -0
- package/dist/messages/message-format/parse-bundle.d.ts +31 -0
- package/dist/messages/message-format/parse-bundle.d.ts.map +1 -0
- package/dist/messages/message-format/parse-bundle.js +169 -0
- package/dist/messages/message-format/parse-bundle.js.map +1 -0
- package/dist/messages/message-format/parse-declaration.d.ts +2 -0
- package/dist/messages/message-format/parse-declaration.d.ts.map +1 -0
- package/dist/messages/message-format/parse-declaration.js +56 -0
- package/dist/messages/message-format/parse-declaration.js.map +1 -0
- package/dist/messages/message-format/parse-markup.d.ts +4 -0
- package/dist/messages/message-format/parse-markup.d.ts.map +1 -0
- package/dist/messages/message-format/parse-markup.js +167 -0
- package/dist/messages/message-format/parse-markup.js.map +1 -0
- package/dist/messages/message-format/parse-matches.d.ts +5 -0
- package/dist/messages/message-format/parse-matches.d.ts.map +1 -0
- package/dist/messages/message-format/parse-matches.js +31 -0
- package/dist/messages/message-format/parse-matches.js.map +1 -0
- package/dist/messages/message-format/parse-pattern.d.ts +5 -0
- package/dist/messages/message-format/parse-pattern.d.ts.map +1 -0
- package/dist/messages/message-format/parse-pattern.js +120 -0
- package/dist/messages/message-format/parse-pattern.js.map +1 -0
- package/dist/messages/message-format/unique.d.ts +2 -0
- package/dist/messages/message-format/unique.d.ts.map +1 -0
- package/dist/messages/message-format/unique.js +5 -0
- package/dist/messages/message-format/unique.js.map +1 -0
- package/dist/messages/nest-bundles.d.ts +19 -0
- package/dist/messages/nest-bundles.d.ts.map +1 -0
- package/dist/messages/nest-bundles.js +49 -0
- package/dist/messages/nest-bundles.js.map +1 -0
- package/dist/services/account/index.d.ts +14 -0
- package/dist/services/account/index.d.ts.map +1 -0
- package/dist/services/account/index.js +43 -0
- package/dist/services/account/index.js.map +1 -0
- package/dist/services/account/types.d.ts +4 -0
- package/dist/services/account/types.d.ts.map +1 -0
- package/dist/services/account/types.js +2 -0
- package/dist/services/account/types.js.map +1 -0
- package/dist/services/codegen/escape.d.ts +9 -0
- package/dist/services/codegen/escape.d.ts.map +1 -0
- package/dist/services/codegen/escape.js +19 -0
- package/dist/services/codegen/escape.js.map +1 -0
- package/dist/services/codegen/quotes.d.ts +4 -0
- package/dist/services/codegen/quotes.d.ts.map +1 -0
- package/dist/services/codegen/quotes.js +5 -0
- package/dist/services/codegen/quotes.js.map +1 -0
- package/dist/services/env-variables/create-index-file.d.ts +9 -0
- package/dist/services/env-variables/create-index-file.d.ts.map +1 -0
- package/dist/services/env-variables/create-index-file.js +28 -0
- package/dist/services/env-variables/create-index-file.js.map +1 -0
- package/dist/services/env-variables/index.d.ts +3 -0
- package/dist/services/env-variables/index.d.ts.map +1 -0
- package/dist/services/env-variables/index.js +4 -0
- package/dist/services/env-variables/index.js.map +1 -0
- package/dist/services/environment/package.d.ts +9 -0
- package/dist/services/environment/package.d.ts.map +1 -0
- package/dist/services/environment/package.js +31 -0
- package/dist/services/environment/package.js.map +1 -0
- package/dist/services/environment/package.test.d.ts +1 -0
- package/dist/services/environment/package.test.d.ts.map +1 -0
- package/dist/services/environment/package.test.js +21 -0
- package/dist/services/environment/package.test.js.map +1 -0
- package/dist/services/error-handling.d.ts +12 -0
- package/dist/services/error-handling.d.ts.map +1 -0
- package/dist/services/error-handling.js +27 -0
- package/dist/services/error-handling.js.map +1 -0
- package/dist/services/error-handling.test.d.ts +1 -0
- package/dist/services/error-handling.test.d.ts.map +1 -0
- package/dist/services/error-handling.test.js +10 -0
- package/dist/services/error-handling.test.js.map +1 -0
- package/dist/services/file-handling/content-hash.d.ts +9 -0
- package/dist/services/file-handling/content-hash.js +19 -0
- package/dist/services/file-handling/content-hash.js.map +1 -0
- package/dist/services/file-handling/exists.d.ts +7 -0
- package/dist/services/file-handling/exists.d.ts.map +1 -0
- package/dist/services/file-handling/exists.js +24 -0
- package/dist/services/file-handling/exists.js.map +1 -0
- package/dist/services/file-handling/exists.test.d.ts +1 -0
- package/dist/services/file-handling/exists.test.d.ts.map +1 -0
- package/dist/services/file-handling/exists.test.js +27 -0
- package/dist/services/file-handling/exists.test.js.map +1 -0
- package/dist/services/file-handling/types.d.ts +4 -0
- package/dist/services/file-handling/types.d.ts.map +1 -0
- package/dist/services/file-handling/types.js +2 -0
- package/dist/services/file-handling/types.js.map +1 -0
- package/dist/services/file-handling/write-output.d.ts +21 -0
- package/dist/services/file-handling/write-output.d.ts.map +1 -0
- package/dist/services/file-handling/write-output.js +157 -0
- package/dist/services/file-handling/write-output.js.map +1 -0
- package/dist/services/file-handling/write-output.test.d.ts +1 -0
- package/dist/services/file-handling/write-output.test.d.ts.map +1 -0
- package/dist/services/file-handling/write-output.test.js +217 -0
- package/dist/services/file-handling/write-output.test.js.map +1 -0
- package/dist/services/file-watching/tracked-fs.d.ts +25 -0
- package/dist/services/file-watching/tracked-fs.d.ts.map +1 -0
- package/dist/services/file-watching/tracked-fs.js +94 -0
- package/dist/services/file-watching/tracked-fs.js.map +1 -0
- package/dist/services/file-watching/tracked-fs.test.d.ts +1 -0
- package/dist/services/file-watching/tracked-fs.test.d.ts.map +1 -0
- package/dist/services/file-watching/tracked-fs.test.js +87 -0
- package/dist/services/file-watching/tracked-fs.test.js.map +1 -0
- package/dist/services/logger/index.d.ts +17 -0
- package/dist/services/logger/index.d.ts.map +1 -0
- package/dist/services/logger/index.js +58 -0
- package/dist/services/logger/index.js.map +1 -0
- package/dist/services/lookup.d.ts +14 -0
- package/dist/services/lookup.d.ts.map +1 -0
- package/dist/services/lookup.js +24 -0
- package/dist/services/lookup.js.map +1 -0
- package/dist/urlpattern-polyfill/index.d.ts +2 -0
- package/dist/urlpattern-polyfill/index.d.ts.map +1 -0
- package/dist/urlpattern-polyfill/index.js +2 -0
- package/dist/urlpattern-polyfill/index.js.map +1 -0
- package/dist/utilities/detect-json-formatting.d.ts +10 -0
- package/dist/utilities/detect-json-formatting.d.ts.map +1 -0
- package/dist/utilities/detect-json-formatting.js +80 -0
- package/dist/utilities/detect-json-formatting.js.map +1 -0
- package/dist/utilities/node-normalize-path.d.ts +1 -0
- package/dist/utilities/node-normalize-path.d.ts.map +1 -0
- package/dist/utilities/node-normalize-path.js +10 -0
- package/dist/utilities/node-normalize-path.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { createParaglide } from "../create-paraglide.js";
|
|
3
|
+
test("returns locale from custom strategy which is async", async () => {
|
|
4
|
+
const runtime = await createParaglide({
|
|
5
|
+
baseLocale: "en",
|
|
6
|
+
locales: ["en", "fr", "de"],
|
|
7
|
+
strategy: ["custom-header", "baseLocale"],
|
|
8
|
+
});
|
|
9
|
+
class FakeDB {
|
|
10
|
+
db = new Map();
|
|
11
|
+
constructor() {
|
|
12
|
+
this.db.set("1", "fr");
|
|
13
|
+
}
|
|
14
|
+
async getUserLocaleById(id) {
|
|
15
|
+
return this.db.get(id);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const db = new FakeDB();
|
|
19
|
+
async function getLocaleFromUserRequest(request) {
|
|
20
|
+
const userId = request?.headers.get("X-Custom-User-ID") ?? undefined;
|
|
21
|
+
if (!userId)
|
|
22
|
+
throw Error("No User ID");
|
|
23
|
+
const locale = await db.getUserLocaleById(userId);
|
|
24
|
+
return locale;
|
|
25
|
+
}
|
|
26
|
+
runtime.defineCustomServerStrategy("custom-header", {
|
|
27
|
+
getLocale: async (request) => (await getLocaleFromUserRequest(request)) ?? undefined,
|
|
28
|
+
});
|
|
29
|
+
const request = new Request("http://example.com", {
|
|
30
|
+
headers: {
|
|
31
|
+
"X-Custom-User-ID": "1",
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const locale = await runtime.extractLocaleFromRequestAsync(request);
|
|
35
|
+
expect(locale).toBe("fr");
|
|
36
|
+
});
|
|
37
|
+
test("falls back to next strategy when custom strategy returns undefined", async () => {
|
|
38
|
+
const runtime = await createParaglide({
|
|
39
|
+
baseLocale: "en",
|
|
40
|
+
locales: ["en", "fr"],
|
|
41
|
+
strategy: ["custom-fallback", "baseLocale"],
|
|
42
|
+
});
|
|
43
|
+
runtime.defineCustomServerStrategy("custom-fallback", {
|
|
44
|
+
getLocale: () => undefined,
|
|
45
|
+
});
|
|
46
|
+
const request = new Request("http://example.com");
|
|
47
|
+
const locale = await runtime.extractLocaleFromRequestAsync(request);
|
|
48
|
+
expect(locale).toBe("en"); // Should fall back to baseLocale
|
|
49
|
+
});
|
|
50
|
+
test("uses the provided public url for url strategy matching", async () => {
|
|
51
|
+
const runtime = await createParaglide({
|
|
52
|
+
baseLocale: "en",
|
|
53
|
+
locales: ["en", "fr"],
|
|
54
|
+
strategy: ["url", "baseLocale"],
|
|
55
|
+
urlPatterns: [
|
|
56
|
+
{
|
|
57
|
+
pattern: "https://example.com/:path(.*)?",
|
|
58
|
+
localized: [
|
|
59
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
60
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
});
|
|
65
|
+
const request = new Request("http://internal.example.com/en/home");
|
|
66
|
+
const locale = await runtime.extractLocaleFromRequestAsync(request, {
|
|
67
|
+
effectiveRequestUrl: "https://example.com/fr/home",
|
|
68
|
+
});
|
|
69
|
+
expect(locale).toBe("fr");
|
|
70
|
+
});
|
|
71
|
+
test("resolves relative effectiveRequestUrl strings against request.url", async () => {
|
|
72
|
+
const runtime = await createParaglide({
|
|
73
|
+
baseLocale: "en",
|
|
74
|
+
locales: ["en", "fr"],
|
|
75
|
+
strategy: ["url", "baseLocale"],
|
|
76
|
+
urlPatterns: [
|
|
77
|
+
{
|
|
78
|
+
pattern: "https://example.com/:path(.*)?",
|
|
79
|
+
localized: [
|
|
80
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
81
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
82
|
+
],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
});
|
|
86
|
+
const request = new Request("https://example.com/en/home");
|
|
87
|
+
const locale = await runtime.extractLocaleFromRequestAsync(request, {
|
|
88
|
+
effectiveRequestUrl: "/fr/home",
|
|
89
|
+
});
|
|
90
|
+
expect(locale).toBe("fr");
|
|
91
|
+
});
|
|
92
|
+
test("uses normalized effectiveRequestUrl for route strategy selection", async () => {
|
|
93
|
+
const runtime = await createParaglide({
|
|
94
|
+
baseLocale: "en",
|
|
95
|
+
locales: ["en", "fr"],
|
|
96
|
+
strategy: ["baseLocale"],
|
|
97
|
+
urlPatterns: [
|
|
98
|
+
{
|
|
99
|
+
pattern: "https://example.com/:path(.*)?",
|
|
100
|
+
localized: [
|
|
101
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
102
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
],
|
|
106
|
+
routeStrategies: [
|
|
107
|
+
{
|
|
108
|
+
match: "https://example.com/:path(.*)?",
|
|
109
|
+
strategy: ["url", "baseLocale"],
|
|
110
|
+
},
|
|
111
|
+
],
|
|
112
|
+
});
|
|
113
|
+
const request = new Request("https://example.com/en/home");
|
|
114
|
+
const locale = await runtime.extractLocaleFromRequestAsync(request, {
|
|
115
|
+
effectiveRequestUrl: "/fr/home",
|
|
116
|
+
});
|
|
117
|
+
expect(locale).toBe("fr");
|
|
118
|
+
});
|
|
119
|
+
//# sourceMappingURL=extract-locale-from-request-async.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-locale-from-request-async.test.js","sourceRoot":"","sources":["../../../src/compiler/runtime/extract-locale-from-request-async.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { expect, test } from \"vitest\";\nimport { createParaglide } from \"../create-paraglide.js\";\n\ntest(\"returns locale from custom strategy which is async\", async () => {\n\tconst runtime = await createParaglide({\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"fr\", \"de\"],\n\t\tstrategy: [\"custom-header\", \"baseLocale\"],\n\t});\n\tclass FakeDB {\n\t\tdb = new Map<string, string>();\n\t\tconstructor() {\n\t\t\tthis.db.set(\"1\", \"fr\");\n\t\t}\n\n\t\tasync getUserLocaleById(id: string) {\n\t\t\treturn this.db.get(id);\n\t\t}\n\t}\n\n\tconst db = new FakeDB();\n\tasync function getLocaleFromUserRequest(request?: Request) {\n\t\tconst userId = request?.headers.get(\"X-Custom-User-ID\") ?? undefined;\n\t\tif (!userId) throw Error(\"No User ID\");\n\t\tconst locale = await db.getUserLocaleById(userId);\n\t\treturn locale;\n\t}\n\truntime.defineCustomServerStrategy(\"custom-header\", {\n\t\tgetLocale: async (request) =>\n\t\t\t(await getLocaleFromUserRequest(request)) ?? undefined,\n\t});\n\n\tconst request = new Request(\"http://example.com\", {\n\t\theaders: {\n\t\t\t\"X-Custom-User-ID\": \"1\",\n\t\t},\n\t});\n\n\tconst locale = await runtime.extractLocaleFromRequestAsync(request);\n\texpect(locale).toBe(\"fr\");\n});\n\ntest(\"falls back to next strategy when custom strategy returns undefined\", async () => {\n\tconst runtime = await createParaglide({\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"fr\"],\n\t\tstrategy: [\"custom-fallback\", \"baseLocale\"],\n\t});\n\n\truntime.defineCustomServerStrategy(\"custom-fallback\", {\n\t\tgetLocale: () => undefined,\n\t});\n\n\tconst request = new Request(\"http://example.com\");\n\tconst locale = await runtime.extractLocaleFromRequestAsync(request);\n\texpect(locale).toBe(\"en\"); // Should fall back to baseLocale\n});\n\ntest(\"uses the provided public url for url strategy matching\", async () => {\n\tconst runtime = await createParaglide({\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"fr\"],\n\t\tstrategy: [\"url\", \"baseLocale\"],\n\t\turlPatterns: [\n\t\t\t{\n\t\t\t\tpattern: \"https://example.com/:path(.*)?\",\n\t\t\t\tlocalized: [\n\t\t\t\t\t[\"en\", \"https://example.com/en/:path(.*)?\"],\n\t\t\t\t\t[\"fr\", \"https://example.com/fr/:path(.*)?\"],\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t});\n\n\tconst request = new Request(\"http://internal.example.com/en/home\");\n\tconst locale = await runtime.extractLocaleFromRequestAsync(request, {\n\t\teffectiveRequestUrl: \"https://example.com/fr/home\",\n\t});\n\n\texpect(locale).toBe(\"fr\");\n});\n\ntest(\"resolves relative effectiveRequestUrl strings against request.url\", async () => {\n\tconst runtime = await createParaglide({\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"fr\"],\n\t\tstrategy: [\"url\", \"baseLocale\"],\n\t\turlPatterns: [\n\t\t\t{\n\t\t\t\tpattern: \"https://example.com/:path(.*)?\",\n\t\t\t\tlocalized: [\n\t\t\t\t\t[\"en\", \"https://example.com/en/:path(.*)?\"],\n\t\t\t\t\t[\"fr\", \"https://example.com/fr/:path(.*)?\"],\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t});\n\n\tconst request = new Request(\"https://example.com/en/home\");\n\tconst locale = await runtime.extractLocaleFromRequestAsync(request, {\n\t\teffectiveRequestUrl: \"/fr/home\",\n\t});\n\n\texpect(locale).toBe(\"fr\");\n});\n\ntest(\"uses normalized effectiveRequestUrl for route strategy selection\", async () => {\n\tconst runtime = await createParaglide({\n\t\tbaseLocale: \"en\",\n\t\tlocales: [\"en\", \"fr\"],\n\t\tstrategy: [\"baseLocale\"],\n\t\turlPatterns: [\n\t\t\t{\n\t\t\t\tpattern: \"https://example.com/:path(.*)?\",\n\t\t\t\tlocalized: [\n\t\t\t\t\t[\"en\", \"https://example.com/en/:path(.*)?\"],\n\t\t\t\t\t[\"fr\", \"https://example.com/fr/:path(.*)?\"],\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\trouteStrategies: [\n\t\t\t{\n\t\t\t\tmatch: \"https://example.com/:path(.*)?\",\n\t\t\t\tstrategy: [\"url\", \"baseLocale\"],\n\t\t\t},\n\t\t],\n\t});\n\n\tconst request = new Request(\"https://example.com/en/home\");\n\tconst locale = await runtime.extractLocaleFromRequestAsync(request, {\n\t\teffectiveRequestUrl: \"/fr/home\",\n\t});\n\n\texpect(locale).toBe(\"fr\");\n});\n"]}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { strategy } from "./variables.js";
|
|
2
|
+
export type ExtractLocaleFromRequestOptions = {
|
|
3
|
+
/**
|
|
4
|
+
* - Effective request URL to use for route matching and locale detection with the URL strategy.
|
|
5
|
+
*/
|
|
6
|
+
effectiveRequestUrl?: string | URL;
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* @typedef {object} ExtractLocaleFromRequestOptions
|
|
10
|
+
* @property {string | URL} [effectiveRequestUrl] - Effective request URL to use for route matching and locale detection with the URL strategy.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Extracts a locale from a request.
|
|
14
|
+
*
|
|
15
|
+
* Use the function on the server to extract the locale
|
|
16
|
+
* from a request.
|
|
17
|
+
*
|
|
18
|
+
* The function goes through the strategies in the order
|
|
19
|
+
* they are defined. If a strategy returns an invalid locale,
|
|
20
|
+
* it will fall back to the next strategy.
|
|
21
|
+
*
|
|
22
|
+
* Note: Custom server strategies are not supported in this synchronous version.
|
|
23
|
+
* Use `extractLocaleFromRequestAsync` if you need custom server strategies with async getLocale methods.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* const locale = extractLocaleFromRequest(request);
|
|
27
|
+
*
|
|
28
|
+
* @param {Request} request
|
|
29
|
+
* @param {ExtractLocaleFromRequestOptions} [options]
|
|
30
|
+
* @returns {Locale}
|
|
31
|
+
*/
|
|
32
|
+
export declare const extractLocaleFromRequest: (request: Request, options?: ExtractLocaleFromRequestOptions) => Locale;
|
|
33
|
+
/**
|
|
34
|
+
* Extracts a locale from a request using the provided strategy order.
|
|
35
|
+
*
|
|
36
|
+
* @param {Request} request
|
|
37
|
+
* @param {typeof strategy} strategies
|
|
38
|
+
* @param {string | URL} [url]
|
|
39
|
+
* @returns {Locale}
|
|
40
|
+
*/
|
|
41
|
+
export declare const extractLocaleFromRequestWithStrategies: (request: Request, strategies: typeof strategy, url?: string | URL) => Locale;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-locale-from-request.d.ts","sourceRoot":"","sources":["../../../src/compiler/runtime/extract-locale-from-request.js"],"names":[],"mappings":"AAKA,OAAO,EAGN,QAAQ,EAIR,MAAM,gBAAgB,CAAC;AAGrB,YAAkB,+BAA+B,GACjD;;;;IAA0B,mBAAmB,AAA7C,CACF,EADa,MAAM,GAAG,GAAG,CACzB;CAAA,CAAA;AAHD;;;GAGG;AAEH;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,wBAAwB,YAJ1B,OAAO,YACP,+BAA+B,KAC7B,MAYZ,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sCAAsC,YALxC,OAAO,cACP,OAAO,QAAQ,QACf,MAAM,GAAG,GAAG,KACV,MA+CZ,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { toLocale } from "./check-locale.js";
|
|
2
|
+
import { extractLocaleFromHeader } from "./extract-locale-from-header.js";
|
|
3
|
+
import { extractLocaleFromUrl } from "./extract-locale-from-url.js";
|
|
4
|
+
import { getStrategyForUrl } from "./route-strategy.js";
|
|
5
|
+
import { isCustomStrategy } from "./strategy.js";
|
|
6
|
+
import { baseLocale, cookieName, strategy, TREE_SHAKE_COOKIE_STRATEGY_USED, TREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED, TREE_SHAKE_URL_STRATEGY_USED, } from "./variables.js";
|
|
7
|
+
/**
|
|
8
|
+
* @typedef {object} ExtractLocaleFromRequestOptions
|
|
9
|
+
* @property {string | URL} [effectiveRequestUrl] - Effective request URL to use for route matching and locale detection with the URL strategy.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Extracts a locale from a request.
|
|
13
|
+
*
|
|
14
|
+
* Use the function on the server to extract the locale
|
|
15
|
+
* from a request.
|
|
16
|
+
*
|
|
17
|
+
* The function goes through the strategies in the order
|
|
18
|
+
* they are defined. If a strategy returns an invalid locale,
|
|
19
|
+
* it will fall back to the next strategy.
|
|
20
|
+
*
|
|
21
|
+
* Note: Custom server strategies are not supported in this synchronous version.
|
|
22
|
+
* Use `extractLocaleFromRequestAsync` if you need custom server strategies with async getLocale methods.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* const locale = extractLocaleFromRequest(request);
|
|
26
|
+
*
|
|
27
|
+
* @param {Request} request
|
|
28
|
+
* @param {ExtractLocaleFromRequestOptions} [options]
|
|
29
|
+
* @returns {Locale}
|
|
30
|
+
*/
|
|
31
|
+
export const extractLocaleFromRequest = (request, options = {}) => {
|
|
32
|
+
const effectiveRequestUrl = resolveEffectiveRequestUrl(request, options.effectiveRequestUrl);
|
|
33
|
+
return extractLocaleFromRequestWithStrategies(request, getStrategyForUrl(effectiveRequestUrl), effectiveRequestUrl);
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Extracts a locale from a request using the provided strategy order.
|
|
37
|
+
*
|
|
38
|
+
* @param {Request} request
|
|
39
|
+
* @param {typeof strategy} strategies
|
|
40
|
+
* @param {string | URL} [url]
|
|
41
|
+
* @returns {Locale}
|
|
42
|
+
*/
|
|
43
|
+
export const extractLocaleFromRequestWithStrategies = (request, strategies, url = request.url) => {
|
|
44
|
+
const effectiveRequestUrl = resolveEffectiveRequestUrl(request, url);
|
|
45
|
+
/** @type {string|undefined} */
|
|
46
|
+
let locale;
|
|
47
|
+
for (const strat of strategies) {
|
|
48
|
+
if (TREE_SHAKE_COOKIE_STRATEGY_USED && strat === "cookie") {
|
|
49
|
+
const cookiePrefix = cookieName + "=";
|
|
50
|
+
locale = request.headers
|
|
51
|
+
.get("cookie")
|
|
52
|
+
?.split(";")
|
|
53
|
+
.map((c) => c.trim())
|
|
54
|
+
.find((c) => c.startsWith(cookiePrefix))
|
|
55
|
+
?.slice(cookiePrefix.length);
|
|
56
|
+
}
|
|
57
|
+
else if (TREE_SHAKE_URL_STRATEGY_USED && strat === "url") {
|
|
58
|
+
locale = extractLocaleFromUrl(effectiveRequestUrl);
|
|
59
|
+
}
|
|
60
|
+
else if (TREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED &&
|
|
61
|
+
strat === "preferredLanguage") {
|
|
62
|
+
locale = extractLocaleFromHeader(request);
|
|
63
|
+
}
|
|
64
|
+
else if (strat === "globalVariable") {
|
|
65
|
+
locale = _locale;
|
|
66
|
+
}
|
|
67
|
+
else if (strat === "baseLocale") {
|
|
68
|
+
return baseLocale;
|
|
69
|
+
}
|
|
70
|
+
else if (strat === "localStorage") {
|
|
71
|
+
continue;
|
|
72
|
+
}
|
|
73
|
+
else if (isCustomStrategy(strat)) {
|
|
74
|
+
// Custom strategies are not supported in sync version
|
|
75
|
+
// Use extractLocaleFromRequestAsync for custom server strategies
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
const matchedLocale = toLocale(locale);
|
|
79
|
+
if (matchedLocale) {
|
|
80
|
+
return matchedLocale;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
throw new Error("No locale found. There is an error in your strategy. Try adding 'baseLocale' as the very last strategy. Read more here https://paraglidejs.com/errors#no-locale-found");
|
|
84
|
+
};
|
|
85
|
+
/**
|
|
86
|
+
* @param {Request} request
|
|
87
|
+
* @param {string | URL | undefined} effectiveRequestUrl
|
|
88
|
+
* @returns {URL}
|
|
89
|
+
*/
|
|
90
|
+
function resolveEffectiveRequestUrl(request, effectiveRequestUrl = request.url) {
|
|
91
|
+
if (effectiveRequestUrl instanceof URL) {
|
|
92
|
+
return new URL(effectiveRequestUrl.href);
|
|
93
|
+
}
|
|
94
|
+
return new URL(effectiveRequestUrl, request.url);
|
|
95
|
+
}
|
|
96
|
+
//# sourceMappingURL=extract-locale-from-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-locale-from-request.js","sourceRoot":"","sources":["../../../src/compiler/runtime/extract-locale-from-request.js"],"names":[],"mappings":"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","sourcesContent":["import { toLocale } from \"./check-locale.js\";\nimport { extractLocaleFromHeader } from \"./extract-locale-from-header.js\";\nimport { extractLocaleFromUrl } from \"./extract-locale-from-url.js\";\nimport { getStrategyForUrl } from \"./route-strategy.js\";\nimport { isCustomStrategy } from \"./strategy.js\";\nimport {\n\tbaseLocale,\n\tcookieName,\n\tstrategy,\n\tTREE_SHAKE_COOKIE_STRATEGY_USED,\n\tTREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED,\n\tTREE_SHAKE_URL_STRATEGY_USED,\n} from \"./variables.js\";\n\n/**\n * @typedef {object} ExtractLocaleFromRequestOptions\n * @property {string | URL} [effectiveRequestUrl] - Effective request URL to use for route matching and locale detection with the URL strategy.\n */\n\n/**\n * Extracts a locale from a request.\n *\n * Use the function on the server to extract the locale\n * from a request.\n *\n * The function goes through the strategies in the order\n * they are defined. If a strategy returns an invalid locale,\n * it will fall back to the next strategy.\n *\n * Note: Custom server strategies are not supported in this synchronous version.\n * Use `extractLocaleFromRequestAsync` if you need custom server strategies with async getLocale methods.\n *\n * @example\n * const locale = extractLocaleFromRequest(request);\n *\n * @param {Request} request\n * @param {ExtractLocaleFromRequestOptions} [options]\n * @returns {Locale}\n */\nexport const extractLocaleFromRequest = (request, options = {}) => {\n\tconst effectiveRequestUrl = resolveEffectiveRequestUrl(\n\t\trequest,\n\t\toptions.effectiveRequestUrl\n\t);\n\treturn extractLocaleFromRequestWithStrategies(\n\t\trequest,\n\t\tgetStrategyForUrl(effectiveRequestUrl),\n\t\teffectiveRequestUrl\n\t);\n};\n\n/**\n * Extracts a locale from a request using the provided strategy order.\n *\n * @param {Request} request\n * @param {typeof strategy} strategies\n * @param {string | URL} [url]\n * @returns {Locale}\n */\nexport const extractLocaleFromRequestWithStrategies = (\n\trequest,\n\tstrategies,\n\turl = request.url\n) => {\n\tconst effectiveRequestUrl = resolveEffectiveRequestUrl(request, url);\n\t/** @type {string|undefined} */\n\tlet locale;\n\n\tfor (const strat of strategies) {\n\t\tif (TREE_SHAKE_COOKIE_STRATEGY_USED && strat === \"cookie\") {\n\t\t\tconst cookiePrefix = cookieName + \"=\";\n\n\t\t\tlocale = request.headers\n\t\t\t\t.get(\"cookie\")\n\t\t\t\t?.split(\";\")\n\t\t\t\t.map((c) => c.trim())\n\t\t\t\t.find((c) => c.startsWith(cookiePrefix))\n\t\t\t\t?.slice(cookiePrefix.length);\n\t\t} else if (TREE_SHAKE_URL_STRATEGY_USED && strat === \"url\") {\n\t\t\tlocale = extractLocaleFromUrl(effectiveRequestUrl);\n\t\t} else if (\n\t\t\tTREE_SHAKE_PREFERRED_LANGUAGE_STRATEGY_USED &&\n\t\t\tstrat === \"preferredLanguage\"\n\t\t) {\n\t\t\tlocale = extractLocaleFromHeader(request);\n\t\t} else if (strat === \"globalVariable\") {\n\t\t\tlocale = _locale;\n\t\t} else if (strat === \"baseLocale\") {\n\t\t\treturn baseLocale;\n\t\t} else if (strat === \"localStorage\") {\n\t\t\tcontinue;\n\t\t} else if (isCustomStrategy(strat)) {\n\t\t\t// Custom strategies are not supported in sync version\n\t\t\t// Use extractLocaleFromRequestAsync for custom server strategies\n\t\t\tcontinue;\n\t\t}\n\t\tconst matchedLocale = toLocale(locale);\n\t\tif (matchedLocale) {\n\t\t\treturn matchedLocale;\n\t\t}\n\t}\n\tthrow new Error(\n\t\t\"No locale found. There is an error in your strategy. Try adding 'baseLocale' as the very last strategy. Read more here https://paraglidejs.com/errors#no-locale-found\"\n\t);\n};\n\n/**\n * @param {Request} request\n * @param {string | URL | undefined} effectiveRequestUrl\n * @returns {URL}\n */\nfunction resolveEffectiveRequestUrl(\n\trequest,\n\teffectiveRequestUrl = request.url\n) {\n\tif (effectiveRequestUrl instanceof URL) {\n\t\treturn new URL(effectiveRequestUrl.href);\n\t}\n\n\treturn new URL(effectiveRequestUrl, request.url);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extract-locale-from-request.test.d.ts","sourceRoot":"","sources":["../../../src/compiler/runtime/extract-locale-from-request.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,351 @@
|
|
|
1
|
+
import { expect, test } from "vitest";
|
|
2
|
+
import { createParaglide } from "../create-paraglide.js";
|
|
3
|
+
test("returns the locale from the cookie", async () => {
|
|
4
|
+
const runtime = await createParaglide({
|
|
5
|
+
baseLocale: "en",
|
|
6
|
+
locales: ["en", "fr"],
|
|
7
|
+
strategy: ["cookie"],
|
|
8
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
9
|
+
});
|
|
10
|
+
const request = new Request("http://example.com", {
|
|
11
|
+
headers: {
|
|
12
|
+
cookie: `PARAGLIDE_LOCALE=fr`,
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
16
|
+
expect(locale).toBe("fr");
|
|
17
|
+
});
|
|
18
|
+
test("returns the locale from a cookie header without whitespace after semicolons", async () => {
|
|
19
|
+
const runtime = await createParaglide({
|
|
20
|
+
baseLocale: "en",
|
|
21
|
+
locales: ["en", "fr"],
|
|
22
|
+
strategy: ["cookie"],
|
|
23
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
24
|
+
});
|
|
25
|
+
const request = new Request("http://example.com", {
|
|
26
|
+
headers: {
|
|
27
|
+
cookie: `PARAGLIDE_LOCALE=fr;session=abc`,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
31
|
+
expect(locale).toBe("fr");
|
|
32
|
+
});
|
|
33
|
+
test("returns the locale from the pathname for document requests", async () => {
|
|
34
|
+
const runtime = await createParaglide({
|
|
35
|
+
baseLocale: "en",
|
|
36
|
+
locales: ["en"],
|
|
37
|
+
strategy: ["url", "baseLocale"],
|
|
38
|
+
urlPatterns: [
|
|
39
|
+
{
|
|
40
|
+
pattern: "https://example.com/:path(.*)",
|
|
41
|
+
localized: [["en", "https://example.com/en/:path(.*)"]],
|
|
42
|
+
},
|
|
43
|
+
],
|
|
44
|
+
});
|
|
45
|
+
const request = new Request("https://example.com/en/home", {
|
|
46
|
+
headers: {
|
|
47
|
+
"Sec-Fetch-Dest": "document",
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
51
|
+
expect(locale).toBe("en");
|
|
52
|
+
});
|
|
53
|
+
test("uses the provided public url for url strategy matching", async () => {
|
|
54
|
+
const runtime = await createParaglide({
|
|
55
|
+
baseLocale: "en",
|
|
56
|
+
locales: ["en", "fr"],
|
|
57
|
+
strategy: ["url", "baseLocale"],
|
|
58
|
+
urlPatterns: [
|
|
59
|
+
{
|
|
60
|
+
pattern: "https://example.com/:path(.*)?",
|
|
61
|
+
localized: [
|
|
62
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
63
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
});
|
|
68
|
+
const request = new Request("http://internal.example.com/en/home", {
|
|
69
|
+
headers: {
|
|
70
|
+
"Sec-Fetch-Dest": "document",
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
const locale = runtime.extractLocaleFromRequest(request, {
|
|
74
|
+
effectiveRequestUrl: "https://example.com/fr/home",
|
|
75
|
+
});
|
|
76
|
+
expect(locale).toBe("fr");
|
|
77
|
+
});
|
|
78
|
+
test("resolves relative effectiveRequestUrl strings against request.url", async () => {
|
|
79
|
+
const runtime = await createParaglide({
|
|
80
|
+
baseLocale: "en",
|
|
81
|
+
locales: ["en", "fr"],
|
|
82
|
+
strategy: ["url", "baseLocale"],
|
|
83
|
+
urlPatterns: [
|
|
84
|
+
{
|
|
85
|
+
pattern: "https://example.com/:path(.*)?",
|
|
86
|
+
localized: [
|
|
87
|
+
["en", "https://example.com/en/:path(.*)?"],
|
|
88
|
+
["fr", "https://example.com/fr/:path(.*)?"],
|
|
89
|
+
],
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
});
|
|
93
|
+
const request = new Request("https://example.com/en/home", {
|
|
94
|
+
headers: {
|
|
95
|
+
"Sec-Fetch-Dest": "document",
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
const locale = runtime.extractLocaleFromRequest(request, {
|
|
99
|
+
effectiveRequestUrl: "/fr/home",
|
|
100
|
+
});
|
|
101
|
+
expect(locale).toBe("fr");
|
|
102
|
+
});
|
|
103
|
+
test("returns the baseLocale if no other strategy matches", async () => {
|
|
104
|
+
const runtime = await createParaglide({
|
|
105
|
+
baseLocale: "en",
|
|
106
|
+
locales: ["en"],
|
|
107
|
+
strategy: ["baseLocale"],
|
|
108
|
+
});
|
|
109
|
+
const request = new Request("http://example.com");
|
|
110
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
111
|
+
expect(locale).toBe("en");
|
|
112
|
+
});
|
|
113
|
+
test("throws an error if no locale is found", async () => {
|
|
114
|
+
const runtime = await createParaglide({
|
|
115
|
+
baseLocale: "en",
|
|
116
|
+
locales: ["en"],
|
|
117
|
+
strategy: ["cookie"],
|
|
118
|
+
});
|
|
119
|
+
const request = new Request("http://example.com");
|
|
120
|
+
expect(() => runtime.extractLocaleFromRequest(request)).toThrow("No locale found. There is an error in your strategy. Try adding 'baseLocale' as the very last strategy.");
|
|
121
|
+
});
|
|
122
|
+
test("returns the preferred locale from Accept-Language header", async () => {
|
|
123
|
+
const runtime = await createParaglide({
|
|
124
|
+
baseLocale: "en",
|
|
125
|
+
locales: ["en", "fr", "de"],
|
|
126
|
+
strategy: ["preferredLanguage", "baseLocale"],
|
|
127
|
+
});
|
|
128
|
+
// simple direct match
|
|
129
|
+
const request = new Request("http://example.com", {
|
|
130
|
+
headers: {
|
|
131
|
+
"Accept-Language": "en-US;q=0.8,fr;q=0.9,de;q=0.6",
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
135
|
+
expect(locale).toBe("fr");
|
|
136
|
+
// language tag match
|
|
137
|
+
const request2 = new Request("http://example.com", {
|
|
138
|
+
headers: {
|
|
139
|
+
"Accept-Language": "en-US;q=0.8,nl;q=0.9,de;q=0.7",
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
const locale2 = runtime.extractLocaleFromRequest(request2);
|
|
143
|
+
// Since "nl" isn't in our locales, and "de" has the highest q-value after "nl"
|
|
144
|
+
expect(locale2).toBe("en");
|
|
145
|
+
// no match
|
|
146
|
+
const request3 = new Request("http://example.com", {
|
|
147
|
+
headers: {
|
|
148
|
+
"Accept-Language": "nl;q=0.9,es;q=0.6",
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const locale3 = runtime.extractLocaleFromRequest(request3);
|
|
152
|
+
expect(locale3).toBe("en");
|
|
153
|
+
});
|
|
154
|
+
test("should fall back to next strategy when cookie contains invalid locale", async () => {
|
|
155
|
+
const runtime = await createParaglide({
|
|
156
|
+
baseLocale: "en",
|
|
157
|
+
locales: ["en", "fr"],
|
|
158
|
+
strategy: ["cookie", "baseLocale"],
|
|
159
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
160
|
+
});
|
|
161
|
+
// Request with an invalid locale in cookie
|
|
162
|
+
const request = new Request("http://example.com", {
|
|
163
|
+
headers: {
|
|
164
|
+
cookie: `PARAGLIDE_LOCALE=invalid_locale`,
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
// Should fall back to baseLocale
|
|
168
|
+
expect(runtime.extractLocaleFromRequest(request)).toBe("en");
|
|
169
|
+
});
|
|
170
|
+
test("skips over localStorage strategy as it is not supported on the server", async () => {
|
|
171
|
+
const runtime = await createParaglide({
|
|
172
|
+
baseLocale: "en",
|
|
173
|
+
locales: ["en", "fr"],
|
|
174
|
+
strategy: ["localStorage", "baseLocale"],
|
|
175
|
+
});
|
|
176
|
+
const request = new Request("http://example.com");
|
|
177
|
+
// expecting baseLocale
|
|
178
|
+
expect(runtime.extractLocaleFromRequest(request)).toBe("en");
|
|
179
|
+
});
|
|
180
|
+
test("resolves the locale from the url for all request types", async () => {
|
|
181
|
+
const runtime = await createParaglide({
|
|
182
|
+
baseLocale: "en",
|
|
183
|
+
locales: ["en", "fr"],
|
|
184
|
+
strategy: ["url", "baseLocale"],
|
|
185
|
+
urlPatterns: [
|
|
186
|
+
{
|
|
187
|
+
pattern: "https://example.com/:path(.*)",
|
|
188
|
+
localized: [
|
|
189
|
+
["en", "https://example.com/en/:path(.*)"],
|
|
190
|
+
["fr", "https://example.com/fr/:path(.*)"],
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
],
|
|
194
|
+
});
|
|
195
|
+
// Non-document request should still use URL strategy
|
|
196
|
+
const request = new Request("https://example.com/fr/home", {
|
|
197
|
+
headers: {
|
|
198
|
+
"Sec-Fetch-Dest": "something",
|
|
199
|
+
},
|
|
200
|
+
});
|
|
201
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
202
|
+
expect(locale).toBe("fr");
|
|
203
|
+
});
|
|
204
|
+
test("cookie strategy precedes URL strategy for API requests with wildcards", async () => {
|
|
205
|
+
const runtime = await createParaglide({
|
|
206
|
+
baseLocale: "en",
|
|
207
|
+
locales: ["en", "fr", "de"],
|
|
208
|
+
strategy: ["cookie", "url", "baseLocale"],
|
|
209
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
210
|
+
urlPatterns: [
|
|
211
|
+
{
|
|
212
|
+
pattern: "https://example.com/:path(.*)",
|
|
213
|
+
localized: [
|
|
214
|
+
["fr", "https://example.com/fr/:path(.*)"],
|
|
215
|
+
["de", "https://example.com/de/:path(.*)"],
|
|
216
|
+
["en", "https://example.com/:path(.*)"],
|
|
217
|
+
],
|
|
218
|
+
},
|
|
219
|
+
],
|
|
220
|
+
});
|
|
221
|
+
// API request with cookie should use cookie locale
|
|
222
|
+
const apiRequestWithCookie = new Request("https://example.com/api/data", {
|
|
223
|
+
headers: {
|
|
224
|
+
"Sec-Fetch-Dest": "empty",
|
|
225
|
+
cookie: "PARAGLIDE_LOCALE=de",
|
|
226
|
+
},
|
|
227
|
+
});
|
|
228
|
+
const apiLocale = runtime.extractLocaleFromRequest(apiRequestWithCookie);
|
|
229
|
+
expect(apiLocale).toBe("de");
|
|
230
|
+
// API request without cookie should fall back to URL strategy
|
|
231
|
+
const apiRequestNoMatch = new Request("https://example.com/api/data", {
|
|
232
|
+
headers: {
|
|
233
|
+
"Sec-Fetch-Dest": "empty",
|
|
234
|
+
},
|
|
235
|
+
});
|
|
236
|
+
const fallbackLocale = runtime.extractLocaleFromRequest(apiRequestNoMatch);
|
|
237
|
+
expect(fallbackLocale).toBe("en");
|
|
238
|
+
});
|
|
239
|
+
test("routeStrategies can override strategy order for matching routes", async () => {
|
|
240
|
+
const runtime = await createParaglide({
|
|
241
|
+
baseLocale: "en",
|
|
242
|
+
locales: ["en", "de"],
|
|
243
|
+
strategy: ["url", "cookie", "baseLocale"],
|
|
244
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
245
|
+
routeStrategies: [
|
|
246
|
+
{
|
|
247
|
+
match: "/dashboard/:path(.*)?",
|
|
248
|
+
strategy: ["cookie", "baseLocale"],
|
|
249
|
+
},
|
|
250
|
+
],
|
|
251
|
+
});
|
|
252
|
+
const request = new Request("https://example.com/dashboard", {
|
|
253
|
+
headers: {
|
|
254
|
+
cookie: "PARAGLIDE_LOCALE=de",
|
|
255
|
+
},
|
|
256
|
+
});
|
|
257
|
+
expect(runtime.extractLocaleFromRequest(request)).toBe("de");
|
|
258
|
+
});
|
|
259
|
+
// https://github.com/opral/inlang-paraglide-js/issues/436
|
|
260
|
+
test("preferredLanguage precedence over url", async () => {
|
|
261
|
+
const runtime = await createParaglide({
|
|
262
|
+
baseLocale: "en",
|
|
263
|
+
locales: ["en", "de"],
|
|
264
|
+
strategy: ["url", "preferredLanguage"],
|
|
265
|
+
urlPatterns: [
|
|
266
|
+
{
|
|
267
|
+
pattern: ":protocol://:domain(.*)::port??/:path(.*)?",
|
|
268
|
+
localized: [
|
|
269
|
+
["de", ":protocol://:domain(.*)::port?/de/:path(.*)?"],
|
|
270
|
+
["en", ":protocol://:domain(.*)::port?/en/:path(.*)?"],
|
|
271
|
+
],
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
});
|
|
275
|
+
// no locale in url, should use preferredLanguage
|
|
276
|
+
const request = new Request("https://example.com/home", {
|
|
277
|
+
headers: {
|
|
278
|
+
"Sec-Fetch-Dest": "document",
|
|
279
|
+
"Accept-Language": "de;q=0.9,en;q=0.8",
|
|
280
|
+
},
|
|
281
|
+
});
|
|
282
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
283
|
+
expect(locale).toBe("de");
|
|
284
|
+
});
|
|
285
|
+
test("sync version no longer supports custom strategies", async () => {
|
|
286
|
+
const runtime = await createParaglide({
|
|
287
|
+
baseLocale: "en",
|
|
288
|
+
locales: ["en", "fr", "de"],
|
|
289
|
+
strategy: ["custom-header", "baseLocale"],
|
|
290
|
+
});
|
|
291
|
+
// Define a custom strategy that extracts locale from a custom header
|
|
292
|
+
runtime.defineCustomServerStrategy("custom-header", {
|
|
293
|
+
getLocale: (request) => request?.headers.get("X-Custom-Locale") ?? undefined,
|
|
294
|
+
});
|
|
295
|
+
const request = new Request("http://example.com", {
|
|
296
|
+
headers: {
|
|
297
|
+
"X-Custom-Locale": "fr",
|
|
298
|
+
},
|
|
299
|
+
});
|
|
300
|
+
// Sync version skips custom strategies and falls back to baseLocale
|
|
301
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
302
|
+
expect(locale).toBe("en"); // baseLocale fallback
|
|
303
|
+
});
|
|
304
|
+
test("sync version skips custom strategy and falls back to next built-in strategy", async () => {
|
|
305
|
+
const runtime = await createParaglide({
|
|
306
|
+
baseLocale: "en",
|
|
307
|
+
locales: ["en", "fr"],
|
|
308
|
+
strategy: ["custom-fallback", "baseLocale"],
|
|
309
|
+
});
|
|
310
|
+
runtime.defineCustomServerStrategy("custom-fallback", {
|
|
311
|
+
getLocale: () => undefined,
|
|
312
|
+
});
|
|
313
|
+
const request = new Request("http://example.com");
|
|
314
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
315
|
+
expect(locale).toBe("en"); // Should fall back to baseLocale (skipping custom strategy)
|
|
316
|
+
});
|
|
317
|
+
test("sync version uses built-in strategies instead of custom strategies", async () => {
|
|
318
|
+
const runtime = await createParaglide({
|
|
319
|
+
baseLocale: "en",
|
|
320
|
+
locales: ["en", "fr", "de"],
|
|
321
|
+
strategy: ["custom-priority", "cookie", "baseLocale"],
|
|
322
|
+
cookieName: "PARAGLIDE_LOCALE",
|
|
323
|
+
});
|
|
324
|
+
runtime.defineCustomServerStrategy("custom-priority", {
|
|
325
|
+
getLocale: () => "de",
|
|
326
|
+
});
|
|
327
|
+
const request = new Request("http://example.com", {
|
|
328
|
+
headers: {
|
|
329
|
+
cookie: "PARAGLIDE_LOCALE=fr", // Cookie has different locale
|
|
330
|
+
},
|
|
331
|
+
});
|
|
332
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
333
|
+
expect(locale).toBe("fr"); // Should use cookie since custom strategy is skipped in sync version
|
|
334
|
+
});
|
|
335
|
+
test("sync version skips all custom strategies and uses baseLocale", async () => {
|
|
336
|
+
const runtime = await createParaglide({
|
|
337
|
+
baseLocale: "en",
|
|
338
|
+
locales: ["en", "fr", "de"],
|
|
339
|
+
strategy: ["custom-first", "custom-second", "baseLocale"],
|
|
340
|
+
});
|
|
341
|
+
runtime.defineCustomServerStrategy("custom-first", {
|
|
342
|
+
getLocale: () => undefined,
|
|
343
|
+
});
|
|
344
|
+
runtime.defineCustomServerStrategy("custom-second", {
|
|
345
|
+
getLocale: () => "fr",
|
|
346
|
+
});
|
|
347
|
+
const request = new Request("http://example.com");
|
|
348
|
+
const locale = runtime.extractLocaleFromRequest(request);
|
|
349
|
+
expect(locale).toBe("en"); // Should skip all custom strategies and use baseLocale
|
|
350
|
+
});
|
|
351
|
+
//# sourceMappingURL=extract-locale-from-request.test.js.map
|