intor 2.5.0 → 2.6.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 (322) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +1 -1
  3. package/dist/core/export/index.js +1 -0
  4. package/dist/core/src/client/shared/helpers/get-client-locale.js +5 -20
  5. package/dist/core/src/client/shared/utils/locale/detect-browser-locale.js +2 -8
  6. package/dist/core/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  7. package/dist/core/src/config/constants/cookie.js +9 -9
  8. package/dist/core/src/config/constants/routing.js +13 -14
  9. package/dist/core/src/config/define-intor-config.js +28 -44
  10. package/dist/core/src/config/resolvers/resolve-cookie-options.js +4 -4
  11. package/dist/core/src/config/resolvers/resolve-fallback-locales.js +33 -50
  12. package/dist/core/src/config/resolvers/resolve-routing-options.js +32 -61
  13. package/dist/core/src/config/validators/validate-default-locale.js +8 -13
  14. package/dist/core/src/config/validators/validate-id.js +8 -13
  15. package/dist/core/src/config/validators/validate-supported-locales.js +8 -13
  16. package/dist/core/src/core/constants/locale-placeholder.js +0 -1
  17. package/dist/core/src/core/error/intor-error.js +14 -29
  18. package/dist/core/src/core/locale/canonicalize-locale.js +7 -18
  19. package/dist/core/src/core/locale/match-locale.js +24 -50
  20. package/dist/core/src/core/locale/parse-locale.js +12 -22
  21. package/dist/core/src/core/logger/get-logger.js +26 -31
  22. package/dist/core/src/core/logger/global-logger-pool.js +4 -4
  23. package/dist/core/src/core/messages/internal-metadata.js +1 -1
  24. package/dist/core/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  25. package/dist/core/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  26. package/dist/core/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  27. package/dist/core/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  28. package/dist/core/src/core/messages/merge-messages.js +17 -28
  29. package/dist/core/src/core/messages/utils/is-valid-messages.js +22 -37
  30. package/dist/core/src/core/messages/utils/nest-object-from-path.js +5 -17
  31. package/dist/core/src/core/render/create-html-renderer.js +29 -37
  32. package/dist/core/src/core/render/utils/escape-html.js +1 -6
  33. package/dist/core/src/core/render/utils/render-attributes.js +6 -11
  34. package/dist/core/src/core/translator/create-t-rich.js +6 -15
  35. package/dist/core/src/core/translator/create-translator.js +16 -24
  36. package/dist/core/src/core/utils/deep-merge.js +24 -42
  37. package/dist/core/src/core/utils/normalizers/normalize-cache-key.js +14 -40
  38. package/dist/core/src/core/utils/normalizers/normalize-pathname.js +19 -37
  39. package/dist/core/src/core/utils/normalizers/normalize-query.js +6 -20
  40. package/dist/core/src/core/utils/parse-cookie-header.js +11 -18
  41. package/dist/core/src/core/utils/resolve-loader-options.js +6 -32
  42. package/dist/core/src/edge/helpers/get-translator.js +14 -20
  43. package/dist/core/src/edge/translator/init-translator.js +23 -31
  44. package/dist/core/src/routing/inbound/helpers/resolve-inbound-from-request.js +21 -28
  45. package/dist/core/src/routing/inbound/resolve-inbound.js +22 -37
  46. package/dist/core/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  47. package/dist/core/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  48. package/dist/core/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  49. package/dist/core/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  50. package/dist/core/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  51. package/dist/core/src/routing/locale/get-locale-from-accept-language.js +21 -36
  52. package/dist/core/src/routing/locale/get-locale-from-host.js +5 -28
  53. package/dist/core/src/routing/locale/get-locale-from-pathname.js +11 -37
  54. package/dist/core/src/routing/locale/get-locale-from-query.js +2 -17
  55. package/dist/core/src/routing/pathname/canonicalize-pathname.js +25 -67
  56. package/dist/core/src/routing/pathname/localize-pathname.js +12 -30
  57. package/dist/core/src/routing/pathname/materialize-pathname.js +9 -44
  58. package/dist/core/src/routing/pathname/standardize-pathname.js +6 -30
  59. package/dist/core/src/server/helpers/get-translator.js +26 -23
  60. package/dist/core/src/server/intor/intor.js +20 -25
  61. package/dist/core/src/server/messages/load-local-messages/cache/messages-pool.js +4 -7
  62. package/dist/core/src/server/messages/load-local-messages/load-local-messages.js +76 -92
  63. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +59 -80
  64. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +53 -87
  65. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.js +3 -6
  66. package/dist/core/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +23 -35
  67. package/dist/core/src/server/messages/load-messages.js +56 -69
  68. package/dist/core/src/server/translator/init-translator.js +28 -30
  69. package/dist/express/src/adapters/express/create-intor-handler.js +35 -46
  70. package/dist/express/src/adapters/express/get-translator.js +2 -9
  71. package/dist/express/src/core/constants/locale-placeholder.js +0 -1
  72. package/dist/express/src/core/locale/canonicalize-locale.js +7 -18
  73. package/dist/express/src/core/locale/match-locale.js +24 -50
  74. package/dist/express/src/core/locale/parse-locale.js +12 -22
  75. package/dist/express/src/core/utils/normalizers/normalize-pathname.js +19 -37
  76. package/dist/express/src/core/utils/normalizers/normalize-query.js +6 -20
  77. package/dist/express/src/core/utils/parse-cookie-header.js +11 -18
  78. package/dist/express/src/routing/inbound/resolve-inbound.js +22 -37
  79. package/dist/express/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  80. package/dist/express/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  81. package/dist/express/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  82. package/dist/express/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  83. package/dist/express/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  84. package/dist/express/src/routing/locale/get-locale-from-accept-language.js +21 -36
  85. package/dist/express/src/routing/locale/get-locale-from-host.js +5 -28
  86. package/dist/express/src/routing/locale/get-locale-from-pathname.js +11 -37
  87. package/dist/express/src/routing/locale/get-locale-from-query.js +2 -17
  88. package/dist/express/src/routing/pathname/canonicalize-pathname.js +25 -67
  89. package/dist/express/src/routing/pathname/localize-pathname.js +12 -30
  90. package/dist/express/src/routing/pathname/materialize-pathname.js +9 -44
  91. package/dist/express/src/routing/pathname/standardize-pathname.js +6 -30
  92. package/dist/fastify/src/adapters/fastify/create-intor-handler.js +35 -47
  93. package/dist/fastify/src/adapters/fastify/get-translator.js +2 -9
  94. package/dist/fastify/src/adapters/fastify/intor-fastify-plugin.js +29 -38
  95. package/dist/fastify/src/core/constants/locale-placeholder.js +0 -1
  96. package/dist/fastify/src/core/locale/canonicalize-locale.js +7 -18
  97. package/dist/fastify/src/core/locale/match-locale.js +24 -50
  98. package/dist/fastify/src/core/locale/parse-locale.js +12 -22
  99. package/dist/fastify/src/core/utils/normalizers/normalize-pathname.js +19 -37
  100. package/dist/fastify/src/core/utils/normalizers/normalize-query.js +6 -20
  101. package/dist/fastify/src/core/utils/parse-cookie-header.js +11 -18
  102. package/dist/fastify/src/routing/inbound/resolve-inbound.js +22 -37
  103. package/dist/fastify/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  104. package/dist/fastify/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  105. package/dist/fastify/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  106. package/dist/fastify/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  107. package/dist/fastify/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  108. package/dist/fastify/src/routing/locale/get-locale-from-accept-language.js +21 -36
  109. package/dist/fastify/src/routing/locale/get-locale-from-host.js +5 -28
  110. package/dist/fastify/src/routing/locale/get-locale-from-pathname.js +11 -37
  111. package/dist/fastify/src/routing/locale/get-locale-from-query.js +2 -17
  112. package/dist/fastify/src/routing/pathname/canonicalize-pathname.js +25 -67
  113. package/dist/fastify/src/routing/pathname/localize-pathname.js +12 -30
  114. package/dist/fastify/src/routing/pathname/materialize-pathname.js +9 -44
  115. package/dist/fastify/src/routing/pathname/standardize-pathname.js +6 -30
  116. package/dist/hono/src/adapters/hono/create-intor-handler.js +33 -44
  117. package/dist/hono/src/adapters/hono/get-translator.js +2 -9
  118. package/dist/hono/src/core/constants/locale-placeholder.js +0 -1
  119. package/dist/hono/src/core/locale/canonicalize-locale.js +7 -18
  120. package/dist/hono/src/core/locale/match-locale.js +24 -50
  121. package/dist/hono/src/core/locale/parse-locale.js +12 -22
  122. package/dist/hono/src/core/utils/normalizers/normalize-pathname.js +19 -37
  123. package/dist/hono/src/core/utils/normalizers/normalize-query.js +6 -20
  124. package/dist/hono/src/core/utils/parse-cookie-header.js +11 -18
  125. package/dist/hono/src/routing/inbound/resolve-inbound.js +22 -37
  126. package/dist/hono/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  127. package/dist/hono/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  128. package/dist/hono/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  129. package/dist/hono/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  130. package/dist/hono/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  131. package/dist/hono/src/routing/locale/get-locale-from-accept-language.js +21 -36
  132. package/dist/hono/src/routing/locale/get-locale-from-host.js +5 -28
  133. package/dist/hono/src/routing/locale/get-locale-from-pathname.js +11 -37
  134. package/dist/hono/src/routing/locale/get-locale-from-query.js +2 -17
  135. package/dist/hono/src/routing/pathname/canonicalize-pathname.js +25 -67
  136. package/dist/hono/src/routing/pathname/localize-pathname.js +12 -30
  137. package/dist/hono/src/routing/pathname/materialize-pathname.js +9 -44
  138. package/dist/hono/src/routing/pathname/standardize-pathname.js +6 -30
  139. package/dist/next/export/next/server/index.js +1 -0
  140. package/dist/next/src/adapters/next/create-intor-handler.js +39 -48
  141. package/dist/next/src/adapters/next/header-keys.js +9 -0
  142. package/dist/next/src/adapters/next/link.js +33 -28
  143. package/dist/next/src/adapters/next/redirect.js +12 -15
  144. package/dist/next/src/adapters/next/server/get-locale.js +13 -24
  145. package/dist/next/src/adapters/next/server/get-translator.js +2 -9
  146. package/dist/next/src/adapters/next/server/intor.js +5 -13
  147. package/dist/next/src/adapters/next/server/read-intor-url-state.js +13 -0
  148. package/dist/next/src/adapters/next/use-router.js +47 -66
  149. package/dist/next/src/client/shared/navigation/execute-navigation.js +20 -38
  150. package/dist/next/src/client/shared/utils/build-cookie-string.js +18 -27
  151. package/dist/next/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  152. package/dist/next/src/core/constants/locale-placeholder.js +0 -1
  153. package/dist/next/src/core/locale/canonicalize-locale.js +7 -18
  154. package/dist/next/src/core/locale/match-locale.js +24 -50
  155. package/dist/next/src/core/locale/parse-locale.js +12 -22
  156. package/dist/next/src/core/utils/normalizers/normalize-pathname.js +19 -37
  157. package/dist/next/src/core/utils/normalizers/normalize-query.js +6 -20
  158. package/dist/next/src/core/utils/resolve-loader-options.js +6 -29
  159. package/dist/next/src/policies/shoud-full-reload.js +2 -5
  160. package/dist/next/src/policies/should-sync-locale.js +1 -4
  161. package/dist/next/src/routing/inbound/resolve-inbound.js +24 -39
  162. package/dist/next/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  163. package/dist/next/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  164. package/dist/next/src/routing/inbound/resolve-pathname/strategies/all.js +13 -29
  165. package/dist/next/src/routing/inbound/resolve-pathname/strategies/except-default.js +14 -30
  166. package/dist/next/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  167. package/dist/next/src/routing/locale/get-locale-from-accept-language.js +21 -36
  168. package/dist/next/src/routing/locale/get-locale-from-host.js +5 -28
  169. package/dist/next/src/routing/locale/get-locale-from-pathname.js +11 -37
  170. package/dist/next/src/routing/locale/get-locale-from-query.js +2 -17
  171. package/dist/next/src/routing/outbound/decide-strategy.js +9 -9
  172. package/dist/next/src/routing/outbound/determine-target.js +28 -44
  173. package/dist/next/src/routing/outbound/resolve-outbound.js +12 -16
  174. package/dist/next/src/routing/outbound/utils/derive-host-destination.js +5 -9
  175. package/dist/next/src/routing/outbound/utils/derive-query-destination.js +4 -7
  176. package/dist/next/src/routing/outbound/utils/is-external-destination.js +1 -7
  177. package/dist/next/src/routing/pathname/canonicalize-pathname.js +25 -67
  178. package/dist/next/src/routing/pathname/localize-pathname.js +12 -30
  179. package/dist/next/src/routing/pathname/materialize-pathname.js +9 -44
  180. package/dist/next/src/routing/pathname/standardize-pathname.js +6 -30
  181. package/dist/react/src/client/react/helpers/use-intor.js +25 -44
  182. package/dist/react/src/client/react/provider/effects/use-locale-effects.js +20 -25
  183. package/dist/react/src/client/react/provider/effects/use-messages-effects.js +17 -16
  184. package/dist/react/src/client/react/provider/intor-provider.js +63 -66
  185. package/dist/react/src/client/react/provider/use-intor-context.js +4 -4
  186. package/dist/react/src/client/react/render/create-react-renderer.js +18 -24
  187. package/dist/react/src/client/react/translator/create-t-rich.js +9 -22
  188. package/dist/react/src/client/react/translator/use-translator.js +11 -16
  189. package/dist/react/src/client/shared/messages/create-refetch-messages.js +41 -51
  190. package/dist/react/src/client/shared/provider/effective-state.js +2 -6
  191. package/dist/react/src/client/shared/utils/build-cookie-string.js +18 -27
  192. package/dist/react/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  193. package/dist/react/src/client/shared/utils/locale/set-document-locale.js +2 -8
  194. package/dist/react/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  195. package/dist/react/src/core/logger/get-logger.js +26 -31
  196. package/dist/react/src/core/logger/global-logger-pool.js +4 -4
  197. package/dist/react/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  198. package/dist/react/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  199. package/dist/react/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  200. package/dist/react/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  201. package/dist/react/src/core/messages/merge-messages.js +17 -28
  202. package/dist/react/src/core/messages/utils/is-valid-messages.js +22 -37
  203. package/dist/react/src/core/messages/utils/nest-object-from-path.js +5 -17
  204. package/dist/react/src/core/utils/deep-merge.js +24 -42
  205. package/dist/react/src/core/utils/resolve-loader-options.js +6 -29
  206. package/dist/react/src/policies/should-persist-on-first-visit.js +1 -4
  207. package/dist/svelte/export/svelte/index.js +0 -6
  208. package/dist/svelte/src/client/shared/messages/create-refetch-messages.js +41 -51
  209. package/dist/svelte/src/client/shared/provider/effective-state.js +2 -6
  210. package/dist/svelte/src/client/shared/utils/build-cookie-string.js +18 -27
  211. package/dist/svelte/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  212. package/dist/svelte/src/client/shared/utils/locale/set-document-locale.js +2 -8
  213. package/dist/svelte/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  214. package/dist/svelte/src/client/svelte/provider/create-intor-store.js +59 -63
  215. package/dist/svelte/src/client/svelte/provider/effects/attach-locale-effects.js +20 -25
  216. package/dist/svelte/src/client/svelte/provider/effects/attach-messages-effects.js +21 -18
  217. package/dist/svelte/src/client/svelte/provider/get-intor-context.js +4 -4
  218. package/dist/svelte/src/client/svelte/translator/use-translator.js +11 -16
  219. package/dist/svelte/src/core/logger/get-logger.js +26 -31
  220. package/dist/svelte/src/core/logger/global-logger-pool.js +4 -4
  221. package/dist/svelte/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  222. package/dist/svelte/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  223. package/dist/svelte/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  224. package/dist/svelte/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  225. package/dist/svelte/src/core/messages/merge-messages.js +17 -28
  226. package/dist/svelte/src/core/messages/utils/is-valid-messages.js +22 -37
  227. package/dist/svelte/src/core/messages/utils/nest-object-from-path.js +5 -17
  228. package/dist/svelte/src/core/render/create-html-renderer.js +29 -37
  229. package/dist/svelte/src/core/render/utils/escape-html.js +1 -6
  230. package/dist/svelte/src/core/render/utils/render-attributes.js +6 -11
  231. package/dist/svelte/src/core/translator/create-t-rich.js +6 -15
  232. package/dist/svelte/src/core/utils/deep-merge.js +24 -42
  233. package/dist/svelte/src/core/utils/resolve-loader-options.js +6 -29
  234. package/dist/svelte/src/policies/should-persist-on-first-visit.js +1 -4
  235. package/dist/svelte-kit/src/adapters/svelte-kit/create-intor-handler.js +37 -57
  236. package/dist/svelte-kit/src/adapters/svelte-kit/use-navigation.js +29 -27
  237. package/dist/svelte-kit/src/adapters/svelte-kit/utils/is-svelte-kit-ssg.js +4 -11
  238. package/dist/svelte-kit/src/client/shared/navigation/execute-navigation.js +19 -37
  239. package/dist/svelte-kit/src/client/shared/utils/build-cookie-string.js +18 -27
  240. package/dist/svelte-kit/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  241. package/dist/svelte-kit/src/core/constants/locale-placeholder.js +0 -1
  242. package/dist/svelte-kit/src/core/locale/canonicalize-locale.js +7 -18
  243. package/dist/svelte-kit/src/core/locale/match-locale.js +24 -50
  244. package/dist/svelte-kit/src/core/locale/parse-locale.js +12 -22
  245. package/dist/svelte-kit/src/core/utils/normalizers/normalize-pathname.js +19 -37
  246. package/dist/svelte-kit/src/core/utils/normalizers/normalize-query.js +6 -20
  247. package/dist/svelte-kit/src/core/utils/resolve-loader-options.js +6 -29
  248. package/dist/svelte-kit/src/policies/shoud-full-reload.js +2 -5
  249. package/dist/svelte-kit/src/policies/should-sync-locale.js +1 -4
  250. package/dist/svelte-kit/src/routing/inbound/resolve-inbound.js +22 -37
  251. package/dist/svelte-kit/src/routing/inbound/resolve-locale/resolve-locale.js +22 -39
  252. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/resolve-pathname.js +24 -30
  253. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/strategies/all.js +10 -23
  254. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/strategies/except-default.js +11 -24
  255. package/dist/svelte-kit/src/routing/inbound/resolve-pathname/strategies/none.js +1 -4
  256. package/dist/svelte-kit/src/routing/locale/get-locale-from-accept-language.js +21 -36
  257. package/dist/svelte-kit/src/routing/locale/get-locale-from-host.js +5 -28
  258. package/dist/svelte-kit/src/routing/locale/get-locale-from-pathname.js +11 -37
  259. package/dist/svelte-kit/src/routing/locale/get-locale-from-query.js +2 -17
  260. package/dist/svelte-kit/src/routing/outbound/decide-strategy.js +9 -9
  261. package/dist/svelte-kit/src/routing/outbound/determine-target.js +28 -44
  262. package/dist/svelte-kit/src/routing/outbound/resolve-outbound.js +12 -16
  263. package/dist/svelte-kit/src/routing/outbound/utils/derive-host-destination.js +5 -9
  264. package/dist/svelte-kit/src/routing/outbound/utils/derive-query-destination.js +4 -7
  265. package/dist/svelte-kit/src/routing/outbound/utils/is-external-destination.js +1 -7
  266. package/dist/svelte-kit/src/routing/pathname/canonicalize-pathname.js +25 -67
  267. package/dist/svelte-kit/src/routing/pathname/localize-pathname.js +12 -30
  268. package/dist/svelte-kit/src/routing/pathname/materialize-pathname.js +9 -44
  269. package/dist/svelte-kit/src/routing/pathname/standardize-pathname.js +6 -30
  270. package/dist/types/export/index.d.ts +1 -1
  271. package/dist/types/export/index.d.ts.map +1 -1
  272. package/dist/types/export/next/server/index.d.ts +1 -1
  273. package/dist/types/export/next/server/index.d.ts.map +1 -1
  274. package/dist/types/src/adapters/fastify/intor-fastify-plugin.d.ts.map +1 -1
  275. package/dist/types/src/adapters/next/create-intor-handler.d.ts.map +1 -1
  276. package/dist/types/src/{core/constants/headers.d.ts → adapters/next/header-keys.d.ts} +3 -2
  277. package/dist/types/src/adapters/next/header-keys.d.ts.map +1 -0
  278. package/dist/types/src/adapters/next/server/get-locale.d.ts.map +1 -1
  279. package/dist/types/src/adapters/next/server/index.d.ts +1 -0
  280. package/dist/types/src/adapters/next/server/index.d.ts.map +1 -1
  281. package/dist/types/src/adapters/next/server/read-intor-url-state.d.ts +13 -0
  282. package/dist/types/src/adapters/next/server/read-intor-url-state.d.ts.map +1 -0
  283. package/dist/types/src/core/constants/index.d.ts +0 -1
  284. package/dist/types/src/core/constants/index.d.ts.map +1 -1
  285. package/dist/types/src/core/constants/locale-placeholder.d.ts +5 -0
  286. package/dist/types/src/core/constants/locale-placeholder.d.ts.map +1 -1
  287. package/dist/types/src/core/index.d.ts +1 -1
  288. package/dist/types/src/core/index.d.ts.map +1 -1
  289. package/dist/types/src/edge/translator/init-translator.d.ts.map +1 -1
  290. package/dist/types/src/routing/outbound/decide-strategy.d.ts +1 -1
  291. package/dist/types/src/routing/outbound/decide-strategy.d.ts.map +1 -1
  292. package/dist/types/src/server/translator/init-translator.d.ts.map +1 -1
  293. package/dist/vue/src/client/shared/messages/create-refetch-messages.js +41 -51
  294. package/dist/vue/src/client/shared/provider/effective-state.js +2 -6
  295. package/dist/vue/src/client/shared/utils/build-cookie-string.js +18 -27
  296. package/dist/vue/src/client/shared/utils/locale/get-locale-from-cookie.js +5 -12
  297. package/dist/vue/src/client/shared/utils/locale/set-document-locale.js +2 -8
  298. package/dist/vue/src/client/shared/utils/locale/set-locale-cookie.js +2 -9
  299. package/dist/vue/src/client/vue/helpers/use-intor.js +20 -42
  300. package/dist/vue/src/client/vue/provider/effects/use-locale-effects.js +23 -24
  301. package/dist/vue/src/client/vue/provider/effects/use-messages-effects.js +15 -24
  302. package/dist/vue/src/client/vue/provider/inject-intor-context.js +4 -4
  303. package/dist/vue/src/client/vue/provider/intor-provider.js +61 -66
  304. package/dist/vue/src/client/vue/render/create-vue-renderer.js +18 -24
  305. package/dist/vue/src/client/vue/translator/create-t-rich.js +5 -17
  306. package/dist/vue/src/client/vue/translator/trans.js +24 -31
  307. package/dist/vue/src/client/vue/translator/use-translator.js +12 -17
  308. package/dist/vue/src/core/logger/get-logger.js +26 -31
  309. package/dist/vue/src/core/logger/global-logger-pool.js +4 -4
  310. package/dist/vue/src/core/messages/load-remote-messages/collect-remote-resources.js +13 -22
  311. package/dist/vue/src/core/messages/load-remote-messages/fetch-remote-resource.js +30 -39
  312. package/dist/vue/src/core/messages/load-remote-messages/load-remote-messages.js +72 -89
  313. package/dist/vue/src/core/messages/load-remote-messages/resolve-remote-resources.js +7 -17
  314. package/dist/vue/src/core/messages/merge-messages.js +17 -28
  315. package/dist/vue/src/core/messages/utils/is-valid-messages.js +22 -37
  316. package/dist/vue/src/core/messages/utils/nest-object-from-path.js +5 -17
  317. package/dist/vue/src/core/utils/deep-merge.js +24 -42
  318. package/dist/vue/src/core/utils/resolve-loader-options.js +6 -29
  319. package/dist/vue/src/policies/should-persist-on-first-visit.js +1 -4
  320. package/package.json +53 -65
  321. package/dist/next/src/core/constants/headers.js +0 -8
  322. package/dist/types/src/core/constants/headers.d.ts.map +0 -1
