gt-tanstack-start 11.0.12 → 11.1.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/CHANGELOG.md +24 -0
- package/dist/index.client.d.mts +119 -2
- package/dist/index.client.d.mts.map +1 -1
- package/dist/index.client.mjs +126 -6
- package/dist/index.client.mjs.map +1 -1
- package/dist/index.server.d.mts +124 -4
- package/dist/index.server.d.mts.map +1 -1
- package/dist/index.server.mjs +110 -23
- package/dist/index.server.mjs.map +1 -1
- package/dist/server.d.mts +10 -16
- package/dist/server.d.mts.map +1 -1
- package/dist/server.mjs +48 -18
- package/dist/server.mjs.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# gt-tanstack-start
|
|
2
2
|
|
|
3
|
+
## 11.1.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1974](https://github.com/generaltranslation/gt/pull/1974) [`bbf4eb0`](https://github.com/generaltranslation/gt/commit/bbf4eb0cf77160baa615776619acd7afe35697ba) Thanks [@ErnestM1234](https://github.com/ErnestM1234)! - Add opt-in locale routing for TanStack Start. Setting `localeRouting` in `gt.config.json` makes `gtMiddleware` prioritize locale path prefixes and updates client locale changes to keep the pathname in sync while leaving the default locale unprefixed.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`bbf4eb0`](https://github.com/generaltranslation/gt/commit/bbf4eb0cf77160baa615776619acd7afe35697ba), [`f53bb5e`](https://github.com/generaltranslation/gt/commit/f53bb5ea4b4989a2a4ad3aebf464011f01e029ad)]:
|
|
12
|
+
- generaltranslation@9.0.4
|
|
13
|
+
- gt-i18n@1.0.8
|
|
14
|
+
- gt-react@11.1.0
|
|
15
|
+
- @generaltranslation/react-core@11.1.0
|
|
16
|
+
|
|
17
|
+
## 11.0.13
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- [#1971](https://github.com/generaltranslation/gt/pull/1971) [`f1eb7c4`](https://github.com/generaltranslation/gt/commit/f1eb7c42bebf0eb75e477c700a61ac060924bb30) Thanks [@ErnestM1234](https://github.com/ErnestM1234)! - Initialize TanStack Start browser condition state from the locale cookie, expose translation helpers from the isomorphic package entry point, and deprecate `parseLocale()` in favor of `getLocale()`. Export the browser condition-store factory from `gt-react` for framework integrations.
|
|
22
|
+
|
|
23
|
+
- Updated dependencies [[`f1eb7c4`](https://github.com/generaltranslation/gt/commit/f1eb7c42bebf0eb75e477c700a61ac060924bb30)]:
|
|
24
|
+
- gt-react@11.0.13
|
|
25
|
+
- @generaltranslation/react-core@11.0.13
|
|
26
|
+
|
|
3
27
|
## 11.0.12
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
package/dist/index.client.d.mts
CHANGED
|
@@ -1,9 +1,126 @@
|
|
|
1
|
-
import { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT, mFallback, msg, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations } from "gt-react";
|
|
1
|
+
import { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, createOrUpdateBrowserConditionStore, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT as initializeGT$1, mFallback, msg, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations } from "gt-react";
|
|
2
|
+
import { GTFunctionType, MFunctionType, Message, TFunctionType } from "gt-i18n/types";
|
|
3
|
+
|
|
2
4
|
//#region src/functions/parseLocale.d.ts
|
|
3
5
|
/**
|
|
4
6
|
* Resolve the user's locale for the current TanStack Start request or browser.
|
|
7
|
+
*
|
|
8
|
+
* @deprecated Use `getLocale()` with `gtMiddleware` instead. This function is
|
|
9
|
+
* retained as a fallback for server setups that have not initialized request
|
|
10
|
+
* scope through the middleware.
|
|
5
11
|
*/
|
|
6
12
|
declare function parseLocale(): string;
|
|
7
13
|
//#endregion
|
|
8
|
-
|
|
14
|
+
//#region ../format/dist/types-COaQnqVZ.d.cts
|
|
15
|
+
//#region src/locales/customLocaleMapping.d.ts
|
|
16
|
+
type CustomMapping = Record<string, string | Partial<LocaleProperties>>; //#endregion
|
|
17
|
+
//#region src/locales/getLocaleProperties.d.ts
|
|
18
|
+
type LocaleProperties = {
|
|
19
|
+
code: string;
|
|
20
|
+
name: string;
|
|
21
|
+
nativeName: string;
|
|
22
|
+
languageCode: string;
|
|
23
|
+
languageName: string;
|
|
24
|
+
nativeLanguageName: string;
|
|
25
|
+
nameWithRegionCode: string;
|
|
26
|
+
nativeNameWithRegionCode: string;
|
|
27
|
+
regionCode: string;
|
|
28
|
+
regionName: string;
|
|
29
|
+
nativeRegionName: string;
|
|
30
|
+
scriptCode: string;
|
|
31
|
+
scriptName: string;
|
|
32
|
+
nativeScriptName: string;
|
|
33
|
+
maximizedCode: string;
|
|
34
|
+
maximizedName: string;
|
|
35
|
+
nativeMaximizedName: string;
|
|
36
|
+
minimizedCode: string;
|
|
37
|
+
minimizedName: string;
|
|
38
|
+
nativeMinimizedName: string;
|
|
39
|
+
emoji: string;
|
|
40
|
+
}; //#endregion
|
|
41
|
+
//#region src/locales/getRegionProperties.d.ts
|
|
42
|
+
//#endregion
|
|
43
|
+
//#region ../core/dist/types-wj-Dtih8.d.cts
|
|
44
|
+
//#endregion
|
|
45
|
+
//#region src/types-dir/config.d.ts
|
|
46
|
+
/**
|
|
47
|
+
* Options shared by the CLI, compiler, and runtimes under
|
|
48
|
+
* `files.gt.parsingFlags` in gt.config.json.
|
|
49
|
+
*/
|
|
50
|
+
type GTParsingFlags = {
|
|
51
|
+
autoderive?: boolean | {
|
|
52
|
+
jsx?: boolean;
|
|
53
|
+
strings?: boolean;
|
|
54
|
+
};
|
|
55
|
+
includeSourceCodeContext?: boolean;
|
|
56
|
+
enableAutoJsxInjection?: boolean;
|
|
57
|
+
legacyGtReactImportSource?: boolean;
|
|
58
|
+
devHotReload?: boolean | {
|
|
59
|
+
strings?: boolean;
|
|
60
|
+
jsx?: boolean;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/** Configuration for generated GT translation files. */
|
|
64
|
+
type GTOutputFileConfig = {
|
|
65
|
+
output?: string;
|
|
66
|
+
publish?: boolean;
|
|
67
|
+
parsingFlags?: GTParsingFlags; /** @deprecated Use `parsingFlags.includeSourceCodeContext` instead. */
|
|
68
|
+
includeSourceCodeContext?: boolean;
|
|
69
|
+
};
|
|
70
|
+
/**
|
|
71
|
+
* File configuration is primarily consumed by the CLI. Other packages only
|
|
72
|
+
* inspect `files.gt`, but must still accept the complete gt.config.json shape.
|
|
73
|
+
*/
|
|
74
|
+
type GTFilesConfig = {
|
|
75
|
+
gt?: GTOutputFileConfig;
|
|
76
|
+
[fileType: string]: unknown;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* The configuration stored in gt.config.json.
|
|
80
|
+
*
|
|
81
|
+
* All settings are optional. Runtimes default `defaultLocale` to
|
|
82
|
+
* `libraryDefaultLocale` and `locales` to an empty list before resolving the
|
|
83
|
+
* effective locale set.
|
|
84
|
+
*/
|
|
85
|
+
type GTConfig = {
|
|
86
|
+
defaultLocale?: string;
|
|
87
|
+
locales?: string[];
|
|
88
|
+
customMapping?: CustomMapping;
|
|
89
|
+
enableI18n?: boolean; /** Enable framework-provided locale path routing when supported. */
|
|
90
|
+
localeRouting?: boolean;
|
|
91
|
+
projectId?: string;
|
|
92
|
+
devApiKey?: string;
|
|
93
|
+
apiKey?: string;
|
|
94
|
+
_versionId?: string;
|
|
95
|
+
_branchId?: string;
|
|
96
|
+
cacheUrl?: string | null;
|
|
97
|
+
cacheExpiryTime?: number;
|
|
98
|
+
runtimeUrl?: string | null;
|
|
99
|
+
modelProvider?: string;
|
|
100
|
+
_disableDevHotReload?: boolean;
|
|
101
|
+
files?: GTFilesConfig;
|
|
102
|
+
}; //#endregion
|
|
103
|
+
//#region src/types-dir/api/json.d.ts
|
|
104
|
+
//#endregion
|
|
105
|
+
//#region src/types/InitializeGTParams.d.ts
|
|
106
|
+
type BrowserConditionStoreParams = Parameters<typeof createOrUpdateBrowserConditionStore>[0];
|
|
107
|
+
type InitializeGTParams = Parameters<typeof initializeGT$1>[0] & Pick<BrowserConditionStoreParams, '_reload'> & Pick<GTConfig, 'localeRouting'>;
|
|
108
|
+
//#endregion
|
|
109
|
+
//#region src/functions/runtime.d.ts
|
|
110
|
+
/** Return the locale associated with the current request or browser. */
|
|
111
|
+
declare const getLocale: () => string;
|
|
112
|
+
/** Return whether internationalization is enabled for the current runtime. */
|
|
113
|
+
declare const getEnableI18n: () => boolean;
|
|
114
|
+
/** Return a string translation function for the current runtime. */
|
|
115
|
+
declare const getGT: (messages?: Message[]) => Promise<GTFunctionType>;
|
|
116
|
+
/** Return a registered-message translation function for the current runtime. */
|
|
117
|
+
declare const getMessages: () => Promise<MFunctionType>;
|
|
118
|
+
/** Return a dictionary translation function for the current runtime. */
|
|
119
|
+
declare const getTranslations: (rootId?: string) => Promise<TFunctionType>;
|
|
120
|
+
//#endregion
|
|
121
|
+
//#region src/setup/initializeGT.client.d.ts
|
|
122
|
+
/** Initialize GT and its browser condition store from the locale cookie. */
|
|
123
|
+
declare function initializeGT(config: InitializeGTParams): void;
|
|
124
|
+
//#endregion
|
|
125
|
+
export { Branch, Currency, DateTime, Derive, GTProvider, type InitializeGTParams, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getEnableI18n, getGT, getLocale, getMessages, getTranslations, getTranslationsSnapshot, gtFallback, initializeGT, mFallback, msg, parseLocale, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations };
|
|
9
126
|
//# sourceMappingURL=index.client.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.client.d.mts","names":[],"sources":["../src/functions/parseLocale.ts"],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.client.d.mts","names":["CustomMapping","LocaleProperties","Partial","Record","code","name","nativeName","languageCode","languageName","nativeLanguageName","nameWithRegionCode","nativeNameWithRegionCode","regionCode","regionName","nativeRegionName","scriptCode","scriptName","nativeScriptName","maximizedCode","maximizedName","nativeMaximizedName","minimizedCode","minimizedName","nativeMinimizedName","emoji","CustomRegionMapping","region","locale","getRegionProperties","defaultLocale","customMapping","CutoffFormatStyle","TerminatorOptions","terminator","separator","CutoffFormatOptions","maxChars","style","VariableType","Variable","k","i","v","HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","GTProp","JsxChildren","b","t","JsxElement","d","c","JsxChild","StringFormat","DataFormat","StringContent","IcuMessage","StringMessage","I18nextMessage","Content","FormatVariables","Date","S","_","a","f","g","h","l","m","n","o","p","r","s","u","x","y","Content","CustomMapping","CustomMapping$1","CustomRegionMapping","CustomRegionMapping$1","CutoffFormatOptions","CutoffFormatOptions$1","DataFormat","DataFormat$1","FormatVariables","FormatVariables$1","GTProp","HTML_CONTENT_PROPS","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","I18nextMessage","I18nextMessage$1","IcuMessage","IcuMessage$1","JsxChild","JsxChildren","JsxChildren$1","JsxElement","LocaleProperties","LocaleProperties$1","StringContent","StringFormat","StringFormat$1","StringMessage","StringMessage$1","Variable","VariableType","ActionType","EntryMetadata","id","hash","context","maxChars","dataFormat","actionType","RuntimeTranslateManyOptions","sourceLocale","modelProvider","key","TranslateOptions","targetLocale","TranslateManyEntry","source","metadata","HashMetadata","requiresReview","GTParsingFlags","autoderive","jsx","strings","includeSourceCodeContext","enableAutoJsxInjection","legacyGtReactImportSource","devHotReload","GTOutputFileConfig","output","publish","parsingFlags","GTFilesConfig","gt","fileType","GTConfig","defaultLocale","locales","customMapping","enableI18n","localeRouting","projectId","devApiKey","apiKey","_versionId","_branchId","cacheUrl","cacheExpiryTime","runtimeUrl","_disableDevHotReload","files","JsonPrimitive","JsonValue","JsonObject","CheckFileTranslationsOptions","timeout","FileQuery","fileId","branchId","versionId","FileQueryResult","sourceFile","fileName","fileFormat","createdAt","updatedAt","translations","locale","completedAt","approvedAt","publishedAt","UpdateMetadata","staticId","format","filePaths","sourceCode","contextDeriveExpr","_contextDeriveExpr","Updates","EnqueueFilesResult","jobData","jobId","sourceFileId","force","message","FileFormat","FormatMetadata","FileToUpload","FileReference","Omit","content","transformFormat","formatMetadata","incomingBranchId","checkedOutBranchId","FileReferenceIds","DownloadFileBatchRequest","useLatestAvailableVersion","DownloadFileBatchOptions","DownloadedFile","data","DownloadFileBatchResult","count","EnqueueFilesOptions","targetLocales","CreateTagFileReference","CreateTagOptions","tagId","CreateTagResult","tag","SetupProjectFileReference","Pick","SetupProjectResult","setupJobId","status","SetupProjectOptions","timeoutMs","GTJsonFormatMetadata","Record","domain","requestVersion","approved_at","approved_by","FileUpload","UploadFilesOptions","UploadFilesResponse","uploadedFiles","PublishFileEntry","PublishFilesResult","results","success","error","DownloadFileOptions","TranslationResultReference","TypedResult","translation","TranslationError","code","RequestSuccess","TranslationResult","TranslateManyResult","BranchDataResult","branches","name","defaultBranch","BranchQuery","branchNames","FileDataQuery","sourceFiles","translatedFiles","FileDataResult","OrphanedFile","GetOrphanedFilesResult","orphanedFiles","MoveMapping","oldFileId","newFileId","newFileName","MoveResult","newSourceFileId","clonedTranslationsCount","ProcessMovesResponse","summary","total","succeeded","failed","ProcessMovesOptions","JobStatus","CheckJobStatusResult","AwaitJobsOptions","pollingIntervalSeconds","timeoutSeconds","JobResult","AwaitJobsResult","complete","jobs","SubmitUserEditDiff","diff","localContent","SubmitUserEditDiffsPayload","diffs","Transformation","BaseTransformation","InjectionType","TransformationPrefix","VariableTransformationSuffix","Metadata","TranslationRequestConfig","baseUrl","$","A","At","B","C","Ct","D","Dt","E","Et","F","G","H","I","J","K","L","M","Mt","N","O","Ot","P","Q","R","S","St","T","Tt","U","V","W","X","Y","Z","_","_t","a","at","b","bt","c","ct","d","dt","et","f","ft","g","h","ht","i","it","j","jt","k","kt","l","lt","m","mt","n","nt","o","ot","p","pt","q","r","rt","s","st","t","tt","u","ut","v","vt","w","wt","x","xt","y","yt","z"],"sources":["../src/functions/parseLocale.ts","../../format/dist/types-COaQnqVZ.d.cts","../../core/dist/types-wj-Dtih8.d.cts","../src/types/InitializeGTParams.ts","../src/functions/runtime.ts","../src/setup/initializeGT.client.ts"],"mappings":";;;;;;;;AAuBA;;;iBAAgB,WAAA,CAAA;;;;KCtBXA,aAAAA,GAAgBG,MAAAA,kBAAwBD,OAAAA,CAAQD,gBAAAA;AAAAA;AAAAA,KAGhDA,gBAAAA;EACHG,IAAAA;EACAC,IAAAA;EACAC,UAAAA;EACAC,YAAAA;EACAC,YAAAA;EACAC,kBAAAA;EACAC,kBAAAA;EACAC,wBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,KAAAA;AAAAA;AAAAA;;;;;AC4BuB;;;;AAAA,KAQpBgH,cAAAA;EACHC,UAAAA;IACEC,GAAAA;IACAC,OAAAA;EAAAA;EAEFC,wBAAAA;EACAC,sBAAAA;EACAC,yBAAAA;EACAC,YAAAA;IACEJ,OAAAA;IACAD,GAAAA;EAAAA;AAAAA;;KAICM,kBAAAA;EACHC,MAAAA;EACAC,OAAAA;EACAC,YAAAA,GAAeX,cAAAA,EAAfW;EACAP,wBAAAA;AAAAA;;;AAAwB;;KAMrBQ,aAAAA;EACHC,EAAAA,GAAKL,kBAAAA;EAAAA,CACJM,QAAAA;AAAAA;;;;AAAgB;;;;KASdC,QAAAA;EACHC,aAAAA;EACAC,OAAAA;EACAC,aAAAA,GAAgBpE,aAAAA;EAChBqE,UAAAA,YAAAA;EACAC,aAAAA;EACAC,SAAAA;EACAC,SAAAA;EACAC,MAAAA;EACAC,UAAAA;EACAC,SAAAA;EACAC,QAAAA;EACAC,eAAAA;EACAC,UAAAA;EACArC,aAAAA;EACAsC,oBAAAA;EACAC,KAAAA,GAAQlB,aAAAA;AAAAA;AAAAA;;;KC1GL,2BAAA,GAA8B,UAAA,QAC1B,mCAAA;AAAA,KAGG,kBAAA,GAAqB,UAAA,QAAkB,cAAA,OACjD,IAAA,CAAK,2BAAA,eACL,IAAA,CAAK,QAAA;;;;cCIM,SAAA;;cAKA,aAAA;;cAKA,KAAA,GAAQ,QAAA,GAAW,OAAA,OAAc,OAAA,CAAQ,cAAA;;cAwBzC,WAAA,QAAmB,OAAA,CAAQ,aAAA;;cAiB3B,eAAA,GAAkB,MAAA,cAAoB,OAAA,CAAQ,aAAA;;;;iBC1D3C,YAAA,CAAa,MAAA,EAAQ,kBAAA"}
|
package/dist/index.client.mjs
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { createIsomorphicFn } from "@tanstack/react-start";
|
|
2
2
|
import { getRequest, setCookie } from "@tanstack/react-start/server";
|
|
3
|
-
import { getI18nConfig } from "@generaltranslation/react-core/pure";
|
|
4
|
-
import { createGlobalSingleton, getCookieValue, parseAcceptLanguage } from "gt-i18n/internal";
|
|
5
|
-
import { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT, mFallback, msg, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations } from "gt-react";
|
|
3
|
+
import { getI18nConfig, getReadonlyConditionStore } from "@generaltranslation/react-core/pure";
|
|
4
|
+
import { createGlobalSingleton, getCookieValue, getGTInternal, getMessagesInternal, getTranslationsInternal, parseAcceptLanguage } from "gt-i18n/internal";
|
|
5
|
+
import { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, createOrUpdateBrowserConditionStore, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT as initializeGT$1, mFallback, msg, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations } from "gt-react";
|
|
6
6
|
//#region ../core/dist/api-BOEGbEF6.mjs
|
|
7
7
|
function ensureSentence(text) {
|
|
8
8
|
const trimmed = text.trim();
|
|
@@ -62,6 +62,48 @@ const getConditionStore = conditionStoreSingleton.get;
|
|
|
62
62
|
conditionStoreSingleton.set;
|
|
63
63
|
const isConditionStoreInitialized = conditionStoreSingleton.isInitialized;
|
|
64
64
|
//#endregion
|
|
65
|
+
//#region src/functions/localeRouting.ts
|
|
66
|
+
/** Resolve a supported locale from the first pathname segment. */
|
|
67
|
+
function getLocaleFromPath(pathname, basepath = getRouterBasepath()) {
|
|
68
|
+
const { pathname: routePathname } = splitBasepath(pathname, basepath);
|
|
69
|
+
const match = routePathname.match(/^\/([^/]+)(?:\/|$)/);
|
|
70
|
+
if (!match) return void 0;
|
|
71
|
+
let segment;
|
|
72
|
+
try {
|
|
73
|
+
segment = decodeURIComponent(match[1]);
|
|
74
|
+
} catch {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
return getI18nConfig().determineSupportedLocale(segment);
|
|
78
|
+
}
|
|
79
|
+
/** Replace the pathname locale, leaving the default locale unprefixed. */
|
|
80
|
+
function getPathnameForLocale(pathname, locale, basepath = getRouterBasepath()) {
|
|
81
|
+
const i18nConfig = getI18nConfig();
|
|
82
|
+
const { basepath: routeBasepath, pathname: routePathname } = splitBasepath(pathname, basepath);
|
|
83
|
+
const unlocalizedPath = getLocaleFromPath(routePathname, "/") ? routePathname.replace(/^\/[^/]+/, "") || "/" : routePathname;
|
|
84
|
+
const resolvedLocale = i18nConfig.resolveSupportedLocale(locale);
|
|
85
|
+
if (resolvedLocale === i18nConfig.getDefaultLocale()) return `${routeBasepath}${unlocalizedPath}`;
|
|
86
|
+
return `${routeBasepath}/${encodeURIComponent(resolvedLocale)}${unlocalizedPath === "/" ? "" : unlocalizedPath}`;
|
|
87
|
+
}
|
|
88
|
+
function getRouterBasepath() {
|
|
89
|
+
return process.env.TSS_ROUTER_BASEPATH || "/";
|
|
90
|
+
}
|
|
91
|
+
function splitBasepath(pathname, basepath) {
|
|
92
|
+
const normalizedBasepath = `/${basepath.replace(/^\/+|\/+$/g, "")}`;
|
|
93
|
+
if (normalizedBasepath === "/" || pathname === normalizedBasepath) return {
|
|
94
|
+
basepath: normalizedBasepath === "/" ? "" : normalizedBasepath,
|
|
95
|
+
pathname: pathname === normalizedBasepath ? "/" : pathname
|
|
96
|
+
};
|
|
97
|
+
if (pathname.startsWith(`${normalizedBasepath}/`)) return {
|
|
98
|
+
basepath: normalizedBasepath,
|
|
99
|
+
pathname: pathname.slice(normalizedBasepath.length)
|
|
100
|
+
};
|
|
101
|
+
return {
|
|
102
|
+
basepath: "",
|
|
103
|
+
pathname
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
65
107
|
//#region src/functions/requestConditions.ts
|
|
66
108
|
const localeCookieOptions = {
|
|
67
109
|
path: "/",
|
|
@@ -75,10 +117,14 @@ const noLocaleCandidatesWarning = createDiagnosticMessage({
|
|
|
75
117
|
reassurance: "GT will use the configured default locale",
|
|
76
118
|
why: "neither the locale cookie nor the Accept-Language header supplied a supported locale candidate"
|
|
77
119
|
});
|
|
78
|
-
function resolveRequestConditions(request, localeConfig) {
|
|
120
|
+
function resolveRequestConditions(request, localeConfig, pathname = new URL(request.url).pathname) {
|
|
79
121
|
const i18nConfig = getI18nConfig();
|
|
80
122
|
const cookieHeader = request.headers.get("cookie");
|
|
81
123
|
const localeCandidates = [];
|
|
124
|
+
if (localeConfig?.localeRouting) {
|
|
125
|
+
const pathLocale = getLocaleFromPath(pathname);
|
|
126
|
+
if (pathLocale) localeCandidates.push(pathLocale);
|
|
127
|
+
}
|
|
82
128
|
const cookieLocale = getCookieValue(cookieHeader, i18nConfig.getLocaleCookieName());
|
|
83
129
|
if (cookieLocale) localeCandidates.push(cookieLocale);
|
|
84
130
|
localeCandidates.push(...parseAcceptLanguage(request.headers.get("accept-language")));
|
|
@@ -97,10 +143,64 @@ function resolveRequestConditions(request, localeConfig) {
|
|
|
97
143
|
};
|
|
98
144
|
}
|
|
99
145
|
//#endregion
|
|
146
|
+
//#region src/functions/runtime.ts
|
|
147
|
+
/** Return the locale associated with the current request or browser. */
|
|
148
|
+
const getLocale = createIsomorphicFn().server(() => getConditionStore().getLocale()).client(() => getReadonlyConditionStore().getLocale());
|
|
149
|
+
/** Return whether internationalization is enabled for the current runtime. */
|
|
150
|
+
const getEnableI18n = createIsomorphicFn().server(() => getConditionStore().getEnableI18n()).client(() => getReadonlyConditionStore().getEnableI18n());
|
|
151
|
+
/** Return a string translation function for the current runtime. */
|
|
152
|
+
const getGT = createIsomorphicFn().server((messages) => {
|
|
153
|
+
const conditionStore = getConditionStore();
|
|
154
|
+
return getGTInternal({
|
|
155
|
+
locale: conditionStore.getLocale(),
|
|
156
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
157
|
+
}, messages);
|
|
158
|
+
}).client((messages) => {
|
|
159
|
+
const conditionStore = getReadonlyConditionStore();
|
|
160
|
+
return getGTInternal({
|
|
161
|
+
locale: conditionStore.getLocale(),
|
|
162
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
163
|
+
}, messages);
|
|
164
|
+
});
|
|
165
|
+
/** Return a registered-message translation function for the current runtime. */
|
|
166
|
+
const getMessages = createIsomorphicFn().server(() => {
|
|
167
|
+
const conditionStore = getConditionStore();
|
|
168
|
+
return getMessagesInternal({
|
|
169
|
+
locale: conditionStore.getLocale(),
|
|
170
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
171
|
+
});
|
|
172
|
+
}).client(() => {
|
|
173
|
+
const conditionStore = getReadonlyConditionStore();
|
|
174
|
+
return getMessagesInternal({
|
|
175
|
+
locale: conditionStore.getLocale(),
|
|
176
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
/** Return a dictionary translation function for the current runtime. */
|
|
180
|
+
const getTranslations = createIsomorphicFn().server((rootId) => {
|
|
181
|
+
const conditionStore = getConditionStore();
|
|
182
|
+
return getTranslationsInternal({
|
|
183
|
+
locale: conditionStore.getLocale(),
|
|
184
|
+
enableI18n: conditionStore.getEnableI18n(),
|
|
185
|
+
rootId
|
|
186
|
+
});
|
|
187
|
+
}).client((rootId) => {
|
|
188
|
+
const conditionStore = getReadonlyConditionStore();
|
|
189
|
+
return getTranslationsInternal({
|
|
190
|
+
locale: conditionStore.getLocale(),
|
|
191
|
+
enableI18n: conditionStore.getEnableI18n(),
|
|
192
|
+
rootId
|
|
193
|
+
});
|
|
194
|
+
});
|
|
195
|
+
//#endregion
|
|
100
196
|
//#region src/functions/parseLocale.ts
|
|
101
|
-
const determineLocale = createIsomorphicFn().server(determineLocaleServer).client(
|
|
197
|
+
const determineLocale = createIsomorphicFn().server(determineLocaleServer).client(() => getLocale());
|
|
102
198
|
/**
|
|
103
199
|
* Resolve the user's locale for the current TanStack Start request or browser.
|
|
200
|
+
*
|
|
201
|
+
* @deprecated Use `getLocale()` with `gtMiddleware` instead. This function is
|
|
202
|
+
* retained as a fallback for server setups that have not initialized request
|
|
203
|
+
* scope through the middleware.
|
|
104
204
|
*/
|
|
105
205
|
function parseLocale() {
|
|
106
206
|
const i18nConfig = getI18nConfig();
|
|
@@ -121,6 +221,7 @@ function determineLocaleServer({ defaultLocale, locales, customMapping }) {
|
|
|
121
221
|
customMapping
|
|
122
222
|
}).locale;
|
|
123
223
|
}
|
|
224
|
+
/** Read the server-synchronized locale cookie during client initialization. */
|
|
124
225
|
function determineLocaleClient({ defaultLocale, locales, customMapping }) {
|
|
125
226
|
const i18nConfig = getI18nConfig();
|
|
126
227
|
const localeCookieName = i18nConfig.getLocaleCookieName();
|
|
@@ -135,6 +236,25 @@ function determineLocaleClient({ defaultLocale, locales, customMapping }) {
|
|
|
135
236
|
});
|
|
136
237
|
}
|
|
137
238
|
//#endregion
|
|
138
|
-
|
|
239
|
+
//#region src/setup/initializeGT.client.ts
|
|
240
|
+
/** Initialize GT and its browser condition store from the locale cookie. */
|
|
241
|
+
function initializeGT(config) {
|
|
242
|
+
const browserConfig = config.localeRouting && !config._reload ? {
|
|
243
|
+
...config,
|
|
244
|
+
_reload: ({ locale }) => {
|
|
245
|
+
const pathname = getPathnameForLocale(window.location.pathname, locale);
|
|
246
|
+
const destination = new URL(window.location.href);
|
|
247
|
+
destination.pathname = pathname;
|
|
248
|
+
window.location.assign(destination.href);
|
|
249
|
+
}
|
|
250
|
+
} : config;
|
|
251
|
+
initializeGT$1(config);
|
|
252
|
+
createOrUpdateBrowserConditionStore({
|
|
253
|
+
...browserConfig,
|
|
254
|
+
locale: determineLocaleClient(config)
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
//#endregion
|
|
258
|
+
export { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getEnableI18n, getGT, getLocale, getMessages, getTranslations, getTranslationsSnapshot, gtFallback, initializeGT, mFallback, msg, parseLocale, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations };
|
|
139
259
|
|
|
140
260
|
//# sourceMappingURL=index.client.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.client.mjs","names":[],"sources":["../../core/dist/api-BOEGbEF6.mjs","../src/condition-store/singleton.ts","../src/functions/requestConditions.ts","../src/functions/parseLocale.ts"],"sourcesContent":["//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { createGlobalSingleton } from 'gt-i18n/internal';\nimport type { AsyncLocalConditionStore } from './AsyncLocalConditionStore';\n\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT server request state before initialization',\n why: 'initializeGT() has not initialized the TanStack Start server condition store',\n fix: \"Call initializeGT() from 'gt-tanstack-start' during application setup before using gtMiddleware or server APIs.\",\n});\n\nconst conditionStoreSingleton = createGlobalSingleton<AsyncLocalConditionStore>(\n {\n namespace: 'tanstackStart',\n key: 'conditionStore',\n source: 'gt-tanstack-start',\n notInitialized: () => conditionStoreNotInitializedError,\n }\n);\n\nexport const getConditionStore = conditionStoreSingleton.get;\nexport const setConditionStore = conditionStoreSingleton.set;\nexport const isConditionStoreInitialized =\n conditionStoreSingleton.isInitialized;\n","import { setCookie } from '@tanstack/react-start/server';\nimport {\n getI18nConfig,\n type I18nConfigParams,\n} from '@generaltranslation/react-core/pure';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { getCookieValue, parseAcceptLanguage } from 'gt-i18n/internal';\nimport type { RequestConditions } from '../condition-store/AsyncLocalConditionStore';\n\nexport const localeCookieOptions = {\n path: '/',\n sameSite: 'lax' as const,\n maxAge: 60 * 60 * 24 * 365,\n};\n\nconst noLocaleCandidatesWarning = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Warning',\n whatHappened: 'No locale preference was found for the current request',\n reassurance: 'GT will use the configured default locale',\n why: 'neither the locale cookie nor the Accept-Language header supplied a supported locale candidate',\n});\n\nexport function resolveRequestConditions(\n request: Request,\n localeConfig?: I18nConfigParams\n): RequestConditions {\n const i18nConfig = getI18nConfig();\n const cookieHeader = request.headers.get('cookie');\n const localeCandidates: string[] = [];\n const cookieLocale = getCookieValue(\n cookieHeader,\n i18nConfig.getLocaleCookieName()\n );\n if (cookieLocale) localeCandidates.push(cookieLocale);\n localeCandidates.push(\n ...parseAcceptLanguage(request.headers.get('accept-language'))\n );\n\n if (localeCandidates.length === 0) {\n console.warn(noLocaleCandidatesWarning);\n }\n\n const locale = i18nConfig.resolveSupportedLocale(\n localeCandidates,\n localeConfig ?? {\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n }\n );\n\n setCookie(i18nConfig.getLocaleCookieName(), locale, localeCookieOptions);\n\n const enableI18nCookie = getCookieValue(\n cookieHeader,\n i18nConfig.getEnableI18nCookieName()\n );\n\n return {\n locale,\n region:\n getCookieValue(cookieHeader, i18nConfig.getRegionCookieName()) ||\n undefined,\n enableI18n:\n enableI18nCookie === undefined ? true : enableI18nCookie === 'true',\n };\n}\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getRequest } from '@tanstack/react-start/server';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { getCookieValue } from 'gt-i18n/internal';\nimport type { LocaleResolverConfig } from 'gt-i18n/internal/types';\nimport {\n getConditionStore,\n isConditionStoreInitialized,\n} from '../condition-store/singleton';\nimport { resolveRequestConditions } from './requestConditions';\n\nexport const determineLocale = createIsomorphicFn()\n .server(determineLocaleServer)\n .client(determineLocaleClient);\n\n/**\n * Resolve the user's locale for the current TanStack Start request or browser.\n */\nexport function parseLocale(): string {\n const i18nConfig = getI18nConfig();\n return determineLocale({\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n });\n}\n\nfunction determineLocaleServer({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig) {\n if (isConditionStoreInitialized()) {\n const conditionStore = getConditionStore();\n if (conditionStore.hasActiveScope()) {\n return conditionStore.getLocale();\n }\n }\n\n return resolveRequestConditions(getRequest(), {\n defaultLocale,\n locales,\n customMapping,\n }).locale;\n}\n\nfunction determineLocaleClient({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig) {\n const i18nConfig = getI18nConfig();\n const localeCookieName = i18nConfig.getLocaleCookieName();\n const candidates: string[] = [];\n\n const cookie = getCookieValue(document.cookie, localeCookieName);\n if (cookie) candidates.push(cookie);\n\n if (candidates.length === 0) {\n console.warn(\n 'gt-tanstack-start(client): no locales could be determined for this request'\n );\n }\n\n return i18nConfig.resolveSupportedLocale(candidates, {\n defaultLocale,\n locales,\n customMapping,\n });\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.client.mjs","names":[],"sources":["../../core/dist/api-BOEGbEF6.mjs","../src/condition-store/singleton.ts","../src/functions/localeRouting.ts","../src/functions/requestConditions.ts","../src/functions/runtime.ts","../src/functions/parseLocale.ts","../src/setup/initializeGT.client.ts"],"sourcesContent":["//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { createGlobalSingleton } from 'gt-i18n/internal';\nimport type { AsyncLocalConditionStore } from './AsyncLocalConditionStore';\n\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT server request state before initialization',\n why: 'initializeGT() has not initialized the TanStack Start server condition store',\n fix: \"Call initializeGT() from 'gt-tanstack-start' during application setup before using gtMiddleware or server APIs.\",\n});\n\nconst conditionStoreSingleton = createGlobalSingleton<AsyncLocalConditionStore>(\n {\n namespace: 'tanstackStart',\n key: 'conditionStore',\n source: 'gt-tanstack-start',\n notInitialized: () => conditionStoreNotInitializedError,\n }\n);\n\nexport const getConditionStore = conditionStoreSingleton.get;\nexport const setConditionStore = conditionStoreSingleton.set;\nexport const isConditionStoreInitialized =\n conditionStoreSingleton.isInitialized;\n","import { getI18nConfig } from '@generaltranslation/react-core/pure';\n\n/** Resolve a supported locale from the first pathname segment. */\nexport function getLocaleFromPath(\n pathname: string,\n basepath = getRouterBasepath()\n): string | undefined {\n const { pathname: routePathname } = splitBasepath(pathname, basepath);\n const match = routePathname.match(/^\\/([^/]+)(?:\\/|$)/);\n if (!match) return undefined;\n\n let segment: string;\n try {\n segment = decodeURIComponent(match[1]);\n } catch {\n return undefined;\n }\n\n return getI18nConfig().determineSupportedLocale(segment);\n}\n\n/** Replace the pathname locale, leaving the default locale unprefixed. */\nexport function getPathnameForLocale(\n pathname: string,\n locale: string,\n basepath = getRouterBasepath()\n): string {\n const i18nConfig = getI18nConfig();\n const { basepath: routeBasepath, pathname: routePathname } = splitBasepath(\n pathname,\n basepath\n );\n const pathLocale = getLocaleFromPath(routePathname, '/');\n const unlocalizedPath = pathLocale\n ? routePathname.replace(/^\\/[^/]+/, '') || '/'\n : routePathname;\n const resolvedLocale = i18nConfig.resolveSupportedLocale(locale);\n\n if (resolvedLocale === i18nConfig.getDefaultLocale()) {\n return `${routeBasepath}${unlocalizedPath}`;\n }\n\n return `${routeBasepath}/${encodeURIComponent(resolvedLocale)}${\n unlocalizedPath === '/' ? '' : unlocalizedPath\n }`;\n}\n\nfunction getRouterBasepath(): string {\n return process.env.TSS_ROUTER_BASEPATH || '/';\n}\n\nfunction splitBasepath(\n pathname: string,\n basepath: string\n): { basepath: string; pathname: string } {\n const normalizedBasepath = `/${basepath.replace(/^\\/+|\\/+$/g, '')}`;\n if (normalizedBasepath === '/' || pathname === normalizedBasepath) {\n return {\n basepath: normalizedBasepath === '/' ? '' : normalizedBasepath,\n pathname: pathname === normalizedBasepath ? '/' : pathname,\n };\n }\n if (pathname.startsWith(`${normalizedBasepath}/`)) {\n return {\n basepath: normalizedBasepath,\n pathname: pathname.slice(normalizedBasepath.length),\n };\n }\n return { basepath: '', pathname };\n}\n","import { setCookie } from '@tanstack/react-start/server';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { getCookieValue, parseAcceptLanguage } from 'gt-i18n/internal';\nimport type { RequestConditions } from '../condition-store/AsyncLocalConditionStore';\nimport type { InitializeGTParams } from '../types/InitializeGTParams';\nimport { getLocaleFromPath } from './localeRouting';\n\nexport const localeCookieOptions = {\n path: '/',\n sameSite: 'lax' as const,\n maxAge: 60 * 60 * 24 * 365,\n};\n\nconst noLocaleCandidatesWarning = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Warning',\n whatHappened: 'No locale preference was found for the current request',\n reassurance: 'GT will use the configured default locale',\n why: 'neither the locale cookie nor the Accept-Language header supplied a supported locale candidate',\n});\n\nexport function resolveRequestConditions(\n request: Request,\n localeConfig?: InitializeGTParams,\n pathname = new URL(request.url).pathname\n): RequestConditions {\n const i18nConfig = getI18nConfig();\n const cookieHeader = request.headers.get('cookie');\n const localeCandidates: string[] = [];\n if (localeConfig?.localeRouting) {\n const pathLocale = getLocaleFromPath(pathname);\n if (pathLocale) localeCandidates.push(pathLocale);\n }\n const cookieLocale = getCookieValue(\n cookieHeader,\n i18nConfig.getLocaleCookieName()\n );\n if (cookieLocale) localeCandidates.push(cookieLocale);\n localeCandidates.push(\n ...parseAcceptLanguage(request.headers.get('accept-language'))\n );\n\n if (localeCandidates.length === 0) {\n console.warn(noLocaleCandidatesWarning);\n }\n\n const locale = i18nConfig.resolveSupportedLocale(\n localeCandidates,\n localeConfig ?? {\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n }\n );\n\n setCookie(i18nConfig.getLocaleCookieName(), locale, localeCookieOptions);\n\n const enableI18nCookie = getCookieValue(\n cookieHeader,\n i18nConfig.getEnableI18nCookieName()\n );\n\n return {\n locale,\n region:\n getCookieValue(cookieHeader, i18nConfig.getRegionCookieName()) ||\n undefined,\n enableI18n:\n enableI18nCookie === undefined ? true : enableI18nCookie === 'true',\n };\n}\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getReadonlyConditionStore } from '@generaltranslation/react-core/pure';\nimport {\n getGTInternal,\n getMessagesInternal,\n getTranslationsInternal,\n} from 'gt-i18n/internal';\nimport type {\n GTFunctionType,\n MFunctionType,\n Message,\n TFunctionType,\n} from 'gt-i18n/types';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/** Return the locale associated with the current request or browser. */\nexport const getLocale: () => string = createIsomorphicFn()\n .server((): string => getConditionStore().getLocale())\n .client((): string => getReadonlyConditionStore().getLocale());\n\n/** Return whether internationalization is enabled for the current runtime. */\nexport const getEnableI18n: () => boolean = createIsomorphicFn()\n .server((): boolean => getConditionStore().getEnableI18n())\n .client((): boolean => getReadonlyConditionStore().getEnableI18n());\n\n/** Return a string translation function for the current runtime. */\nexport const getGT: (messages?: Message[]) => Promise<GTFunctionType> =\n createIsomorphicFn()\n .server((messages?: Message[]) => {\n const conditionStore = getConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n })\n .client((messages?: Message[]) => {\n const conditionStore = getReadonlyConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n });\n\n/** Return a registered-message translation function for the current runtime. */\nexport const getMessages: () => Promise<MFunctionType> = createIsomorphicFn()\n .server(() => {\n const conditionStore = getConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n })\n .client(() => {\n const conditionStore = getReadonlyConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n });\n\n/** Return a dictionary translation function for the current runtime. */\nexport const getTranslations: (rootId?: string) => Promise<TFunctionType> =\n createIsomorphicFn()\n .server((rootId?: string) => {\n const conditionStore = getConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n })\n .client((rootId?: string) => {\n const conditionStore = getReadonlyConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n });\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getRequest } from '@tanstack/react-start/server';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { getCookieValue } from 'gt-i18n/internal';\nimport type { LocaleResolverConfig } from 'gt-i18n/internal/types';\nimport {\n getConditionStore,\n isConditionStoreInitialized,\n} from '../condition-store/singleton';\nimport { resolveRequestConditions } from './requestConditions';\nimport { getLocale } from './runtime';\n\nexport const determineLocale = createIsomorphicFn()\n .server(determineLocaleServer)\n .client(() => getLocale());\n\n/**\n * Resolve the user's locale for the current TanStack Start request or browser.\n *\n * @deprecated Use `getLocale()` with `gtMiddleware` instead. This function is\n * retained as a fallback for server setups that have not initialized request\n * scope through the middleware.\n */\nexport function parseLocale(): string {\n const i18nConfig = getI18nConfig();\n return determineLocale({\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n });\n}\n\nfunction determineLocaleServer({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig) {\n if (isConditionStoreInitialized()) {\n const conditionStore = getConditionStore();\n if (conditionStore.hasActiveScope()) {\n return conditionStore.getLocale();\n }\n }\n\n return resolveRequestConditions(getRequest(), {\n defaultLocale,\n locales,\n customMapping,\n }).locale;\n}\n\n/** Read the server-synchronized locale cookie during client initialization. */\nexport function determineLocaleClient({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig): string {\n const i18nConfig = getI18nConfig();\n const localeCookieName = i18nConfig.getLocaleCookieName();\n const candidates: string[] = [];\n\n const cookie = getCookieValue(document.cookie, localeCookieName);\n if (cookie) candidates.push(cookie);\n\n if (candidates.length === 0) {\n console.warn(\n 'gt-tanstack-start(client): no locales could be determined for this request'\n );\n }\n\n return i18nConfig.resolveSupportedLocale(candidates, {\n defaultLocale,\n locales,\n customMapping,\n });\n}\n","import {\n createOrUpdateBrowserConditionStore,\n initializeGT as initializeReactGT,\n} from 'gt-react';\nimport { determineLocaleClient } from '../functions/parseLocale';\nimport { getPathnameForLocale } from '../functions/localeRouting';\nimport type { InitializeGTParams } from '../types/InitializeGTParams';\n\n/** Initialize GT and its browser condition store from the locale cookie. */\nexport function initializeGT(config: InitializeGTParams): void {\n const browserConfig =\n config.localeRouting && !config._reload\n ? {\n ...config,\n _reload: ({ locale }: { locale: string }) => {\n const pathname = getPathnameForLocale(\n window.location.pathname,\n locale\n );\n const destination = new URL(window.location.href);\n destination.pathname = pathname;\n window.location.assign(destination.href);\n },\n }\n : config;\n\n initializeReactGT(config);\n createOrUpdateBrowserConditionStore({\n ...browserConfig,\n locale: determineLocaleClient(config),\n });\n}\n"],"mappings":"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"}
|
package/dist/index.server.d.mts
CHANGED
|
@@ -1,14 +1,134 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { RequestMiddlewareAfterServer } from "@tanstack/react-start";
|
|
2
|
+
import { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, createOrUpdateBrowserConditionStore, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT as initializeGT$1, mFallback, msg, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations } from "gt-react";
|
|
3
|
+
import { GTFunctionType, MFunctionType, Message, TFunctionType } from "gt-i18n/types";
|
|
4
|
+
|
|
2
5
|
//#region src/functions/parseLocale.d.ts
|
|
3
6
|
/**
|
|
4
7
|
* Resolve the user's locale for the current TanStack Start request or browser.
|
|
8
|
+
*
|
|
9
|
+
* @deprecated Use `getLocale()` with `gtMiddleware` instead. This function is
|
|
10
|
+
* retained as a fallback for server setups that have not initialized request
|
|
11
|
+
* scope through the middleware.
|
|
5
12
|
*/
|
|
6
13
|
declare function parseLocale(): string;
|
|
7
14
|
//#endregion
|
|
8
|
-
//#region
|
|
9
|
-
|
|
15
|
+
//#region ../format/dist/types-COaQnqVZ.d.cts
|
|
16
|
+
//#region src/locales/customLocaleMapping.d.ts
|
|
17
|
+
type CustomMapping = Record<string, string | Partial<LocaleProperties>>; //#endregion
|
|
18
|
+
//#region src/locales/getLocaleProperties.d.ts
|
|
19
|
+
type LocaleProperties = {
|
|
20
|
+
code: string;
|
|
21
|
+
name: string;
|
|
22
|
+
nativeName: string;
|
|
23
|
+
languageCode: string;
|
|
24
|
+
languageName: string;
|
|
25
|
+
nativeLanguageName: string;
|
|
26
|
+
nameWithRegionCode: string;
|
|
27
|
+
nativeNameWithRegionCode: string;
|
|
28
|
+
regionCode: string;
|
|
29
|
+
regionName: string;
|
|
30
|
+
nativeRegionName: string;
|
|
31
|
+
scriptCode: string;
|
|
32
|
+
scriptName: string;
|
|
33
|
+
nativeScriptName: string;
|
|
34
|
+
maximizedCode: string;
|
|
35
|
+
maximizedName: string;
|
|
36
|
+
nativeMaximizedName: string;
|
|
37
|
+
minimizedCode: string;
|
|
38
|
+
minimizedName: string;
|
|
39
|
+
nativeMinimizedName: string;
|
|
40
|
+
emoji: string;
|
|
41
|
+
}; //#endregion
|
|
42
|
+
//#region src/locales/getRegionProperties.d.ts
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region ../core/dist/types-wj-Dtih8.d.cts
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/types-dir/config.d.ts
|
|
47
|
+
/**
|
|
48
|
+
* Options shared by the CLI, compiler, and runtimes under
|
|
49
|
+
* `files.gt.parsingFlags` in gt.config.json.
|
|
50
|
+
*/
|
|
51
|
+
type GTParsingFlags = {
|
|
52
|
+
autoderive?: boolean | {
|
|
53
|
+
jsx?: boolean;
|
|
54
|
+
strings?: boolean;
|
|
55
|
+
};
|
|
56
|
+
includeSourceCodeContext?: boolean;
|
|
57
|
+
enableAutoJsxInjection?: boolean;
|
|
58
|
+
legacyGtReactImportSource?: boolean;
|
|
59
|
+
devHotReload?: boolean | {
|
|
60
|
+
strings?: boolean;
|
|
61
|
+
jsx?: boolean;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
/** Configuration for generated GT translation files. */
|
|
65
|
+
type GTOutputFileConfig = {
|
|
66
|
+
output?: string;
|
|
67
|
+
publish?: boolean;
|
|
68
|
+
parsingFlags?: GTParsingFlags; /** @deprecated Use `parsingFlags.includeSourceCodeContext` instead. */
|
|
69
|
+
includeSourceCodeContext?: boolean;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* File configuration is primarily consumed by the CLI. Other packages only
|
|
73
|
+
* inspect `files.gt`, but must still accept the complete gt.config.json shape.
|
|
74
|
+
*/
|
|
75
|
+
type GTFilesConfig = {
|
|
76
|
+
gt?: GTOutputFileConfig;
|
|
77
|
+
[fileType: string]: unknown;
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* The configuration stored in gt.config.json.
|
|
81
|
+
*
|
|
82
|
+
* All settings are optional. Runtimes default `defaultLocale` to
|
|
83
|
+
* `libraryDefaultLocale` and `locales` to an empty list before resolving the
|
|
84
|
+
* effective locale set.
|
|
85
|
+
*/
|
|
86
|
+
type GTConfig = {
|
|
87
|
+
defaultLocale?: string;
|
|
88
|
+
locales?: string[];
|
|
89
|
+
customMapping?: CustomMapping;
|
|
90
|
+
enableI18n?: boolean; /** Enable framework-provided locale path routing when supported. */
|
|
91
|
+
localeRouting?: boolean;
|
|
92
|
+
projectId?: string;
|
|
93
|
+
devApiKey?: string;
|
|
94
|
+
apiKey?: string;
|
|
95
|
+
_versionId?: string;
|
|
96
|
+
_branchId?: string;
|
|
97
|
+
cacheUrl?: string | null;
|
|
98
|
+
cacheExpiryTime?: number;
|
|
99
|
+
runtimeUrl?: string | null;
|
|
100
|
+
modelProvider?: string;
|
|
101
|
+
_disableDevHotReload?: boolean;
|
|
102
|
+
files?: GTFilesConfig;
|
|
103
|
+
}; //#endregion
|
|
104
|
+
//#region src/types-dir/api/json.d.ts
|
|
105
|
+
//#endregion
|
|
106
|
+
//#region src/types/InitializeGTParams.d.ts
|
|
107
|
+
type BrowserConditionStoreParams = Parameters<typeof createOrUpdateBrowserConditionStore>[0];
|
|
108
|
+
type InitializeGTParams = Parameters<typeof initializeGT$1>[0] & Pick<BrowserConditionStoreParams, '_reload'> & Pick<GTConfig, 'localeRouting'>;
|
|
109
|
+
//#endregion
|
|
110
|
+
//#region src/functions/runtime.d.ts
|
|
111
|
+
/** Return the locale associated with the current request or browser. */
|
|
112
|
+
declare const getLocale: () => string;
|
|
113
|
+
/** Return whether internationalization is enabled for the current runtime. */
|
|
114
|
+
declare const getEnableI18n: () => boolean;
|
|
115
|
+
/** Return a string translation function for the current runtime. */
|
|
116
|
+
declare const getGT: (messages?: Message[]) => Promise<GTFunctionType>;
|
|
117
|
+
/** Return a registered-message translation function for the current runtime. */
|
|
118
|
+
declare const getMessages: () => Promise<MFunctionType>;
|
|
119
|
+
/** Return a dictionary translation function for the current runtime. */
|
|
120
|
+
declare const getTranslations: (rootId?: string) => Promise<TFunctionType>;
|
|
121
|
+
//#endregion
|
|
122
|
+
//#region src/middleware/gtMiddleware.d.ts
|
|
123
|
+
/**
|
|
124
|
+
* Establish request-scoped GT conditions for SSR, server routes, and server
|
|
125
|
+
* functions.
|
|
126
|
+
*/
|
|
127
|
+
declare const gtMiddleware: RequestMiddlewareAfterServer<{}, undefined, undefined>;
|
|
128
|
+
//#endregion
|
|
129
|
+
//#region src/setup/initializeGT.server.d.ts
|
|
10
130
|
/** Initialize GT and its server request condition store. */
|
|
11
131
|
declare function initializeGT(config: InitializeGTParams): void;
|
|
12
132
|
//#endregion
|
|
13
|
-
export { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT, mFallback, msg, parseLocale, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations };
|
|
133
|
+
export { Branch, Currency, DateTime, Derive, GTProvider, type InitializeGTParams, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getEnableI18n, getGT, getLocale, getMessages, getTranslations, getTranslationsSnapshot, gtFallback, gtMiddleware, initializeGT, mFallback, msg, parseLocale, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations };
|
|
14
134
|
//# sourceMappingURL=index.server.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.server.d.mts","names":[],"sources":["../src/functions/parseLocale.ts","../src/setup/initializeGT.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.server.d.mts","names":["CustomMapping","LocaleProperties","Partial","Record","code","name","nativeName","languageCode","languageName","nativeLanguageName","nameWithRegionCode","nativeNameWithRegionCode","regionCode","regionName","nativeRegionName","scriptCode","scriptName","nativeScriptName","maximizedCode","maximizedName","nativeMaximizedName","minimizedCode","minimizedName","nativeMinimizedName","emoji","CustomRegionMapping","region","locale","getRegionProperties","defaultLocale","customMapping","CutoffFormatStyle","TerminatorOptions","terminator","separator","CutoffFormatOptions","maxChars","style","VariableType","Variable","k","i","v","HTML_CONTENT_PROPS","pl","ti","alt","arl","arb","ard","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","GTProp","JsxChildren","b","t","JsxElement","d","c","JsxChild","StringFormat","DataFormat","StringContent","IcuMessage","StringMessage","I18nextMessage","Content","FormatVariables","Date","S","_","a","f","g","h","l","m","n","o","p","r","s","u","x","y","Content","CustomMapping","CustomMapping$1","CustomRegionMapping","CustomRegionMapping$1","CutoffFormatOptions","CutoffFormatOptions$1","DataFormat","DataFormat$1","FormatVariables","FormatVariables$1","GTProp","HTML_CONTENT_PROPS","HtmlContentPropKeysRecord","HtmlContentPropValuesRecord","I18nextMessage","I18nextMessage$1","IcuMessage","IcuMessage$1","JsxChild","JsxChildren","JsxChildren$1","JsxElement","LocaleProperties","LocaleProperties$1","StringContent","StringFormat","StringFormat$1","StringMessage","StringMessage$1","Variable","VariableType","ActionType","EntryMetadata","id","hash","context","maxChars","dataFormat","actionType","RuntimeTranslateManyOptions","sourceLocale","modelProvider","key","TranslateOptions","targetLocale","TranslateManyEntry","source","metadata","HashMetadata","requiresReview","GTParsingFlags","autoderive","jsx","strings","includeSourceCodeContext","enableAutoJsxInjection","legacyGtReactImportSource","devHotReload","GTOutputFileConfig","output","publish","parsingFlags","GTFilesConfig","gt","fileType","GTConfig","defaultLocale","locales","customMapping","enableI18n","localeRouting","projectId","devApiKey","apiKey","_versionId","_branchId","cacheUrl","cacheExpiryTime","runtimeUrl","_disableDevHotReload","files","JsonPrimitive","JsonValue","JsonObject","CheckFileTranslationsOptions","timeout","FileQuery","fileId","branchId","versionId","FileQueryResult","sourceFile","fileName","fileFormat","createdAt","updatedAt","translations","locale","completedAt","approvedAt","publishedAt","UpdateMetadata","staticId","format","filePaths","sourceCode","contextDeriveExpr","_contextDeriveExpr","Updates","EnqueueFilesResult","jobData","jobId","sourceFileId","force","message","FileFormat","FormatMetadata","FileToUpload","FileReference","Omit","content","transformFormat","formatMetadata","incomingBranchId","checkedOutBranchId","FileReferenceIds","DownloadFileBatchRequest","useLatestAvailableVersion","DownloadFileBatchOptions","DownloadedFile","data","DownloadFileBatchResult","count","EnqueueFilesOptions","targetLocales","CreateTagFileReference","CreateTagOptions","tagId","CreateTagResult","tag","SetupProjectFileReference","Pick","SetupProjectResult","setupJobId","status","SetupProjectOptions","timeoutMs","GTJsonFormatMetadata","Record","domain","requestVersion","approved_at","approved_by","FileUpload","UploadFilesOptions","UploadFilesResponse","uploadedFiles","PublishFileEntry","PublishFilesResult","results","success","error","DownloadFileOptions","TranslationResultReference","TypedResult","translation","TranslationError","code","RequestSuccess","TranslationResult","TranslateManyResult","BranchDataResult","branches","name","defaultBranch","BranchQuery","branchNames","FileDataQuery","sourceFiles","translatedFiles","FileDataResult","OrphanedFile","GetOrphanedFilesResult","orphanedFiles","MoveMapping","oldFileId","newFileId","newFileName","MoveResult","newSourceFileId","clonedTranslationsCount","ProcessMovesResponse","summary","total","succeeded","failed","ProcessMovesOptions","JobStatus","CheckJobStatusResult","AwaitJobsOptions","pollingIntervalSeconds","timeoutSeconds","JobResult","AwaitJobsResult","complete","jobs","SubmitUserEditDiff","diff","localContent","SubmitUserEditDiffsPayload","diffs","Transformation","BaseTransformation","InjectionType","TransformationPrefix","VariableTransformationSuffix","Metadata","TranslationRequestConfig","baseUrl","$","A","At","B","C","Ct","D","Dt","E","Et","F","G","H","I","J","K","L","M","Mt","N","O","Ot","P","Q","R","S","St","T","Tt","U","V","W","X","Y","Z","_","_t","a","at","b","bt","c","ct","d","dt","et","f","ft","g","h","ht","i","it","j","jt","k","kt","l","lt","m","mt","n","nt","o","ot","p","pt","q","r","rt","s","st","t","tt","u","ut","v","vt","w","wt","x","xt","y","yt","z"],"sources":["../src/functions/parseLocale.ts","../../format/dist/types-COaQnqVZ.d.cts","../../core/dist/types-wj-Dtih8.d.cts","../src/types/InitializeGTParams.ts","../src/functions/runtime.ts","../src/middleware/gtMiddleware.ts","../src/setup/initializeGT.server.ts"],"mappings":";;;;;;;;;AAuBA;;;iBAAgB,WAAA,CAAA;;;;KCtBXA,aAAAA,GAAgBG,MAAAA,kBAAwBD,OAAAA,CAAQD,gBAAAA;AAAAA;AAAAA,KAGhDA,gBAAAA;EACHG,IAAAA;EACAC,IAAAA;EACAC,UAAAA;EACAC,YAAAA;EACAC,YAAAA;EACAC,kBAAAA;EACAC,kBAAAA;EACAC,wBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,UAAAA;EACAC,UAAAA;EACAC,gBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,aAAAA;EACAC,aAAAA;EACAC,mBAAAA;EACAC,KAAAA;AAAAA;AAAAA;;;;;AC4BuB;;;;AAAA,KAQpBgH,cAAAA;EACHC,UAAAA;IACEC,GAAAA;IACAC,OAAAA;EAAAA;EAEFC,wBAAAA;EACAC,sBAAAA;EACAC,yBAAAA;EACAC,YAAAA;IACEJ,OAAAA;IACAD,GAAAA;EAAAA;AAAAA;;KAICM,kBAAAA;EACHC,MAAAA;EACAC,OAAAA;EACAC,YAAAA,GAAeX,cAAAA,EAAfW;EACAP,wBAAAA;AAAAA;;;AAAwB;;KAMrBQ,aAAAA;EACHC,EAAAA,GAAKL,kBAAAA;EAAAA,CACJM,QAAAA;AAAAA;;;;AAAgB;;;;KASdC,QAAAA;EACHC,aAAAA;EACAC,OAAAA;EACAC,aAAAA,GAAgBpE,aAAAA;EAChBqE,UAAAA,YAAAA;EACAC,aAAAA;EACAC,SAAAA;EACAC,SAAAA;EACAC,MAAAA;EACAC,UAAAA;EACAC,SAAAA;EACAC,QAAAA;EACAC,eAAAA;EACAC,UAAAA;EACArC,aAAAA;EACAsC,oBAAAA;EACAC,KAAAA,GAAQlB,aAAAA;AAAAA;AAAAA;;;KC1GL,2BAAA,GAA8B,UAAA,QAC1B,mCAAA;AAAA,KAGG,kBAAA,GAAqB,UAAA,QAAkB,cAAA,OACjD,IAAA,CAAK,2BAAA,eACL,IAAA,CAAK,QAAA;;;;cCIM,SAAA;;cAKA,aAAA;;cAKA,KAAA,GAAQ,QAAA,GAAW,OAAA,OAAc,OAAA,CAAQ,cAAA;;cAwBzC,WAAA,QAAmB,OAAA,CAAQ,aAAA;;cAiB3B,eAAA,GAAkB,MAAA,cAAoB,OAAA,CAAQ,aAAA;;;;;;;cCzD9C,YAAA,EAAc,4BAAA;;;;iBCJX,YAAA,CAAa,MAAA,EAAQ,kBAAA"}
|
package/dist/index.server.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { createIsomorphicFn } from "@tanstack/react-start";
|
|
1
|
+
import { createIsomorphicFn, createMiddleware } from "@tanstack/react-start";
|
|
2
2
|
import { getRequest, setCookie } from "@tanstack/react-start/server";
|
|
3
|
-
import { getI18nConfig } from "@generaltranslation/react-core/pure";
|
|
4
|
-
import { createGlobalSingleton, getCookieValue, parseAcceptLanguage } from "gt-i18n/internal";
|
|
3
|
+
import { getI18nConfig, getReadonlyConditionStore } from "@generaltranslation/react-core/pure";
|
|
4
|
+
import { createGlobalSingleton, getCookieValue, getGTInternal, getMessagesInternal, getTranslationsInternal, parseAcceptLanguage } from "gt-i18n/internal";
|
|
5
5
|
import { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT as initializeGT$1, mFallback, msg, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations } from "gt-react";
|
|
6
6
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
7
7
|
//#region ../core/dist/api-BOEGbEF6.mjs
|
|
@@ -63,6 +63,39 @@ const getConditionStore = conditionStoreSingleton.get;
|
|
|
63
63
|
const setConditionStore = conditionStoreSingleton.set;
|
|
64
64
|
const isConditionStoreInitialized = conditionStoreSingleton.isInitialized;
|
|
65
65
|
//#endregion
|
|
66
|
+
//#region src/functions/localeRouting.ts
|
|
67
|
+
/** Resolve a supported locale from the first pathname segment. */
|
|
68
|
+
function getLocaleFromPath(pathname, basepath = getRouterBasepath()) {
|
|
69
|
+
const { pathname: routePathname } = splitBasepath(pathname, basepath);
|
|
70
|
+
const match = routePathname.match(/^\/([^/]+)(?:\/|$)/);
|
|
71
|
+
if (!match) return void 0;
|
|
72
|
+
let segment;
|
|
73
|
+
try {
|
|
74
|
+
segment = decodeURIComponent(match[1]);
|
|
75
|
+
} catch {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
return getI18nConfig().determineSupportedLocale(segment);
|
|
79
|
+
}
|
|
80
|
+
function getRouterBasepath() {
|
|
81
|
+
return process.env.TSS_ROUTER_BASEPATH || "/";
|
|
82
|
+
}
|
|
83
|
+
function splitBasepath(pathname, basepath) {
|
|
84
|
+
const normalizedBasepath = `/${basepath.replace(/^\/+|\/+$/g, "")}`;
|
|
85
|
+
if (normalizedBasepath === "/" || pathname === normalizedBasepath) return {
|
|
86
|
+
basepath: normalizedBasepath === "/" ? "" : normalizedBasepath,
|
|
87
|
+
pathname: pathname === normalizedBasepath ? "/" : pathname
|
|
88
|
+
};
|
|
89
|
+
if (pathname.startsWith(`${normalizedBasepath}/`)) return {
|
|
90
|
+
basepath: normalizedBasepath,
|
|
91
|
+
pathname: pathname.slice(normalizedBasepath.length)
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
basepath: "",
|
|
95
|
+
pathname
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
//#endregion
|
|
66
99
|
//#region src/functions/requestConditions.ts
|
|
67
100
|
const localeCookieOptions = {
|
|
68
101
|
path: "/",
|
|
@@ -76,10 +109,14 @@ const noLocaleCandidatesWarning = createDiagnosticMessage({
|
|
|
76
109
|
reassurance: "GT will use the configured default locale",
|
|
77
110
|
why: "neither the locale cookie nor the Accept-Language header supplied a supported locale candidate"
|
|
78
111
|
});
|
|
79
|
-
function resolveRequestConditions(request, localeConfig) {
|
|
112
|
+
function resolveRequestConditions(request, localeConfig, pathname = new URL(request.url).pathname) {
|
|
80
113
|
const i18nConfig = getI18nConfig();
|
|
81
114
|
const cookieHeader = request.headers.get("cookie");
|
|
82
115
|
const localeCandidates = [];
|
|
116
|
+
if (localeConfig?.localeRouting) {
|
|
117
|
+
const pathLocale = getLocaleFromPath(pathname);
|
|
118
|
+
if (pathLocale) localeCandidates.push(pathLocale);
|
|
119
|
+
}
|
|
83
120
|
const cookieLocale = getCookieValue(cookieHeader, i18nConfig.getLocaleCookieName());
|
|
84
121
|
if (cookieLocale) localeCandidates.push(cookieLocale);
|
|
85
122
|
localeCandidates.push(...parseAcceptLanguage(request.headers.get("accept-language")));
|
|
@@ -98,10 +135,64 @@ function resolveRequestConditions(request, localeConfig) {
|
|
|
98
135
|
};
|
|
99
136
|
}
|
|
100
137
|
//#endregion
|
|
138
|
+
//#region src/functions/runtime.ts
|
|
139
|
+
/** Return the locale associated with the current request or browser. */
|
|
140
|
+
const getLocale = createIsomorphicFn().server(() => getConditionStore().getLocale()).client(() => getReadonlyConditionStore().getLocale());
|
|
141
|
+
/** Return whether internationalization is enabled for the current runtime. */
|
|
142
|
+
const getEnableI18n = createIsomorphicFn().server(() => getConditionStore().getEnableI18n()).client(() => getReadonlyConditionStore().getEnableI18n());
|
|
143
|
+
/** Return a string translation function for the current runtime. */
|
|
144
|
+
const getGT = createIsomorphicFn().server((messages) => {
|
|
145
|
+
const conditionStore = getConditionStore();
|
|
146
|
+
return getGTInternal({
|
|
147
|
+
locale: conditionStore.getLocale(),
|
|
148
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
149
|
+
}, messages);
|
|
150
|
+
}).client((messages) => {
|
|
151
|
+
const conditionStore = getReadonlyConditionStore();
|
|
152
|
+
return getGTInternal({
|
|
153
|
+
locale: conditionStore.getLocale(),
|
|
154
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
155
|
+
}, messages);
|
|
156
|
+
});
|
|
157
|
+
/** Return a registered-message translation function for the current runtime. */
|
|
158
|
+
const getMessages = createIsomorphicFn().server(() => {
|
|
159
|
+
const conditionStore = getConditionStore();
|
|
160
|
+
return getMessagesInternal({
|
|
161
|
+
locale: conditionStore.getLocale(),
|
|
162
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
163
|
+
});
|
|
164
|
+
}).client(() => {
|
|
165
|
+
const conditionStore = getReadonlyConditionStore();
|
|
166
|
+
return getMessagesInternal({
|
|
167
|
+
locale: conditionStore.getLocale(),
|
|
168
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
/** Return a dictionary translation function for the current runtime. */
|
|
172
|
+
const getTranslations = createIsomorphicFn().server((rootId) => {
|
|
173
|
+
const conditionStore = getConditionStore();
|
|
174
|
+
return getTranslationsInternal({
|
|
175
|
+
locale: conditionStore.getLocale(),
|
|
176
|
+
enableI18n: conditionStore.getEnableI18n(),
|
|
177
|
+
rootId
|
|
178
|
+
});
|
|
179
|
+
}).client((rootId) => {
|
|
180
|
+
const conditionStore = getReadonlyConditionStore();
|
|
181
|
+
return getTranslationsInternal({
|
|
182
|
+
locale: conditionStore.getLocale(),
|
|
183
|
+
enableI18n: conditionStore.getEnableI18n(),
|
|
184
|
+
rootId
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
//#endregion
|
|
101
188
|
//#region src/functions/parseLocale.ts
|
|
102
|
-
const determineLocale = createIsomorphicFn().server(determineLocaleServer).client(
|
|
189
|
+
const determineLocale = createIsomorphicFn().server(determineLocaleServer).client(() => getLocale());
|
|
103
190
|
/**
|
|
104
191
|
* Resolve the user's locale for the current TanStack Start request or browser.
|
|
192
|
+
*
|
|
193
|
+
* @deprecated Use `getLocale()` with `gtMiddleware` instead. This function is
|
|
194
|
+
* retained as a fallback for server setups that have not initialized request
|
|
195
|
+
* scope through the middleware.
|
|
105
196
|
*/
|
|
106
197
|
function parseLocale() {
|
|
107
198
|
const i18nConfig = getI18nConfig();
|
|
@@ -122,19 +213,15 @@ function determineLocaleServer({ defaultLocale, locales, customMapping }) {
|
|
|
122
213
|
customMapping
|
|
123
214
|
}).locale;
|
|
124
215
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
return
|
|
133
|
-
|
|
134
|
-
locales,
|
|
135
|
-
customMapping
|
|
136
|
-
});
|
|
137
|
-
}
|
|
216
|
+
//#endregion
|
|
217
|
+
//#region src/middleware/gtMiddleware.ts
|
|
218
|
+
/**
|
|
219
|
+
* Establish request-scoped GT conditions for SSR, server routes, and server
|
|
220
|
+
* functions.
|
|
221
|
+
*/
|
|
222
|
+
const gtMiddleware = createMiddleware().server(({ request, pathname, next }) => {
|
|
223
|
+
return getConditionStore().run(request, () => next(), pathname);
|
|
224
|
+
});
|
|
138
225
|
//#endregion
|
|
139
226
|
//#region src/condition-store/AsyncLocalConditionStore.ts
|
|
140
227
|
const missingRequestScopeError = createDiagnosticMessage({
|
|
@@ -142,7 +229,7 @@ const missingRequestScopeError = createDiagnosticMessage({
|
|
|
142
229
|
severity: "Error",
|
|
143
230
|
whatHappened: "Cannot read GT request state outside a request scope",
|
|
144
231
|
why: "the gt-tanstack-start request middleware has not initialized the ConditionStore for this request",
|
|
145
|
-
fix: "Register gtMiddleware from 'gt-tanstack-start
|
|
232
|
+
fix: "Register gtMiddleware from 'gt-tanstack-start' as global TanStack Start request middleware."
|
|
146
233
|
});
|
|
147
234
|
/**
|
|
148
235
|
* Read-only ConditionStore backed by request-scoped AsyncLocalStorage.
|
|
@@ -158,8 +245,8 @@ var AsyncLocalConditionStore = class {
|
|
|
158
245
|
this.setRegion = (_region) => {};
|
|
159
246
|
this.setEnableI18n = (_enableI18n) => {};
|
|
160
247
|
}
|
|
161
|
-
run(request, callback) {
|
|
162
|
-
const conditions = resolveRequestConditions(request, this.config);
|
|
248
|
+
run(request, callback, pathname) {
|
|
249
|
+
const conditions = resolveRequestConditions(request, this.config, pathname);
|
|
163
250
|
return this.storage.run(conditions, callback);
|
|
164
251
|
}
|
|
165
252
|
hasActiveScope() {
|
|
@@ -172,13 +259,13 @@ var AsyncLocalConditionStore = class {
|
|
|
172
259
|
}
|
|
173
260
|
};
|
|
174
261
|
//#endregion
|
|
175
|
-
//#region src/setup/initializeGT.ts
|
|
262
|
+
//#region src/setup/initializeGT.server.ts
|
|
176
263
|
/** Initialize GT and its server request condition store. */
|
|
177
264
|
function initializeGT(config) {
|
|
178
265
|
initializeGT$1(config);
|
|
179
266
|
setConditionStore(new AsyncLocalConditionStore(config));
|
|
180
267
|
}
|
|
181
268
|
//#endregion
|
|
182
|
-
export { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getTranslationsSnapshot, gtFallback, initializeGT, mFallback, msg, parseLocale, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations };
|
|
269
|
+
export { Branch, Currency, DateTime, Derive, GTProvider, LocaleSelector, Num, Plural, RelativeTime, T, Var, declareVar, decodeMsg, decodeOptions, decodeVars, derive, getEnableI18n, getGT, getLocale, getMessages, getTranslations, getTranslationsSnapshot, gtFallback, gtMiddleware, initializeGT, mFallback, msg, parseLocale, t, useCustomMapping, useDefaultLocale, useEnableI18n, useFormatLocales, useGT, useLocale, useLocaleSelector, useLocales, useMessages, useSetEnableI18n, useSetLocale, useTranslations };
|
|
183
270
|
|
|
184
271
|
//# sourceMappingURL=index.server.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.server.mjs","names":[],"sources":["../../core/dist/api-BOEGbEF6.mjs","../src/condition-store/singleton.ts","../src/functions/requestConditions.ts","../src/functions/parseLocale.ts","../src/condition-store/AsyncLocalConditionStore.ts","../src/setup/initializeGT.ts"],"sourcesContent":["//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { createGlobalSingleton } from 'gt-i18n/internal';\nimport type { AsyncLocalConditionStore } from './AsyncLocalConditionStore';\n\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT server request state before initialization',\n why: 'initializeGT() has not initialized the TanStack Start server condition store',\n fix: \"Call initializeGT() from 'gt-tanstack-start' during application setup before using gtMiddleware or server APIs.\",\n});\n\nconst conditionStoreSingleton = createGlobalSingleton<AsyncLocalConditionStore>(\n {\n namespace: 'tanstackStart',\n key: 'conditionStore',\n source: 'gt-tanstack-start',\n notInitialized: () => conditionStoreNotInitializedError,\n }\n);\n\nexport const getConditionStore = conditionStoreSingleton.get;\nexport const setConditionStore = conditionStoreSingleton.set;\nexport const isConditionStoreInitialized =\n conditionStoreSingleton.isInitialized;\n","import { setCookie } from '@tanstack/react-start/server';\nimport {\n getI18nConfig,\n type I18nConfigParams,\n} from '@generaltranslation/react-core/pure';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { getCookieValue, parseAcceptLanguage } from 'gt-i18n/internal';\nimport type { RequestConditions } from '../condition-store/AsyncLocalConditionStore';\n\nexport const localeCookieOptions = {\n path: '/',\n sameSite: 'lax' as const,\n maxAge: 60 * 60 * 24 * 365,\n};\n\nconst noLocaleCandidatesWarning = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Warning',\n whatHappened: 'No locale preference was found for the current request',\n reassurance: 'GT will use the configured default locale',\n why: 'neither the locale cookie nor the Accept-Language header supplied a supported locale candidate',\n});\n\nexport function resolveRequestConditions(\n request: Request,\n localeConfig?: I18nConfigParams\n): RequestConditions {\n const i18nConfig = getI18nConfig();\n const cookieHeader = request.headers.get('cookie');\n const localeCandidates: string[] = [];\n const cookieLocale = getCookieValue(\n cookieHeader,\n i18nConfig.getLocaleCookieName()\n );\n if (cookieLocale) localeCandidates.push(cookieLocale);\n localeCandidates.push(\n ...parseAcceptLanguage(request.headers.get('accept-language'))\n );\n\n if (localeCandidates.length === 0) {\n console.warn(noLocaleCandidatesWarning);\n }\n\n const locale = i18nConfig.resolveSupportedLocale(\n localeCandidates,\n localeConfig ?? {\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n }\n );\n\n setCookie(i18nConfig.getLocaleCookieName(), locale, localeCookieOptions);\n\n const enableI18nCookie = getCookieValue(\n cookieHeader,\n i18nConfig.getEnableI18nCookieName()\n );\n\n return {\n locale,\n region:\n getCookieValue(cookieHeader, i18nConfig.getRegionCookieName()) ||\n undefined,\n enableI18n:\n enableI18nCookie === undefined ? true : enableI18nCookie === 'true',\n };\n}\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getRequest } from '@tanstack/react-start/server';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { getCookieValue } from 'gt-i18n/internal';\nimport type { LocaleResolverConfig } from 'gt-i18n/internal/types';\nimport {\n getConditionStore,\n isConditionStoreInitialized,\n} from '../condition-store/singleton';\nimport { resolveRequestConditions } from './requestConditions';\n\nexport const determineLocale = createIsomorphicFn()\n .server(determineLocaleServer)\n .client(determineLocaleClient);\n\n/**\n * Resolve the user's locale for the current TanStack Start request or browser.\n */\nexport function parseLocale(): string {\n const i18nConfig = getI18nConfig();\n return determineLocale({\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n });\n}\n\nfunction determineLocaleServer({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig) {\n if (isConditionStoreInitialized()) {\n const conditionStore = getConditionStore();\n if (conditionStore.hasActiveScope()) {\n return conditionStore.getLocale();\n }\n }\n\n return resolveRequestConditions(getRequest(), {\n defaultLocale,\n locales,\n customMapping,\n }).locale;\n}\n\nfunction determineLocaleClient({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig) {\n const i18nConfig = getI18nConfig();\n const localeCookieName = i18nConfig.getLocaleCookieName();\n const candidates: string[] = [];\n\n const cookie = getCookieValue(document.cookie, localeCookieName);\n if (cookie) candidates.push(cookie);\n\n if (candidates.length === 0) {\n console.warn(\n 'gt-tanstack-start(client): no locales could be determined for this request'\n );\n }\n\n return i18nConfig.resolveSupportedLocale(candidates, {\n defaultLocale,\n locales,\n customMapping,\n });\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport type { I18nConfigParams } from '@generaltranslation/react-core/pure';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport type { ReadonlyConditionStoreInterface } from 'gt-i18n/internal/types';\nimport { resolveRequestConditions } from '../functions/requestConditions';\n\nexport type RequestConditions = {\n locale: string;\n region?: string;\n enableI18n: boolean;\n};\n\nconst missingRequestScopeError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT request state outside a request scope',\n why: 'the gt-tanstack-start request middleware has not initialized the ConditionStore for this request',\n fix: \"Register gtMiddleware from 'gt-tanstack-start/server' as global TanStack Start request middleware.\",\n});\n\n/**\n * Read-only ConditionStore backed by request-scoped AsyncLocalStorage.\n */\nexport class AsyncLocalConditionStore implements ReadonlyConditionStoreInterface {\n private readonly storage = new AsyncLocalStorage<RequestConditions>();\n\n constructor(private readonly config: I18nConfigParams) {}\n\n run<T>(request: Request, callback: () => T): T {\n const conditions = resolveRequestConditions(request, this.config);\n return this.storage.run(conditions, callback);\n }\n\n hasActiveScope(): boolean {\n return this.storage.getStore() !== undefined;\n }\n\n getLocale = (): string => this.getConditions().locale;\n\n getRegion = (): string | undefined => this.getConditions().region;\n\n getEnableI18n = (): boolean => this.getConditions().enableI18n;\n\n setLocale = (_locale: string): void => {};\n\n setRegion = (_region: string | undefined): void => {};\n\n setEnableI18n = (_enableI18n: boolean): void => {};\n\n private getConditions(): RequestConditions {\n const conditions = this.storage.getStore();\n if (!conditions) throw new Error(missingRequestScopeError);\n return conditions;\n }\n}\n","import { initializeGT as initializeReactGT } from 'gt-react';\nimport { AsyncLocalConditionStore } from '../condition-store/AsyncLocalConditionStore';\nimport { setConditionStore } from '../condition-store/singleton';\n\ntype InitializeGTParams = Parameters<typeof initializeReactGT>[0];\n\n/** Initialize GT and its server request condition store. */\nexport function initializeGT(config: InitializeGTParams): void {\n initializeReactGT(config);\n setConditionStore(new AsyncLocalConditionStore(config));\n}\n"],"mappings":";;;;;;;AAKA,SAAS,eAAe,MAAM;CAC7B,MAAM,UAAU,KAAK,MAAM;AAC3B,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,QAAQ;;AAEvD,SAAS,cAAc,MAAM;CAC5B,MAAM,UAAU,KAAK,MAAM;CAC3B,IAAI,MAAM,QAAQ;AAClB,QAAO,MAAM,GAAG;EACf,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAClD,SAAO;;AAER,QAAO,QAAQ,MAAM,GAAG,IAAI;;AAE7B,SAAS,mBAAmB,MAAM;AACjC,QAAO,KAAK,QAAQ,gBAAgB,UAAU,MAAM,aAAa,CAAC;;AAEnE,SAAS,cAAc,SAAS;AAC/B,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,aAAa,MAAM,QAAQ,QAAQ,GAAG,QAAQ,KAAK,KAAK,GAAG;AACjE,KAAI,CAAC,WAAW,MAAM,CAAE,QAAO;AAC/B,QAAO,eAAe,YAAY,aAAa;;AAMhD,SAAS,wBAAwB,EAAE,QAAQ,UAAU,cAAc,aAAa,KAAK,KAAK,QAAQ,SAAS,WAAW;CACrH,MAAM,SAAS,SAAS,WAAW,GAAG,OAAO,GAAG,SAAS,KAAK,GAAG,OAAO,KAAK,WAAW,GAAG,SAAS,KAAK;CACzG,MAAM,aAAa,MAAM,GAAG,cAAc,aAAa,CAAC,WAAW,mBAAmB,cAAc,IAAI,CAAC,KAAK;CAC9G,MAAM,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,SAAS,KAAK,cAAc,OAAO,CAAC;CACrF,MAAM,eAAe;EACpB;EACA;EACA,sBAAsB,GAAG,cAAc,IAAI,CAAC,OAAO,mBAAmB,cAAc,OAAO,CAAC,KAAK;EACjG,sBAAsB,KAAK,IAAI;EAC/B,cAAc,QAAQ;EACtB,CAAC,QAAQ,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,eAAe;AAC9C,KAAI,QAAS,cAAa,KAAK,eAAe,UAAU;CACxD,MAAM,UAAU,aAAa,KAAK,IAAI;AACtC,QAAO,SAAS,GAAG,OAAO,GAAG,YAAY;;;;AC1C1C,MAAM,oCAAoC,wBAAwB;CAChE,QAAQ;CACR,UAAU;CACV,cAAc;CACd,KAAK;CACL,KAAK;CACN,CAAC;AAEF,MAAM,0BAA0B,sBAC9B;CACE,WAAW;CACX,KAAK;CACL,QAAQ;CACR,sBAAsB;CACvB,CACF;AAED,MAAa,oBAAoB,wBAAwB;AACzD,MAAa,oBAAoB,wBAAwB;AACzD,MAAa,8BACX,wBAAwB;;;ACf1B,MAAa,sBAAsB;CACjC,MAAM;CACN,UAAU;CACV,QAAQ,OAAU,KAAK;CACxB;AAED,MAAM,4BAA4B,wBAAwB;CACxD,QAAQ;CACR,UAAU;CACV,cAAc;CACd,aAAa;CACb,KAAK;CACN,CAAC;AAEF,SAAgB,yBACd,SACA,cACmB;CACnB,MAAM,aAAa,eAAe;CAClC,MAAM,eAAe,QAAQ,QAAQ,IAAI,SAAS;CAClD,MAAM,mBAA6B,EAAE;CACrC,MAAM,eAAe,eACnB,cACA,WAAW,qBAAqB,CACjC;AACD,KAAI,aAAc,kBAAiB,KAAK,aAAa;AACrD,kBAAiB,KACf,GAAG,oBAAoB,QAAQ,QAAQ,IAAI,kBAAkB,CAAC,CAC/D;AAED,KAAI,iBAAiB,WAAW,EAC9B,SAAQ,KAAK,0BAA0B;CAGzC,MAAM,SAAS,WAAW,uBACxB,kBACA,gBAAgB;EACd,eAAe,WAAW,kBAAkB;EAC5C,SAAS,WAAW,YAAY;EAChC,eAAe,WAAW,kBAAkB;EAC7C,CACF;AAED,WAAU,WAAW,qBAAqB,EAAE,QAAQ,oBAAoB;CAExE,MAAM,mBAAmB,eACvB,cACA,WAAW,yBAAyB,CACrC;AAED,QAAO;EACL;EACA,QACE,eAAe,cAAc,WAAW,qBAAqB,CAAC,IAC9D,KAAA;EACF,YACE,qBAAqB,KAAA,IAAY,OAAO,qBAAqB;EAChE;;;;ACvDH,MAAa,kBAAkB,oBAAoB,CAChD,OAAO,sBAAsB,CAC7B,OAAO,sBAAsB;;;;AAKhC,SAAgB,cAAsB;CACpC,MAAM,aAAa,eAAe;AAClC,QAAO,gBAAgB;EACrB,eAAe,WAAW,kBAAkB;EAC5C,SAAS,WAAW,YAAY;EAChC,eAAe,WAAW,kBAAkB;EAC7C,CAAC;;AAGJ,SAAS,sBAAsB,EAC7B,eACA,SACA,iBACuB;AACvB,KAAI,6BAA6B,EAAE;EACjC,MAAM,iBAAiB,mBAAmB;AAC1C,MAAI,eAAe,gBAAgB,CACjC,QAAO,eAAe,WAAW;;AAIrC,QAAO,yBAAyB,YAAY,EAAE;EAC5C;EACA;EACA;EACD,CAAC,CAAC;;AAGL,SAAS,sBAAsB,EAC7B,eACA,SACA,iBACuB;CACvB,MAAM,aAAa,eAAe;CAClC,MAAM,mBAAmB,WAAW,qBAAqB;CACzD,MAAM,aAAuB,EAAE;CAE/B,MAAM,SAAS,eAAe,SAAS,QAAQ,iBAAiB;AAChE,KAAI,OAAQ,YAAW,KAAK,OAAO;AAEnC,KAAI,WAAW,WAAW,EACxB,SAAQ,KACN,6EACD;AAGH,QAAO,WAAW,uBAAuB,YAAY;EACnD;EACA;EACA;EACD,CAAC;;;;ACxDJ,MAAM,2BAA2B,wBAAwB;CACvD,QAAQ;CACR,UAAU;CACV,cAAc;CACd,KAAK;CACL,KAAK;CACN,CAAC;;;;AAKF,IAAa,2BAAb,MAAiF;CAG/E,YAAY,QAA2C;AAA1B,OAAA,SAAA;iBAFF,IAAI,mBAAsC;yBAa3C,KAAK,eAAe,CAAC;yBAET,KAAK,eAAe,CAAC;6BAE5B,KAAK,eAAe,CAAC;oBAEvC,YAA0B;oBAE1B,YAAsC;wBAElC,gBAA+B;;CAnBhD,IAAO,SAAkB,UAAsB;EAC7C,MAAM,aAAa,yBAAyB,SAAS,KAAK,OAAO;AACjE,SAAO,KAAK,QAAQ,IAAI,YAAY,SAAS;;CAG/C,iBAA0B;AACxB,SAAO,KAAK,QAAQ,UAAU,KAAK,KAAA;;CAerC,gBAA2C;EACzC,MAAM,aAAa,KAAK,QAAQ,UAAU;AAC1C,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,yBAAyB;AAC1D,SAAO;;;;;;AC7CX,SAAgB,aAAa,QAAkC;AAC7D,gBAAkB,OAAO;AACzB,mBAAkB,IAAI,yBAAyB,OAAO,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.server.mjs","names":[],"sources":["../../core/dist/api-BOEGbEF6.mjs","../src/condition-store/singleton.ts","../src/functions/localeRouting.ts","../src/functions/requestConditions.ts","../src/functions/runtime.ts","../src/functions/parseLocale.ts","../src/middleware/gtMiddleware.ts","../src/condition-store/AsyncLocalConditionStore.ts","../src/setup/initializeGT.server.ts"],"sourcesContent":["//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { createGlobalSingleton } from 'gt-i18n/internal';\nimport type { AsyncLocalConditionStore } from './AsyncLocalConditionStore';\n\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT server request state before initialization',\n why: 'initializeGT() has not initialized the TanStack Start server condition store',\n fix: \"Call initializeGT() from 'gt-tanstack-start' during application setup before using gtMiddleware or server APIs.\",\n});\n\nconst conditionStoreSingleton = createGlobalSingleton<AsyncLocalConditionStore>(\n {\n namespace: 'tanstackStart',\n key: 'conditionStore',\n source: 'gt-tanstack-start',\n notInitialized: () => conditionStoreNotInitializedError,\n }\n);\n\nexport const getConditionStore = conditionStoreSingleton.get;\nexport const setConditionStore = conditionStoreSingleton.set;\nexport const isConditionStoreInitialized =\n conditionStoreSingleton.isInitialized;\n","import { getI18nConfig } from '@generaltranslation/react-core/pure';\n\n/** Resolve a supported locale from the first pathname segment. */\nexport function getLocaleFromPath(\n pathname: string,\n basepath = getRouterBasepath()\n): string | undefined {\n const { pathname: routePathname } = splitBasepath(pathname, basepath);\n const match = routePathname.match(/^\\/([^/]+)(?:\\/|$)/);\n if (!match) return undefined;\n\n let segment: string;\n try {\n segment = decodeURIComponent(match[1]);\n } catch {\n return undefined;\n }\n\n return getI18nConfig().determineSupportedLocale(segment);\n}\n\n/** Replace the pathname locale, leaving the default locale unprefixed. */\nexport function getPathnameForLocale(\n pathname: string,\n locale: string,\n basepath = getRouterBasepath()\n): string {\n const i18nConfig = getI18nConfig();\n const { basepath: routeBasepath, pathname: routePathname } = splitBasepath(\n pathname,\n basepath\n );\n const pathLocale = getLocaleFromPath(routePathname, '/');\n const unlocalizedPath = pathLocale\n ? routePathname.replace(/^\\/[^/]+/, '') || '/'\n : routePathname;\n const resolvedLocale = i18nConfig.resolveSupportedLocale(locale);\n\n if (resolvedLocale === i18nConfig.getDefaultLocale()) {\n return `${routeBasepath}${unlocalizedPath}`;\n }\n\n return `${routeBasepath}/${encodeURIComponent(resolvedLocale)}${\n unlocalizedPath === '/' ? '' : unlocalizedPath\n }`;\n}\n\nfunction getRouterBasepath(): string {\n return process.env.TSS_ROUTER_BASEPATH || '/';\n}\n\nfunction splitBasepath(\n pathname: string,\n basepath: string\n): { basepath: string; pathname: string } {\n const normalizedBasepath = `/${basepath.replace(/^\\/+|\\/+$/g, '')}`;\n if (normalizedBasepath === '/' || pathname === normalizedBasepath) {\n return {\n basepath: normalizedBasepath === '/' ? '' : normalizedBasepath,\n pathname: pathname === normalizedBasepath ? '/' : pathname,\n };\n }\n if (pathname.startsWith(`${normalizedBasepath}/`)) {\n return {\n basepath: normalizedBasepath,\n pathname: pathname.slice(normalizedBasepath.length),\n };\n }\n return { basepath: '', pathname };\n}\n","import { setCookie } from '@tanstack/react-start/server';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { getCookieValue, parseAcceptLanguage } from 'gt-i18n/internal';\nimport type { RequestConditions } from '../condition-store/AsyncLocalConditionStore';\nimport type { InitializeGTParams } from '../types/InitializeGTParams';\nimport { getLocaleFromPath } from './localeRouting';\n\nexport const localeCookieOptions = {\n path: '/',\n sameSite: 'lax' as const,\n maxAge: 60 * 60 * 24 * 365,\n};\n\nconst noLocaleCandidatesWarning = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Warning',\n whatHappened: 'No locale preference was found for the current request',\n reassurance: 'GT will use the configured default locale',\n why: 'neither the locale cookie nor the Accept-Language header supplied a supported locale candidate',\n});\n\nexport function resolveRequestConditions(\n request: Request,\n localeConfig?: InitializeGTParams,\n pathname = new URL(request.url).pathname\n): RequestConditions {\n const i18nConfig = getI18nConfig();\n const cookieHeader = request.headers.get('cookie');\n const localeCandidates: string[] = [];\n if (localeConfig?.localeRouting) {\n const pathLocale = getLocaleFromPath(pathname);\n if (pathLocale) localeCandidates.push(pathLocale);\n }\n const cookieLocale = getCookieValue(\n cookieHeader,\n i18nConfig.getLocaleCookieName()\n );\n if (cookieLocale) localeCandidates.push(cookieLocale);\n localeCandidates.push(\n ...parseAcceptLanguage(request.headers.get('accept-language'))\n );\n\n if (localeCandidates.length === 0) {\n console.warn(noLocaleCandidatesWarning);\n }\n\n const locale = i18nConfig.resolveSupportedLocale(\n localeCandidates,\n localeConfig ?? {\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n }\n );\n\n setCookie(i18nConfig.getLocaleCookieName(), locale, localeCookieOptions);\n\n const enableI18nCookie = getCookieValue(\n cookieHeader,\n i18nConfig.getEnableI18nCookieName()\n );\n\n return {\n locale,\n region:\n getCookieValue(cookieHeader, i18nConfig.getRegionCookieName()) ||\n undefined,\n enableI18n:\n enableI18nCookie === undefined ? true : enableI18nCookie === 'true',\n };\n}\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getReadonlyConditionStore } from '@generaltranslation/react-core/pure';\nimport {\n getGTInternal,\n getMessagesInternal,\n getTranslationsInternal,\n} from 'gt-i18n/internal';\nimport type {\n GTFunctionType,\n MFunctionType,\n Message,\n TFunctionType,\n} from 'gt-i18n/types';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/** Return the locale associated with the current request or browser. */\nexport const getLocale: () => string = createIsomorphicFn()\n .server((): string => getConditionStore().getLocale())\n .client((): string => getReadonlyConditionStore().getLocale());\n\n/** Return whether internationalization is enabled for the current runtime. */\nexport const getEnableI18n: () => boolean = createIsomorphicFn()\n .server((): boolean => getConditionStore().getEnableI18n())\n .client((): boolean => getReadonlyConditionStore().getEnableI18n());\n\n/** Return a string translation function for the current runtime. */\nexport const getGT: (messages?: Message[]) => Promise<GTFunctionType> =\n createIsomorphicFn()\n .server((messages?: Message[]) => {\n const conditionStore = getConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n })\n .client((messages?: Message[]) => {\n const conditionStore = getReadonlyConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n });\n\n/** Return a registered-message translation function for the current runtime. */\nexport const getMessages: () => Promise<MFunctionType> = createIsomorphicFn()\n .server(() => {\n const conditionStore = getConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n })\n .client(() => {\n const conditionStore = getReadonlyConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n });\n\n/** Return a dictionary translation function for the current runtime. */\nexport const getTranslations: (rootId?: string) => Promise<TFunctionType> =\n createIsomorphicFn()\n .server((rootId?: string) => {\n const conditionStore = getConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n })\n .client((rootId?: string) => {\n const conditionStore = getReadonlyConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n });\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getRequest } from '@tanstack/react-start/server';\nimport { getI18nConfig } from '@generaltranslation/react-core/pure';\nimport { getCookieValue } from 'gt-i18n/internal';\nimport type { LocaleResolverConfig } from 'gt-i18n/internal/types';\nimport {\n getConditionStore,\n isConditionStoreInitialized,\n} from '../condition-store/singleton';\nimport { resolveRequestConditions } from './requestConditions';\nimport { getLocale } from './runtime';\n\nexport const determineLocale = createIsomorphicFn()\n .server(determineLocaleServer)\n .client(() => getLocale());\n\n/**\n * Resolve the user's locale for the current TanStack Start request or browser.\n *\n * @deprecated Use `getLocale()` with `gtMiddleware` instead. This function is\n * retained as a fallback for server setups that have not initialized request\n * scope through the middleware.\n */\nexport function parseLocale(): string {\n const i18nConfig = getI18nConfig();\n return determineLocale({\n defaultLocale: i18nConfig.getDefaultLocale(),\n locales: i18nConfig.getLocales(),\n customMapping: i18nConfig.getCustomMapping(),\n });\n}\n\nfunction determineLocaleServer({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig) {\n if (isConditionStoreInitialized()) {\n const conditionStore = getConditionStore();\n if (conditionStore.hasActiveScope()) {\n return conditionStore.getLocale();\n }\n }\n\n return resolveRequestConditions(getRequest(), {\n defaultLocale,\n locales,\n customMapping,\n }).locale;\n}\n\n/** Read the server-synchronized locale cookie during client initialization. */\nexport function determineLocaleClient({\n defaultLocale,\n locales,\n customMapping,\n}: LocaleResolverConfig): string {\n const i18nConfig = getI18nConfig();\n const localeCookieName = i18nConfig.getLocaleCookieName();\n const candidates: string[] = [];\n\n const cookie = getCookieValue(document.cookie, localeCookieName);\n if (cookie) candidates.push(cookie);\n\n if (candidates.length === 0) {\n console.warn(\n 'gt-tanstack-start(client): no locales could be determined for this request'\n );\n }\n\n return i18nConfig.resolveSupportedLocale(candidates, {\n defaultLocale,\n locales,\n customMapping,\n });\n}\n","import {\n createMiddleware,\n type RequestMiddlewareAfterServer,\n} from '@tanstack/react-start';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/**\n * Establish request-scoped GT conditions for SSR, server routes, and server\n * functions.\n */\nexport const gtMiddleware: RequestMiddlewareAfterServer<\n {},\n undefined,\n undefined\n> = createMiddleware().server(({ request, pathname, next }) => {\n return getConditionStore().run(request, () => next(), pathname);\n});\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createDiagnosticMessage } from 'generaltranslation/internal';\nimport type { ReadonlyConditionStoreInterface } from 'gt-i18n/internal/types';\nimport { resolveRequestConditions } from '../functions/requestConditions';\nimport type { InitializeGTParams } from '../types/InitializeGTParams';\n\nexport type RequestConditions = {\n locale: string;\n region?: string;\n enableI18n: boolean;\n};\n\nconst missingRequestScopeError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT request state outside a request scope',\n why: 'the gt-tanstack-start request middleware has not initialized the ConditionStore for this request',\n fix: \"Register gtMiddleware from 'gt-tanstack-start' as global TanStack Start request middleware.\",\n});\n\n/**\n * Read-only ConditionStore backed by request-scoped AsyncLocalStorage.\n */\nexport class AsyncLocalConditionStore implements ReadonlyConditionStoreInterface {\n private readonly storage = new AsyncLocalStorage<RequestConditions>();\n\n constructor(private readonly config: InitializeGTParams) {}\n\n run<T>(request: Request, callback: () => T, pathname?: string): T {\n const conditions = resolveRequestConditions(request, this.config, pathname);\n return this.storage.run(conditions, callback);\n }\n\n hasActiveScope(): boolean {\n return this.storage.getStore() !== undefined;\n }\n\n getLocale = (): string => this.getConditions().locale;\n\n getRegion = (): string | undefined => this.getConditions().region;\n\n getEnableI18n = (): boolean => this.getConditions().enableI18n;\n\n setLocale = (_locale: string): void => {};\n\n setRegion = (_region: string | undefined): void => {};\n\n setEnableI18n = (_enableI18n: boolean): void => {};\n\n private getConditions(): RequestConditions {\n const conditions = this.storage.getStore();\n if (!conditions) throw new Error(missingRequestScopeError);\n return conditions;\n }\n}\n","import { initializeGT as initializeReactGT } from 'gt-react';\nimport { AsyncLocalConditionStore } from '../condition-store/AsyncLocalConditionStore';\nimport { setConditionStore } from '../condition-store/singleton';\nimport type { InitializeGTParams } from '../types/InitializeGTParams';\n\n/** Initialize GT and its server request condition store. */\nexport function initializeGT(config: InitializeGTParams): void {\n initializeReactGT(config);\n setConditionStore(new AsyncLocalConditionStore(config));\n}\n"],"mappings":"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"}
|
package/dist/server.d.mts
CHANGED
|
@@ -1,24 +1,18 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { RequestMiddlewareAfterServer } from "@tanstack/react-start";
|
|
2
2
|
import * as _$gt_i18n_types0 from "gt-i18n/types";
|
|
3
|
-
import { Message } from "gt-i18n/types";
|
|
4
3
|
|
|
5
|
-
//#region src/
|
|
6
|
-
/**
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
*/
|
|
10
|
-
declare const gtMiddleware: _$_tanstack_react_start0.RequestMiddlewareAfterServer<{}, undefined, undefined>;
|
|
11
|
-
//#endregion
|
|
12
|
-
//#region src/functions/server.d.ts
|
|
13
|
-
/** Return the locale associated with the current server request. */
|
|
4
|
+
//#region src/server.d.ts
|
|
5
|
+
/** @deprecated Import `gtMiddleware` from `gt-tanstack-start` instead. */
|
|
6
|
+
declare const gtMiddleware: RequestMiddlewareAfterServer<{}, undefined, undefined>;
|
|
7
|
+
/** @deprecated Import `getLocale` from `gt-tanstack-start` instead. */
|
|
14
8
|
declare const getLocale: () => string;
|
|
15
|
-
/**
|
|
9
|
+
/** @deprecated Import `getEnableI18n` from `gt-tanstack-start` instead. */
|
|
16
10
|
declare const getEnableI18n: () => boolean;
|
|
17
|
-
/**
|
|
18
|
-
declare const getGT: (messages?: Message[]) => Promise<_$gt_i18n_types0.
|
|
19
|
-
/**
|
|
11
|
+
/** @deprecated Import `getGT` from `gt-tanstack-start` instead. */
|
|
12
|
+
declare const getGT: (messages?: _$gt_i18n_types0.Message[]) => Promise<_$gt_i18n_types0.GTFunctionType>;
|
|
13
|
+
/** @deprecated Import `getMessages` from `gt-tanstack-start` instead. */
|
|
20
14
|
declare const getMessages: () => Promise<_$gt_i18n_types0.MFunctionType>;
|
|
21
|
-
/**
|
|
15
|
+
/** @deprecated Import `getTranslations` from `gt-tanstack-start` instead. */
|
|
22
16
|
declare const getTranslations: (rootId?: string) => Promise<_$gt_i18n_types0.TFunctionType>;
|
|
23
17
|
//#endregion
|
|
24
18
|
export { getEnableI18n, getGT, getLocale, getMessages, getTranslations, gtMiddleware };
|
package/dist/server.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.mts","names":[],"sources":["../src/
|
|
1
|
+
{"version":3,"file":"server.d.mts","names":[],"sources":["../src/server.ts"],"mappings":";;;;;cAWa,YAAA,EAAc,4BAAA;;cAOd,SAAA;;cAGA,aAAA;;cAGA,KAAA,GAAK,QAAA,GAAY,gBAAA,CAAZ,OAAA,OAAA,OAAA,CAAA,gBAAA,CAAA,cAAA;AANlB;AAAA,cASa,WAAA,QAAW,OAAA,CAAkB,gBAAA,CAAlB,aAAA;;cAGX,eAAA,GAAe,MAAA,cAAA,OAAA,CAAsB,gBAAA,CAAtB,aAAA"}
|
package/dist/server.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createIsomorphicFn, createMiddleware } from "@tanstack/react-start";
|
|
2
2
|
import { createGlobalSingleton, getGTInternal, getMessagesInternal, getTranslationsInternal } from "gt-i18n/internal";
|
|
3
|
+
import { getReadonlyConditionStore } from "@generaltranslation/react-core/pure";
|
|
3
4
|
//#region ../core/dist/api-BOEGbEF6.mjs
|
|
4
5
|
function ensureSentence(text) {
|
|
5
6
|
const trimmed = text.trim();
|
|
@@ -64,45 +65,74 @@ conditionStoreSingleton.isInitialized;
|
|
|
64
65
|
* Establish request-scoped GT conditions for SSR, server routes, and server
|
|
65
66
|
* functions.
|
|
66
67
|
*/
|
|
67
|
-
const gtMiddleware = createMiddleware().server(({ request, next }) => {
|
|
68
|
-
return getConditionStore().run(request, () => next());
|
|
68
|
+
const gtMiddleware$1 = createMiddleware().server(({ request, pathname, next }) => {
|
|
69
|
+
return getConditionStore().run(request, () => next(), pathname);
|
|
69
70
|
});
|
|
70
71
|
//#endregion
|
|
71
|
-
//#region src/functions/
|
|
72
|
-
/** Return the locale associated with the current
|
|
73
|
-
const getLocale =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
/** Return
|
|
77
|
-
const
|
|
78
|
-
return getConditionStore().getEnableI18n();
|
|
79
|
-
});
|
|
80
|
-
/** Return a string translation function for the current server request. */
|
|
81
|
-
const getGT = createServerOnlyFn(async (messages) => {
|
|
72
|
+
//#region src/functions/runtime.ts
|
|
73
|
+
/** Return the locale associated with the current request or browser. */
|
|
74
|
+
const getLocale$1 = createIsomorphicFn().server(() => getConditionStore().getLocale()).client(() => getReadonlyConditionStore().getLocale());
|
|
75
|
+
/** Return whether internationalization is enabled for the current runtime. */
|
|
76
|
+
const getEnableI18n$1 = createIsomorphicFn().server(() => getConditionStore().getEnableI18n()).client(() => getReadonlyConditionStore().getEnableI18n());
|
|
77
|
+
/** Return a string translation function for the current runtime. */
|
|
78
|
+
const getGT$1 = createIsomorphicFn().server((messages) => {
|
|
82
79
|
const conditionStore = getConditionStore();
|
|
83
80
|
return getGTInternal({
|
|
84
81
|
locale: conditionStore.getLocale(),
|
|
85
82
|
enableI18n: conditionStore.getEnableI18n()
|
|
86
83
|
}, messages);
|
|
84
|
+
}).client((messages) => {
|
|
85
|
+
const conditionStore = getReadonlyConditionStore();
|
|
86
|
+
return getGTInternal({
|
|
87
|
+
locale: conditionStore.getLocale(),
|
|
88
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
89
|
+
}, messages);
|
|
87
90
|
});
|
|
88
|
-
/** Return a registered-message translation function for the current
|
|
89
|
-
const getMessages =
|
|
91
|
+
/** Return a registered-message translation function for the current runtime. */
|
|
92
|
+
const getMessages$1 = createIsomorphicFn().server(() => {
|
|
90
93
|
const conditionStore = getConditionStore();
|
|
91
94
|
return getMessagesInternal({
|
|
92
95
|
locale: conditionStore.getLocale(),
|
|
93
96
|
enableI18n: conditionStore.getEnableI18n()
|
|
94
97
|
});
|
|
98
|
+
}).client(() => {
|
|
99
|
+
const conditionStore = getReadonlyConditionStore();
|
|
100
|
+
return getMessagesInternal({
|
|
101
|
+
locale: conditionStore.getLocale(),
|
|
102
|
+
enableI18n: conditionStore.getEnableI18n()
|
|
103
|
+
});
|
|
95
104
|
});
|
|
96
|
-
/** Return a dictionary translation function for the current
|
|
97
|
-
const getTranslations =
|
|
105
|
+
/** Return a dictionary translation function for the current runtime. */
|
|
106
|
+
const getTranslations$1 = createIsomorphicFn().server((rootId) => {
|
|
98
107
|
const conditionStore = getConditionStore();
|
|
99
108
|
return getTranslationsInternal({
|
|
100
109
|
locale: conditionStore.getLocale(),
|
|
101
110
|
enableI18n: conditionStore.getEnableI18n(),
|
|
102
111
|
rootId
|
|
103
112
|
});
|
|
113
|
+
}).client((rootId) => {
|
|
114
|
+
const conditionStore = getReadonlyConditionStore();
|
|
115
|
+
return getTranslationsInternal({
|
|
116
|
+
locale: conditionStore.getLocale(),
|
|
117
|
+
enableI18n: conditionStore.getEnableI18n(),
|
|
118
|
+
rootId
|
|
119
|
+
});
|
|
104
120
|
});
|
|
105
121
|
//#endregion
|
|
122
|
+
//#region src/server.ts
|
|
123
|
+
/** @deprecated Import `gtMiddleware` from `gt-tanstack-start` instead. */
|
|
124
|
+
const gtMiddleware = gtMiddleware$1;
|
|
125
|
+
/** @deprecated Import `getLocale` from `gt-tanstack-start` instead. */
|
|
126
|
+
const getLocale = getLocale$1;
|
|
127
|
+
/** @deprecated Import `getEnableI18n` from `gt-tanstack-start` instead. */
|
|
128
|
+
const getEnableI18n = getEnableI18n$1;
|
|
129
|
+
/** @deprecated Import `getGT` from `gt-tanstack-start` instead. */
|
|
130
|
+
const getGT = getGT$1;
|
|
131
|
+
/** @deprecated Import `getMessages` from `gt-tanstack-start` instead. */
|
|
132
|
+
const getMessages = getMessages$1;
|
|
133
|
+
/** @deprecated Import `getTranslations` from `gt-tanstack-start` instead. */
|
|
134
|
+
const getTranslations = getTranslations$1;
|
|
135
|
+
//#endregion
|
|
106
136
|
export { getEnableI18n, getGT, getLocale, getMessages, getTranslations, gtMiddleware };
|
|
107
137
|
|
|
108
138
|
//# sourceMappingURL=server.mjs.map
|
package/dist/server.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.mjs","names":[],"sources":["../../core/dist/api-BOEGbEF6.mjs","../src/condition-store/singleton.ts","../src/middleware/gtMiddleware.ts","../src/functions/server.ts"],"sourcesContent":["//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { createGlobalSingleton } from 'gt-i18n/internal';\nimport type { AsyncLocalConditionStore } from './AsyncLocalConditionStore';\n\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT server request state before initialization',\n why: 'initializeGT() has not initialized the TanStack Start server condition store',\n fix: \"Call initializeGT() from 'gt-tanstack-start' during application setup before using gtMiddleware or server APIs.\",\n});\n\nconst conditionStoreSingleton = createGlobalSingleton<AsyncLocalConditionStore>(\n {\n namespace: 'tanstackStart',\n key: 'conditionStore',\n source: 'gt-tanstack-start',\n notInitialized: () => conditionStoreNotInitializedError,\n }\n);\n\nexport const getConditionStore = conditionStoreSingleton.get;\nexport const setConditionStore = conditionStoreSingleton.set;\nexport const isConditionStoreInitialized =\n conditionStoreSingleton.isInitialized;\n","import { createMiddleware } from '@tanstack/react-start';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/**\n * Establish request-scoped GT conditions for SSR, server routes, and server\n * functions.\n */\nexport const gtMiddleware = createMiddleware().server(({ request, next }) => {\n return getConditionStore().run(request, () => next());\n});\n","import { createServerOnlyFn } from '@tanstack/react-start';\nimport {\n getGTInternal,\n getMessagesInternal,\n getTranslationsInternal,\n} from 'gt-i18n/internal';\nimport type { Message } from 'gt-i18n/types';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/** Return the locale associated with the current server request. */\nexport const getLocale = createServerOnlyFn((): string => {\n return getConditionStore().getLocale();\n});\n\n/** Return whether internationalization is enabled for the current request. */\nexport const getEnableI18n = createServerOnlyFn((): boolean => {\n return getConditionStore().getEnableI18n();\n});\n\n/** Return a string translation function for the current server request. */\nexport const getGT = createServerOnlyFn(async (messages?: Message[]) => {\n const conditionStore = getConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n});\n\n/** Return a registered-message translation function for the current request. */\nexport const getMessages = createServerOnlyFn(async () => {\n const conditionStore = getConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n});\n\n/** Return a dictionary translation function for the current server request. */\nexport const getTranslations = createServerOnlyFn(async (rootId?: string) => {\n const conditionStore = getConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n});\n"],"mappings":";;;AAKA,SAAS,eAAe,MAAM;CAC7B,MAAM,UAAU,KAAK,MAAM;AAC3B,KAAI,CAAC,QAAS,QAAO;AACrB,QAAO,UAAU,KAAK,QAAQ,GAAG,UAAU,GAAG,QAAQ;;AAEvD,SAAS,cAAc,MAAM;CAC5B,MAAM,UAAU,KAAK,MAAM;CAC3B,IAAI,MAAM,QAAQ;AAClB,QAAO,MAAM,GAAG;EACf,MAAM,OAAO,QAAQ,MAAM;AAC3B,MAAI,SAAS,OAAO,SAAS,OAAO,SAAS,IAAK;AAClD,SAAO;;AAER,QAAO,QAAQ,MAAM,GAAG,IAAI;;AAE7B,SAAS,mBAAmB,MAAM;AACjC,QAAO,KAAK,QAAQ,gBAAgB,UAAU,MAAM,aAAa,CAAC;;AAEnE,SAAS,cAAc,SAAS;AAC/B,KAAI,CAAC,QAAS,QAAO;CACrB,MAAM,aAAa,MAAM,QAAQ,QAAQ,GAAG,QAAQ,KAAK,KAAK,GAAG;AACjE,KAAI,CAAC,WAAW,MAAM,CAAE,QAAO;AAC/B,QAAO,eAAe,YAAY,aAAa;;AAMhD,SAAS,wBAAwB,EAAE,QAAQ,UAAU,cAAc,aAAa,KAAK,KAAK,QAAQ,SAAS,WAAW;CACrH,MAAM,SAAS,SAAS,WAAW,GAAG,OAAO,GAAG,SAAS,KAAK,GAAG,OAAO,KAAK,WAAW,GAAG,SAAS,KAAK;CACzG,MAAM,aAAa,MAAM,GAAG,cAAc,aAAa,CAAC,WAAW,mBAAmB,cAAc,IAAI,CAAC,KAAK;CAC9G,MAAM,sBAAsB,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,SAAS,KAAK,cAAc,OAAO,CAAC;CACrF,MAAM,eAAe;EACpB;EACA;EACA,sBAAsB,GAAG,cAAc,IAAI,CAAC,OAAO,mBAAmB,cAAc,OAAO,CAAC,KAAK;EACjG,sBAAsB,KAAK,IAAI;EAC/B,cAAc,QAAQ;EACtB,CAAC,QAAQ,SAAS,CAAC,CAAC,KAAK,CAAC,IAAI,eAAe;AAC9C,KAAI,QAAS,cAAa,KAAK,eAAe,UAAU;CACxD,MAAM,UAAU,aAAa,KAAK,IAAI;AACtC,QAAO,SAAS,GAAG,OAAO,GAAG,YAAY;;;;AC1C1C,MAAM,oCAAoC,wBAAwB;CAChE,QAAQ;CACR,UAAU;CACV,cAAc;CACd,KAAK;CACL,KAAK;CACN,CAAC;AAEF,MAAM,0BAA0B,sBAC9B;CACE,WAAW;CACX,KAAK;CACL,QAAQ;CACR,sBAAsB;CACvB,CACF;AAED,MAAa,oBAAoB,wBAAwB;AACxB,wBAAwB;AAEvD,wBAAwB;;;;;;;ACjB1B,MAAa,eAAe,kBAAkB,CAAC,QAAQ,EAAE,SAAS,WAAW;AAC3E,QAAO,mBAAmB,CAAC,IAAI,eAAe,MAAM,CAAC;EACrD;;;;ACCF,MAAa,YAAY,yBAAiC;AACxD,QAAO,mBAAmB,CAAC,WAAW;EACtC;;AAGF,MAAa,gBAAgB,yBAAkC;AAC7D,QAAO,mBAAmB,CAAC,eAAe;EAC1C;;AAGF,MAAa,QAAQ,mBAAmB,OAAO,aAAyB;CACtE,MAAM,iBAAiB,mBAAmB;AAC1C,QAAO,cACL;EACE,QAAQ,eAAe,WAAW;EAClC,YAAY,eAAe,eAAe;EAC3C,EACD,SACD;EACD;;AAGF,MAAa,cAAc,mBAAmB,YAAY;CACxD,MAAM,iBAAiB,mBAAmB;AAC1C,QAAO,oBAAoB;EACzB,QAAQ,eAAe,WAAW;EAClC,YAAY,eAAe,eAAe;EAC3C,CAAC;EACF;;AAGF,MAAa,kBAAkB,mBAAmB,OAAO,WAAoB;CAC3E,MAAM,iBAAiB,mBAAmB;AAC1C,QAAO,wBAAwB;EAC7B,QAAQ,eAAe,WAAW;EAClC,YAAY,eAAe,eAAe;EAC1C;EACD,CAAC;EACF"}
|
|
1
|
+
{"version":3,"file":"server.mjs","names":["gtMiddleware","getLocale","getEnableI18n","getGT","getMessages","getTranslations","mainGtMiddleware","mainGetLocale","mainGetEnableI18n","mainGetGT","mainGetMessages","mainGetTranslations"],"sources":["../../core/dist/api-BOEGbEF6.mjs","../src/condition-store/singleton.ts","../src/middleware/gtMiddleware.ts","../src/functions/runtime.ts","../src/server.ts"],"sourcesContent":["//#region src/settings/settings.ts\nconst libraryDefaultLocale = \"en\";\nconst defaultTimeout = 6e4;\n//#endregion\n//#region src/logging/diagnostics.ts\nfunction ensureSentence(text) {\n\tconst trimmed = text.trim();\n\tif (!trimmed) return \"\";\n\treturn /[.!?)]$/.test(trimmed) ? trimmed : `${trimmed}.`;\n}\nfunction stripSentence(text) {\n\tconst trimmed = text.trim();\n\tlet end = trimmed.length;\n\twhile (end > 0) {\n\t\tconst char = trimmed[end - 1];\n\t\tif (char !== \".\" && char !== \"!\" && char !== \"?\") break;\n\t\tend -= 1;\n\t}\n\treturn trimmed.slice(0, end);\n}\nfunction lowercaseFirstWord(text) {\n\treturn text.replace(/^[A-Z][a-z]/, (match) => match.toLowerCase());\n}\nfunction formatDetails(details) {\n\tif (!details) return \"\";\n\tconst detailText = Array.isArray(details) ? details.join(\", \") : details;\n\tif (!detailText.trim()) return \"\";\n\treturn ensureSentence(`Details: ${detailText}`);\n}\nfunction formatDiagnosticErrorDetails(error) {\n\tif (error == null) return void 0;\n\treturn String(error);\n}\nfunction createDiagnosticMessage({ source, severity, whatHappened, reassurance, why, fix, wayOut, details, docsUrl }) {\n\tconst prefix = source ? severity ? `${source} ${severity}:` : `${source}:` : severity ? `${severity}:` : \"\";\n\tconst whatAndWhy = why ? `${stripSentence(whatHappened)} because ${lowercaseFirstWord(stripSentence(why))}` : whatHappened;\n\tconst shouldCombineWayOut = !!fix && !!wayOut && /^[a-z]/.test(stripSentence(wayOut));\n\tconst messageParts = [\n\t\twhatAndWhy,\n\t\treassurance,\n\t\tshouldCombineWayOut ? `${stripSentence(fix)}, or ${lowercaseFirstWord(stripSentence(wayOut))}` : fix,\n\t\tshouldCombineWayOut ? void 0 : wayOut,\n\t\tformatDetails(details)\n\t].filter((part) => !!part).map(ensureSentence);\n\tif (docsUrl) messageParts.push(`Learn more: ${docsUrl}`);\n\tconst message = messageParts.join(\" \");\n\treturn prefix ? `${prefix} ${message}` : message;\n}\n//#endregion\n//#region src/settings/settingsUrls.ts\nconst defaultCacheUrl = \"https://cdn.gtx.dev\";\nconst defaultBaseUrl = \"https://api2.gtx.dev\";\nconst defaultRuntimeApiUrl = \"https://runtime2.gtx.dev\";\n//#endregion\n//#region src/translate/api.ts\nconst API_VERSION = \"2026-03-06.v1\";\n//#endregion\nexport { createDiagnosticMessage as a, libraryDefaultLocale as c, defaultRuntimeApiUrl as i, defaultBaseUrl as n, formatDiagnosticErrorDetails as o, defaultCacheUrl as r, defaultTimeout as s, API_VERSION as t };\n\n//# sourceMappingURL=api-BOEGbEF6.mjs.map","import { createDiagnosticMessage } from 'generaltranslation/internal';\nimport { createGlobalSingleton } from 'gt-i18n/internal';\nimport type { AsyncLocalConditionStore } from './AsyncLocalConditionStore';\n\nconst conditionStoreNotInitializedError = createDiagnosticMessage({\n source: 'gt-tanstack-start',\n severity: 'Error',\n whatHappened: 'Cannot read GT server request state before initialization',\n why: 'initializeGT() has not initialized the TanStack Start server condition store',\n fix: \"Call initializeGT() from 'gt-tanstack-start' during application setup before using gtMiddleware or server APIs.\",\n});\n\nconst conditionStoreSingleton = createGlobalSingleton<AsyncLocalConditionStore>(\n {\n namespace: 'tanstackStart',\n key: 'conditionStore',\n source: 'gt-tanstack-start',\n notInitialized: () => conditionStoreNotInitializedError,\n }\n);\n\nexport const getConditionStore = conditionStoreSingleton.get;\nexport const setConditionStore = conditionStoreSingleton.set;\nexport const isConditionStoreInitialized =\n conditionStoreSingleton.isInitialized;\n","import {\n createMiddleware,\n type RequestMiddlewareAfterServer,\n} from '@tanstack/react-start';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/**\n * Establish request-scoped GT conditions for SSR, server routes, and server\n * functions.\n */\nexport const gtMiddleware: RequestMiddlewareAfterServer<\n {},\n undefined,\n undefined\n> = createMiddleware().server(({ request, pathname, next }) => {\n return getConditionStore().run(request, () => next(), pathname);\n});\n","import { createIsomorphicFn } from '@tanstack/react-start';\nimport { getReadonlyConditionStore } from '@generaltranslation/react-core/pure';\nimport {\n getGTInternal,\n getMessagesInternal,\n getTranslationsInternal,\n} from 'gt-i18n/internal';\nimport type {\n GTFunctionType,\n MFunctionType,\n Message,\n TFunctionType,\n} from 'gt-i18n/types';\nimport { getConditionStore } from '../condition-store/singleton';\n\n/** Return the locale associated with the current request or browser. */\nexport const getLocale: () => string = createIsomorphicFn()\n .server((): string => getConditionStore().getLocale())\n .client((): string => getReadonlyConditionStore().getLocale());\n\n/** Return whether internationalization is enabled for the current runtime. */\nexport const getEnableI18n: () => boolean = createIsomorphicFn()\n .server((): boolean => getConditionStore().getEnableI18n())\n .client((): boolean => getReadonlyConditionStore().getEnableI18n());\n\n/** Return a string translation function for the current runtime. */\nexport const getGT: (messages?: Message[]) => Promise<GTFunctionType> =\n createIsomorphicFn()\n .server((messages?: Message[]) => {\n const conditionStore = getConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n })\n .client((messages?: Message[]) => {\n const conditionStore = getReadonlyConditionStore();\n return getGTInternal(\n {\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n },\n messages\n );\n });\n\n/** Return a registered-message translation function for the current runtime. */\nexport const getMessages: () => Promise<MFunctionType> = createIsomorphicFn()\n .server(() => {\n const conditionStore = getConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n })\n .client(() => {\n const conditionStore = getReadonlyConditionStore();\n return getMessagesInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n });\n });\n\n/** Return a dictionary translation function for the current runtime. */\nexport const getTranslations: (rootId?: string) => Promise<TFunctionType> =\n createIsomorphicFn()\n .server((rootId?: string) => {\n const conditionStore = getConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n })\n .client((rootId?: string) => {\n const conditionStore = getReadonlyConditionStore();\n return getTranslationsInternal({\n locale: conditionStore.getLocale(),\n enableI18n: conditionStore.getEnableI18n(),\n rootId,\n });\n });\n","import type { RequestMiddlewareAfterServer } from '@tanstack/react-start';\nimport { gtMiddleware as mainGtMiddleware } from './middleware/gtMiddleware';\nimport {\n getEnableI18n as mainGetEnableI18n,\n getGT as mainGetGT,\n getLocale as mainGetLocale,\n getMessages as mainGetMessages,\n getTranslations as mainGetTranslations,\n} from './functions/runtime';\n\n/** @deprecated Import `gtMiddleware` from `gt-tanstack-start` instead. */\nexport const gtMiddleware: RequestMiddlewareAfterServer<\n {},\n undefined,\n undefined\n> = mainGtMiddleware;\n\n/** @deprecated Import `getLocale` from `gt-tanstack-start` instead. */\nexport const getLocale = mainGetLocale;\n\n/** @deprecated Import `getEnableI18n` from `gt-tanstack-start` instead. */\nexport const getEnableI18n = mainGetEnableI18n;\n\n/** @deprecated Import `getGT` from `gt-tanstack-start` instead. */\nexport const getGT = mainGetGT;\n\n/** @deprecated Import `getMessages` from `gt-tanstack-start` instead. */\nexport const getMessages = mainGetMessages;\n\n/** @deprecated Import `getTranslations` from `gt-tanstack-start` instead. */\nexport const getTranslations = mainGetTranslations;\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gt-tanstack-start",
|
|
3
|
-
"version": "11.0
|
|
3
|
+
"version": "11.1.0",
|
|
4
4
|
"description": "TanStack Start integration for General Translation",
|
|
5
5
|
"main": "./dist/index.server.mjs",
|
|
6
6
|
"module": "./dist/index.server.mjs",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"@tanstack/react-start": ">=1.159.0"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"gt-react": "11.0
|
|
20
|
-
"@generaltranslation/react-core": "11.0
|
|
21
|
-
"gt-i18n": "1.0.
|
|
22
|
-
"generaltranslation": "9.0.
|
|
19
|
+
"gt-react": "11.1.0",
|
|
20
|
+
"@generaltranslation/react-core": "11.1.0",
|
|
21
|
+
"gt-i18n": "1.0.8",
|
|
22
|
+
"generaltranslation": "9.0.4"
|
|
23
23
|
},
|
|
24
24
|
"repository": {
|
|
25
25
|
"type": "git",
|