@weconjs/core 1.2.6 → 1.2.12
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/config.d.ts +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -2
- package/dist/config.js.map +1 -1
- package/dist/database/index.d.ts +0 -11
- package/dist/database/index.d.ts.map +1 -1
- package/dist/database/index.js +0 -17
- package/dist/database/index.js.map +1 -1
- package/dist/devtools/controllers/i18n.controller.d.ts +1 -1
- package/dist/devtools/controllers/i18n.controller.d.ts.map +1 -1
- package/dist/devtools/controllers/i18n.controller.js +19 -10
- package/dist/devtools/controllers/i18n.controller.js.map +1 -1
- package/dist/devtools/index.d.ts.map +1 -1
- package/dist/devtools/index.js +2 -0
- package/dist/devtools/index.js.map +1 -1
- package/dist/i18n/index.d.ts +13 -30
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +15 -91
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/loader.d.ts +58 -0
- package/dist/i18n/loader.d.ts.map +1 -0
- package/dist/i18n/loader.js +97 -0
- package/dist/i18n/loader.js.map +1 -0
- package/dist/i18n/middleware.d.ts +39 -0
- package/dist/i18n/middleware.d.ts.map +1 -0
- package/dist/i18n/middleware.js +75 -0
- package/dist/i18n/middleware.js.map +1 -0
- package/dist/i18n/utils.d.ts +31 -0
- package/dist/i18n/utils.d.ts.map +1 -0
- package/dist/i18n/utils.js +46 -0
- package/dist/i18n/utils.js.map +1 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -2
- package/dist/index.js.map +1 -1
- package/dist/module.d.ts +10 -0
- package/dist/module.d.ts.map +1 -1
- package/dist/module.js +25 -0
- package/dist/module.js.map +1 -1
- package/dist/server/banner.d.ts +1 -0
- package/dist/server/banner.d.ts.map +1 -1
- package/dist/server/banner.js +17 -8
- package/dist/server/banner.js.map +1 -1
- package/dist/server/index.d.ts +7 -15
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +16 -21
- package/dist/server/index.js.map +1 -1
- package/dist/types/express.d.ts +30 -0
- package/dist/types/express.d.ts.map +1 -0
- package/dist/types/express.js +2 -0
- package/dist/types/express.js.map +1 -0
- package/dist/types/i18next.d.ts +7 -0
- package/dist/types/i18next.d.ts.map +1 -0
- package/dist/types/i18next.js +2 -0
- package/dist/types/i18next.js.map +1 -0
- package/dist/types.d.ts +5 -5
- package/dist/types.d.ts.map +1 -1
- package/package.json +4 -6
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAgC9D;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,WAAW,GAAG,WAAW,CAsB7D;AAmCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,cAAc,CAiChB;AAED;;;;;GAKG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,cAAc,CAAC,CAYzB"}
|
package/dist/config.js
CHANGED
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
* modules: ['./modules/auth', './modules/users'],
|
|
18
18
|
* features: {
|
|
19
19
|
* socket: { enabled: true },
|
|
20
|
-
* fieldShield: { enabled: true, strict: true },
|
|
21
20
|
* },
|
|
22
21
|
* });
|
|
23
22
|
* ```
|
|
@@ -45,7 +44,6 @@ const DEFAULT_CONFIG = {
|
|
|
45
44
|
enabled: false,
|
|
46
45
|
},
|
|
47
46
|
features: {
|
|
48
|
-
fieldShield: { enabled: false, strict: false },
|
|
49
47
|
i18n: { enabled: true, defaultLocale: "en" },
|
|
50
48
|
swagger: { enabled: false },
|
|
51
49
|
socket: { enabled: false },
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/database/index.d.ts
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Manages MongoDB/Mongoose database connections with:
|
|
5
5
|
* - URI builder from config parts
|
|
6
6
|
* - Global plugin registration
|
|
7
|
-
* - FieldShield integration (optional)
|
|
8
7
|
* - Retry logic with exponential backoff
|
|
9
8
|
*
|
|
10
9
|
* @example
|
|
@@ -23,7 +22,6 @@
|
|
|
23
22
|
* const db = await createDatabaseConnection({
|
|
24
23
|
* uri,
|
|
25
24
|
* plugins: [myPlugin],
|
|
26
|
-
* fieldShield: { enabled: true, strict: true },
|
|
27
25
|
* });
|
|
28
26
|
*
|
|
29
27
|
* await db.connect();
|
|
@@ -72,15 +70,6 @@ export interface DatabaseOptions {
|
|
|
72
70
|
plugin: (schema: unknown, options?: unknown) => void;
|
|
73
71
|
options?: unknown;
|
|
74
72
|
}>;
|
|
75
|
-
/**
|
|
76
|
-
* FieldShield integration options
|
|
77
|
-
* If enabled, installs FieldShield before connecting
|
|
78
|
-
*/
|
|
79
|
-
fieldShield?: {
|
|
80
|
-
enabled: boolean;
|
|
81
|
-
strict?: boolean;
|
|
82
|
-
debug?: boolean;
|
|
83
|
-
};
|
|
84
73
|
/**
|
|
85
74
|
* Enable debug logging for Mongoose
|
|
86
75
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC;IAEvB;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAElC;;OAEG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,MAAM,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;QACrD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IAEH;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;OAEG;IACH,KAAK,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC;;OAEG;IACH,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE7B;;OAEG;IACH,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhC;;OAEG;IACH,WAAW,EAAE,MAAM,OAAO,CAAC;IAE3B;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CA4B1D;AASD;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,eAAe,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAqF7B;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAYjE"}
|
package/dist/database/index.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* Manages MongoDB/Mongoose database connections with:
|
|
5
5
|
* - URI builder from config parts
|
|
6
6
|
* - Global plugin registration
|
|
7
|
-
* - FieldShield integration (optional)
|
|
8
7
|
* - Retry logic with exponential backoff
|
|
9
8
|
*
|
|
10
9
|
* @example
|
|
@@ -23,7 +22,6 @@
|
|
|
23
22
|
* const db = await createDatabaseConnection({
|
|
24
23
|
* uri,
|
|
25
24
|
* plugins: [myPlugin],
|
|
26
|
-
* fieldShield: { enabled: true, strict: true },
|
|
27
25
|
* });
|
|
28
26
|
*
|
|
29
27
|
* await db.connect();
|
|
@@ -92,21 +90,6 @@ export async function createDatabaseConnection(options) {
|
|
|
92
90
|
// Dynamic import mongoose
|
|
93
91
|
const mongoose = await import("mongoose");
|
|
94
92
|
mongooseInstance = mongoose;
|
|
95
|
-
// Install FieldShield if enabled
|
|
96
|
-
if (options.fieldShield?.enabled) {
|
|
97
|
-
try {
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
99
|
-
const fieldShieldModule = await import("@weconjs/mongoose-field-shield");
|
|
100
|
-
fieldShieldModule.installFieldShield(mongoose.default, {
|
|
101
|
-
strict: options.fieldShield.strict ?? true,
|
|
102
|
-
debug: options.fieldShield.debug ?? false,
|
|
103
|
-
});
|
|
104
|
-
// Silently installed - shown in startup banner
|
|
105
|
-
}
|
|
106
|
-
catch {
|
|
107
|
-
console.warn("[Wecon] @weconjs/mongoose-field-shield not installed. Skipping FieldShield setup.");
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
93
|
// Register global plugins
|
|
111
94
|
if (options.plugins?.length) {
|
|
112
95
|
for (const { plugin, options: pluginOpts } of options.plugins) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/database/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import type { DevToolsContext } from "../types.js";
|
|
|
8
8
|
/**
|
|
9
9
|
* GET /i18n - List all namespaces with languages and key counts
|
|
10
10
|
*/
|
|
11
|
-
export declare function listNamespaces(dtCtx: DevToolsContext, modulesDir: string): (_req: Request, res: Response) =>
|
|
11
|
+
export declare function listNamespaces(dtCtx: DevToolsContext, modulesDir: string): (_req: Request, res: Response) => void;
|
|
12
12
|
/**
|
|
13
13
|
* GET /i18n/:namespace/:lang - Get translations for namespace + language
|
|
14
14
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.controller.d.ts","sourceRoot":"","sources":["../../../src/devtools/controllers/i18n.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"i18n.controller.d.ts","sourceRoot":"","sources":["../../../src/devtools/controllers/i18n.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGnD;;GAEG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,IAC/D,MAAM,OAAO,EAAE,KAAK,QAAQ,KAAG,IAAI,CAgC5C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,IAChE,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,IAAI,CA0B3C;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,IACnE,KAAK,OAAO,EAAE,KAAK,QAAQ,KAAG,IAAI,CAwB3C"}
|
|
@@ -5,23 +5,32 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { existsSync, readFileSync, writeFileSync, mkdirSync } from "fs";
|
|
7
7
|
import { join, dirname } from "path";
|
|
8
|
-
import {
|
|
8
|
+
import { I18nLoader } from "../../i18n/index.js";
|
|
9
9
|
/**
|
|
10
10
|
* GET /i18n - List all namespaces with languages and key counts
|
|
11
11
|
*/
|
|
12
12
|
export function listNamespaces(dtCtx, modulesDir) {
|
|
13
|
-
return
|
|
13
|
+
return (_req, res) => {
|
|
14
14
|
try {
|
|
15
|
-
const
|
|
16
|
-
const
|
|
15
|
+
const loader = new I18nLoader(modulesDir);
|
|
16
|
+
const resources = loader.loadAll();
|
|
17
|
+
// Convert from { lang: { ns: translations } } to namespace-centric view
|
|
18
|
+
const nsMap = {};
|
|
19
|
+
for (const [lang, namespaces] of Object.entries(resources)) {
|
|
20
|
+
for (const [ns, translations] of Object.entries(namespaces)) {
|
|
21
|
+
if (!nsMap[ns]) {
|
|
22
|
+
nsMap[ns] = { languages: [], keyCounts: {} };
|
|
23
|
+
}
|
|
24
|
+
nsMap[ns].languages.push(lang);
|
|
25
|
+
nsMap[ns].keyCounts[lang] = Object.keys(translations).length;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const data = Object.entries(nsMap).map(([namespace, info]) => ({
|
|
17
29
|
namespace,
|
|
18
|
-
languages:
|
|
19
|
-
keyCounts:
|
|
20
|
-
lang,
|
|
21
|
-
Object.keys(translations).length,
|
|
22
|
-
])),
|
|
30
|
+
languages: info.languages,
|
|
31
|
+
keyCounts: info.keyCounts,
|
|
23
32
|
}));
|
|
24
|
-
res.json({ success: true, data
|
|
33
|
+
res.json({ success: true, data });
|
|
25
34
|
}
|
|
26
35
|
catch (err) {
|
|
27
36
|
res.status(500).json({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"i18n.controller.js","sourceRoot":"","sources":["../../../src/devtools/controllers/i18n.controller.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"i18n.controller.js","sourceRoot":"","sources":["../../../src/devtools/controllers/i18n.controller.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAOnE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAoBlD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,GAAE,eAAoB,EAC7B,KAAK,CAAC,EAAE,KAAK,GACZ,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,SAAS,CAAC;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,qBAAqB,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAC;AAOnE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAoBlD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,WAAW,EAAE,EACtB,OAAO,GAAE,eAAoB,EAC7B,KAAK,CAAC,EAAE,KAAK,GACZ,MAAM,GAAG,IAAI,CAuDf"}
|
package/dist/devtools/index.js
CHANGED
|
@@ -60,6 +60,8 @@ export function createDevToolsRouter(ctx, modules, options = {}, wecon) {
|
|
|
60
60
|
const router = express.Router();
|
|
61
61
|
const dtCtx = { ctx, modules };
|
|
62
62
|
const modulesDir = options.modulesDir ?? "./src/modules";
|
|
63
|
+
// Parse JSON bodies for PUT/POST endpoints
|
|
64
|
+
router.use(express.json());
|
|
63
65
|
// Optional bearer token auth
|
|
64
66
|
if (options.auth?.token) {
|
|
65
67
|
router.use(createDevToolsAuth(options.auth.token));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/devtools/index.ts"],"names":[],"mappings":"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"}
|
package/dist/i18n/index.d.ts
CHANGED
|
@@ -1,37 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @weconjs/core - i18n
|
|
2
|
+
* @weconjs/core - i18n Module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* i18n resource structure
|
|
8
|
-
*/
|
|
9
|
-
export interface I18nResources {
|
|
10
|
-
[namespace: string]: {
|
|
11
|
-
[language: string]: Record<string, any>;
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Load translations from all module i18n directories
|
|
4
|
+
* Module-based translation system built on i18next.
|
|
5
|
+
* Auto-discovers translations from module i18n/ directories.
|
|
16
6
|
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
7
|
+
* Usage in controllers:
|
|
8
|
+
* req.t("auth:login.success") // auth module namespace
|
|
9
|
+
* req.t("users:notFound") // users module namespace
|
|
10
|
+
* req.t("core:errors.NOT_FOUND") // core namespace (always available)
|
|
19
11
|
*/
|
|
20
|
-
export
|
|
12
|
+
export { I18nLoader } from "./loader.js";
|
|
13
|
+
export type { I18nResources } from "./loader.js";
|
|
14
|
+
export { initializeI18n, i18nNamespaceMiddleware, getI18n, i18next, } from "./middleware.js";
|
|
15
|
+
export { translate, getCurrentLanguage, changeLanguage } from "./utils.js";
|
|
21
16
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* @param resources - Loaded translation resources
|
|
25
|
-
* @param defaultLanguage - Default language code
|
|
26
|
-
* @returns Express middleware function
|
|
27
|
-
*/
|
|
28
|
-
export declare function createI18nMiddleware(resources: I18nResources, defaultLanguage?: string): (req: any, res: any, next: any) => void;
|
|
29
|
-
/**
|
|
30
|
-
* Initialize i18n for a Wecon application
|
|
31
|
-
*
|
|
32
|
-
* @param modulesDir - Path to modules directory
|
|
33
|
-
* @param defaultLanguage - Default language
|
|
34
|
-
* @returns Express middleware
|
|
17
|
+
* Backward-compatible alias for `initializeI18n`
|
|
35
18
|
*/
|
|
36
|
-
export
|
|
19
|
+
export { initializeI18n as initI18n } from "./middleware.js";
|
|
37
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/i18n/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,OAAO,EACP,OAAO,GACR,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
package/dist/i18n/index.js
CHANGED
|
@@ -1,98 +1,22 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @weconjs/core - i18n
|
|
2
|
+
* @weconjs/core - i18n Module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
|
|
6
|
-
import { glob } from "glob";
|
|
7
|
-
import { basename, dirname } from "path";
|
|
8
|
-
import { readFileSync } from "fs";
|
|
9
|
-
/**
|
|
10
|
-
* Load translations from all module i18n directories
|
|
11
|
-
*
|
|
12
|
-
* @param modulesDir - Path to the modules directory
|
|
13
|
-
* @returns Loaded translation resources
|
|
14
|
-
*/
|
|
15
|
-
export async function loadI18nResources(modulesDir) {
|
|
16
|
-
const resources = {};
|
|
17
|
-
try {
|
|
18
|
-
// Find all translation files
|
|
19
|
-
const files = await glob("**/i18n/*.translation.json", {
|
|
20
|
-
cwd: modulesDir,
|
|
21
|
-
absolute: true,
|
|
22
|
-
});
|
|
23
|
-
for (const file of files) {
|
|
24
|
-
try {
|
|
25
|
-
// Extract module name and language
|
|
26
|
-
// e.g., auth/i18n/en.translation.json -> namespace: auth, lang: en
|
|
27
|
-
const fileName = basename(file); // en.translation.json
|
|
28
|
-
const language = fileName.replace(".translation.json", "");
|
|
29
|
-
const moduleDir = dirname(dirname(file)); // auth/
|
|
30
|
-
const namespace = basename(moduleDir);
|
|
31
|
-
// Load translation file
|
|
32
|
-
const content = readFileSync(file, "utf-8");
|
|
33
|
-
const translations = JSON.parse(content);
|
|
34
|
-
// Add to resources
|
|
35
|
-
if (!resources[namespace]) {
|
|
36
|
-
resources[namespace] = {};
|
|
37
|
-
}
|
|
38
|
-
resources[namespace][language] = translations;
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
console.warn(`[Wecon] Failed to load translation file ${file}:`, err);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
46
|
-
console.warn("[Wecon] Failed to discover translation files:", err);
|
|
47
|
-
}
|
|
48
|
-
return resources;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Create i18n middleware for Express
|
|
4
|
+
* Module-based translation system built on i18next.
|
|
5
|
+
* Auto-discovers translations from module i18n/ directories.
|
|
52
6
|
*
|
|
53
|
-
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
7
|
+
* Usage in controllers:
|
|
8
|
+
* req.t("auth:login.success") // auth module namespace
|
|
9
|
+
* req.t("users:notFound") // users module namespace
|
|
10
|
+
* req.t("core:errors.NOT_FOUND") // core namespace (always available)
|
|
56
11
|
*/
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
// Add translation function to request
|
|
64
|
-
req.t = (key, options) => {
|
|
65
|
-
const [namespace, ...keyParts] = key.split(".");
|
|
66
|
-
const actualKey = keyParts.join(".");
|
|
67
|
-
const translations = resources[namespace]?.[lang] || resources[namespace]?.[defaultLanguage];
|
|
68
|
-
if (!translations) {
|
|
69
|
-
return key; // Return key if no translations found
|
|
70
|
-
}
|
|
71
|
-
let value = translations;
|
|
72
|
-
for (const part of actualKey.split(".")) {
|
|
73
|
-
value = value?.[part];
|
|
74
|
-
}
|
|
75
|
-
if (typeof value !== "string") {
|
|
76
|
-
return key;
|
|
77
|
-
}
|
|
78
|
-
// Simple interpolation
|
|
79
|
-
if (options) {
|
|
80
|
-
return value.replace(/\{\{(\w+)\}\}/g, (_, k) => String(options[k] ?? `{{${k}}}`));
|
|
81
|
-
}
|
|
82
|
-
return value;
|
|
83
|
-
};
|
|
84
|
-
next();
|
|
85
|
-
};
|
|
86
|
-
}
|
|
12
|
+
// Loader
|
|
13
|
+
export { I18nLoader } from "./loader.js";
|
|
14
|
+
// Middleware
|
|
15
|
+
export { initializeI18n, i18nNamespaceMiddleware, getI18n, i18next, } from "./middleware.js";
|
|
16
|
+
// Utilities
|
|
17
|
+
export { translate, getCurrentLanguage, changeLanguage } from "./utils.js";
|
|
87
18
|
/**
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
* @param modulesDir - Path to modules directory
|
|
91
|
-
* @param defaultLanguage - Default language
|
|
92
|
-
* @returns Express middleware
|
|
19
|
+
* Backward-compatible alias for `initializeI18n`
|
|
93
20
|
*/
|
|
94
|
-
export
|
|
95
|
-
const resources = await loadI18nResources(modulesDir);
|
|
96
|
-
return createI18nMiddleware(resources, defaultLanguage);
|
|
97
|
-
}
|
|
21
|
+
export { initializeI18n as initI18n } from "./middleware.js";
|
|
98
22
|
//# sourceMappingURL=index.js.map
|
package/dist/i18n/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/i18n/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,aAAa;AACb,OAAO,EACL,cAAc,EACd,uBAAuB,EACvB,OAAO,EACP,OAAO,GACR,MAAM,iBAAiB,CAAC;AAEzB,YAAY;AACZ,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE3E;;GAEG;AACH,OAAO,EAAE,cAAc,IAAI,QAAQ,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @weconjs/core - i18n Resource Loader
|
|
3
|
+
*
|
|
4
|
+
* Discovers and loads translation files from module i18n/ directories.
|
|
5
|
+
* Output format matches i18next: { [lang]: { [namespace]: translations } }
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* i18n resource structure (i18next-compatible)
|
|
9
|
+
*
|
|
10
|
+
* Format: `{ [language]: { [namespace]: Record<string, unknown> } }`
|
|
11
|
+
*/
|
|
12
|
+
export interface I18nResources {
|
|
13
|
+
[language: string]: {
|
|
14
|
+
[namespace: string]: Record<string, unknown>;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* i18n Resource Loader
|
|
19
|
+
*
|
|
20
|
+
* Scans module directories for `i18n/*.translation.json` files
|
|
21
|
+
* and builds a resource map keyed by language and namespace.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* const loader = new I18nLoader("./src/modules");
|
|
26
|
+
* const resources = loader.loadAll();
|
|
27
|
+
* // { en: { auth: { ... }, users: { ... } }, fr: { auth: { ... } } }
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare class I18nLoader {
|
|
31
|
+
private resources;
|
|
32
|
+
private modulesDir;
|
|
33
|
+
constructor(modulesDir: string);
|
|
34
|
+
/**
|
|
35
|
+
* Load translations from a specific directory into a namespace
|
|
36
|
+
*/
|
|
37
|
+
private loadTranslationsFromDir;
|
|
38
|
+
/**
|
|
39
|
+
* Load all translations from the modules directory
|
|
40
|
+
*
|
|
41
|
+
* Discovers module directories and scans each for an `i18n/` subdirectory
|
|
42
|
+
* containing `*.translation.json` files.
|
|
43
|
+
*/
|
|
44
|
+
loadAll(): I18nResources;
|
|
45
|
+
/**
|
|
46
|
+
* Get the loaded resources
|
|
47
|
+
*/
|
|
48
|
+
getResources(): I18nResources;
|
|
49
|
+
/**
|
|
50
|
+
* Get all supported languages discovered from translation files
|
|
51
|
+
*/
|
|
52
|
+
getSupportedLanguages(): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Get all namespaces discovered from module directories
|
|
55
|
+
*/
|
|
56
|
+
getNamespaces(): string[];
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/i18n/loader.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,QAAQ,EAAE,MAAM,GAAG;QAClB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC9C,CAAC;CACH;AAED;;;;;;;;;;;;GAYG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,SAAS,CAAqB;IACtC,OAAO,CAAC,UAAU,CAAS;gBAEf,UAAU,EAAE,MAAM;IAI9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA4B/B;;;;;OAKG;IACH,OAAO,IAAI,aAAa;IAqBxB;;OAEG;IACH,YAAY,IAAI,aAAa;IAI7B;;OAEG;IACH,qBAAqB,IAAI,MAAM,EAAE;IAIjC;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;CAS1B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @weconjs/core - i18n Resource Loader
|
|
3
|
+
*
|
|
4
|
+
* Discovers and loads translation files from module i18n/ directories.
|
|
5
|
+
* Output format matches i18next: { [lang]: { [namespace]: translations } }
|
|
6
|
+
*/
|
|
7
|
+
import { readdirSync, readFileSync, existsSync } from "fs";
|
|
8
|
+
import { join } from "path";
|
|
9
|
+
/**
|
|
10
|
+
* i18n Resource Loader
|
|
11
|
+
*
|
|
12
|
+
* Scans module directories for `i18n/*.translation.json` files
|
|
13
|
+
* and builds a resource map keyed by language and namespace.
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const loader = new I18nLoader("./src/modules");
|
|
18
|
+
* const resources = loader.loadAll();
|
|
19
|
+
* // { en: { auth: { ... }, users: { ... } }, fr: { auth: { ... } } }
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export class I18nLoader {
|
|
23
|
+
resources = {};
|
|
24
|
+
modulesDir;
|
|
25
|
+
constructor(modulesDir) {
|
|
26
|
+
this.modulesDir = modulesDir;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Load translations from a specific directory into a namespace
|
|
30
|
+
*/
|
|
31
|
+
loadTranslationsFromDir(dir, namespace) {
|
|
32
|
+
if (!existsSync(dir))
|
|
33
|
+
return;
|
|
34
|
+
const files = readdirSync(dir).filter((f) => f.endsWith(".translation.json"));
|
|
35
|
+
for (const file of files) {
|
|
36
|
+
const lang = file.split(".")[0];
|
|
37
|
+
const filePath = join(dir, file);
|
|
38
|
+
try {
|
|
39
|
+
const content = JSON.parse(readFileSync(filePath, "utf-8"));
|
|
40
|
+
if (!this.resources[lang]) {
|
|
41
|
+
this.resources[lang] = {};
|
|
42
|
+
}
|
|
43
|
+
this.resources[lang][namespace] = content;
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
console.warn(`[Wecon] Failed to load translation file ${filePath}:`, err);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Load all translations from the modules directory
|
|
52
|
+
*
|
|
53
|
+
* Discovers module directories and scans each for an `i18n/` subdirectory
|
|
54
|
+
* containing `*.translation.json` files.
|
|
55
|
+
*/
|
|
56
|
+
loadAll() {
|
|
57
|
+
this.resources = {};
|
|
58
|
+
if (!existsSync(this.modulesDir)) {
|
|
59
|
+
console.warn(`[Wecon] Modules directory not found: ${this.modulesDir}`);
|
|
60
|
+
return this.resources;
|
|
61
|
+
}
|
|
62
|
+
// Scan each subdirectory in modulesDir for i18n/ folders
|
|
63
|
+
const entries = readdirSync(this.modulesDir, { withFileTypes: true });
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
if (!entry.isDirectory())
|
|
66
|
+
continue;
|
|
67
|
+
const i18nDir = join(this.modulesDir, entry.name, "i18n");
|
|
68
|
+
this.loadTranslationsFromDir(i18nDir, entry.name);
|
|
69
|
+
}
|
|
70
|
+
return this.resources;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the loaded resources
|
|
74
|
+
*/
|
|
75
|
+
getResources() {
|
|
76
|
+
return this.resources;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get all supported languages discovered from translation files
|
|
80
|
+
*/
|
|
81
|
+
getSupportedLanguages() {
|
|
82
|
+
return Object.keys(this.resources);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Get all namespaces discovered from module directories
|
|
86
|
+
*/
|
|
87
|
+
getNamespaces() {
|
|
88
|
+
const ns = new Set();
|
|
89
|
+
for (const lang of Object.keys(this.resources)) {
|
|
90
|
+
for (const namespace of Object.keys(this.resources[lang])) {
|
|
91
|
+
ns.add(namespace);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
return Array.from(ns);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/i18n/loader.ts"],"names":[],"mappings":"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"}
|