@goatlab/node-backend 0.2.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -14
- package/dist/container/Container.d.ts +113 -25
- package/dist/container/Container.js +391 -168
- package/dist/container/Container.js.map +1 -1
- package/dist/container/examples/batch-operations.example.d.ts +1 -0
- package/dist/container/examples/batch-operations.example.js +165 -0
- package/dist/container/examples/batch-operations.example.js.map +1 -0
- package/dist/container/helpers.d.ts +8 -0
- package/dist/container/helpers.js +22 -0
- package/dist/container/helpers.js.map +1 -1
- package/dist/container/types.d.ts +60 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js.map +1 -1
- package/dist/server/bootstraps/getExpressTrpcApp.d.ts +5 -1
- package/dist/server/bootstraps/getExpressTrpcApp.js +216 -12
- package/dist/server/bootstraps/getExpressTrpcApp.js.map +1 -1
- package/dist/server/middleware/memoryMonitor.example.d.ts +1 -0
- package/dist/server/middleware/memoryMonitor.example.js +109 -0
- package/dist/server/middleware/memoryMonitor.example.js.map +1 -0
- package/dist/server/middleware/memoryMonitor.middleware.d.ts +42 -0
- package/dist/server/middleware/memoryMonitor.middleware.js +134 -0
- package/dist/server/middleware/memoryMonitor.middleware.js.map +1 -0
- package/dist/server/middleware/productionError.middleware.d.ts +16 -0
- package/dist/server/middleware/productionError.middleware.js +94 -0
- package/dist/server/middleware/productionError.middleware.js.map +1 -0
- package/dist/server/middleware/security.middleware.d.ts +28 -0
- package/dist/server/middleware/security.middleware.js +151 -0
- package/dist/server/middleware/security.middleware.js.map +1 -0
- package/dist/server/services/secrets/examples/container-preload.example.d.ts +1 -0
- package/dist/server/services/secrets/examples/container-preload.example.js +148 -0
- package/dist/server/services/secrets/examples/container-preload.example.js.map +1 -0
- package/dist/server/services/secrets/index.d.ts +1 -0
- package/dist/server/services/secrets/index.js +6 -0
- package/dist/server/services/secrets/index.js.map +1 -0
- package/dist/server/services/secrets/secret.service.d.ts +48 -6
- package/dist/server/services/secrets/secret.service.js +280 -28
- package/dist/server/services/secrets/secret.service.js.map +1 -1
- package/dist/server/services/translations/translation.model.js +2 -1
- package/dist/server/services/translations/translation.model.js.map +1 -1
- package/dist/server/services/translations/translation.service.d.ts +8 -1
- package/dist/server/services/translations/translation.service.js +123 -13
- package/dist/server/services/translations/translation.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -1
|
@@ -4,14 +4,84 @@ exports.translationService = void 0;
|
|
|
4
4
|
exports.tr = tr;
|
|
5
5
|
exports.trIfExists = trIfExists;
|
|
6
6
|
const pupa_1 = require("@goatlab/js-utils/dist/Strings/pupa");
|
|
7
|
+
const pupa_2 = require("@goatlab/js-utils/dist/Strings/pupa");
|
|
8
|
+
const node_fs_1 = require("node:fs");
|
|
9
|
+
const node_path_1 = require("node:path");
|
|
7
10
|
const consts_1 = require("../../consts");
|
|
8
|
-
|
|
11
|
+
// import { templateUtil } from './template.util' // No longer needed with direct pupa usage
|
|
9
12
|
const translation_model_1 = require("./translation.model");
|
|
13
|
+
// Cache for compiled templates - key format: "lang:key"
|
|
14
|
+
const templateCache = new Map();
|
|
15
|
+
// Cache for loaded locale files
|
|
16
|
+
const localeCache = new Map();
|
|
17
|
+
// Precompile template function
|
|
18
|
+
function compileTemplate(template) {
|
|
19
|
+
// Pre-parse the template to identify placeholders
|
|
20
|
+
const doubleBraceRegex = /{{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}}/gi;
|
|
21
|
+
const braceRegex = /{(\d+|[a-z$_][\w\-$]*?(?:\.[\w\-$]*?)*?)}/gi;
|
|
22
|
+
const hasDoubleBraces = doubleBraceRegex.test(template);
|
|
23
|
+
const hasSingleBraces = braceRegex.test(template);
|
|
24
|
+
// If no placeholders, return a function that returns the template as-is
|
|
25
|
+
if (!hasDoubleBraces && !hasSingleBraces) {
|
|
26
|
+
return () => template;
|
|
27
|
+
}
|
|
28
|
+
// Return optimized template function
|
|
29
|
+
return (args) => {
|
|
30
|
+
if (!args || Object.keys(args).length === 0) {
|
|
31
|
+
return template;
|
|
32
|
+
}
|
|
33
|
+
return (0, pupa_2.pupa)(template, args);
|
|
34
|
+
};
|
|
35
|
+
}
|
|
10
36
|
class TranslationService {
|
|
11
|
-
|
|
37
|
+
initialized = false;
|
|
38
|
+
// Initialize service by preloading all locale files
|
|
39
|
+
initialize() {
|
|
40
|
+
if (this.initialized)
|
|
41
|
+
return;
|
|
42
|
+
// Preload all supported language files
|
|
43
|
+
if (translation_model_1.SUPPORTED_LANGUAGES && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
|
|
44
|
+
for (const lang of translation_model_1.SUPPORTED_LANGUAGES) {
|
|
45
|
+
this.loadLocaleSync(lang);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
this.initialized = true;
|
|
49
|
+
}
|
|
50
|
+
// Load locale file synchronously (used during initialization)
|
|
51
|
+
loadLocaleSync(lang) {
|
|
52
|
+
if (localeCache.has(lang)) {
|
|
53
|
+
return localeCache.get(lang);
|
|
54
|
+
}
|
|
55
|
+
try {
|
|
56
|
+
const filePath = (0, node_path_1.join)(consts_1.config.langDir, `${lang}.json`);
|
|
57
|
+
const content = (0, node_fs_1.readFileSync)(filePath, 'utf-8');
|
|
58
|
+
const locale = JSON.parse(content);
|
|
59
|
+
localeCache.set(lang, locale);
|
|
60
|
+
return locale;
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
console.warn(`Failed to load locale: ${lang}`);
|
|
64
|
+
return undefined;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Get locale from cache (backward compatible)
|
|
12
68
|
getLocale(lang) {
|
|
69
|
+
if (!lang)
|
|
70
|
+
return undefined;
|
|
71
|
+
// Ensure initialization
|
|
72
|
+
if (!this.initialized) {
|
|
73
|
+
this.initialize();
|
|
74
|
+
}
|
|
75
|
+
const cached = localeCache.get(lang);
|
|
76
|
+
if (cached) {
|
|
77
|
+
// Return a copy to maintain backward compatibility
|
|
78
|
+
return { ...cached };
|
|
79
|
+
}
|
|
80
|
+
// Try to load dynamically if not in cache (backward compatibility)
|
|
13
81
|
try {
|
|
14
|
-
|
|
82
|
+
const locale = { ...require(`${consts_1.config.langDir}/${lang}.json`) };
|
|
83
|
+
localeCache.set(lang, locale);
|
|
84
|
+
return locale;
|
|
15
85
|
}
|
|
16
86
|
catch {
|
|
17
87
|
console.warn(`Unsupported lang ${lang}`);
|
|
@@ -19,10 +89,21 @@ class TranslationService {
|
|
|
19
89
|
}
|
|
20
90
|
}
|
|
21
91
|
getLocaleMap() {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
92
|
+
// Ensure initialization
|
|
93
|
+
if (!this.initialized) {
|
|
94
|
+
this.initialize();
|
|
95
|
+
}
|
|
96
|
+
const map = {};
|
|
97
|
+
// Use cached locales if available
|
|
98
|
+
if (translation_model_1.SUPPORTED_LANGUAGES && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
|
|
99
|
+
for (const lang of translation_model_1.SUPPORTED_LANGUAGES) {
|
|
100
|
+
const locale = localeCache.get(lang) || this.getLocale(lang);
|
|
101
|
+
if (locale) {
|
|
102
|
+
map[lang] = locale;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return map;
|
|
26
107
|
}
|
|
27
108
|
missingKey(key) {
|
|
28
109
|
return `[${key}]`;
|
|
@@ -41,9 +122,14 @@ class TranslationService {
|
|
|
41
122
|
* Implementation based on static ./src/lang/*.json files
|
|
42
123
|
*/
|
|
43
124
|
translateIfExists(key, user, args = {}) {
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
125
|
+
// Ensure initialization
|
|
126
|
+
if (!this.initialized) {
|
|
127
|
+
this.initialize();
|
|
128
|
+
}
|
|
129
|
+
// Get locale from cache directly for better performance
|
|
130
|
+
const locale = user.language ? localeCache.get(user.language) : undefined;
|
|
131
|
+
const fallbackLocale = localeCache.get(translation_model_1.LANG_DEFAULT) || this.getLocale(translation_model_1.LANG_DEFAULT);
|
|
132
|
+
const value = (locale && locale[key]) ?? (fallbackLocale && fallbackLocale[key]);
|
|
47
133
|
return value && this.formatResult(key, value, args);
|
|
48
134
|
}
|
|
49
135
|
formatResult(key, text, args = {}) {
|
|
@@ -51,15 +137,23 @@ class TranslationService {
|
|
|
51
137
|
return `** ${key} **`;
|
|
52
138
|
}
|
|
53
139
|
if (Object.keys(args).length) {
|
|
140
|
+
// Check template cache first
|
|
141
|
+
const cacheKey = `${key}:${text}`;
|
|
142
|
+
let compiledTemplate = templateCache.get(cacheKey);
|
|
143
|
+
if (!compiledTemplate) {
|
|
144
|
+
// Compile and cache the template
|
|
145
|
+
compiledTemplate = compileTemplate(text);
|
|
146
|
+
templateCache.set(cacheKey, compiledTemplate);
|
|
147
|
+
}
|
|
54
148
|
try {
|
|
55
|
-
return
|
|
149
|
+
return compiledTemplate(args);
|
|
56
150
|
}
|
|
57
151
|
catch (err) {
|
|
58
152
|
if (err instanceof pupa_1.MissingValueError) {
|
|
59
153
|
// sentryService.captureMessage(
|
|
60
154
|
// `template value missing for key=${key}, param=${err.key}`,
|
|
61
155
|
// )
|
|
62
|
-
return
|
|
156
|
+
return (0, pupa_2.pupa)(text, args, { ignoreMissing: true });
|
|
63
157
|
}
|
|
64
158
|
throw err;
|
|
65
159
|
}
|
|
@@ -68,7 +162,7 @@ class TranslationService {
|
|
|
68
162
|
return text;
|
|
69
163
|
}
|
|
70
164
|
}
|
|
71
|
-
reportMissing(
|
|
165
|
+
reportMissing(_key, opt) {
|
|
72
166
|
console.log(opt); // For Sentry
|
|
73
167
|
//sentryService.captureMessage(`translation missing for key=${key}}`)
|
|
74
168
|
}
|
|
@@ -85,8 +179,24 @@ class TranslationService {
|
|
|
85
179
|
return false;
|
|
86
180
|
}
|
|
87
181
|
}
|
|
182
|
+
/**
|
|
183
|
+
* Clear cache and reinitialize - useful for testing
|
|
184
|
+
*/
|
|
185
|
+
clearCacheAndReinitialize() {
|
|
186
|
+
// Clear all caches
|
|
187
|
+
localeCache.clear();
|
|
188
|
+
templateCache.clear();
|
|
189
|
+
// Reset initialization state
|
|
190
|
+
this.initialized = false;
|
|
191
|
+
// Reinitialize
|
|
192
|
+
this.initialize();
|
|
193
|
+
}
|
|
88
194
|
}
|
|
89
195
|
exports.translationService = new TranslationService();
|
|
196
|
+
// Initialize on module load to preload all locales
|
|
197
|
+
if (typeof translation_model_1.SUPPORTED_LANGUAGES !== 'undefined' && Array.isArray(translation_model_1.SUPPORTED_LANGUAGES)) {
|
|
198
|
+
exports.translationService['initialize']();
|
|
199
|
+
}
|
|
90
200
|
// Alias
|
|
91
201
|
function tr(key, user, args = {}) {
|
|
92
202
|
return exports.translationService.translate(key, user, args);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation.service.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.service.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"translation.service.js","sourceRoot":"","sources":["../../../../src/server/services/translations/translation.service.ts"],"names":[],"mappings":"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"}
|