intor 2.2.14 → 2.2.15

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/middleware/index.d.ts +2 -0
  8. package/dist/exports/next/middleware/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/middleware/handle-prefix/handle-prefix-all.d.ts +12 -0
  16. package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-all.js +60 -0
  17. package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-except-default.d.ts +16 -0
  18. package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-except-default.js +81 -0
  19. package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-none.d.ts +10 -0
  20. package/dist/src/adapters/next/middleware/handle-prefix/handle-prefix-none.js +22 -0
  21. package/dist/src/adapters/next/middleware/index.d.ts +2 -0
  22. package/dist/src/adapters/next/middleware/intor-middleware.d.ts +6 -0
  23. package/dist/src/adapters/next/middleware/intor-middleware.js +22 -0
  24. package/dist/src/adapters/next/middleware/utils/create-response.d.ts +17 -0
  25. package/dist/src/adapters/next/middleware/utils/create-response.js +42 -0
  26. package/dist/src/adapters/next/middleware/utils/determine-initial-locale.d.ts +8 -0
  27. package/dist/src/adapters/next/middleware/utils/determine-initial-locale.js +28 -0
  28. package/dist/src/adapters/next/middleware/utils/set-locale-cookie-edge.d.ts +15 -0
  29. package/dist/src/adapters/next/middleware/utils/set-locale-cookie-edge.js +24 -0
  30. package/dist/src/adapters/next/middleware/utils/set-pathname-header.d.ts +12 -0
  31. package/dist/src/adapters/next/middleware/utils/set-pathname-header.js +13 -0
  32. package/dist/src/adapters/next/navigation/index.d.ts +4 -0
  33. package/dist/src/adapters/next/navigation/link.d.ts +16 -0
  34. package/dist/src/adapters/next/navigation/link.js +25 -0
  35. package/dist/src/adapters/next/navigation/redirect.d.ts +16 -0
  36. package/dist/src/adapters/next/navigation/redirect.js +36 -0
  37. package/dist/src/adapters/next/navigation/use-pathname.d.ts +17 -0
  38. package/dist/src/adapters/next/navigation/use-pathname.js +49 -0
  39. package/dist/src/adapters/next/navigation/use-router.d.ts +20 -0
  40. package/dist/src/adapters/next/navigation/use-router.js +31 -0
  41. package/dist/src/adapters/next/navigation/utils/should-full-reload.d.ts +7 -0
  42. package/dist/src/adapters/next/navigation/utils/should-full-reload.js +19 -0
  43. package/dist/src/adapters/next/navigation/utils/use-locale-switch.d.ts +16 -0
  44. package/dist/src/adapters/next/navigation/utils/use-locale-switch.js +58 -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 +28 -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,387 +0,0 @@
