@tolgee/core 5.8.0 → 5.8.2

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 (39) hide show
  1. package/dist/tolgee.cjs.js +650 -716
  2. package/dist/tolgee.cjs.js.map +1 -1
  3. package/dist/tolgee.cjs.min.js +1 -1
  4. package/dist/tolgee.cjs.min.js.map +1 -1
  5. package/dist/tolgee.esm.js +650 -716
  6. package/dist/tolgee.esm.js.map +1 -1
  7. package/dist/tolgee.esm.min.js +1 -1
  8. package/dist/tolgee.esm.min.js.map +1 -1
  9. package/dist/tolgee.esm.min.mjs +1 -1
  10. package/dist/tolgee.esm.min.mjs.map +1 -1
  11. package/dist/tolgee.esm.mjs +650 -716
  12. package/dist/tolgee.esm.mjs.map +1 -1
  13. package/dist/tolgee.umd.js +650 -716
  14. package/dist/tolgee.umd.js.map +1 -1
  15. package/dist/tolgee.umd.min.js +1 -1
  16. package/dist/tolgee.umd.min.js.map +1 -1
  17. package/lib/Controller/Cache/Cache.d.ts +14 -14
  18. package/lib/Controller/Controller.d.ts +23 -23
  19. package/lib/Controller/Events/EventEmitter.d.ts +1 -1
  20. package/lib/Controller/Events/EventEmitterSelective.d.ts +1 -1
  21. package/lib/Controller/Events/Events.d.ts +2 -2
  22. package/lib/Controller/Plugins/Plugins.d.ts +17 -17
  23. package/lib/Controller/State/State.d.ts +20 -20
  24. package/lib/Controller/State/initState.d.ts +1 -1
  25. package/lib/TolgeeCore.d.ts +2 -2
  26. package/lib/helpers.d.ts +2 -2
  27. package/package.json +2 -2
  28. package/src/Controller/Cache/Cache.ts +175 -193
  29. package/src/Controller/Controller.ts +105 -114
  30. package/src/Controller/Events/EventEmitter.ts +21 -22
  31. package/src/Controller/Events/EventEmitterSelective.ts +59 -58
  32. package/src/Controller/Events/Events.ts +41 -52
  33. package/src/Controller/Plugins/Plugins.ts +206 -219
  34. package/src/Controller/State/State.ts +135 -152
  35. package/src/Controller/State/initState.ts +3 -3
  36. package/src/Controller/ValueObserver.ts +11 -12
  37. package/src/TolgeeCore.ts +7 -7
  38. package/src/__test/cache.test.ts +3 -2
  39. package/src/helpers.ts +6 -5
@@ -16,167 +16,150 @@ import {
16
16
  } from '../../helpers';
17
17
  import { initState, TolgeeOptions } from './initState';
18
18
 
