@lingui/core 4.0.0-next.3 → 4.0.0-next.4

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.
package/compile.js CHANGED
@@ -2,4 +2,4 @@
2
2
  * This entry is for old runtimes which do not support `exports` field in package.json
3
3
  * https://github.com/facebook/metro/issues/670
4
4
  */
5
- module.exports = require("./build/cjs/compile.js")
5
+ module.exports = require("./dist/compile.cjs")
@@ -0,0 +1,53 @@
1
+ 'use strict';
2
+
3
+ const parser = require('@messageformat/parser');
4
+
5
+ function processTokens(tokens, mapText) {
6
+ if (!tokens.filter((token) => token.type !== "content").length) {
7
+ return tokens.map((token) => mapText(token.value)).join("");
8
+ }
9
+ return tokens.map((token) => {
10
+ if (token.type === "content") {
11
+ return mapText(token.value);
12
+ } else if (token.type === "octothorpe") {
13
+ return "#";
14
+ } else if (token.type === "argument") {
15
+ return [token.arg];
16
+ } else if (token.type === "function") {
17
+ const _param = token?.param?.[0];
18
+ if (_param) {
19
+ return [token.arg, token.key, _param.value.trim()];
20
+ } else {
21
+ return [token.arg, token.key];
22
+ }
23
+ }
24
+ const offset = token.pluralOffset;
25
+ const formatProps = {};
26
+ token.cases.forEach((item) => {
27
+ formatProps[item.key.replace(/^=(.)+/, "$1")] = processTokens(
28
+ item.tokens,
29
+ mapText
30
+ );
31
+ });
32
+ return [
33
+ token.arg,
34
+ token.type,
35
+ {
36
+ offset,
37
+ ...formatProps
38
+ }
39
+ ];
40
+ });
41
+ }
42
+ function compileMessage(message, mapText = (v) => v) {
43
+ try {
44
+ return processTokens(parser.parse(message), mapText);
45
+ } catch (e) {
46
+ console.error(`${e.message}
47
+
48
+ Message: ${message}`);
49
+ return message;
50
+ }
51
+ }
52
+
53
+ exports.compileMessage = compileMessage;
@@ -0,0 +1,51 @@
1
+ import { parse } from '@messageformat/parser';
2
+
3
+ function processTokens(tokens, mapText) {
4
+ if (!tokens.filter((token) => token.type !== "content").length) {
5
+ return tokens.map((token) => mapText(token.value)).join("");
6
+ }
7
+ return tokens.map((token) => {
8
+ if (token.type === "content") {
9
+ return mapText(token.value);
10
+ } else if (token.type === "octothorpe") {
11
+ return "#";
12
+ } else if (token.type === "argument") {
13
+ return [token.arg];
14
+ } else if (token.type === "function") {
15
+ const _param = token?.param?.[0];
16
+ if (_param) {
17
+ return [token.arg, token.key, _param.value.trim()];
18
+ } else {
19
+ return [token.arg, token.key];
20
+ }
21
+ }
22
+ const offset = token.pluralOffset;
23
+ const formatProps = {};
24
+ token.cases.forEach((item) => {
25
+ formatProps[item.key.replace(/^=(.)+/, "$1")] = processTokens(
26
+ item.tokens,
27
+ mapText
28
+ );
29
+ });
30
+ return [
31
+ token.arg,
32
+ token.type,
33
+ {
34
+ offset,
35
+ ...formatProps
36
+ }
37
+ ];
38
+ });
39
+ }
40
+ function compileMessage(message, mapText = (v) => v) {
41
+ try {
42
+ return processTokens(parse(message), mapText);
43
+ } catch (e) {
44
+ console.error(`${e.message}
45
+
46
+ Message: ${message}`);
47
+ return message;
48
+ }
49
+ }
50
+
51
+ export { compileMessage };
@@ -1,39 +1,40 @@
1
1
  'use strict';
2
2
 
3
- var compile = require('@lingui/core/compile');
3
+ const compile = require('@lingui/core/compile');
4
4
 
5
- const isString = s => typeof s === "string";
6
- const isFunction = f => typeof f === "function";
5
+ const isString = (s) => typeof s === "string";
6
+ const isFunction = (f) => typeof f === "function";
7
7
 
8
- /** Memoized cache */
9
- const cache = new Map();
8
+ const cache = /* @__PURE__ */ new Map();
10
9
  function normalizeLocales(locales) {
11
10
  const out = Array.isArray(locales) ? locales : [locales];
12
11
  return [...out, "en"];
13
12
  }
