intor 2.2.14 → 2.3.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 (246) hide show
  1. package/dist/exports/config/index.d.ts +2 -0
  2. package/dist/exports/config/index.js +4 -0
  3. package/dist/exports/index.d.ts +5 -0
  4. package/dist/exports/index.js +11 -0
  5. package/dist/exports/next/index.d.ts +3 -0
  6. package/dist/exports/next/index.js +9 -0
  7. package/dist/exports/next/proxy/index.d.ts +2 -0
  8. package/dist/exports/next/proxy/index.js +2 -0
  9. package/dist/exports/next/server/index.d.ts +2 -0
  10. package/dist/exports/next/server/index.js +2 -0
  11. package/dist/exports/react/index.d.ts +2 -0
  12. package/dist/exports/react/index.js +6 -0
  13. package/dist/exports/server/index.d.ts +2 -0
  14. package/dist/exports/server/index.js +7 -0
  15. package/dist/src/adapters/next/navigation/index.d.ts +4 -0
  16. package/dist/src/adapters/next/navigation/link.d.ts +16 -0
  17. package/dist/src/adapters/next/navigation/link.js +25 -0
  18. package/dist/src/adapters/next/navigation/redirect.d.ts +16 -0
  19. package/dist/src/adapters/next/navigation/redirect.js +36 -0
  20. package/dist/src/adapters/next/navigation/use-pathname.d.ts +17 -0
  21. package/dist/src/adapters/next/navigation/use-pathname.js +49 -0
  22. package/dist/src/adapters/next/navigation/use-router.d.ts +20 -0
  23. package/dist/src/adapters/next/navigation/use-router.js +31 -0
  24. package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +7 -0
  25. package/dist/src/adapters/next/navigation/utils/should-full-reload.js +19 -0
  26. package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +16 -0
  27. package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +58 -0
  28. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.d.ts +12 -0
  29. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-all.js +60 -0
  30. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.d.ts +16 -0
  31. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-except-default.js +81 -0
  32. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.d.ts +10 -0
  33. package/dist/src/adapters/next/proxy/handle-prefix/handle-prefix-none.js +22 -0
  34. package/dist/src/adapters/next/proxy/index.d.ts +2 -0
  35. package/dist/src/adapters/next/proxy/intor-proxy.d.ts +6 -0
  36. package/dist/src/adapters/next/proxy/intor-proxy.js +22 -0
  37. package/dist/src/adapters/next/proxy/utils/create-response.d.ts +17 -0
  38. package/dist/src/adapters/next/proxy/utils/create-response.js +42 -0
  39. package/dist/src/adapters/next/proxy/utils/determine-initial-locale.d.ts +8 -0
  40. package/dist/src/adapters/next/proxy/utils/determine-initial-locale.js +28 -0
  41. package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.d.ts +15 -0
  42. package/dist/src/adapters/next/proxy/utils/set-locale-cookie-edge.js +24 -0
  43. package/dist/src/adapters/next/proxy/utils/set-pathname-header.d.ts +12 -0
  44. package/dist/src/adapters/next/proxy/utils/set-pathname-header.js +13 -0
  45. package/dist/src/adapters/next/server/get-i18n-context.d.ts +9 -0
  46. package/dist/src/adapters/next/server/get-i18n-context.js +47 -0
  47. package/dist/src/adapters/next/server/get-translator.d.ts +30 -0
  48. package/dist/src/adapters/next/server/get-translator.js +19 -0
  49. package/dist/src/adapters/next/server/index.d.ts +2 -0
  50. package/dist/src/adapters/next/shared/constants/pathname-header-name.d.ts +1 -0
  51. package/dist/src/adapters/next/shared/constants/pathname-header-name.js +4 -0
  52. package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.d.ts +16 -0
  53. package/dist/src/adapters/next/shared/utils/locale-prefix-pathname.js +33 -0
  54. package/dist/src/adapters/next/shared/utils/localize-pathname.d.ts +18 -0
  55. package/dist/src/adapters/next/shared/utils/localize-pathname.js +36 -0
  56. package/dist/src/client/react/contexts/config/context.d.ts +3 -0
  57. package/dist/src/client/react/contexts/config/context.js +6 -0
  58. package/dist/src/client/react/contexts/config/hook.d.ts +2 -0
  59. package/dist/src/client/react/contexts/config/hook.js +12 -0
  60. package/dist/src/client/react/contexts/config/index.d.ts +2 -0
  61. package/dist/src/client/react/contexts/config/provider.d.ts +2 -0
  62. package/dist/src/client/react/contexts/config/provider.js +11 -0
  63. package/dist/src/client/react/contexts/config/types.d.ts +10 -0
  64. package/dist/src/client/react/contexts/intor-provider/index.d.ts +2 -0
  65. package/dist/src/client/react/contexts/intor-provider/intor-provider.d.ts +2 -0
  66. package/dist/src/client/react/contexts/intor-provider/intor-provider.js +17 -0
  67. package/dist/src/client/react/contexts/intor-provider/types.d.ts +14 -0
  68. package/dist/src/client/react/contexts/locale/context.d.ts +3 -0
  69. package/dist/src/client/react/contexts/locale/context.js +6 -0
  70. package/dist/src/client/react/contexts/locale/hook.d.ts +1 -0
  71. package/dist/src/client/react/contexts/locale/hook.js +12 -0
  72. package/dist/src/client/react/contexts/locale/index.d.ts +2 -0
  73. package/dist/src/client/react/contexts/locale/provider.d.ts +3 -0
  74. package/dist/src/client/react/contexts/locale/provider.js +48 -0
  75. package/dist/src/client/react/contexts/locale/types.d.ts +13 -0
  76. package/dist/src/client/react/contexts/locale/utils/change-locale.d.ts +22 -0
  77. package/dist/src/client/react/contexts/locale/utils/change-locale.js +35 -0
  78. package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.d.ts +8 -0
  79. package/dist/src/client/react/contexts/locale/utils/use-init-locale-cookie.js +28 -0
  80. package/dist/src/client/react/contexts/messages/context.d.ts +3 -0
  81. package/dist/src/client/react/contexts/messages/context.js +6 -0
  82. package/dist/src/client/react/contexts/messages/hook.d.ts +2 -0
  83. package/dist/src/client/react/contexts/messages/hook.js +12 -0
  84. package/dist/src/client/react/contexts/messages/index.d.ts +2 -0
  85. package/dist/src/client/react/contexts/messages/provider.d.ts +3 -0
  86. package/dist/src/client/react/contexts/messages/provider.js +32 -0
  87. package/dist/src/client/react/contexts/messages/types.d.ts +15 -0
  88. package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.d.ts +16 -0
  89. package/dist/src/client/react/contexts/messages/utils/use-refetch-messages.js +57 -0
  90. package/dist/src/client/react/contexts/translate-handlers/context.d.ts +2 -0
  91. package/dist/src/client/react/contexts/translate-handlers/context.js +6 -0
  92. package/dist/src/client/react/contexts/translate-handlers/hook.d.ts +2 -0
  93. package/dist/src/client/react/contexts/translate-handlers/hook.js +10 -0
  94. package/dist/src/client/react/contexts/translate-handlers/index.d.ts +3 -0
  95. package/dist/src/client/react/contexts/translate-handlers/provider.d.ts +2 -0
  96. package/dist/src/client/react/contexts/translate-handlers/provider.js +11 -0
  97. package/dist/src/client/react/contexts/translate-handlers/types.d.ts +7 -0
  98. package/dist/src/client/react/contexts/translator/context.d.ts +3 -0
  99. package/dist/src/client/react/contexts/translator/context.js +6 -0
  100. package/dist/src/client/react/contexts/translator/hook.d.ts +2 -0
  101. package/dist/src/client/react/contexts/translator/hook.js +12 -0
  102. package/dist/src/client/react/contexts/translator/index.d.ts +2 -0
  103. package/dist/src/client/react/contexts/translator/provider.d.ts +2 -0
  104. package/dist/src/client/react/contexts/translator/provider.js +53 -0
  105. package/dist/src/client/react/contexts/translator/types.d.ts +11 -0
  106. package/dist/src/client/react/hooks/use-translator.d.ts +12 -0
  107. package/dist/src/client/react/hooks/use-translator.js +38 -0
  108. package/dist/src/client/react/index.d.ts +4 -0
  109. package/dist/src/client/shared/utils/get-initial-locale.d.ts +11 -0
  110. package/dist/src/client/shared/utils/get-initial-locale.js +21 -0
  111. package/dist/src/config/constants/cache.constants.d.ts +2 -0
  112. package/dist/src/config/constants/cache.constants.js +7 -0
  113. package/dist/src/config/constants/cookie.constants.d.ts +2 -0
  114. package/dist/src/config/constants/cookie.constants.js +14 -0
  115. package/dist/src/config/constants/routing.constants.d.ts +2 -0
  116. package/dist/src/config/constants/routing.constants.js +11 -0
  117. package/dist/src/config/define-intor-config.d.ts +2 -0
  118. package/dist/src/config/define-intor-config.js +34 -0
  119. package/dist/src/config/index.d.ts +5 -0
  120. package/dist/src/config/resolvers/resolve-cache-options.d.ts +2 -0
  121. package/dist/src/config/resolvers/resolve-cache-options.js +10 -0
  122. package/dist/src/config/resolvers/resolve-cookie-options.d.ts +11 -0
  123. package/dist/src/config/resolvers/resolve-cookie-options.js +19 -0
  124. package/dist/src/config/resolvers/resolve-fallback-locales.d.ts +3 -0
  125. package/dist/src/config/resolvers/resolve-fallback-locales.js +33 -0
  126. package/dist/src/config/resolvers/resolve-routing-options.d.ts +13 -0
  127. package/dist/src/config/resolvers/resolve-routing-options.js +28 -0
  128. package/dist/src/config/types/cache.types.d.ts +7 -0
  129. package/dist/src/config/types/cookie.types.d.ts +23 -0
  130. package/dist/src/config/types/intor-config.types.d.ts +41 -0
  131. package/dist/src/config/types/loader.types.d.ts +38 -0
  132. package/dist/src/config/types/logger.types.d.ts +7 -0
  133. package/dist/src/config/types/routing.types.d.ts +15 -0
  134. package/dist/src/config/types/translator.types.d.ts +4 -0
  135. package/dist/src/config/validators/validate-default-locale.d.ts +3 -0
  136. package/dist/src/config/validators/validate-default-locale.js +24 -0
  137. package/dist/src/config/validators/validate-supported-locales.d.ts +7 -0
  138. package/dist/src/config/validators/validate-supported-locales.js +22 -0
  139. package/dist/src/server/index.d.ts +4 -0
  140. package/dist/src/server/intor/index.d.ts +2 -0
  141. package/dist/src/server/intor/intor.d.ts +14 -0
  142. package/dist/src/server/intor/intor.js +67 -0
  143. package/dist/src/server/intor/types.d.ts +14 -0
  144. package/dist/src/server/messages/index.d.ts +7 -0
  145. package/dist/src/server/messages/load-local-messages/index.d.ts +2 -0
  146. package/dist/src/server/messages/load-local-messages/load-local-messages.d.ts +11 -0
  147. package/dist/src/server/messages/load-local-messages/load-local-messages.js +85 -0
  148. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.d.ts +29 -0
  149. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/collect-file-entries.js +95 -0
  150. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/index.d.ts +1 -0
  151. package/dist/src/server/messages/load-local-messages/read-locale-messages/collect-file-entries/types.d.ts +15 -0
  152. package/dist/src/server/messages/load-local-messages/read-locale-messages/index.d.ts +2 -0
  153. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/index.d.ts +1 -0
  154. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.d.ts +34 -0
  155. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/parse-file-entries.js +85 -0
  156. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/types.d.ts +18 -0
  157. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.d.ts +6 -0
  158. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/json-reader.js +12 -0
  159. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.d.ts +14 -0
  160. package/dist/src/server/messages/load-local-messages/read-locale-messages/parse-file-entries/utils/nest-object-from-path.js +21 -0
  161. package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.d.ts +10 -0
  162. package/dist/src/server/messages/load-local-messages/read-locale-messages/read-locale-messages.js +31 -0
  163. package/dist/src/server/messages/load-local-messages/read-locale-messages/types.d.ts +23 -0
  164. package/dist/src/server/messages/load-local-messages/types.d.ts +21 -0
  165. package/dist/src/server/messages/load-messages.d.ts +11 -0
  166. package/dist/src/server/messages/load-messages.js +77 -0
  167. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.d.ts +9 -0
  168. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.js +50 -0
  169. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/index.d.ts +1 -0
  170. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/types.d.ts +13 -0
  171. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.d.ts +5 -0
  172. package/dist/src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.js +25 -0
  173. package/dist/src/server/messages/load-remote-messages/index.d.ts +2 -0
  174. package/dist/src/server/messages/load-remote-messages/load-remote-messages.d.ts +9 -0
  175. package/dist/src/server/messages/load-remote-messages/load-remote-messages.js +79 -0
  176. package/dist/src/server/messages/load-remote-messages/types.d.ts +20 -0
  177. package/dist/src/server/messages/shared/global-messages-pool.d.ts +15 -0
  178. package/dist/src/server/messages/shared/global-messages-pool.js +10 -0
  179. package/dist/src/server/messages/shared/types.d.ts +39 -0
  180. package/dist/src/server/messages/shared/utils/is-valid-messages.d.ts +15 -0
  181. package/dist/src/server/messages/shared/utils/is-valid-messages.js +36 -0
  182. package/dist/src/server/messages/types.d.ts +15 -0
  183. package/dist/src/server/shared/logger/get-logger.d.ts +11 -0
  184. package/dist/src/server/shared/logger/get-logger.js +34 -0
  185. package/dist/src/server/shared/logger/global-logger-pool.d.ts +15 -0
  186. package/dist/src/server/shared/logger/global-logger-pool.js +8 -0
  187. package/dist/src/server/translator/get-translator.d.ts +33 -0
  188. package/dist/src/server/translator/get-translator.js +39 -0
  189. package/dist/src/server/translator/index.d.ts +1 -0
  190. package/dist/src/shared/constants/prefix-placeholder.d.ts +1 -0
  191. package/dist/src/shared/constants/prefix-placeholder.js +4 -0
  192. package/dist/src/shared/error/index.d.ts +1 -0
  193. package/dist/src/shared/error/intor-error.d.ts +16 -0
  194. package/dist/src/shared/error/intor-error.js +21 -0
  195. package/dist/src/shared/types/generated.types.d.ts +30 -0
  196. package/dist/src/shared/types/translator-instance.types.d.ts +33 -0
  197. package/dist/src/shared/utils/client/build-cookie-string.d.ts +9 -0
  198. package/dist/src/shared/utils/client/build-cookie-string.js +33 -0
  199. package/dist/src/shared/utils/client/set-locale-cookie-browser.d.ts +13 -0
  200. package/dist/src/shared/utils/client/set-locale-cookie-browser.js +21 -0
  201. package/dist/src/shared/utils/index.d.ts +8 -0
  202. package/dist/src/shared/utils/locale/normalize-locale.d.ts +4 -0
  203. package/dist/src/shared/utils/locale/normalize-locale.js +42 -0
  204. package/dist/src/shared/utils/locale/resolve-preferred-locale.d.ts +5 -0
  205. package/dist/src/shared/utils/locale/resolve-preferred-locale.js +26 -0
  206. package/dist/src/shared/utils/merge-messages.d.ts +6 -0
  207. package/dist/src/shared/utils/merge-messages.js +13 -0
  208. package/dist/src/shared/utils/normalize-cache-key.d.ts +3 -0
  209. package/dist/src/shared/utils/normalize-cache-key.js +29 -0
  210. package/dist/src/shared/utils/pathname/extract-pathname.d.ts +28 -0
  211. package/dist/src/shared/utils/pathname/extract-pathname.js +58 -0
  212. package/dist/src/shared/utils/pathname/normalize-pathname.d.ts +12 -0
  213. package/dist/src/shared/utils/pathname/normalize-pathname.js +43 -0
  214. package/dist/src/shared/utils/pathname/standardize-pathname.d.ts +18 -0
  215. package/dist/src/shared/utils/pathname/standardize-pathname.js +30 -0
  216. package/dist/src/shared/utils/resolve-namespaces.d.ts +10 -0
  217. package/dist/src/shared/utils/resolve-namespaces.js +33 -0
  218. package/package.json +32 -30
  219. package/dist/config/index.cjs +0 -198
  220. package/dist/config/index.d.cts +0 -145
  221. package/dist/config/index.d.ts +0 -145
  222. package/dist/config/index.js +0 -193
  223. package/dist/index.cjs +0 -234
  224. package/dist/index.d.cts +0 -224
  225. package/dist/index.d.ts +0 -224
  226. package/dist/index.js +0 -214
  227. package/dist/next/index.cjs +0 -940
  228. package/dist/next/index.d.cts +0 -282
  229. package/dist/next/index.d.ts +0 -282
  230. package/dist/next/index.js +0 -907
  231. package/dist/next/middleware/index.cjs +0 -387
  232. package/dist/next/middleware/index.d.cts +0 -128
  233. package/dist/next/middleware/index.d.ts +0 -128
  234. package/dist/next/middleware/index.js +0 -384
  235. package/dist/next/server/index.cjs +0 -734
  236. package/dist/next/server/index.d.cts +0 -277
  237. package/dist/next/server/index.d.ts +0 -277
  238. package/dist/next/server/index.js +0 -723
  239. package/dist/react/index.cjs +0 -649
  240. package/dist/react/index.d.cts +0 -224
  241. package/dist/react/index.d.ts +0 -224
  242. package/dist/react/index.js +0 -620
  243. package/dist/server/index.cjs +0 -696
  244. package/dist/server/index.d.cts +0 -377
  245. package/dist/server/index.d.ts +0 -377
  246. package/dist/server/index.js +0 -680
