ugly-app 0.1.327 → 0.1.329
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/version.d.ts +1 -1
- package/dist/cli/version.js +1 -1
- package/dist/client/AppProvider.d.ts.map +1 -1
- package/dist/client/AppProvider.js +27 -3
- package/dist/client/AppProvider.js.map +1 -1
- package/dist/client/StringsProvider.d.ts +46 -0
- package/dist/client/StringsProvider.d.ts.map +1 -0
- package/dist/client/StringsProvider.js +140 -0
- package/dist/client/StringsProvider.js.map +1 -0
- package/dist/client/bootstrapApp.d.ts +3 -0
- package/dist/client/bootstrapApp.d.ts.map +1 -1
- package/dist/client/bootstrapApp.js +6 -2
- package/dist/client/bootstrapApp.js.map +1 -1
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -0
- package/dist/client/index.js.map +1 -1
- package/dist/server/App.d.ts +7 -0
- package/dist/server/App.d.ts.map +1 -1
- package/dist/server/App.js +24 -0
- package/dist/server/App.js.map +1 -1
- package/dist/server/NatsProxyClient.js +1 -1
- package/dist/server/NatsProxyClient.js.map +1 -1
- package/dist/server/Strings.d.ts +33 -0
- package/dist/server/Strings.d.ts.map +1 -0
- package/dist/server/Strings.js +31 -0
- package/dist/server/Strings.js.map +1 -0
- package/dist/server/index.d.ts +2 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/shared/Strings.d.ts +95 -0
- package/dist/shared/Strings.d.ts.map +1 -0
- package/dist/shared/Strings.js +79 -0
- package/dist/shared/Strings.js.map +1 -0
- package/dist/shared/index.d.ts +3 -0
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +2 -0
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/lang/builtin_en.d.ts +4 -0
- package/dist/shared/lang/builtin_en.d.ts.map +1 -0
- package/dist/shared/lang/builtin_en.js +27 -0
- package/dist/shared/lang/builtin_en.js.map +1 -0
- package/package.json +1 -1
- package/src/cli/version.ts +1 -1
- package/src/client/AppProvider.tsx +28 -3
- package/src/client/StringsProvider.tsx +204 -0
- package/src/client/bootstrapApp.tsx +13 -2
- package/src/client/index.ts +10 -0
- package/src/server/App.ts +44 -0
- package/src/server/NatsProxyClient.ts +6 -6
- package/src/server/Strings.ts +57 -0
- package/src/server/index.ts +7 -0
- package/src/shared/Strings.ts +184 -0
- package/src/shared/index.ts +15 -0
- package/src/shared/lang/builtin_en.ts +28 -0
package/dist/cli/version.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const CLI_VERSION = "0.1.
|
|
1
|
+
export declare const CLI_VERSION = "0.1.329";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/dist/cli/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppProvider.d.ts","sourceRoot":"","sources":["../../src/client/AppProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACZ,SAAS,EAOV,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"AppProvider.d.ts","sourceRoot":"","sources":["../../src/client/AppProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACZ,SAAS,EAOV,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOxD,MAAM,WAAW,eAAe,CAAC,aAAa,GAAG,OAAO;IACtD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IACnC,aAAa,EAAE,aAAa,GAAG,IAAI,CAAC;IACpC,SAAS,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAAC;IACzC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,aAAa,IAAI,IAAI,CAAC;IACtB,QAAQ,CACN,KAAK,EAAE,MAAM,EACb,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EACvB,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,IAAI,CAAC,CAAC;IACjB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;CACxD;AAID,wBAAgB,MAAM,CACpB,aAAa,GAAG,OAAO,KACpB,eAAe,CAAC,aAAa,CAAC,CAIlC;AAKD,UAAU,gBAAgB,CAAC,aAAa,GAAG,OAAO;IAChD,MAAM,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IACnC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,SAAS,CAAC;IACpB,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,cAAc,CAAC,EAAE,YAAY,CAAC;QAC5B,KAAK,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,aAAa,CAAC;KAC9B,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;CACzD;AAED,wBAAgB,WAAW,CAAC,aAAa,GAAG,OAAO,EAAE,EACnD,MAAM,EACN,aAAoB,EACpB,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,SAAS,EAAE,aAAa,GACzB,EAAE,gBAAgB,CAAC,aAAa,CAAC,2CAwIjC;AAED,wBAAgB,cAAc,IAAI,eAAe,GAAG,IAAI,CAEvD;AAED,wBAAgB,YAAY,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,MAAM,CA4B1E"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { cloneElement, createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
|
|
3
|
+
import { useStringsContext } from './StringsProvider.js';
|
|
3
4
|
const AppContext = createContext(null);
|
|
4
5
|
export function useApp() {
|
|
5
6
|
const ctx = useContext(AppContext);
|
|
@@ -116,10 +117,33 @@ export function useAppOptional() {
|
|
|
116
117
|
return useContext(AppContext);
|
|
117
118
|
}
|
|
118
119
|
export function useLocalizer() {
|
|
119
|
-
const
|
|
120
|
-
|
|
120
|
+
const stringsCtx = useStringsContext();
|
|
121
|
+
const appCtx = useContext(AppContext);
|
|
122
|
+
// Prefer StringsProvider when available (new path)
|
|
123
|
+
if (stringsCtx) {
|
|
124
|
+
return (key, params) => {
|
|
125
|
+
const template = stringsCtx.strings[key];
|
|
126
|
+
if (!template)
|
|
127
|
+
return key;
|
|
128
|
+
if (params && params.length > 0) {
|
|
129
|
+
// Simple sprintf-style: replace %s and %d sequentially
|
|
130
|
+
let result = template;
|
|
131
|
+
let paramIdx = 0;
|
|
132
|
+
result = result.replace(/%[sd]/g, () => {
|
|
133
|
+
if (paramIdx < params.length) {
|
|
134
|
+
return String(params[paramIdx++]);
|
|
135
|
+
}
|
|
136
|
+
return '';
|
|
137
|
+
});
|
|
138
|
+
return result;
|
|
139
|
+
}
|
|
140
|
+
return template;
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
// Backward compat: fall back to AppProvider's localizer prop
|
|
144
|
+
if (!appCtx)
|
|
121
145
|
return (key) => key;
|
|
122
|
-
return
|
|
146
|
+
return appCtx.localizer;
|
|
123
147
|
}
|
|
124
148
|
function PopupLayer({ popups }) {
|
|
125
149
|
if (popups.length === 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AppProvider.js","sourceRoot":"","sources":["../../src/client/AppProvider.tsx"],"names":[],"mappings":";AAAA,OAAO,EACL,YAAY,EACZ,aAAa,EAGb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"AppProvider.js","sourceRoot":"","sources":["../../src/client/AppProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-side localization provider.
|
|
3
|
+
*
|
|
4
|
+
* Reads SSR-injected language data from window globals, lazy-loads full
|
|
5
|
+
* string tables, and exposes hooks for components to consume translated strings.
|
|
6
|
+
*/
|
|
7
|
+
import { type ReactNode } from 'react';
|
|
8
|
+
export interface StringsProviderConfig {
|
|
9
|
+
/** Default language code (e.g. 'en') */
|
|
10
|
+
defaultLang: string;
|
|
11
|
+
/** All supported language codes */
|
|
12
|
+
langs: readonly string[];
|
|
13
|
+
/** Default language table — bundled inline, not lazy-loaded */
|
|
14
|
+
defaultTable: Record<string, string>;
|
|
15
|
+
/** Lazy-load a full string table for a given language */
|
|
16
|
+
loadTable: (lang: string) => Promise<Record<string, string>>;
|
|
17
|
+
/** Cookie name for persisting language preference. Default: 'lang' */
|
|
18
|
+
cookieName?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface StringsContextValue {
|
|
21
|
+
strings: Record<string, string>;
|
|
22
|
+
lang: string;
|
|
23
|
+
loading: boolean;
|
|
24
|
+
changeLang: (lang: string) => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare function StringsProvider({ config, children, }: {
|
|
27
|
+
config: StringsProviderConfig;
|
|
28
|
+
children: ReactNode;
|
|
29
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
30
|
+
/**
|
|
31
|
+
* Returns the current merged string table.
|
|
32
|
+
* Projects should create a typed wrapper:
|
|
33
|
+
* ```ts
|
|
34
|
+
* export function useAppStrings() {
|
|
35
|
+
* return useStrings() as AppStringTable & BuiltinStringTable;
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function useStrings(): Record<string, string>;
|
|
40
|
+
/** Returns the current language code. */
|
|
41
|
+
export declare function useLang(): string;
|
|
42
|
+
/** Returns an async function to change the current language. */
|
|
43
|
+
export declare function useChangeLanguage(): (lang: string) => Promise<void>;
|
|
44
|
+
/** @internal — used by useLocalizer to check if StringsProvider is present */
|
|
45
|
+
export declare function useStringsContext(): StringsContextValue | null;
|
|
46
|
+
//# sourceMappingURL=StringsProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringsProvider.d.ts","sourceRoot":"","sources":["../../src/client/StringsProvider.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAQL,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AAKf,MAAM,WAAW,qBAAqB;IACpC,wCAAwC;IACxC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,+DAA+D;IAC/D,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,yDAAyD;IACzD,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC7D,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAqCD,wBAAgB,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,GACT,EAAE;IACD,MAAM,EAAE,qBAAqB,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC;CACrB,2CAoFA;AAID;;;;;;;;GAQG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAInD;AAED,yCAAyC;AACzC,wBAAgB,OAAO,IAAI,MAAM,CAIhC;AAED,gEAAgE;AAChE,wBAAgB,iBAAiB,IAAI,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAKnE;AAED,8EAA8E;AAC9E,wBAAgB,iBAAiB,IAAI,mBAAmB,GAAG,IAAI,CAE9D"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Client-side localization provider.
|
|
4
|
+
*
|
|
5
|
+
* Reads SSR-injected language data from window globals, lazy-loads full
|
|
6
|
+
* string tables, and exposes hooks for components to consume translated strings.
|
|
7
|
+
*/
|
|
8
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState, } from 'react';
|
|
9
|
+
import { builtinEn } from '../shared/lang/builtin_en.js';
|
|
10
|
+
// ─── Context ──────────────────────────────────────────────────────────────────
|
|
11
|
+
const StringsContext = createContext(null);
|
|
12
|
+
// ─── Window globals (injected by server SSR) ──────────────────────────────────
|
|
13
|
+
const w = typeof window !== 'undefined'
|
|
14
|
+
? window
|
|
15
|
+
: {};
|
|
16
|
+
function getSSRLang() {
|
|
17
|
+
return typeof w['__LANG__'] === 'string' ? w['__LANG__'] : undefined;
|
|
18
|
+
}
|
|
19
|
+
function getSSRStringsVersion() {
|
|
20
|
+
return typeof w['__STRINGS_VERSION__'] === 'string'
|
|
21
|
+
? w['__STRINGS_VERSION__']
|
|
22
|
+
: undefined;
|
|
23
|
+
}
|
|
24
|
+
function getSSRCriticalStrings() {
|
|
25
|
+
const val = w['__CRITICAL_STRINGS__'];
|
|
26
|
+
return val && typeof val === 'object' ? val : undefined;
|
|
27
|
+
}
|
|
28
|
+
// ─── Cookie helpers ───────────────────────────────────────────────────────────
|
|
29
|
+
function setCookie(name, value) {
|
|
30
|
+
if (typeof document === 'undefined')
|
|
31
|
+
return;
|
|
32
|
+
const maxAge = 365 * 24 * 60 * 60; // 1 year
|
|
33
|
+
document.cookie = `${name}=${encodeURIComponent(value)};path=/;max-age=${maxAge};SameSite=Lax`;
|
|
34
|
+
}
|
|
35
|
+
// ─── Provider ─────────────────────────────────────────────────────────────────
|
|
36
|
+
export function StringsProvider({ config, children, }) {
|
|
37
|
+
const cookieName = config.cookieName ?? 'lang';
|
|
38
|
+
const ssrLang = getSSRLang();
|
|
39
|
+
const ssrCritical = getSSRCriticalStrings();
|
|
40
|
+
const _ssrVersion = getSSRStringsVersion();
|
|
41
|
+
// Initial language: SSR value > default
|
|
42
|
+
const initialLang = ssrLang ?? config.defaultLang;
|
|
43
|
+
// Initial strings: builtin defaults + default table + SSR critical strings
|
|
44
|
+
const initialStrings = useMemo(() => {
|
|
45
|
+
const base = { ...builtinEn, ...config.defaultTable };
|
|
46
|
+
if (ssrCritical) {
|
|
47
|
+
return { ...base, ...ssrCritical };
|
|
48
|
+
}
|
|
49
|
+
return base;
|
|
50
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
51
|
+
}, []);
|
|
52
|
+
const [strings, setStrings] = useState(initialStrings);
|
|
53
|
+
const [lang, setLang] = useState(initialLang);
|
|
54
|
+
const [loading, setLoading] = useState(initialLang !== config.defaultLang);
|
|
55
|
+
const initializedRef = useRef(false);
|
|
56
|
+
// Cache for loaded tables
|
|
57
|
+
const cacheRef = useRef(new Map());
|
|
58
|
+
// Cache the default table
|
|
59
|
+
if (!cacheRef.current.has(config.defaultLang)) {
|
|
60
|
+
cacheRef.current.set(config.defaultLang, config.defaultTable);
|
|
61
|
+
}
|
|
62
|
+
// On mount: lazy-load full table if non-default language
|
|
63
|
+
useEffect(() => {
|
|
64
|
+
if (initialLang !== config.defaultLang && !cacheRef.current.has(initialLang)) {
|
|
65
|
+
config
|
|
66
|
+
.loadTable(initialLang)
|
|
67
|
+
.then((table) => {
|
|
68
|
+
cacheRef.current.set(initialLang, table);
|
|
69
|
+
setStrings({ ...builtinEn, ...table });
|
|
70
|
+
setLoading(false);
|
|
71
|
+
})
|
|
72
|
+
.catch((err) => {
|
|
73
|
+
console.error('[StringsProvider] Failed to load language', initialLang, err);
|
|
74
|
+
setLoading(false);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
setLoading(false);
|
|
79
|
+
}
|
|
80
|
+
initializedRef.current = true;
|
|
81
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
82
|
+
}, []);
|
|
83
|
+
// Language change handler
|
|
84
|
+
const changeLang = useCallback(async (newLang) => {
|
|
85
|
+
setLang(newLang);
|
|
86
|
+
setLoading(true);
|
|
87
|
+
setCookie(cookieName, newLang);
|
|
88
|
+
try {
|
|
89
|
+
let table = cacheRef.current.get(newLang);
|
|
90
|
+
if (!table) {
|
|
91
|
+
table = await config.loadTable(newLang);
|
|
92
|
+
cacheRef.current.set(newLang, table);
|
|
93
|
+
}
|
|
94
|
+
setStrings({ ...builtinEn, ...table });
|
|
95
|
+
}
|
|
96
|
+
catch (err) {
|
|
97
|
+
console.error('[StringsProvider] Failed to load language', newLang, err);
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
setLoading(false);
|
|
101
|
+
}
|
|
102
|
+
}, [config, cookieName]);
|
|
103
|
+
const ctx = useMemo(() => ({ strings, lang, loading, changeLang }), [strings, lang, loading, changeLang]);
|
|
104
|
+
return (_jsx(StringsContext.Provider, { value: ctx, children: children }));
|
|
105
|
+
}
|
|
106
|
+
// ─── Hooks ────────────────────────────────────────────────────────────────────
|
|
107
|
+
/**
|
|
108
|
+
* Returns the current merged string table.
|
|
109
|
+
* Projects should create a typed wrapper:
|
|
110
|
+
* ```ts
|
|
111
|
+
* export function useAppStrings() {
|
|
112
|
+
* return useStrings() as AppStringTable & BuiltinStringTable;
|
|
113
|
+
* }
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export function useStrings() {
|
|
117
|
+
const ctx = useContext(StringsContext);
|
|
118
|
+
if (!ctx)
|
|
119
|
+
throw new Error('useStrings() must be used inside <StringsProvider>');
|
|
120
|
+
return ctx.strings;
|
|
121
|
+
}
|
|
122
|
+
/** Returns the current language code. */
|
|
123
|
+
export function useLang() {
|
|
124
|
+
const ctx = useContext(StringsContext);
|
|
125
|
+
if (!ctx)
|
|
126
|
+
throw new Error('useLang() must be used inside <StringsProvider>');
|
|
127
|
+
return ctx.lang;
|
|
128
|
+
}
|
|
129
|
+
/** Returns an async function to change the current language. */
|
|
130
|
+
export function useChangeLanguage() {
|
|
131
|
+
const ctx = useContext(StringsContext);
|
|
132
|
+
if (!ctx)
|
|
133
|
+
throw new Error('useChangeLanguage() must be used inside <StringsProvider>');
|
|
134
|
+
return ctx.changeLang;
|
|
135
|
+
}
|
|
136
|
+
/** @internal — used by useLocalizer to check if StringsProvider is present */
|
|
137
|
+
export function useStringsContext() {
|
|
138
|
+
return useContext(StringsContext);
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=StringsProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StringsProvider.js","sourceRoot":"","sources":["../../src/client/StringsProvider.tsx"],"names":[],"mappings":";AAAA;;;;;GAKG;AAEH,OAAO,EACL,aAAa,EACb,WAAW,EACX,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GAET,MAAM,OAAO,CAAC;AACf,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAwBzD,iFAAiF;AAEjF,MAAM,cAAc,GAAG,aAAa,CAA6B,IAAI,CAAC,CAAC;AAEvE,iFAAiF;AAEjF,MAAM,CAAC,GAAG,OAAO,MAAM,KAAK,WAAW;IACrC,CAAC,CAAE,MAA6C;IAChD,CAAC,CAAE,EAA8B,CAAC;AAEpC,SAAS,UAAU;IACjB,OAAO,OAAO,CAAC,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,oBAAoB;IAC3B,OAAO,OAAO,CAAC,CAAC,qBAAqB,CAAC,KAAK,QAAQ;QACjD,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAC1B,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,GAAG,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC;IACtC,OAAO,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAE,GAA8B,CAAC,CAAC,CAAC,SAAS,CAAC;AACtF,CAAC;AAED,iFAAiF;AAEjF,SAAS,SAAS,CAAC,IAAY,EAAE,KAAa;IAC5C,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO;IAC5C,MAAM,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS;IAC5C,QAAQ,CAAC,MAAM,GAAG,GAAG,IAAI,IAAI,kBAAkB,CAAC,KAAK,CAAC,mBAAmB,MAAM,eAAe,CAAC;AACjG,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,eAAe,CAAC,EAC9B,MAAM,EACN,QAAQ,GAIT;IACC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC;IAC/C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,MAAM,WAAW,GAAG,qBAAqB,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,oBAAoB,EAAE,CAAC;IAE3C,wCAAwC;IACxC,MAAM,WAAW,GAAG,OAAO,IAAI,MAAM,CAAC,WAAW,CAAC;IAElD,2EAA2E;IAC3E,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,EAAE,GAAG,SAAS,EAAE,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;QACtD,IAAI,WAAW,EAAE,CAAC;YAChB,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,WAAW,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,IAAI,CAAC;QACZ,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAyB,cAAc,CAAC,CAAC;IAC/E,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3E,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAErC,0BAA0B;IAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,GAAG,EAAkC,CAAC,CAAC;IAEnE,0BAA0B;IAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;QAC9C,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IAChE,CAAC;IAED,yDAAyD;IACzD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,WAAW,KAAK,MAAM,CAAC,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YAC7E,MAAM;iBACH,SAAS,CAAC,WAAW,CAAC;iBACtB,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;gBACd,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;gBACzC,UAAU,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;gBACvC,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,CAAC;iBACD,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;gBACtB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC;gBAC7E,UAAU,CAAC,KAAK,CAAC,CAAC;YACpB,CAAC,CAAC,CAAC;QACP,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,cAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC9B,uDAAuD;IACzD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,0BAA0B;IAC1B,MAAM,UAAU,GAAG,WAAW,CAC5B,KAAK,EAAE,OAAe,EAAE,EAAE;QACxB,OAAO,CAAC,OAAO,CAAC,CAAC;QACjB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAE/B,IAAI,CAAC;YACH,IAAI,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,KAAK,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACxC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACvC,CAAC;YACD,UAAU,CAAC,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,2CAA2C,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAC3E,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EACD,CAAC,MAAM,EAAE,UAAU,CAAC,CACrB,CAAC;IAEF,MAAM,GAAG,GAAG,OAAO,CACjB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,EAC9C,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,CACrC,CAAC;IAEF,OAAO,CACL,KAAC,cAAc,CAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,YAAG,QAAQ,GAA2B,CAC1E,CAAC;AACJ,CAAC;AAED,iFAAiF;AAEjF;;;;;;;;GAQG;AACH,MAAM,UAAU,UAAU;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,OAAO;IACrB,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IAC7E,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,GAAG;QACN,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC,UAAU,CAAC;AACxB,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,iBAAiB;IAC/B,OAAO,UAAU,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ComponentType, ReactElement, ReactNode } from 'react';
|
|
2
2
|
import type { MessageRegistry, RequestRegistry } from '../shared/Api.js';
|
|
3
|
+
import { type StringsProviderConfig } from './StringsProvider.js';
|
|
3
4
|
interface BootstrapAppOptions {
|
|
4
5
|
/** App-specific request definitions (merged with framework requests internally) */
|
|
5
6
|
requests: RequestRegistry;
|
|
@@ -20,6 +21,8 @@ interface BootstrapAppOptions {
|
|
|
20
21
|
fallback?: ReactNode;
|
|
21
22
|
/** WebSocket endpoint. Defaults to '/rpc' */
|
|
22
23
|
socketUrl?: string;
|
|
24
|
+
/** Localization configuration. When provided, wraps the app with StringsProvider. */
|
|
25
|
+
strings?: StringsProviderConfig;
|
|
23
26
|
}
|
|
24
27
|
export declare function bootstrapApp(options: BootstrapAppOptions): void;
|
|
25
28
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapApp.d.ts","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrapApp.d.ts","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAMzE,OAAO,EAAmB,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAGnF,UAAU,mBAAmB;IAC3B,mFAAmF;IACnF,QAAQ,EAAE,eAAe,CAAC;IAE1B,mFAAmF;IACnF,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B,uDAAuD;IACvD,cAAc,EAAE,aAAa,CAAC;QAC5B,QAAQ,EAAE,SAAS,CAAC;QACpB,QAAQ,CAAC,EAAE,SAAS,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,OAAO,CAAC;QAChC,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC,CAAC;IAEH,+EAA+E;IAC/E,MAAM,EAAE,MAAM,YAAY,CAAC;IAE3B,4DAA4D;IAC5D,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAE5B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,SAAS,CAAC;IAErB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,qFAAqF;IACrF,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAID,wBAAgB,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CA8E/D"}
|
|
@@ -5,10 +5,11 @@ import { frameworkRequests } from '../shared/FrameworkRequests.js';
|
|
|
5
5
|
import { initAppApi } from './AppApi.js';
|
|
6
6
|
import { AppProvider } from './AppProvider.js';
|
|
7
7
|
import { createSocket } from './createSocket.js';
|
|
8
|
+
import { StringsProvider } from './StringsProvider.js';
|
|
8
9
|
import { createUglyBotSocket } from './uglyBotSocket.js';
|
|
9
10
|
const w = typeof window !== 'undefined' ? window : {};
|
|
10
11
|
export function bootstrapApp(options) {
|
|
11
|
-
const { requests: appRequests, messages: appMessages = {}, RouterProvider, render: renderApp, root: rootOpt = '#root', fallback = _jsx("div", { children: "404 \u2014 Page not found" }), socketUrl = '/rpc', } = options;
|
|
12
|
+
const { requests: appRequests, messages: appMessages = {}, RouterProvider, render: renderApp, root: rootOpt = '#root', fallback = _jsx("div", { children: "404 \u2014 Page not found" }), socketUrl = '/rpc', strings: stringsConfig, } = options;
|
|
12
13
|
const rootEl = typeof rootOpt === 'string' ? document.querySelector(rootOpt) : rootOpt;
|
|
13
14
|
const root = createRoot(rootEl);
|
|
14
15
|
// Initialize error/feedback reporting
|
|
@@ -19,7 +20,10 @@ export function bootstrapApp(options) {
|
|
|
19
20
|
}
|
|
20
21
|
const token = w['__AUTH_TOKEN__'];
|
|
21
22
|
function renderWithRouter(isAuthenticated, autoLogin, children) {
|
|
22
|
-
|
|
23
|
+
const tree = (_jsx(RouterProvider, { fallback: fallback, isAuthenticated: () => isAuthenticated, autoLogin: autoLogin, children: children }));
|
|
24
|
+
root.render(stringsConfig
|
|
25
|
+
? _jsx(StringsProvider, { config: stringsConfig, children: tree })
|
|
26
|
+
: tree);
|
|
23
27
|
}
|
|
24
28
|
if (!token) {
|
|
25
29
|
renderWithRouter(false, true, renderApp());
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrapApp.js","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"bootstrapApp.js","sourceRoot":"","sources":["../../src/client/bootstrapApp.tsx"],"names":[],"mappings":"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"}
|
package/dist/client/index.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export { SlideFromBottom } from './animations/SlideFromBottom.js';
|
|
|
13
13
|
export { SlideFromRight } from './animations/SlideFromRight.js';
|
|
14
14
|
export { AppProvider, useApp, useLocalizer } from './AppProvider.js';
|
|
15
15
|
export type { AppContextValue } from './AppProvider.js';
|
|
16
|
+
export { StringsProvider, useChangeLanguage, useLang, useStrings, } from './StringsProvider.js';
|
|
17
|
+
export type { StringsContextValue, StringsProviderConfig, } from './StringsProvider.js';
|
|
16
18
|
export { AudioPlayer } from './audio/AudioPlayer.js';
|
|
17
19
|
export { AudioRecorder } from './audio/AudioRecorder.js';
|
|
18
20
|
export type { AudioVisualizer } from './audio/AudioVisualizer.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
package/dist/client/index.js
CHANGED
|
@@ -6,6 +6,7 @@ export { FadeIn } from './animations/FadeIn.js';
|
|
|
6
6
|
export { SlideFromBottom } from './animations/SlideFromBottom.js';
|
|
7
7
|
export { SlideFromRight } from './animations/SlideFromRight.js';
|
|
8
8
|
export { AppProvider, useApp, useLocalizer } from './AppProvider.js';
|
|
9
|
+
export { StringsProvider, useChangeLanguage, useLang, useStrings, } from './StringsProvider.js';
|
|
9
10
|
export { AudioPlayer } from './audio/AudioPlayer.js';
|
|
10
11
|
export { AudioRecorder } from './audio/AudioRecorder.js';
|
|
11
12
|
export { BlobAudioAnalyzer } from './audio/BlobAudioAnalyzer.js';
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAEzH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE5F,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAsBA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAEnD,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,uBAAuB,GACxB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,sCAAsC,CAAC;AAEzH,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAE5F,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErE,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,OAAO,EACP,UAAU,GACX,MAAM,sBAAsB,CAAC;AAK9B,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,0BAA0B,EAC1B,WAAW,EACX,QAAQ,GACT,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAK3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,cAAc,uBAAuB,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAKzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO3E,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/server/App.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ import type { CollectionMap } from './DB.js';
|
|
|
10
10
|
import { PageRegistry } from '../shared/Router.js';
|
|
11
11
|
import { verifyToken, type AuthProvider, type OnUserCreate } from './Auth.js';
|
|
12
12
|
import { AppRouter, type RequestHandlers } from './Router.js';
|
|
13
|
+
import type { StringsServerConfig } from './Strings.js';
|
|
13
14
|
import { type Experiment } from '../shared/Experiment.js';
|
|
14
15
|
export { verifyToken };
|
|
15
16
|
export interface PageServerOptions {
|
|
@@ -75,6 +76,12 @@ export interface AppConfigurator {
|
|
|
75
76
|
* and `GET /_cron/manifest` for the deploy orchestrator.
|
|
76
77
|
*/
|
|
77
78
|
setCronTasks<T extends CronTaskRegistry>(tasks: T, handlers: CronHandlers<T>): void;
|
|
79
|
+
/**
|
|
80
|
+
* Register localization configuration.
|
|
81
|
+
* When set, the framework injects language data into SSR HTML and provides
|
|
82
|
+
* `resolveLanguage`, `getServerStrings`, and `getCriticalStrings` helpers.
|
|
83
|
+
*/
|
|
84
|
+
setStrings(config: StringsServerConfig): void;
|
|
78
85
|
}
|
|
79
86
|
export interface App<Map extends Record<string, DBObject> = Record<string, DBObject>> extends AppRouter {
|
|
80
87
|
start(port?: number): Promise<void>;
|
package/dist/server/App.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/server/App.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAC;AAG5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,IAAI,CAAC;AAErC,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACxF,OAAO,KAAK,EACV,qBAAqB,EAErB,cAAc,EACd,OAAO,EACP,UAAU,EACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAY,MAAM,qBAAqB,CAAC;AAM7D,OAAO,EAGL,WAAW,EACX,KAAK,YAAY,EACjB,KAAK,YAAY,EAClB,MAAM,WAAW,CAAC;AAanB,OAAO,EACL,SAAS,EAIT,KAAK,eAAe,EACrB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../src/server/App.ts"],"names":[],"mappings":"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"}
|
package/dist/server/App.js
CHANGED
|
@@ -19,6 +19,7 @@ import { checkJetStream, connectNats, ensureKvBucket } from './Nats.js';
|
|
|
19
19
|
import { RateLimitError } from './RateLimit.js';
|
|
20
20
|
import { createRouter, RouterAuthError, RouterNotFoundError, } from './Router.js';
|
|
21
21
|
import { createStoreHandlers } from './StoreHandlers.js';
|
|
22
|
+
import { getCriticalStrings, resolveLanguage, stringsVersion } from './Strings.js';
|
|
22
23
|
import { initWebSocketServer } from './Socket.js';
|
|
23
24
|
import { createStorageClient, setStoragePrefix } from './DataProxyClient.js';
|
|
24
25
|
import { frameworkRequests } from '../shared/FrameworkRequests.js';
|
|
@@ -87,6 +88,7 @@ export function createApp(registry, requests, appDefs, configure, deleteHandlers
|
|
|
87
88
|
let onEmail = null;
|
|
88
89
|
let cronTasks = null;
|
|
89
90
|
let cronHandlerFns = null;
|
|
91
|
+
let stringsConfig = null;
|
|
90
92
|
const configurator = {
|
|
91
93
|
setAuth: (provider) => {
|
|
92
94
|
authProvider = provider;
|
|
@@ -143,6 +145,9 @@ export function createApp(registry, requests, appDefs, configure, deleteHandlers
|
|
|
143
145
|
cronTasks = tasks;
|
|
144
146
|
cronHandlerFns = handlers;
|
|
145
147
|
},
|
|
148
|
+
setStrings: (config) => {
|
|
149
|
+
stringsConfig = config;
|
|
150
|
+
},
|
|
146
151
|
};
|
|
147
152
|
// Cookie parser must be registered before configure() because registerRoutes()
|
|
148
153
|
// immediately mounts the app's router via expressApp.use(), and routes need req.cookies.
|
|
@@ -524,11 +529,21 @@ export function createApp(registry, requests, appDefs, configure, deleteHandlers
|
|
|
524
529
|
res.clearCookie('auth_token');
|
|
525
530
|
}
|
|
526
531
|
}
|
|
532
|
+
// Build localization script if strings are configured
|
|
533
|
+
let stringsScript = '';
|
|
534
|
+
if (stringsConfig) {
|
|
535
|
+
const langCookie = req.cookies?.[stringsConfig.cookieName ?? 'lang'];
|
|
536
|
+
const lang = resolveLanguage(null, // user lang resolved client-side after auth
|
|
537
|
+
langCookie, req.get('accept-language'), stringsConfig.langs, stringsConfig.defaultLang);
|
|
538
|
+
const criticalStrings = getCriticalStrings(lang, stringsConfig);
|
|
539
|
+
stringsScript = `<script>window.__LANG__=${JSON.stringify(lang)};window.__STRINGS_VERSION__=${JSON.stringify(stringsVersion)};window.__CRITICAL_STRINGS__=${JSON.stringify(criticalStrings)}</script>`;
|
|
540
|
+
}
|
|
527
541
|
const injectScript = [
|
|
528
542
|
injectedToken
|
|
529
543
|
? `<script>window.__AUTH_TOKEN__=${JSON.stringify(injectedToken)}</script>`
|
|
530
544
|
: '',
|
|
531
545
|
`<script>window.__UGLY_BOT_URL__=${JSON.stringify(getUglyBotUrl())};window.__UGLY_BOT_PROJECT_ID__=${JSON.stringify(appProjectId)}</script>`,
|
|
546
|
+
stringsScript,
|
|
532
547
|
].join('');
|
|
533
548
|
const template = await fs.readFile(path.join(clientDist, 'index.html'), 'utf-8');
|
|
534
549
|
const baseHtml = injectProjectMeta(template.replace('</head>', `${injectScript}</head>`), appProjectName, appProjectIcon);
|
|
@@ -592,11 +607,20 @@ export function createApp(registry, requests, appDefs, configure, deleteHandlers
|
|
|
592
607
|
res.clearCookie('auth_token');
|
|
593
608
|
}
|
|
594
609
|
}
|
|
610
|
+
// Build localization script if strings are configured
|
|
611
|
+
let stringsScript = '';
|
|
612
|
+
if (stringsConfig) {
|
|
613
|
+
const langCookie = req.cookies?.[stringsConfig.cookieName ?? 'lang'];
|
|
614
|
+
const lang = resolveLanguage(null, langCookie, req.get('accept-language'), stringsConfig.langs, stringsConfig.defaultLang);
|
|
615
|
+
const criticalStrings = getCriticalStrings(lang, stringsConfig);
|
|
616
|
+
stringsScript = `<script>window.__LANG__=${JSON.stringify(lang)};window.__STRINGS_VERSION__=${JSON.stringify(stringsVersion)};window.__CRITICAL_STRINGS__=${JSON.stringify(criticalStrings)}</script>`;
|
|
617
|
+
}
|
|
595
618
|
const injectScript = [
|
|
596
619
|
injectedToken
|
|
597
620
|
? `<script>window.__AUTH_TOKEN__=${JSON.stringify(injectedToken)}</script>`
|
|
598
621
|
: '',
|
|
599
622
|
`<script>window.__UGLY_BOT_URL__=${JSON.stringify(getUglyBotUrl())};window.__UGLY_BOT_PROJECT_ID__=${JSON.stringify(appProjectId)}</script>`,
|
|
623
|
+
stringsScript,
|
|
600
624
|
].join('');
|
|
601
625
|
console.log(`[app] → reading template: ${clientSrcPath}`);
|
|
602
626
|
const template = await fs.readFile(clientSrcPath, 'utf-8');
|