@magmamath/frontend-config 1.1.2-rc.2 → 1.1.2-rc.21

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.
@@ -0,0 +1,55 @@
1
+ import { a as Locale } from '../common.constants-ClvjFWRr.mjs';
2
+ import { InitOptions } from 'i18next';
3
+
4
+ type TolgeeConfig = {
5
+ cdnHost: string;
6
+ apiUrl?: string;
7
+ apiKey?: string;
8
+ };
9
+ type StorageConfig = {
10
+ key: string;
11
+ adapter: {
12
+ getItem(key: string): string | null;
13
+ setItem(key: string, value: string): void;
14
+ };
15
+ };
16
+ type TranslationManagerOptions = {
17
+ isDev: boolean;
18
+ projectId: string;
19
+ i18nOptions: InitOptions;
20
+ isMobile?: boolean;
21
+ storage?: StorageConfig;
22
+ };
23
+ type OnTranslationInitCallback = (locale: Locale) => void;
24
+
25
+ declare class TranslationManager {
26
+ private readonly projectId;
27
+ private readonly isDev;
28
+ private readonly i18nOptions;
29
+ private readonly isMobile;
30
+ private readonly onInitCallbacks;
31
+ private readonly storage?;
32
+ private tolgeeCfg;
33
+ private initPromise;
34
+ constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
35
+ readonly onInit: (callback: OnTranslationInitCallback) => void;
36
+ readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
37
+ readonly setLanguage: (locale: Locale) => Promise<void>;
38
+ private readonly initI18n;
39
+ private readonly createBaseTolgeeInstance;
40
+ private readonly initTolgeeDevTools;
41
+ }
42
+
43
+ declare enum TranslationNamespace {
44
+ STUDENTS_WEB = "students-web",
45
+ TEACHERS_WEB = "teachers-web",
46
+ DISTRICT_DASH = "district-dash",
47
+ AUTH_WEB = "auth-web",
48
+ MOBILE = "mobile",
49
+ MAGMAMATH_FEATURES = "magmamath-features",
50
+ DRAW_BOARD = "drawboard",
51
+ STUDENTS_FEATURES = "students-features",
52
+ SHARED = "shared"
53
+ }
54
+
55
+ export { type OnTranslationInitCallback, type TolgeeConfig, TranslationManager, type TranslationManagerOptions, TranslationNamespace };
@@ -0,0 +1,55 @@
1
+ import { a as Locale } from '../common.constants-ClvjFWRr.js';
2
+ import { InitOptions } from 'i18next';
3
+
4
+ type TolgeeConfig = {
5
+ cdnHost: string;
6
+ apiUrl?: string;
7
+ apiKey?: string;
8
+ };
9
+ type StorageConfig = {
10
+ key: string;
11
+ adapter: {
12
+ getItem(key: string): string | null;
13
+ setItem(key: string, value: string): void;
14
+ };
15
+ };
16
+ type TranslationManagerOptions = {
17
+ isDev: boolean;
18
+ projectId: string;
19
+ i18nOptions: InitOptions;
20
+ isMobile?: boolean;
21
+ storage?: StorageConfig;
22
+ };
23
+ type OnTranslationInitCallback = (locale: Locale) => void;
24
+
25
+ declare class TranslationManager {
26
+ private readonly projectId;
27
+ private readonly isDev;
28
+ private readonly i18nOptions;
29
+ private readonly isMobile;
30
+ private readonly onInitCallbacks;
31
+ private readonly storage?;
32
+ private tolgeeCfg;
33
+ private initPromise;
34
+ constructor({ projectId, isDev, i18nOptions, storage, isMobile }: TranslationManagerOptions);
35
+ readonly onInit: (callback: OnTranslationInitCallback) => void;
36
+ readonly init: (locale: Locale, envConfig: TolgeeConfig) => Promise<void>;
37
+ readonly setLanguage: (locale: Locale) => Promise<void>;
38
+ private readonly initI18n;
39
+ private readonly createBaseTolgeeInstance;
40
+ private readonly initTolgeeDevTools;
41
+ }
42
+
43
+ declare enum TranslationNamespace {
44
+ STUDENTS_WEB = "students-web",
45
+ TEACHERS_WEB = "teachers-web",
46
+ DISTRICT_DASH = "district-dash",
47
+ AUTH_WEB = "auth-web",
48
+ MOBILE = "mobile",
49
+ MAGMAMATH_FEATURES = "magmamath-features",
50
+ DRAW_BOARD = "drawboard",
51
+ STUDENTS_FEATURES = "students-features",
52
+ SHARED = "shared"
53
+ }
54
+
55
+ export { type OnTranslationInitCallback, type TolgeeConfig, TranslationManager, type TranslationManagerOptions, TranslationNamespace };
@@ -0,0 +1,117 @@
1
+ 'use strict';
2
+
3
+ var i18n = require('i18next');
4
+ var reactI18next = require('react-i18next');
5
+ var i18next = require('@tolgee/i18next');
6
+
7
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
8
+
9
+ var i18n__default = /*#__PURE__*/_interopDefault(i18n);
10
+
11
+ // src/translation/TranslationManager.ts
12
+
13
+ // src/translation/translation.constants.ts
14
+ var TranslationNamespace = /* @__PURE__ */ ((TranslationNamespace2) => {
15
+ TranslationNamespace2["STUDENTS_WEB"] = "students-web";
16
+ TranslationNamespace2["TEACHERS_WEB"] = "teachers-web";
17
+ TranslationNamespace2["DISTRICT_DASH"] = "district-dash";
18
+ TranslationNamespace2["AUTH_WEB"] = "auth-web";
19
+ TranslationNamespace2["MOBILE"] = "mobile";
20
+ TranslationNamespace2["MAGMAMATH_FEATURES"] = "magmamath-features";
21
+ TranslationNamespace2["DRAW_BOARD"] = "drawboard";
22
+ TranslationNamespace2["STUDENTS_FEATURES"] = "students-features";
23
+ TranslationNamespace2["SHARED"] = "shared";
24
+ return TranslationNamespace2;
25
+ })(TranslationNamespace || {});
26
+ var TOLGEE_DEV_TIMEOUT_MS = 3e3;
27
+ var DEFAULT_I18N_OPTIONS = {
28
+ fallbackLng: void 0,
29
+ load: "currentOnly",
30
+ react: {
31
+ useSuspense: false
32
+ },
33
+ interpolation: {
34
+ escapeValue: false
35
+ }
36
+ };
37
+
38
+ // src/translation/TranslationManager.ts
39
+ var TranslationManager = class {
40
+ projectId;
41
+ isDev;
42
+ i18nOptions;
43
+ isMobile;
44
+ onInitCallbacks = [];
45
+ storage;
46
+ tolgeeCfg = null;
47
+ initPromise = null;
48
+ constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
49
+ this.projectId = projectId;
50
+ this.isDev = isDev;
51
+ this.i18nOptions = i18nOptions;
52
+ this.storage = storage;
53
+ this.isMobile = isMobile;
54
+ }
55
+ onInit = (callback) => {
56
+ this.onInitCallbacks.push(callback);
57
+ };
58
+ init = async (locale, envConfig) => {
59
+ this.tolgeeCfg = envConfig;
60
+ if (!this.initPromise) {
61
+ this.initPromise = this.initI18n(locale).catch((error) => {
62
+ this.initPromise = null;
63
+ throw error;
64
+ });
65
+ }
66
+ await this.initPromise;
67
+ };
68
+ setLanguage = async (locale) => {
69
+ if (!i18n__default.default.isInitialized) return;
70
+ if (this.storage) {
71
+ this.storage.adapter.setItem(this.storage.key, locale);
72
+ }
73
+ if (i18n__default.default.language !== locale) {
74
+ await i18n__default.default.changeLanguage(locale);
75
+ }
76
+ };
77
+ initI18n = async (locale) => {
78
+ if (!this.tolgeeCfg) return;
79
+ const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
80
+ await i18next.withTolgee(i18n__default.default, tolgee).use(reactI18next.initReactI18next).init({
81
+ ...DEFAULT_I18N_OPTIONS,
82
+ ...this.i18nOptions,
83
+ lng: locale
84
+ });
85
+ this.onInitCallbacks.forEach((callback) => callback(locale));
86
+ };
87
+ createBaseTolgeeInstance = (tolgeeCfg) => {
88
+ return i18next.Tolgee().use(i18next.I18nextPlugin()).use(
89
+ i18next.BackendFetch({
90
+ prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
91
+ })
92
+ );
93
+ };
94
+ initTolgeeDevTools = async (tolgeeCfg) => {
95
+ const { DevBackend } = await import('@tolgee/i18next');
96
+ const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend());
97
+ if (!this.isMobile) {
98
+ const { InContextTools } = await import('@tolgee/web/tools');
99
+ instance.use(InContextTools());
100
+ }
101
+ return instance.init({
102
+ apiUrl: tolgeeCfg.apiUrl,
103
+ apiKey: tolgeeCfg.apiKey,
104
+ fetch: (input, init) => {
105
+ const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
106
+ const controller = new AbortController();
107
+ setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS);
108
+ return fetch(url, { ...init, signal: controller.signal });
109
+ }
110
+ });
111
+ };
112
+ };
113
+
114
+ exports.TranslationManager = TranslationManager;
115
+ exports.TranslationNamespace = TranslationNamespace;
116
+ //# sourceMappingURL=index.js.map
117
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"]}
@@ -0,0 +1,110 @@
1
+ import i18n from 'i18next';
2
+ import { initReactI18next } from 'react-i18next';
3
+ import { withTolgee, Tolgee, I18nextPlugin, BackendFetch } from '@tolgee/i18next';
4
+
5
+ // src/translation/TranslationManager.ts
6
+
7
+ // src/translation/translation.constants.ts
8
+ var TranslationNamespace = /* @__PURE__ */ ((TranslationNamespace2) => {
9
+ TranslationNamespace2["STUDENTS_WEB"] = "students-web";
10
+ TranslationNamespace2["TEACHERS_WEB"] = "teachers-web";
11
+ TranslationNamespace2["DISTRICT_DASH"] = "district-dash";
12
+ TranslationNamespace2["AUTH_WEB"] = "auth-web";
13
+ TranslationNamespace2["MOBILE"] = "mobile";
14
+ TranslationNamespace2["MAGMAMATH_FEATURES"] = "magmamath-features";
15
+ TranslationNamespace2["DRAW_BOARD"] = "drawboard";
16
+ TranslationNamespace2["STUDENTS_FEATURES"] = "students-features";
17
+ TranslationNamespace2["SHARED"] = "shared";
18
+ return TranslationNamespace2;
19
+ })(TranslationNamespace || {});
20
+ var TOLGEE_DEV_TIMEOUT_MS = 3e3;
21
+ var DEFAULT_I18N_OPTIONS = {
22
+ fallbackLng: void 0,
23
+ load: "currentOnly",
24
+ react: {
25
+ useSuspense: false
26
+ },
27
+ interpolation: {
28
+ escapeValue: false
29
+ }
30
+ };
31
+
32
+ // src/translation/TranslationManager.ts
33
+ var TranslationManager = class {
34
+ projectId;
35
+ isDev;
36
+ i18nOptions;
37
+ isMobile;
38
+ onInitCallbacks = [];
39
+ storage;
40
+ tolgeeCfg = null;
41
+ initPromise = null;
42
+ constructor({ projectId, isDev, i18nOptions, storage, isMobile = false }) {
43
+ this.projectId = projectId;
44
+ this.isDev = isDev;
45
+ this.i18nOptions = i18nOptions;
46
+ this.storage = storage;
47
+ this.isMobile = isMobile;
48
+ }
49
+ onInit = (callback) => {
50
+ this.onInitCallbacks.push(callback);
51
+ };
52
+ init = async (locale, envConfig) => {
53
+ this.tolgeeCfg = envConfig;
54
+ if (!this.initPromise) {
55
+ this.initPromise = this.initI18n(locale).catch((error) => {
56
+ this.initPromise = null;
57
+ throw error;
58
+ });
59
+ }
60
+ await this.initPromise;
61
+ };
62
+ setLanguage = async (locale) => {
63
+ if (!i18n.isInitialized) return;
64
+ if (this.storage) {
65
+ this.storage.adapter.setItem(this.storage.key, locale);
66
+ }
67
+ if (i18n.language !== locale) {
68
+ await i18n.changeLanguage(locale);
69
+ }
70
+ };
71
+ initI18n = async (locale) => {
72
+ if (!this.tolgeeCfg) return;
73
+ const tolgee = this.isDev ? await this.initTolgeeDevTools(this.tolgeeCfg) : this.createBaseTolgeeInstance(this.tolgeeCfg).init();
74
+ await withTolgee(i18n, tolgee).use(initReactI18next).init({
75
+ ...DEFAULT_I18N_OPTIONS,
76
+ ...this.i18nOptions,
77
+ lng: locale
78
+ });
79
+ this.onInitCallbacks.forEach((callback) => callback(locale));
80
+ };
81
+ createBaseTolgeeInstance = (tolgeeCfg) => {
82
+ return Tolgee().use(I18nextPlugin()).use(
83
+ BackendFetch({
84
+ prefix: `${tolgeeCfg.cdnHost}/${this.projectId}`
85
+ })
86
+ );
87
+ };
88
+ initTolgeeDevTools = async (tolgeeCfg) => {
89
+ const { DevBackend } = await import('@tolgee/i18next');
90
+ const instance = this.createBaseTolgeeInstance(tolgeeCfg).use(DevBackend());
91
+ if (!this.isMobile) {
92
+ const { InContextTools } = await import('@tolgee/web/tools');
93
+ instance.use(InContextTools());
94
+ }
95
+ return instance.init({
96
+ apiUrl: tolgeeCfg.apiUrl,
97
+ apiKey: tolgeeCfg.apiKey,
98
+ fetch: (input, init) => {
99
+ const url = typeof input === "string" ? input.replace(/\/\?/, "?") : input;
100
+ const controller = new AbortController();
101
+ setTimeout(() => controller.abort(), TOLGEE_DEV_TIMEOUT_MS);
102
+ return fetch(url, { ...init, signal: controller.signal });
103
+ }
104
+ });
105
+ };
106
+ };
107
+
108
+ export { TranslationManager, TranslationNamespace };
109
+ //# sourceMappingURL=index.mjs.map
110
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +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"]}
package/package.json CHANGED
@@ -1,9 +1,28 @@
1
1
  {
2
2
  "name": "@magmamath/frontend-config",
3
- "version": "1.1.2-rc.2",
3
+ "version": "1.1.2-rc.21",
4
4
  "main": "./dist/index.js",
5
5
  "module": "./dist/index.mjs",
6
6
  "types": "./dist/index.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "types": "./dist/index.d.ts",
10
+ "import": "./dist/index.mjs",
11
+ "require": "./dist/index.js"
12
+ },
13
+ "./translation": {
14
+ "types": "./dist/translation/index.d.ts",
15
+ "import": "./dist/translation/index.mjs",
16
+ "require": "./dist/translation/index.js"
17
+ }
18
+ },
19
+ "typesVersions": {
20
+ "*": {
21
+ "translation": [
22
+ "./dist/translation/index.d.ts"
23
+ ]
24
+ }
25
+ },
7
26
  "license": "ISC",
8
27
  "files": [
9
28
  "dist/**"
@@ -21,17 +40,25 @@
21
40
  },
22
41
  "peerDependencies": {
23
42
  "effector": "^23.4.4",
43
+ "i18next": ">=23",
24
44
  "react": "^18",
25
45
  "react-dom": "^18",
26
- "react-native-svg": "15.13.0"
46
+ "react-i18next": ">=14",
47
+ "react-native-svg": "15.13.0",
48
+ "@tolgee/i18next": ">=5",
49
+ "@tolgee/web": ">=5"
27
50
  },
28
51
  "dependencies": {},
29
52
  "devDependencies": {
53
+ "@tolgee/i18next": "^5.0.0",
54
+ "@tolgee/web": "^5.0.0",
30
55
  "@types/node": "^18.0.0",
31
56
  "@types/react": "^19.2.2",
32
57
  "effector": "^23.4.4",
33
58
  "eslint": "^8.57.0",
59
+ "i18next": "^23.0.0",
34
60
  "react": "^18",
61
+ "react-i18next": "^14.0.0",
35
62
  "react-native-svg": "15.13.0",
36
63
  "rimraf": "^5.0.0",
37
64
  "tsup": "^8.0.0",