@better-i18n/core 0.6.1 → 0.7.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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/cookie.d.ts +41 -0
- package/dist/utils/cookie.d.ts.map +1 -0
- package/dist/utils/cookie.js +52 -0
- package/dist/utils/cookie.js.map +1 -0
- package/package.json +2 -4
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export { createLogger } from "./logger.js";
|
|
|
6
6
|
export { detectLocale, buildCountryLocaleMap } from "./i18n/detection.js";
|
|
7
7
|
export { TtlCache, buildCacheKey } from "./cache.js";
|
|
8
8
|
export { LANGUAGE_TO_COUNTRY, getCountryCodeFromLocale, getFlagEmoji, getLanguageLabel, resolveFlag, type ResolvedFlag, } from "./utils/locale-ui.js";
|
|
9
|
+
export { getLocaleCookie } from "./utils/cookie.js";
|
|
9
10
|
export { normalizeLocale, extractLocale, getLocaleFromPath, hasLocalePrefix, removeLocalePrefix, addLocalePrefix, replaceLocaleInPath, createLocalePath, type LocaleConfig, } from "./utils/locale.js";
|
|
10
11
|
export type { I18nCoreConfig, NormalizedConfig, ParsedProject, ManifestResponse, ManifestLanguage, ManifestFile, LanguageOption, Messages, Locale, I18nCore, TranslationStorage, Logger, LogLevel, CacheEntry, } from "./types.js";
|
|
11
12
|
export type { I18nMiddlewareConfig, LocaleDetectionOptions, LocaleDetectionResult, LocalePrefix, } from "./i18n/types.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGhG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAG/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAEV,cAAc,EACd,gBAAgB,EAChB,aAAa,EAGb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EAGd,QAAQ,EACR,MAAM,EAGN,QAAQ,EAGR,kBAAkB,EAGlB,MAAM,EACN,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGlF,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGhG,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAG/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG1E,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGrD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,WAAW,EACX,KAAK,YAAY,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,KAAK,YAAY,GAClB,MAAM,mBAAmB,CAAC;AAG3B,YAAY,EAEV,cAAc,EACd,gBAAgB,EAChB,aAAa,EAGb,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,cAAc,EAGd,QAAQ,EACR,MAAM,EAGN,QAAQ,EAGR,kBAAkB,EAGlB,MAAM,EACN,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,oBAAoB,EACpB,sBAAsB,EACtB,qBAAqB,EACrB,YAAY,GACb,MAAM,iBAAiB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,8 @@ export { detectLocale, buildCountryLocaleMap } from "./i18n/detection.js";
|
|
|
14
14
|
export { TtlCache, buildCacheKey } from "./cache.js";
|
|
15
15
|
// Locale UI utilities (flags, labels, country codes)
|
|
16
16
|
export { LANGUAGE_TO_COUNTRY, getCountryCodeFromLocale, getFlagEmoji, getLanguageLabel, resolveFlag, } from "./utils/locale-ui.js";
|
|
17
|
+
// Cookie utilities
|
|
18
|
+
export { getLocaleCookie } from "./utils/cookie.js";
|
|
17
19
|
// Locale utilities
|
|
18
20
|
export { normalizeLocale, extractLocale, getLocaleFromPath, hasLocalePrefix, removeLocalePrefix, addLocalePrefix, replaceLocaleInPath, createLocalePath, } from "./utils/locale.js";
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAElF,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEhG,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/E,qBAAqB;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,kBAAkB;AAClB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErD,qDAAqD;AACrD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,WAAW,GAEZ,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAElF,mBAAmB;AACnB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEhG,0BAA0B;AAC1B,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE/E,qBAAqB;AACrB,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE1E,kBAAkB;AAClB,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAErD,qDAAqD;AACrD,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,YAAY,EACZ,gBAAgB,EAChB,WAAW,GAEZ,MAAM,sBAAsB,CAAC;AAE9B,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,mBAAmB;AACnB,OAAO,EACL,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,GAEjB,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read the locale cookie from the browser.
|
|
3
|
+
*
|
|
4
|
+
* Designed for non-React contexts where `useLocale()` isn't available —
|
|
5
|
+
* auth clients, analytics, third-party SDK config, module-level singletons.
|
|
6
|
+
*
|
|
7
|
+
* Pairs with `@better-i18n/use-intl`'s `localeCookie` prop:
|
|
8
|
+
* the provider writes the cookie, this function reads it back.
|
|
9
|
+
*
|
|
10
|
+
* Returns `null` on the server, when the cookie is missing, or when the
|
|
11
|
+
* value doesn't look like a valid BCP 47 locale tag.
|
|
12
|
+
*
|
|
13
|
+
* @param cookieName - Cookie name to read (must match the provider's `localeCookie` value)
|
|
14
|
+
* @returns The locale string (e.g. `"tr"`, `"pt-BR"`) or `null`
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```ts
|
|
18
|
+
* // auth-client.ts (module-level, no React)
|
|
19
|
+
* import { getLocaleCookie } from "@better-i18n/core";
|
|
20
|
+
*
|
|
21
|
+
* export const authClient = createAuthClient({
|
|
22
|
+
* fetchOptions: {
|
|
23
|
+
* headers: {
|
|
24
|
+
* get "Accept-Language"() {
|
|
25
|
+
* return getLocaleCookie("preferred-locale") ?? "en";
|
|
26
|
+
* },
|
|
27
|
+
* },
|
|
28
|
+
* },
|
|
29
|
+
* });
|
|
30
|
+
* ```
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```ts
|
|
34
|
+
* // analytics.ts
|
|
35
|
+
* import { getLocaleCookie } from "@better-i18n/core";
|
|
36
|
+
*
|
|
37
|
+
* analytics.identify({ locale: getLocaleCookie("preferred-locale") });
|
|
38
|
+
* ```
|
|
39
|
+
*/
|
|
40
|
+
export declare function getLocaleCookie(cookieName: string): string | null;
|
|
41
|
+
//# sourceMappingURL=cookie.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.d.ts","sourceRoot":"","sources":["../../src/utils/cookie.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CASjE"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** BCP 47 locale tag: 2–8 alpha, optional subtags separated by hyphens. */
|
|
2
|
+
const LOCALE_RE = /^[a-zA-Z]{2,8}(?:-[a-zA-Z0-9]{1,8})*$/;
|
|
3
|
+
/**
|
|
4
|
+
* Read the locale cookie from the browser.
|
|
5
|
+
*
|
|
6
|
+
* Designed for non-React contexts where `useLocale()` isn't available —
|
|
7
|
+
* auth clients, analytics, third-party SDK config, module-level singletons.
|
|
8
|
+
*
|
|
9
|
+
* Pairs with `@better-i18n/use-intl`'s `localeCookie` prop:
|
|
10
|
+
* the provider writes the cookie, this function reads it back.
|
|
11
|
+
*
|
|
12
|
+
* Returns `null` on the server, when the cookie is missing, or when the
|
|
13
|
+
* value doesn't look like a valid BCP 47 locale tag.
|
|
14
|
+
*
|
|
15
|
+
* @param cookieName - Cookie name to read (must match the provider's `localeCookie` value)
|
|
16
|
+
* @returns The locale string (e.g. `"tr"`, `"pt-BR"`) or `null`
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```ts
|
|
20
|
+
* // auth-client.ts (module-level, no React)
|
|
21
|
+
* import { getLocaleCookie } from "@better-i18n/core";
|
|
22
|
+
*
|
|
23
|
+
* export const authClient = createAuthClient({
|
|
24
|
+
* fetchOptions: {
|
|
25
|
+
* headers: {
|
|
26
|
+
* get "Accept-Language"() {
|
|
27
|
+
* return getLocaleCookie("preferred-locale") ?? "en";
|
|
28
|
+
* },
|
|
29
|
+
* },
|
|
30
|
+
* },
|
|
31
|
+
* });
|
|
32
|
+
* ```
|
|
33
|
+
*
|
|
34
|
+
* @example
|
|
35
|
+
* ```ts
|
|
36
|
+
* // analytics.ts
|
|
37
|
+
* import { getLocaleCookie } from "@better-i18n/core";
|
|
38
|
+
*
|
|
39
|
+
* analytics.identify({ locale: getLocaleCookie("preferred-locale") });
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export function getLocaleCookie(cookieName) {
|
|
43
|
+
if (typeof document === "undefined")
|
|
44
|
+
return null;
|
|
45
|
+
const safeName = cookieName.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
46
|
+
const match = document.cookie.match(new RegExp(`(?:^|;\\s*)${safeName}=([^;]*)`));
|
|
47
|
+
const value = match?.[1]?.trim() ?? null;
|
|
48
|
+
if (!value || !LOCALE_RE.test(value))
|
|
49
|
+
return null;
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=cookie.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cookie.js","sourceRoot":"","sources":["../../src/utils/cookie.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CACjC,IAAI,MAAM,CAAC,cAAc,QAAQ,UAAU,CAAC,CAC7C,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;IACzC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@better-i18n/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.0",
|
|
4
4
|
"description": "Framework-agnostic core utilities for Better i18n",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -18,13 +18,11 @@
|
|
|
18
18
|
"exports": {
|
|
19
19
|
".": {
|
|
20
20
|
"types": "./dist/index.d.ts",
|
|
21
|
-
"bun": "./src/index.ts",
|
|
22
21
|
"react-native": "./dist/index.js",
|
|
23
22
|
"default": "./dist/index.js"
|
|
24
23
|
},
|
|
25
24
|
"./react": {
|
|
26
|
-
"types": "./
|
|
27
|
-
"bun": "./src/react/index.tsx",
|
|
25
|
+
"types": "./dist/react/index.d.ts",
|
|
28
26
|
"default": "./dist/react/index.js"
|
|
29
27
|
},
|
|
30
28
|
"./package.json": "./package.json"
|