@akanjs/dictionary 0.0.54 → 0.0.56

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/index.mjs ADDED
@@ -0,0 +1 @@
1
+ export * from "./src";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/dictionary",
3
- "version": "0.0.54",
3
+ "version": "0.0.56",
4
4
  "type": "commonjs",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -14,5 +14,11 @@
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
17
- "dependencies": {}
17
+ "dependencies": {},
18
+ "exports": {
19
+ ".": {
20
+ "require": "./index.js",
21
+ "import": "./index.mjs"
22
+ }
23
+ }
18
24
  }
package/src/index.mjs ADDED
@@ -0,0 +1 @@
1
+ export * from "./trans";
package/src/trans.mjs ADDED
@@ -0,0 +1,358 @@
1
+ import { capitalize, Logger, lowerlize } from "@akanjs/common";
2
+ import {
3
+ getAllFilterModelRefs,
4
+ getAllFullModelRefs,
5
+ getAllScalarModelRefs,
6
+ getClassMeta,
7
+ getFieldMetaMap,
8
+ getFilterArgMetas,
9
+ getFilterMeta,
10
+ getFilterQueryMap,
11
+ getFilterSortMap
12
+ } from "@akanjs/constant";
13
+ import { getAllSignalRefs, getArgMetas, getGqlMetas, getSigMeta } from "@akanjs/signal";
14
+ const baseTrans = {
15
+ id: ["Id", "\uC544\uC774\uB514"],
16
+ "desc-id": ["Unique ID value", "\uC720\uB2C8\uD06C\uD55C \uC544\uC774\uB514\uAC12"],
17
+ createdAt: ["CreatedAt", "\uC0DD\uC131\uC77C"],
18
+ "desc-createdAt": ["Data created time", "\uB370\uC774\uD130 \uC0DD\uC131 \uC2DC\uAC01"],
19
+ updatedAt: ["UpdatedAt", "\uC218\uC815\uC77C"],
20
+ "desc-updatedAt": ["Data updated time", "\uB370\uC774\uD130 \uB9C8\uC9C0\uB9C9 \uC218\uC815 \uC2DC\uAC01"],
21
+ removedAt: ["RemovedAt", "\uC0AD\uC81C\uC77C"],
22
+ "desc-removedAt": ["Data removed time", "\uB370\uC774\uD130 \uC0AD\uC81C \uC2DC\uAC01"],
23
+ status: ["Status", "\uC0C1\uD0DC"],
24
+ "desc-status": ["Data status", "\uB370\uC774\uD130 \uC0C1\uD0DC"],
25
+ count: ["Count", "\uAC1C\uC218"],
26
+ "desc-count": ["Data count", "\uB370\uC774\uD130 \uAC1C\uC218"],
27
+ latest: ["latest", "\uCD5C\uC2E0\uC21C"],
28
+ "desc-latest": ["latest", "\uCD5C\uC2E0\uC21C"],
29
+ oldest: ["oldest", "\uC624\uB798\uB41C\uC21C"],
30
+ "desc-oldest": ["oldest", "\uC624\uB798\uB41C\uC21C"],
31
+ "qry-any": ["All", "\uC804\uCCB4"],
32
+ "qrydesc-any": ["All", "\uC804\uCCB4"],
33
+ "qry-byStatuses": ["By Statuses", "\uC0C1\uD0DC\uBCC4 \uC870\uD68C"],
34
+ "qrydesc-byStatuses": ["By Statuses", "\uC0C1\uD0DC\uBCC4 \uC870\uD68C"],
35
+ "qarg-byStatuses-statuses": ["Statuses", "\uC0C1\uD0DC"],
36
+ "qargdesc-byStatuses-statuses": ["Statuses", "\uC0C1\uD0DC"]
37
+ };
38
+ const getBaseSignalTrans = (modelName) => {
39
+ const className = capitalize(modelName);
40
+ return {
41
+ // * ==================== Endpoint ==================== * //
42
+ [`api-light${className}`]: [`Get light version of ${modelName}`, `${modelName} \uACBD\uB7C9\uD654 \uBC84\uC804 \uC870\uD68C`],
43
+ [`apidesc-light${className}`]: [`Get light version of ${modelName}`, `${modelName} \uACBD\uB7C9\uD654 \uBC84\uC804 \uC870\uD68C`],
44
+ [`arg-light${className}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
45
+ [`argdesc-light${className}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
46
+ [`api-${modelName}`]: [`Get ${modelName}`, `${modelName} \uC870\uD68C`],
47
+ [`apidesc-${modelName}`]: [`Get ${modelName}`, `${modelName} \uC870\uD68C`],
48
+ [`arg-${modelName}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
49
+ [`argdesc-${modelName}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
50
+ [`api-${modelName}List`]: [`Get ${modelName} list`, `${modelName} \uB9AC\uC2A4\uD2B8 \uC870\uD68C`],
51
+ [`apidesc-${modelName}List`]: [`Get ${modelName} list`, `${modelName} \uB9AC\uC2A4\uD2B8 \uC870\uD68C`],
52
+ [`arg-${modelName}List-query`]: [`Query of ${modelName}`, `${modelName} \uCFFC\uB9AC`],
53
+ [`argdesc-${modelName}List-query`]: [`Query of ${modelName}`, `${modelName} \uCFFC\uB9AC`],
54
+ [`arg-${modelName}List-skip`]: [`Skip of ${modelName}`, `${modelName} \uC2A4\uD0B5`],
55
+ [`argdesc-${modelName}List-skip`]: [`Skip of ${modelName}`, `${modelName} \uC2A4\uD0B5`],
56
+ [`arg-${modelName}List-limit`]: [`Limit of ${modelName}`, `${modelName} \uC81C\uD55C`],
57
+ [`argdesc-${modelName}List-limit`]: [`Limit of ${modelName}`, `${modelName} \uC81C\uD55C`],
58
+ [`arg-${modelName}List-sort`]: [`Sort of ${modelName}`, `${modelName} \uC815\uB82C`],
59
+ [`argdesc-${modelName}List-sort`]: [`Sort of ${modelName}`, `${modelName} \uC815\uB82C`],
60
+ [`api-${modelName}Insight`]: [`Get ${modelName} insight`, `${modelName} \uC778\uC0AC\uC774\uD2B8 \uC870\uD68C`],
61
+ [`apidesc-${modelName}Insight`]: [`Get ${modelName} insight`, `${modelName} \uC778\uC0AC\uC774\uD2B8 \uC870\uD68C`],
62
+ [`arg-${modelName}Insight-query`]: [`Query of ${modelName}`, `${modelName} \uCFFC\uB9AC`],
63
+ [`argdesc-${modelName}Insight-query`]: [`Query of ${modelName}`, `${modelName} \uCFFC\uB9AC`],
64
+ [`api-${modelName}Exists`]: [`Check ${modelName} exists`, `${modelName} \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778`],
65
+ [`apidesc-${modelName}Exists`]: [`Check ${modelName} exists`, `${modelName} \uC874\uC7AC \uC5EC\uBD80 \uD655\uC778`],
66
+ [`arg-${modelName}Exists-query`]: [`Query of ${modelName}`, `${modelName} \uCFFC\uB9AC`],
67
+ [`argdesc-${modelName}Exists-query`]: [`Query of ${modelName}`, `${modelName} \uCFFC\uB9AC`],
68
+ [`api-create${className}`]: [`Create ${modelName}`, `${modelName} \uC0DD\uC131`],
69
+ [`apidesc-create${className}`]: [`Create ${modelName}`, `${modelName} \uC0DD\uC131`],
70
+ [`arg-create${className}-data`]: [`Data of ${modelName}`, `${modelName} \uB370\uC774\uD130`],
71
+ [`argdesc-create${className}-data`]: [`Data of ${modelName}`, `${modelName} \uB370\uC774\uD130`],
72
+ [`api-update${className}`]: [`Update ${modelName}`, `${modelName} \uC218\uC815`],
73
+ [`apidesc-update${className}`]: [`Update ${modelName}`, `${modelName} \uC218\uC815`],
74
+ [`arg-update${className}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
75
+ [`argdesc-update${className}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
76
+ [`arg-update${className}-data`]: [`Data of ${modelName}`, `${modelName} \uB370\uC774\uD130`],
77
+ [`argdesc-update${className}-data`]: [`Data of ${modelName}`, `${modelName} \uB370\uC774\uD130`],
78
+ [`api-remove${className}`]: [`Remove ${modelName}`, `${modelName} \uC0AD\uC81C`],
79
+ [`apidesc-remove${className}`]: [`Remove ${modelName}`, `${modelName} \uC0AD\uC81C`],
80
+ [`arg-remove${className}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`],
81
+ [`argdesc-remove${className}-${modelName}Id`]: [`Id of ${modelName}`, `${modelName} \uC544\uC774\uB514`]
82
+ // * ==================== Endpoint ==================== * //
83
+ };
84
+ };
85
+ const checkModelDictCoverages = (modelName, dictionary, modelRefs, filterRefs) => {
86
+ const enumKeyMap = /* @__PURE__ */ new Map();
87
+ modelRefs.forEach((modelRef) => {
88
+ const fieldMetaMap = getFieldMetaMap(modelRef);
89
+ [...fieldMetaMap.values()].forEach((fieldMeta) => {
90
+ if (!fieldMeta.enum)
91
+ return;
92
+ enumKeyMap.set(fieldMeta.key, new Set(fieldMeta.enum.map((value) => value.toString())));
93
+ fieldMeta.enum.forEach((value) => {
94
+ const enumDict = dictionary[`enum-${fieldMeta.key}-${value}`];
95
+ const modelDict = rootDictionary[modelName];
96
+ const rootEnumDict = modelDict?.[`enum-${fieldMeta.key}-${value}`];
97
+ if (!enumDict && !rootEnumDict) {
98
+ Logger.warn(`\u2620\uFE0F Missing enum translation: ${modelName}.enum-${fieldMeta.key}-${value}`);
99
+ }
100
+ const enumDescDict = dictionary[`enumdesc-${fieldMeta.key}-${value}`];
101
+ const rootEnumDescDict = modelDict?.[`enumdesc-${fieldMeta.key}-${value}`];
102
+ if (!enumDescDict && !rootEnumDescDict) {
103
+ Logger.warn(`\u2620\uFE0F Missing enum description: ${modelName}.enumdesc-${fieldMeta.key}-${value}`);
104
+ }
105
+ });
106
+ });
107
+ });
108
+ Object.keys(dictionary).filter((key) => key.startsWith("enum-")).forEach((key) => {
109
+ const [, fieldKey, ...values] = key.split("-");
110
+ const value = values.join("-");
111
+ if (!enumKeyMap.get(fieldKey)?.has(value)) {
112
+ Logger.error(
113
+ `\u{1F47B} Unused enum translation, need to delete: ${modelName}.enum-${fieldKey}-${value} & ${modelName}.enumdesc-${fieldKey}-${value}`
114
+ );
115
+ }
116
+ });
117
+ const fieldKeySet = /* @__PURE__ */ new Set([
118
+ ...modelRefs.map((modelRef) => [...getFieldMetaMap(modelRef).keys()]).flat(),
119
+ ...filterRefs.map((filterRef) => Object.keys(getFilterSortMap(filterRef))).flat()
120
+ ]);
121
+ Object.keys(dictionary).filter((key) => key.startsWith("desc-")).forEach((key) => {
122
+ const [, fieldKey] = key.split("-");
123
+ if (!fieldKeySet.has(fieldKey))
124
+ Logger.error(
125
+ `\u{1F47B} Unused description translation, need to delete: ${modelName}.${fieldKey} & ${modelName}.desc-${fieldKey}`
126
+ );
127
+ });
128
+ };
129
+ const checkSignalDictCoverages = (modelName, sigRefs, dictionary) => {
130
+ const argKeyMap = /* @__PURE__ */ new Map();
131
+ sigRefs.forEach((sigRef) => {
132
+ const gqlMetas = getGqlMetas(sigRef);
133
+ gqlMetas.filter((gqlMeta) => gqlMeta.type !== "Process").forEach((gqlMeta) => {
134
+ const [argMetas] = getArgMetas(sigRef, gqlMeta.key);
135
+ argKeyMap.set(gqlMeta.key, new Set(argMetas.map((argMeta) => argMeta.name)));
136
+ argMetas.forEach((argMeta) => {
137
+ const argDict = dictionary[`arg-${gqlMeta.key}-${argMeta.name}`];
138
+ if (!argDict) {
139
+ Logger.warn(`\u2620\uFE0F Missing arg translation: ${modelName}.arg-${gqlMeta.key}-${argMeta.name}`);
140
+ }
141
+ const argDescDict = dictionary[`argdesc-${gqlMeta.key}-${argMeta.name}`];
142
+ if (!argDescDict) {
143
+ Logger.warn(`\u2620\uFE0F Missing arg description: ${modelName}.argdesc-${gqlMeta.key}-${argMeta.name}`);
144
+ }
145
+ });
146
+ });
147
+ });
148
+ Object.keys(dictionary).filter((key) => key.startsWith("arg-")).forEach((key) => {
149
+ const [, gqlKey, argKey] = key.split("-");
150
+ if (!argKeyMap.get(gqlKey)?.has(argKey))
151
+ Logger.error(
152
+ `\u{1F47B} Unused arg translation, need to delete: ${modelName}.arg-${gqlKey}-${argKey} & ${modelName}.argdesc-${gqlKey}-${argKey}`
153
+ );
154
+ });
155
+ };
156
+ const checkFilterDictCoverages = (modelName, filterRefs, dictionary) => {
157
+ const qargKeyMap = /* @__PURE__ */ new Map();
158
+ filterRefs.forEach((filterRef) => {
159
+ const filterMetaMap = getFilterQueryMap(filterRef);
160
+ filterMetaMap.forEach((filterMeta) => {
161
+ const filterArgMetas = getFilterArgMetas(filterRef, filterMeta.key);
162
+ qargKeyMap.set(filterMeta.key, new Set(filterArgMetas.map((filterArgMeta) => filterArgMeta.name)));
163
+ filterArgMetas.forEach((filterArgMeta) => {
164
+ const qargDict = dictionary[`qarg-${filterMeta.key}-${filterArgMeta.name}`];
165
+ if (!qargDict)
166
+ Logger.warn(`\u2620\uFE0F Missing qarg translation: ${modelName}.qarg-${filterMeta.key}-${filterArgMeta.name}`);
167
+ const qargDescDict = dictionary[`qargdesc-${filterMeta.key}-${filterArgMeta.name}`];
168
+ if (!qargDescDict)
169
+ Logger.warn(`\u2620\uFE0F Missing qarg description: ${modelName}.qargdesc-${filterMeta.key}-${filterArgMeta.name}`);
170
+ });
171
+ });
172
+ });
173
+ Object.keys(dictionary).filter((key) => key.startsWith("qarg-")).forEach((key) => {
174
+ const [, filterKey, filterArgKey] = key.split("-");
175
+ if (!qargKeyMap.get(filterKey)?.has(filterArgKey))
176
+ Logger.error(
177
+ `\u{1F47B} Unused qarg translation, need to delete: ${modelName}.qarg-${filterKey}-${filterArgKey} & ${modelName}.qargdesc-${filterKey}-${filterArgKey}`
178
+ );
179
+ });
180
+ };
181
+ const checkDictCoverage = () => {
182
+ const fullModelRefEntries = getAllFullModelRefs().filter((modelRef) => {
183
+ const classMeta = getClassMeta(modelRef);
184
+ return classMeta.type === "full" && classMeta.modelType === "data";
185
+ }).map((modelRef) => {
186
+ const classMeta = getClassMeta(modelRef);
187
+ const modelName = lowerlize(classMeta.refName);
188
+ return { modelName, modelRef };
189
+ });
190
+ const scalarModelRefs = getAllScalarModelRefs();
191
+ const insightModelRefEntries = scalarModelRefs.filter((ref) => getClassMeta(ref).modelType === "insight").map((modelRef) => {
192
+ const classMeta = getClassMeta(modelRef);
193
+ if (!classMeta.refName.endsWith("Insight"))
194
+ throw new Error(`Invalid insight model name: ${classMeta.refName}`);
195
+ const modelName = lowerlize(classMeta.refName.slice(0, -7));
196
+ return { modelName, modelRef };
197
+ });
198
+ const pureScalarModelRefEntries = scalarModelRefs.filter((ref) => getClassMeta(ref).modelType === "data").map((modelRef) => {
199
+ const classMeta = getClassMeta(modelRef);
200
+ const modelName = lowerlize(classMeta.refName);
201
+ return { modelName, modelRef };
202
+ });
203
+ const filterModelRefEntries = getAllFilterModelRefs().map((filterModelRef) => {
204
+ const filterMeta = getFilterMeta(filterModelRef);
205
+ if (!filterMeta.refName.endsWith("Filter"))
206
+ throw new Error(`Invalid filter model name: ${filterMeta.refName}`);
207
+ const modelName = lowerlize(filterMeta.refName.slice(0, -6));
208
+ return { modelName, filterModelRef };
209
+ });
210
+ const signalRefs = getAllSignalRefs();
211
+ const fullModelSignalRefEntries = signalRefs.filter((ref) => {
212
+ const sigMeta = getSigMeta(ref);
213
+ if (!sigMeta.returns)
214
+ return false;
215
+ const modelRef = sigMeta.returns();
216
+ const classMeta = getClassMeta(modelRef);
217
+ return classMeta.type === "full";
218
+ }).map((sigRef) => {
219
+ const sigMeta = getSigMeta(sigRef);
220
+ const modelName = lowerlize(sigMeta.refName);
221
+ return { modelName, sigRef };
222
+ });
223
+ const scalarModelSignalRefEntries = signalRefs.filter((ref) => {
224
+ const sigMeta = getSigMeta(ref);
225
+ if (!sigMeta.returns)
226
+ return false;
227
+ const modelRef = sigMeta.returns();
228
+ const classMeta = getClassMeta(modelRef);
229
+ return classMeta.type === "scalar";
230
+ }).map((sigRef) => {
231
+ const sigMeta = getSigMeta(sigRef);
232
+ const modelName = lowerlize(sigMeta.refName);
233
+ return { modelName, sigRef };
234
+ });
235
+ const pureSignalRefEntries = signalRefs.filter((ref) => !getSigMeta(ref).returns).map((sigRef) => {
236
+ const sigMeta = getSigMeta(sigRef);
237
+ const modelName = lowerlize(sigMeta.refName);
238
+ return { modelName, sigRef };
239
+ });
240
+ const modelDictExamMap = /* @__PURE__ */ new Map();
241
+ const scalarDictExamMap = /* @__PURE__ */ new Map();
242
+ const signalDictExamMap = /* @__PURE__ */ new Map();
243
+ const getDefaultModelDict = () => ({ modelRefs: [], insightRefs: [], sigRefs: [], filterRefs: [] });
244
+ fullModelRefEntries.forEach(({ modelName, modelRef }) => {
245
+ const modelDictExam = modelDictExamMap.get(modelName) ?? getDefaultModelDict();
246
+ modelDictExam.modelRefs.push(modelRef);
247
+ modelDictExamMap.set(modelName, modelDictExam);
248
+ });
249
+ insightModelRefEntries.forEach(({ modelName, modelRef }) => {
250
+ const modelDictExam = modelDictExamMap.get(modelName) ?? getDefaultModelDict();
251
+ modelDictExam.insightRefs.push(modelRef);
252
+ modelDictExamMap.set(modelName, modelDictExam);
253
+ });
254
+ fullModelSignalRefEntries.forEach(({ modelName, sigRef }) => {
255
+ const modelDictExam = modelDictExamMap.get(modelName) ?? getDefaultModelDict();
256
+ modelDictExam.sigRefs.push(sigRef);
257
+ modelDictExamMap.set(modelName, modelDictExam);
258
+ });
259
+ filterModelRefEntries.forEach(({ modelName, filterModelRef }) => {
260
+ const modelDictExam = modelDictExamMap.get(modelName) ?? getDefaultModelDict();
261
+ modelDictExam.filterRefs.push(filterModelRef);
262
+ modelDictExamMap.set(modelName, modelDictExam);
263
+ });
264
+ const getDefaultScalarDict = () => ({ modelRefs: [], sigRefs: [] });
265
+ pureScalarModelRefEntries.forEach(({ modelName, modelRef }) => {
266
+ const scalarDictExam = scalarDictExamMap.get(modelName) ?? getDefaultScalarDict();
267
+ scalarDictExam.modelRefs.push(modelRef);
268
+ scalarDictExamMap.set(modelName, scalarDictExam);
269
+ });
270
+ scalarModelSignalRefEntries.forEach(({ modelName, sigRef }) => {
271
+ const scalarDictExam = scalarDictExamMap.get(modelName) ?? getDefaultScalarDict();
272
+ scalarDictExam.sigRefs.push(sigRef);
273
+ scalarDictExamMap.set(modelName, scalarDictExam);
274
+ });
275
+ const getDefaultSignalDict = () => ({ sigRefs: [] });
276
+ pureSignalRefEntries.forEach(({ modelName, sigRef }) => {
277
+ const signalDictExam = signalDictExamMap.get(modelName) ?? getDefaultSignalDict();
278
+ signalDictExam.sigRefs.push(sigRef);
279
+ signalDictExamMap.set(modelName, signalDictExam);
280
+ });
281
+ modelDictExamMap.forEach(({ modelRefs, insightRefs, sigRefs, filterRefs }, modelName) => {
282
+ const dictionary = rootDictionary[modelName];
283
+ if (!dictionary)
284
+ return;
285
+ checkModelDictCoverages(modelName, dictionary, [...modelRefs, ...insightRefs], filterRefs);
286
+ checkSignalDictCoverages(modelName, sigRefs, dictionary);
287
+ checkFilterDictCoverages(modelName, filterRefs, dictionary);
288
+ });
289
+ scalarDictExamMap.forEach(({ modelRefs, sigRefs }, modelName) => {
290
+ const dictionary = rootDictionary[modelName];
291
+ if (!dictionary)
292
+ return;
293
+ checkModelDictCoverages(modelName, dictionary, modelRefs, []);
294
+ checkSignalDictCoverages(modelName, sigRefs, dictionary);
295
+ });
296
+ signalDictExamMap.forEach(({ sigRefs }, modelName) => {
297
+ const dictionary = rootDictionary[modelName];
298
+ if (!dictionary)
299
+ return;
300
+ checkSignalDictCoverages(modelName, sigRefs, dictionary);
301
+ });
302
+ };
303
+ const rootDictionary = {};
304
+ const makeDictionary = (rootDict, dict1, dict2, dict3, dict4, dict5) => {
305
+ const dicts = [dict1, dict2, dict3, dict4, dict5].filter((d) => !!d);
306
+ dicts.forEach((dict) => {
307
+ Object.entries(dict).forEach(([key, value]) => {
308
+ const rootValue = rootDict[key];
309
+ if (!rootValue)
310
+ Object.assign(rootDict, { [key]: value });
311
+ else
312
+ Object.assign(rootDict[key], value);
313
+ });
314
+ });
315
+ return rootDict;
316
+ };
317
+ const languages = ["ko", "en", "zhChs", "zhCht"];
318
+ const msg = {
319
+ info: () => null,
320
+ success: () => null,
321
+ error: () => null,
322
+ warning: () => null,
323
+ loading: () => null
324
+ };
325
+ const makeTrans = (locale) => {
326
+ const revert = (key, data) => {
327
+ throw new Error(key);
328
+ };
329
+ class Revert extends Error {
330
+ constructor(key, data) {
331
+ super(key);
332
+ }
333
+ }
334
+ const translate = (lang, key, data) => {
335
+ const langIdx = languages.indexOf(lang);
336
+ const [modelName, msgKey] = key.split(".");
337
+ const model = locale[modelName];
338
+ const message = model[msgKey][langIdx];
339
+ if (!message)
340
+ throw new Error("Invalid message");
341
+ return message;
342
+ };
343
+ return {
344
+ revert,
345
+ Revert,
346
+ translate,
347
+ msg
348
+ };
349
+ };
350
+ export {
351
+ baseTrans,
352
+ checkDictCoverage,
353
+ getBaseSignalTrans,
354
+ makeDictionary,
355
+ makeTrans,
356
+ msg,
357
+ rootDictionary
358
+ };