19
- export const State = (
19
+ export function State(
20
20
  onLanguageChange: EventEmitterInstance<string>,
21
21
  onPendingLanguageChange: EventEmitterInstance<string>,
22
22
  onRunningChange: EventEmitterInstance<boolean>
23
- ) => {
23
+ ) {
24
24
  let state = initState();
25
25
  let devCredentials: DevCredentials = undefined;
26
26
 
27
- function init(options?: Partial<TolgeeOptions>) {
28
- state = initState(options, state);
29
- }
30
-
31
- function isRunning() {
32
- return state.isRunning;
33
- }
34
-
35
- function setRunning(value: boolean) {
36
- if (state.isRunning !== value) {
37
- state.isRunning = value;
38
- onRunningChange.emit(value);
39
- }
40
- }
41
-
42
- function isInitialLoading() {
43
- return state.isInitialLoading;
44
- }
45
-
46
- function setInitialLoading(value: boolean) {
47
- state.isInitialLoading = value;
48
- }
49
-
50
- function getLanguage() {
51
- return state.language || state.initialOptions.language;
52
- }
53
-
54
- function setLanguage(language: string) {
55
- if (state.language !== language) {
56
- state.language = language;
57
- onLanguageChange.emit(language);
58
- }
59
- }
60
-
61
- function getPendingLanguage() {
62
- return state.pendingLanguage || getLanguage();
63
- }
64
-
65
- function setPendingLanguage(language: string) {
66
- if (state.pendingLanguage !== language) {
67
- state.pendingLanguage = language;
68
- onPendingLanguageChange.emit(language);
69
- }
70
- }
71
-
72
- function getInitialOptions() {
73
- return { ...state.initialOptions, ...devCredentials };
74
- }
75
-
76
- function addActiveNs(ns: NsFallback) {
77
- const namespaces = getFallbackArray(ns);
78
- namespaces.forEach((namespace) => {
79
- const value = state.activeNamespaces.get(namespace);
80
- if (value !== undefined) {
81
- state.activeNamespaces.set(namespace, value + 1);
82
- } else {
83
- state.activeNamespaces.set(namespace, 1);
27
+ const self = Object.freeze({
28
+ init(options?: Partial<TolgeeOptions>) {
29
+ state = initState(options, state);
30
+ },
31
+
32
+ isRunning() {
33
+ return state.isRunning;
34
+ },
35
+
36
+ setRunning(value: boolean) {
37
+ if (state.isRunning !== value) {
38
+ state.isRunning = value;
39
+ onRunningChange.emit(value);
84
40
  }
85
- });
86
- }
87
-
88
- function removeActiveNs(ns: NsFallback) {
89
- const namespaces = getFallbackArray(ns);
90
- namespaces.forEach((namespace) => {
91
- const value = state.activeNamespaces.get(namespace);
92
- if (value !== undefined && value > 1) {
93
- state.activeNamespaces.set(namespace, value - 1);
94
- } else {
95
- state.activeNamespaces.delete(namespace);
41
+ },
42
+
43
+ isInitialLoading() {
44
+ return state.isInitialLoading;
45
+ },
46
+
47
+ setInitialLoading(value: boolean) {
48
+ state.isInitialLoading = value;
49
+ },
50
+
51
+ getLanguage() {
52
+ return state.language || state.initialOptions.language;
53
+ },
54
+
55
+ setLanguage(language: string) {
56
+ if (state.language !== language) {
57
+ state.language = language;
58
+ onLanguageChange.emit(language);
96
59
  }
97
- });
98
- }
99
-
100
- function getRequiredNamespaces() {
101
- return unique([
102
- ...(state.initialOptions.ns || [state.initialOptions.defaultNs]),
103
- ...getFallbackArray(state.initialOptions.fallbackNs),
104
- ...state.activeNamespaces.keys(),
105
- ]);
106
- }
107
-
108
- function getFallbackLangs(lang?: string) {
109
- const language = lang || getLanguage();
110
- if (!language) {
111
- return [];
112
- }
113
- return unique([
114
- language,
115
- ...getFallbackFromStruct(language, state.initialOptions.fallbackLanguage),
116
- ]);
117
- }
118
-
119
- function getFallbackNs() {
120
- return getFallbackArray(state.initialOptions.fallbackNs);
121
- }
122
-
123
- function getDefaultNs(ns?: NsType) {
124
- return ns === undefined ? state.initialOptions.defaultNs : ns;
125
- }
126
-
127
- function getAvailableLanguages() {
128
- if (state.initialOptions.availableLanguages) {
129
- return state.initialOptions.availableLanguages;
130
- } else if (state.initialOptions.staticData) {
131
- const languagesFromStaticData = Object.keys(
132
- state.initialOptions.staticData
133
- ).map((key) => decodeCacheKey(key).language);
134
- return Array.from(new Set(languagesFromStaticData));
135
- }
136
- }
137
-
138
- function withDefaultNs(descriptor: CacheDescriptor): CacheDescriptorInternal {
139
- return {
140
- namespace:
141
- descriptor.namespace === undefined
142
- ? getInitialOptions().defaultNs
143
- : descriptor.namespace,
144
- language: descriptor.language,
145
- };
146
- }
147
-
148
- function overrideCredentials(credentials: DevCredentials) {
149
- if (credentials) {
150
- devCredentials = {
151
- ...credentials,
152
- apiUrl: sanitizeUrl(credentials.apiUrl),
60
+ },
61
+
62
+ getPendingLanguage() {
63
+ return state.pendingLanguage || self.getLanguage();
64
+ },
65
+
66
+ setPendingLanguage(language: string) {
67
+ if (state.pendingLanguage !== language) {
68
+ state.pendingLanguage = language;
69
+ onPendingLanguageChange.emit(language);
70
+ }
71
+ },
72
+
73
+ getInitialOptions() {
74
+ return { ...state.initialOptions, ...devCredentials };
75
+ },
76
+
77
+ addActiveNs(ns: NsFallback) {
78
+ const namespaces = getFallbackArray(ns);
79
+ namespaces.forEach((namespace) => {
80
+ const value = state.activeNamespaces.get(namespace);
81
+ if (value !== undefined) {
82
+ state.activeNamespaces.set(namespace, value + 1);
83
+ } else {
84
+ state.activeNamespaces.set(namespace, 1);
85
+ }
86
+ });
87
+ },
88
+
89
+ removeActiveNs(ns: NsFallback) {
90
+ const namespaces = getFallbackArray(ns);
91
+ namespaces.forEach((namespace) => {
92
+ const value = state.activeNamespaces.get(namespace);
93
+ if (value !== undefined && value > 1) {
94
+ state.activeNamespaces.set(namespace, value - 1);
95
+ } else {
96
+ state.activeNamespaces.delete(namespace);
97
+ }
98
+ });
99
+ },
100
+ getRequiredNamespaces() {
101
+ return unique([
102
+ ...(state.initialOptions.ns || [state.initialOptions.defaultNs]),
103
+ ...getFallbackArray(state.initialOptions.fallbackNs),
104
+ ...state.activeNamespaces.keys(),
105
+ ]);
106
+ },
107
+
108
+ getFallbackLangs(lang?: string) {
109
+ const language = lang || self.getLanguage();
110
+ if (!language) {
111
+ return [];
112
+ }
113
+ return unique([
114
+ language,
115
+ ...getFallbackFromStruct(
116
+ language,
117
+ state.initialOptions.fallbackLanguage
118
+ ),
119
+ ]);
120
+ },
121
+
122
+ getFallbackNs() {
123
+ return getFallbackArray(state.initialOptions.fallbackNs);
124
+ },
125
+
126
+ getDefaultNs(ns?: NsType) {
127
+ return ns === undefined ? state.initialOptions.defaultNs : ns;
128
+ },
129
+
130
+ getAvailableLanguages() {
131
+ if (state.initialOptions.availableLanguages) {
132
+ return state.initialOptions.availableLanguages;
133
+ } else if (state.initialOptions.staticData) {
134
+ const languagesFromStaticData = Object.keys(
135
+ state.initialOptions.staticData
136
+ ).map((key) => decodeCacheKey(key).language);
137
+ return Array.from(new Set(languagesFromStaticData));
138
+ }
139
+ },
140
+
141
+ withDefaultNs(descriptor: CacheDescriptor): CacheDescriptorInternal {
142
+ return {
143
+ namespace:
144
+ descriptor.namespace === undefined
145
+ ? self.getInitialOptions().defaultNs
146
+ : descriptor.namespace,
147
+ language: descriptor.language,
153
148
  };
154
- } else {
155
- devCredentials = undefined;
156
- }
157
- }
158
-
159
- return Object.freeze({
160
- init,
161
- isRunning,
162
- setRunning,
163
- isInitialLoading,
164
- setInitialLoading,
165
- getLanguage,
166
- setLanguage,
167
- getPendingLanguage,
168
- setPendingLanguage,
169
- getInitialOptions,
170
- addActiveNs,
171
- removeActiveNs,
172
- getRequiredNamespaces,
173
- getFallbackLangs,
174
- getFallbackNs,
175
- getDefaultNs,
176
- getAvailableLanguages,
177
- withDefaultNs,
178
- overrideCredentials,
149
+ },
150
+
151
+ overrideCredentials(credentials: DevCredentials) {
152
+ if (credentials) {
153
+ devCredentials = {
154
+ ...credentials,
155
+ apiUrl: sanitizeUrl(credentials.apiUrl),
156
+ };
157
+ } else {
158
+ devCredentials = undefined;
159
+ }
160
+ },
179
161
  });
180
- };
162
+ return self;
163
+ }
181
164
 
182
165
  export type StateInstance = ReturnType<typeof State>;
@@ -139,10 +139,10 @@ export const combineOptions = <T extends TolgeeOptions>(
139
139
  return result;
140
140
  };
141
141
 
142
- export const initState = (
142
+ export function initState(
143
143
  options?: Partial<TolgeeOptions>,
144
144
  previousState?: State
145
- ): State => {
145
+ ): State {
146
146
  const initialOptions = combineOptions(
147
147
  defaultValues,
148
148
  previousState?.initialOptions,
@@ -161,4 +161,4 @@ export const initState = (
161
161
  isInitialLoading: false,
162
162
  isRunning: false,
163
163
  };
164
- };
164
+ }
@@ -4,19 +4,18 @@ export const ValueObserver = <T = any>(
4
4
  handler: (value: T) => void
5
5
  ): ValueObserverInstance<T> => {
6
6
  let previousValue: T = initialValue;
7
- function init(value: T) {
8
- previousValue = value;
9
- }
10
- function notify() {
11
- const value = valueGetter();
12
- if (previousValue !== value) {
13
- handler(value);
14
- }
15
- previousValue = value;
16
- }
7
+
17
8
  return Object.freeze({
18
- init,
19
- notify,
9
+ init(value: T) {
10
+ previousValue = value;
11
+ },
12
+ notify() {
13
+ const value = valueGetter();
14
+ if (previousValue !== value) {
15
+ handler(value);
16
+ }
17
+ previousValue = value;
18
+ },
20
19
  });
21
20
  };
22
21
 
package/src/TolgeeCore.ts CHANGED
@@ -9,20 +9,20 @@ import {
9
9
  TranslationKey,
10
10
  } from './types';
11
11
 
12
- const createTolgee = (options: TolgeeOptions) => {
12
+ function createTolgee(options: TolgeeOptions) {
13
13
  const controller = Controller({
14
14
  options,
15
15
  });
16
16
 
17
17
  // restarts tolgee while applying callback
18
- const withRestart = (callback: () => void) => {
18
+ function withRestart(callback: () => void) {
19
19
  const wasRunning = controller.isRunning();
20
20
  wasRunning && controller.stop();
21
21
  callback();
22
22
  wasRunning && controller.run();
23
- };
23
+ }
24
24
 
25
- const tolgee = Object.freeze({
25
+ const self = Object.freeze({
26
26
  /**
27
27
  * Listen to tolgee events.
28
28
  */
@@ -201,7 +201,7 @@ const createTolgee = (options: TolgeeOptions) => {
201
201
  */
202
202
  addPlugin(plugin: TolgeePlugin | undefined) {
203
203
  if (plugin) {
204
- withRestart(() => controller.addPlugin(tolgee, plugin));
204
+ withRestart(() => controller.addPlugin(self, plugin));
205
205
  }
206
206
  },
207
207
 
@@ -218,8 +218,8 @@ const createTolgee = (options: TolgeeOptions) => {
218
218
  },
219
219
  });
220
220
 
221
- return tolgee;
222
- };
221
+ return self;
222
+ }
223
223
 
224
224
  export type TolgeeInstance = Omit<ReturnType<typeof createTolgee>, 't'> & {
225
225
  // enabling generics (when inferred they are lost)
@@ -3,13 +3,14 @@ import { TolgeeCore, TolgeeInstance } from '../TolgeeCore';
3
3
  import { TolgeePlugin, TreeTranslationsData } from '../types';
4
4
  import { resolvablePromise } from './testTools';
5
5
 
6
- const waitForInitialLoad = (tolgee: TolgeeInstance) =>
7
- new Promise<void>((resolve) => {
6
+ function waitForInitialLoad(tolgee: TolgeeInstance) {
7
+ return new Promise<void>((resolve) => {
8
8
  const { unsubscribe } = tolgee.on('initialLoad', () => {
9
9
  unsubscribe();
10
10
  resolve();
11
11
  });
12
12
  });
13
+ }
13
14
 
14
15
  const DevToolsPlugin =
15
16
  (postfix = ''): TolgeePlugin =>
package/src/helpers.ts CHANGED
@@ -8,19 +8,20 @@ export function isPromise(value: any) {
8
8
  return Boolean(value && typeof value.then === 'function');
9
9
  }
10
10
 
11
- export const valueOrPromise = <T, R>(
11
+ export function valueOrPromise<T, R>(
12
12
  value: T | Promise<T>,
13
13
  callback: (value: T) => R
14
- ) => {
14
+ ) {
15
15
  if (isPromise(value)) {
16
16
  return Promise.resolve(value).then(callback);
17
17
  } else {
18
18
  return callback(value as T);
19
19
  }
20
- };
20
+ }
21
21
 
22
- export const missingOptionError = (option: string) =>
23
- `Tolgee: You need to specify '${option}' option`;
22
+ export function missingOptionError(option: string) {
23
+ return `Tolgee: You need to specify '${option}' option`;
24
+ }
24
25
 
25
26
  export function isObject(item: any) {
26
27
  return typeof item === 'object' && !Array.isArray(item) && item !== null;