@lingui/core 4.0.0-next.2 → 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,16 +203,35 @@ 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
  }
214
+ /**
215
+ * @param locales one locale or array of locales.
216
+ * If array of locales is passed they would be used as fallback
217
+ * locales for date and number formatting
218
+ * @param messages compiled message catalog
219
+ * @param notify Should emit `change` event for all subscribers.
220
+ * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.
221
+ */
222
+ loadAndActivate(locales, messages, notify = true) {
223
+ if (Array.isArray(locales)) {
224
+ this._locale = locales[0];
225
+ this._locales = locales;
226
+ } else {
227
+ this._locale = locales;
228
+ this._locales = null;
229
+ }
230
+ this._messages[this._locale] = messages;
231
+ if (notify) {
232
+ this.emit("change");
233
+ }
234
+ }
231
235
  activate(locale, locales) {
232
236
  if (process.env.NODE_ENV !== "production") {
233
237
  if (!this._messages[locale]) {
@@ -238,41 +242,34 @@ class I18n extends EventEmitter {
238
242
  this._locales = locales;
239
243
  this.emit("change");
240
244
  }
241
-
242
245
  // method for translation and formatting
243
- _(id) {
244
- let values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
245
- let {
246
- message,
247
- formats
248
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
246
+ _(id, values = {}, { message, formats } = {}) {
249
247
  if (!isString(id)) {
250
248
  values = id.values || values;
251
249
  message = id.message;
252
250
  id = id.id;
253
251
  }
254
252
  const messageMissing = !this.messages[id];
255
-
256
- // replace missing messages with custom message for debugging
257
253
  const missing = this._missing;
258
254
  if (missing && messageMissing) {
259
255
  return isFunction(missing) ? missing(this._locale, id) : missing;
260
256
  }
261
257
  if (messageMissing) {
262
- this.emit("missing", {
263
- id,
264
- locale: this._locale
265
- });
258
+ this.emit("missing", { id, locale: this._locale });
266
259
  }
267
260
  let translation = this.messages[id] || message || id;
268
261
  if (process.env.NODE_ENV !== "production") {
269
262
  translation = isString(translation) ? compile.compileMessage(translation) : translation;
270
263
  }
271
-
272
- // hack for parsing unicode values inside a string to get parsed in react native environments
273
- if (isString(translation) && UNICODE_REGEX.test(translation)) return JSON.parse(`"${translation}"`);
274
- if (isString(translation)) return translation;
275
- 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);
276
273
  }
277
274
  date(value, format) {
278
275
  return date(this._locales || this._locale, value, format);
@@ -281,8 +278,7 @@ class I18n extends EventEmitter {
281
278
  return number(this._locales || this._locale, value, format);
282
279
  }
283
280
  }
284
- function setupI18n() {
285
- let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
281
+ function setupI18n(params = {}) {
286
282
  return new I18n(params);
287
283
  }
288
284
 
@@ -292,4 +288,3 @@ exports.I18n = I18n;
292
288
  exports.formats = formats;
293
289
  exports.i18n = i18n;
294
290
  exports.setupI18n = setupI18n;
295
- //# sourceMappingURL=index.js.map
@@ -84,6 +84,15 @@ declare class I18n extends EventEmitter<Events> {
84
84
  private _load;
85
85
  load(allMessages: AllMessages): void;
86
86
  load(locale: Locale, messages: Messages): void;
87
+ /**
88
+ * @param locales one locale or array of locales.
89
+ * If array of locales is passed they would be used as fallback
90
+ * locales for date and number formatting
91
+ * @param messages compiled message catalog
92
+ * @param notify Should emit `change` event for all subscribers.
93
+ * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.
94
+ */
95
+ loadAndActivate(locales: Locale | Locales, messages: Messages, notify?: boolean): void;
87
96
  activate(locale: Locale, locales?: Locales): void;
88
97
  _(id: MessageDescriptor | string, values?: Values | undefined, { message, formats }?: MessageOptions | undefined): string;
89
98
  date(value: string | Date, format?: Intl.DateTimeFormatOptions): string;
@@ -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,16 +201,35 @@ 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
  }
212
+ /**
213
+ * @param locales one locale or array of locales.
214
+ * If array of locales is passed they would be used as fallback
215
+ * locales for date and number formatting
216
+ * @param messages compiled message catalog
217
+ * @param notify Should emit `change` event for all subscribers.
218
+ * This is useful for integration with frameworks as NextJS to avoid race-conditions during initialization.
219
+ */
220
+ loadAndActivate(locales, messages, notify = true) {
221
+ if (Array.isArray(locales)) {
222
+ this._locale = locales[0];
223
+ this._locales = locales;
224
+ } else {
225
+ this._locale = locales;
226
+ this._locales = null;
227
+ }
228
+ this._messages[this._locale] = messages;
229
+ if (notify) {
230
+ this.emit("change");
231
+ }
232
+ }
229
233
  activate(locale, locales) {
230
234
  if (process.env.NODE_ENV !== "production") {
231
235
  if (!this._messages[locale]) {
@@ -236,41 +240,34 @@ class I18n extends EventEmitter {
236
240
  this._locales = locales;
237
241
  this.emit("change");
238
242
  }
239
-
240
243
  // method for translation and formatting
241
- _(id) {
242
- let values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
243
- let {
244
- message,
245
- formats
246
- } = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
244
+ _(id, values = {}, { message, formats } = {}) {
247
245
  if (!isString(id)) {
248
246
  values = id.values || values;
249
247
  message = id.message;
250
248
  id = id.id;
251
249
  }
252
250
  const messageMissing = !this.messages[id];
253
-
254
- // replace missing messages with custom message for debugging
255
251
  const missing = this._missing;
256
252
  if (missing && messageMissing) {
257
253
  return isFunction(missing) ? missing(this._locale, id) : missing;
258
254
  }
259
255
  if (messageMissing) {
260
- this.emit("missing", {
261
- id,
262
- locale: this._locale
263
- });
256
+ this.emit("missing", { id, locale: this._locale });
264
257
  }
265
258
  let translation = this.messages[id] || message || id;
266
259
  if (process.env.NODE_ENV !== "production") {
267
260
  translation = isString(translation) ? compileMessage(translation) : translation;
268
261
  }
269
-
270
- // hack for parsing unicode values inside a string to get parsed in react native environments
271
- if (isString(translation) && UNICODE_REGEX.test(translation)) return JSON.parse(`"${translation}"`);
272
- if (isString(translation)) return translation;
273
- 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);
274
271
  }
275
272
  date(value, format) {
276
273
  return date(this._locales || this._locale, value, format);
@@ -279,12 +276,10 @@ class I18n extends EventEmitter {
279
276
  return number(this._locales || this._locale, value, format);
280
277
  }
281
278
  }
282
- function setupI18n() {
283
- let params = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
279
+ function setupI18n(params = {}) {
284
280
  return new I18n(params);
285
281
  }
286
282
 
287
283
  const i18n = setupI18n();
288
284
 
289
285
  export { I18n, formats, i18n, setupI18n };
290
- //# 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.2",
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": "556ab57e20c2ac9d384a22424c6a90c2ba0dd133"
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":";;;;AAKA;AACA,SAASA,aAAa,CACpBC,MAAoB,EACpBC,OAAmB,EACF;AACjB,EAAA,IAAI,CAACD,MAAM,CAACE,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACC,IAAI,KAAK,SAAS,CAAC,CAACC,MAAM,EAAE;AAC9D,IAAA,OAAOL,MAAM,CAACM,GAAG,CAAEH,KAAK,IAAKF,OAAO,CAAEE,KAAK,CAAaI,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC1E,GAAA;AAEA,EAAA,OAAOR,MAAM,CAACM,GAAG,CAAwBH,KAAK,IAAK;AACjD,IAAA,IAAIA,KAAK,CAACC,IAAI,KAAK,SAAS,EAAE;AAC5B,MAAA,OAAOH,OAAO,CAACE,KAAK,CAACI,KAAK,CAAC,CAAA;;AAE3B;AACF,KAAC,MAAM,IAAIJ,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;AACtC,MAAA,OAAO,GAAG,CAAA;;AAEV;AACF,KAAC,MAAM,IAAID,KAAK,CAACC,IAAI,KAAK,UAAU,EAAE;AACpC,MAAA,OAAO,CAACD,KAAK,CAACM,GAAG,CAAC,CAAA;;AAElB;AACF,KAAC,MAAM,IAAIN,KAAK,CAACC,IAAI,KAAK,UAAU,EAAE;AAAA,MAAA,IAAA,YAAA,CAAA;AACpC,MAAA,MAAMM,MAAM,GAAGP,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAA,YAAA,GAALA,KAAK,CAAEQ,KAAK,MAAA,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAe,CAAA,CAAC,CAAY,CAAA;AAE3C,MAAA,IAAID,MAAM,EAAE;AACV,QAAA,OAAO,CAACP,KAAK,CAACM,GAAG,EAAEN,KAAK,CAACS,GAAG,EAAEF,MAAM,CAACH,KAAK,CAACM,IAAI,EAAE,CAAC,CAAA;AACpD,OAAC,MAAM;QACL,OAAO,CAACV,KAAK,CAACM,GAAG,EAAEN,KAAK,CAACS,GAAG,CAAC,CAAA;AAC/B,OAAA;AACF,KAAA;AAEA,IAAA,MAAME,MAAM,GAAGX,KAAK,CAACY,YAAY,CAAA;;AAEjC;IACA,MAAMC,WAAW,GAAG,EAAE,CAAA;AACtBb,IAAAA,KAAK,CAACc,KAAK,CAACC,OAAO,CAAEC,IAAI,IAAK;MAC5BH,WAAW,CAACG,IAAI,CAACP,GAAG,CAACQ,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAGrB,aAAa,CAC3DoB,IAAI,CAACnB,MAAM,EACXC,OAAO,CACR,CAAA;AACH,KAAC,CAAC,CAAA;IAEF,OAAO,CACLE,KAAK,CAACM,GAAG,EACTN,KAAK,CAACC,IAAI,EACV;MACEU,MAAM;MACN,GAAGE,WAAAA;AACL,KAAC,CACF,CAAA;AACH,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACO,SAASK,cAAc,CAC5BC,OAAe,EAEE;AAAA,EAAA,IADjBrB,OAAkB,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAIsB,CAAC,IAAKA,CAAC,CAAA;EAE7B,IAAI;IACF,OAAOxB,aAAa,CAACyB,YAAK,CAACF,OAAO,CAAC,EAAErB,OAAO,CAAC,CAAA;GAC9C,CAAC,OAAOwB,CAAC,EAAE;IACVC,OAAO,CAACC,KAAK,CAAE,CAAEF,EAAAA,CAAC,CAACH,OAAQ,CAAA,cAAA,EAAgBA,OAAQ,CAAA,CAAC,CAAC,CAAA;AACrD,IAAA,OAAOA,OAAO,CAAA;AAChB,GAAA;AACF;;;;"}
@@ -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 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","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":";;AAKA;AACA,SAASA,aAAa,CACpBC,MAAoB,EACpBC,OAAmB,EACF;AACjB,EAAA,IAAI,CAACD,MAAM,CAACE,MAAM,CAAEC,KAAK,IAAKA,KAAK,CAACC,IAAI,KAAK,SAAS,CAAC,CAACC,MAAM,EAAE;AAC9D,IAAA,OAAOL,MAAM,CAACM,GAAG,CAAEH,KAAK,IAAKF,OAAO,CAAEE,KAAK,CAAaI,KAAK,CAAC,CAAC,CAACC,IAAI,CAAC,EAAE,CAAC,CAAA;AAC1E,GAAA;AAEA,EAAA,OAAOR,MAAM,CAACM,GAAG,CAAwBH,KAAK,IAAK;AACjD,IAAA,IAAIA,KAAK,CAACC,IAAI,KAAK,SAAS,EAAE;AAC5B,MAAA,OAAOH,OAAO,CAACE,KAAK,CAACI,KAAK,CAAC,CAAA;;AAE3B;AACF,KAAC,MAAM,IAAIJ,KAAK,CAACC,IAAI,KAAK,YAAY,EAAE;AACtC,MAAA,OAAO,GAAG,CAAA;;AAEV;AACF,KAAC,MAAM,IAAID,KAAK,CAACC,IAAI,KAAK,UAAU,EAAE;AACpC,MAAA,OAAO,CAACD,KAAK,CAACM,GAAG,CAAC,CAAA;;AAElB;AACF,KAAC,MAAM,IAAIN,KAAK,CAACC,IAAI,KAAK,UAAU,EAAE;AAAA,MAAA,IAAA,YAAA,CAAA;AACpC,MAAA,MAAMM,MAAM,GAAGP,KAAK,KAAA,IAAA,IAALA,KAAK,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,CAAA,YAAA,GAALA,KAAK,CAAEQ,KAAK,MAAA,IAAA,IAAA,YAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAZ,YAAe,CAAA,CAAC,CAAY,CAAA;AAE3C,MAAA,IAAID,MAAM,EAAE;AACV,QAAA,OAAO,CAACP,KAAK,CAACM,GAAG,EAAEN,KAAK,CAACS,GAAG,EAAEF,MAAM,CAACH,KAAK,CAACM,IAAI,EAAE,CAAC,CAAA;AACpD,OAAC,MAAM;QACL,OAAO,CAACV,KAAK,CAACM,GAAG,EAAEN,KAAK,CAACS,GAAG,CAAC,CAAA;AAC/B,OAAA;AACF,KAAA;AAEA,IAAA,MAAME,MAAM,GAAGX,KAAK,CAACY,YAAY,CAAA;;AAEjC;IACA,MAAMC,WAAW,GAAG,EAAE,CAAA;AACtBb,IAAAA,KAAK,CAACc,KAAK,CAACC,OAAO,CAAEC,IAAI,IAAK;MAC5BH,WAAW,CAACG,IAAI,CAACP,GAAG,CAACQ,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,GAAGrB,aAAa,CAC3DoB,IAAI,CAACnB,MAAM,EACXC,OAAO,CACR,CAAA;AACH,KAAC,CAAC,CAAA;IAEF,OAAO,CACLE,KAAK,CAACM,GAAG,EACTN,KAAK,CAACC,IAAI,EACV;MACEU,MAAM;MACN,GAAGE,WAAAA;AACL,KAAC,CACF,CAAA;AACH,GAAC,CAAC,CAAA;AACJ,CAAA;;AAEA;AACA;AACO,SAASK,cAAc,CAC5BC,OAAe,EAEE;AAAA,EAAA,IADjBrB,OAAkB,GAAA,SAAA,CAAA,MAAA,GAAA,CAAA,IAAA,SAAA,CAAA,CAAA,CAAA,KAAA,SAAA,GAAA,SAAA,CAAA,CAAA,CAAA,GAAIsB,CAAC,IAAKA,CAAC,CAAA;EAE7B,IAAI;IACF,OAAOxB,aAAa,CAACyB,KAAK,CAACF,OAAO,CAAC,EAAErB,OAAO,CAAC,CAAA;GAC9C,CAAC,OAAOwB,CAAC,EAAE;IACVC,OAAO,CAACC,KAAK,CAAE,CAAEF,EAAAA,CAAC,CAACH,OAAQ,CAAA,cAAA,EAAgBA,OAAQ,CAAA,CAAC,CAAC,CAAA;AACrD,IAAA,OAAOA,OAAO,CAAA;AAChB,GAAA;AACF;;;;"}
@@ -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 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","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