@tolgee/core 5.0.0-rc.9be0f0e.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (96) hide show
  1. package/README.md +174 -0
  2. package/README.njk.md +61 -0
  3. package/dist/tolgee.cjs.js +723 -351
  4. package/dist/tolgee.cjs.js.map +1 -1
  5. package/dist/tolgee.cjs.min.js +1 -1
  6. package/dist/tolgee.cjs.min.js.map +1 -1
  7. package/dist/{tolgee.esm.mjs → tolgee.esm.js} +722 -346
  8. package/dist/tolgee.esm.js.map +1 -0
  9. package/dist/tolgee.esm.min.mjs +1 -1
  10. package/dist/tolgee.esm.min.mjs.map +1 -1
  11. package/dist/tolgee.umd.js +723 -351
  12. package/dist/tolgee.umd.js.map +1 -1
  13. package/dist/tolgee.umd.min.js +1 -1
  14. package/dist/tolgee.umd.min.js.map +1 -1
  15. package/lib/Controller/Cache/Cache.d.ts +10 -9
  16. package/lib/Controller/Controller.d.ts +104 -45
  17. package/lib/Controller/Events/EventEmitter.d.ts +6 -0
  18. package/lib/Controller/Events/EventEmitterSelective.d.ts +7 -0
  19. package/lib/Controller/Events/Events.d.ts +14 -0
  20. package/lib/Controller/Plugins/Plugins.d.ts +12 -25
  21. package/lib/Controller/State/State.d.ts +27 -9
  22. package/lib/Controller/State/initState.d.ts +46 -15
  23. package/lib/Controller/State/observerOptions.d.ts +41 -0
  24. package/lib/Controller/ValueObserver.d.ts +5 -5
  25. package/lib/FormatSimple/FormatError.d.ts +7 -0
  26. package/lib/FormatSimple/FormatSimple.d.ts +2 -0
  27. package/lib/FormatSimple/formatParser.d.ts +1 -0
  28. package/lib/FormatSimple/formatter.d.ts +2 -0
  29. package/lib/TolgeeCore.d.ts +204 -0
  30. package/lib/TranslateParams.d.ts +1 -1
  31. package/lib/helpers.d.ts +8 -0
  32. package/lib/index.d.ts +4 -4
  33. package/lib/types/cache.d.ts +25 -0
  34. package/lib/types/events.d.ts +66 -0
  35. package/lib/types/general.d.ts +34 -0
  36. package/lib/types/index.d.ts +7 -0
  37. package/lib/types/plugin.d.ts +127 -0
  38. package/package.json +5 -4
  39. package/src/Controller/Cache/Cache.ts +31 -31
  40. package/src/Controller/Cache/helpers.ts +6 -6
  41. package/src/Controller/Controller.ts +78 -50
  42. package/src/Controller/Events/EventEmitter.ts +34 -0
  43. package/src/Controller/Events/EventEmitterSelective.test.ts +110 -0
  44. package/src/Controller/Events/EventEmitterSelective.ts +132 -0
  45. package/src/Controller/Events/Events.ts +69 -0
  46. package/src/Controller/Plugins/Plugins.ts +182 -133
  47. package/src/Controller/State/State.ts +43 -26
  48. package/src/Controller/State/initState.ts +97 -25
  49. package/src/Controller/State/observerOptions.ts +66 -0
  50. package/src/Controller/ValueObserver.ts +5 -2
  51. package/src/FormatSimple/FormatError.ts +26 -0
  52. package/src/FormatSimple/FormatSimple.ts +13 -0
  53. package/src/FormatSimple/formatParser.ts +133 -0
  54. package/src/FormatSimple/formatter.test.ts +190 -0
  55. package/src/FormatSimple/formatter.ts +19 -0
  56. package/src/TolgeeCore.ts +267 -0
  57. package/src/TranslateParams.test.ts +9 -12
  58. package/src/TranslateParams.ts +6 -5
  59. package/src/__test/backend.test.ts +6 -6
  60. package/src/__test/cache.test.ts +190 -0
  61. package/src/__test/client.test.ts +2 -2
  62. package/src/__test/events.test.ts +32 -7
  63. package/src/__test/format.simple.test.ts +14 -0
  64. package/src/__test/formatError.test.ts +61 -0
  65. package/src/__test/initialization.test.ts +15 -3
  66. package/src/__test/languageDetection.test.ts +14 -8
  67. package/src/__test/languageStorage.test.ts +10 -11
  68. package/src/__test/languages.test.ts +30 -6
  69. package/src/__test/loading.test.ts +2 -2
  70. package/src/__test/{namespacesFallback.test.ts → namespaces.fallback.test.ts} +10 -8
  71. package/src/__test/namespaces.test.ts +30 -7
  72. package/src/__test/options.test.ts +64 -0
  73. package/src/__test/plugins.test.ts +29 -18
  74. package/src/helpers.ts +53 -0
  75. package/src/index.ts +4 -10
  76. package/src/types/cache.ts +37 -0
  77. package/src/types/events.ts +85 -0
  78. package/src/types/general.ts +50 -0
  79. package/src/types/index.ts +19 -0
  80. package/src/types/plugin.ts +181 -0
  81. package/dist/tolgee.esm.mjs.map +0 -1
  82. package/lib/Controller/State/helpers.d.ts +0 -6
  83. package/lib/Events/EventEmitter.d.ts +0 -6
  84. package/lib/Events/EventEmitterSelective.d.ts +0 -15
  85. package/lib/Events/Events.d.ts +0 -50
  86. package/lib/Tolgee.d.ts +0 -2
  87. package/lib/constants.d.ts +0 -5
  88. package/lib/types.d.ts +0 -274
  89. package/src/Controller/State/helpers.ts +0 -41
  90. package/src/Events/EventEmitter.ts +0 -27
  91. package/src/Events/EventEmitterSelective.test.ts +0 -108
  92. package/src/Events/EventEmitterSelective.ts +0 -160
  93. package/src/Events/Events.ts +0 -66
  94. package/src/Tolgee.ts +0 -77
  95. package/src/constants.ts +0 -7
  96. package/src/types.ts +0 -380