14
- function date(locales, value) {
15
- let format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
13
+ function date(locales, value, format = {}) {
16
14
  const _locales = normalizeLocales(locales);
17
- const formatter = getMemoized(() => cacheKey("date", _locales, format), () => new Intl.DateTimeFormat(_locales, format));
15
+ const formatter = getMemoized(
16
+ () => cacheKey("date", _locales, format),
17
+ () => new Intl.DateTimeFormat(_locales, format)
18
+ );
18
19
  return formatter.format(isString(value) ? new Date(value) : value);
19
20
  }
20
- function number(locales, value) {
21
- let format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
21
+ function number(locales, value, format = {}) {
22
22
  const _locales = normalizeLocales(locales);
23
- const formatter = getMemoized(() => cacheKey("number", _locales, format), () => new Intl.NumberFormat(_locales, format));
23
+ const formatter = getMemoized(
24
+ () => cacheKey("number", _locales, format),
25
+ () => new Intl.NumberFormat(_locales, format)
26
+ );
24
27
  return formatter.format(value);
25
28
  }
26
- function plural(locales, ordinal, value, _ref) {
27
- let {
28
- offset = 0,
29
- ...rules
30
- } = _ref;
29
+ function plural(locales, ordinal, value, { offset = 0, ...rules }) {
31
30
  const _locales = normalizeLocales(locales);
32
- const plurals = ordinal ? getMemoized(() => cacheKey("plural-ordinal", _locales, {}), () => new Intl.PluralRules(_locales, {
33
- type: "ordinal"
34
- })) : getMemoized(() => cacheKey("plural-cardinal", _locales, {}), () => new Intl.PluralRules(_locales, {
35
- type: "cardinal"
36
- }));
31
+ const plurals = ordinal ? getMemoized(
32
+ () => cacheKey("plural-ordinal", _locales, {}),
33
+ () => new Intl.PluralRules(_locales, { type: "ordinal" })
34
+ ) : getMemoized(
35
+ () => cacheKey("plural-cardinal", _locales, {}),
36
+ () => new Intl.PluralRules(_locales, { type: "cardinal" })
37
+ );
37
38
  return rules[value] ?? rules[plurals.select(value - offset)] ?? rules.other;
38
39
  }
39
40
  function getMemoized(getKey, construct) {
@@ -45,26 +46,22 @@ function getMemoized(getKey, construct) {
45
46
  }
46
47
  return formatter;
47
48
  }
48
- function cacheKey(type, locales) {
49
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
49
+ function cacheKey(type, locales, options = {}) {
50
50
  const localeKey = [...locales].sort().join("-");
51
51
  return `${type}-${localeKey}-${JSON.stringify(options)}`;
52
52
  }
53
53
 
54
- var formats = /*#__PURE__*/Object.freeze({
54
+ const formats = {
55
55
  __proto__: null,
56
56
  date: date,
57
57
  number: number,
58
58
  plural: plural
59
- });
59
+ };
60
60
 
61
61
  const UNICODE_REGEX = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/g;
62
- const getDefaultFormats = function (locale, locales) {
63
- let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
62
+ const getDefaultFormats = (locale, locales, formats = {}) => {
64
63
  locales = locales || locale;
65
- const style = format => isString(format) ? formats[format] || {
66
- style: format
67
- } : format;
64
+ const style = (format) => isString(format) ? formats[format] || { style: format } : format;
68
65
  const replaceOctothorpe = (value, message) => {
69
66
  const numberFormat = Object.keys(formats).length ? style("number") : {};
70
67
  const valueStr = number(locales, value, numberFormat);
@@ -72,82 +69,75 @@ const getDefaultFormats = function (locale, locales) {
72
69
  };
73
70
  return {
74
71
  plural: (value, cases) => {
75
- const {
76
- offset = 0
77
- } = cases;
72
+ const { offset = 0 } = cases;
78
73
  const message = plural(locales, false, value, cases);
79
74
  return replaceOctothorpe(value - offset, message);
80
75
  },
81
76
  selectordinal: (value, cases) => {
82
- const {
83
- offset = 0
84
- } = cases;
77
+ const { offset = 0 } = cases;
85
78
  const message = plural(locales, true, value, cases);
86
79
  return replaceOctothorpe(value - offset, message);
87
80
  },
88
81
  select: (value, rules) => rules[value] || rules.other,
89
82
  number: (value, format) => number(locales, value, style(format)),
90
83
  date: (value, format) => date(locales, value, style(format)),
91
- undefined: value => value
84
+ undefined: (value) => value
92
85
  };
93
86
  };
94
-
95
- /**
96
- * @param translation compiled message
97
- * @param locale Locale of message
98
- * @param locales Locales to be used when formatting the numbers or dates
99
- */
100
87
  function interpolate(translation, locale, locales) {
101
- /**
102
- * @param values - Parameters for variable interpolation
103
- * @param formats - Custom format styles
104
- */
105
- return function (values) {
106
- let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
88
+ return (values, formats = {}) => {
107
89
  const formatters = getDefaultFormats(locale, locales, formats);
108
- const formatMessage = message => {
109
- if (!Array.isArray(message)) return message;
110
- return message.reduce((message, token) => {
111
- if (isString(token)) return message + token;
90
+ const formatMessage = (message) => {
91
+ if (!Array.isArray(message))
92
+ return message;
93
+ return message.reduce((message2, token) => {
94
+ if (isString(token))
95
+ return message2 + token;
112
96
  const [name, type, format] = token;
113
97
  let interpolatedFormat = {};
114
98
  if (format != null && !isString(format)) {
115
- Object.keys(format).forEach(key => {
99
+ Object.keys(format).forEach((key) => {
116
100
  interpolatedFormat[key] = formatMessage(format[key]);
117
101
  });
118
102
  } else {
119
103
  interpolatedFormat = format;
120
104
  }
121
105
  const value = formatters[type](values[name], interpolatedFormat);
122
- if (value == null) return message;
123
- return message + value;
106
+ if (value == null)
107
+ return message2;
108
+ return message2 + value;
124
109
  }, "");
125
110
  };
126
111
  const result = formatMessage(translation);
127
- if (isString(result) && UNICODE_REGEX.test(result)) return JSON.parse(`"${result.trim()}"`);
128
- if (isString(result)) return result.trim();
112
+ if (isString(result) && UNICODE_REGEX.test(result))
113
+ return JSON.parse(`"${result.trim()}"`);
114
+ if (isString(result))
115
+ return result.trim();
129
116
  return result;
130
117
  };
131
118
  }
132
119
 
133
120
  class EventEmitter {
134
- _events = {};
121
+ constructor() {
122
+ this._events = {};
123
+ }
135
124
  on(event, listener) {
136
- if (!this._hasEvent(event)) this._events[event] = [];
125
+ if (!this._hasEvent(event))
126
+ this._events[event] = [];
137
127
  this._events[event].push(listener);
138
128
  return () => this.removeListener(event, listener);
139
129
  }
140
130
  removeListener(event, listener) {
141
- if (!this._hasEvent(event)) return;
131
+ if (!this._hasEvent(event))
132
+ return;
142
133
  const index = this._events[event].indexOf(listener);
143
- if (~index) this._events[event].splice(index, 1);
134
+ if (~index)
135
+ this._events[event].splice(index, 1);
144
136
  }
145
- emit(event) {
146
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
147
- args[_key - 1] = arguments[_key];
148
- }
149
- if (!this._hasEvent(event)) return;
150
- this._events[event].map(listener => listener.apply(this, args));
137
+ emit(event, ...args) {
138
+ if (!this._hasEvent(event))
139
+ return;
140
+ this._events[event].map((listener) => listener.apply(this, args));
151
141
  }
152
142
  _hasEvent(event) {
153
143
  return Array.isArray(this._events[event]);
@@ -159,9 +149,12 @@ class I18n extends EventEmitter {
159
149
  super();
160
150
  this._messages = {};
161
151
  this._localeData = {};
162
- if (params.missing != null) this._missing = params.missing;
163
- if (params.messages != null) this.load(params.messages);
164
- if (params.localeData != null) this.loadLocaleData(params.localeData);
152
+ if (params.missing != null)
153
+ this._missing = params.missing;
154
+ if (params.messages != null)
155
+ this.load(params.messages);
156
+ if (params.localeData != null)
157
+ this.loadLocaleData(params.localeData);
165
158
  if (params.locale != null || params.locales != null) {
166
159
  this.activate(params.locale, params.locales);
167
160
  }
@@ -175,7 +168,6 @@ class I18n extends EventEmitter {
175
168
  get messages() {
176
169
  return this._messages[this._locale] ?? {};
177
170
  }
178
-
179
171
  /**
180
172
  * @deprecated this has no effect. Please remove this from the code. Introduced in v4
181
173
  */
@@ -189,23 +181,16 @@ class I18n extends EventEmitter {
189
181
  Object.assign(this._localeData[locale], localeData);
190
182
  }
191
183
  }
192
-
193
- /**
194
- * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4
195
- */
196
-
197
184
  /**
198
185
  * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4
199
186
  */
200
187
  loadLocaleData(localeOrAllData, localeData) {
201
188
  if (localeData != null) {
202
- // loadLocaleData('en', enLocaleData)
203
- // Loading locale data for a single locale.
204
189
  this._loadLocaleData(localeOrAllData, localeData);
205
190
  } else {
206
- // loadLocaleData(allLocaleData)
207
- // Loading all locale data at once.
208
- Object.keys(localeOrAllData).forEach(locale => this._loadLocaleData(locale, localeOrAllData[locale]));
191
+ Object.keys(localeOrAllData).forEach(
192
+ (locale) => this._loadLocaleData(locale, localeOrAllData[locale])
193
+ );
209
194
  }
210
195
  this.emit("change");
211
196
  }
@@ -218,17 +203,14 @@ class I18n extends EventEmitter {
218
203
  }
219
204
  load(localeOrMessages, messages) {
220
205
  if (messages != null) {
221
- // load('en', catalog)
222
- // Loading a catalog for a single locale.
223
206
  this._load(localeOrMessages, messages);
224
207
  } else {
225
- // load(catalogs)
226
- // Loading several locales at once.
227
- Object.keys(localeOrMessages).forEach(locale => this._load(locale, localeOrMessages[locale]));
208
+ Object.keys(localeOrMessages).forEach(
209
+ (locale) => this._load(locale, localeOrMessages[locale])
210
+ );
228
211
  }
229
212
  this.emit("change");
230
213
  }
231
-
232
214
  /**
233
215
  * @param locales one locale or array of locales.
234
216
  * If array of locales is passed they would be used as fallback
@@ -237,8 +219,7 @@ class I18n extends EventEmitter {
237
219
  * @param notify Should emit `change` event for all subscribers.
238
220
  * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.
239
221
  */
240
- loadAndActivate(locales, messages) {
241
- let notify = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
222
+ loadAndActivate(locales, messages, notify = true) {
242
223
  if (Array.isArray(locales)) {
243
224
  this._locale = locales[0];
244
225
  this._locales = locales;
@@ -261,41 +242,34 @@ class I18n extends EventEmitter {
261
242
  this._locales = locales;
262
243
  this.emit("change");
263
244
  }
264
-
265
245
  // method for translation and formatting
266
- _(id) {
267
- let values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
268
- let {
269
- message,
270
- formats
271
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
246
+ _(id, values = {}, { message, formats } = {}) {
272
247
  if (!isString(id)) {
273
248
  values = id.values || values;
274
249
  message = id.message;
275
250
  id = id.id;
276
251
  }
277
252
  const messageMissing = !this.messages[id];
278
-
279
- // replace missing messages with custom message for debugging
280
253
  const missing = this._missing;
281
254
  if (missing && messageMissing) {
282
255
  return isFunction(missing) ? missing(this._locale, id) : missing;
283
256
  }
284
257
  if (messageMissing) {
285
- this.emit("missing", {
286
- id,
287
- locale: this._locale
288
- });
258
+ this.emit("missing", { id, locale: this._locale });
289
259
  }
290
260
  let translation = this.messages[id] || message || id;
291
261
  if (process.env.NODE_ENV !== "production") {
292
262
  translation = isString(translation) ? compile.compileMessage(translation) : translation;
293
263
  }
294
-
295
- // hack for parsing unicode values inside a string to get parsed in react native environments
296
- if (isString(translation) && UNICODE_REGEX.test(translation)) return JSON.parse(`"${translation}"`);
297
- if (isString(translation)) return translation;
298
- return interpolate(translation, this._locale, this._locales)(values, formats);
264
+ if (isString(translation) && UNICODE_REGEX.test(translation))
265
+ return JSON.parse(`"${translation}"`);
266
+ if (isString(translation))
267
+ return translation;
268
+ return interpolate(
269
+ translation,
270
+ this._locale,
271
+ this._locales
272
+ )(values, formats);
299
273
  }
300
274
  date(value, format) {
301
275
  return date(this._locales || this._locale, value, format);
@@ -304,8 +278,7 @@ class I18n extends EventEmitter {
304
278
  return number(this._locales || this._locale, value, format);
305
279
  }
306
280
  }
307
- function setupI18n() {
308
- let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
281
+ function setupI18n(params = {}) {
309
282
  return new I18n(params);
310
283
  }
311
284
 
@@ -315,4 +288,3 @@ exports.I18n = I18n;
315
288
  exports.formats = formats;
316
289
  exports.i18n = i18n;
317
290
  exports.setupI18n = setupI18n;
318
- //# sourceMappingURL=index.js.map
@@ -1,37 +1,38 @@
1
1
  import { compileMessage } from '@lingui/core/compile';
2
2
 
3
- const isString = s => typeof s === "string";
4
- const isFunction = f => typeof f === "function";
3
+ const isString = (s) => typeof s === "string";
4
+ const isFunction = (f) => typeof f === "function";
5
5
 
6
- /** Memoized cache */
7
- const cache = new Map();
6
+ const cache = /* @__PURE__ */ new Map();
8
7
  function normalizeLocales(locales) {
9
8
  const out = Array.isArray(locales) ? locales : [locales];
10
9
  return [...out, "en"];
11
10
  }
12
- function date(locales, value) {
13
- let format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
11
+ function date(locales, value, format = {}) {
14
12
  const _locales = normalizeLocales(locales);
15
- const formatter = getMemoized(() => cacheKey("date", _locales, format), () => new Intl.DateTimeFormat(_locales, format));
13
+ const formatter = getMemoized(
14
+ () => cacheKey("date", _locales, format),
15
+ () => new Intl.DateTimeFormat(_locales, format)
16
+ );
16
17
  return formatter.format(isString(value) ? new Date(value) : value);
17
18
  }
18
- function number(locales, value) {
19
- let format = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
19
+ function number(locales, value, format = {}) {
20
20
  const _locales = normalizeLocales(locales);
21
- const formatter = getMemoized(() => cacheKey("number", _locales, format), () => new Intl.NumberFormat(_locales, format));
21
+ const formatter = getMemoized(
22
+ () => cacheKey("number", _locales, format),
23
+ () => new Intl.NumberFormat(_locales, format)
24
+ );
22
25
  return formatter.format(value);
23
26
  }
24
- function plural(locales, ordinal, value, _ref) {
25
- let {
26
- offset = 0,
27
- ...rules
28
- } = _ref;
27
+ function plural(locales, ordinal, value, { offset = 0, ...rules }) {
29
28
  const _locales = normalizeLocales(locales);
30
- const plurals = ordinal ? getMemoized(() => cacheKey("plural-ordinal", _locales, {}), () => new Intl.PluralRules(_locales, {
31
- type: "ordinal"
32
- })) : getMemoized(() => cacheKey("plural-cardinal", _locales, {}), () => new Intl.PluralRules(_locales, {
33
- type: "cardinal"
34
- }));
29
+ const plurals = ordinal ? getMemoized(
30
+ () => cacheKey("plural-ordinal", _locales, {}),
31
+ () => new Intl.PluralRules(_locales, { type: "ordinal" })
32
+ ) : getMemoized(
33
+ () => cacheKey("plural-cardinal", _locales, {}),
34
+ () => new Intl.PluralRules(_locales, { type: "cardinal" })
35
+ );
35
36
  return rules[value] ?? rules[plurals.select(value - offset)] ?? rules.other;
36
37
  }
37
38
  function getMemoized(getKey, construct) {
@@ -43,26 +44,22 @@ function getMemoized(getKey, construct) {
43
44
  }
44
45
  return formatter;
45
46
  }
46
- function cacheKey(type, locales) {
47
- let options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
47
+ function cacheKey(type, locales, options = {}) {
48
48
  const localeKey = [...locales].sort().join("-");
49
49
  return `${type}-${localeKey}-${JSON.stringify(options)}`;
50
50
  }
51
51
 
52
- var formats = /*#__PURE__*/Object.freeze({
52
+ const formats = {
53
53
  __proto__: null,
54
54
  date: date,
55
55
  number: number,
56
56
  plural: plural
57
- });
57
+ };
58
58
 
59
59
  const UNICODE_REGEX = /\\u[a-fA-F0-9]{4}|\\x[a-fA-F0-9]{2}/g;
60
- const getDefaultFormats = function (locale, locales) {
61
- let formats = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
60
+ const getDefaultFormats = (locale, locales, formats = {}) => {
62
61
  locales = locales || locale;
63
- const style = format => isString(format) ? formats[format] || {
64
- style: format
65
- } : format;
62
+ const style = (format) => isString(format) ? formats[format] || { style: format } : format;
66
63
  const replaceOctothorpe = (value, message) => {
67
64
  const numberFormat = Object.keys(formats).length ? style("number") : {};
68
65
  const valueStr = number(locales, value, numberFormat);
@@ -70,82 +67,75 @@ const getDefaultFormats = function (locale, locales) {
70
67
  };
71
68
  return {
72
69
  plural: (value, cases) => {
73
- const {
74
- offset = 0
75
- } = cases;
70
+ const { offset = 0 } = cases;
76
71
  const message = plural(locales, false, value, cases);
77
72
  return replaceOctothorpe(value - offset, message);
78
73
  },
79
74
  selectordinal: (value, cases) => {
80
- const {
81
- offset = 0
82
- } = cases;
75
+ const { offset = 0 } = cases;
83
76
  const message = plural(locales, true, value, cases);
84
77
  return replaceOctothorpe(value - offset, message);
85
78
  },
86
79
  select: (value, rules) => rules[value] || rules.other,
87
80
  number: (value, format) => number(locales, value, style(format)),
88
81
  date: (value, format) => date(locales, value, style(format)),
89
- undefined: value => value
82
+ undefined: (value) => value
90
83
  };
91
84
  };
92
-
93
- /**
94
- * @param translation compiled message
95
- * @param locale Locale of message
96
- * @param locales Locales to be used when formatting the numbers or dates
97
- */
98
85
  function interpolate(translation, locale, locales) {
99
- /**
100
- * @param values - Parameters for variable interpolation
101
- * @param formats - Custom format styles
102
- */
103
- return function (values) {
104
- let formats = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
86
+ return (values, formats = {}) => {
105
87
  const formatters = getDefaultFormats(locale, locales, formats);
106
- const formatMessage = message => {
107
- if (!Array.isArray(message)) return message;
108
- return message.reduce((message, token) => {
109
- if (isString(token)) return message + token;
88
+ const formatMessage = (message) => {
89
+ if (!Array.isArray(message))
90
+ return message;
91
+ return message.reduce((message2, token) => {
92
+ if (isString(token))
93
+ return message2 + token;
110
94
  const [name, type, format] = token;
111
95
  let interpolatedFormat = {};
112
96
  if (format != null && !isString(format)) {
113
- Object.keys(format).forEach(key => {
97
+ Object.keys(format).forEach((key) => {
114
98
  interpolatedFormat[key] = formatMessage(format[key]);
115
99
  });
116
100
  } else {
117
101
  interpolatedFormat = format;
118
102
  }
119
103
  const value = formatters[type](values[name], interpolatedFormat);
120
- if (value == null) return message;
121
- return message + value;
104
+ if (value == null)
105
+ return message2;
106
+ return message2 + value;
122
107
  }, "");
123
108
  };
124
109
  const result = formatMessage(translation);
125
- if (isString(result) && UNICODE_REGEX.test(result)) return JSON.parse(`"${result.trim()}"`);
126
- if (isString(result)) return result.trim();
110
+ if (isString(result) && UNICODE_REGEX.test(result))
111
+ return JSON.parse(`"${result.trim()}"`);
112
+ if (isString(result))
113
+ return result.trim();
127
114
  return result;
128
115
  };
129
116
  }
130
117
 
131
118
  class EventEmitter {
132
- _events = {};
119
+ constructor() {
120
+ this._events = {};
121
+ }
133
122
  on(event, listener) {
134
- if (!this._hasEvent(event)) this._events[event] = [];
123
+ if (!this._hasEvent(event))
124
+ this._events[event] = [];
135
125
  this._events[event].push(listener);
136
126
  return () => this.removeListener(event, listener);
137
127
  }
138
128
  removeListener(event, listener) {
139
- if (!this._hasEvent(event)) return;
129
+ if (!this._hasEvent(event))
130
+ return;
140
131
  const index = this._events[event].indexOf(listener);
141
- if (~index) this._events[event].splice(index, 1);
132
+ if (~index)
133
+ this._events[event].splice(index, 1);
142
134
  }
143
- emit(event) {
144
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
145
- args[_key - 1] = arguments[_key];
146
- }
147
- if (!this._hasEvent(event)) return;
148
- this._events[event].map(listener => listener.apply(this, args));
135
+ emit(event, ...args) {
136
+ if (!this._hasEvent(event))
137
+ return;
138
+ this._events[event].map((listener) => listener.apply(this, args));
149
139
  }
150
140
  _hasEvent(event) {
151
141
  return Array.isArray(this._events[event]);
@@ -157,9 +147,12 @@ class I18n extends EventEmitter {
157
147
  super();
158
148
  this._messages = {};
159
149
  this._localeData = {};
160
- if (params.missing != null) this._missing = params.missing;
161
- if (params.messages != null) this.load(params.messages);
162
- if (params.localeData != null) this.loadLocaleData(params.localeData);
150
+ if (params.missing != null)
151
+ this._missing = params.missing;
152
+ if (params.messages != null)
153
+ this.load(params.messages);
154
+ if (params.localeData != null)
155
+ this.loadLocaleData(params.localeData);
163
156
  if (params.locale != null || params.locales != null) {
164
157
  this.activate(params.locale, params.locales);
165
158
  }
@@ -173,7 +166,6 @@ class I18n extends EventEmitter {
173
166
  get messages() {
174
167
  return this._messages[this._locale] ?? {};
175
168
  }
176
-
177
169
  /**
178
170
  * @deprecated this has no effect. Please remove this from the code. Introduced in v4
179
171
  */
@@ -187,23 +179,16 @@ class I18n extends EventEmitter {
187
179
  Object.assign(this._localeData[locale], localeData);
188
180
  }
189
181
  }
190
-
191
- /**
192
- * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4
193
- */
194
-
195
182
  /**
196
183
  * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4
197
184
  */
198
185
  loadLocaleData(localeOrAllData, localeData) {
199
186
  if (localeData != null) {
200
- // loadLocaleData('en', enLocaleData)
201
- // Loading locale data for a single locale.
202
187
  this._loadLocaleData(localeOrAllData, localeData);
203
188
  } else {
204
- // loadLocaleData(allLocaleData)
205
- // Loading all locale data at once.
206
- Object.keys(localeOrAllData).forEach(locale => this._loadLocaleData(locale, localeOrAllData[locale]));
189
+ Object.keys(localeOrAllData).forEach(
190
+ (locale) => this._loadLocaleData(locale, localeOrAllData[locale])
191
+ );
207
192
  }
208
193
  this.emit("change");
209
194
  }
@@ -216,17 +201,14 @@ class I18n extends EventEmitter {
216
201
  }
217
202
  load(localeOrMessages, messages) {
218
203
  if (messages != null) {
219
- // load('en', catalog)
220
- // Loading a catalog for a single locale.
221
204
  this._load(localeOrMessages, messages);
222
205
  } else {
223
- // load(catalogs)
224
- // Loading several locales at once.
225
- Object.keys(localeOrMessages).forEach(locale => this._load(locale, localeOrMessages[locale]));
206
+ Object.keys(localeOrMessages).forEach(
207
+ (locale) => this._load(locale, localeOrMessages[locale])
208
+ );
226
209
  }
227
210
  this.emit("change");
228
211
  }
229
-
230
212
  /**
231
213
  * @param locales one locale or array of locales.
232
214
  * If array of locales is passed they would be used as fallback
@@ -235,8 +217,7 @@ class I18n extends EventEmitter {
235
217
  * @param notify Should emit `change` event for all subscribers.
236
218
  * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.
237
219
  */
238
- loadAndActivate(locales, messages) {
239
- let notify = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
220
+ loadAndActivate(locales, messages, notify = true) {
240
221
  if (Array.isArray(locales)) {
241
222
  this._locale = locales[0];
242
223
  this._locales = locales;
@@ -259,41 +240,34 @@ class I18n extends EventEmitter {
259
240
  this._locales = locales;
260
241
  this.emit("change");
261
242
  }
262
-
263
243
  // method for translation and formatting
264
- _(id) {
265
- let values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
266
- let {
267
- message,
268
- formats
269
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
244
+ _(id, values = {}, { message, formats } = {}) {
270
245
  if (!isString(id)) {
271
246
  values = id.values || values;
272
247
  message = id.message;
273
248
  id = id.id;
274
249
  }
275
250
  const messageMissing = !this.messages[id];
276
-
277
- // replace missing messages with custom message for debugging
278
251
  const missing = this._missing;
279
252
  if (missing && messageMissing) {
280
253
  return isFunction(missing) ? missing(this._locale, id) : missing;
281
254
  }
282
255
  if (messageMissing) {
283
- this.emit("missing", {
284
- id,
285
- locale: this._locale
286
- });
256
+ this.emit("missing", { id, locale: this._locale });
287
257
  }
288
258
  let translation = this.messages[id] || message || id;
289
259
  if (process.env.NODE_ENV !== "production") {
290
260
  translation = isString(translation) ? compileMessage(translation) : translation;
291
261
  }
292
-
293
- // hack for parsing unicode values inside a string to get parsed in react native environments
294
- if (isString(translation) && UNICODE_REGEX.test(translation)) return JSON.parse(`"${translation}"`);
295
- if (isString(translation)) return translation;
296
- return interpolate(translation, this._locale, this._locales)(values, formats);
262
+ if (isString(translation) && UNICODE_REGEX.test(translation))
263
+ return JSON.parse(`"${translation}"`);
264
+ if (isString(translation))
265
+ return translation;
266
+ return interpolate(
267
+ translation,
268
+ this._locale,
269
+ this._locales
270
+ )(values, formats);
297
271
  }
298
272
  date(value, format) {
299
273
  return date(this._locales || this._locale, value, format);
@@ -302,12 +276,10 @@ class I18n extends EventEmitter {
302
276
  return number(this._locales || this._locale, value, format);
303
277
  }
304
278
  }
305
- function setupI18n() {
306
- let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
279
+ function setupI18n(params = {}) {
307
280
  return new I18n(params);
308
281
  }
309
282
 
310
283
  const i18n = setupI18n();
311
284
 
312
285
  export { I18n, formats, i18n, setupI18n };
313
- //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@lingui/core",
3
- "version": "4.0.0-next.3",
3
+ "version": "4.0.0-next.4",
4
4
  "sideEffects": false,
5
5
  "description": "I18n tools for javascript",
6
- "main": "./build/cjs/index.js",
7
- "module": "./build/esm/index.js",
8
- "types": "./build/index.d.ts",
6
+ "main": "./dist/index.cjs",
7
+ "module": "./dist/index.mjs",
8
+ "types": "./dist/index.d.ts",
9
9
  "author": {
10
10
  "name": "Tomáš Ehrlich",
11
11
  "email": "tomas.ehrlich@gmail.com"
@@ -19,6 +19,10 @@
19
19
  "localization",
20
20
  "translation"
21
21
  ],
22
+ "scripts": {
23
+ "build": "unbuild",
24
+ "stub": "unbuild --stub"
25
+ },
22
26
  "repository": {
23
27
  "type": "git",
24
28
  "url": "https://github.com/lingui/js-lingui.git"
@@ -32,22 +36,22 @@
32
36
  "exports": {
33
37
  ".": {
34
38
  "require": {
35
- "types": "./build/index.d.ts",
36
- "default": "./build/cjs/index.js"
39
+ "types": "./dist/index.d.ts",
40
+ "default": "./dist/index.cjs"
37
41
  },
38
42
  "import": {
39
- "types": "./build/index.d.ts",
40
- "default": "./build/esm/index.js"
43
+ "types": "./dist/index.d.ts",
44
+ "default": "./dist/index.mjs"
41
45
  }
42
46
  },
43
47
  "./compile": {
44
48
  "require": {
45
- "types": "./build/compile.d.ts",
46
- "default": "./build/cjs/compile.js"
49
+ "types": "./dist/compile.d.ts",
50
+ "default": "./dist/compile.cjs"
47
51
  },
48
52
  "import": {
49
- "types": "./build/compile.d.ts",
50
- "default": "./build/esm/compile.js"
53
+ "types": "./dist/compile.d.ts",
54
+ "default": "./dist/compile.mjs"
51
55
  }
52
56
  },
53
57
  "./package.json": "./package.json"
@@ -55,7 +59,7 @@
55
59
  "files": [
56
60
  "LICENSE",
57
61
  "README.md",
58
- "build/",
62
+ "dist/",
59
63
  "compile.js"
60
64
  ],
61
65
  "dependencies": {
@@ -63,7 +67,8 @@
63
67
  "@messageformat/parser": "^5.0.0"
64
68
  },
65
69
  "devDependencies": {
66
- "@lingui/jest-mocks": "^3.0.3"
70
+ "@lingui/jest-mocks": "^3.0.3",
71
+ "unbuild": "^1.1.2"
67
72
  },
68
- "gitHead": "29cad1bdcc781994ac4d496e5c4937795423d405"
73
+ "gitHead": "3b999e35d26e67dec7cf0591f794be782e11022c"
69
74
  }
package/build/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2017-2022 Tomáš Ehrlich, (c) 2022-2023 Crowdin.
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.
@@ -1,59 +0,0 @@
1
- 'use strict';
2
-
3
- var parser = require('@messageformat/parser');
4
-
5
- // [Tokens] -> (CTX -> String)
6
- function processTokens(tokens, mapText) {
7
- if (!tokens.filter(token => token.type !== "content").length) {
8
- return tokens.map(token => mapText(token.value)).join("");
9
- }
10
- return tokens.map(token => {
11
- if (token.type === "content") {
12
- return mapText(token.value);
13
-
14
- // # in plural case
15
- } else if (token.type === "octothorpe") {
16
- return "#";
17
-
18
- // simple argument
19
- } else if (token.type === "argument") {
20
- return [token.arg];
21
-
22
- // argument with custom format (date, number)
23
- } else if (token.type === "function") {
24
- var _token$param;
25
- const _param = token === null || token === void 0 ? void 0 : (_token$param = token.param) === null || _token$param === void 0 ? void 0 : _token$param[0];
26
- if (_param) {
27
- return [token.arg, token.key, _param.value.trim()];
28
- } else {
29
- return [token.arg, token.key];
30
- }
31
- }
32
- const offset = token.pluralOffset;
33
-
34
- // complex argument with cases
35
- const formatProps = {};
36
- token.cases.forEach(item => {
37
- formatProps[item.key.replace(/^=(.)+/, "$1")] = processTokens(item.tokens, mapText);
38
- });
39
- return [token.arg, token.type, {
40
- offset,
41
- ...formatProps
42
- }];
43
- });
44
- }
45
-
46
- // Message -> (Params -> String)
47
- /** @internal */
48
- function compileMessage(message) {
49
- let mapText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : v => v;
50
- try {
51
- return processTokens(parser.parse(message), mapText);
52
- } catch (e) {
53
- console.error(`${e.message} \n\nMessage: ${message}`);
54
- return message;
55
- }
56
- }
57
-
58
- exports.compileMessage = compileMessage;
59
- //# sourceMappingURL=compile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile.js","sources":["../../src/compile/compileMessage.ts"],"sourcesContent":["import { Content, parse, Token } from \"@messageformat/parser\"\nimport { CompiledMessage, CompiledMessageToken } from \"../i18n\"\n\ntype MapTextFn = (value: string) => string\n\n// [Tokens] -> (CTX -> String)\nfunction processTokens(\n tokens: Array<Token>,\n mapText?: MapTextFn\n): CompiledMessage {\n if (!tokens.filter((token) => token.type !== \"content\").length) {\n return tokens.map((token) => mapText((token as Content).value)).join(\"\")\n }\n\n return tokens.map<CompiledMessageToken>((token) => {\n if (token.type === \"content\") {\n return mapText(token.value)\n\n // # in plural case\n } else if (token.type === \"octothorpe\") {\n return \"#\"\n\n // simple argument\n } else if (token.type === \"argument\") {\n return [token.arg]\n\n // argument with custom format (date, number)\n } else if (token.type === \"function\") {\n const _param = token?.param?.[0] as Content\n\n if (_param) {\n return [token.arg, token.key, _param.value.trim()]\n } else {\n return [token.arg, token.key]\n }\n }\n\n const offset = token.pluralOffset\n\n // complex argument with cases\n const formatProps = {}\n token.cases.forEach((item) => {\n formatProps[item.key.replace(/^=(.)+/, \"$1\")] = processTokens(\n item.tokens,\n mapText\n )\n })\n\n return [\n token.arg,\n token.type,\n {\n offset,\n ...formatProps,\n } as any,\n ] as CompiledMessageToken\n })\n}\n\n// Message -> (Params -> String)\n/** @internal */\nexport function compileMessage(\n message: string,\n mapText: MapTextFn = (v) => v\n): CompiledMessage {\n try {\n return processTokens(parse(message), mapText)\n } catch (e) {\n console.error(`${e.message} \\n\\nMessage: ${message}`)\n return message\n }\n}\n"],"names":["processTokens","tokens","mapText","filter","token","type","length","map","value","join","arg","_param","param","key","trim","offset","pluralOffset","formatProps","cases","forEach","item","replace","compileMessage","message","v","parse","e","console","error"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/essentials.ts","../../src/formats.ts","../../src/context.ts","../../src/eventEmitter.ts","../../src/i18n.ts","../../src/index.ts"],"sourcesContent":["export const isString = (s): s is string => typeof s === \"string\"\nexport const isFunction = (f): f is Function => typeof f === \"function\"\nexport function isEmpty(obj) {\n // null and undefined are \"empty\"\n if (obj === null || obj === undefined) return true\n\n if (obj.length > 0) return false\n if (obj.length === 0) return true\n\n return !Object.getOwnPropertyNames(obj).length\n}\n","import { isString } from \"./essentials\"\nimport { Locales } from \"./i18n\"\n\n/** Memoized cache */\nconst cache = new Map<string, unknown>()\n\nfunction normalizeLocales(locales: Locales): string[] {\n const out = Array.isArray(locales) ? locales : [locales]\n return [...out, \"en\"]\n}\n\nexport function date(\n locales: Locales,\n value: string | Date,\n format: Intl.DateTimeFormatOptions = {}\n): string {\n const _locales = normalizeLocales(locales)\n\n const formatter = getMemoized(\n () => cacheKey(\"date\", _locales, format),\n () => new Intl.DateTimeFormat(_locales, format)\n )\n\n return formatter.format(isString(value) ? new Date(value) : value)\n}\n\nexport function number(\n locales: Locales,\n value: number,\n format: Intl.NumberFormatOptions = {}\n): string {\n const _locales = normalizeLocales(locales)\n\n const formatter = getMemoized(\n () => cacheKey(\"number\", _locales, format),\n () => new Intl.NumberFormat(_locales, format)\n )\n\n return formatter.format(value)\n}\n\nexport function plural(\n locales: Locales,\n ordinal: boolean,\n value: number,\n { offset = 0, ...rules }\n): string {\n const _locales = normalizeLocales(locales)\n\n const plurals = ordinal\n ? getMemoized(\n () => cacheKey(\"plural-ordinal\", _locales, {}),\n () => new Intl.PluralRules(_locales, { type: \"ordinal\" })\n )\n : getMemoized(\n () => cacheKey(\"plural-cardinal\", _locales, {}),\n () => new Intl.PluralRules(_locales, { type: \"cardinal\" })\n )\n\n return rules[value] ?? rules[plurals.select(value - offset)] ?? rules.other\n}\n\nfunction getMemoized<T>(getKey: () => string, construct: () => T) {\n const key = getKey()\n\n let formatter = cache.get(key) as T\n\n if (!formatter) {\n formatter = construct()\n cache.set(key, formatter)\n }\n\n return formatter\n}\n\nfunction cacheKey(\n type: string,\n locales?: readonly string[],\n options: unknown = {}\n) {\n const localeKey = [...locales].sort().join(\"-\")\n return `${type}-${localeKey}-${JSON.stringify(options)}`\n}\n","import { CompiledMessage, Formats, Locales, Values } from \"./i18n\"\nimport { date, number, plural } from \"./formats\"\nimport { isString } from \"./essentials\"\n\nexport const UNICODE_REGEX = /\\\\u[a-fA-F0-9]{4}|\\\\x[a-fA-F0-9]{2}/g\n\nconst getDefaultFormats = (\n locale: string,\n locales: Locales,\n formats: Formats = {}\n) => {\n locales = locales || locale\n const style = <T>(format: string | T): T =>\n isString(format) ? formats[format] || { style: format } : (format as any)\n\n const replaceOctothorpe = (value: number, message: string): string => {\n const numberFormat = Object.keys(formats).length ? style(\"number\") : {}\n const valueStr = number(locales, value, numberFormat)\n return message.replace(\"#\", valueStr)\n }\n\n return {\n plural: (value: number, cases) => {\n const { offset = 0 } = cases\n const message = plural(locales, false, value, cases)\n\n return replaceOctothorpe(value - offset, message)\n },\n\n selectordinal: (value: number, cases) => {\n const { offset = 0 } = cases\n const message = plural(locales, true, value, cases)\n\n return replaceOctothorpe(value - offset, message)\n },\n\n select: (value: string, rules) => rules[value] || rules.other,\n\n number: (\n value: number,\n format: string | Intl.NumberFormatOptions\n ): string => number(locales, value, style(format)),\n\n date: (\n value: string,\n format: string | Intl.DateTimeFormatOptions\n ): string => date(locales, value, style(format)),\n\n undefined: (value: unknown) => value,\n }\n}\n\n/**\n * @param translation compiled message\n * @param locale Locale of message\n * @param locales Locales to be used when formatting the numbers or dates\n */\nexport function interpolate(\n translation: CompiledMessage,\n locale: string,\n locales: Locales\n) {\n /**\n * @param values - Parameters for variable interpolation\n * @param formats - Custom format styles\n */\n return (values: Values, formats: Formats = {}): string => {\n const formatters = getDefaultFormats(locale, locales, formats)\n\n const formatMessage = (message: CompiledMessage): string => {\n if (!Array.isArray(message)) return message\n\n return message.reduce<string>((message, token) => {\n if (isString(token)) return message + token\n\n const [name, type, format] = token\n\n let interpolatedFormat = {}\n if (format != null && !isString(format)) {\n Object.keys(format).forEach((key) => {\n interpolatedFormat[key] = formatMessage(format[key])\n })\n } else {\n interpolatedFormat = format\n }\n\n const value = formatters[type](values[name], interpolatedFormat)\n if (value == null) return message\n\n return message + value\n }, \"\")\n }\n\n const result = formatMessage(translation)\n if (isString(result) && UNICODE_REGEX.test(result))\n return JSON.parse(`\"${result.trim()}\"`)\n if (isString(result)) return result.trim()\n return result\n }\n}\n","export class EventEmitter<\n Events extends { [name: string]: (...args: any[]) => any }\n> {\n private readonly _events: {\n [name in keyof Events]?: Array<Events[name]>\n } = {}\n\n on(event: keyof Events, listener: Events[typeof event]): () => void {\n if (!this._hasEvent(event)) this._events[event] = []\n\n this._events[event].push(listener)\n return () => this.removeListener(event, listener)\n }\n\n removeListener(event: keyof Events, listener: Events[typeof event]): void {\n if (!this._hasEvent(event)) return\n\n const index = this._events[event].indexOf(listener)\n if (~index) this._events[event].splice(index, 1)\n }\n\n emit(event: keyof Events, ...args: Parameters<Events[typeof event]>): void {\n if (!this._hasEvent(event)) return\n\n this._events[event].map((listener) => listener.apply(this, args))\n }\n\n private _hasEvent(event: keyof Events) {\n return Array.isArray(this._events[event])\n }\n}\n","import { interpolate, UNICODE_REGEX } from \"./context\"\nimport { isString, isFunction } from \"./essentials\"\nimport { date, number } from \"./formats\"\nimport { compileMessage } from \"@lingui/core/compile\"\nimport { EventEmitter } from \"./eventEmitter\"\n\nexport type MessageOptions = {\n message?: string\n formats?: Formats\n}\n\nexport type Locale = string\nexport type Locales = Locale | Locale[]\nexport type Formats = Record<\n string,\n Intl.DateTimeFormatOptions | Intl.NumberFormatOptions\n>\n\nexport type Values = Record<string, unknown>\n\n/**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\nexport type LocaleData = {\n plurals?: (\n n: number,\n ordinal?: boolean\n ) => ReturnType<Intl.PluralRules[\"select\"]>\n}\n\n/**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\nexport type AllLocaleData = Record<Locale, LocaleData>\n\nexport type CompiledIcuChoices = Record<string, CompiledMessage> & {\n offset: number\n}\nexport type CompiledMessageToken =\n | string\n | [name: string, type?: string, format?: null | string | CompiledIcuChoices]\n\nexport type CompiledMessage = string | CompiledMessageToken[]\n\nexport type Messages = Record<string, CompiledMessage>\n\nexport type AllMessages = Record<Locale, Messages>\n\nexport type MessageDescriptor = {\n id?: string\n comment?: string\n message?: string\n values?: Record<string, unknown>\n}\n\nexport type MissingMessageEvent = {\n locale: Locale\n id: string\n}\n\ntype MissingHandler = string | ((locale: string, id: string) => string)\n\ntype setupI18nProps = {\n locale?: Locale\n locales?: Locales\n messages?: AllMessages\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n localeData?: AllLocaleData\n missing?: MissingHandler\n}\n\ntype Events = {\n change: () => void\n missing: (event: MissingMessageEvent) => void\n}\n\nexport class I18n extends EventEmitter<Events> {\n private _locale: Locale\n private _locales: Locales\n private _localeData: AllLocaleData\n private _messages: AllMessages\n private _missing: MissingHandler\n\n constructor(params: setupI18nProps) {\n super()\n\n this._messages = {}\n this._localeData = {}\n\n if (params.missing != null) this._missing = params.missing\n if (params.messages != null) this.load(params.messages)\n if (params.localeData != null) this.loadLocaleData(params.localeData)\n if (params.locale != null || params.locales != null) {\n this.activate(params.locale, params.locales)\n }\n }\n\n get locale() {\n return this._locale\n }\n\n get locales() {\n return this._locales\n }\n\n get messages(): Messages {\n return this._messages[this._locale] ?? {}\n }\n\n /**\n * @deprecated this has no effect. Please remove this from the code. Introduced in v4\n */\n get localeData(): LocaleData {\n return this._localeData[this._locale] ?? {}\n }\n\n private _loadLocaleData(locale: Locale, localeData: LocaleData) {\n if (this._localeData[locale] == null) {\n this._localeData[locale] = localeData\n } else {\n Object.assign(this._localeData[locale], localeData)\n }\n }\n\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n public loadLocaleData(allLocaleData: AllLocaleData): void\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n public loadLocaleData(locale: Locale, localeData: LocaleData): void\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n loadLocaleData(localeOrAllData, localeData?) {\n if (localeData != null) {\n // loadLocaleData('en', enLocaleData)\n // Loading locale data for a single locale.\n this._loadLocaleData(localeOrAllData, localeData)\n } else {\n // loadLocaleData(allLocaleData)\n // Loading all locale data at once.\n Object.keys(localeOrAllData).forEach((locale) =>\n this._loadLocaleData(locale, localeOrAllData[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n private _load(locale: Locale, messages: Messages) {\n if (this._messages[locale] == null) {\n this._messages[locale] = messages\n } else {\n Object.assign(this._messages[locale], messages)\n }\n }\n\n public load(allMessages: AllMessages): void\n public load(locale: Locale, messages: Messages): void\n\n load(localeOrMessages, messages?) {\n if (messages != null) {\n // load('en', catalog)\n // Loading a catalog for a single locale.\n this._load(localeOrMessages, messages)\n } else {\n // load(catalogs)\n // Loading several locales at once.\n Object.keys(localeOrMessages).forEach((locale) =>\n this._load(locale, localeOrMessages[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n /**\n * @param locales one locale or array of locales.\n * If array of locales is passed they would be used as fallback\n * locales for date and number formatting\n * @param messages compiled message catalog\n * @param notify Should emit `change` event for all subscribers.\n * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.\n */\n loadAndActivate(\n locales: Locale | Locales,\n messages: Messages,\n notify = true\n ) {\n if (Array.isArray(locales)) {\n this._locale = locales[0]\n this._locales = locales\n } else {\n this._locale = locales\n this._locales = null\n }\n\n this._messages[this._locale] = messages\n\n if (notify) {\n this.emit(\"change\")\n }\n }\n\n activate(locale: Locale, locales?: Locales) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!this._messages[locale]) {\n console.warn(`Messages for locale \"${locale}\" not loaded.`)\n }\n }\n\n this._locale = locale\n this._locales = locales\n this.emit(\"change\")\n }\n\n // method for translation and formatting\n _(\n id: MessageDescriptor | string,\n values: Values | undefined = {},\n { message, formats }: MessageOptions | undefined = {}\n ) {\n if (!isString(id)) {\n values = id.values || values\n message = id.message\n id = id.id\n }\n\n const messageMissing = !this.messages[id]\n\n // replace missing messages with custom message for debugging\n const missing = this._missing\n if (missing && messageMissing) {\n return isFunction(missing) ? missing(this._locale, id) : missing\n }\n\n if (messageMissing) {\n this.emit(\"missing\", { id, locale: this._locale })\n }\n\n let translation = this.messages[id] || message || id\n\n if (process.env.NODE_ENV !== \"production\") {\n translation = isString(translation)\n ? compileMessage(translation)\n : translation\n }\n\n // hack for parsing unicode values inside a string to get parsed in react native environments\n if (isString(translation) && UNICODE_REGEX.test(translation))\n return JSON.parse(`\"${translation}\"`) as string\n if (isString(translation)) return translation\n\n return interpolate(\n translation,\n this._locale,\n this._locales\n )(values, formats)\n }\n\n date(value: string | Date, format?: Intl.DateTimeFormatOptions): string {\n return date(this._locales || this._locale, value, format)\n }\n\n number(value: number, format?: Intl.NumberFormatOptions): string {\n return number(this._locales || this._locale, value, format)\n }\n}\n\nfunction setupI18n(params: setupI18nProps = {}): I18n {\n return new I18n(params)\n}\n\nexport { setupI18n }\n","export { setupI18n, I18n } from \"./i18n\"\n\nexport type {\n AllMessages,\n MessageDescriptor,\n Messages,\n AllLocaleData,\n LocaleData,\n Locale,\n Locales,\n} from \"./i18n\"\n\n// Default i18n object\nimport { setupI18n } from \"./i18n\"\nexport const i18n = setupI18n()\n\nimport * as formats from \"./formats\"\nexport { formats }\n"],"names":["isString","s","isFunction","f","cache","Map","normalizeLocales","locales","out","Array","isArray","date","value","format","_locales","formatter","getMemoized","cacheKey","Intl","DateTimeFormat","Date","number","NumberFormat","plural","ordinal","offset","rules","plurals","PluralRules","type","select","other","getKey","construct","key","get","set","options","localeKey","sort","join","JSON","stringify","UNICODE_REGEX","getDefaultFormats","locale","formats","style","replaceOctothorpe","message","numberFormat","Object","keys","length","valueStr","replace","cases","selectordinal","undefined","interpolate","translation","values","formatters","formatMessage","reduce","token","name","interpolatedFormat","forEach","result","test","parse","trim","EventEmitter","_events","on","event","listener","_hasEvent","push","removeListener","index","indexOf","splice","emit","args","map","apply","I18n","constructor","params","_messages","_localeData","missing","_missing","messages","load","localeData","loadLocaleData","activate","_locale","_loadLocaleData","assign","localeOrAllData","_load","localeOrMessages","loadAndActivate","notify","process","env","NODE_ENV","console","warn","_","id","messageMissing","compileMessage","setupI18n","i18n"],"mappings":"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"}
@@ -1,57 +0,0 @@
1
- import { parse } from '@messageformat/parser';
2
-
3
- // [Tokens] -> (CTX -> String)
4
- function processTokens(tokens, mapText) {
5
- if (!tokens.filter(token => token.type !== "content").length) {
6
- return tokens.map(token => mapText(token.value)).join("");
7
- }
8
- return tokens.map(token => {
9
- if (token.type === "content") {
10
- return mapText(token.value);
11
-
12
- // # in plural case
13
- } else if (token.type === "octothorpe") {
14
- return "#";
15
-
16
- // simple argument
17
- } else if (token.type === "argument") {
18
- return [token.arg];
19
-
20
- // argument with custom format (date, number)
21
- } else if (token.type === "function") {
22
- var _token$param;
23
- const _param = token === null || token === void 0 ? void 0 : (_token$param = token.param) === null || _token$param === void 0 ? void 0 : _token$param[0];
24
- if (_param) {
25
- return [token.arg, token.key, _param.value.trim()];
26
- } else {
27
- return [token.arg, token.key];
28
- }
29
- }
30
- const offset = token.pluralOffset;
31
-
32
- // complex argument with cases
33
- const formatProps = {};
34
- token.cases.forEach(item => {
35
- formatProps[item.key.replace(/^=(.)+/, "$1")] = processTokens(item.tokens, mapText);
36
- });
37
- return [token.arg, token.type, {
38
- offset,
39
- ...formatProps
40
- }];
41
- });
42
- }
43
-
44
- // Message -> (Params -> String)
45
- /** @internal */
46
- function compileMessage(message) {
47
- let mapText = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : v => v;
48
- try {
49
- return processTokens(parse(message), mapText);
50
- } catch (e) {
51
- console.error(`${e.message} \n\nMessage: ${message}`);
52
- return message;
53
- }
54
- }
55
-
56
- export { compileMessage };
57
- //# sourceMappingURL=compile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"compile.js","sources":["../../src/compile/compileMessage.ts"],"sourcesContent":["import { Content, parse, Token } from \"@messageformat/parser\"\nimport { CompiledMessage, CompiledMessageToken } from \"../i18n\"\n\ntype MapTextFn = (value: string) => string\n\n// [Tokens] -> (CTX -> String)\nfunction processTokens(\n tokens: Array<Token>,\n mapText?: MapTextFn\n): CompiledMessage {\n if (!tokens.filter((token) => token.type !== \"content\").length) {\n return tokens.map((token) => mapText((token as Content).value)).join(\"\")\n }\n\n return tokens.map<CompiledMessageToken>((token) => {\n if (token.type === \"content\") {\n return mapText(token.value)\n\n // # in plural case\n } else if (token.type === \"octothorpe\") {\n return \"#\"\n\n // simple argument\n } else if (token.type === \"argument\") {\n return [token.arg]\n\n // argument with custom format (date, number)\n } else if (token.type === \"function\") {\n const _param = token?.param?.[0] as Content\n\n if (_param) {\n return [token.arg, token.key, _param.value.trim()]\n } else {\n return [token.arg, token.key]\n }\n }\n\n const offset = token.pluralOffset\n\n // complex argument with cases\n const formatProps = {}\n token.cases.forEach((item) => {\n formatProps[item.key.replace(/^=(.)+/, \"$1\")] = processTokens(\n item.tokens,\n mapText\n )\n })\n\n return [\n token.arg,\n token.type,\n {\n offset,\n ...formatProps,\n } as any,\n ] as CompiledMessageToken\n })\n}\n\n// Message -> (Params -> String)\n/** @internal */\nexport function compileMessage(\n message: string,\n mapText: MapTextFn = (v) => v\n): CompiledMessage {\n try {\n return processTokens(parse(message), mapText)\n } catch (e) {\n console.error(`${e.message} \\n\\nMessage: ${message}`)\n return message\n }\n}\n"],"names":["processTokens","tokens","mapText","filter","token","type","length","map","value","join","arg","_param","param","key","trim","offset","pluralOffset","formatProps","cases","forEach","item","replace","compileMessage","message","v","parse","e","console","error"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sources":["../../src/essentials.ts","../../src/formats.ts","../../src/context.ts","../../src/eventEmitter.ts","../../src/i18n.ts","../../src/index.ts"],"sourcesContent":["export const isString = (s): s is string => typeof s === \"string\"\nexport const isFunction = (f): f is Function => typeof f === \"function\"\nexport function isEmpty(obj) {\n // null and undefined are \"empty\"\n if (obj === null || obj === undefined) return true\n\n if (obj.length > 0) return false\n if (obj.length === 0) return true\n\n return !Object.getOwnPropertyNames(obj).length\n}\n","import { isString } from \"./essentials\"\nimport { Locales } from \"./i18n\"\n\n/** Memoized cache */\nconst cache = new Map<string, unknown>()\n\nfunction normalizeLocales(locales: Locales): string[] {\n const out = Array.isArray(locales) ? locales : [locales]\n return [...out, \"en\"]\n}\n\nexport function date(\n locales: Locales,\n value: string | Date,\n format: Intl.DateTimeFormatOptions = {}\n): string {\n const _locales = normalizeLocales(locales)\n\n const formatter = getMemoized(\n () => cacheKey(\"date\", _locales, format),\n () => new Intl.DateTimeFormat(_locales, format)\n )\n\n return formatter.format(isString(value) ? new Date(value) : value)\n}\n\nexport function number(\n locales: Locales,\n value: number,\n format: Intl.NumberFormatOptions = {}\n): string {\n const _locales = normalizeLocales(locales)\n\n const formatter = getMemoized(\n () => cacheKey(\"number\", _locales, format),\n () => new Intl.NumberFormat(_locales, format)\n )\n\n return formatter.format(value)\n}\n\nexport function plural(\n locales: Locales,\n ordinal: boolean,\n value: number,\n { offset = 0, ...rules }\n): string {\n const _locales = normalizeLocales(locales)\n\n const plurals = ordinal\n ? getMemoized(\n () => cacheKey(\"plural-ordinal\", _locales, {}),\n () => new Intl.PluralRules(_locales, { type: \"ordinal\" })\n )\n : getMemoized(\n () => cacheKey(\"plural-cardinal\", _locales, {}),\n () => new Intl.PluralRules(_locales, { type: \"cardinal\" })\n )\n\n return rules[value] ?? rules[plurals.select(value - offset)] ?? rules.other\n}\n\nfunction getMemoized<T>(getKey: () => string, construct: () => T) {\n const key = getKey()\n\n let formatter = cache.get(key) as T\n\n if (!formatter) {\n formatter = construct()\n cache.set(key, formatter)\n }\n\n return formatter\n}\n\nfunction cacheKey(\n type: string,\n locales?: readonly string[],\n options: unknown = {}\n) {\n const localeKey = [...locales].sort().join(\"-\")\n return `${type}-${localeKey}-${JSON.stringify(options)}`\n}\n","import { CompiledMessage, Formats, Locales, Values } from \"./i18n\"\nimport { date, number, plural } from \"./formats\"\nimport { isString } from \"./essentials\"\n\nexport const UNICODE_REGEX = /\\\\u[a-fA-F0-9]{4}|\\\\x[a-fA-F0-9]{2}/g\n\nconst getDefaultFormats = (\n locale: string,\n locales: Locales,\n formats: Formats = {}\n) => {\n locales = locales || locale\n const style = <T>(format: string | T): T =>\n isString(format) ? formats[format] || { style: format } : (format as any)\n\n const replaceOctothorpe = (value: number, message: string): string => {\n const numberFormat = Object.keys(formats).length ? style(\"number\") : {}\n const valueStr = number(locales, value, numberFormat)\n return message.replace(\"#\", valueStr)\n }\n\n return {\n plural: (value: number, cases) => {\n const { offset = 0 } = cases\n const message = plural(locales, false, value, cases)\n\n return replaceOctothorpe(value - offset, message)\n },\n\n selectordinal: (value: number, cases) => {\n const { offset = 0 } = cases\n const message = plural(locales, true, value, cases)\n\n return replaceOctothorpe(value - offset, message)\n },\n\n select: (value: string, rules) => rules[value] || rules.other,\n\n number: (\n value: number,\n format: string | Intl.NumberFormatOptions\n ): string => number(locales, value, style(format)),\n\n date: (\n value: string,\n format: string | Intl.DateTimeFormatOptions\n ): string => date(locales, value, style(format)),\n\n undefined: (value: unknown) => value,\n }\n}\n\n/**\n * @param translation compiled message\n * @param locale Locale of message\n * @param locales Locales to be used when formatting the numbers or dates\n */\nexport function interpolate(\n translation: CompiledMessage,\n locale: string,\n locales: Locales\n) {\n /**\n * @param values - Parameters for variable interpolation\n * @param formats - Custom format styles\n */\n return (values: Values, formats: Formats = {}): string => {\n const formatters = getDefaultFormats(locale, locales, formats)\n\n const formatMessage = (message: CompiledMessage): string => {\n if (!Array.isArray(message)) return message\n\n return message.reduce<string>((message, token) => {\n if (isString(token)) return message + token\n\n const [name, type, format] = token\n\n let interpolatedFormat = {}\n if (format != null && !isString(format)) {\n Object.keys(format).forEach((key) => {\n interpolatedFormat[key] = formatMessage(format[key])\n })\n } else {\n interpolatedFormat = format\n }\n\n const value = formatters[type](values[name], interpolatedFormat)\n if (value == null) return message\n\n return message + value\n }, \"\")\n }\n\n const result = formatMessage(translation)\n if (isString(result) && UNICODE_REGEX.test(result))\n return JSON.parse(`\"${result.trim()}\"`)\n if (isString(result)) return result.trim()\n return result\n }\n}\n","export class EventEmitter<\n Events extends { [name: string]: (...args: any[]) => any }\n> {\n private readonly _events: {\n [name in keyof Events]?: Array<Events[name]>\n } = {}\n\n on(event: keyof Events, listener: Events[typeof event]): () => void {\n if (!this._hasEvent(event)) this._events[event] = []\n\n this._events[event].push(listener)\n return () => this.removeListener(event, listener)\n }\n\n removeListener(event: keyof Events, listener: Events[typeof event]): void {\n if (!this._hasEvent(event)) return\n\n const index = this._events[event].indexOf(listener)\n if (~index) this._events[event].splice(index, 1)\n }\n\n emit(event: keyof Events, ...args: Parameters<Events[typeof event]>): void {\n if (!this._hasEvent(event)) return\n\n this._events[event].map((listener) => listener.apply(this, args))\n }\n\n private _hasEvent(event: keyof Events) {\n return Array.isArray(this._events[event])\n }\n}\n","import { interpolate, UNICODE_REGEX } from \"./context\"\nimport { isString, isFunction } from \"./essentials\"\nimport { date, number } from \"./formats\"\nimport { compileMessage } from \"@lingui/core/compile\"\nimport { EventEmitter } from \"./eventEmitter\"\n\nexport type MessageOptions = {\n message?: string\n formats?: Formats\n}\n\nexport type Locale = string\nexport type Locales = Locale | Locale[]\nexport type Formats = Record<\n string,\n Intl.DateTimeFormatOptions | Intl.NumberFormatOptions\n>\n\nexport type Values = Record<string, unknown>\n\n/**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\nexport type LocaleData = {\n plurals?: (\n n: number,\n ordinal?: boolean\n ) => ReturnType<Intl.PluralRules[\"select\"]>\n}\n\n/**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\nexport type AllLocaleData = Record<Locale, LocaleData>\n\nexport type CompiledIcuChoices = Record<string, CompiledMessage> & {\n offset: number\n}\nexport type CompiledMessageToken =\n | string\n | [name: string, type?: string, format?: null | string | CompiledIcuChoices]\n\nexport type CompiledMessage = string | CompiledMessageToken[]\n\nexport type Messages = Record<string, CompiledMessage>\n\nexport type AllMessages = Record<Locale, Messages>\n\nexport type MessageDescriptor = {\n id?: string\n comment?: string\n message?: string\n values?: Record<string, unknown>\n}\n\nexport type MissingMessageEvent = {\n locale: Locale\n id: string\n}\n\ntype MissingHandler = string | ((locale: string, id: string) => string)\n\ntype setupI18nProps = {\n locale?: Locale\n locales?: Locales\n messages?: AllMessages\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n localeData?: AllLocaleData\n missing?: MissingHandler\n}\n\ntype Events = {\n change: () => void\n missing: (event: MissingMessageEvent) => void\n}\n\nexport class I18n extends EventEmitter<Events> {\n private _locale: Locale\n private _locales: Locales\n private _localeData: AllLocaleData\n private _messages: AllMessages\n private _missing: MissingHandler\n\n constructor(params: setupI18nProps) {\n super()\n\n this._messages = {}\n this._localeData = {}\n\n if (params.missing != null) this._missing = params.missing\n if (params.messages != null) this.load(params.messages)\n if (params.localeData != null) this.loadLocaleData(params.localeData)\n if (params.locale != null || params.locales != null) {\n this.activate(params.locale, params.locales)\n }\n }\n\n get locale() {\n return this._locale\n }\n\n get locales() {\n return this._locales\n }\n\n get messages(): Messages {\n return this._messages[this._locale] ?? {}\n }\n\n /**\n * @deprecated this has no effect. Please remove this from the code. Introduced in v4\n */\n get localeData(): LocaleData {\n return this._localeData[this._locale] ?? {}\n }\n\n private _loadLocaleData(locale: Locale, localeData: LocaleData) {\n if (this._localeData[locale] == null) {\n this._localeData[locale] = localeData\n } else {\n Object.assign(this._localeData[locale], localeData)\n }\n }\n\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n public loadLocaleData(allLocaleData: AllLocaleData): void\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n public loadLocaleData(locale: Locale, localeData: LocaleData): void\n /**\n * @deprecated Plurals automatically used from Intl.PluralRules you can safely remove this call. Introduced in v4\n */\n loadLocaleData(localeOrAllData, localeData?) {\n if (localeData != null) {\n // loadLocaleData('en', enLocaleData)\n // Loading locale data for a single locale.\n this._loadLocaleData(localeOrAllData, localeData)\n } else {\n // loadLocaleData(allLocaleData)\n // Loading all locale data at once.\n Object.keys(localeOrAllData).forEach((locale) =>\n this._loadLocaleData(locale, localeOrAllData[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n private _load(locale: Locale, messages: Messages) {\n if (this._messages[locale] == null) {\n this._messages[locale] = messages\n } else {\n Object.assign(this._messages[locale], messages)\n }\n }\n\n public load(allMessages: AllMessages): void\n public load(locale: Locale, messages: Messages): void\n\n load(localeOrMessages, messages?) {\n if (messages != null) {\n // load('en', catalog)\n // Loading a catalog for a single locale.\n this._load(localeOrMessages, messages)\n } else {\n // load(catalogs)\n // Loading several locales at once.\n Object.keys(localeOrMessages).forEach((locale) =>\n this._load(locale, localeOrMessages[locale])\n )\n }\n\n this.emit(\"change\")\n }\n\n /**\n * @param locales one locale or array of locales.\n * If array of locales is passed they would be used as fallback\n * locales for date and number formatting\n * @param messages compiled message catalog\n * @param notify Should emit `change` event for all subscribers.\n * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.\n */\n loadAndActivate(\n locales: Locale | Locales,\n messages: Messages,\n notify = true\n ) {\n if (Array.isArray(locales)) {\n this._locale = locales[0]\n this._locales = locales\n } else {\n this._locale = locales\n this._locales = null\n }\n\n this._messages[this._locale] = messages\n\n if (notify) {\n this.emit(\"change\")\n }\n }\n\n activate(locale: Locale, locales?: Locales) {\n if (process.env.NODE_ENV !== \"production\") {\n if (!this._messages[locale]) {\n console.warn(`Messages for locale \"${locale}\" not loaded.`)\n }\n }\n\n this._locale = locale\n this._locales = locales\n this.emit(\"change\")\n }\n\n // method for translation and formatting\n _(\n id: MessageDescriptor | string,\n values: Values | undefined = {},\n { message, formats }: MessageOptions | undefined = {}\n ) {\n if (!isString(id)) {\n values = id.values || values\n message = id.message\n id = id.id\n }\n\n const messageMissing = !this.messages[id]\n\n // replace missing messages with custom message for debugging\n const missing = this._missing\n if (missing && messageMissing) {\n return isFunction(missing) ? missing(this._locale, id) : missing\n }\n\n if (messageMissing) {\n this.emit(\"missing\", { id, locale: this._locale })\n }\n\n let translation = this.messages[id] || message || id\n\n if (process.env.NODE_ENV !== \"production\") {\n translation = isString(translation)\n ? compileMessage(translation)\n : translation\n }\n\n // hack for parsing unicode values inside a string to get parsed in react native environments\n if (isString(translation) && UNICODE_REGEX.test(translation))\n return JSON.parse(`\"${translation}\"`) as string\n if (isString(translation)) return translation\n\n return interpolate(\n translation,\n this._locale,\n this._locales\n )(values, formats)\n }\n\n date(value: string | Date, format?: Intl.DateTimeFormatOptions): string {\n return date(this._locales || this._locale, value, format)\n }\n\n number(value: number, format?: Intl.NumberFormatOptions): string {\n return number(this._locales || this._locale, value, format)\n }\n}\n\nfunction setupI18n(params: setupI18nProps = {}): I18n {\n return new I18n(params)\n}\n\nexport { setupI18n }\n","export { setupI18n, I18n } from \"./i18n\"\n\nexport type {\n AllMessages,\n MessageDescriptor,\n Messages,\n AllLocaleData,\n LocaleData,\n Locale,\n Locales,\n} from \"./i18n\"\n\n// Default i18n object\nimport { setupI18n } from \"./i18n\"\nexport const i18n = setupI18n()\n\nimport * as formats from \"./formats\"\nexport { formats }\n"],"names":["isString","s","isFunction","f","cache","Map","normalizeLocales","locales","out","Array","isArray","date","value","format","_locales","formatter","getMemoized","cacheKey","Intl","DateTimeFormat","Date","number","NumberFormat","plural","ordinal","offset","rules","plurals","PluralRules","type","select","other","getKey","construct","key","get","set","options","localeKey","sort","join","JSON","stringify","UNICODE_REGEX","getDefaultFormats","locale","formats","style","replaceOctothorpe","message","numberFormat","Object","keys","length","valueStr","replace","cases","selectordinal","undefined","interpolate","translation","values","formatters","formatMessage","reduce","token","name","interpolatedFormat","forEach","result","test","parse","trim","EventEmitter","_events","on","event","listener","_hasEvent","push","removeListener","index","indexOf","splice","emit","args","map","apply","I18n","constructor","params","_messages","_localeData","missing","_missing","messages","load","localeData","loadLocaleData","activate","_locale","_loadLocaleData","assign","localeOrAllData","_load","localeOrMessages","loadAndActivate","notify","process","env","NODE_ENV","console","warn","_","id","messageMissing","compileMessage","setupI18n","i18n"],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }
File without changes
File without changes