@@ -1,35 +1,24 @@
1
1
  import { getLogger } from '../logger/get-logger.js';
2
2
  import { deepMerge } from '../utils/deep-merge.js';
3
3
 
4
- /**
5
- * Merge locale-specific messages with runtime overrides.
6
- *
7
- * - Only merges messages under the given locale
8
- * - Emits debug logs for add / override events
9
- *
10
- * @public
11
- */
12
4
  function mergeMessages(a, b, { config, locale, onEvent }) {
13
- const baseLogger = getLogger({ ...config.logger, id: config.id });
14
- const logger = baseLogger.child({ scope: "merge-messages" });
15
- // Merge messages for the active locale only
16
- const merged = deepMerge(a?.[locale] ?? {}, b?.[locale] ?? {}, {
17
- onOverride: (event) => {
18
- if (onEvent) {
19
- onEvent(event);
20
- return;
21
- }
22
- const { kind, path, next, prev } = event;
23
- if (kind === "add")
24
- return;
25
- logger.debug(`Override | ${locale}: "${path}"`, { prev, next });
26
- },
27
- });
28
- // Preserve other locales, update only the target one
29
- return {
30
- ...a,
31
- [locale]: merged,
32
- };
5
+ const baseLogger = getLogger({ ...config.logger, id: config.id });
6
+ const logger = baseLogger.child({ scope: "merge-messages" });
7
+ const merged = deepMerge(a?.[locale] ?? {}, b?.[locale] ?? {}, {
8
+ onOverride: (event) => {
9
+ if (onEvent) {
10
+ onEvent(event);
11
+ return;
12
+ }
13
+ const { kind, path, next, prev } = event;
14
+ if (kind === "add") return;
15
+ logger.debug(`Override | ${locale}: "${path}"`, { prev, next });
16
+ }
17
+ });
18
+ return {
19
+ ...a,
20
+ [locale]: merged
21
+ };
33
22
  }