@@ -0,0 +1,190 @@
1
+ /* eslint-disable no-console */
2
+ import { TolgeeCore, TolgeeInstance } from '../TolgeeCore';
3
+ import { TolgeePlugin, TreeTranslationsData } from '../types';
4
+ import { resolvablePromise } from './testTools';
5
+
6
+ const waitForInitialLoad = (tolgee: TolgeeInstance) =>
7
+ new Promise<void>((resolve) => {
8
+ const { unsubscribe } = tolgee.on('initialLoad', () => {
9
+ unsubscribe();
10
+ resolve();
11
+ });
12
+ });
13
+
14
+ const DevToolsPlugin =
15
+ (postfix = ''): TolgeePlugin =>
16
+ (tolgee, tools) => {
17
+ tolgee.updateOptions({ apiKey: 'test', apiUrl: 'test' });
18
+ tools.setDevBackend({
19
+ getRecord({ language, namespace }) {
20
+ return Promise.resolve({
21
+ test: { sub: `${language}.${namespace || 'default'}${postfix}` },
22
+ });
23
+ },
24
+ });
25
+ return tolgee;
26
+ };
27
+
28
+ const DevToolsThrow = (): TolgeePlugin => (tolgee, tools) => {
29
+ tolgee.updateOptions({ apiKey: 'test', apiUrl: 'test' });
30
+ tools.setDevBackend({
31
+ getRecord() {
32
+ return Promise.reject();
33
+ },
34
+ });
35
+ return tolgee;
36
+ };
37
+
38
+ describe('cache', () => {
39
+ let tolgee: TolgeeInstance;
40
+
41
+ beforeEach(async () => {
42
+ tolgee = TolgeeCore().init({
43
+ language: 'en',
44
+ staticData: {
45
+ en: { test: { sub: 'subtestEn' } },
46
+ cs: { 'test.sub': 'subtestCs' },
47
+ },
48
+ });
49
+ });
50
+
51
+ afterEach(() => {
52
+ tolgee.stop();
53
+ });
54
+
55
+ it('stores initial data correctly', async () => {
56
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
57
+ await tolgee.changeLanguage('cs');
58
+ expect(tolgee.t('test.sub')).toEqual('subtestCs');
59
+ });
60
+
61
+ it('ignores empty values', async () => {
62
+ tolgee.addStaticData({
63
+ en: { sub: { test: 'Test', null: null, undefined: undefined } },
64
+ });
65
+ expect(tolgee.t('sub.test')).toEqual('Test');
66
+ expect(tolgee.t('sub.null')).toEqual('sub.null');
67
+ expect(tolgee.t('sub.undefined')).toEqual('sub.undefined');
68
+ });
69
+
70
+ it('returns correct data when in dev mode', async () => {
71
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
72
+ tolgee.addPlugin(DevToolsPlugin());
73
+ await tolgee.run();
74
+ expect(tolgee.t('test.sub')).toEqual('en.default');
75
+ const changeLangPromise = tolgee.changeLanguage('cs');
76
+ expect(tolgee.t('test.sub')).toEqual('en.default');
77
+ await changeLangPromise;
78
+ expect(tolgee.t('test.sub')).toEqual('cs.default');
79
+ });
80
+
81
+ it('invalidates the cache when switching to dev', async () => {
82
+ await tolgee.run();
83
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
84
+ tolgee.addPlugin(DevToolsPlugin());
85
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
86
+
87
+ await new Promise<void>((resolve) => {
88
+ const { unsubscribe } = tolgee.on('initialLoad', async () => {
89
+ expect(tolgee.t('test.sub')).toEqual('en.default');
90
+ unsubscribe();
91
+ resolve();
92
+ });
93
+ });
94
+ });
95
+
96
+ it('works with switching to different dev backend', async () => {
97
+ tolgee.addPlugin(DevToolsPlugin());
98
+ await tolgee.run();
99
+ expect(tolgee.t('test.sub')).toEqual('en.default');
100
+ tolgee.addPlugin(DevToolsPlugin('.new'));
101
+ expect(tolgee.t('test.sub')).toEqual('en.default');
102
+
103
+ await waitForInitialLoad(tolgee);
104
+ expect(tolgee.t('test.sub')).toEqual('en.default.new');
105
+ });
106
+
107
+ it('keeps data when dev backend throws', async () => {
108
+ console.warn = jest.fn();
109
+ const keyUpdateHandler = jest.fn();
110
+ tolgee.on('update', keyUpdateHandler);
111
+ await tolgee.run();
112
+ expect(keyUpdateHandler).toBeCalledTimes(1);
113
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
114
+ tolgee.addPlugin(DevToolsThrow());
115
+ await waitForInitialLoad(tolgee);
116
+ expect(keyUpdateHandler).toBeCalledTimes(2);
117
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
118
+ expect(console.warn).toBeCalledTimes(1);
119
+ });
120
+
121
+ it('updates initial data correctly', async () => {
122
+ await tolgee.run();
123
+ expect(tolgee.t('test.sub')).toEqual('subtestEn');
124
+ tolgee.addStaticData({ en: { test: { sub: 'newSubtestEn' } } });
125
+ expect(tolgee.t('test.sub')).toEqual('newSubtestEn');
126
+ });
127
+
128
+ it('ignores new initial data when already in dev mode', async () => {
129
+ tolgee.addPlugin(DevToolsPlugin());
130
+ await tolgee.run();
131
+ expect(tolgee.t('test.sub')).toEqual('en.default');
132
+ tolgee.addStaticData({ en: { test: { sub: 'newSubtestEn' } } });
133
+ expect(tolgee.t('test.sub')).toEqual('en.default');
134
+ });
135
+
136
+ it('gets all records', async () => {
137
+ await tolgee.run();
138
+ expect(tolgee.getAllRecords().length).toEqual(2);
139
+ });
140
+
141
+ it('fetching works with namespaces', async () => {
142
+ tolgee.addPlugin(DevToolsPlugin());
143
+ const runPromise = tolgee.run();
144
+ expect(tolgee.isFetching()).toBeTruthy();
145
+ await runPromise;
146
+ expect(tolgee.t('test.sub', { ns: 'common' })).toEqual('test.sub');
147
+ const nsPromise = tolgee.addActiveNs('common');
148
+ expect(tolgee.isFetching()).toBeTruthy();
149
+ expect(tolgee.isFetching('common')).toBeTruthy();
150
+ expect(tolgee.isFetching('nonexistant')).toBeFalsy();
151
+ await nsPromise;
152
+ expect(tolgee.t('test.sub', { ns: 'common' })).toEqual('en.common');
153
+ expect(tolgee.isFetching()).toBeFalsy();
154
+ });
155
+
156
+ it('works with namespaces containing colon', async () => {
157
+ const [promiseEn, resolveEn] = resolvablePromise<TreeTranslationsData>();
158
+ tolgee.updateOptions({
159
+ language: 'en',
160
+ staticData: {
161
+ 'en:common:test': () => promiseEn,
162
+ },
163
+ });
164
+ await tolgee.run();
165
+ expect(tolgee.t('test.sub', { ns: 'common:test' })).toEqual('test.sub');
166
+ const nsPromise = tolgee.addActiveNs('common:test');
167
+ expect(tolgee.isLoading('common:test')).toBeTruthy();
168
+ resolveEn({ test: { sub: 'Test' } });
169
+ await nsPromise;
170
+ expect(tolgee.t('test.sub', { ns: 'common:test' })).toEqual('Test');
171
+ });
172
+
173
+ it("pending requests won't rewrite cache when reinitialized", async () => {
174
+ const [promiseEn, resolveEn] = resolvablePromise<TreeTranslationsData>();
175
+ tolgee = TolgeeCore().init({
176
+ language: 'en',
177
+ staticData: {
178
+ en: () => promiseEn,
179
+ },
180
+ });
181
+ tolgee.run();
182
+ await Promise.resolve();
183
+ tolgee.addPlugin(DevToolsPlugin());
184
+ await waitForInitialLoad(tolgee);
185
+ expect(tolgee.t('test.sub')).toEqual('en.default');
186
+ resolveEn({ test: { sub: 'Invalid' } });
187
+ await Promise.resolve();
188
+ expect(tolgee.t('test.sub')).toEqual('en.default');
189
+ });
190
+ });
@@ -1,4 +1,4 @@
1
- import { Tolgee } from '../index';
1
+ import { TolgeeCore } from '../index';
2
2
 