@@ -1,649 +0,0 @@
1
- 'use strict';
2
-
3
- var React7 = require('react');
4
- var jsxRuntime = require('react/jsx-runtime');
5
- var logry = require('logry');
6
- var Keyv = require('keyv');
7
- var merge = require('lodash.merge');
8
- var intorTranslator = require('intor-translator');
9
-
10
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
11
-
12
- function _interopNamespace(e) {
13
- if (e && e.__esModule) return e;
14
- var n = Object.create(null);
15
- if (e) {
16
- Object.keys(e).forEach(function (k) {
17
- if (k !== 'default') {
18
- var d = Object.getOwnPropertyDescriptor(e, k);
19
- Object.defineProperty(n, k, d.get ? d : {
20
- enumerable: true,
21
- get: function () { return e[k]; }
22
- });
23
- }
24
- });
25
- }
26
- n.default = e;
27
- return Object.freeze(n);
28
- }
29
-
30
- var React7__namespace = /*#__PURE__*/_interopNamespace(React7);
31
- var Keyv__default = /*#__PURE__*/_interopDefault(Keyv);
32
- var merge__default = /*#__PURE__*/_interopDefault(merge);
33
-
34
- // src/client/react/contexts/intor-provider/intor-provider.tsx
35
- var ConfigContext = React7__namespace.createContext(void 0);
36
- function ConfigProvider({
37
- value: { config, pathname },
38
- children
39
- }) {
40
- const value = React7__namespace.useMemo(() => ({ config, pathname }), [config, pathname]);
41
- return /* @__PURE__ */ jsxRuntime.jsx(ConfigContext.Provider, { value, children });
42
- }
43
- function useConfig() {
44
- const context = React7__namespace.useContext(ConfigContext);
45
- if (!context) throw new Error("useConfig must be used within ConfigProvider");
46
- return context;
47
- }
48
-
49
- // src/shared/utils/client/build-cookie-string.ts
50
- var buildCookieString = (cookie, locale) => {
51
- const parts = [`${cookie.name}=${encodeURIComponent(locale)}`];
52
- if (cookie.maxAge) {
53
- const expires = new Date(Date.now() + cookie.maxAge * 1e3).toUTCString();
54
- parts.push(`expires=${expires}`, `max-age=${cookie.maxAge}`);
55
- }
56
- parts.push(`path=${cookie.path ?? "/"}`);
57
- if (cookie.domain) {
58
- parts.push(`domain=${cookie.domain}`);
59
- }
60
- if (cookie.sameSite) {
61
- parts.push(
62
- `SameSite=${cookie.sameSite[0].toUpperCase()}${cookie.sameSite.slice(1).toLowerCase()}`
63
- );
64
- }
65
- if (cookie.secure !== false) {
66
- parts.push(`Secure`);
67
- }
68
- return parts.join("; ");
69
- };
70
-
71
- // src/shared/utils/client/set-locale-cookie-browser.ts
72
- var setLocaleCookieBrowser = ({
73
- cookie,
74
- locale
75
- }) => {
76
- if (typeof document === "undefined") return;
77
- if (!cookie.enabled || !cookie.autoSetCookie) return;
78
- const cookieString = buildCookieString(cookie, locale);
79
- document.cookie = cookieString;
80
- };
81
-
82
- // src/client/react/contexts/locale/utils/use-init-locale-cookie.ts
83
- var useInitLocaleCookie = ({
84
- config,
85
- locale
86
- }) => {
87
- React7__namespace.useEffect(() => {
88
- if (typeof document === "undefined") return;
89
- const { cookie, routing } = config;
90
- const { firstVisit } = routing;
91
- const cookies = document.cookie.split(";").map((c) => c.trim());
92
- const isCookieExists = cookies.some((c) => c.startsWith(`${cookie.name}=`));
93
- if (isCookieExists) return;
94
- if (!firstVisit.redirect) return;
95
- if (!cookie.enabled || !cookie.autoSetCookie) return;
96
- setLocaleCookieBrowser({ cookie, locale });
97
- }, []);
98
- };
99
-
100
- // src/config/constants/cache.constants.ts
101
- var DEFAULT_CACHE_OPTIONS = {
102
- enabled: process.env.NODE_ENV === "production",
103
- ttl: 60 * 60 * 1e3
104
- // 1 hour
105
- };
106
-
107
- // src/server/shared/logger/global-logger-pool.ts
108
- function getGlobalLoggerPool() {
109
- if (!globalThis.__INTOR_LOGGER_POOL__) {
110
- globalThis.__INTOR_LOGGER_POOL__ = /* @__PURE__ */ new Map();
111
- }
112
- return globalThis.__INTOR_LOGGER_POOL__;
113
- }
114
-
115
- // src/server/shared/logger/get-logger.ts
116
- var DEFAULT_FORMATTER_CONFIG = {
117
- node: { meta: { compact: true }, lineBreaksAfter: 1 }
118
- };
119
- function getLogger({
120
- id = "default",
121
- formatterConfig,
122
- preset,
123
- ...options
124
- }) {
125
- const pool = getGlobalLoggerPool();
126
- let logger = pool.get(id);
127
- const useDefault = !formatterConfig && !preset;
128
- if (!logger) {
129
- logger = logry.logry({
130
- id,
131
- formatterConfig: useDefault ? DEFAULT_FORMATTER_CONFIG : formatterConfig,
132
- preset,
133
- ...options
134
- });
135
- pool.set(id, logger);
136
- if (pool.size > 1e3) {
137
- const keys = [...pool.keys()];
138
- for (const key of keys.slice(0, 200)) pool.delete(key);
139
- }
140
- }
141
- return logger;
142
- }
143
-
144
- // src/server/messages/shared/utils/is-valid-messages.ts
145
- function isPlainObject(value) {
146
- return typeof value === "object" && value !== null && !Array.isArray(value);
147
- }
148
- function isValidMessages(value) {
149
- if (!isPlainObject(value)) return false;
150
- const stack = [value];
151
- while (stack.length > 0) {
152
- const current = stack.pop();
153
- for (const v of Object.values(current)) {
154
- if (typeof v === "string") continue;
155
- if (isPlainObject(v)) {
156
- stack.push(v);
157
- } else {
158
- return false;
159
- }
160
- }
161
- }
162
- return true;
163
- }
164
- function getGlobalMessagesPool() {
165
- if (!globalThis.__INTOR_MESSAGES_POOL__) {
166
- globalThis.__INTOR_MESSAGES_POOL__ = new Keyv__default.default();
167
- }
168
- return globalThis.__INTOR_MESSAGES_POOL__;
169
- }
170
- var mergeMessages = (staticMessages = {}, loadedMessages = {}) => {
171
- if (!loadedMessages) return { ...staticMessages };
172
- return merge__default.default({}, staticMessages, loadedMessages);
173
- };
174
-
175
- // src/shared/utils/normalize-cache-key.ts
176
- var CACHE_KEY_DELIMITER = "|";
177
- var sanitize = (k) => k.replaceAll(/[\u200B-\u200D\uFEFF]/g, "").replaceAll(/[\r\n]/g, "").trim();
178
- var normalizeCacheKey = (key, delimiter = CACHE_KEY_DELIMITER) => {
179
- if (key === null || key === void 0) return null;
180
- if (Array.isArray(key)) {
181
- if (key.length === 0) return null;
182
- const normalized = key.map((k) => {
183
- if (k === null) return "__null";
184
- if (k === void 0) return "__undefined";
185
- if (typeof k === "boolean") return k ? "__true" : "__false";
186
- return sanitize(String(k));
187
- });
188
- return normalized.join(delimiter);
189
- }
190
- if (typeof key === "boolean") return key ? "__true" : "__false";
191
- return String(key);
192
- };
193
-
194
- // src/shared/constants/prefix-placeholder.ts
195
- var PREFIX_PLACEHOLDER = "{locale}";
196
-
197
- // src/shared/utils/resolve-namespaces.ts
198
- var resolveNamespaces = ({
199
- config,
200
- pathname
201
- }) => {
202
- const { loader } = config;
203
- const { routeNamespaces = {}, namespaces } = loader || {};
204
- if (Object.keys(routeNamespaces).length === 0 && !namespaces)
205
- return void 0;
206
- const standardizedPathname = standardizePathname({ config, pathname });
207
- const placeholderRemovedPathname = standardizedPathname.replace(
208
- `/${PREFIX_PLACEHOLDER}`,
209
- ""
210
- );
211
- const collected = [
212
- ...routeNamespaces.default || [],
213
- // default
214
- ...namespaces || [],
215
- // default
216
- ...routeNamespaces[standardizedPathname] || [],
217
- // exact match
218
- ...routeNamespaces[placeholderRemovedPathname] || []
219
- // exact match
220
- ];
221
- const prefixPatterns = Object.keys(routeNamespaces).filter(
222
- (pattern) => pattern.endsWith("/*")
223
- );
224
- for (const pattern of prefixPatterns) {
225
- const basePath = pattern.replace(/\/\*$/, "");
226
- if (standardizedPathname.startsWith(basePath) || placeholderRemovedPathname.startsWith(basePath)) {
227
- collected.push(...routeNamespaces[pattern] || []);
228
- }
229
- }
230
- return [...new Set(collected)];
231
- };
232
-
233
- // src/shared/utils/pathname/normalize-pathname.ts
234
- var normalizePathname = (rawPathname, options = {}) => {
235
- const length = rawPathname.length;
236
- let start = 0;
237
- let end = length - 1;
238
- while (start <= end && (rawPathname.codePointAt(start) ?? 0) <= 32) start++;
239
- while (end >= start && (rawPathname.codePointAt(end) ?? 0) <= 32) end--;
240
- if (start > end) return "/";
241
- let result = "";
242
- let hasSlash = false;
243
- for (let i = start; i <= end; i++) {
244
- const char = rawPathname[i];
245
- if (char === "/") {
246
- if (!hasSlash) {
247
- hasSlash = true;
248
- }
249
- } else {
250
- result += hasSlash || result === "" ? "/" + char : char;
251
- hasSlash = false;
252
- }
253
- }
254
- if (options.removeLeadingSlash && result.startsWith("/")) {
255
- result = result.slice(1);
256
- }
257
- return result || "/";
258
- };
259
-
260
- // src/shared/utils/pathname/standardize-pathname.ts
261
- var standardizePathname = ({
262
- config,
263
- pathname
264
- }) => {
265
- const { routing } = config;
266
- const { basePath } = routing;
267
- const parts = [
268
- normalizePathname(basePath),
269
- PREFIX_PLACEHOLDER,
270
- normalizePathname(pathname)
271
- ];
272
- const standardizedPathname = parts.join("/").replaceAll(/\/{2,}/g, "/");
273
- return normalizePathname(standardizedPathname);
274
- };
275
-
276
- // src/server/messages/load-remote-messages/fetch-locale-messages/fetch-locale-messages.ts
277
- var fetchLocaleMessages = async ({
278
- remoteUrl,
279
- remoteHeaders,
280
- searchParams,
281
- locale,
282
- extraOptions: { loggerOptions } = {}
283
- }) => {
284
- const baseLogger = getLogger({ ...loggerOptions });
285
- const logger = baseLogger.child({ scope: "fetch-locale-messages" });
286
- try {
287
- const params = new URLSearchParams(searchParams);
288
- params.append("locale", locale);
289
- const url = `${remoteUrl}?${params.toString()}`;
290
- const headers = {
291
- "Content-Type": "application/json",
292
- ...remoteHeaders
293
- };
294
- const response = await fetch(url, {
295
- method: "GET",
296
- headers,
297
- cache: "no-store"
298
- });
299
- if (!response.ok) {
300
- throw new Error(`HTTP error ${response.status} ${response.statusText}`);
301
- }
302
- const data = await response.json();
303
- if (!isValidMessages(data[locale])) {
304
- throw new Error("JSON file does not match NamespaceMessages structure");
305
- }
306
- return data;
307
- } catch (error) {
308
- logger.warn("Fetching locale messages failed.", {
309
- locale,
310
- remoteUrl,
311
- searchParams: decodeURIComponent(searchParams.toString()),
312
- error
313
- });
314
- return;
315
- }
316
- };
317
-
318
- // src/server/messages/load-remote-messages/fetch-locale-messages/utils/build-search-params.ts
319
- var buildSearchParams = (params) => {
320
- const searchParams = new URLSearchParams();
321
- const appendParam = (key, value) => {
322
- if (value === void 0 || value === null) return;
323
- if (Array.isArray(value) && value.length === 0) return;
324
- if (Array.isArray(value)) {
325
- value.forEach((v) => v && searchParams.append(key, v));
326
- } else {
327
- searchParams.append(key, value);
328
- }
329
- };
330
- Object.entries(params).forEach(([key, value]) => {
331
- appendParam(key, value);
332
- });
333
- return searchParams;
334
- };
335
-
336
- // src/server/messages/load-remote-messages/load-remote-messages.ts
337
- var loadRemoteMessages = async ({
338
- pool = getGlobalMessagesPool(),
339
- rootDir,
340
- remoteUrl,
341
- remoteHeaders,
342
- locale,
343
- fallbackLocales = [],
344
- namespaces = [],
345
- extraOptions: {
346
- cacheOptions = DEFAULT_CACHE_OPTIONS,
347
- loggerOptions = { id: "default" }
348
- } = {},
349
- allowCacheWrite
350
- }) => {
351
- const baseLogger = getLogger({ ...loggerOptions });
352
- const logger = baseLogger.child({ scope: "load-remote-messages" });
353
- const start = performance.now();
354
- logger.debug("Loading remote messages from api.", { remoteUrl });
355
- const key = normalizeCacheKey([
356
- loggerOptions.id,
357
- "loaderType:remote",
358
- rootDir,
359
- locale,
360
- (fallbackLocales ?? []).toSorted().join(","),
361
- (namespaces ?? []).toSorted().join(",")
362
- ]);
363
- if (cacheOptions.enabled && key) {
364
- const cached = await pool?.get(key);
365
- if (cached) {
366
- logger.debug("Messages cache hit.", { key });
367
- return cached;
368
- }
369
- }
370
- const searchParams = buildSearchParams({ rootDir, namespaces });
371
- const candidateLocales = [locale, ...fallbackLocales || []];
372
- let messages;
373
- for (const candidateLocale of candidateLocales) {
374
- try {
375
- const result = await fetchLocaleMessages({
376
- remoteUrl,
377
- remoteHeaders,
378
- searchParams,
379
- locale: candidateLocale,
380
- extraOptions: { loggerOptions }
381
- });
382
- if (result && Object.values(result[candidateLocale] || {}).length > 0) {
383
- messages = result;
384
- break;
385
- }
386
- } catch (error) {
387
- logger.error("Failed to fetch locale messages.", {
388
- locale: candidateLocale,
389
- error
390
- });
391
- }
392
- }
393
- if (allowCacheWrite && cacheOptions.enabled && key && messages) {
394
- await pool?.set(key, messages, cacheOptions.ttl);
395
- }
396
- const end = performance.now();
397
- const duration = Math.round(end - start);
398
- logger.trace("Finished loading remote messages.", {
399
- loadedLocale: messages ? Object.keys(messages)[0] : void 0,
400
- duration: `${duration} ms`
401
- });
402
- return messages;
403
- };
404
-
405
- // src/client/react/contexts/messages/utils/use-refetch-messages.ts
406
- var useRefetchMessages = ({
407
- config,
408
- pathname,
409
- setLoadedMessages,
410
- setIsLoadingMessages
411
- }) => {
412
- const { messages: staticMessages, loader } = config;
413
- const namespaces = React7__namespace.useMemo(() => {
414
- if (!loader) return [];
415
- return resolveNamespaces({ config, pathname });
416
- }, [config, pathname]);
417
- const refetchMessages = React7__namespace.useCallback(
418
- async (newLocale) => {
419
- if (loader?.type === "remote") {
420
- setIsLoadingMessages(true);
421
- const loadedMessages = await loadRemoteMessages({
422
- rootDir: loader.rootDir,
423
- remoteUrl: loader.remoteUrl,
424
- remoteHeaders: loader.remoteHeaders,
425
- locale: newLocale,
426
- fallbackLocales: config.fallbackLocales[newLocale] || [],
427
- namespaces,
428
- extraOptions: {
429
- cacheOptions: config.cache,
430
- loggerOptions: { id: config.id }
431
- }
432
- });
433
- const messages = mergeMessages(staticMessages, loadedMessages);
434
- setLoadedMessages(messages);
435
- setIsLoadingMessages(false);
436
- }
437
- },
438
- [
439
- loader,
440
- config.fallbackLocales,
441
- config.cache,
442
- config.id,
443
- setIsLoadingMessages,
444
- namespaces,
445
- staticMessages,
446
- setLoadedMessages
447
- ]
448
- );
449
- return { refetchMessages };
450
- };
451
- var MessagesContext = React7__namespace.createContext(void 0);
452
- function MessagesProvider({
453
- value: { messages = {} },
454
- children
455
- }) {
456
- const { config, pathname } = useConfig();
457
- const [loadedMessages, setLoadedMessages] = React7__namespace.useState(null);
458
- const [isLoadingMessages, setIsLoadingMessages] = React7__namespace.useState(false);
459
- const { refetchMessages } = useRefetchMessages({
460
- config,
461
- pathname,
462
- setLoadedMessages,
463
- setIsLoadingMessages
464
- });
465
- const value = React7__namespace.useMemo(
466
- () => ({
467
- messages: loadedMessages || messages,
468
- isLoading: isLoadingMessages,
469
- setLoadedMessages,
470
- setIsLoadingMessages,
471
- refetchMessages
472
- }),
473
- [loadedMessages, messages, isLoadingMessages, refetchMessages]
474
- );
475
- return /* @__PURE__ */ jsxRuntime.jsx(MessagesContext.Provider, { value, children });
476
- }
477
- function useMessages() {
478
- const context = React7__namespace.useContext(MessagesContext);
479
- if (!context)
480
- throw new Error("useMessages must be used within a MessagesProvider");
481
- return context;
482
- }
483
- var LocaleContext = React7__namespace.createContext(void 0);
484
-
485
- // src/client/react/contexts/locale/utils/change-locale.ts
486
- var changeLocale = ({
487
- currentLocale,
488
- newLocale,
489
- loader,
490
- cookie,
491
- setLocale,
492
- refetchMessages
493
- }) => {
494
- if (typeof document === "undefined") return;
495
- const { type } = loader || {};
496
- if (newLocale === currentLocale) return;
497
- if (type === "local") {
498
- console.warn(
499
- `[Intor] You are using "loader type: local" to switch languages. Please make sure to use the wrapped <Link> component to trigger a page reload, ensuring that the translation data is dynamically updated.`
500
- );
501
- }
502
- setLocale(newLocale);
503
- setLocaleCookieBrowser({ cookie, locale: newLocale });
504
- document.documentElement.lang = newLocale;
505
- if (type === "remote" && refetchMessages) {
506
- void refetchMessages(newLocale);
507
- }
508
- };
509
- function LocaleProvider({
510
- value: { initialLocale, onLocaleChange },
511
- children
512
- }) {
513
- const { config } = useConfig();
514
- const { refetchMessages } = useMessages();
515
- const { loader, cookie } = config;
516
- const [currentLocale, setCurrentLocale] = React7__namespace.useState(initialLocale);
517
- useInitLocaleCookie({ config, locale: initialLocale });
518
- const setLocale = React7__namespace.useCallback(
519
- async (newLocale) => {
520
- changeLocale({
521
- currentLocale,
522
- newLocale,
523
- loader,
524
- cookie,
525
- setLocale: setCurrentLocale,
526
- refetchMessages
527
- });
528
- onLocaleChange?.(newLocale);
529
- },
530
- [currentLocale, loader, cookie, refetchMessages, onLocaleChange]
531
- );
532
- const value = React7__namespace.useMemo(
533
- () => ({
534
- locale: currentLocale,
535
- setLocale
536
- }),
537
- [currentLocale, setLocale]
538
- );
539
- return /* @__PURE__ */ jsxRuntime.jsx(LocaleContext.Provider, { value, children });
540
- }
541
- function useLocale() {
542
- const context = React7__namespace.useContext(LocaleContext);
543
- if (!context)
544
- throw new Error("useLocale must be used within a LocaleProvider");
545
- return context;
546
- }
547
- var TranslateHandlersContext = React7__namespace.createContext(void 0);
548
- var TranslateHandlersProvider = ({
549
- handlers,
550
- children
551
- }) => {
552
- return /* @__PURE__ */ jsxRuntime.jsx(TranslateHandlersContext.Provider, { value: handlers, children });
553
- };
554
- function useTranslateHandlers() {
555
- const context = React7__namespace.useContext(TranslateHandlersContext);
556
- return context;
557
- }
558
- var TranslatorContext = React7__namespace.createContext(void 0);
559
- function TranslatorProvider({
560
- value: { isLoading: externalIsLoading },
561
- children
562
- }) {
563
- const { config } = useConfig();
564
- const { messages, isLoading: internalIsLoading } = useMessages();
565
- const { locale } = useLocale();
566
- const translateHandlers = useTranslateHandlers();
567
- const { fallbackLocales, translator: translatorOptions } = config;
568
- const isLoading = Boolean(externalIsLoading ?? internalIsLoading);
569
- const translator = React7__namespace.useMemo(() => {
570
- return new intorTranslator.Translator({
571
- messages,
572
- locale,
573
- isLoading,
574
- fallbackLocales,
575
- loadingMessage: translatorOptions?.loadingMessage,
576
- placeholder: translatorOptions?.placeholder,
577
- handlers: translateHandlers
578
- });
579
- }, [
580
- messages,
581
- locale,
582
- isLoading,
583
- fallbackLocales,
584
- translateHandlers,
585
- translatorOptions?.loadingMessage,
586
- translatorOptions?.placeholder
587
- ]);
588
- return /* @__PURE__ */ jsxRuntime.jsx(TranslatorContext.Provider, { value: { translator }, children });
589
- }
590
- function useTranslator() {
591
- const context = React7__namespace.useContext(TranslatorContext);
592
- if (!context)
593
- throw new Error(
594
- "useTranslator must be used within IntorTranslatorProvider"
595
- );
596
- return context;
597
- }
598
- var IntorProvider = ({
599
- value: {
600
- config,
601
- pathname = "",
602
- initialLocale,
603
- messages = config.messages,
604
- onLocaleChange,
605
- isLoading
606
- },
607
- children
608
- }) => {
609
- return /* @__PURE__ */ jsxRuntime.jsx(ConfigProvider, { value: { config, pathname }, children: /* @__PURE__ */ jsxRuntime.jsx(MessagesProvider, { value: { messages }, children: /* @__PURE__ */ jsxRuntime.jsx(LocaleProvider, { value: { initialLocale, onLocaleChange }, children: /* @__PURE__ */ jsxRuntime.jsx(TranslatorProvider, { value: { isLoading }, children }) }) }) });
610
- };
611
-
612
- // src/client/react/hooks/use-translator.ts
613
- function useTranslator2(preKey) {
614
- const { translator } = useTranslator();
615
- const { setLocale } = useLocale();
616
- const props = {
617
- messages: translator.messages,
618
- locale: translator.locale,
619
- isLoading: translator.isLoading,
620
- setLocale
621
- };
622
- const scoped = translator.scoped(preKey);
623
- return {
624
- ...props,
625
- hasKey: preKey ? scoped.hasKey : translator.hasKey,
626
- t: preKey ? scoped.t : translator.t
627
- };
628
- }
629
-
630
- // src/client/shared/utils/get-initial-locale.ts
631
- function getInitialLocale(config, cookieName = config.cookie.name) {
632
- const { defaultLocale, supportedLocales } = config;
633
- const match = document.cookie.match(
634
- new RegExp(
635
- `(?:^|; )${cookieName.replaceAll(/([.$?*|{}()[\]\\/+^])/g, String.raw`\$1`)}=([^;]*)`
636
- )
637
- );
638
- const cookieLocale = match ? decodeURIComponent(match[1]) : null;
639
- const browserLocale = navigator.languages?.[0] || navigator.language;
640
- const locale = cookieLocale || browserLocale || defaultLocale;
641
- const normalized = locale.toLowerCase();
642
- const matched = supportedLocales.find((l) => l.toLowerCase() === normalized);
643
- return matched ?? defaultLocale;
644
- }
645
-
646
- exports.IntorProvider = IntorProvider;
647
- exports.TranslateHandlersProvider = TranslateHandlersProvider;
648
- exports.getInitialLocale = getInitialLocale;
649
- exports.useTranslator = useTranslator2;