ugly-app 0.1.326 → 0.1.328
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/scaffold.d.ts.map +1 -1
- package/dist/cli/scaffold.js +0 -54
- package/dist/cli/scaffold.js.map +1 -1
- 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 +87 -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/scaffold.ts +0 -69
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAaA,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuExE"}
|
package/dist/cli/scaffold.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { execSync } from 'child_process';
|
|
2
2
|
import fs from 'fs-extra';
|
|
3
3
|
import { customAlphabet } from 'nanoid';
|
|
4
|
-
import os from 'os';
|
|
5
4
|
import path from 'path';
|
|
6
5
|
import { fileURLToPath } from 'url';
|
|
7
6
|
import { generateBootstrapMigration } from './bootstrapMigration.js';
|
|
@@ -10,58 +9,6 @@ import { runUglyBotSetup } from './uglyBotSetup.js';
|
|
|
10
9
|
import { writeUglyAppConfig } from './uglyappConfig.js';
|
|
11
10
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
12
11
|
const TEMPLATES_DIR = path.join(__dirname, '../../templates');
|
|
13
|
-
/** Locate the `code` binary — checks PATH then known macOS app bundle locations. */
|
|
14
|
-
function findCodeCli() {
|
|
15
|
-
try {
|
|
16
|
-
execSync('code --version', { stdio: 'ignore' });
|
|
17
|
-
return 'code';
|
|
18
|
-
}
|
|
19
|
-
catch {
|
|
20
|
-
/* not in PATH */
|
|
21
|
-
}
|
|
22
|
-
const candidates = process.platform === 'win32'
|
|
23
|
-
? [
|
|
24
|
-
path.join(process.env['LOCALAPPDATA'] ?? '', 'Programs\\Microsoft VS Code\\bin\\code.cmd'),
|
|
25
|
-
path.join(process.env['ProgramFiles'] ?? '', 'Microsoft VS Code\\bin\\code.cmd'),
|
|
26
|
-
path.join(process.env['ProgramFiles(x86)'] ?? '', 'Microsoft VS Code\\bin\\code.cmd'),
|
|
27
|
-
]
|
|
28
|
-
: [
|
|
29
|
-
'/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code',
|
|
30
|
-
path.join(os.homedir(), 'Applications/Visual Studio Code.app/Contents/Resources/app/bin/code'),
|
|
31
|
-
];
|
|
32
|
-
for (const p of candidates) {
|
|
33
|
-
if (fs.existsSync(p))
|
|
34
|
-
return `"${p}"`;
|
|
35
|
-
}
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
async function installVsixExtension() {
|
|
39
|
-
if (process.env['UGLY_BOT_LOCAL'])
|
|
40
|
-
return; // Skip in local mode
|
|
41
|
-
const codeCli = findCodeCli();
|
|
42
|
-
if (!codeCli)
|
|
43
|
-
return; // VSCode not found — skip silently
|
|
44
|
-
const url = 'https://ugly.bot/asset/ugly-bot.vsix';
|
|
45
|
-
const vsixPath = path.join(os.tmpdir(), 'ugly-bot.vsix');
|
|
46
|
-
try {
|
|
47
|
-
console.log('[ugly-app] Installing ugly-bot VSCode extension...');
|
|
48
|
-
const res = await fetch(url);
|
|
49
|
-
if (!res.ok)
|
|
50
|
-
throw new Error(`HTTP ${res.status}`);
|
|
51
|
-
const buf = await res.arrayBuffer();
|
|
52
|
-
await fs.writeFile(vsixPath, Buffer.from(buf));
|
|
53
|
-
execSync(`${codeCli} --install-extension "${vsixPath}"`, {
|
|
54
|
-
stdio: 'inherit',
|
|
55
|
-
});
|
|
56
|
-
console.log('[ugly-app] VSCode extension installed.');
|
|
57
|
-
}
|
|
58
|
-
catch (err) {
|
|
59
|
-
console.warn(`[ugly-app] Could not install VSCode extension (skipping): ${err.message}`);
|
|
60
|
-
}
|
|
61
|
-
finally {
|
|
62
|
-
await fs.remove(vsixPath).catch(() => { });
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
12
|
export async function scaffoldProject(projectName) {
|
|
66
13
|
const destDir = path.resolve(process.cwd(), projectName);
|
|
67
14
|
if (await fs.pathExists(destDir)) {
|
|
@@ -110,7 +57,6 @@ export async function scaffoldProject(projectName) {
|
|
|
110
57
|
stdio: 'inherit',
|
|
111
58
|
});
|
|
112
59
|
console.log('Edit .uglyapp to change localPort if running multiple projects simultaneously.');
|
|
113
|
-
await installVsixExtension();
|
|
114
60
|
console.log(`
|
|
115
61
|
[ugly-app] Done! Next steps:
|
|
116
62
|
cd ${projectName}
|
package/dist/cli/scaffold.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,
|
|
1
|
+
{"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/cli/scaffold.ts"],"names":[],"mappings":"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"}
|
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.328";
|
|
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":"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"}
|
|
@@ -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');
|