@magmamath/frontend-config 1.1.2-rc.22 → 1.1.2-rc.23

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.
@@ -13,12 +13,17 @@ type StorageConfig = {
13
13
  setItem(key: string, value: string): void;
14
14
  };
15
15
  };
16
+ type TranslationData = {
17
+ [key: string]: string | null | undefined | TranslationData;
18
+ };
19
+ type FallbackResources = Record<string, TranslationData | (() => Promise<TranslationData>)>;
16
20
  type TranslationManagerOptions = {
17
21
  isDev: boolean;
18
22
  projectId: string;
19
23
  i18nOptions: InitOptions;
20
24
  isMobile?: boolean;
21
25
  storage?: StorageConfig;
26
+ fallbackResources?: FallbackResources;
22
27
  };
23
28
  type OnTranslationInitCallback = (locale: Locale) => void;
24
29
 
@@ -28,10 +33,11 @@ declare class TranslationManager {
28
33
  private readonly i18nOptions;
29
34
  private readonly isMobile;
30
35
  private readonly onInitCallbacks;
36
+ private readonly fallbackResources?;
31
37
  private readonly storage?;
32
38
  private tolgeeCfg;
33
39
  private initPromise;
34
- constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
40
+ constructor({ projectId, isDev, i18nOptions, storage, isMobile, fallbackResources, }: TranslationManagerOptions);
35
41
  readonly onInit: (callback: OnTranslationInitCallback) => void;
36
42
  readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
37
43
  readonly setLanguage: (locale: Locale) => Promise<void>;
@@ -13,12 +13,17 @@ type StorageConfig = {
13
13
  setItem(key: string, value: string): void;
14
14
  };
15
15
  };
16
+ type TranslationData = {
17
+ [key: string]: string | null | undefined | TranslationData;
18
+ };
19
+ type FallbackResources = Record<string, TranslationData | (() => Promise<TranslationData>)>;
16
20
  type TranslationManagerOptions = {
17
21
  isDev: boolean;
18
22
  projectId: string;
19
23
  i18nOptions: InitOptions;
20
24
  isMobile?: boolean;
21
25
  storage?: StorageConfig;
26
+ fallbackResources?: FallbackResources;
22
27
  };
23
28
  type OnTranslationInitCallback = (locale: Locale) => void;
24
29
 
