@digitaldefiance/i18n-lib 1.3.11 → 1.3.13

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.
Files changed (148) hide show
  1. package/README.md +8 -0
  2. package/package.json +12 -27
  3. package/src/active-context.ts +30 -0
  4. package/src/component-definition.ts +11 -0
  5. package/src/component-registration.ts +13 -0
  6. package/src/component-registry.ts +392 -0
  7. package/src/context-error-type.ts +3 -0
  8. package/src/context-error.ts +16 -0
  9. package/src/context-manager.ts +71 -0
  10. package/src/context.ts +90 -0
  11. package/src/core-i18n.ts +609 -0
  12. package/src/core-string-key.ts +49 -0
  13. package/src/create-translation-adapter.ts +47 -0
  14. package/src/currency-code.ts +35 -0
  15. package/{dist/currency-format.d.ts → src/currency-format.ts} +5 -4
  16. package/src/currency.ts +52 -0
  17. package/src/default-config.ts +199 -0
  18. package/src/enum-registry.ts +138 -0
  19. package/src/global-active-context.ts +255 -0
  20. package/src/handleable.ts +79 -0
  21. package/src/i-global-active-context.ts +59 -0
  22. package/src/i-handleable-error-options.ts +6 -0
  23. package/src/i-handleable.ts +5 -0
  24. package/src/i18n-config.ts +29 -0
  25. package/{dist/i18n-context.d.ts → src/i18n-context.ts} +7 -6
  26. package/src/i18n-engine.ts +491 -0
  27. package/{dist/index.d.ts → src/index.ts} +10 -1
  28. package/{dist/language-codes.d.ts → src/language-codes.ts} +23 -11
  29. package/src/language-definition.ts +13 -0
  30. package/src/language-registry.ts +292 -0
  31. package/src/plugin-i18n-engine.ts +520 -0
  32. package/src/plugin-translatable-generic-error.ts +106 -0
  33. package/src/plugin-translatable-handleable-generic.ts +60 -0
  34. package/src/plugin-typed-handleable.ts +77 -0
  35. package/src/registry-config.ts +15 -0
  36. package/src/registry-error-type.ts +12 -0
  37. package/src/registry-error.ts +74 -0
  38. package/src/strict-types.ts +35 -0
  39. package/src/template.ts +63 -0
  40. package/src/timezone.ts +20 -0
  41. package/src/translatable.ts +15 -0
  42. package/src/translation-engine.ts +8 -0
  43. package/src/translation-request.ts +12 -0
  44. package/src/translation-response.ts +8 -0
  45. package/src/typed-error.ts +384 -0
  46. package/src/typed-handleable.ts +70 -0
  47. package/{dist/types.d.ts → src/types.ts} +75 -20
  48. package/src/unified-translator.ts +96 -0
  49. package/src/utils.ts +213 -0
  50. package/src/validation-config.ts +11 -0
  51. package/src/validation-result.ts +12 -0
  52. package/dist/active-context.d.ts +0 -29
  53. package/dist/active-context.js +0 -2
  54. package/dist/component-definition.d.ts +0 -11
  55. package/dist/component-definition.js +0 -2
  56. package/dist/component-registration.d.ts +0 -9
  57. package/dist/component-registration.js +0 -2
  58. package/dist/component-registry.d.ts +0 -68
  59. package/dist/component-registry.js +0 -245
  60. package/dist/context-error-type.d.ts +0 -3
  61. package/dist/context-error-type.js +0 -7
  62. package/dist/context-error.d.ts +0 -6
  63. package/dist/context-error.js +0 -15
  64. package/dist/context-manager.d.ts +0 -33
  65. package/dist/context-manager.js +0 -61
  66. package/dist/context.d.ts +0 -44
  67. package/dist/context.js +0 -69
  68. package/dist/core-i18n.d.ts +0 -62
  69. package/dist/core-i18n.js +0 -477
  70. package/dist/core-string-key.d.ts +0 -42
  71. package/dist/core-string-key.js +0 -50
  72. package/dist/create-translation-adapter.d.ts +0 -20
  73. package/dist/create-translation-adapter.js +0 -36
  74. package/dist/currency-code.d.ts +0 -19
  75. package/dist/currency-code.js +0 -36
  76. package/dist/currency-format.js +0 -2
  77. package/dist/currency.d.ts +0 -11
  78. package/dist/currency.js +0 -48
  79. package/dist/default-config.d.ts +0 -32
  80. package/dist/default-config.js +0 -101
  81. package/dist/enum-registry.d.ts +0 -44
  82. package/dist/enum-registry.js +0 -100
  83. package/dist/global-active-context.d.ts +0 -50
  84. package/dist/global-active-context.js +0 -177
  85. package/dist/handleable.d.ts +0 -13
  86. package/dist/handleable.js +0 -56
  87. package/dist/i-global-active-context.d.ts +0 -22
  88. package/dist/i-global-active-context.js +0 -2
  89. package/dist/i-handleable-error-options.d.ts +0 -6
  90. package/dist/i-handleable-error-options.js +0 -2
  91. package/dist/i-handleable.d.ts +0 -5
  92. package/dist/i-handleable.js +0 -2
  93. package/dist/i18n-config.d.ts +0 -20
  94. package/dist/i18n-config.js +0 -2
  95. package/dist/i18n-context.js +0 -2
  96. package/dist/i18n-engine.d.ts +0 -178
  97. package/dist/i18n-engine.js +0 -338
  98. package/dist/index.js +0 -83
  99. package/dist/language-codes.js +0 -31
  100. package/dist/language-definition.d.ts +0 -13
  101. package/dist/language-definition.js +0 -2
  102. package/dist/language-registry.d.ts +0 -113
  103. package/dist/language-registry.js +0 -216
  104. package/dist/plugin-i18n-engine.d.ts +0 -146
  105. package/dist/plugin-i18n-engine.js +0 -360
  106. package/dist/plugin-translatable-generic-error.d.ts +0 -29
  107. package/dist/plugin-translatable-generic-error.js +0 -66
  108. package/dist/plugin-translatable-handleable-generic.d.ts +0 -28
  109. package/dist/plugin-translatable-handleable-generic.js +0 -40
  110. package/dist/plugin-typed-handleable.d.ts +0 -14
  111. package/dist/plugin-typed-handleable.js +0 -45
  112. package/dist/registry-config.d.ts +0 -14
  113. package/dist/registry-config.js +0 -2
  114. package/dist/registry-error-type.d.ts +0 -12
  115. package/dist/registry-error-type.js +0 -16
  116. package/dist/registry-error.d.ts +0 -18
  117. package/dist/registry-error.js +0 -45
  118. package/dist/strict-types.d.ts +0 -18
  119. package/dist/strict-types.js +0 -17
  120. package/dist/template.d.ts +0 -12
  121. package/dist/template.js +0 -30
  122. package/dist/timezone.d.ts +0 -11
  123. package/dist/timezone.js +0 -22
  124. package/dist/translatable-generic-error.d.ts +0 -29
  125. package/dist/translatable-generic-error.js +0 -66
  126. package/dist/translatable-handleable-generic.d.ts +0 -28
  127. package/dist/translatable-handleable-generic.js +0 -40
  128. package/dist/translatable.d.ts +0 -5
  129. package/dist/translatable.js +0 -11
  130. package/dist/translation-engine.d.ts +0 -8
  131. package/dist/translation-engine.js +0 -2
  132. package/dist/translation-request.d.ts +0 -9
  133. package/dist/translation-request.js +0 -2
  134. package/dist/translation-response.d.ts +0 -8
  135. package/dist/translation-response.js +0 -2
  136. package/dist/typed-error.d.ts +0 -72
  137. package/dist/typed-error.js +0 -251
  138. package/dist/typed-handleable.d.ts +0 -14
  139. package/dist/typed-handleable.js +0 -40
  140. package/dist/types.js +0 -18
  141. package/dist/unified-translator.d.ts +0 -30
  142. package/dist/unified-translator.js +0 -68
  143. package/dist/utils.d.ts +0 -64
  144. package/dist/utils.js +0 -130
  145. package/dist/validation-config.d.ts +0 -11
  146. package/dist/validation-config.js +0 -2
  147. package/dist/validation-result.d.ts +0 -12
  148. package/dist/validation-result.js +0 -2
