@0xchain/i18n 1.1.0-beta.9 → 1.1.0-beta.90

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024-present 0xchain
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.d.ts CHANGED
@@ -2,4 +2,6 @@ export * from './navigation';
2
2
  export * from './routing';
3
3
  export * from './request';
4
4
  export * from './middleware';
5
+ export * from './localeCookie';
6
+ export { resolveIntlHref } from './lib/resolveIntlHref';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -1,13 +1,20 @@
1
- import { Link as o, getPathname as m, redirect as a, usePathname as i, useRouter as n } from "./navigation.js";
2
- import { routing as u } from "./routing.js";
1
+ import { Link, getPathname, redirect, resolveIntlHref, usePathname, useRouter } from "./navigation.js";
2
+ import { routing } from "./routing.js";
3
3
  import "./request.js";
4
- import { middleware as f } from "./middleware.js";
4
+ import { middleware } from "./middleware.js";
5
+ import { LOCALE_COOKIE_MAX_AGE, LOCALE_COOKIE_NAME, localeCookieOptions, requestHostname, resolveLocaleCookieDomain } from "./localeCookie.js";
5
6
  export {
6
- o as Link,
7
- m as getPathname,
8
- f as middleware,
9
- a as redirect,
10
- u as routing,
11
- i as usePathname,
12
- n as useRouter
7
+ LOCALE_COOKIE_MAX_AGE,
8
+ LOCALE_COOKIE_NAME,
9
+ Link,
10
+ getPathname,
11
+ localeCookieOptions,
12
+ middleware,
13
+ redirect,
14
+ requestHostname,
15
+ resolveIntlHref,
16
+ resolveLocaleCookieDomain,
17
+ routing,
18
+ usePathname,
19
+ useRouter
13
20
  };