34
23
 
35
24
  export { mergeMessages };
@@ -1,44 +1,29 @@
1
- /** Check if a value is a plain object (not null, not array) */
2
1
  function isPlainObject(value) {
3
- return typeof value === "object" && value !== null && !Array.isArray(value);
2
+ return typeof value === "object" && value !== null && !Array.isArray(value);
4
3
  }
5
- /**
6
- * Check if a value is a valid MessageObject.
7
- *
8
- * - Supports all MessageValue variants (primitive, array, object).
9
- * - Uses an iterative approach to avoid stack overflow.
10
- */
11
4
  function isValidMessages(value) {
12
- if (!isPlainObject(value))
13
- return false;
14
- const stack = [value];
15
- while (stack.length > 0) {
16
- const current = stack.pop();
17
- // primitives are always valid
18
- if (current === null ||
19
- typeof current === "string" ||
20
- typeof current === "number" ||
21
- typeof current === "boolean") {
22
- continue;
23
- }
24
- // array → validate each item
25
- if (Array.isArray(current)) {
26
- for (const item of current) {
27
- stack.push(item);
28
- }
29
- continue;
30
- }
31
- // object → validate each value
32
- if (isPlainObject(current)) {
33
- for (const v of Object.values(current)) {
34
- stack.push(v);
35
- }
36
- continue;
37
- }
38
- // everything else is invalid
39
- return false;
5
+ if (!isPlainObject(value)) return false;
6
+ const stack = [value];
7
+ while (stack.length > 0) {
8
+ const current = stack.pop();
9
+ if (current === null || typeof current === "string" || typeof current === "number" || typeof current === "boolean") {
10
+ continue;
40
11
  }
41
- return true;
12
+ if (Array.isArray(current)) {
13
+ for (const item of current) {
14
+ stack.push(item);
15
+ }
16
+ continue;
17
+ }
18
+ if (isPlainObject(current)) {
19
+ for (const v of Object.values(current)) {
20
+ stack.push(v);
21
+ }
22
+ continue;
23
+ }
24
+ return false;
25
+ }
26
+ return true;
42
27
  }
43
28
 
44
29
  export { isPlainObject, isValidMessages };
@@ -1,21 +1,9 @@
1
- /**
2
- * Wraps a value inside nested objects according to a given path.
3
- *
4
- * @example
5
- * ```ts
6
- * const value = { a: "A" };
7
- *
8
- * nestObjectFromPath(["auth", "verify"], value); // → { auth: { verify: { a: "A" } } }
9
- *
10
- * nestObjectFromPath([], value); // → { a: "A" }
11
- * ```
12
- */
13
1
  function nestObjectFromPath(path, value) {
14
- let obj = value;
15
- for (let i = path.length - 1; i >= 0; i--) {
16
- obj = { [path[i]]: obj };
17
- }
18
- return obj;
2
+ let obj = value;
3
+ for (let i = path.length - 1; i >= 0; i--) {
4
+ obj = { [path[i]]: obj };
5
+ }
6
+ return obj;
19
7
  }
20
8
 
21
9
  export { nestObjectFromPath };
@@ -1,47 +1,29 @@
1
- /**
2
- * Deeply merges two plain objects.
3
- *
4
- * - Nested plain objects → merged recursively
5
- * - Arrays / primitives → `b` overwrites `a`
6
- *
7
- * Debug behavior (optional):
8
- * - Emits override events via `onOverride`
9
- * - Zero overhead when no options are provided
10
- *
11
- * This function always returns a new plain object.
12
- */
13
1
  const deepMerge = (a = {}, b = {}, options) => {
14
- const result = { ...a };
15
- const basePath = options?._path ?? [];
16
- // Iterate only over b's own enumerable properties
17
- for (const key in b) {
18
- if (!Object.prototype.hasOwnProperty.call(b, key))
19
- continue;
20
- const aValue = a[key];
21
- const bValue = b[key];
22
- const nextPath = [...basePath, key];
23
- // Recursively merge when both sides are plain objects
24
- if (aValue &&
25
- bValue &&
26
- typeof aValue === "object" &&
27
- typeof bValue === "object" &&
28
- !Array.isArray(aValue) &&
29
- !Array.isArray(bValue)) {
30
- result[key] = deepMerge(aValue, bValue, options ? { ...options, _path: nextPath } : undefined);
31
- }
32
- else {
33
- // Emit override event only when debugging is enabled
34
- const isAdd = aValue === undefined;
35
- options?.onOverride?.({
36
- path: nextPath.join("."),
37
- prev: aValue,
38
- next: bValue,
39
- kind: isAdd ? "add" : "override",
40
- });
41
- result[key] = bValue;
42
- }
2
+ const result = { ...a };
3
+ const basePath = options?._path ?? [];
4
+ for (const key in b) {
5
+ if (!Object.prototype.hasOwnProperty.call(b, key)) continue;
6
+ const aValue = a[key];
7
+ const bValue = b[key];
8
+ const nextPath = [...basePath, key];
9
+ if (aValue && bValue && typeof aValue === "object" && typeof bValue === "object" && !Array.isArray(aValue) && !Array.isArray(bValue)) {
10
+ result[key] = deepMerge(
11
+ aValue,
12
+ bValue,
13
+ options ? { ...options, _path: nextPath } : void 0
14
+ );
15
+ } else {
16
+ const isAdd = aValue === void 0;
17
+ options?.onOverride?.({
18
+ path: nextPath.join("."),
19
+ prev: aValue,
20
+ next: bValue,
21
+ kind: isAdd ? "add" : "override"
22
+ });
23
+ result[key] = bValue;
43
24
  }
44
- return result;
25
+ }
26
+ return result;
45
27
  };
46
28
 
47
29
  export { deepMerge };
@@ -1,34 +1,11 @@
1
- /**
2
- * Resolve the effective message loader for a given runtime.
3
- *
4
- * Loader resolution follows an inheritance-based priority model:
5
- *
6
- * - client runtime:
7
- * client.loader → server.loader → root loader
8
- *
9
- * - server runtime:
10
- * server.loader → root loader
11
- *
12
- * This allows the client runtime to inherit server behavior
13
- * when no explicit client loader is provided.
14
- *
15
- * Notes:
16
- * - Static `messages` are intentionally NOT handled here.
17
- * - Returning `undefined` indicates that no loader is enabled
18
- * for the given runtime.
19
- */
20
1
  const resolveLoaderOptions = (config, runtime) => {
21
- // ------------------------------------------------
22
- // runtime: client
23
- // ------------------------------------------------
24
- {
25
- const client = config.client?.loader;
26
- if (client) {
27
- // Client loader is always remote by design
28
- return { mode: "remote", ...client };
29
- }
30
- return config.server?.loader ?? config.loader;
2
+ {
3
+ const client = config.client?.loader;
4
+ if (client) {
5
+ return { mode: "remote", ...client };
31
6
  }
7
+ return config.server?.loader ?? config.loader;
8
+ }
32
9
  };
33
10
 
34
11
  export { resolveLoaderOptions };
@@ -1,8 +1,5 @@
1
- /**
2
- * Allow locale persistence based on first-visit policy.
3
- */
4
1
  function shouldPersistOnFirstVisit(isFirstVisit, persistOnFirstVisit) {
5
- return !isFirstVisit || persistOnFirstVisit;
2
+ return !isFirstVisit || persistOnFirstVisit;
6
3
  }
7
4
 
8
5
  export { shouldPersistOnFirstVisit };
@@ -3,12 +3,6 @@ import IntorProviderComponent from '../../src/client/svelte/provider/intor-provi
3
3
  import 'svelte';
4
4
  export { useTranslator } from '../../src/client/svelte/translator/use-translator.js';
5
5
 
6
- // intor / svelte
7
- /**
8
- * Svelte provider component for Intor.
9
- *
10
- * @public
11
- */
12
6
  const IntorProvider = IntorProviderComponent;
13
7
 
14
8
  export { IntorProvider };
@@ -4,57 +4,47 @@ import { loadRemoteMessages } from '../../../core/messages/load-remote-messages/
4
4
  import { mergeMessages } from '../../../core/messages/merge-messages.js';
5
5
  import 'intor-translator';
6
6
 
7
- /**
8
- * Creates a framework-agnostic message refetcher.
9
- *
10
- * - At most one remote request is active at any time
11
- * - Previous in-flight requests are aborted on subsequent calls
12
- * - State updates are applied only for the latest, non-aborted request
13
- */
14
- const createRefetchMessages = ({ config, onLoadingStart, onLoadingEnd, onMessages, }) => {
15
- // Tracks the currently active remote request for this refetcher instance
16
- let controller = null;
17
- return async function refetchMessages(newLocale) {
18
- // No-op when remote loading is not enabled
19
- const loader = resolveLoaderOptions(config);
20
- if (!loader || loader.mode !== "remote")
21
- return;
22
- const { namespaces, concurrency, url, headers } = loader;
23
- // Abort previous request
24
- controller?.abort();
25
- const currentController = new AbortController();
26
- controller = currentController;
27
- onLoadingStart?.();
28
- try {
29
- const loadedMessages = await loadRemoteMessages({
30
- locale: newLocale,
31
- fallbackLocales: config.fallbackLocales[newLocale] || [],
32
- ...(namespaces !== undefined ? { namespaces } : {}),
33
- ...(concurrency !== undefined ? { concurrency } : {}),
34
- fetch: globalThis.fetch,
35
- url,
36
- ...(headers !== undefined ? { headers } : {}),
37
- signal: currentController.signal,
38
- loggerOptions: config.logger,
39
- });
40
- // Apply state updates only when this request is still the active one
41
- // and has not been aborted.
42
- if (controller === currentController &&
43
- !currentController.signal.aborted) {
44
- onMessages?.(mergeMessages(config.messages, loadedMessages, {
45
- config,
46
- locale: newLocale,
47
- }));
48
- }
49
- }
50
- finally {
51
- // Clear loading state only if this request is still the active one
52
- if (controller === currentController &&
53
- !currentController.signal.aborted) {
54
- onLoadingEnd?.();
55
- }
56
- }
57
- };
7
+ const createRefetchMessages = ({
8
+ config,
9
+ onLoadingStart,
10
+ onLoadingEnd,
11
+ onMessages
12
+ }) => {
13
+ let controller = null;
14
+ return async function refetchMessages(newLocale) {
15
+ const loader = resolveLoaderOptions(config);
16
+ if (!loader || loader.mode !== "remote") return;
17
+ const { namespaces, concurrency, url, headers } = loader;
18
+ controller?.abort();
19
+ const currentController = new AbortController();
20
+ controller = currentController;
21
+ onLoadingStart?.();
22
+ try {
23
+ const loadedMessages = await loadRemoteMessages({
24
+ locale: newLocale,
25
+ fallbackLocales: config.fallbackLocales[newLocale] || [],
26
+ ...namespaces !== void 0 ? { namespaces } : {},
27
+ ...concurrency !== void 0 ? { concurrency } : {},
28
+ fetch: globalThis.fetch,
29
+ url,
30
+ ...headers !== void 0 ? { headers } : {},
31
+ signal: currentController.signal,
32
+ loggerOptions: config.logger
33
+ });
34
+ if (controller === currentController && !currentController.signal.aborted) {
35
+ onMessages?.(
36
+ mergeMessages(config.messages, loadedMessages, {
37
+ config,
38
+ locale: newLocale
39
+ })
40
+ );
41
+ }
42
+ } finally {
43
+ if (controller === currentController && !currentController.signal.aborted) {
44
+ onLoadingEnd?.();
45
+ }
46
+ }
47
+ };
58
48
  };
59
49
 
60
50
  export { createRefetchMessages };
@@ -1,12 +1,8 @@
1
- // runtime > external > config
2
- // Always resolves to a non-null message object.
3
1
  function resolveEffectiveMessages(runtime, external, configMessages) {
4
- return runtime ?? external ?? configMessages ?? {};
2
+ return runtime ?? external ?? configMessages ?? {};
5
3
  }
6
- // external > internal
7
- // Loading is active if either source is truthy
8
4
  function resolveEffectiveIsLoading(external, internal) {
9
- return !!external || internal;
5
+ return !!external || internal;
10
6
  }
11
7
 
12
8
  export { resolveEffectiveIsLoading, resolveEffectiveMessages };
@@ -1,31 +1,22 @@
1
- /**
2
- * Build a serialized cookie string.
3
- */
4
1
  const buildCookieString = (cookieOptions, value) => {
5
- const { name, maxAge, path, domain, sameSite, secure } = cookieOptions;
6
- // Cookie name and encoded value
7
- const parts = [`${name}=${encodeURIComponent(value)}`];
8
- // Add expiration and max-age if provided
9
- if (maxAge !== undefined) {
10
- const expires = new Date(Date.now() + maxAge * 1000).toUTCString();
11
- parts.push(`expires=${expires}`, `max-age=${maxAge}`);
12
- }
13
- // Set path (default to "/")
14
- parts.push(`path=${path ?? "/"}`);
15
- // Add domain if specified
16
- if (domain) {
17
- parts.push(`domain=${domain}`);
18
- }
19
- // Add SameSite policy (e.g., Lax, Strict)
20
- if (sameSite) {
21
- const normalized = sameSite.charAt(0).toUpperCase() + sameSite.slice(1).toLowerCase();
22
- parts.push(`SameSite=${normalized}`);
23
- }
24
- // Add Secure flag if not explicitly disabled
25
- if (secure !== false) {
26
- parts.push(`Secure`);
27
- }
28
- return parts.join("; ");
2
+ const { name, maxAge, path, domain, sameSite, secure } = cookieOptions;
3
+ const parts = [`${name}=${encodeURIComponent(value)}`];
4
+ if (maxAge !== void 0) {
5
+ const expires = new Date(Date.now() + maxAge * 1e3).toUTCString();
6
+ parts.push(`expires=${expires}`, `max-age=${maxAge}`);
7
+ }
8
+ parts.push(`path=${path ?? "/"}`);
9
+ if (domain) {
10
+ parts.push(`domain=${domain}`);
11
+ }
12
+ if (sameSite) {
13
+ const normalized = sameSite.charAt(0).toUpperCase() + sameSite.slice(1).toLowerCase();
14
+ parts.push(`SameSite=${normalized}`);
15
+ }
16
+ if (secure !== false) {
17
+ parts.push(`Secure`);
18
+ }
19
+ return parts.join("; ");
29
20
  };
30
21
 
31
22
  export { buildCookieString };
@@ -1,16 +1,9 @@
1
- /**
2
- * Gets the locale value from the browser cookie.
3
- *
4
- * This function relies on `document.cookie`.
5
- */
6
1
  function getLocaleFromCookie(cookieName) {
7
- if (typeof document === "undefined")
8
- return undefined;
9
- const cookies = document.cookie.split(";").map((c) => c.trim());
10
- const entry = cookies.find((c) => c.startsWith(`${cookieName}=`));
11
- if (!entry)
12
- return undefined;
13
- return decodeURIComponent(entry.slice(cookieName.length + 1));
2
+ if (typeof document === "undefined") return void 0;
3
+ const cookies = document.cookie.split(";").map((c) => c.trim());
4
+ const entry = cookies.find((c) => c.startsWith(`${cookieName}=`));
5
+ if (!entry) return void 0;
6
+ return decodeURIComponent(entry.slice(cookieName.length + 1));
14
7
  }
15
8
 
16
9
  export { getLocaleFromCookie };
@@ -1,12 +1,6 @@
1
- /**
2
- * Set the document language attribute.
3
- *
4
- * This function relies on `document.documentElement.lang`.
5
- */
6
1
  function setDocumentLocale(locale) {
7
- if (typeof document === "undefined")
8
- return;
9
- document.documentElement.lang = locale;
2
+ if (typeof document === "undefined") return;
3
+ document.documentElement.lang = locale;
10
4
  }
11
5
 
12
6
  export { setDocumentLocale };
@@ -1,15 +1,8 @@
1
1
  import { buildCookieString } from '../build-cookie-string.js';
2
2
 
3
- /**
4
- * Persist locale to a cookie.
5
- *
6
- * This function relies on `document.cookie`.
7
- */
8
3
  const setLocaleCookie = (cookieOptions, locale) => {
9
- if (typeof document === "undefined")
10
- return;
11
- // Build and apply the cookie string
12
- document.cookie = buildCookieString(cookieOptions, locale);
4
+ if (typeof document === "undefined") return;
5
+ document.cookie = buildCookieString(cookieOptions, locale);
13
6
  };
14
7
 
15
8
  export { setLocaleCookie };
@@ -5,71 +5,67 @@ import { resolveEffectiveIsLoading, resolveEffectiveMessages } from '../../share
5
5
  import { attachLocaleEffects } from './effects/attach-locale-effects.js';
6
6
  import { attachMessagesEffects } from './effects/attach-messages-effects.js';
7
7
 
8
- const INTOR_CONTEXT_KEY = Symbol("IntorContext");
9
- function buildIntorStores({ config, locale: initialLocale, messages, handlers, hooks, onLocaleChange, isLoading: externalIsLoading, }) {
10
- // ---------------------------------------------------------------------------
11
- // Internal state
12
- // ---------------------------------------------------------------------------
13
- const locale = writable(initialLocale);
14
- const runtimeMessages = writable(null);
15
- const internalIsLoading = writable(false);
16
- // -----------------------------------------------------------------------------
17
- // Locale transition
18
- // -----------------------------------------------------------------------------
19
- /** Request a locale change. */
20
- function setLocale(next) {
21
- const current = get(locale);
22
- if (next === current)
23
- return;
24
- locale.set(next);
25
- void onLocaleChange?.(next); // Notify external listener (fire-and-forget)
26
- }
27
- // ---------------------------------------------------------------------------
28
- // Effective state
29
- // ---------------------------------------------------------------------------
30
- const externalIsLoadingStore = typeof externalIsLoading === "object" && "subscribe" in externalIsLoading
31
- ? externalIsLoading
32
- : readable(!!externalIsLoading);
33
- const effectiveIsLoading = derived([externalIsLoadingStore, internalIsLoading], ([$external, $internal]) => resolveEffectiveIsLoading($external, $internal));
34
- const effectiveMessages = derived(runtimeMessages, ($runtime) => resolveEffectiveMessages($runtime, messages, config.messages));
35
- // ---------------------------------------------------------------------------
36
- // Translator
37
- // ---------------------------------------------------------------------------
38
- const { loadingMessage, missingMessage } = config.translator ?? {};
39
- const translator = derived([effectiveMessages, locale, effectiveIsLoading], ([$messages, $locale, $isLoading]) => new Translator({
40
- messages: $messages,
41
- locale: $locale,
42
- isLoading: $isLoading,
43
- fallbackLocales: config.fallbackLocales,
44
- ...(loadingMessage !== undefined ? { loadingMessage } : {}),
45
- ...(missingMessage !== undefined ? { missingMessage } : {}),
46
- ...(handlers !== undefined ? { handlers } : {}),
47
- ...(hooks !== undefined ? { hooks } : {}),
48
- }));
49
- return {
50
- config,
51
- locale,
52
- setLocale,
53
- translator,
54
- runtimeMessages,
55
- internalIsLoading,
56
- };
8
+ const INTOR_CONTEXT_KEY = /* @__PURE__ */ Symbol("IntorContext");
9
+ function buildIntorStores({
10
+ config,
11
+ locale: initialLocale,
12
+ messages,
13
+ handlers,
14
+ hooks,
15
+ onLocaleChange,
16
+ isLoading: externalIsLoading
17
+ }) {
18
+ const locale = writable(initialLocale);
19
+ const runtimeMessages = writable(null);
20
+ const internalIsLoading = writable(false);
21
+ function setLocale(next) {
22
+ const current = get(locale);
23
+ if (next === current) return;
24
+ locale.set(next);
25
+ void onLocaleChange?.(next);
26
+ }
27
+ const externalIsLoadingStore = typeof externalIsLoading === "object" && "subscribe" in externalIsLoading ? externalIsLoading : readable(!!externalIsLoading);
28
+ const effectiveIsLoading = derived(
29
+ [externalIsLoadingStore, internalIsLoading],
30
+ ([$external, $internal]) => resolveEffectiveIsLoading($external, $internal)
31
+ );
32
+ const effectiveMessages = derived(
33
+ runtimeMessages,
34
+ ($runtime) => resolveEffectiveMessages($runtime, messages, config.messages)
35
+ );
36
+ const { loadingMessage, missingMessage } = config.translator ?? {};
37
+ const translator = derived(
38
+ [effectiveMessages, locale, effectiveIsLoading],
39
+ ([$messages, $locale, $isLoading]) => new Translator({
40
+ messages: $messages,
41
+ locale: $locale,
42
+ isLoading: $isLoading,
43
+ fallbackLocales: config.fallbackLocales,
44
+ ...loadingMessage !== void 0 ? { loadingMessage } : {},
45
+ ...missingMessage !== void 0 ? { missingMessage } : {},
46
+ ...handlers !== void 0 ? { handlers } : {},
47
+ ...hooks !== void 0 ? { hooks } : {}
48
+ })
49
+ );
50
+ return {
51
+ config,
52
+ locale,
53
+ setLocale,
54
+ translator,
55
+ runtimeMessages,
56
+ internalIsLoading
57
+ };
57
58
  }
58
- /**
59
- * Svelte initializer for Intor.
60
- *
61
- * @public
62
- */
63
59
  function createIntorStore(value) {
64
- const stores = buildIntorStores(value);
65
- attachLocaleEffects(stores.locale, value.config);
66
- attachMessagesEffects({
67
- config: value.config,
68
- locale: stores.locale,
69
- runtimeMessages: stores.runtimeMessages,
70
- internalIsLoading: stores.internalIsLoading,
71
- });
72
- setContext(INTOR_CONTEXT_KEY, stores);
60
+ const stores = buildIntorStores(value);
61
+ attachLocaleEffects(stores.locale, value.config);
62
+ attachMessagesEffects({
63
+ config: value.config,
64
+ locale: stores.locale,
65
+ runtimeMessages: stores.runtimeMessages,
66
+ internalIsLoading: stores.internalIsLoading
67
+ });
68
+ setContext(INTOR_CONTEXT_KEY, stores);
73
69
  }
74
70
 
75
71
  export { INTOR_CONTEXT_KEY, buildIntorStores, createIntorStore };