@@ -1,19 +0,0 @@
1
- /**
2
- * Class representing a validated currency code.
3
- */
4
- export declare class CurrencyCode {
5
- private _value;
6
- /**
7
- * Gets the currency code value.
8
- */
9
- get value(): string;
10
- /**
11
- * Sets the currency code value after validating it.
12
- */
13
- set value(value: string);
14
- /**
15
- * Gets the list of all valid currency codes.
16
- */
17
- static get values(): string[];
18
- constructor(value?: string);
19
- }
@@ -1,36 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CurrencyCode = void 0;
4
- const currency_codes_1 = require("currency-codes");
5
- const types_1 = require("./types");
6
- /**
7
- * Class representing a validated currency code.
8
- */
9
- class CurrencyCode {
10
- /**
11
- * Gets the currency code value.
12
- */
13
- get value() {
14
- return this._value;
15
- }
16
- /**
17
- * Sets the currency code value after validating it.
18
- */
19
- set value(value) {
20
- if (!CurrencyCode.values.includes(value)) {
21
- throw new Error('Invalid currency code');
22
- }
23
- this._value = value;
24
- }
25
- /**
26
- * Gets the list of all valid currency codes.
27
- */
28
- static get values() {
29
- return (0, currency_codes_1.codes)();
30
- }
31
- constructor(value = types_1.DefaultCurrencyCode) {
32
- this._value = types_1.DefaultCurrencyCode;
33
- this.value = value;
34
- }
35
- }
36
- exports.CurrencyCode = CurrencyCode;
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,11 +0,0 @@
1
- /**
2
- * Currency formatting utilities
3
- */
4
- import { CurrencyFormat } from './currency-format';
5
- /**
6
- * Get currency format details for a given locale and currency code.
7
- * @param locale The locale string (e.g., 'en-US')
8
- * @param currencyCode The ISO 4217 currency code (e.g., 'USD')
9
- * @returns The currency format details
10
- */
11
- export declare function getCurrencyFormat(locale: string, currencyCode: string): CurrencyFormat;
package/dist/currency.js DELETED
@@ -1,48 +0,0 @@
1
- "use strict";
2
- /**
3
- * Currency formatting utilities
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getCurrencyFormat = getCurrencyFormat;
7
- /**
8
- * Get currency format details for a given locale and currency code.
9
- * @param locale The locale string (e.g., 'en-US')
10
- * @param currencyCode The ISO 4217 currency code (e.g., 'USD')
11
- * @returns The currency format details
12
- */
13
- function getCurrencyFormat(locale, currencyCode) {
14
- const formatter = new Intl.NumberFormat(locale, {
15
- style: 'currency',
16
- currency: currencyCode,
17
- });
18
- const parts = formatter.formatToParts(1234567.89);
19
- const symbol = parts.find((part) => part.type === 'currency')?.value || '';
20
- const symbolIndex = parts.findIndex((part) => part.type === 'currency');
21
- const decimalIndex = parts.findIndex((part) => part.type === 'decimal');
22
- const integerIndex = parts.findIndex((part) => part.type === 'integer');
23
- let position;
24
- if (decimalIndex === -1) {
25
- // No decimal separator
26
- if (symbolIndex < integerIndex) {
27
- position = 'prefix';
28
- }
29
- else {
30
- position = 'postfix';
31
- }
32
- }
33
- else if (symbolIndex < decimalIndex && symbolIndex < integerIndex) {
34
- position = 'prefix';
35
- }
36
- else if (symbolIndex > decimalIndex) {
37
- position = 'postfix';
38
- }
39
- else {
40
- position = 'infix';
41
- }
42
- return {
43
- symbol,
44
- position,
45
- groupSeparator: parts.find((part) => part.type === 'group')?.value || ',',
46
- decimalSeparator: parts.find((part) => part.type === 'decimal')?.value || '.',
47
- };
48
- }
@@ -1,32 +0,0 @@
1
- import { I18nContext } from './i18n-context';
2
- import { I18nEngine } from './i18n-engine';
3
- import { LanguageCodes } from './language-codes';
4
- import { Timezone } from './timezone';
5
- import { LanguageCodeCollection } from './types';
6
- export declare enum DefaultStringKey {
7
- Common_Test = "common_test",
8
- Error_InstanceAlreadyExistsTemplate = "error_instanceAlreadyExistsTemplate",
9
- Error_InstanceNotFoundTemplate = "error_instanceNotFoundTemplate",
10
- Error_MissingStringCollectionTemplate = "error_missingStringCollectionTemplate",
11
- Error_MissingTranslationTemplate = "error_missingTranslationTemplate",
12
- Error_DefaultLanguageNoCollectionTemplate = "error_defaultLanguageNoCollectionTemplate",
13
- Error_MissingTranslationKeyTemplate = "error_missingTranslationKeyTemplate"
14
- }
15
- export type DefaultLanguageCode = typeof LanguageCodes.EN_US | typeof LanguageCodes.EN_GB | typeof LanguageCodes.FR | typeof LanguageCodes.ES | typeof LanguageCodes.ZH_CN | typeof LanguageCodes.UK;
16
- export declare const DefaultLanguageCodes: LanguageCodeCollection<DefaultLanguageCode>;
17
- declare global {
18
- namespace I18n {
19
- interface Config {
20
- StringKey: DefaultStringKey;
21
- Language: DefaultLanguageCode;
22
- LanguageCodes: LanguageCodeCollection<DefaultLanguageCode>;
23
- engine: I18nEngine<I18n.Config['StringKey'], I18n.Config['Language'], Record<any, any>>;
24
- }
25
- }
26
- }
27
- export type StringKey = I18n.Config['StringKey'];
28
- export type Language = I18n.Config['Language'];
29
- export type Engine = I18n.Config['engine'];
30
- export type DefaultLanguageCodesType = I18n.Config['LanguageCodes'];
31
- export declare const getI18nEngine: () => Engine;
32
- export declare const getDefaultI18nEngine: <TConstants extends Record<string, any>, TContext extends I18nContext<DefaultLanguageCode>>(constants: TConstants, timezone?: Timezone, adminTimezone?: Timezone) => I18nEngine<DefaultStringKey, DefaultLanguageCode, TConstants, TContext>;
@@ -1,101 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDefaultI18nEngine = exports.getI18nEngine = exports.DefaultLanguageCodes = exports.DefaultStringKey = void 0;
4
- const currency_code_1 = require("./currency-code");
5
- const i18n_engine_1 = require("./i18n-engine");
6
- const language_codes_1 = require("./language-codes");
7
- const timezone_1 = require("./timezone");
8
- const types_1 = require("./types");
9
- // Default enum types that can be augmented by consumers
10
- var DefaultStringKey;
11
- (function (DefaultStringKey) {
12
- DefaultStringKey["Common_Test"] = "common_test";
13
- DefaultStringKey["Error_InstanceAlreadyExistsTemplate"] = "error_instanceAlreadyExistsTemplate";
14
- DefaultStringKey["Error_InstanceNotFoundTemplate"] = "error_instanceNotFoundTemplate";
15
- DefaultStringKey["Error_MissingStringCollectionTemplate"] = "error_missingStringCollectionTemplate";
16
- DefaultStringKey["Error_MissingTranslationTemplate"] = "error_missingTranslationTemplate";
17
- DefaultStringKey["Error_DefaultLanguageNoCollectionTemplate"] = "error_defaultLanguageNoCollectionTemplate";
18
- DefaultStringKey["Error_MissingTranslationKeyTemplate"] = "error_missingTranslationKeyTemplate";
19
- })(DefaultStringKey || (exports.DefaultStringKey = DefaultStringKey = {}));
20
- exports.DefaultLanguageCodes = {
21
- [language_codes_1.LanguageCodes.EN_US]: 'en-US',
22
- [language_codes_1.LanguageCodes.EN_GB]: 'en-GB',
23
- [language_codes_1.LanguageCodes.FR]: 'fr',
24
- [language_codes_1.LanguageCodes.ES]: 'es',
25
- [language_codes_1.LanguageCodes.ZH_CN]: 'zh-CN',
26
- [language_codes_1.LanguageCodes.UK]: 'uk',
27
- };
28
- // Singleton instance that uses the augmented types
29
- const getI18nEngine = () => i18n_engine_1.I18nEngine.getInstance();
30
- exports.getI18nEngine = getI18nEngine;
31
- const getConfig = (constants, timezone, adminTimezone) => ({
32
- strings: {
33
- [language_codes_1.LanguageCodes.EN_US]: {
34
- [DefaultStringKey.Common_Test]: 'Test',
35
- [DefaultStringKey.Error_InstanceAlreadyExistsTemplate]: "Instance with key '{key}' already exists",
36
- [DefaultStringKey.Error_InstanceNotFoundTemplate]: "Instance with key '{key}' not found",
37
- [DefaultStringKey.Error_MissingStringCollectionTemplate]: 'Missing string collection for language: {language}',
38
- [DefaultStringKey.Error_MissingTranslationTemplate]: "Missing translation for key '{key}' in language '{language}'",
39
- [DefaultStringKey.Error_DefaultLanguageNoCollectionTemplate]: "Default language '{language}' has no string collection",
40
- [DefaultStringKey.Error_MissingTranslationKeyTemplate]: 'Missing translation key for type: {type}',
41
- },
42
- [language_codes_1.LanguageCodes.EN_GB]: {
43
- [DefaultStringKey.Common_Test]: 'Test',
44
- [DefaultStringKey.Error_InstanceAlreadyExistsTemplate]: "Instance with key '{key}' already exists",
45
- [DefaultStringKey.Error_InstanceNotFoundTemplate]: "Instance with key '{key}' not found",
46
- [DefaultStringKey.Error_MissingStringCollectionTemplate]: 'Missing string collection for language: {language}',
47
- [DefaultStringKey.Error_MissingTranslationTemplate]: "Missing translation for key '{key}' in language '{language}'",
48
- [DefaultStringKey.Error_DefaultLanguageNoCollectionTemplate]: "Default language '{language}' has no string collection",
49
- [DefaultStringKey.Error_MissingTranslationKeyTemplate]: 'Missing translation key for type: {type}',
50
- },
51
- [language_codes_1.LanguageCodes.FR]: {
52
- [DefaultStringKey.Common_Test]: 'Test',
53
- [DefaultStringKey.Error_InstanceAlreadyExistsTemplate]: "Instance avec clé '{key}' existe déjà",
54
- [DefaultStringKey.Error_InstanceNotFoundTemplate]: "Instance avec clé '{key}' introuvable",
55
- [DefaultStringKey.Error_MissingStringCollectionTemplate]: 'Collection de chaînes manquante pour la langue: {language}',
56
- [DefaultStringKey.Error_MissingTranslationTemplate]: "Traduction manquante pour la clé '{key}' dans la langue '{language}'",
57
- [DefaultStringKey.Error_DefaultLanguageNoCollectionTemplate]: "La langue par défaut '{language}' n'a pas de collection de chaînes",
58
- [DefaultStringKey.Error_MissingTranslationKeyTemplate]: 'Clé de traduction manquante pour le type: {type}',
59
- },
60
- [language_codes_1.LanguageCodes.ZH_CN]: {
61
- [DefaultStringKey.Common_Test]: '测试',
62
- [DefaultStringKey.Error_InstanceAlreadyExistsTemplate]: "键为'{key}'的实例已存在",
63
- [DefaultStringKey.Error_InstanceNotFoundTemplate]: "未找到键为'{key}'的实例",
64
- [DefaultStringKey.Error_MissingStringCollectionTemplate]: '缺少语言的字符串集合: {language}',
65
- [DefaultStringKey.Error_MissingTranslationTemplate]: "在语言'{language}'中缺少键'{key}'的翻译",
66
- [DefaultStringKey.Error_DefaultLanguageNoCollectionTemplate]: "默认语言'{language}'没有字符串集合",
67
- [DefaultStringKey.Error_MissingTranslationKeyTemplate]: '类型缺少翻译键: {type}',
68
- },
69
- [language_codes_1.LanguageCodes.ES]: {
70
- [DefaultStringKey.Common_Test]: 'Prueba',
71
- [DefaultStringKey.Error_InstanceAlreadyExistsTemplate]: "La instancia con clave '{key}' ya existe",
72
- [DefaultStringKey.Error_InstanceNotFoundTemplate]: "Instancia con clave '{key}' no encontrada",
73
- [DefaultStringKey.Error_MissingStringCollectionTemplate]: 'Falta colección de cadenas para el idioma: {language}',
74
- [DefaultStringKey.Error_MissingTranslationTemplate]: "Falta traducción para la clave '{key}' en el idioma '{language}'",
75
- [DefaultStringKey.Error_DefaultLanguageNoCollectionTemplate]: "El idioma predeterminado '{language}' no tiene colección de cadenas",
76
- [DefaultStringKey.Error_MissingTranslationKeyTemplate]: 'Falta clave de traducción para el tipo: {type}',
77
- },
78
- [language_codes_1.LanguageCodes.UK]: {
79
- [DefaultStringKey.Common_Test]: 'Тест',
80
- [DefaultStringKey.Error_InstanceAlreadyExistsTemplate]: "Екземпляр з ключем '{key}' вже існує",
81
- [DefaultStringKey.Error_InstanceNotFoundTemplate]: "Екземпляр з ключем '{key}' не знайдено",
82
- [DefaultStringKey.Error_MissingStringCollectionTemplate]: 'Відсутня колекція рядків для мови: {language}',
83
- [DefaultStringKey.Error_MissingTranslationTemplate]: "Відсутній переклад для ключа '{key}' в мові '{language}'",
84
- [DefaultStringKey.Error_DefaultLanguageNoCollectionTemplate]: "Мова за замовчуванням '{language}' не має колекції рядків",
85
- [DefaultStringKey.Error_MissingTranslationKeyTemplate]: 'Відсутній ключ перекладу для типу: {type}',
86
- },
87
- },
88
- stringNames: Object.values(DefaultStringKey),
89
- defaultLanguage: language_codes_1.LanguageCodes.EN_US,
90
- defaultTranslationContext: 'user',
91
- defaultCurrencyCode: new currency_code_1.CurrencyCode(types_1.DefaultCurrencyCode),
92
- languageCodes: exports.DefaultLanguageCodes,
93
- languages: [language_codes_1.LanguageCodes.EN_US, language_codes_1.LanguageCodes.EN_GB, language_codes_1.LanguageCodes.FR, language_codes_1.LanguageCodes.ES, language_codes_1.LanguageCodes.ZH_CN, language_codes_1.LanguageCodes.UK],
94
- constants: constants,
95
- enumName: 'DefaultStringKey',
96
- enumObj: DefaultStringKey,
97
- timezone: timezone ?? new timezone_1.Timezone('UTC'),
98
- adminTimezone: adminTimezone ?? new timezone_1.Timezone('UTC'),
99
- });
100
- const getDefaultI18nEngine = (constants, timezone, adminTimezone) => new i18n_engine_1.I18nEngine(getConfig(constants, timezone, adminTimezone), 'user');
101
- exports.getDefaultI18nEngine = getDefaultI18nEngine;
@@ -1,44 +0,0 @@
1
- import { EnumLanguageTranslation } from './types';
2
- /**
3
- * Registry for managing enum translations across multiple languages.
4
- */
5
- export declare class EnumTranslationRegistry<TStringKey extends string, TLanguage extends string> {
6
- protected translations: Map<any, Partial<{ [L in TLanguage]: import("./types").EnumTranslation<any>; }>>;
7
- protected enumNames: WeakMap<any, string>;
8
- protected availableLanguages: Set<TLanguage>;
9
- protected translateFn?: (key: TStringKey, vars?: Record<string, any>) => string;
10
- constructor(availableLanguages: TLanguage[], translateFn?: (key: TStringKey, vars?: Record<string, any>) => string);
11
- /**
12
- * Registers an enumeration with its translations and a name.
13
- * @param enumObj The enumeration object
14
- * @param translations The translations for the enumeration
15
- * @param enumName The name of the enumeration
16
- */
17
- register<TEnum extends string | number>(enumObj: Record<string, TEnum>, translations: EnumLanguageTranslation<TEnum, TLanguage>, enumName: string): void;
18
- /**
19
- * Translates a value from the given enumeration to the specified language.
20
- * @param enumObj The enumeration object
21
- * @param value The value to translate
22
- * @param language The target language for translation
23
- * @returns The translated string
24
- */
25
- translate<TEnum extends string | number>(enumObj: Record<string, TEnum>, value: TEnum, language: TLanguage): string;
26
- /**
27
- * Gets the name of the enumeration.
28
- * @param enumObj The enumeration object
29
- * @returns The name of the enumeration
30
- */
31
- private getEnumName;
32
- /**
33
- * Checks if the registry has translations for the given enumeration.
34
- * @param enumObj The enumeration object
35
- * @returns True if translations exist, false otherwise
36
- */
37
- has(enumObj: any): boolean;
38
- /**
39
- * Validates that enum translations only contain available languages.
40
- * @param translations The translations to validate
41
- * @param enumName The name of the enumeration for error messages
42
- */
43
- private validateTranslations;
44
- }
@@ -1,100 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EnumTranslationRegistry = void 0;
4
- /**
5
- * Registry for managing enum translations across multiple languages.
6
- */
7
- class EnumTranslationRegistry {
8
- constructor(availableLanguages, translateFn) {
9
- this.translations = new Map();
10
- this.enumNames = new WeakMap();
11
- this.availableLanguages = new Set(availableLanguages);
12
- this.translateFn = translateFn;
13
- }
14
- /**
15
- * Registers an enumeration with its translations and a name.
16
- * @param enumObj The enumeration object
17
- * @param translations The translations for the enumeration
18
- * @param enumName The name of the enumeration
19
- */
20
- register(enumObj, translations, enumName) {
21
- this.validateTranslations(translations, enumName);
22
- this.translations.set(enumObj, translations);
23
- this.enumNames.set(enumObj, enumName);
24
- }
25
- /**
26
- * Translates a value from the given enumeration to the specified language.
27
- * @param enumObj The enumeration object
28
- * @param value The value to translate
29
- * @param language The target language for translation
30
- * @returns The translated string
31
- */
32
- translate(enumObj, value, language) {
33
- const translations = this.translations.get(enumObj);
34
- if (!translations) {
35
- const message = this.translateFn
36
- ? this.translateFn('Error_EnumNotFoundTemplate', {
37
- enumName: this.getEnumName(enumObj),
38
- })
39
- : `No translations found for enum: ${this.getEnumName(enumObj)}`;
40
- throw new Error(message);
41
- }
42
- const langTranslations = translations[language];
43
- if (!langTranslations) {
44
- const message = this.translateFn
45
- ? this.translateFn('Error_EnumLanguageNotFoundTemplate', {
46
- language,
47
- })
48
- : `No translations found for language: ${language}`;
49
- throw new Error(message);
50
- }
51
- let result = langTranslations[value];
52
- if (!result && typeof value === 'number') {
53
- const stringKey = Object.keys(enumObj).find((key) => enumObj[key] === value);
54
- if (stringKey) {
55
- result = langTranslations[stringKey];
56
- }
57
- }
58
- if (!result) {
59
- const message = this.translateFn
60
- ? this.translateFn('Error_EnumValueNotFoundTemplate', {
61
- value: String(value),
62
- })
63
- : `No translation found for value: ${String(value)}`;
64
- throw new Error(message);
65
- }
66
- return result;
67
- }
68
- /**
69
- * Gets the name of the enumeration.
70
- * @param enumObj The enumeration object
71
- * @returns The name of the enumeration
72
- */
73
- getEnumName(enumObj) {
74
- return this.enumNames.get(enumObj) || 'UnknownEnum';
75
- }
76
- /**
77
- * Checks if the registry has translations for the given enumeration.
78
- * @param enumObj The enumeration object
79
- * @returns True if translations exist, false otherwise
80
- */
81
- has(enumObj) {
82
- return this.translations.has(enumObj);
83
- }
84
- /**
85
- * Validates that enum translations only contain available languages.
86
- * @param translations The translations to validate
87
- * @param enumName The name of the enumeration for error messages
88
- */
89
- validateTranslations(translations, enumName) {
90
- for (const language of Object.keys(translations)) {
91
- if (!this.availableLanguages.has(language)) {
92
- const message = this.translateFn
93
- ? this.translateFn('Error_EnumLanguageNotAvailableTemplate', { language, enumName })
94
- : `Language '${language}' in enum '${enumName}' is not available in this engine instance`;
95
- throw new Error(message);
96
- }
97
- }
98
- }
99
- }
100
- exports.EnumTranslationRegistry = EnumTranslationRegistry;
@@ -1,50 +0,0 @@
1
- import { IActiveContext } from './active-context';
2
- import { CurrencyCode } from './currency-code';
3
- import { DefaultLanguageCode } from './default-config';
4
- import { IGlobalActiveContext } from './i-global-active-context';
5
- import { Timezone } from './timezone';
6
- import { LanguageContextSpace } from './types';
7
- export declare class GlobalActiveContext<TLanguage extends string, TActiveContext extends IActiveContext<TLanguage>> implements IGlobalActiveContext<TLanguage, TActiveContext> {
8
- protected static _contextMap: Map<string, IActiveContext<any>>;
9
- static readonly defaultContextKey = "default";
10
- static readonly defaultLanguage: DefaultLanguageCode;
11
- private static _instance;
12
- static get instance(): GlobalActiveContext<any, any>;
13
- static getInstance<TLanguage extends string, TActiveContext extends IActiveContext<TLanguage>>(): GlobalActiveContext<TLanguage, TActiveContext>;
14
- static overrideInstance(instance: GlobalActiveContext<any, any>): void;
15
- createContext(defaultLanguage: TLanguage, defaultAdminLanguage?: TLanguage, key?: string): TActiveContext;
16
- getContext(key?: string): TActiveContext;
17
- get context(): TActiveContext;
18
- set context(ctx: TActiveContext);
19
- setUserLanguage(language: TLanguage, key?: string): void;
20
- get userLanguage(): TLanguage;
21
- set userLanguage(lang: TLanguage);
22
- setCurrencyCode(code: CurrencyCode, key?: string): void;
23
- get currencyCode(): CurrencyCode;
24
- set currencyCode(code: CurrencyCode);
25
- /**
26
- * Sets the admin language for console operations
27
- * @param language The language to set for admin operations
28
- */
29
- setAdminLanguage(language: TLanguage, key?: string): void;
30
- get adminLanguage(): TLanguage;
31
- set adminLanguage(lang: TLanguage);
32
- /**
33
- * Sets the language context for the current context
34
- * @param context The language context to set
35
- */
36
- setLanguageContextSpace(context: LanguageContextSpace, key?: string): void;
37
- getLanguageContextSpace(key?: string): LanguageContextSpace;
38
- get languageContextSpace(): LanguageContextSpace;
39
- set languageContextSpace(context: LanguageContextSpace);
40
- setUserTimezone(tz: Timezone, key?: string): void;
41
- get userTimezone(): Timezone;
42
- set userTimezone(tz: Timezone);
43
- setAdminTimezone(tz: Timezone, key?: string): void;
44
- get adminTimezone(): Timezone;
45
- set adminTimezone(tz: Timezone);
46
- /**
47
- * Clear all contexts (useful for testing)
48
- */
49
- static clearAll(): void;
50
- }
@@ -1,177 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GlobalActiveContext = void 0;
4
- const context_error_1 = require("./context-error");
5
- const context_error_type_1 = require("./context-error-type");
6
- const currency_code_1 = require("./currency-code");
7
- const timezone_1 = require("./timezone");
8
- const types_1 = require("./types");
9
- class GlobalActiveContext {
10
- static get instance() {
11
- if (!this._instance) {
12
- this._instance = new GlobalActiveContext();
13
- this._instance.createContext(this.defaultLanguage);
14
- }
15
- return this._instance;
16
- }
17
- static getInstance() {
18
- if (!this._instance) {
19
- this._instance = new GlobalActiveContext();
20
- this._instance.createContext(this.defaultLanguage);
21
- }
22
- return this._instance;
23
- }
24
- static overrideInstance(instance) {
25
- this._instance = instance;
26
- }
27
- createContext(defaultLanguage, defaultAdminLanguage = defaultLanguage, key = GlobalActiveContext.defaultContextKey) {
28
- const newContext = {
29
- /**
30
- * The language to use for translations in the user facing ui
31
- */
32
- language: defaultLanguage,
33
- /**
34
- * The language to use for console/admin logs
35
- */
36
- adminLanguage: defaultAdminLanguage,
37
- currencyCode: new currency_code_1.CurrencyCode(types_1.DefaultCurrencyCode),
38
- /**
39
- * The current default context for language translations
40
- */
41
- currentContext: 'user',
42
- /**
43
- * The timezone for the user facing UI
44
- */
45
- timezone: new timezone_1.Timezone(types_1.DefaultTimezone),
46
- /**
47
- * The timezone for the admin console
48
- */
49
- adminTimezone: new timezone_1.Timezone('UTC'),
50
- };
51
- GlobalActiveContext._contextMap.set(key, newContext);
52
- return newContext;
53
- }
54
- getContext(key = GlobalActiveContext.defaultContextKey) {
55
- const context = GlobalActiveContext._contextMap.get(key);
56
- if (context) {
57
- return context;
58
- }
59
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
60
- }
61
- get context() {
62
- return this.getContext(GlobalActiveContext.defaultContextKey);
63
- }
64
- set context(ctx) {
65
- GlobalActiveContext._contextMap.set(GlobalActiveContext.defaultContextKey, ctx);
66
- }
67
- setUserLanguage(language, key = GlobalActiveContext.defaultContextKey) {
68
- const context = GlobalActiveContext._contextMap.get(key);
69
- if (context) {
70
- context.language = language;
71
- return;
72
- }
73
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
74
- }
75
- get userLanguage() {
76
- return this.context.language;
77
- }
78
- set userLanguage(lang) {
79
- this.context.language = lang;
80
- }
81
- setCurrencyCode(code, key = GlobalActiveContext.defaultContextKey) {
82
- const context = GlobalActiveContext._contextMap.get(key);
83
- if (context) {
84
- context.currencyCode = code;
85
- return;
86
- }
87
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
88
- }
89
- get currencyCode() {
90
- return this.context.currencyCode;
91
- }
92
- set currencyCode(code) {
93
- this.context.currencyCode = code;
94
- }
95
- /**
96
- * Sets the admin language for console operations
97
- * @param language The language to set for admin operations
98
- */
99
- setAdminLanguage(language, key = GlobalActiveContext.defaultContextKey) {
100
- const context = GlobalActiveContext._contextMap.get(key);
101
- if (context) {
102
- context.adminLanguage = language;
103
- return;
104
- }
105
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
106
- }
107
- get adminLanguage() {
108
- return this.context.adminLanguage;
109
- }
110
- set adminLanguage(lang) {
111
- this.context.adminLanguage = lang;
112
- }
113
- /**
114
- * Sets the language context for the current context
115
- * @param context The language context to set
116
- */
117
- setLanguageContextSpace(context, key = GlobalActiveContext.defaultContextKey) {
118
- const ctx = GlobalActiveContext._contextMap.get(key);
119
- if (ctx) {
120
- ctx.currentContext = context;
121
- return;
122
- }
123
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
124
- }
125
- getLanguageContextSpace(key = GlobalActiveContext.defaultContextKey) {
126
- const ctx = GlobalActiveContext._contextMap.get(key);
127
- if (ctx) {
128
- return ctx.currentContext;
129
- }
130
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
131
- }
132
- get languageContextSpace() {
133
- return this.context.currentContext;
134
- }
135
- set languageContextSpace(context) {
136
- this.context.currentContext = context;
137
- }
138
- setUserTimezone(tz, key = GlobalActiveContext.defaultContextKey) {
139
- const ctx = GlobalActiveContext._contextMap.get(key);
140
- if (ctx) {
141
- ctx.timezone = tz;
142
- return;
143
- }
144
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
145
- }
146
- get userTimezone() {
147
- return this.context.timezone;
148
- }
149
- set userTimezone(tz) {
150
- this.context.timezone = tz;
151
- }
152
- setAdminTimezone(tz, key = GlobalActiveContext.defaultContextKey) {
153
- const ctx = GlobalActiveContext._contextMap.get(key);
154
- if (ctx) {
155
- ctx.adminTimezone = tz;
156
- return;
157
- }
158
- throw new context_error_1.ContextError(context_error_type_1.ContextErrorType.InvalidContext, key);
159
- }
160
- get adminTimezone() {
161
- return this.context.adminTimezone;
162
- }
163
- set adminTimezone(tz) {
164
- this.context.adminTimezone = tz;
165
- }
166
- /**
167
- * Clear all contexts (useful for testing)
168
- */
169
- static clearAll() {
170
- GlobalActiveContext._contextMap.clear();
171
- GlobalActiveContext._instance = undefined;
172
- }
173
- }
174
- exports.GlobalActiveContext = GlobalActiveContext;
175
- GlobalActiveContext._contextMap = new Map();
176
- GlobalActiveContext.defaultContextKey = 'default';
177
- GlobalActiveContext.defaultLanguage = 'en-US';
@@ -1,13 +0,0 @@
1
- import { HandleableErrorOptions } from './i-handleable-error-options';
2
- import { IHandleable } from './i-handleable';
3
- export declare class HandleableError extends Error implements IHandleable {
4
- readonly cause?: Error;
5
- readonly statusCode: number;
6
- readonly sourceData?: unknown;
7
- private _handled;
8
- constructor(source: Error, options?: HandleableErrorOptions);
9
- get handled(): boolean;
10
- set handled(value: boolean);
11
- private serializeValue;
12
- toJSON(): Record<string, unknown>;
13
- }