@@ -0,0 +1,11 @@
1
+ export type ResolvedIntlHref<THref> = {
2
+ href: THref;
3
+ locale?: string;
4
+ };
5
+ /**
6
+ * 兼容 next-intl `useRouter` 与 `next/navigation` 两种 href:
7
+ * - `/conversation` → 原样交给 next-intl(补当前语言)
8
+ * - `/ko/conversation` 或 `https://host/en/query` → 拆出语言,用 `{ locale }` 导航,避免 `/ko/ko`
9
+ */
10
+ export declare function resolveIntlHref<THref>(href: THref, locales: readonly string[]): ResolvedIntlHref<THref>;
11
+ //# sourceMappingURL=resolveIntlHref.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolveIntlHref.d.ts","sourceRoot":"","sources":["../../src/lib/resolveIntlHref.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,CAAC,KAAK,IAAI;IACpC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAmCF;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EACnC,IAAI,EAAE,KAAK,EACX,OAAO,EAAE,SAAS,MAAM,EAAE,GACzB,gBAAgB,CAAC,KAAK,CAAC,CA0BzB"}
@@ -0,0 +1,18 @@
1
+ export declare const LOCALE_COOKIE_NAME = "NEXT_LOCALE";
2
+ export declare const LOCALE_COOKIE_MAX_AGE: number;
3
+ export declare function resolveLocaleCookieDomain(hostname: string): string | undefined;
4
+ export declare function localeCookieOptions(hostname: string): {
5
+ domain?: string | undefined;
6
+ path: string;
7
+ sameSite: "lax";
8
+ maxAge: number;
9
+ };
10
+ export declare function requestHostname(request: {
11
+ headers: {
12
+ get(name: string): string | null;
13
+ };
14
+ nextUrl: {
15
+ hostname: string;
16
+ };
17
+ }): string;
18
+ //# sourceMappingURL=localeCookie.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"localeCookie.d.ts","sourceRoot":"","sources":["../src/localeCookie.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,gBAAgB,CAAC;AAChD,eAAO,MAAM,qBAAqB,QAAqB,CAAC;AAExD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAK9E;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM;;;;;EAQnD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAC9C,OAAO,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B,UAMA"}
@@ -0,0 +1,27 @@
1
+ const LOCALE_COOKIE_NAME = "NEXT_LOCALE";
2
+ const LOCALE_COOKIE_MAX_AGE = 60 * 60 * 24 * 365;
3
+ function resolveLocaleCookieDomain(hostname) {
4
+ const host = hostname.split(":")[0];
5
+ if (/(^|\.)ichatgo\.ai$/i.test(host)) return ".ichatgo.ai";
6
+ if (/(^|\.)chaindigg\.com$/i.test(host)) return ".chaindigg.com";
7
+ return void 0;
8
+ }
9
+ function localeCookieOptions(hostname) {
10
+ const domain = resolveLocaleCookieDomain(hostname);
11
+ return {
12
+ path: "/",
13
+ sameSite: "lax",
14
+ maxAge: LOCALE_COOKIE_MAX_AGE,
15
+ ...domain ? { domain } : {}
16
+ };
17
+ }
18
+ function requestHostname(request) {
19
+ return (request.headers.get("x-forwarded-host") || request.headers.get("host") || request.nextUrl.hostname).split(":")[0];
20
+ }
21
+ export {
22
+ LOCALE_COOKIE_MAX_AGE,
23
+ LOCALE_COOKIE_NAME,
24
+ localeCookieOptions,
25
+ requestHostname,
26
+ resolveLocaleCookieDomain
27
+ };
@@ -1,9 +1,9 @@
1
- import e from "next-intl/middleware";
2
- import { routing as o } from "./routing.js";
3
- const t = e(o);
4
- function m(r) {
5
- return t(r);
1
+ import createMiddleware from "next-intl/middleware";
2
+ import { routing } from "./routing.js";
3
+ const i18n = createMiddleware(routing);
4
+ function middleware(request) {
5
+ return i18n(request);
6
6
  }
7
7
  export {
8
- m as middleware
8
+ middleware
9
9
  };
@@ -1,315 +1,13 @@
1
- import { AppRouterInstance } from 'next/dist/shared/lib/app-router-context.shared-runtime';
2
- export declare const Link: import('react').ForwardRefExoticComponent<Omit<{
3
- id?: string | undefined | undefined;
4
- target?: import('react').HTMLAttributeAnchorTarget | undefined;
5
- replace?: boolean | undefined;
6
- slot?: string | undefined | undefined;
7
- style?: import('react').CSSProperties | undefined;
8
- title?: string | undefined | undefined;
9
- locale?: import('next-intl').Locale | undefined;
10
- onError?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
11
- children?: import('react').ReactNode;
12
- ref?: import('react').Ref<HTMLAnchorElement> | undefined;
13
- prefix?: string | undefined | undefined;
14
- key?: import('react').Key | null | undefined;
15
- as?: (string | import('url').UrlObject) | undefined;
16
- scroll?: boolean | undefined;
17
- shallow?: boolean | undefined;
18
- passHref?: boolean | undefined;
19
- prefetch?: boolean | "auto" | null | undefined;
20
- legacyBehavior?: boolean | undefined;
21
- onMouseEnter?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
22
- onTouchStart?: React.TouchEventHandler<HTMLAnchorElement> | undefined;
23
- onClick?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
24
- onNavigate?: ((event: {
25
- preventDefault: () => void;
26
- }) => void) | undefined;
27
- download?: any;
28
- hrefLang?: string | undefined | undefined;
29
- media?: string | undefined | undefined;
30
- ping?: string | undefined | undefined;
31
- type?: string | undefined | undefined;
32
- referrerPolicy?: import('react').HTMLAttributeReferrerPolicy | undefined;
33
- defaultChecked?: boolean | undefined | undefined;
34
- defaultValue?: string | number | readonly string[] | undefined;
35
- suppressContentEditableWarning?: boolean | undefined | undefined;
36
- suppressHydrationWarning?: boolean | undefined | undefined;
37
- accessKey?: string | undefined | undefined;
38
- autoCapitalize?: "off" | "none" | "on" | "sentences" | "words" | "characters" | undefined | (string & {}) | undefined;
39
- autoFocus?: boolean | undefined | undefined;
40
- className?: string | undefined | undefined;
41
- contentEditable?: (boolean | "true" | "false") | "inherit" | "plaintext-only" | undefined;
42
- contextMenu?: string | undefined | undefined;
43
- dir?: string | undefined | undefined;
44
- draggable?: (boolean | "true" | "false") | undefined;
45
- enterKeyHint?: "enter" | "done" | "go" | "next" | "previous" | "search" | "send" | undefined | undefined;
46
- hidden?: boolean | undefined | undefined;
47
- lang?: string | undefined | undefined;
48
- nonce?: string | undefined | undefined;
49
- spellCheck?: (boolean | "true" | "false") | undefined;
50
- tabIndex?: number | undefined | undefined;
51
- translate?: "yes" | "no" | undefined | undefined;
52
- radioGroup?: string | undefined | undefined;
53
- role?: import('react').AriaRole | undefined;
54
- about?: string | undefined | undefined;
55
- content?: string | undefined | undefined;
56
- datatype?: string | undefined | undefined;
57
- inlist?: any;
58
- property?: string | undefined | undefined;
59
- rel?: string | undefined | undefined;
60
- resource?: string | undefined | undefined;
61
- rev?: string | undefined | undefined;
62
- typeof?: string | undefined | undefined;
63
- vocab?: string | undefined | undefined;
64
- autoCorrect?: string | undefined | undefined;
65
- autoSave?: string | undefined | undefined;
66
- color?: string | undefined | undefined;
67
- itemProp?: string | undefined | undefined;
68
- itemScope?: boolean | undefined | undefined;
69
- itemType?: string | undefined | undefined;
70
- itemID?: string | undefined | undefined;
71
- itemRef?: string | undefined | undefined;
72
- results?: number | undefined | undefined;
73
- security?: string | undefined | undefined;
74
- unselectable?: "on" | "off" | undefined | undefined;
75
- popover?: "" | "auto" | "manual" | "hint" | undefined | undefined;
76
- popoverTargetAction?: "toggle" | "show" | "hide" | undefined | undefined;
77
- popoverTarget?: string | undefined | undefined;
78
- inert?: boolean | undefined | undefined;
79
- inputMode?: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | undefined | undefined;
80
- is?: string | undefined | undefined;
81
- exportparts?: string | undefined | undefined;
82
- part?: string | undefined | undefined;
83
- tw?: string | undefined;
84
- "aria-activedescendant"?: string | undefined | undefined;
85
- "aria-atomic"?: (boolean | "true" | "false") | undefined;
86
- "aria-autocomplete"?: "none" | "inline" | "list" | "both" | undefined | undefined;
87
- "aria-braillelabel"?: string | undefined | undefined;
88
- "aria-brailleroledescription"?: string | undefined | undefined;
89
- "aria-busy"?: (boolean | "true" | "false") | undefined;
90
- "aria-checked"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
91
- "aria-colcount"?: number | undefined | undefined;
92
- "aria-colindex"?: number | undefined | undefined;
93
- "aria-colindextext"?: string | undefined | undefined;
94
- "aria-colspan"?: number | undefined | undefined;
95
- "aria-controls"?: string | undefined | undefined;
96
- "aria-current"?: boolean | "false" | "true" | "page" | "step" | "location" | "date" | "time" | undefined | undefined;
97
- "aria-describedby"?: string | undefined | undefined;
98
- "aria-description"?: string | undefined | undefined;
99
- "aria-details"?: string | undefined | undefined;
100
- "aria-disabled"?: (boolean | "true" | "false") | undefined;
101
- "aria-dropeffect"?: "none" | "copy" | "execute" | "link" | "move" | "popup" | undefined | undefined;
102
- "aria-errormessage"?: string | undefined | undefined;
103
- "aria-expanded"?: (boolean | "true" | "false") | undefined;
104
- "aria-flowto"?: string | undefined | undefined;
105
- "aria-grabbed"?: (boolean | "true" | "false") | undefined;
106
- "aria-haspopup"?: boolean | "false" | "true" | "menu" | "listbox" | "tree" | "grid" | "dialog" | undefined | undefined;
107
- "aria-hidden"?: (boolean | "true" | "false") | undefined;
108
- "aria-invalid"?: boolean | "false" | "true" | "grammar" | "spelling" | undefined | undefined;
109
- "aria-keyshortcuts"?: string | undefined | undefined;
110
- "aria-label"?: string | undefined | undefined;
111
- "aria-labelledby"?: string | undefined | undefined;
112
- "aria-level"?: number | undefined | undefined;
113
- "aria-live"?: "off" | "assertive" | "polite" | undefined | undefined;
114
- "aria-modal"?: (boolean | "true" | "false") | undefined;
115
- "aria-multiline"?: (boolean | "true" | "false") | undefined;
116
- "aria-multiselectable"?: (boolean | "true" | "false") | undefined;
117
- "aria-orientation"?: "horizontal" | "vertical" | undefined | undefined;
118
- "aria-owns"?: string | undefined | undefined;
119
- "aria-placeholder"?: string | undefined | undefined;
120
- "aria-posinset"?: number | undefined | undefined;
121
- "aria-pressed"?: boolean | "false" | "mixed" | "true" | undefined | undefined;
122
- "aria-readonly"?: (boolean | "true" | "false") | undefined;
123
- "aria-relevant"?: "additions" | "additions removals" | "additions text" | "all" | "removals" | "removals additions" | "removals text" | "text" | "text additions" | "text removals" | undefined | undefined;
124
- "aria-required"?: (boolean | "true" | "false") | undefined;
125
- "aria-roledescription"?: string | undefined | undefined;
126
- "aria-rowcount"?: number | undefined | undefined;
127
- "aria-rowindex"?: number | undefined | undefined;
128
- "aria-rowindextext"?: string | undefined | undefined;
129
- "aria-rowspan"?: number | undefined | undefined;
130
- "aria-selected"?: (boolean | "true" | "false") | undefined;
131
- "aria-setsize"?: number | undefined | undefined;
132
- "aria-sort"?: "none" | "ascending" | "descending" | "other" | undefined | undefined;
133
- "aria-valuemax"?: number | undefined | undefined;
134
- "aria-valuemin"?: number | undefined | undefined;
135
- "aria-valuenow"?: number | undefined | undefined;
136
- "aria-valuetext"?: string | undefined | undefined;
137
- dangerouslySetInnerHTML?: {
138
- __html: string | TrustedHTML;
139
- } | undefined | undefined;
140
- onCopy?: import('react').ClipboardEventHandler<HTMLAnchorElement> | undefined;
141
- onCopyCapture?: import('react').ClipboardEventHandler<HTMLAnchorElement> | undefined;
142
- onCut?: import('react').ClipboardEventHandler<HTMLAnchorElement> | undefined;
143
- onCutCapture?: import('react').ClipboardEventHandler<HTMLAnchorElement> | undefined;
144
- onPaste?: import('react').ClipboardEventHandler<HTMLAnchorElement> | undefined;
145
- onPasteCapture?: import('react').ClipboardEventHandler<HTMLAnchorElement> | undefined;
146
- onCompositionEnd?: import('react').CompositionEventHandler<HTMLAnchorElement> | undefined;
147
- onCompositionEndCapture?: import('react').CompositionEventHandler<HTMLAnchorElement> | undefined;
148
- onCompositionStart?: import('react').CompositionEventHandler<HTMLAnchorElement> | undefined;
149
- onCompositionStartCapture?: import('react').CompositionEventHandler<HTMLAnchorElement> | undefined;
150
- onCompositionUpdate?: import('react').CompositionEventHandler<HTMLAnchorElement> | undefined;
151
- onCompositionUpdateCapture?: import('react').CompositionEventHandler<HTMLAnchorElement> | undefined;
152
- onFocus?: import('react').FocusEventHandler<HTMLAnchorElement> | undefined;
153
- onFocusCapture?: import('react').FocusEventHandler<HTMLAnchorElement> | undefined;
154
- onBlur?: import('react').FocusEventHandler<HTMLAnchorElement> | undefined;
155
- onBlurCapture?: import('react').FocusEventHandler<HTMLAnchorElement> | undefined;
156
- onChange?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
157
- onChangeCapture?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
158
- onBeforeInput?: import('react').InputEventHandler<HTMLAnchorElement> | undefined;
159
- onBeforeInputCapture?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
160
- onInput?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
161
- onInputCapture?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
162
- onReset?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
163
- onResetCapture?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
164
- onSubmit?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
165
- onSubmitCapture?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
166
- onInvalid?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
167
- onInvalidCapture?: import('react').FormEventHandler<HTMLAnchorElement> | undefined;
168
- onLoad?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
169
- onLoadCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
170
- onErrorCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
171
- onKeyDown?: import('react').KeyboardEventHandler<HTMLAnchorElement> | undefined;
172
- onKeyDownCapture?: import('react').KeyboardEventHandler<HTMLAnchorElement> | undefined;
173
- onKeyPress?: import('react').KeyboardEventHandler<HTMLAnchorElement> | undefined;
174
- onKeyPressCapture?: import('react').KeyboardEventHandler<HTMLAnchorElement> | undefined;
175
- onKeyUp?: import('react').KeyboardEventHandler<HTMLAnchorElement> | undefined;
176
- onKeyUpCapture?: import('react').KeyboardEventHandler<HTMLAnchorElement> | undefined;
177
- onAbort?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
178
- onAbortCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
179
- onCanPlay?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
180
- onCanPlayCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
181
- onCanPlayThrough?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
182
- onCanPlayThroughCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
183
- onDurationChange?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
184
- onDurationChangeCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
185
- onEmptied?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
186
- onEmptiedCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
187
- onEncrypted?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
188
- onEncryptedCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
189
- onEnded?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
190
- onEndedCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
191
- onLoadedData?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
192
- onLoadedDataCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
193
- onLoadedMetadata?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
194
- onLoadedMetadataCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
195
- onLoadStart?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
196
- onLoadStartCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
197
- onPause?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
198
- onPauseCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
199
- onPlay?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
200
- onPlayCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
201
- onPlaying?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
202
- onPlayingCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
203
- onProgress?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
204
- onProgressCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
205
- onRateChange?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
206
- onRateChangeCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
207
- onSeeked?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
208
- onSeekedCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
209
- onSeeking?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
210
- onSeekingCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
211
- onStalled?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
212
- onStalledCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
213
- onSuspend?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
214
- onSuspendCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
215
- onTimeUpdate?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
216
- onTimeUpdateCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
217
- onVolumeChange?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
218
- onVolumeChangeCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
219
- onWaiting?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
220
- onWaitingCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
221
- onAuxClick?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
222
- onAuxClickCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
223
- onClickCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
224
- onContextMenu?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
225
- onContextMenuCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
226
- onDoubleClick?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
227
- onDoubleClickCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
228
- onDrag?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
229
- onDragCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
230
- onDragEnd?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
231
- onDragEndCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
232
- onDragEnter?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
233
- onDragEnterCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
234
- onDragExit?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
235
- onDragExitCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
236
- onDragLeave?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
237
- onDragLeaveCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
238
- onDragOver?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
239
- onDragOverCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
240
- onDragStart?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
241
- onDragStartCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
242
- onDrop?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
243
- onDropCapture?: import('react').DragEventHandler<HTMLAnchorElement> | undefined;
244
- onMouseDown?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
245
- onMouseDownCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
246
- onMouseLeave?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
247
- onMouseMove?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
248
- onMouseMoveCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
249
- onMouseOut?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
250
- onMouseOutCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
251
- onMouseOver?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
252
- onMouseOverCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
253
- onMouseUp?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
254
- onMouseUpCapture?: import('react').MouseEventHandler<HTMLAnchorElement> | undefined;
255
- onSelect?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
256
- onSelectCapture?: import('react').ReactEventHandler<HTMLAnchorElement> | undefined;
257
- onTouchCancel?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
258
- onTouchCancelCapture?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
259
- onTouchEnd?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
260
- onTouchEndCapture?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
261
- onTouchMove?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
262
- onTouchMoveCapture?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
263
- onTouchStartCapture?: import('react').TouchEventHandler<HTMLAnchorElement> | undefined;
264
- onPointerDown?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
265
- onPointerDownCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
266
- onPointerMove?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
267
- onPointerMoveCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
268
- onPointerUp?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
269
- onPointerUpCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
270
- onPointerCancel?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
271
- onPointerCancelCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
272
- onPointerEnter?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
273
- onPointerLeave?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
274
- onPointerOver?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
275
- onPointerOverCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
276
- onPointerOut?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
277
- onPointerOutCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
278
- onGotPointerCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
279
- onGotPointerCaptureCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
280
- onLostPointerCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
281
- onLostPointerCaptureCapture?: import('react').PointerEventHandler<HTMLAnchorElement> | undefined;
282
- onScroll?: import('react').UIEventHandler<HTMLAnchorElement> | undefined;
283
- onScrollCapture?: import('react').UIEventHandler<HTMLAnchorElement> | undefined;
284
- onScrollEnd?: import('react').UIEventHandler<HTMLAnchorElement> | undefined;
285
- onScrollEndCapture?: import('react').UIEventHandler<HTMLAnchorElement> | undefined;
286
- onWheel?: import('react').WheelEventHandler<HTMLAnchorElement> | undefined;
287
- onWheelCapture?: import('react').WheelEventHandler<HTMLAnchorElement> | undefined;
288
- onAnimationStart?: import('react').AnimationEventHandler<HTMLAnchorElement> | undefined;
289
- onAnimationStartCapture?: import('react').AnimationEventHandler<HTMLAnchorElement> | undefined;
290
- onAnimationEnd?: import('react').AnimationEventHandler<HTMLAnchorElement> | undefined;
291
- onAnimationEndCapture?: import('react').AnimationEventHandler<HTMLAnchorElement> | undefined;
292
- onAnimationIteration?: import('react').AnimationEventHandler<HTMLAnchorElement> | undefined;
293
- onAnimationIterationCapture?: import('react').AnimationEventHandler<HTMLAnchorElement> | undefined;
294
- onToggle?: import('react').ToggleEventHandler<HTMLAnchorElement> | undefined;
295
- onBeforeToggle?: import('react').ToggleEventHandler<HTMLAnchorElement> | undefined;
296
- onTransitionCancel?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
297
- onTransitionCancelCapture?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
298
- onTransitionEnd?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
299
- onTransitionEndCapture?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
300
- onTransitionRun?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
301
- onTransitionRunCapture?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
302
- onTransitionStart?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
303
- onTransitionStartCapture?: import('react').TransitionEventHandler<HTMLAnchorElement> | undefined;
304
- href: string | import('url').UrlObject;
305
- }, "ref"> & import('react').RefAttributes<HTMLAnchorElement>>, usePathname: () => string, getPathname: (args: {
306
- href: string | {
307
- pathname: string;
308
- query?: import('next-intl/navigation').QueryParams;
309
- };
310
- locale: import('next-intl').Locale;
311
- forcePrefix?: boolean;
312
- }) => string;
313
- export declare const redirect: any;
314
- export declare const useRouter: () => AppRouterInstance;
315
- //# sourceMappingURL=navigation.d.ts.map
1
+ import type createNavigation from 'next-intl/navigation';
2
+
3
+ type IntlNavigation = ReturnType<typeof createNavigation>;
4
+
5
+ export declare const Link: IntlNavigation['Link'];
6
+ export declare const usePathname: IntlNavigation['usePathname'];
7
+ export declare const getPathname: IntlNavigation['getPathname'];
8
+ export declare const redirect: IntlNavigation['redirect'];
9
+ export declare const useRouter: IntlNavigation['useRouter'];
10
+ export declare function resolveIntlHref<THref>(
11
+ href: THref,
12
+ locales: readonly string[],
13
+ ): { href: THref; locale?: string };
@@ -1,10 +1,85 @@
1
- import { createNavigation as e } from "next-intl/navigation";
2
- import { routing as o } from "./routing.js";
3
- const t = e(o), { Link: i, usePathname: a, getPathname: c } = t, s = t.redirect, m = t.useRouter;
1
+ import { useMemo } from "react";
2
+ import { createNavigation } from "next-intl/navigation";
3
+ import { routing } from "./routing.js";
4
+ function pathnameAndSearch(href) {
5
+ try {
6
+ if (/^https?:\/\//i.test(href) || href.startsWith("//")) {
7
+ const url = new URL(href, "http://local.invalid");
8
+ return `${url.pathname}${url.search}`;
9
+ }
10
+ } catch {
11
+ }
12
+ return href.startsWith("/") || href.startsWith("?") ? href : `/${href}`;
13
+ }
14
+ function matchLocalePrefix(path, locales) {
15
+ const normalized = path.startsWith("/") ? path : `/${path}`;
16
+ const sorted = [...locales].sort((a, b) => b.length - a.length);
17
+ for (const locale of sorted) {
18
+ const prefix = `/${locale}`;
19
+ if (normalized === prefix || normalized === `${prefix}/`) {
20
+ return { locale, rest: "/" };
21
+ }
22
+ if (normalized.startsWith(`${prefix}/`)) {
23
+ return { locale, rest: normalized.slice(prefix.length) || "/" };
24
+ }
25
+ if (normalized.startsWith(`${prefix}?`)) {
26
+ return { locale, rest: `/${normalized.slice(prefix.length)}` };
27
+ }
28
+ }
29
+ return null;
30
+ }
31
+ function resolveIntlHref(href, locales) {
32
+ if (typeof href === "string") {
33
+ const path = pathnameAndSearch(href);
34
+ const matched = matchLocalePrefix(path, locales);
35
+ if (!matched) {
36
+ return { href: path };
37
+ }
38
+ return { href: matched.rest, locale: matched.locale };
39
+ }
40
+ if (href && typeof href === "object" && "pathname" in href) {
41
+ const record = href;
42
+ if (typeof record.pathname !== "string") {
43
+ return { href };
44
+ }
45
+ const matched = matchLocalePrefix(record.pathname, locales);
46
+ if (!matched) {
47
+ return { href };
48
+ }
49
+ return {
50
+ href: { ...record, pathname: matched.rest },
51
+ locale: matched.locale
52
+ };
53
+ }
54
+ return { href };
55
+ }
56
+ const navigation = createNavigation(routing);
57
+ const Link = navigation.Link;
58
+ const usePathname = navigation.usePathname;
59
+ const getPathname = navigation.getPathname;
60
+ const redirect = navigation.redirect;
61
+ function withCompatibleHref(navigate, href, options) {
62
+ const resolved = resolveIntlHref(href, routing.locales);
63
+ const locale = options?.locale ?? resolved.locale;
64
+ navigate(resolved.href, locale ? { ...options, locale } : options);
65
+ }
66
+ function useRouter() {
67
+ const router = navigation.useRouter();
68
+ return useMemo(
69
+ () => ({
70
+ ...router,
71
+ push: (href, options) => withCompatibleHref(router.push, href, options),
72
+ replace: (href, options) => withCompatibleHref(router.replace, href, options),
73
+ prefetch: (href, options) => withCompatibleHref(router.prefetch, href, options)
74
+ }),
75
+ [router]
76
+ );
77
+ }
4
78
  export {
5
- i as Link,
6
- c as getPathname,
7
- s as redirect,
8
- a as usePathname,
9
- m as useRouter
79
+ Link,
80
+ getPathname,
81
+ redirect,
82
+ resolveIntlHref,
83
+ usePathname,
84
+ useRouter
10
85
  };
@@ -0,0 +1,3 @@
1
+ export { NextIntlClientProvider, useFormatter, useLocale, useMessages, useNow, useTimeZone, useTranslations, } from 'next-intl';
2
+ export type { AbstractIntlMessages } from 'next-intl';
3
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,sBAAsB,EACtB,YAAY,EACZ,SAAS,EACT,WAAW,EACX,MAAM,EACN,WAAW,EACX,eAAe,GAChB,MAAM,WAAW,CAAC;AAEnB,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
package/dist/react.js ADDED
@@ -0,0 +1,10 @@
1
+ import { NextIntlClientProvider, useFormatter, useLocale, useMessages, useNow, useTimeZone, useTranslations } from "next-intl";
2
+ export {
3
+ NextIntlClientProvider,
4
+ useFormatter,
5
+ useLocale,
6
+ useMessages,
7
+ useNow,
8
+ useTimeZone,
9
+ useTranslations
10
+ };