@@ -28,10 +33,11 @@ declare class TranslationManager {
28
33
  private readonly i18nOptions;
29
34
  private readonly isMobile;
30
35
  private readonly onInitCallbacks;
36
+ private readonly fallbackResources?;
31
37
  private readonly storage?;
32
38
  private tolgeeCfg;
33
39
  private initPromise;
34
- constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
40
+ constructor({ projectId, isDev, i18nOptions, storage, isMobile, fallbackResources, }: TranslationManagerOptions);
35
41
  readonly onInit: (callback: OnTranslationInitCallback) => void;
36
42
  readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
37
43
  readonly setLanguage: (locale: Locale) => Promise<void>;
@@ -42,15 +42,24 @@ var TranslationManager = class {
42
42
  i18nOptions;
43
43
  isMobile;
44
44
  onInitCallbacks = [];
45
+ fallbackResources;
45
46
  storage;
46
47
  tolgeeCfg = null;
47
48
  initPromise = null;
48
- constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
49
+ constructor({
50
+ projectId,
51
+ isDev,
52
+ i18nOptions,
53
+ storage,
54
+ isMobile = false,
55
+ fallbackResources
56
+ }) {
49
57
  this.projectId = projectId;
50
58
  this.isDev = isDev;
51
59
  this.i18nOptions = i18nOptions;
52
60
  this.storage = storage;
53
61
  this.isMobile = isMobile;
62
+ this.fallbackResources = fallbackResources;
54
63
  }
55
64
  onInit = (callback) => {
56
65
  this.onInitCallbacks.push(callback);
@@ -76,7 +85,7 @@ var TranslationManager = class {
76
85
  };
77
86
  initI18n = async (locale) => {
78
87
  if (!this.tolgeeCfg) return;
79
- const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
88
+ const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init({ staticData: this.fallbackResources });
80
89
  await i18next.withTolgee(i18n__default.default, tolgee).use(reactI18next.initReactI18next).init({
81
90
  ...DEFAULT_I18N_OPTIONS,
82
91
  ...this.i18nOptions,
@@ -87,7 +96,8 @@ var TranslationManager = class {
87
96
  createBaseTolgeeInstance = (tolgeeCfg) => {
88
97
  return i18next.Tolgee().use(i18next.I18nextPlugin()).use(
89
98
  i18next.BackendFetch({
90
- prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
99
+ prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,
100
+ fallbackOnFail: true
91
101
  })
92
102
  );
93
103
  };
@@ -101,6 +111,7 @@ var TranslationManager = class {
101
111
  return instance.init({
102
112
  apiUrl: tolgeeCfg.apiUrl,
103
113
  apiKey: tolgeeCfg.apiKey,
114
+ staticData: this.fallbackResources,
104
115
  fetch: (input, init) => {
105
116
  const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
106
117
  const controller = new AbortController();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace","i18n","withTolgee","initReactI18next","Tolgee","I18nextPlugin","BackendFetch"],"mappings":"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","file":"index.js","sourcesContent":["import { InitOptions } from 'i18next'\n\nexport enum TranslationNamespace {\n STUDENTS_WEB = 'students-web',\n TEACHERS_WEB = 'teachers-web',\n DISTRICT_DASH = 'district-dash',\n AUTH_WEB = 'auth-web',\n MOBILE = 'mobile',\n MAGMAMATH_FEATURES = 'magmamath-features',\n DRAW_BOARD = 'drawboard',\n STUDENTS_FEATURES = 'students-features',\n SHARED = 'shared',\n}\n\nexport const TOLGEE_DEV_TIMEOUT_MS = 3000\n\nexport const DEFAULT_I18N_OPTIONS: InitOptions = {\n fallbackLng: undefined,\n load: 'currentOnly',\n react: {\n useSuspense: false,\n },\n interpolation: {\n escapeValue: false,\n },\n}\n","import i18n, { InitOptions } from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport type { TolgeeInstance } from '@tolgee/i18next'\nimport { BackendFetch, I18nextPlugin, Tolgee, withTolgee } from '@tolgee/i18next'\nimport { Locale } from '../shared/constants/common.constants'\nimport { OnTranslationInitCallback, StorageConfig, TolgeeConfig, TranslationManagerOptions } from './translation.types'\nimport { DEFAULT_I18N_OPTIONS, TOLGEE_DEV_TIMEOUT_MS } from './translation.constants'\n\nexport class TranslationManager {\n private readonly projectId: string\n private readonly isDev: boolean\n private readonly i18nOptions: InitOptions\n private readonly isMobile: boolean\n private readonly onInitCallbacks: OnTranslationInitCallback[] = []\n private readonly storage?: StorageConfig\n\n private tolgeeCfg: TolgeeConfig | null = null\n private initPromise: Promise<void> | null = null\n\n constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }: TranslationManagerOptions) {\n this.projectId = projectId\n this.isDev = isDev\n this.i18nOptions = i18nOptions\n this.storage = storage\n this.isMobile = isMobile\n }\n\n public readonly onInit = (callback: OnTranslationInitCallback) => {\n this.onInitCallbacks.push(callback)\n }\n\n public readonly init = async (locale: Locale, envConfig: TolgeeConfig) => {\n this.tolgeeCfg = envConfig\n\n if (!this.initPromise) {\n this.initPromise = this.initI18n(locale).catch((error) => {\n this.initPromise = null\n throw error\n })\n }\n await this.initPromise\n }\n\n public readonly setLanguage = async (locale: Locale) => {\n if (!i18n.isInitialized) return\n\n if (this.storage) {\n this.storage.adapter.setItem(this.storage.key, locale)\n }\n\n if (i18n.language !== locale) {\n await i18n.changeLanguage(locale)\n }\n }\n\n private readonly initI18n = async (locale: Locale) => {\n if (!this.tolgeeCfg) return\n\n const tolgee = this.isDev\n ? await this.initTolgeeDevTools(this.tolgeeCfg)\n : this.createBaseTolgeeInstance(this.tolgeeCfg).init()\n\n await withTolgee(i18n, tolgee)\n .use(initReactI18next)\n .init({\n ...DEFAULT_I18N_OPTIONS,\n ...this.i18nOptions,\n lng: locale,\n })\n\n this.onInitCallbacks.forEach((callback) => callback(locale))\n }\n\n private readonly createBaseTolgeeInstance = (tolgeeCfg: TolgeeConfig) => {\n return Tolgee()\n .use(I18nextPlugin())\n .use(\n BackendFetch({\n prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,\n })\n )\n }\n\n private readonly initTolgeeDevTools = async (tolgeeCfg: TolgeeConfig): Promise<TolgeeInstance> => {\n const { DevBackend } = await import('@tolgee/i18next')\n\n const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend())\n\n if (!this.isMobile) {\n const { InContextTools } = await import('@tolgee/web/tools')\n instance.use(InContextTools())\n }\n\n return instance.init({\n apiUrl: tolgeeCfg.apiUrl,\n apiKey: tolgeeCfg.apiKey,\n fetch: (input, init) => {\n // hermes appends trailing slash to the url, we need to remove it\n const url = typeof input === 'string' ? input.replace(/\\/\\?/, '?') : input\n const controller = new AbortController()\n setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS)\n return fetch(url, { ...init, signal: controller.signal })\n },\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace","i18n","withTolgee","initReactI18next","Tolgee","I18nextPlugin","BackendFetch"],"mappings":"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","file":"index.js","sourcesContent":["import { InitOptions } from 'i18next'\n\nexport enum TranslationNamespace {\n STUDENTS_WEB = 'students-web',\n TEACHERS_WEB = 'teachers-web',\n DISTRICT_DASH = 'district-dash',\n AUTH_WEB = 'auth-web',\n MOBILE = 'mobile',\n MAGMAMATH_FEATURES = 'magmamath-features',\n DRAW_BOARD = 'drawboard',\n STUDENTS_FEATURES = 'students-features',\n SHARED = 'shared',\n}\n\nexport const TOLGEE_DEV_TIMEOUT_MS = 3000\n\nexport const DEFAULT_I18N_OPTIONS: InitOptions = {\n fallbackLng: undefined,\n load: 'currentOnly',\n react: {\n useSuspense: false,\n },\n interpolation: {\n escapeValue: false,\n },\n}\n","import i18n, { InitOptions } from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport type { TolgeeInstance } from '@tolgee/i18next'\nimport { BackendFetch, I18nextPlugin, Tolgee, withTolgee } from '@tolgee/i18next'\nimport { Locale } from '../shared/constants/common.constants'\nimport {\n FallbackResources,\n OnTranslationInitCallback,\n StorageConfig,\n TolgeeConfig,\n TranslationManagerOptions,\n} from './translation.types'\nimport { DEFAULT_I18N_OPTIONS, TOLGEE_DEV_TIMEOUT_MS } from './translation.constants'\n\nexport class TranslationManager {\n private readonly projectId: string\n private readonly isDev: boolean\n private readonly i18nOptions: InitOptions\n private readonly isMobile: boolean\n private readonly onInitCallbacks: OnTranslationInitCallback[] = []\n private readonly fallbackResources?: FallbackResources\n private readonly storage?: StorageConfig\n\n private tolgeeCfg: TolgeeConfig | null = null\n private initPromise: Promise<void> | null = null\n\n constructor({\n projectId,\n isDev,\n i18nOptions,\n storage,\n isMobile = false,\n fallbackResources,\n }: TranslationManagerOptions) {\n this.projectId = projectId\n this.isDev = isDev\n this.i18nOptions = i18nOptions\n this.storage = storage\n this.isMobile = isMobile\n this.fallbackResources = fallbackResources\n }\n\n public readonly onInit = (callback: OnTranslationInitCallback) => {\n this.onInitCallbacks.push(callback)\n }\n\n public readonly init = async (locale: Locale, envConfig: TolgeeConfig) => {\n this.tolgeeCfg = envConfig\n\n if (!this.initPromise) {\n this.initPromise = this.initI18n(locale).catch((error) => {\n this.initPromise = null\n throw error\n })\n }\n await this.initPromise\n }\n\n public readonly setLanguage = async (locale: Locale) => {\n if (!i18n.isInitialized) return\n\n if (this.storage) {\n this.storage.adapter.setItem(this.storage.key, locale)\n }\n\n if (i18n.language !== locale) {\n await i18n.changeLanguage(locale)\n }\n }\n\n private readonly initI18n = async (locale: Locale) => {\n if (!this.tolgeeCfg) return\n\n const tolgee = this.isDev\n ? await this.initTolgeeDevTools(this.tolgeeCfg)\n : this.createBaseTolgeeInstance(this.tolgeeCfg).init({ staticData: this.fallbackResources })\n\n await withTolgee(i18n, tolgee)\n .use(initReactI18next)\n .init({\n ...DEFAULT_I18N_OPTIONS,\n ...this.i18nOptions,\n lng: locale,\n })\n\n this.onInitCallbacks.forEach((callback) => callback(locale))\n }\n\n private readonly createBaseTolgeeInstance = (tolgeeCfg: TolgeeConfig) => {\n return Tolgee()\n .use(I18nextPlugin())\n .use(\n BackendFetch({\n prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,\n fallbackOnFail: true,\n })\n )\n }\n\n private readonly initTolgeeDevTools = async (tolgeeCfg: TolgeeConfig): Promise<TolgeeInstance> => {\n const { DevBackend } = await import('@tolgee/i18next')\n\n const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend())\n\n if (!this.isMobile) {\n const { InContextTools } = await import('@tolgee/web/tools')\n instance.use(InContextTools())\n }\n\n return instance.init({\n apiUrl: tolgeeCfg.apiUrl,\n apiKey: tolgeeCfg.apiKey,\n staticData: this.fallbackResources,\n fetch: (input, init) => {\n // hermes appends trailing slash to the url, we need to remove it\n const url = typeof input === 'string' ? input.replace(/\\/\\?/, '?') : input\n const controller = new AbortController()\n setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS)\n return fetch(url, { ...init, signal: controller.signal })\n },\n })\n }\n}\n"]}
@@ -36,15 +36,24 @@ var TranslationManager = class {
36
36
  i18nOptions;
37
37
  isMobile;
38
38
  onInitCallbacks = [];
39
+ fallbackResources;
39
40
  storage;
40
41
  tolgeeCfg = null;
41
42
  initPromise = null;
42
- constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
43
+ constructor({
44
+ projectId,
45
+ isDev,
46
+ i18nOptions,
47
+ storage,
48
+ isMobile = false,
49
+ fallbackResources
50
+ }) {
43
51
  this.projectId = projectId;
44
52
  this.isDev = isDev;
45
53
  this.i18nOptions = i18nOptions;
46
54
  this.storage = storage;
47
55
  this.isMobile = isMobile;
56
+ this.fallbackResources = fallbackResources;
48
57
  }
49
58
  onInit = (callback) => {
50
59
  this.onInitCallbacks.push(callback);
@@ -70,7 +79,7 @@ var TranslationManager = class {
70
79
  };
71
80
  initI18n = async (locale) => {
72
81
  if (!this.tolgeeCfg) return;
73
- const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
82
+ const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init({ staticData: this.fallbackResources });
74
83
  await withTolgee(i18n, tolgee).use(initReactI18next).init({
75
84
  ...DEFAULT_I18N_OPTIONS,
76
85
  ...this.i18nOptions,
@@ -81,7 +90,8 @@ var TranslationManager = class {
81
90
  createBaseTolgeeInstance = (tolgeeCfg) => {
82
91
  return Tolgee().use(I18nextPlugin()).use(
83
92
  BackendFetch({
84
- prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
93
+ prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,
94
+ fallbackOnFail: true
85
95
  })
86
96
  );
87
97
  };
@@ -95,6 +105,7 @@ var TranslationManager = class {
95
105
  return instance.init({
96
106
  apiUrl: tolgeeCfg.apiUrl,
97
107
  apiKey: tolgeeCfg.apiKey,
108
+ staticData: this.fallbackResources,
98
109
  fetch: (input, init) => {
99
110
  const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
100
111
  const controller = new AbortController();
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace"],"mappings":"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","file":"index.mjs","sourcesContent":["import { InitOptions } from 'i18next'\n\nexport enum TranslationNamespace {\n STUDENTS_WEB = 'students-web',\n TEACHERS_WEB = 'teachers-web',\n DISTRICT_DASH = 'district-dash',\n AUTH_WEB = 'auth-web',\n MOBILE = 'mobile',\n MAGMAMATH_FEATURES = 'magmamath-features',\n DRAW_BOARD = 'drawboard',\n STUDENTS_FEATURES = 'students-features',\n SHARED = 'shared',\n}\n\nexport const TOLGEE_DEV_TIMEOUT_MS = 3000\n\nexport const DEFAULT_I18N_OPTIONS: InitOptions = {\n fallbackLng: undefined,\n load: 'currentOnly',\n react: {\n useSuspense: false,\n },\n interpolation: {\n escapeValue: false,\n },\n}\n","import i18n, { InitOptions } from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport type { TolgeeInstance } from '@tolgee/i18next'\nimport { BackendFetch, I18nextPlugin, Tolgee, withTolgee } from '@tolgee/i18next'\nimport { Locale } from '../shared/constants/common.constants'\nimport { OnTranslationInitCallback, StorageConfig, TolgeeConfig, TranslationManagerOptions } from './translation.types'\nimport { DEFAULT_I18N_OPTIONS, TOLGEE_DEV_TIMEOUT_MS } from './translation.constants'\n\nexport class TranslationManager {\n private readonly projectId: string\n private readonly isDev: boolean\n private readonly i18nOptions: InitOptions\n private readonly isMobile: boolean\n private readonly onInitCallbacks: OnTranslationInitCallback[] = []\n private readonly storage?: StorageConfig\n\n private tolgeeCfg: TolgeeConfig | null = null\n private initPromise: Promise<void> | null = null\n\n constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }: TranslationManagerOptions) {\n this.projectId = projectId\n this.isDev = isDev\n this.i18nOptions = i18nOptions\n this.storage = storage\n this.isMobile = isMobile\n }\n\n public readonly onInit = (callback: OnTranslationInitCallback) => {\n this.onInitCallbacks.push(callback)\n }\n\n public readonly init = async (locale: Locale, envConfig: TolgeeConfig) => {\n this.tolgeeCfg = envConfig\n\n if (!this.initPromise) {\n this.initPromise = this.initI18n(locale).catch((error) => {\n this.initPromise = null\n throw error\n })\n }\n await this.initPromise\n }\n\n public readonly setLanguage = async (locale: Locale) => {\n if (!i18n.isInitialized) return\n\n if (this.storage) {\n this.storage.adapter.setItem(this.storage.key, locale)\n }\n\n if (i18n.language !== locale) {\n await i18n.changeLanguage(locale)\n }\n }\n\n private readonly initI18n = async (locale: Locale) => {\n if (!this.tolgeeCfg) return\n\n const tolgee = this.isDev\n ? await this.initTolgeeDevTools(this.tolgeeCfg)\n : this.createBaseTolgeeInstance(this.tolgeeCfg).init()\n\n await withTolgee(i18n, tolgee)\n .use(initReactI18next)\n .init({\n ...DEFAULT_I18N_OPTIONS,\n ...this.i18nOptions,\n lng: locale,\n })\n\n this.onInitCallbacks.forEach((callback) => callback(locale))\n }\n\n private readonly createBaseTolgeeInstance = (tolgeeCfg: TolgeeConfig) => {\n return Tolgee()\n .use(I18nextPlugin())\n .use(\n BackendFetch({\n prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,\n })\n )\n }\n\n private readonly initTolgeeDevTools = async (tolgeeCfg: TolgeeConfig): Promise<TolgeeInstance> => {\n const { DevBackend } = await import('@tolgee/i18next')\n\n const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend())\n\n if (!this.isMobile) {\n const { InContextTools } = await import('@tolgee/web/tools')\n instance.use(InContextTools())\n }\n\n return instance.init({\n apiUrl: tolgeeCfg.apiUrl,\n apiKey: tolgeeCfg.apiKey,\n fetch: (input, init) => {\n // hermes appends trailing slash to the url, we need to remove it\n const url = typeof input === 'string' ? input.replace(/\\/\\?/, '?') : input\n const controller = new AbortController()\n setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS)\n return fetch(url, { ...init, signal: controller.signal })\n },\n })\n }\n}\n"]}
1
+ {"version":3,"sources":["../../src/translation/translation.constants.ts","../../src/translation/TranslationManager.ts"],"names":["TranslationNamespace"],"mappings":"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","file":"index.mjs","sourcesContent":["import { InitOptions } from 'i18next'\n\nexport enum TranslationNamespace {\n STUDENTS_WEB = 'students-web',\n TEACHERS_WEB = 'teachers-web',\n DISTRICT_DASH = 'district-dash',\n AUTH_WEB = 'auth-web',\n MOBILE = 'mobile',\n MAGMAMATH_FEATURES = 'magmamath-features',\n DRAW_BOARD = 'drawboard',\n STUDENTS_FEATURES = 'students-features',\n SHARED = 'shared',\n}\n\nexport const TOLGEE_DEV_TIMEOUT_MS = 3000\n\nexport const DEFAULT_I18N_OPTIONS: InitOptions = {\n fallbackLng: undefined,\n load: 'currentOnly',\n react: {\n useSuspense: false,\n },\n interpolation: {\n escapeValue: false,\n },\n}\n","import i18n, { InitOptions } from 'i18next'\nimport { initReactI18next } from 'react-i18next'\nimport type { TolgeeInstance } from '@tolgee/i18next'\nimport { BackendFetch, I18nextPlugin, Tolgee, withTolgee } from '@tolgee/i18next'\nimport { Locale } from '../shared/constants/common.constants'\nimport {\n FallbackResources,\n OnTranslationInitCallback,\n StorageConfig,\n TolgeeConfig,\n TranslationManagerOptions,\n} from './translation.types'\nimport { DEFAULT_I18N_OPTIONS, TOLGEE_DEV_TIMEOUT_MS } from './translation.constants'\n\nexport class TranslationManager {\n private readonly projectId: string\n private readonly isDev: boolean\n private readonly i18nOptions: InitOptions\n private readonly isMobile: boolean\n private readonly onInitCallbacks: OnTranslationInitCallback[] = []\n private readonly fallbackResources?: FallbackResources\n private readonly storage?: StorageConfig\n\n private tolgeeCfg: TolgeeConfig | null = null\n private initPromise: Promise<void> | null = null\n\n constructor({\n projectId,\n isDev,\n i18nOptions,\n storage,\n isMobile = false,\n fallbackResources,\n }: TranslationManagerOptions) {\n this.projectId = projectId\n this.isDev = isDev\n this.i18nOptions = i18nOptions\n this.storage = storage\n this.isMobile = isMobile\n this.fallbackResources = fallbackResources\n }\n\n public readonly onInit = (callback: OnTranslationInitCallback) => {\n this.onInitCallbacks.push(callback)\n }\n\n public readonly init = async (locale: Locale, envConfig: TolgeeConfig) => {\n this.tolgeeCfg = envConfig\n\n if (!this.initPromise) {\n this.initPromise = this.initI18n(locale).catch((error) => {\n this.initPromise = null\n throw error\n })\n }\n await this.initPromise\n }\n\n public readonly setLanguage = async (locale: Locale) => {\n if (!i18n.isInitialized) return\n\n if (this.storage) {\n this.storage.adapter.setItem(this.storage.key, locale)\n }\n\n if (i18n.language !== locale) {\n await i18n.changeLanguage(locale)\n }\n }\n\n private readonly initI18n = async (locale: Locale) => {\n if (!this.tolgeeCfg) return\n\n const tolgee = this.isDev\n ? await this.initTolgeeDevTools(this.tolgeeCfg)\n : this.createBaseTolgeeInstance(this.tolgeeCfg).init({ staticData: this.fallbackResources })\n\n await withTolgee(i18n, tolgee)\n .use(initReactI18next)\n .init({\n ...DEFAULT_I18N_OPTIONS,\n ...this.i18nOptions,\n lng: locale,\n })\n\n this.onInitCallbacks.forEach((callback) => callback(locale))\n }\n\n private readonly createBaseTolgeeInstance = (tolgeeCfg: TolgeeConfig) => {\n return Tolgee()\n .use(I18nextPlugin())\n .use(\n BackendFetch({\n prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`,\n fallbackOnFail: true,\n })\n )\n }\n\n private readonly initTolgeeDevTools = async (tolgeeCfg: TolgeeConfig): Promise<TolgeeInstance> => {\n const { DevBackend } = await import('@tolgee/i18next')\n\n const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend())\n\n if (!this.isMobile) {\n const { InContextTools } = await import('@tolgee/web/tools')\n instance.use(InContextTools())\n }\n\n return instance.init({\n apiUrl: tolgeeCfg.apiUrl,\n apiKey: tolgeeCfg.apiKey,\n staticData: this.fallbackResources,\n fetch: (input, init) => {\n // hermes appends trailing slash to the url, we need to remove it\n const url = typeof input === 'string' ? input.replace(/\\/\\?/, '?') : input\n const controller = new AbortController()\n setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS)\n return fetch(url, { ...init, signal: controller.signal })\n },\n })\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@magmamath/frontend-config",
3
- "version": "1.1.2-rc.22",
3
+ "version": "1.1.2-rc.23",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",