@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.
Files changed (715) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +67 -0
  3. package/bin/run.js +4 -0
  4. package/dist/bundler-plugins/esbuild.d.ts +1 -0
  5. package/dist/bundler-plugins/esbuild.d.ts.map +1 -0
  6. package/dist/bundler-plugins/esbuild.js +4 -0
  7. package/dist/bundler-plugins/esbuild.js.map +1 -0
  8. package/dist/bundler-plugins/index.d.ts +6 -0
  9. package/dist/bundler-plugins/index.d.ts.map +1 -0
  10. package/dist/bundler-plugins/index.js +7 -0
  11. package/dist/bundler-plugins/index.js.map +1 -0
  12. package/dist/bundler-plugins/lazy-modules/scan-message-keys.d.ts +19 -0
  13. package/dist/bundler-plugins/lazy-modules/scan-message-keys.d.ts.map +1 -0
  14. package/dist/bundler-plugins/lazy-modules/scan-message-keys.js +85 -0
  15. package/dist/bundler-plugins/lazy-modules/scan-message-keys.js.map +1 -0
  16. package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.d.ts +2 -0
  17. package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.d.ts.map +1 -0
  18. package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.js +53 -0
  19. package/dist/bundler-plugins/lazy-modules/scan-message-keys.test.js.map +1 -0
  20. package/dist/bundler-plugins/lazy-modules/ssr.d.ts +31 -0
  21. package/dist/bundler-plugins/lazy-modules/ssr.d.ts.map +1 -0
  22. package/dist/bundler-plugins/lazy-modules/ssr.js +42 -0
  23. package/dist/bundler-plugins/lazy-modules/ssr.js.map +1 -0
  24. package/dist/bundler-plugins/lazy-modules/ssr.test.d.ts +2 -0
  25. package/dist/bundler-plugins/lazy-modules/ssr.test.d.ts.map +1 -0
  26. package/dist/bundler-plugins/lazy-modules/ssr.test.js +48 -0
  27. package/dist/bundler-plugins/lazy-modules/ssr.test.js.map +1 -0
  28. package/dist/bundler-plugins/lazy-modules/virtual-ids.d.ts +7 -0
  29. package/dist/bundler-plugins/lazy-modules/virtual-ids.d.ts.map +1 -0
  30. package/dist/bundler-plugins/lazy-modules/virtual-ids.js +30 -0
  31. package/dist/bundler-plugins/lazy-modules/virtual-ids.js.map +1 -0
  32. package/dist/bundler-plugins/lazy-modules/virtual.d.ts +86 -0
  33. package/dist/bundler-plugins/lazy-modules/virtual.d.ts.map +1 -0
  34. package/dist/bundler-plugins/lazy-modules/virtual.js +2 -0
  35. package/dist/bundler-plugins/lazy-modules/virtual.js.map +1 -0
  36. package/dist/bundler-plugins/lazy-modules/vite-plugin.d.ts +18 -0
  37. package/dist/bundler-plugins/lazy-modules/vite-plugin.d.ts.map +1 -0
  38. package/dist/bundler-plugins/lazy-modules/vite-plugin.js +328 -0
  39. package/dist/bundler-plugins/lazy-modules/vite-plugin.js.map +1 -0
  40. package/dist/bundler-plugins/lazy-modules/vite-plugin.test.d.ts +2 -0
  41. package/dist/bundler-plugins/lazy-modules/vite-plugin.test.d.ts.map +1 -0
  42. package/dist/bundler-plugins/lazy-modules/vite-plugin.test.js +45 -0
  43. package/dist/bundler-plugins/lazy-modules/vite-plugin.test.js.map +1 -0
  44. package/dist/bundler-plugins/per-locale-build/constants.d.ts +2 -0
  45. package/dist/bundler-plugins/per-locale-build/constants.d.ts.map +1 -0
  46. package/dist/bundler-plugins/per-locale-build/constants.js +3 -0
  47. package/dist/bundler-plugins/per-locale-build/constants.js.map +1 -0
  48. package/dist/bundler-plugins/per-locale-build/index.d.ts +6 -0
  49. package/dist/bundler-plugins/per-locale-build/index.d.ts.map +1 -0
  50. package/dist/bundler-plugins/per-locale-build/index.js +43 -0
  51. package/dist/bundler-plugins/per-locale-build/index.js.map +1 -0
  52. package/dist/bundler-plugins/per-locale-build/locale-id.d.ts +8 -0
  53. package/dist/bundler-plugins/per-locale-build/locale-id.d.ts.map +1 -0
  54. package/dist/bundler-plugins/per-locale-build/locale-id.js +13 -0
  55. package/dist/bundler-plugins/per-locale-build/locale-id.js.map +1 -0
  56. package/dist/bundler-plugins/per-locale-build/types.d.ts +4 -0
  57. package/dist/bundler-plugins/per-locale-build/types.d.ts.map +1 -0
  58. package/dist/bundler-plugins/per-locale-build/types.js +2 -0
  59. package/dist/bundler-plugins/per-locale-build/types.js.map +1 -0
  60. package/dist/bundler-plugins/per-locale-build/vite-environments.d.ts +51 -0
  61. package/dist/bundler-plugins/per-locale-build/vite-environments.d.ts.map +1 -0
  62. package/dist/bundler-plugins/per-locale-build/vite-environments.js +250 -0
  63. package/dist/bundler-plugins/per-locale-build/vite-environments.js.map +1 -0
  64. package/dist/bundler-plugins/per-locale-build/vite-environments.test.d.ts +1 -0
  65. package/dist/bundler-plugins/per-locale-build/vite-environments.test.d.ts.map +1 -0
  66. package/dist/bundler-plugins/per-locale-build/vite-environments.test.js +250 -0
  67. package/dist/bundler-plugins/per-locale-build/vite-environments.test.js.map +1 -0
  68. package/dist/bundler-plugins/plugin-core.d.ts +74 -0
  69. package/dist/bundler-plugins/plugin-core.d.ts.map +1 -0
  70. package/dist/bundler-plugins/plugin-core.js +292 -0
  71. package/dist/bundler-plugins/plugin-core.js.map +1 -0
  72. package/dist/bundler-plugins/rolldown.d.ts +10 -0
  73. package/dist/bundler-plugins/rolldown.d.ts.map +1 -0
  74. package/dist/bundler-plugins/rolldown.js +36 -0
  75. package/dist/bundler-plugins/rolldown.js.map +1 -0
  76. package/dist/bundler-plugins/rolldown.test.d.ts +1 -0
  77. package/dist/bundler-plugins/rolldown.test.d.ts.map +1 -0
  78. package/dist/bundler-plugins/rolldown.test.js +72 -0
  79. package/dist/bundler-plugins/rolldown.test.js.map +1 -0
  80. package/dist/bundler-plugins/rollup.d.ts +1 -0
  81. package/dist/bundler-plugins/rollup.d.ts.map +1 -0
  82. package/dist/bundler-plugins/rollup.js +4 -0
  83. package/dist/bundler-plugins/rollup.js.map +1 -0
  84. package/dist/bundler-plugins/rspack.d.ts +1 -0
  85. package/dist/bundler-plugins/rspack.d.ts.map +1 -0
  86. package/dist/bundler-plugins/rspack.js +4 -0
  87. package/dist/bundler-plugins/rspack.js.map +1 -0
  88. package/dist/bundler-plugins/unplugin.d.ts +3 -0
  89. package/dist/bundler-plugins/unplugin.d.ts.map +1 -0
  90. package/dist/bundler-plugins/unplugin.js +62 -0
  91. package/dist/bundler-plugins/unplugin.js.map +1 -0
  92. package/dist/bundler-plugins/unplugin.test.d.ts +1 -0
  93. package/dist/bundler-plugins/unplugin.test.d.ts.map +1 -0
  94. package/dist/bundler-plugins/unplugin.test.js +256 -0
  95. package/dist/bundler-plugins/unplugin.test.js.map +1 -0
  96. package/dist/bundler-plugins/virtual-modules.test.d.ts +1 -0
  97. package/dist/bundler-plugins/virtual-modules.test.d.ts.map +1 -0
  98. package/dist/bundler-plugins/virtual-modules.test.js +77 -0
  99. package/dist/bundler-plugins/virtual-modules.test.js.map +1 -0
  100. package/dist/bundler-plugins/vite.d.ts +17 -0
  101. package/dist/bundler-plugins/vite.d.ts.map +1 -0
  102. package/dist/bundler-plugins/vite.js +15 -0
  103. package/dist/bundler-plugins/vite.js.map +1 -0
  104. package/dist/bundler-plugins/vite.test.d.ts +1 -0
  105. package/dist/bundler-plugins/vite.test.d.ts.map +1 -0
  106. package/dist/bundler-plugins/vite.test.js +61 -0
  107. package/dist/bundler-plugins/vite.test.js.map +1 -0
  108. package/dist/bundler-plugins/webpack.d.ts +1 -0
  109. package/dist/bundler-plugins/webpack.d.ts.map +1 -0
  110. package/dist/bundler-plugins/webpack.js +4 -0
  111. package/dist/bundler-plugins/webpack.js.map +1 -0
  112. package/dist/cli/commands/compile/command.d.ts +2 -0
  113. package/dist/cli/commands/compile/command.d.ts.map +1 -0
  114. package/dist/cli/commands/compile/command.js +225 -0
  115. package/dist/cli/commands/compile/command.js.map +1 -0
  116. package/dist/cli/commands/compile/command.test.d.ts +1 -0
  117. package/dist/cli/commands/compile/command.test.d.ts.map +1 -0
  118. package/dist/cli/commands/compile/command.test.js +69 -0
  119. package/dist/cli/commands/compile/command.test.js.map +1 -0
  120. package/dist/cli/commands/init/command.d.ts +2 -0
  121. package/dist/cli/commands/init/command.d.ts.map +1 -0
  122. package/dist/cli/commands/init/command.js +90 -0
  123. package/dist/cli/commands/init/command.js.map +1 -0
  124. package/dist/cli/defaults.d.ts +11 -0
  125. package/dist/cli/defaults.d.ts.map +1 -0
  126. package/dist/cli/defaults.js +13 -0
  127. package/dist/cli/defaults.js.map +1 -0
  128. package/dist/cli/index.d.ts +2 -0
  129. package/dist/cli/index.d.ts.map +1 -0
  130. package/dist/cli/index.js +11 -0
  131. package/dist/cli/index.js.map +1 -0
  132. package/dist/cli/steps/add-vite-plugin.d.ts +31 -0
  133. package/dist/cli/steps/add-vite-plugin.d.ts.map +1 -0
  134. package/dist/cli/steps/add-vite-plugin.js +65 -0
  135. package/dist/cli/steps/add-vite-plugin.js.map +1 -0
  136. package/dist/cli/steps/add-vite-plugin.test.d.ts +1 -0
  137. package/dist/cli/steps/add-vite-plugin.test.d.ts.map +1 -0
  138. package/dist/cli/steps/add-vite-plugin.test.js +74 -0
  139. package/dist/cli/steps/add-vite-plugin.test.js.map +1 -0
  140. package/dist/cli/steps/check-for-uncomitted-changes.d.ts +5 -0
  141. package/dist/cli/steps/check-for-uncomitted-changes.d.ts.map +1 -0
  142. package/dist/cli/steps/check-for-uncomitted-changes.js +37 -0
  143. package/dist/cli/steps/check-for-uncomitted-changes.js.map +1 -0
  144. package/dist/cli/steps/detect-bundler.d.ts +10 -0
  145. package/dist/cli/steps/detect-bundler.d.ts.map +1 -0
  146. package/dist/cli/steps/detect-bundler.js +22 -0
  147. package/dist/cli/steps/detect-bundler.js.map +1 -0
  148. package/dist/cli/steps/detect-bundler.test.d.ts +1 -0
  149. package/dist/cli/steps/detect-bundler.test.d.ts.map +1 -0
  150. package/dist/cli/steps/detect-bundler.test.js +29 -0
  151. package/dist/cli/steps/detect-bundler.test.js.map +1 -0
  152. package/dist/cli/steps/initialize-messages.d.ts +11 -0
  153. package/dist/cli/steps/initialize-messages.d.ts.map +1 -0
  154. package/dist/cli/steps/initialize-messages.js +31 -0
  155. package/dist/cli/steps/initialize-messages.js.map +1 -0
  156. package/dist/cli/steps/prompt-for-outdir.d.ts +8 -0
  157. package/dist/cli/steps/prompt-for-outdir.d.ts.map +1 -0
  158. package/dist/cli/steps/prompt-for-outdir.js +19 -0
  159. package/dist/cli/steps/prompt-for-outdir.js.map +1 -0
  160. package/dist/cli/steps/update-package-json.d.ts +11 -0
  161. package/dist/cli/steps/update-package-json.d.ts.map +1 -0
  162. package/dist/cli/steps/update-package-json.js +34 -0
  163. package/dist/cli/steps/update-package-json.js.map +1 -0
  164. package/dist/cli/steps/update-ts-config.d.ts +26 -0
  165. package/dist/cli/steps/update-ts-config.d.ts.map +1 -0
  166. package/dist/cli/steps/update-ts-config.js +270 -0
  167. package/dist/cli/steps/update-ts-config.js.map +1 -0
  168. package/dist/cli/steps/update-ts-config.test.d.ts +1 -0
  169. package/dist/cli/steps/update-ts-config.test.d.ts.map +1 -0
  170. package/dist/cli/steps/update-ts-config.test.js +60 -0
  171. package/dist/cli/steps/update-ts-config.test.js.map +1 -0
  172. package/dist/cli/utils.d.ts +36 -0
  173. package/dist/cli/utils.d.ts.map +1 -0
  174. package/dist/cli/utils.js +20 -0
  175. package/dist/cli/utils.js.map +1 -0
  176. package/dist/compiler/assert-url-pattern-available.d.ts +7 -0
  177. package/dist/compiler/assert-url-pattern-available.d.ts.map +1 -0
  178. package/dist/compiler/assert-url-pattern-available.js +17 -0
  179. package/dist/compiler/assert-url-pattern-available.js.map +1 -0
  180. package/dist/compiler/compile-annotation.d.ts +12 -0
  181. package/dist/compiler/compile-annotation.d.ts.map +1 -0
  182. package/dist/compiler/compile-annotation.js +136 -0
  183. package/dist/compiler/compile-annotation.js.map +1 -0
  184. package/dist/compiler/compile-bundle.d.ts +28 -0
  185. package/dist/compiler/compile-bundle.d.ts.map +1 -0
  186. package/dist/compiler/compile-bundle.js +431 -0
  187. package/dist/compiler/compile-bundle.js.map +1 -0
  188. package/dist/compiler/compile-bundle.test.d.ts +1 -0
  189. package/dist/compiler/compile-bundle.test.d.ts.map +1 -0
  190. package/dist/compiler/compile-bundle.test.js +399 -0
  191. package/dist/compiler/compile-bundle.test.js.map +1 -0
  192. package/dist/compiler/compile-local-variable.d.ts +16 -0
  193. package/dist/compiler/compile-local-variable.d.ts.map +1 -0
  194. package/dist/compiler/compile-local-variable.js +28 -0
  195. package/dist/compiler/compile-local-variable.js.map +1 -0
  196. package/dist/compiler/compile-local-variable.test.d.ts +1 -0
  197. package/dist/compiler/compile-local-variable.test.d.ts.map +1 -0
  198. package/dist/compiler/compile-local-variable.test.js +359 -0
  199. package/dist/compiler/compile-local-variable.test.js.map +1 -0
  200. package/dist/compiler/compile-message.d.ts +8 -0
  201. package/dist/compiler/compile-message.d.ts.map +1 -0
  202. package/dist/compiler/compile-message.js +174 -0
  203. package/dist/compiler/compile-message.js.map +1 -0
  204. package/dist/compiler/compile-message.test.d.ts +1 -0
  205. package/dist/compiler/compile-message.test.d.ts.map +1 -0
  206. package/dist/compiler/compile-message.test.js +1060 -0
  207. package/dist/compiler/compile-message.test.js.map +1 -0
  208. package/dist/compiler/compile-pattern.d.ts +29 -0
  209. package/dist/compiler/compile-pattern.d.ts.map +1 -0
  210. package/dist/compiler/compile-pattern.js +143 -0
  211. package/dist/compiler/compile-pattern.js.map +1 -0
  212. package/dist/compiler/compile-pattern.test.d.ts +1 -0
  213. package/dist/compiler/compile-pattern.test.d.ts.map +1 -0
  214. package/dist/compiler/compile-pattern.test.js +255 -0
  215. package/dist/compiler/compile-pattern.test.js.map +1 -0
  216. package/dist/compiler/compile-project.d.ts +21 -0
  217. package/dist/compiler/compile-project.d.ts.map +1 -0
  218. package/dist/compiler/compile-project.js +147 -0
  219. package/dist/compiler/compile-project.js.map +1 -0
  220. package/dist/compiler/compile-project.test.d.ts +1 -0
  221. package/dist/compiler/compile-project.test.d.ts.map +1 -0
  222. package/dist/compiler/compile-project.test.js +1709 -0
  223. package/dist/compiler/compile-project.test.js.map +1 -0
  224. package/dist/compiler/compile.bench.d.ts +1 -0
  225. package/dist/compiler/compile.bench.d.ts.map +1 -0
  226. package/dist/compiler/compile.bench.js +89 -0
  227. package/dist/compiler/compile.bench.js.map +1 -0
  228. package/dist/compiler/compile.d.ts +24 -0
  229. package/dist/compiler/compile.d.ts.map +1 -0
  230. package/dist/compiler/compile.js +106 -0
  231. package/dist/compiler/compile.js.map +1 -0
  232. package/dist/compiler/compile.test.d.ts +1 -0
  233. package/dist/compiler/compile.test.d.ts.map +1 -0
  234. package/dist/compiler/compile.test.js +66 -0
  235. package/dist/compiler/compile.test.js.map +1 -0
  236. package/dist/compiler/compiler-options.d.ts +466 -0
  237. package/dist/compiler/compiler-options.d.ts.map +1 -0
  238. package/dist/compiler/compiler-options.js +22 -0
  239. package/dist/compiler/compiler-options.js.map +1 -0
  240. package/dist/compiler/create-paraglide.d.ts +21 -0
  241. package/dist/compiler/create-paraglide.d.ts.map +1 -0
  242. package/dist/compiler/create-paraglide.js +69 -0
  243. package/dist/compiler/create-paraglide.js.map +1 -0
  244. package/dist/compiler/create-paraglide.test.d.ts +1 -0
  245. package/dist/compiler/create-paraglide.test.d.ts.map +1 -0
  246. package/dist/compiler/create-paraglide.test.js +55 -0
  247. package/dist/compiler/create-paraglide.test.js.map +1 -0
  248. package/dist/compiler/create-readme.d.ts +9 -0
  249. package/dist/compiler/create-readme.d.ts.map +1 -0
  250. package/dist/compiler/create-readme.js +127 -0
  251. package/dist/compiler/create-readme.js.map +1 -0
  252. package/dist/compiler/emit-files.d.ts +15 -0
  253. package/dist/compiler/emit-files.d.ts.map +1 -0
  254. package/dist/compiler/emit-files.js +58 -0
  255. package/dist/compiler/emit-files.js.map +1 -0
  256. package/dist/compiler/emit-files.test.d.ts +1 -0
  257. package/dist/compiler/emit-files.test.d.ts.map +1 -0
  258. package/dist/compiler/emit-files.test.js +43 -0
  259. package/dist/compiler/emit-files.test.js.map +1 -0
  260. package/dist/compiler/emit-ts-declarations.d.ts +11 -0
  261. package/dist/compiler/emit-ts-declarations.d.ts.map +1 -0
  262. package/dist/compiler/emit-ts-declarations.interop.test.d.ts +1 -0
  263. package/dist/compiler/emit-ts-declarations.interop.test.d.ts.map +1 -0
  264. package/dist/compiler/emit-ts-declarations.interop.test.js +33 -0
  265. package/dist/compiler/emit-ts-declarations.interop.test.js.map +1 -0
  266. package/dist/compiler/emit-ts-declarations.js +353 -0
  267. package/dist/compiler/emit-ts-declarations.js.map +1 -0
  268. package/dist/compiler/emit-ts-declarations.test.d.ts +1 -0
  269. package/dist/compiler/emit-ts-declarations.test.d.ts.map +1 -0
  270. package/dist/compiler/emit-ts-declarations.test.js +161 -0
  271. package/dist/compiler/emit-ts-declarations.test.js.map +1 -0
  272. package/dist/compiler/index.d.ts +13 -0
  273. package/dist/compiler/index.d.ts.map +1 -0
  274. package/dist/compiler/index.js +11 -0
  275. package/dist/compiler/index.js.map +1 -0
  276. package/dist/compiler/jsdoc-types.d.ts +21 -0
  277. package/dist/compiler/jsdoc-types.d.ts.map +1 -0
  278. package/dist/compiler/jsdoc-types.js +59 -0
  279. package/dist/compiler/jsdoc-types.js.map +1 -0
  280. package/dist/compiler/jsdoc-types.test.d.ts +1 -0
  281. package/dist/compiler/jsdoc-types.test.d.ts.map +1 -0
  282. package/dist/compiler/jsdoc-types.test.js +100 -0
  283. package/dist/compiler/jsdoc-types.test.js.map +1 -0
  284. package/dist/compiler/lazy-modules/compile-cache.d.ts +37 -0
  285. package/dist/compiler/lazy-modules/compile-cache.d.ts.map +1 -0
  286. package/dist/compiler/lazy-modules/compile-cache.js +34 -0
  287. package/dist/compiler/lazy-modules/compile-cache.js.map +1 -0
  288. package/dist/compiler/lazy-modules/compile-project.lazy.test.d.ts +2 -0
  289. package/dist/compiler/lazy-modules/compile-project.lazy.test.d.ts.map +1 -0
  290. package/dist/compiler/lazy-modules/compile-project.lazy.test.js +65 -0
  291. package/dist/compiler/lazy-modules/compile-project.lazy.test.js.map +1 -0
  292. package/dist/compiler/lazy-modules/create-loader.d.ts +18 -0
  293. package/dist/compiler/lazy-modules/create-loader.d.ts.map +1 -0
  294. package/dist/compiler/lazy-modules/create-loader.js +182 -0
  295. package/dist/compiler/lazy-modules/create-loader.js.map +1 -0
  296. package/dist/compiler/lazy-modules/create-loader.test.d.ts +2 -0
  297. package/dist/compiler/lazy-modules/create-loader.test.d.ts.map +1 -0
  298. package/dist/compiler/lazy-modules/create-loader.test.js +82 -0
  299. package/dist/compiler/lazy-modules/create-loader.test.js.map +1 -0
  300. package/dist/compiler/lazy-modules/manifest.d.ts +32 -0
  301. package/dist/compiler/lazy-modules/manifest.d.ts.map +1 -0
  302. package/dist/compiler/lazy-modules/manifest.js +11 -0
  303. package/dist/compiler/lazy-modules/manifest.js.map +1 -0
  304. package/dist/compiler/match-literals.d.ts +2 -0
  305. package/dist/compiler/match-literals.d.ts.map +1 -0
  306. package/dist/compiler/match-literals.js +42 -0
  307. package/dist/compiler/match-literals.js.map +1 -0
  308. package/dist/compiler/output-structure/lazy-modules.d.ts +27 -0
  309. package/dist/compiler/output-structure/lazy-modules.d.ts.map +1 -0
  310. package/dist/compiler/output-structure/lazy-modules.js +157 -0
  311. package/dist/compiler/output-structure/lazy-modules.js.map +1 -0
  312. package/dist/compiler/output-structure/lazy-modules.test.d.ts +2 -0
  313. package/dist/compiler/output-structure/lazy-modules.test.d.ts.map +1 -0
  314. package/dist/compiler/output-structure/lazy-modules.test.js +128 -0
  315. package/dist/compiler/output-structure/lazy-modules.test.js.map +1 -0
  316. package/dist/compiler/output-structure/locale-modules.d.ts +4 -0
  317. package/dist/compiler/output-structure/locale-modules.d.ts.map +1 -0
  318. package/dist/compiler/output-structure/locale-modules.js +81 -0
  319. package/dist/compiler/output-structure/locale-modules.js.map +1 -0
  320. package/dist/compiler/output-structure/locale-modules.test.d.ts +1 -0
  321. package/dist/compiler/output-structure/locale-modules.test.d.ts.map +1 -0
  322. package/dist/compiler/output-structure/locale-modules.test.js +163 -0
  323. package/dist/compiler/output-structure/locale-modules.test.js.map +1 -0
  324. package/dist/compiler/output-structure/message-modules.d.ts +4 -0
  325. package/dist/compiler/output-structure/message-modules.d.ts.map +1 -0
  326. package/dist/compiler/output-structure/message-modules.js +100 -0
  327. package/dist/compiler/output-structure/message-modules.js.map +1 -0
  328. package/dist/compiler/output-structure/message-modules.test.d.ts +1 -0
  329. package/dist/compiler/output-structure/message-modules.test.d.ts.map +1 -0
  330. package/dist/compiler/output-structure/message-modules.test.js +148 -0
  331. package/dist/compiler/output-structure/message-modules.test.js.map +1 -0
  332. package/dist/compiler/per-locale-build.d.ts +2 -0
  333. package/dist/compiler/per-locale-build.d.ts.map +1 -0
  334. package/dist/compiler/per-locale-build.js +3 -0
  335. package/dist/compiler/per-locale-build.js.map +1 -0
  336. package/dist/compiler/registry.d.ts +13 -0
  337. package/dist/compiler/registry.d.ts.map +1 -0
  338. package/dist/compiler/registry.js +60 -0
  339. package/dist/compiler/registry.js.map +1 -0
  340. package/dist/compiler/resolve-tsc-js-path.d.ts +9 -0
  341. package/dist/compiler/resolve-tsc-js-path.d.ts.map +1 -0
  342. package/dist/compiler/resolve-tsc-js-path.js +23 -0
  343. package/dist/compiler/resolve-tsc-js-path.js.map +1 -0
  344. package/dist/compiler/runtime/check-locale.d.ts +31 -0
  345. package/dist/compiler/runtime/check-locale.d.ts.map +1 -0
  346. package/dist/compiler/runtime/check-locale.js +51 -0
  347. package/dist/compiler/runtime/check-locale.js.map +1 -0
  348. package/dist/compiler/runtime/check-locale.test.d.ts +1 -0
  349. package/dist/compiler/runtime/check-locale.test.d.ts.map +1 -0
  350. package/dist/compiler/runtime/check-locale.test.js +84 -0
  351. package/dist/compiler/runtime/check-locale.test.js.map +1 -0
  352. package/dist/compiler/runtime/create-runtime.d.ts +35 -0
  353. package/dist/compiler/runtime/create-runtime.d.ts.map +1 -0
  354. package/dist/compiler/runtime/create-runtime.js +196 -0
  355. package/dist/compiler/runtime/create-runtime.js.map +1 -0
  356. package/dist/compiler/runtime/extract-locale-from-cookie.d.ts +13 -0
  357. package/dist/compiler/runtime/extract-locale-from-cookie.d.ts.map +1 -0
  358. package/dist/compiler/runtime/extract-locale-from-cookie.js +43 -0
  359. package/dist/compiler/runtime/extract-locale-from-cookie.js.map +1 -0
  360. package/dist/compiler/runtime/extract-locale-from-cookie.test.d.ts +1 -0
  361. package/dist/compiler/runtime/extract-locale-from-cookie.test.d.ts.map +1 -0
  362. package/dist/compiler/runtime/extract-locale-from-cookie.test.js +149 -0
  363. package/dist/compiler/runtime/extract-locale-from-cookie.test.js.map +1 -0
  364. package/dist/compiler/runtime/extract-locale-from-header.d.ts +13 -0
  365. package/dist/compiler/runtime/extract-locale-from-header.d.ts.map +1 -0
  366. package/dist/compiler/runtime/extract-locale-from-header.js +45 -0
  367. package/dist/compiler/runtime/extract-locale-from-header.js.map +1 -0
  368. package/dist/compiler/runtime/extract-locale-from-header.test.d.ts +1 -0
  369. package/dist/compiler/runtime/extract-locale-from-header.test.d.ts.map +1 -0
  370. package/dist/compiler/runtime/extract-locale-from-header.test.js +55 -0
  371. package/dist/compiler/runtime/extract-locale-from-header.test.js.map +1 -0
  372. package/dist/compiler/runtime/extract-locale-from-navigator.d.ts +12 -0
  373. package/dist/compiler/runtime/extract-locale-from-navigator.d.ts.map +1 -0
  374. package/dist/compiler/runtime/extract-locale-from-navigator.js +33 -0
  375. package/dist/compiler/runtime/extract-locale-from-navigator.js.map +1 -0
  376. package/dist/compiler/runtime/extract-locale-from-navigator.test.d.ts +1 -0
  377. package/dist/compiler/runtime/extract-locale-from-navigator.test.d.ts.map +1 -0
  378. package/dist/compiler/runtime/extract-locale-from-navigator.test.js +45 -0
  379. package/dist/compiler/runtime/extract-locale-from-navigator.test.js.map +1 -0
  380. package/dist/compiler/runtime/extract-locale-from-request-async.d.ts +34 -0
  381. package/dist/compiler/runtime/extract-locale-from-request-async.d.ts.map +1 -0
  382. package/dist/compiler/runtime/extract-locale-from-request-async.js +70 -0
  383. package/dist/compiler/runtime/extract-locale-from-request-async.js.map +1 -0
  384. package/dist/compiler/runtime/extract-locale-from-request-async.test.d.ts +1 -0
  385. package/dist/compiler/runtime/extract-locale-from-request-async.test.d.ts.map +1 -0
  386. package/dist/compiler/runtime/extract-locale-from-request-async.test.js +119 -0
  387. package/dist/compiler/runtime/extract-locale-from-request-async.test.js.map +1 -0
  388. package/dist/compiler/runtime/extract-locale-from-request.d.ts +41 -0
  389. package/dist/compiler/runtime/extract-locale-from-request.d.ts.map +1 -0
  390. package/dist/compiler/runtime/extract-locale-from-request.js +96 -0
  391. package/dist/compiler/runtime/extract-locale-from-request.js.map +1 -0
  392. package/dist/compiler/runtime/extract-locale-from-request.test.d.ts +1 -0
  393. package/dist/compiler/runtime/extract-locale-from-request.test.d.ts.map +1 -0
  394. package/dist/compiler/runtime/extract-locale-from-request.test.js +351 -0
  395. package/dist/compiler/runtime/extract-locale-from-request.test.js.map +1 -0
  396. package/dist/compiler/runtime/extract-locale-from-url.d.ts +11 -0
  397. package/dist/compiler/runtime/extract-locale-from-url.d.ts.map +1 -0
  398. package/dist/compiler/runtime/extract-locale-from-url.js +68 -0
  399. package/dist/compiler/runtime/extract-locale-from-url.js.map +1 -0
  400. package/dist/compiler/runtime/extract-locale-from-url.test.d.ts +1 -0
  401. package/dist/compiler/runtime/extract-locale-from-url.test.d.ts.map +1 -0
  402. package/dist/compiler/runtime/extract-locale-from-url.test.js +127 -0
  403. package/dist/compiler/runtime/extract-locale-from-url.test.js.map +1 -0
  404. package/dist/compiler/runtime/generate-static-localized-urls.d.ts +44 -0
  405. package/dist/compiler/runtime/generate-static-localized-urls.d.ts.map +1 -0
  406. package/dist/compiler/runtime/generate-static-localized-urls.js +133 -0
  407. package/dist/compiler/runtime/generate-static-localized-urls.js.map +1 -0
  408. package/dist/compiler/runtime/generate-static-localized-urls.test.d.ts +1 -0
  409. package/dist/compiler/runtime/generate-static-localized-urls.test.d.ts.map +1 -0
  410. package/dist/compiler/runtime/generate-static-localized-urls.test.js +159 -0
  411. package/dist/compiler/runtime/generate-static-localized-urls.test.js.map +1 -0
  412. package/dist/compiler/runtime/get-locale.d.ts +42 -0
  413. package/dist/compiler/runtime/get-locale.d.ts.map +1 -0
  414. package/dist/compiler/runtime/get-locale.js +158 -0
  415. package/dist/compiler/runtime/get-locale.js.map +1 -0
  416. package/dist/compiler/runtime/get-locale.test.d.ts +1 -0
  417. package/dist/compiler/runtime/get-locale.test.d.ts.map +1 -0
  418. package/dist/compiler/runtime/get-locale.test.js +295 -0
  419. package/dist/compiler/runtime/get-locale.test.js.map +1 -0
  420. package/dist/compiler/runtime/get-text-direction.d.ts +15 -0
  421. package/dist/compiler/runtime/get-text-direction.d.ts.map +1 -0
  422. package/dist/compiler/runtime/get-text-direction.js +46 -0
  423. package/dist/compiler/runtime/get-text-direction.js.map +1 -0
  424. package/dist/compiler/runtime/get-text-direction.test.d.ts +1 -0
  425. package/dist/compiler/runtime/get-text-direction.test.d.ts.map +1 -0
  426. package/dist/compiler/runtime/get-text-direction.test.js +40 -0
  427. package/dist/compiler/runtime/get-text-direction.test.js.map +1 -0
  428. package/dist/compiler/runtime/get-url-origin.d.ts +19 -0
  429. package/dist/compiler/runtime/get-url-origin.d.ts.map +1 -0
  430. package/dist/compiler/runtime/get-url-origin.js +31 -0
  431. package/dist/compiler/runtime/get-url-origin.js.map +1 -0
  432. package/dist/compiler/runtime/get-url-origin.test.d.ts +1 -0
  433. package/dist/compiler/runtime/get-url-origin.test.d.ts.map +1 -0
  434. package/dist/compiler/runtime/get-url-origin.test.js +18 -0
  435. package/dist/compiler/runtime/get-url-origin.test.js.map +1 -0
  436. package/dist/compiler/runtime/host-routing.d.ts +28 -0
  437. package/dist/compiler/runtime/host-routing.d.ts.map +1 -0
  438. package/dist/compiler/runtime/host-routing.js +79 -0
  439. package/dist/compiler/runtime/host-routing.js.map +1 -0
  440. package/dist/compiler/runtime/host-routing.test.d.ts +1 -0
  441. package/dist/compiler/runtime/host-routing.test.d.ts.map +1 -0
  442. package/dist/compiler/runtime/host-routing.test.js +128 -0
  443. package/dist/compiler/runtime/host-routing.test.js.map +1 -0
  444. package/dist/compiler/runtime/localize-href.d.ts +84 -0
  445. package/dist/compiler/runtime/localize-href.d.ts.map +1 -0
  446. package/dist/compiler/runtime/localize-href.js +115 -0
  447. package/dist/compiler/runtime/localize-href.js.map +1 -0
  448. package/dist/compiler/runtime/localize-href.test.d.ts +1 -0
  449. package/dist/compiler/runtime/localize-href.test.d.ts.map +1 -0
  450. package/dist/compiler/runtime/localize-href.test.js +139 -0
  451. package/dist/compiler/runtime/localize-href.test.js.map +1 -0
  452. package/dist/compiler/runtime/localize-url.d.ts +95 -0
  453. package/dist/compiler/runtime/localize-url.d.ts.map +1 -0
  454. package/dist/compiler/runtime/localize-url.js +327 -0
  455. package/dist/compiler/runtime/localize-url.js.map +1 -0
  456. package/dist/compiler/runtime/localize-url.test.d.ts +1 -0
  457. package/dist/compiler/runtime/localize-url.test.d.ts.map +1 -0
  458. package/dist/compiler/runtime/localize-url.test.js +533 -0
  459. package/dist/compiler/runtime/localize-url.test.js.map +1 -0
  460. package/dist/compiler/runtime/route-strategy.d.ts +32 -0
  461. package/dist/compiler/runtime/route-strategy.d.ts.map +1 -0
  462. package/dist/compiler/runtime/route-strategy.js +72 -0
  463. package/dist/compiler/runtime/route-strategy.js.map +1 -0
  464. package/dist/compiler/runtime/set-locale.d.ts +46 -0
  465. package/dist/compiler/runtime/set-locale.d.ts.map +1 -0
  466. package/dist/compiler/runtime/set-locale.js +172 -0
  467. package/dist/compiler/runtime/set-locale.js.map +1 -0
  468. package/dist/compiler/runtime/set-locale.test.d.ts +1 -0
  469. package/dist/compiler/runtime/set-locale.test.d.ts.map +1 -0
  470. package/dist/compiler/runtime/set-locale.test.js +555 -0
  471. package/dist/compiler/runtime/set-locale.test.js.map +1 -0
  472. package/dist/compiler/runtime/should-redirect.d.ts +100 -0
  473. package/dist/compiler/runtime/should-redirect.d.ts.map +1 -0
  474. package/dist/compiler/runtime/should-redirect.js +155 -0
  475. package/dist/compiler/runtime/should-redirect.js.map +1 -0
  476. package/dist/compiler/runtime/should-redirect.test.d.ts +1 -0
  477. package/dist/compiler/runtime/should-redirect.test.d.ts.map +1 -0
  478. package/dist/compiler/runtime/should-redirect.test.js +270 -0
  479. package/dist/compiler/runtime/should-redirect.test.js.map +1 -0
  480. package/dist/compiler/runtime/strategy.d.ts +63 -0
  481. package/dist/compiler/runtime/strategy.d.ts.map +1 -0
  482. package/dist/compiler/runtime/strategy.js +65 -0
  483. package/dist/compiler/runtime/strategy.js.map +1 -0
  484. package/dist/compiler/runtime/strategy.test.d.ts +1 -0
  485. package/dist/compiler/runtime/strategy.test.d.ts.map +1 -0
  486. package/dist/compiler/runtime/strategy.test.js +90 -0
  487. package/dist/compiler/runtime/strategy.test.js.map +1 -0
  488. package/dist/compiler/runtime/track-message-call.d.ts +5 -0
  489. package/dist/compiler/runtime/track-message-call.d.ts.map +1 -0
  490. package/dist/compiler/runtime/track-message-call.js +14 -0
  491. package/dist/compiler/runtime/track-message-call.js.map +1 -0
  492. package/dist/compiler/runtime/track-message-call.test.d.ts +1 -0
  493. package/dist/compiler/runtime/track-message-call.test.d.ts.map +1 -0
  494. package/dist/compiler/runtime/track-message-call.test.js +22 -0
  495. package/dist/compiler/runtime/track-message-call.test.js.map +1 -0
  496. package/dist/compiler/runtime/type-definitions.d.ts +197 -0
  497. package/dist/compiler/runtime/type-definitions.d.ts.map +1 -0
  498. package/dist/compiler/runtime/type-definitions.js +150 -0
  499. package/dist/compiler/runtime/type-definitions.js.map +1 -0
  500. package/dist/compiler/runtime/type.d.ts +47 -0
  501. package/dist/compiler/runtime/type.d.ts.map +1 -0
  502. package/dist/compiler/runtime/type.js +2 -0
  503. package/dist/compiler/runtime/type.js.map +1 -0
  504. package/dist/compiler/runtime/type.test.d.ts +1 -0
  505. package/dist/compiler/runtime/type.test.d.ts.map +1 -0
  506. package/dist/compiler/runtime/type.test.js +153 -0
  507. package/dist/compiler/runtime/type.test.js.map +1 -0
  508. package/dist/compiler/runtime/url-pattern.d.ts +12 -0
  509. package/dist/compiler/runtime/url-pattern.d.ts.map +1 -0
  510. package/dist/compiler/runtime/url-pattern.js +35 -0
  511. package/dist/compiler/runtime/url-pattern.js.map +1 -0
  512. package/dist/compiler/runtime/variables.d.ts +128 -0
  513. package/dist/compiler/runtime/variables.d.ts.map +1 -0
  514. package/dist/compiler/runtime/variables.js +111 -0
  515. package/dist/compiler/runtime/variables.js.map +1 -0
  516. package/dist/compiler/safe-module-id.d.ts +7 -0
  517. package/dist/compiler/safe-module-id.d.ts.map +1 -0
  518. package/dist/compiler/safe-module-id.js +78 -0
  519. package/dist/compiler/safe-module-id.js.map +1 -0
  520. package/dist/compiler/safe-module-id.test.d.ts +1 -0
  521. package/dist/compiler/safe-module-id.test.d.ts.map +1 -0
  522. package/dist/compiler/safe-module-id.test.js +36 -0
  523. package/dist/compiler/safe-module-id.test.js.map +1 -0
  524. package/dist/compiler/seed-previous-compilation.d.ts +7 -0
  525. package/dist/compiler/seed-previous-compilation.d.ts.map +1 -0
  526. package/dist/compiler/seed-previous-compilation.js +9 -0
  527. package/dist/compiler/seed-previous-compilation.js.map +1 -0
  528. package/dist/compiler/server/create-server-file.d.ts +12 -0
  529. package/dist/compiler/server/create-server-file.d.ts.map +1 -0
  530. package/dist/compiler/server/create-server-file.js +91 -0
  531. package/dist/compiler/server/create-server-file.js.map +1 -0
  532. package/dist/compiler/server/create-server-file.test.d.ts +1 -0
  533. package/dist/compiler/server/create-server-file.test.d.ts.map +1 -0
  534. package/dist/compiler/server/create-server-file.test.js +48 -0
  535. package/dist/compiler/server/create-server-file.test.js.map +1 -0
  536. package/dist/compiler/server/middleware.d.ts +98 -0
  537. package/dist/compiler/server/middleware.d.ts.map +1 -0
  538. package/dist/compiler/server/middleware.js +278 -0
  539. package/dist/compiler/server/middleware.js.map +1 -0
  540. package/dist/compiler/server/middleware.test.d.ts +1 -0
  541. package/dist/compiler/server/middleware.test.d.ts.map +1 -0
  542. package/dist/compiler/server/middleware.test.js +1001 -0
  543. package/dist/compiler/server/middleware.test.js.map +1 -0
  544. package/dist/compiler/server/type.d.ts +6 -0
  545. package/dist/compiler/server/type.d.ts.map +1 -0
  546. package/dist/compiler/server/type.js +2 -0
  547. package/dist/compiler/server/type.js.map +1 -0
  548. package/dist/compiler/test-helpers.d.ts +30 -0
  549. package/dist/compiler/test-helpers.d.ts.map +1 -0
  550. package/dist/compiler/test-helpers.js +50 -0
  551. package/dist/compiler/test-helpers.js.map +1 -0
  552. package/dist/compiler/types.d.ts +7 -0
  553. package/dist/compiler/types.d.ts.map +1 -0
  554. package/dist/compiler/types.js +2 -0
  555. package/dist/compiler/types.js.map +1 -0
  556. package/dist/compiler/variable-access.d.ts +3 -0
  557. package/dist/compiler/variable-access.d.ts.map +1 -0
  558. package/dist/compiler/variable-access.js +15 -0
  559. package/dist/compiler/variable-access.js.map +1 -0
  560. package/dist/index.d.ts +2 -0
  561. package/dist/index.d.ts.map +1 -0
  562. package/dist/index.js +3 -0
  563. package/dist/index.js.map +1 -0
  564. package/dist/messages/ast.d.ts +102 -0
  565. package/dist/messages/ast.d.ts.map +1 -0
  566. package/dist/messages/ast.js +8 -0
  567. package/dist/messages/ast.js.map +1 -0
  568. package/dist/messages/create-bundle-nested.d.ts +16 -0
  569. package/dist/messages/create-bundle-nested.d.ts.map +1 -0
  570. package/dist/messages/create-bundle-nested.js +22 -0
  571. package/dist/messages/create-bundle-nested.js.map +1 -0
  572. package/dist/messages/index.d.ts +5 -0
  573. package/dist/messages/index.d.ts.map +1 -0
  574. package/dist/messages/index.js +5 -0
  575. package/dist/messages/index.js.map +1 -0
  576. package/dist/messages/load-messages.d.ts +19 -0
  577. package/dist/messages/load-messages.d.ts.map +1 -0
  578. package/dist/messages/load-messages.js +49 -0
  579. package/dist/messages/load-messages.js.map +1 -0
  580. package/dist/messages/message-format/flatten.d.ts +9 -0
  581. package/dist/messages/message-format/flatten.d.ts.map +1 -0
  582. package/dist/messages/message-format/flatten.js +32 -0
  583. package/dist/messages/message-format/flatten.js.map +1 -0
  584. package/dist/messages/message-format/import-files.d.ts +32 -0
  585. package/dist/messages/message-format/import-files.d.ts.map +1 -0
  586. package/dist/messages/message-format/import-files.js +53 -0
  587. package/dist/messages/message-format/import-files.js.map +1 -0
  588. package/dist/messages/message-format/import-files.test.d.ts +1 -0
  589. package/dist/messages/message-format/import-files.test.d.ts.map +1 -0
  590. package/dist/messages/message-format/import-files.test.js +145 -0
  591. package/dist/messages/message-format/import-files.test.js.map +1 -0
  592. package/dist/messages/message-format/index.d.ts +6 -0
  593. package/dist/messages/message-format/index.d.ts.map +1 -0
  594. package/dist/messages/message-format/index.js +7 -0
  595. package/dist/messages/message-format/index.js.map +1 -0
  596. package/dist/messages/message-format/parse-bundle.d.ts +31 -0
  597. package/dist/messages/message-format/parse-bundle.d.ts.map +1 -0
  598. package/dist/messages/message-format/parse-bundle.js +169 -0
  599. package/dist/messages/message-format/parse-bundle.js.map +1 -0
  600. package/dist/messages/message-format/parse-declaration.d.ts +2 -0
  601. package/dist/messages/message-format/parse-declaration.d.ts.map +1 -0
  602. package/dist/messages/message-format/parse-declaration.js +56 -0
  603. package/dist/messages/message-format/parse-declaration.js.map +1 -0
  604. package/dist/messages/message-format/parse-markup.d.ts +4 -0
  605. package/dist/messages/message-format/parse-markup.d.ts.map +1 -0
  606. package/dist/messages/message-format/parse-markup.js +167 -0
  607. package/dist/messages/message-format/parse-markup.js.map +1 -0
  608. package/dist/messages/message-format/parse-matches.d.ts +5 -0
  609. package/dist/messages/message-format/parse-matches.d.ts.map +1 -0
  610. package/dist/messages/message-format/parse-matches.js +31 -0
  611. package/dist/messages/message-format/parse-matches.js.map +1 -0
  612. package/dist/messages/message-format/parse-pattern.d.ts +5 -0
  613. package/dist/messages/message-format/parse-pattern.d.ts.map +1 -0
  614. package/dist/messages/message-format/parse-pattern.js +120 -0
  615. package/dist/messages/message-format/parse-pattern.js.map +1 -0
  616. package/dist/messages/message-format/unique.d.ts +2 -0
  617. package/dist/messages/message-format/unique.d.ts.map +1 -0
  618. package/dist/messages/message-format/unique.js +5 -0
  619. package/dist/messages/message-format/unique.js.map +1 -0
  620. package/dist/messages/nest-bundles.d.ts +19 -0
  621. package/dist/messages/nest-bundles.d.ts.map +1 -0
  622. package/dist/messages/nest-bundles.js +49 -0
  623. package/dist/messages/nest-bundles.js.map +1 -0
  624. package/dist/services/account/index.d.ts +14 -0
  625. package/dist/services/account/index.d.ts.map +1 -0
  626. package/dist/services/account/index.js +43 -0
  627. package/dist/services/account/index.js.map +1 -0
  628. package/dist/services/account/types.d.ts +4 -0
  629. package/dist/services/account/types.d.ts.map +1 -0
  630. package/dist/services/account/types.js +2 -0
  631. package/dist/services/account/types.js.map +1 -0
  632. package/dist/services/codegen/escape.d.ts +9 -0
  633. package/dist/services/codegen/escape.d.ts.map +1 -0
  634. package/dist/services/codegen/escape.js +19 -0
  635. package/dist/services/codegen/escape.js.map +1 -0
  636. package/dist/services/codegen/quotes.d.ts +4 -0
  637. package/dist/services/codegen/quotes.d.ts.map +1 -0
  638. package/dist/services/codegen/quotes.js +5 -0
  639. package/dist/services/codegen/quotes.js.map +1 -0
  640. package/dist/services/env-variables/create-index-file.d.ts +9 -0
  641. package/dist/services/env-variables/create-index-file.d.ts.map +1 -0
  642. package/dist/services/env-variables/create-index-file.js +28 -0
  643. package/dist/services/env-variables/create-index-file.js.map +1 -0
  644. package/dist/services/env-variables/index.d.ts +3 -0
  645. package/dist/services/env-variables/index.d.ts.map +1 -0
  646. package/dist/services/env-variables/index.js +4 -0
  647. package/dist/services/env-variables/index.js.map +1 -0
  648. package/dist/services/environment/package.d.ts +9 -0
  649. package/dist/services/environment/package.d.ts.map +1 -0
  650. package/dist/services/environment/package.js +31 -0
  651. package/dist/services/environment/package.js.map +1 -0
  652. package/dist/services/environment/package.test.d.ts +1 -0
  653. package/dist/services/environment/package.test.d.ts.map +1 -0
  654. package/dist/services/environment/package.test.js +21 -0
  655. package/dist/services/environment/package.test.js.map +1 -0
  656. package/dist/services/error-handling.d.ts +12 -0
  657. package/dist/services/error-handling.d.ts.map +1 -0
  658. package/dist/services/error-handling.js +27 -0
  659. package/dist/services/error-handling.js.map +1 -0
  660. package/dist/services/error-handling.test.d.ts +1 -0
  661. package/dist/services/error-handling.test.d.ts.map +1 -0
  662. package/dist/services/error-handling.test.js +10 -0
  663. package/dist/services/error-handling.test.js.map +1 -0
  664. package/dist/services/file-handling/content-hash.d.ts +9 -0
  665. package/dist/services/file-handling/content-hash.js +19 -0
  666. package/dist/services/file-handling/content-hash.js.map +1 -0
  667. package/dist/services/file-handling/exists.d.ts +7 -0
  668. package/dist/services/file-handling/exists.d.ts.map +1 -0
  669. package/dist/services/file-handling/exists.js +24 -0
  670. package/dist/services/file-handling/exists.js.map +1 -0
  671. package/dist/services/file-handling/exists.test.d.ts +1 -0
  672. package/dist/services/file-handling/exists.test.d.ts.map +1 -0
  673. package/dist/services/file-handling/exists.test.js +27 -0
  674. package/dist/services/file-handling/exists.test.js.map +1 -0
  675. package/dist/services/file-handling/types.d.ts +4 -0
  676. package/dist/services/file-handling/types.d.ts.map +1 -0
  677. package/dist/services/file-handling/types.js +2 -0
  678. package/dist/services/file-handling/types.js.map +1 -0
  679. package/dist/services/file-handling/write-output.d.ts +21 -0
  680. package/dist/services/file-handling/write-output.d.ts.map +1 -0
  681. package/dist/services/file-handling/write-output.js +157 -0
  682. package/dist/services/file-handling/write-output.js.map +1 -0
  683. package/dist/services/file-handling/write-output.test.d.ts +1 -0
  684. package/dist/services/file-handling/write-output.test.d.ts.map +1 -0
  685. package/dist/services/file-handling/write-output.test.js +217 -0
  686. package/dist/services/file-handling/write-output.test.js.map +1 -0
  687. package/dist/services/file-watching/tracked-fs.d.ts +25 -0
  688. package/dist/services/file-watching/tracked-fs.d.ts.map +1 -0
  689. package/dist/services/file-watching/tracked-fs.js +94 -0
  690. package/dist/services/file-watching/tracked-fs.js.map +1 -0
  691. package/dist/services/file-watching/tracked-fs.test.d.ts +1 -0
  692. package/dist/services/file-watching/tracked-fs.test.d.ts.map +1 -0
  693. package/dist/services/file-watching/tracked-fs.test.js +87 -0
  694. package/dist/services/file-watching/tracked-fs.test.js.map +1 -0
  695. package/dist/services/logger/index.d.ts +17 -0
  696. package/dist/services/logger/index.d.ts.map +1 -0
  697. package/dist/services/logger/index.js +58 -0
  698. package/dist/services/logger/index.js.map +1 -0
  699. package/dist/services/lookup.d.ts +14 -0
  700. package/dist/services/lookup.d.ts.map +1 -0
  701. package/dist/services/lookup.js +24 -0
  702. package/dist/services/lookup.js.map +1 -0
  703. package/dist/urlpattern-polyfill/index.d.ts +2 -0
  704. package/dist/urlpattern-polyfill/index.d.ts.map +1 -0
  705. package/dist/urlpattern-polyfill/index.js +2 -0
  706. package/dist/urlpattern-polyfill/index.js.map +1 -0
  707. package/dist/utilities/detect-json-formatting.d.ts +10 -0
  708. package/dist/utilities/detect-json-formatting.d.ts.map +1 -0
  709. package/dist/utilities/detect-json-formatting.js +80 -0
  710. package/dist/utilities/detect-json-formatting.js.map +1 -0
  711. package/dist/utilities/node-normalize-path.d.ts +1 -0
  712. package/dist/utilities/node-normalize-path.d.ts.map +1 -0
  713. package/dist/utilities/node-normalize-path.js +10 -0
  714. package/dist/utilities/node-normalize-path.js.map +1 -0
  715. 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
+ {"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