1
- 'use strict';
2
-
3
- var server = require('next/server');
4
- var headers = require('next/headers');
5
-
6
- // src/adapters/next/middleware/utils/create-response.ts
7
-
8
- // src/adapters/next/middleware/utils/set-locale-cookie-edge.ts
9
- function setLocaleCookieEdge({
10
- request,
11
- response,
12
- cookie,
13
- locale,
14
- override = false
15
- // Default to not override existed cookie
16
- }) {
17
- if (!cookie.enabled || !cookie.autoSetCookie) return;
18
- const isCookieExists = request.cookies.has(cookie.name);
19
- if (isCookieExists && !override) return;
20
- response.cookies.set(cookie.name, locale, {
21
- maxAge: cookie.maxAge,
22
- path: cookie.path,
23
- ...cookie.domain ? { domain: cookie.domain } : {},
24
- secure: cookie.secure,
25
- httpOnly: cookie.httpOnly,
26
- sameSite: cookie.sameSite
27
- });
28
- }
29
-
30
- // src/adapters/next/shared/constants/pathname-header-name.ts
31
- var PATHNAME_HEADER_NAME = "x-intor-pathname";
32
-
33
- // src/adapters/next/middleware/utils/set-pathname-header.ts
34
- var setPathnameHeader = ({
35
- request,
36
- response,
37
- key = PATHNAME_HEADER_NAME
38
- }) => {
39
- const pathname = request.nextUrl.pathname;
40
- response.headers.set(key, pathname);
41
- return response;
42
- };
43
-
44
- // src/shared/constants/prefix-placeholder.ts
45
- var PREFIX_PLACEHOLDER = "{locale}";
46
-
47
- // src/shared/utils/locale/normalize-locale.ts
48
- var toCanonical = (input) => {
49
- try {
50
- return Intl.getCanonicalLocales(input)[0]?.toLowerCase();
51
- } catch {
52
- return;
53
- }
54
- };
55
- var normalizeLocale = (locale = "", supportedLocales = []) => {
56
- if (!locale || supportedLocales.length === 0) return;
57
- const canonicalLocale = toCanonical(locale);
58
- if (!canonicalLocale) return;
59
- const supportedCanonicalMap = /* @__PURE__ */ new Map();
60
- for (const l of supportedLocales) {
61
- const normalized = toCanonical(l);
62
- if (normalized) {
63
- supportedCanonicalMap.set(normalized, l);
64
- }
65
- }
66
- if (supportedCanonicalMap.has(canonicalLocale)) {
67
- return supportedCanonicalMap.get(canonicalLocale);
68
- }
69
- const baseLang = canonicalLocale.split("-")[0];
70
- for (const [key, original] of supportedCanonicalMap) {
71
- const supportedBase = key.split("-")[0];
72
- if (supportedBase === baseLang) {
73
- return original;
74
- }
75
- }
76
- return;
77
- };
78
-
79
- // src/shared/utils/locale/resolve-preferred-locale.ts
80
- var resolvePreferredLocale = (acceptLanguageHeader, supportedLocales) => {
81
- if (!acceptLanguageHeader || !supportedLocales || supportedLocales.length === 0) {
82
- return;
83
- }
84
- const supportedLocalesSet = new Set(supportedLocales);
85
- const preferred = acceptLanguageHeader.split(",").map((part) => {
86
- const [lang, qValue] = part.split(";");
87
- const q = qValue ? Number.parseFloat(qValue.split("=")[1]) : 1;
88
- if (Number.isNaN(q)) {
89
- return { lang: lang.trim(), q: 0 };
90
- }
91
- return { lang: lang.trim(), q };
92
- }).toSorted((a, b) => b.q - a.q).find(({ lang }) => supportedLocalesSet.has(lang))?.lang;
93
- return preferred;
94
- };
95
-
96
- // src/shared/utils/pathname/normalize-pathname.ts
97
- var normalizePathname = (rawPathname, options = {}) => {
98
- const length = rawPathname.length;
99
- let start = 0;
100
- let end = length - 1;
101
- while (start <= end && (rawPathname.codePointAt(start) ?? 0) <= 32) start++;
102
- while (end >= start && (rawPathname.codePointAt(end) ?? 0) <= 32) end--;
103
- if (start > end) return "/";
104
- let result = "";
105
- let hasSlash = false;
106
- for (let i = start; i <= end; i++) {
107
- const char = rawPathname[i];
108
- if (char === "/") {
109
- if (!hasSlash) {
110
- hasSlash = true;
111
- }
112
- } else {
113
- result += hasSlash || result === "" ? "/" + char : char;
114
- hasSlash = false;
115
- }
116
- }
117
- if (options.removeLeadingSlash && result.startsWith("/")) {
118
- result = result.slice(1);
119
- }
120
- return result || "/";
121
- };
122
-
123
- // src/shared/utils/pathname/extract-pathname.ts
124
- var extractPathname = ({
125
- config,
126
- pathname: rawPathname
127
- }) => {
128
- const { routing, defaultLocale } = config;
129
- const { basePath, prefix } = routing;
130
- const normalizedPathname = normalizePathname(rawPathname);
131
- let prefixedPathname = normalizedPathname;
132
- if (basePath && normalizedPathname.startsWith(basePath + "/")) {
133
- prefixedPathname = normalizedPathname.slice(basePath.length) || "/";
134
- } else if (basePath && normalizedPathname === basePath) {
135
- prefixedPathname = "/";
136
- }
137
- const pathPart = prefixedPathname.split("/").find(Boolean);
138
- const maybeLocale = pathPart || "";
139
- const isLocalePrefixed = config.supportedLocales?.includes(maybeLocale);
140
- let unprefixedPathname = prefixedPathname;
141
- if (prefix === "all") {
142
- if (isLocalePrefixed) {
143
- unprefixedPathname = prefixedPathname.slice(maybeLocale.length + 1) || "/";
144
- }
145
- } else if (prefix === "except-default") {
146
- if (maybeLocale && maybeLocale !== defaultLocale && isLocalePrefixed) {
147
- unprefixedPathname = prefixedPathname.slice(maybeLocale.length + 1) || "/";
148
- }
149
- }
150
- return {
151
- basePath,
152
- prefixedPathname,
153
- unprefixedPathname,
154
- maybeLocale,
155
- isLocalePrefixed: Boolean(isLocalePrefixed)
156
- };
157
- };
158
-
159
- // src/shared/utils/pathname/standardize-pathname.ts
160
- var standardizePathname = ({
161
- config,
162
- pathname
163
- }) => {
164
- const { routing } = config;
165
- const { basePath } = routing;
166
- const parts = [
167
- normalizePathname(basePath),
168
- PREFIX_PLACEHOLDER,
169
- normalizePathname(pathname)
170
- ];
171
- const standardizedPathname = parts.join("/").replaceAll(/\/{2,}/g, "/");
172
- return normalizePathname(standardizedPathname);
173
- };
174
-
175
- // src/adapters/next/shared/utils/locale-prefix-pathname.ts
176
- var localePrefixPathname = ({
177
- config,
178
- pathname: standardizedPathname,
179
- locale
180
- }) => {
181
- const { routing } = config;
182
- const { prefix } = routing;
183
- if (prefix !== "none" && !locale) {
184
- throw new Error('No locale when using prefix "all", "except-default"');
185
- }
186
- if (prefix === "all") {
187
- return normalizePathname(
188
- standardizedPathname.replaceAll(PREFIX_PLACEHOLDER, locale)
189
- );
190
- }
191
- if (prefix === "except-default") {
192
- return locale === config.defaultLocale ? normalizePathname(
193
- standardizedPathname.replaceAll(`/${PREFIX_PLACEHOLDER}`, "")
194
- ) : normalizePathname(
195
- standardizedPathname.replaceAll(PREFIX_PLACEHOLDER, locale)
196
- );
197
- }
198
- return normalizePathname(
199
- standardizedPathname.replaceAll(`/${PREFIX_PLACEHOLDER}`, "")
200
- );
201
- };
202
-
203
- // src/adapters/next/shared/utils/localize-pathname.ts
204
- var localizePathname = ({
205
- config,
206
- pathname: rawPathname,
207
- locale
208
- }) => {
209
- const { unprefixedPathname } = extractPathname({
210
- config,
211
- pathname: rawPathname
212
- });
213
- const standardizedPathname = standardizePathname({
214
- config,
215
- pathname: unprefixedPathname
216
- });
217
- const localePrefixedPathname = localePrefixPathname({
218
- config,
219
- pathname: standardizedPathname,
220
- locale
221
- });
222
- return {
223
- unprefixedPathname,
224
- standardizedPathname,
225
- localePrefixedPathname
226
- };
227
- };
228
-
229
- // src/adapters/next/middleware/utils/create-response.ts
230
- var createResponse = ({
231
- request,
232
- config,
233
- locale,
234
- responseType = "next",
235
- setCookieOptions = { override: false }
236
- }) => {
237
- const { cookie } = config;
238
- const { override } = setCookieOptions;
239
- const url = request.nextUrl.clone();
240
- const { localePrefixedPathname } = localizePathname({
241
- config,
242
- pathname: url.pathname,
243
- locale
244
- });
245
- url.pathname = localePrefixedPathname;
246
- const response = responseType === "redirect" ? server.NextResponse.redirect(url) : server.NextResponse.next();
247
- if (locale) {
248
- setLocaleCookieEdge({
249
- request,
250
- response,
251
- locale,
252
- cookie,
253
- override
254
- });
255
- }
256
- const finalResponse = setPathnameHeader({
257
- request,
258
- response
259
- });
260
- return finalResponse;
261
- };
262
- var determineInitialLocale = async (config) => {
263
- const { defaultLocale, supportedLocales, routing } = config;
264
- let initialLocale = defaultLocale;
265
- if (routing.firstVisit.localeSource === "browser") {
266
- const headersStore = await headers.headers();
267
- const acceptLanguageHeader = headersStore.get("accept-language") || void 0;
268
- const preferredLocale = resolvePreferredLocale(
269
- acceptLanguageHeader,
270
- supportedLocales
271
- );
272
- initialLocale = normalizeLocale(preferredLocale, supportedLocales) || defaultLocale;
273
- }
274
- return initialLocale;
275
- };
276
-
277
- // src/adapters/next/middleware/handle-prefix/handle-prefix-all.ts
278
- var handlePrefixAll = async (config, request) => {
279
- const { cookie, routing } = config;
280
- const { maybeLocale, isLocalePrefixed } = extractPathname({
281
- config,
282
- pathname: request.nextUrl.pathname
283
- });
284
- const localeFromCookie = request.cookies.get(cookie.name)?.value;
285
- if (isLocalePrefixed) {
286
- return createResponse({
287
- request,
288
- config,
289
- locale: maybeLocale,
290
- setCookieOptions: { override: true }
291
- });
292
- }
293
- if (!localeFromCookie) {
294
- if (!routing.firstVisit.redirect) {
295
- return createResponse({ request, config });
296
- }
297
- const initialLocale = await determineInitialLocale(config);
298
- return createResponse({
299
- request,
300
- config,
301
- locale: initialLocale,
302
- // Use locale from 'browser' | 'default'
303
- responseType: "redirect"
304
- });
305
- }
306
- return createResponse({
307
- request,
308
- config,
309
- locale: localeFromCookie,
310
- // Use locale from cookie
311
- responseType: "redirect"
312
- });
313
- };
314
-
315
- // src/adapters/next/middleware/handle-prefix/handle-prefix-except-default.ts
316
- var handlePrefixExceptDefault = async (config, request) => {
317
- const { defaultLocale, cookie, routing } = config;
318
- const { maybeLocale, isLocalePrefixed } = extractPathname({
319
- config,
320
- pathname: request.nextUrl.pathname
321
- });
322
- const localeFromCookie = request.cookies.get(cookie.name)?.value;
323
- if (isLocalePrefixed && maybeLocale !== defaultLocale) {
324
- return createResponse({
325
- request,
326
- config,
327
- locale: maybeLocale,
328
- setCookieOptions: { override: true }
329
- });
330
- }
331
- if (!localeFromCookie) {
332
- if (!routing.firstVisit.redirect) {
333
- return createResponse({ request, config });
334
- }
335
- const initialLocale = await determineInitialLocale(config);
336
- const isDefaultLocale2 = initialLocale === defaultLocale;
337
- if (isDefaultLocale2) {
338
- return createResponse({
339
- request,
340
- config,
341
- locale: defaultLocale
342
- });
343
- }
344
- return createResponse({
345
- request,
346
- config,
347
- locale: initialLocale,
348
- // Use locale from 'browser' | 'default'
349
- responseType: "redirect"
350
- });
351
- }
352
- const isDefaultLocale = localeFromCookie === defaultLocale;
353
- if (isDefaultLocale) {
354
- return createResponse({ request, config, locale: localeFromCookie });
355
- }
356
- return createResponse({
357
- request,
358
- config,
359
- locale: localeFromCookie,
360
- // Use locale from cookie
361
- responseType: "redirect"
362
- });
363
- };
364
-
365
- // src/adapters/next/middleware/handle-prefix/handle-prefix-none.ts
366
- var handlePrefixNone = async (config, request) => {
367
- let locale = request.cookies.get(config.cookie.name)?.value;
368
- if (!locale) {
369
- locale = await determineInitialLocale(config);
370
- }
371
- return createResponse({ request, config, locale });
372
- };
373
-
374
- // src/adapters/next/middleware/intor-middleware.ts
375
- async function intorMiddleware(config, request) {
376
- const { prefix } = config.routing;
377
- if (prefix === "none") {
378
- return handlePrefixNone(config, request);
379
- }
380
- if (prefix === "except-default") {
381
- return await handlePrefixExceptDefault(config, request);
382
- }
383
- return await handlePrefixAll(config, request);
384
- }
385
-
386
- exports.PATHNAME_HEADER_NAME = PATHNAME_HEADER_NAME;
387
- exports.intorMiddleware = intorMiddleware;
@@ -1,128 +0,0 @@
1
- import { Level, NormalizerConfig, FormatterConfig, LoggerPreset } from 'logry/edge';
2
- import { Locale, LocaleMessages, FallbackLocalesMap } from 'intor-translator';
3
- import { NextRequest } from 'next/server';
4
-
5
- type CookieRawOptions = {
6
- /** Enable cookie usage (read/write) - default: true */
7
- enabled?: boolean;
8
- /** Allow the system to automatically set cookies - default: true */
9
- autoSetCookie?: boolean;
10
- /** default: "intor.i18n.locale" */
11
- name?: string;
12
- /** default: null */
13
- domain?: string | null;
14
- /** default: "/" */
15
- path?: string;
16
- /** default: 60 * 60 * 24 * 365 (365 days) */
17
- maxAge?: number;
18
- /** default: false */
19
- httpOnly?: boolean;
20
- /** default: process.env.NODE_ENV !== "development" */
21
- secure?: boolean;
22
- /** default: lax */
23
- sameSite?: "lax" | "strict" | "none";
24
- };
25
- type CookieResolvedOptions = Required<Omit<CookieRawOptions, "domain">> & {
26
- domain: string | null;
27
- };
28
-
29
- /**
30
- * ```ts
31
- * {
32
- * default: ["ui", "meta"],
33
- * "/auth": ["auth", "admin"],
34
- * }
35
- * // When pathname is "/" => namespaces: ["ui", "meta"]
36
- * // When pathname is "/auth" => namespaces: ["ui", "meta", "auth", "admin"]
37
- * ```
38
- */
39
- type RouteNamespaces = {
40
- [key: string]: string[];
41
- } | {
42
- [key: string]: string[];
43
- default: string[];
44
- };
45
- interface RemoteHeaders {
46
- authorization?: string;
47
- "x-api-key"?: string;
48
- [key: string]: string | undefined;
49
- }
50
- type BaseLoaderOptions = {
51
- rootDir?: string;
52
- namespaces?: string[];
53
- routeNamespaces?: RouteNamespaces;
54
- concurrency?: number;
55
- };
56
- type LocalLoader = BaseLoaderOptions & {
57
- type: "local";
58
- };
59
- type RemoteLoader = BaseLoaderOptions & {
60
- type: "remote";
61
- remoteUrl: string;
62
- remoteHeaders?: RemoteHeaders;
63
- fullReload?: boolean;
64
- };
65
- type LoaderOptions = LocalLoader | RemoteLoader;
66
-
67
- type LoggerOptions = {
68
- level?: Level;
69
- normalizerConfig?: NormalizerConfig;
70
- formatterConfig?: FormatterConfig;
71
- preset?: LoggerPreset;
72
- };
73
-
74
- declare const routingPrefix: readonly ["none", "all", "except-default"];
75
- declare const routingFirstVisitLocaleSource: readonly ["default", "browser"];
76
- type RoutingRawOptions = {
77
- /** default: "none" */
78
- prefix?: (typeof routingPrefix)[number];
79
- firstVisit?: {
80
- /** default: "browser" */
81
- localeSource?: (typeof routingFirstVisitLocaleSource)[number];
82
- /** default: true */
83
- redirect?: boolean;
84
- };
85
- /** default: "" */
86
- basePath?: string;
87
- };
88
- type RoutingResolvedOptions = Required<RoutingRawOptions>;
89
-
90
- type CacheRawOptions = {
91
- /** default: process.env.NODE_ENV === "production" */
92
- enabled?: boolean;
93
- /** default: 60\*60\*1000 (1 hour) */
94
- ttl?: number;
95
- };
96
- type CacheResolvedOptions = Required<CacheRawOptions>;
97
-
98
- type TranslatorOptions = {
99
- loadingMessage?: string;
100
- placeholder?: string;
101
- };
102
-
103
- type IntorResolvedConfig = ({
104
- loader: LoaderOptions;
105
- supportedLocales: readonly Locale[];
106
- } | {
107
- loader?: undefined;
108
- supportedLocales: readonly Locale[];
109
- }) & {
110
- readonly id: string;
111
- readonly messages?: LocaleMessages;
112
- readonly defaultLocale: Locale;
113
- readonly fallbackLocales: FallbackLocalesMap;
114
- readonly translator?: TranslatorOptions;
115
- readonly cookie: CookieResolvedOptions;
116
- readonly routing: RoutingResolvedOptions;
117
- readonly logger?: LoggerOptions;
118
- readonly cache: CacheResolvedOptions;
119
- };
120
-
121
- /**
122
- * Handle locale routing based on prefix config
123
- */
124
- declare function intorMiddleware<Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req): Promise<Response>;
125
-
126
- declare const PATHNAME_HEADER_NAME = "x-intor-pathname";
127
-
128
- export { PATHNAME_HEADER_NAME, intorMiddleware };
@@ -1,128 +0,0 @@
1
- import { Level, NormalizerConfig, FormatterConfig, LoggerPreset } from 'logry/edge';
2
- import { Locale, LocaleMessages, FallbackLocalesMap } from 'intor-translator';
3
- import { NextRequest } from 'next/server';
4
-
5
- type CookieRawOptions = {
6
- /** Enable cookie usage (read/write) - default: true */
7
- enabled?: boolean;
8
- /** Allow the system to automatically set cookies - default: true */
9
- autoSetCookie?: boolean;
10
- /** default: "intor.i18n.locale" */
11
- name?: string;
12
- /** default: null */
13
- domain?: string | null;
14
- /** default: "/" */
15
- path?: string;
16
- /** default: 60 * 60 * 24 * 365 (365 days) */
17
- maxAge?: number;
18
- /** default: false */
19
- httpOnly?: boolean;
20
- /** default: process.env.NODE_ENV !== "development" */
21
- secure?: boolean;
22
- /** default: lax */
23
- sameSite?: "lax" | "strict" | "none";
24
- };
25
- type CookieResolvedOptions = Required<Omit<CookieRawOptions, "domain">> & {
26
- domain: string | null;
27
- };
28
-
29
- /**
30
- * ```ts
31
- * {
32
- * default: ["ui", "meta"],
33
- * "/auth": ["auth", "admin"],
34
- * }
35
- * // When pathname is "/" => namespaces: ["ui", "meta"]
36
- * // When pathname is "/auth" => namespaces: ["ui", "meta", "auth", "admin"]
37
- * ```
38
- */
39
- type RouteNamespaces = {
40
- [key: string]: string[];
41
- } | {
42
- [key: string]: string[];
43
- default: string[];
44
- };
45
- interface RemoteHeaders {
46
- authorization?: string;
47
- "x-api-key"?: string;
48
- [key: string]: string | undefined;
49
- }
50
- type BaseLoaderOptions = {
51
- rootDir?: string;
52
- namespaces?: string[];
53
- routeNamespaces?: RouteNamespaces;
54
- concurrency?: number;
55
- };
56
- type LocalLoader = BaseLoaderOptions & {
57
- type: "local";
58
- };
59
- type RemoteLoader = BaseLoaderOptions & {
60
- type: "remote";
61
- remoteUrl: string;
62
- remoteHeaders?: RemoteHeaders;
63
- fullReload?: boolean;
64
- };
65
- type LoaderOptions = LocalLoader | RemoteLoader;
66
-
67
- type LoggerOptions = {
68
- level?: Level;
69
- normalizerConfig?: NormalizerConfig;
70
- formatterConfig?: FormatterConfig;
71
- preset?: LoggerPreset;
72
- };
73
-
74
- declare const routingPrefix: readonly ["none", "all", "except-default"];
75
- declare const routingFirstVisitLocaleSource: readonly ["default", "browser"];
76
- type RoutingRawOptions = {
77
- /** default: "none" */
78
- prefix?: (typeof routingPrefix)[number];
79
- firstVisit?: {
80
- /** default: "browser" */
81
- localeSource?: (typeof routingFirstVisitLocaleSource)[number];
82
- /** default: true */
83
- redirect?: boolean;
84
- };
85
- /** default: "" */
86
- basePath?: string;
87
- };
88
- type RoutingResolvedOptions = Required<RoutingRawOptions>;
89
-
90
- type CacheRawOptions = {
91
- /** default: process.env.NODE_ENV === "production" */
92
- enabled?: boolean;
93
- /** default: 60\*60\*1000 (1 hour) */
94
- ttl?: number;
95
- };
96
- type CacheResolvedOptions = Required<CacheRawOptions>;
97
-
98
- type TranslatorOptions = {
99
- loadingMessage?: string;
100
- placeholder?: string;
101
- };
102
-
103
- type IntorResolvedConfig = ({
104
- loader: LoaderOptions;
105
- supportedLocales: readonly Locale[];
106
- } | {
107
- loader?: undefined;
108
- supportedLocales: readonly Locale[];
109
- }) & {
110
- readonly id: string;
111
- readonly messages?: LocaleMessages;
112
- readonly defaultLocale: Locale;
113
- readonly fallbackLocales: FallbackLocalesMap;
114
- readonly translator?: TranslatorOptions;
115
- readonly cookie: CookieResolvedOptions;
116
- readonly routing: RoutingResolvedOptions;
117
- readonly logger?: LoggerOptions;
118
- readonly cache: CacheResolvedOptions;
119
- };
120
-
121
- /**
122
- * Handle locale routing based on prefix config
123
- */
124
- declare function intorMiddleware<Req extends NextRequest = NextRequest>(config: IntorResolvedConfig, request: Req): Promise<Response>;
125
-
126
- declare const PATHNAME_HEADER_NAME = "x-intor-pathname";
127
-
128
- export { PATHNAME_HEADER_NAME, intorMiddleware };