3
3
  describe('using tolgee as client', () => {
4
4
  it('fetch data without running', async () => {
@@ -11,7 +11,7 @@ describe('using tolgee as client', () => {
11
11
  Promise.resolve({ cancel: 'Cancellar' })
12
12
  );
13
13
 
14
- const tolgee = Tolgee({
14
+ const tolgee = TolgeeCore().init({
15
15
  language: 'en',
16
16
  ns: ['common'],
17
17
  staticData: {
@@ -1,8 +1,8 @@
1
- import { Tolgee } from '../index';
1
+ import { TolgeeCore } from '../index';
2
2
 
3
3
  describe('events', () => {
4
4
  it('emits language change event', async () => {
5
- const tolgee = Tolgee({ language: 'en' });
5
+ const tolgee = TolgeeCore().init({ language: 'en' });
6
6
  const handler = jest.fn((lang) => {});
7
7
  tolgee.on('language', handler);
8
8
  await tolgee.changeLanguage('es');
@@ -10,18 +10,18 @@ describe('events', () => {
10
10
  });
11
11
 
12
12
  it('correctly emits translation change listeners', async () => {
13
- const tolgee = Tolgee({
13
+ const tolgee = TolgeeCore().init({
14
14
  language: 'en',
15
15
  staticData: {
16
16
  en: { hello: 'World', language: 'English' },
17
17
  es: { hello: 'Mundo', language: 'Spanish' },
18
18
  },
19
19
  });
20
- const helloHandler = jest.fn((data) => {});
21
- const languageHandler = jest.fn((data) => {});
20
+ const helloHandler = jest.fn(() => {});
21
+ const languageHandler = jest.fn(() => {});
22
22
 
23
- tolgee.onKeyUpdate(helloHandler).subscribeKey({ key: 'hello' });
24
- tolgee.onKeyUpdate(languageHandler).subscribeKey({ key: 'language' });
23
+ tolgee.onNsUpdate(helloHandler);
24
+ tolgee.onNsUpdate(languageHandler);
25
25
 
26
26
  tolgee.changeTranslation({ language: 'es' }, 'hello', 'Světe');
27
27
  tolgee.changeLanguage('es');
@@ -30,4 +30,29 @@ describe('events', () => {
30
30
  expect(helloHandler).toHaveBeenCalledTimes(1);
31
31
  expect(languageHandler).toHaveBeenCalledTimes(1);
32
32
  });
33
+
34
+ it('stop emitting when turned off', async () => {
35
+ const tolgee = TolgeeCore().init({
36
+ language: 'en',
37
+ staticData: {
38
+ en: { hello: 'World', language: 'English' },
39
+ es: { hello: 'Mundo', language: 'Spanish' },
40
+ },
41
+ });
42
+ const eventHandler = jest.fn(() => {});
43
+
44
+ tolgee.on('language', eventHandler);
45
+ tolgee.on('pendingLanguage', eventHandler);
46
+
47
+ await tolgee.changeLanguage('es');
48
+ expect(eventHandler).toBeCalledTimes(2);
49
+
50
+ tolgee.setEmmiterActive(false);
51
+ await tolgee.changeLanguage('en');
52
+ expect(eventHandler).toBeCalledTimes(2);
53
+
54
+ tolgee.setEmmiterActive(true);
55
+ await tolgee.changeLanguage('es');
56
+ expect(eventHandler).toBeCalledTimes(4);
57
+ });
33
58
  });
@@ -0,0 +1,14 @@
1
+ import { FormatSimple } from '../FormatSimple/FormatSimple';
2
+ import { TolgeeCore } from '../TolgeeCore';
3
+
4
+ describe('format simple', () => {
5
+ it('works with parameters', () => {
6
+ const tolgee = TolgeeCore()
7
+ .use(FormatSimple())
8
+ .init({
9
+ language: 'en',
10
+ staticData: { en: { apples: 'Bob has { num } apples' } },
11
+ });
12
+ expect(tolgee.t('apples', { num: 7 })).toEqual('Bob has 7 apples');
13
+ });
14
+ });
@@ -0,0 +1,61 @@
1
+ /* eslint-disable no-console */
2
+ import { FormatSimple } from '../FormatSimple/FormatSimple';
3
+ import { TolgeeCore } from '../TolgeeCore';
4
+
5
+ describe('format error', () => {
6
+ beforeEach(() => {
7
+ console.error = jest.fn();
8
+ });
9
+
10
+ it('returns default error', () => {
11
+ const tolgee = TolgeeCore().use(FormatSimple()).init({ language: 'en' });
12
+
13
+ expect(tolgee.t('test', 'missing {param}')).toEqual('invalid');
14
+ expect(console.error).toBeCalledTimes(1);
15
+ });
16
+
17
+ it('returns specified error message', () => {
18
+ const tolgee = TolgeeCore()
19
+ .use(FormatSimple())
20
+ .init({ language: 'en', onFormatError: 'my error' });
21
+
22
+ expect(tolgee.t('test', 'missing {param}')).toEqual('my error');
23
+ expect(console.error).toBeCalledTimes(1);
24
+ });
25
+
26
+ it('accepts error handler function', () => {
27
+ const tolgee = TolgeeCore()
28
+ .use(FormatSimple())
29
+ .init({
30
+ language: 'en',
31
+ onFormatError(error) {
32
+ return error;
33
+ },
34
+ });
35
+
36
+ expect(tolgee.t('test', 'missing {param}')).toEqual(
37
+ 'Missing parameter "param" in "missing {param}"'
38
+ );
39
+ expect(console.error).toBeCalledTimes(1);
40
+ });
41
+
42
+ it('handler recieves correct information', () => {
43
+ const tolgee = TolgeeCore()
44
+ .use(FormatSimple())
45
+ .init({
46
+ language: 'en',
47
+ onFormatError(_, { key, defaultValue, params }) {
48
+ return JSON.stringify({ key, defaultValue, params });
49
+ },
50
+ });
51
+
52
+ expect(tolgee.t('test', 'missing {param}', { param2: 'test' })).toEqual(
53
+ JSON.stringify({
54
+ key: 'test',
55
+ defaultValue: 'missing {param}',
56
+ params: { param2: 'test' },
57
+ })
58
+ );
59
+ expect(console.error).toBeCalledTimes(1);
60
+ });
61
+ });
@@ -1,4 +1,4 @@
1
- import { Tolgee } from '../index';
1
+ import { TolgeeCore } from '../index';
2
2
 
3
3
  describe('initialization behavior', () => {
4
4
  it("change in state before running won't trigger fetch", async () => {
@@ -11,7 +11,7 @@ describe('initialization behavior', () => {
11
11
  Promise.resolve({ cancel: 'Cancellar' })
12
12
  );
13
13
 
14
- const tolgee = Tolgee({
14
+ const tolgee = TolgeeCore().init({
15
15
  language: 'en',
16
16
  ns: ['common'],
17
17
  staticData: {
@@ -48,7 +48,7 @@ describe('initialization behavior', () => {
48
48
  });
49
49
 
50
50
  it("won't start loading when nothing to load", async () => {
51
- const tolgee = Tolgee({
51
+ const tolgee = TolgeeCore().init({
52
52
  language: 'en',
53
53
  staticData: {
54
54
  en: { test: 'Test' },
@@ -70,4 +70,16 @@ describe('initialization behavior', () => {
70
70
  expect(onFetchingHandler).not.toBeCalled();
71
71
  expect(onLoadingHandler).not.toBeCalled();
72
72
  });
73
+
74
+ it('emits keyUpdate on initialLoad', async () => {
75
+ const tolgee = TolgeeCore().init({
76
+ language: 'en',
77
+ staticData: { en: { hello: 'world' } },
78
+ });
79
+ const onKeyChange = jest.fn();
80
+ tolgee.on('update', onKeyChange);
81
+ expect(onKeyChange).toBeCalledTimes(0);
82
+ await tolgee.run();
83
+ expect(onKeyChange).toBeCalledTimes(1);
84
+ });
73
85
  });
@@ -1,4 +1,4 @@
1
- import { Tolgee, TolgeePlugin, TolgeeInstance } from '../index';
1
+ import { TolgeeCore, TolgeePlugin, TolgeeInstance } from '../index';
2
2
 
3
3
  const DetectionPlugin =
4
4
  (value: any): TolgeePlugin =>
@@ -19,7 +19,7 @@ describe('language detection plugin', () => {
19
19
  });
20
20
 
21
21
  it('will detect language without loading', async () => {
22
- tolgee = Tolgee()
22
+ tolgee = TolgeeCore()
23
23
  .use(DetectionPlugin('en'))
24
24
  .init({
25
25
  defaultLanguage: 'es',
@@ -43,7 +43,7 @@ describe('language detection plugin', () => {
43
43
  });
44
44
 
45
45
  it('will detect language async', async () => {
46
- tolgee = Tolgee()
46
+ tolgee = TolgeeCore()
47
47
  .use(DetectionPlugin(Promise.resolve('en')))
48
48
  .init({
49
49
  defaultLanguage: 'es',
@@ -69,7 +69,7 @@ describe('language detection plugin', () => {
69
69
  });
70
70
 
71
71
  it('will fallback correctly', async () => {
72
- tolgee = Tolgee()
72
+ tolgee = TolgeeCore()
73
73
  .use(DetectionPlugin(Promise.resolve(undefined)))
74
74
  .init({
75
75
  defaultLanguage: 'es',
@@ -85,7 +85,7 @@ describe('language detection plugin', () => {
85
85
  });
86
86
 
87
87
  it('will return key before language is loaded', async () => {
88
- tolgee = Tolgee()
88
+ tolgee = TolgeeCore()
89
89
  .use(DetectionPlugin(Promise.resolve('en')))
90
90
  .init({
91
91
  defaultLanguage: 'es',
@@ -102,7 +102,7 @@ describe('language detection plugin', () => {
102
102
  });
103
103
 
104
104
  it('will throw error when no avaliableLanguages are set', () => {
105
- tolgee = Tolgee().use(DetectionPlugin('en')).init({
105
+ tolgee = TolgeeCore().use(DetectionPlugin('en')).init({
106
106
  defaultLanguage: 'es',
107
107
  });
108
108
 
@@ -110,7 +110,7 @@ describe('language detection plugin', () => {
110
110
  });
111
111
 
112
112
  it('will throw error when no defaultLanguage specified', () => {
113
- tolgee = Tolgee()
113
+ tolgee = TolgeeCore()
114
114
  .use(DetectionPlugin('en'))
115
115
  .init({
116
116
  staticData: {
@@ -118,6 +118,12 @@ describe('language detection plugin', () => {
118
118
  },
119
119
  });
120
120
 
121
- expect(() => tolgee.run()).toThrow();
121
+ expect(() => tolgee.run()).toThrow(/'defaultLanguage'/);
122
+ });
123
+
124
+ it('will throw error when no available languages specified', () => {
125
+ tolgee = TolgeeCore().use(DetectionPlugin('en')).init({});
126
+
127
+ expect(() => tolgee.run()).toThrow(/'availableLanguages'/);
122
128
  });
123
129
  });
@@ -1,4 +1,4 @@
1
- import { Tolgee, TolgeePlugin, TolgeeInstance } from '../index';
1
+ import { TolgeeCore, TolgeePlugin, TolgeeInstance } from '../index';
2
2
 
3
3
  describe('language storage plugin', () => {
4
4
  let tolgee: TolgeeInstance;
@@ -22,7 +22,7 @@ describe('language storage plugin', () => {
22
22
  });
23
23
 
24
24
  it('will restore language without loading', async () => {
25
- tolgee = Tolgee()
25
+ tolgee = TolgeeCore()
26
26
  .use(StoragePlugin('en'))
27
27
  .init({
28
28
  defaultLanguage: 'es',
@@ -46,7 +46,7 @@ describe('language storage plugin', () => {
46
46
  });
47
47
 
48
48
  it('will restore language async', async () => {
49
- tolgee = Tolgee()
49
+ tolgee = TolgeeCore()
50
50
  .use(StoragePlugin(Promise.resolve('en')))
51
51
  .init({
52
52
  defaultLanguage: 'es',
@@ -72,7 +72,7 @@ describe('language storage plugin', () => {
72
72
  });
73
73
 
74
74
  it('will fallback correctly', async () => {
75
- tolgee = Tolgee()
75
+ tolgee = TolgeeCore()
76
76
  .use(StoragePlugin(Promise.resolve(undefined)))
77
77
  .init({
78
78
  defaultLanguage: 'es',
@@ -88,7 +88,7 @@ describe('language storage plugin', () => {
88
88
  });
89
89
 
90
90
  it('will return key before language is loaded', async () => {
91
- tolgee = Tolgee()
91
+ tolgee = TolgeeCore()
92
92
  .use(StoragePlugin(Promise.resolve('en')))
93
93
  .init({
94
94
  defaultLanguage: 'es',
@@ -105,7 +105,7 @@ describe('language storage plugin', () => {
105
105
  });
106
106
 
107
107
  it('will store language value on language change', async () => {
108
- tolgee = Tolgee()
108
+ tolgee = TolgeeCore()
109
109
  .use(StoragePlugin(Promise.resolve('en')))
110
110
  .init({
111
111
  defaultLanguage: 'es',
@@ -122,7 +122,7 @@ describe('language storage plugin', () => {
122
122
  });
123
123
 
124
124
  it('will ignore invalid values', () => {
125
- tolgee = Tolgee()
125
+ tolgee = TolgeeCore()
126
126
  .use(StoragePlugin('eq'))
127
127
  .init({
128
128
  defaultLanguage: 'es',
@@ -135,11 +135,10 @@ describe('language storage plugin', () => {
135
135
  expect(tolgee.getLanguage()).toEqual('es');
136
136
  });
137
137
 
138
- it('will return invalid value if no available languages', () => {
139
- tolgee = Tolgee().use(StoragePlugin('eq')).init({
138
+ it('will throw an error when no available languages are specified', () => {
139
+ tolgee = TolgeeCore().use(StoragePlugin('eq')).init({
140
140
  defaultLanguage: 'es',
141
141
  });
142
- tolgee.run();
143
- expect(tolgee.getLanguage()).toEqual('eq');
142
+ expect(() => tolgee.run()).toThrowError('availableLanguages');
144
143
  });
145
144
  });
@@ -1,16 +1,16 @@
1
- import { Tolgee, TreeTranslationsData } from '../index';
1
+ import { TolgeeCore, TreeTranslationsData } from '../index';
2
2
  import { resolvablePromise } from './testTools';
3
3
 
4
4
  describe('language changes', () => {
5
5
  it('changes language', async () => {
6
- const tolgee = Tolgee({ language: 'en' });
6
+ const tolgee = TolgeeCore().init({ language: 'en' });
7
7
  expect(tolgee.getLanguage()).toEqual('en');
8
8
  await tolgee.changeLanguage('es');
9
9
  expect(tolgee.getLanguage()).toEqual('es');
10
10
  });
11
11
 
12
12
  it('returns correct translation', async () => {
13
- const tolgee = Tolgee({
13
+ const tolgee = TolgeeCore().init({
14
14
  language: 'en',
15
15
  staticData: { en: { hello: 'World' }, es: { hello: 'Mundo' } },
16
16
  });
@@ -24,7 +24,7 @@ describe('language changes', () => {
24
24
  it('fetches language data correctly', async () => {
25
25
  const [promiseEn, resolveEn] = resolvablePromise<TreeTranslationsData>();
26
26
  const [promiseEs, resolveEs] = resolvablePromise<TreeTranslationsData>();
27
- const tolgee = Tolgee({
27
+ const tolgee = TolgeeCore().init({
28
28
  language: 'en',
29
29
  staticData: {
30
30
  en: () => promiseEn,
@@ -53,7 +53,7 @@ describe('language changes', () => {
53
53
  const [promiseEnIn, resolveEnIn] =
54
54
  resolvablePromise<TreeTranslationsData>();
55
55
 
56
- const tolgee = Tolgee({
56
+ const tolgee = TolgeeCore().init({
57
57
  language: 'es',
58
58
  staticData: {
59
59
  en: () => promiseEn,
@@ -95,7 +95,7 @@ describe('language changes', () => {
95
95
  });
96
96
 
97
97
  it('will fallback to default value', () => {
98
- const tolgee = Tolgee({
98
+ const tolgee = TolgeeCore().init({
99
99
  defaultLanguage: 'en',
100
100
  });
101
101
 
@@ -103,4 +103,28 @@ describe('language changes', () => {
103
103
  tolgee.run();
104
104
  expect(tolgee.getLanguage()).toEqual('en');
105
105
  });
106
+
107
+ it('will throw error when no language specified', () => {
108
+ const tolgee = TolgeeCore().init({});
109
+
110
+ expect(() => tolgee.run()).toThrow(/'language'/);
111
+ });
112
+
113
+ it('loads fallback languages and namespaces', async () => {
114
+ const loadNs = jest.fn(() => Promise.resolve(undefined as any));
115
+ const tolgee = TolgeeCore().init({
116
+ language: 'en',
117
+ fallbackNs: ['fallback'],
118
+ staticData: {
119
+ en: loadNs,
120
+ 'en:fallback': loadNs,
121
+ cs: loadNs,
122
+ 'cs:fallback': loadNs,
123
+ },
124
+ });
125
+ tolgee.run();
126
+ expect(loadNs).toBeCalledTimes(2);
127
+ await tolgee.changeLanguage('cs');
128
+ expect(loadNs).toBeCalledTimes(4);
129
+ });
106
130
  });
@@ -1,4 +1,4 @@
1
- import { Tolgee, TreeTranslationsData } from '../index';
1
+ import { TolgeeCore, TreeTranslationsData } from '../index';
2
2
  import { resolvablePromise } from './testTools';
3
3
 
4
4
  describe('loading', () => {
@@ -7,7 +7,7 @@ describe('loading', () => {
7
7
  const [promiseEs, resolveEs] = resolvablePromise<TreeTranslationsData>();
8
8
  const onLoadHandler = jest.fn(() => {});
9
9
  const onFetchingHandler = jest.fn(() => {});
10
- const tolgee = Tolgee({
10
+ const tolgee = TolgeeCore().init({
11
11
  language: 'en',
12
12
  staticData: {
13
13
  en: () => promiseEn,
@@ -1,8 +1,8 @@
1
- import { Tolgee } from '../Tolgee';
1
+ import { TolgeeCore } from '../TolgeeCore';
2
2
 
3
3
  describe('namespaces fallback', () => {
4
4
  test('works with multiple and default', () => {
5
- const tolgee = Tolgee({
5
+ const tolgee = TolgeeCore().init({
6
6
  language: 'en',
7
7
  staticData: {
8
8
  en: { '0': 'noNamespace' },
@@ -20,7 +20,7 @@ describe('namespaces fallback', () => {
20
20
  });
21
21
 
22
22
  test('works when no fallback specified', () => {
23
- const tolgee = Tolgee({
23
+ const tolgee = TolgeeCore().init({
24
24
  language: 'en',
25
25
  staticData: {
26
26
  en: { '0': 'noNamespace' },
@@ -37,7 +37,7 @@ describe('namespaces fallback', () => {
37
37
  });
38
38
 
39
39
  test('works when data present but no fallback', () => {
40
- const tolgee = Tolgee({
40
+ const tolgee = TolgeeCore().init({
41
41
  language: 'en',
42
42
  staticData: {
43
43
  en: { '0': 'noNamespace' },
@@ -54,11 +54,11 @@ describe('namespaces fallback', () => {
54
54
  expect(tolgee.t({ key: '4', orEmpty: true })).toEqual('');
55
55
  });
56
56
 
57
- test('works with override', () => {
58
- const tolgee = Tolgee({
57
+ test('works with default', () => {
58
+ const tolgee = TolgeeCore().init({
59
59
  language: 'en',
60
60
  staticData: {
61
- en: { '0': 'noNamespace' },
61
+ en: { '0': 'empty' },
62
62
  'en:first': { '1': 'first' },
63
63
  'en:second': { '2': 'second' },
64
64
  },
@@ -66,8 +66,10 @@ describe('namespaces fallback', () => {
66
66
  });
67
67
 
68
68
  expect(tolgee.t({ key: '1' })).toEqual('1');
69
+ expect(tolgee.t({ key: '0' })).toEqual('empty');
69
70
  expect(tolgee.t({ key: '1', ns: 'first' })).toEqual('first');
70
71
  expect(tolgee.t({ key: '0', ns: 'first' })).toEqual('0');
71
- expect(tolgee.t({ key: '2', ns: ['first', 'second'] })).toEqual('second');
72
+ expect(tolgee.t({ key: '2', ns: 'first' })).toEqual('second');
73
+ expect(tolgee.t({ key: '2', ns: 'second' })).toEqual('second');
72
74
  });
73
75
  });