@wordpress/i18n 4.34.0 → 4.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 4.35.0 (2023-06-07)
6
+
5
7
  ## 4.34.0 (2023-05-24)
6
8
 
7
9
  ## 4.33.0 (2023-05-10)
@@ -205,27 +205,21 @@ const createI18n = (initialData, initialDomain, hooks) => {
205
205
  /** @type {GetLocaleData} */
206
206
 
207
207
 
208
- const getLocaleData = function () {
209
- let domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
210
- return tannin.data[domain];
211
- };
208
+ const getLocaleData = (domain = 'default') => tannin.data[domain];
212
209
  /**
213
210
  * @param {LocaleData} [data]
214
211
  * @param {string} [domain]
215
212
  */
216
213
 
217
214
 
218
- const doSetLocaleData = function (data) {
219
- var _tannin$data$domain;
220
-
221
- let domain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';
215
+ const doSetLocaleData = (data, domain = 'default') => {
222
216
  tannin.data[domain] = { ...tannin.data[domain],
223
217
  ...data
224
218
  }; // Populate default domain configuration (supported locale date which omits
225
219
  // a plural forms expression).
226
220
 
227
221
  tannin.data[domain][''] = { ...DEFAULT_LOCALE_DATA[''],
228
- ...((_tannin$data$domain = tannin.data[domain]) === null || _tannin$data$domain === void 0 ? void 0 : _tannin$data$domain[''])
222
+ ...tannin.data[domain]?.['']
229
223
  }; // Clean up cached plural forms functions cache as it might be updated.
230
224
 
231
225
  delete tannin.pluralForms[domain];
@@ -240,17 +234,14 @@ const createI18n = (initialData, initialDomain, hooks) => {
240
234
  /** @type {AddLocaleData} */
241
235
 
242
236
 
243
- const addLocaleData = function (data) {
244
- var _tannin$data$domain2;
245
-
246
- let domain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';
237
+ const addLocaleData = (data, domain = 'default') => {
247
238
  tannin.data[domain] = { ...tannin.data[domain],
248
239
  ...data,
249
240
  // Populate default domain configuration (supported locale date which omits
250
241
  // a plural forms expression).
251
242
  '': { ...DEFAULT_LOCALE_DATA[''],
252
- ...((_tannin$data$domain2 = tannin.data[domain]) === null || _tannin$data$domain2 === void 0 ? void 0 : _tannin$data$domain2['']),
253
- ...(data === null || data === void 0 ? void 0 : data[''])
243
+ ...tannin.data[domain]?.[''],
244
+ ...data?.['']
254
245
  }
255
246
  }; // Clean up cached plural forms functions cache as it might be updated.
256
247
 
@@ -284,13 +275,7 @@ const createI18n = (initialData, initialDomain, hooks) => {
284
275
  */
285
276
 
286
277
 
287
- const dcnpgettext = function () {
288
- let domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
289
- let context = arguments.length > 1 ? arguments[1] : undefined;
290
- let single = arguments.length > 2 ? arguments[2] : undefined;
291
- let plural = arguments.length > 3 ? arguments[3] : undefined;
292
- let number = arguments.length > 4 ? arguments[4] : undefined;
293
-
278
+ const dcnpgettext = (domain = 'default', context, single, plural, number) => {
294
279
  if (!tannin.data[domain]) {
295
280
  // Use `doSetLocaleData` to set silently, without notifying listeners.
296
281
  doSetLocaleData(undefined, domain);
@@ -301,10 +286,7 @@ const createI18n = (initialData, initialDomain, hooks) => {
301
286
  /** @type {GetFilterDomain} */
302
287
 
303
288
 
304
- const getFilterDomain = function () {
305
- let domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
306
- return domain;
307
- };
289
+ const getFilterDomain = (domain = 'default') => domain;
308
290
  /** @type {__} */
309
291
 
310
292
 
@@ -441,10 +423,8 @@ const createI18n = (initialData, initialDomain, hooks) => {
441
423
 
442
424
 
443
425
  const hasTranslation = (single, context, domain) => {
444
- var _tannin$data, _tannin$data2;
445
-
446
426
  const key = context ? context + '\u0004' + single : single;
447
- let result = !!((_tannin$data = tannin.data) !== null && _tannin$data !== void 0 && (_tannin$data2 = _tannin$data[domain !== null && domain !== void 0 ? domain : 'default']) !== null && _tannin$data2 !== void 0 && _tannin$data2[key]);
427
+ let result = !!tannin.data?.[domain !== null && domain !== void 0 ? domain : 'default']?.[key];
448
428
 
449
429
  if (hooks) {
450
430
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/i18n/src/create-i18n.js"],"names":["DEFAULT_LOCALE_DATA","plural_forms","n","I18N_HOOK_REGEXP","createI18n","initialData","initialDomain","hooks","tannin","Tannin","listeners","Set","notifyListeners","forEach","listener","subscribe","callback","add","delete","getLocaleData","domain","data","doSetLocaleData","pluralForms","setLocaleData","addLocaleData","resetLocaleData","dcnpgettext","context","single","plural","number","undefined","getFilterDomain","__","text","translation","applyFilters","_x","_n","_nx","isRTL","hasTranslation","key","result","onHookAddedOrRemoved","hookName","test","addAction"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,mBAAmB,GAAG;AAC3B,MAAI;AACH;AACAC,IAAAA,YAAY,CAAEC,CAAF,EAAM;AACjB,aAAOA,CAAC,KAAK,CAAN,GAAU,CAAV,GAAc,CAArB;AACA;;AAJE;AADuB,CAA5B;AASA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,yCAAzB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,MAAMC,UAAU,GAAG,CAAEC,WAAF,EAAeC,aAAf,EAA8BC,KAA9B,KAAyC;AAClE;AACD;AACA;AACA;AACA;AACC,QAAMC,MAAM,GAAG,IAAIC,eAAJ,CAAY,EAAZ,CAAf;AAEA,QAAMC,SAAS,GAAG,IAAIC,GAAJ,EAAlB;;AAEA,QAAMC,eAAe,GAAG,MAAM;AAC7BF,IAAAA,SAAS,CAACG,OAAV,CAAqBC,QAAF,IAAgBA,QAAQ,EAA3C;AACA,GAFD;AAIA;AACD;AACA;AACA;AACA;AAC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","sourcesContent":["/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n\t'': {\n\t\t/** @param {number} n */\n\t\tplural_forms( n ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {AddLocaleData} addLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data.\n * @property {__} __ Retrieve the translation of text.\n * @property {_x} _x Retrieve translated string with gettext context.\n * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied\n * number.\n * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n * @property {IsRtl} isRTL Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData] Locale data configuration.\n * @param {string} [initialDomain] Domain for which configuration applies.\n * @param {Hooks} [hooks] Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nexport const createI18n = ( initialData, initialDomain, hooks ) => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t *\n\t * @type {Tannin}\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param {SubscribeCallback} callback Subscription callback.\n\t * @return {UnsubscribeCallback} Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback ) => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\t/** @type {GetLocaleData} */\n\tconst getLocaleData = ( domain = 'default' ) => tannin.data[ domain ];\n\n\t/**\n\t * @param {LocaleData} [data]\n\t * @param {string} [domain]\n\t */\n\tconst doSetLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t};\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\t/** @type {SetLocaleData} */\n\tconst setLocaleData = ( data, domain ) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {AddLocaleData} */\n\tconst addLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {ResetLocaleData} */\n\tconst resetLocaleData = ( data, domain ) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param {string|undefined} domain Domain to retrieve the translated text.\n\t * @param {string|undefined} context Context information for the translators.\n\t * @param {string} single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param {string} [plural] The text to be used if the number is\n\t * plural.\n\t * @param {number} [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return {string} The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default',\n\t\tcontext,\n\t\tsingle,\n\t\tplural,\n\t\tnumber\n\t) => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\t/** @type {GetFilterDomain} */\n\tconst getFilterDomain = ( domain = 'default' ) => domain;\n\n\t/** @type {__} */\n\tconst __ = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_x} */\n\tconst _x = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_n} */\n\tconst _n = ( single, plural, number, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_nx} */\n\tconst _nx = ( single, plural, number, context, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {IsRtl} */\n\tconst isRTL = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\t/** @type {HasTranslation} */\n\tconst hasTranslation = ( single, context, domain ) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param {boolean} hasTranslation Whether the translation is present or not..\n\t\t\t * @param {string} single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param {string} context Context information for the translators.\n\t\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation',\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param {string} hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/i18n/src/create-i18n.js"],"names":["DEFAULT_LOCALE_DATA","plural_forms","n","I18N_HOOK_REGEXP","createI18n","initialData","initialDomain","hooks","tannin","Tannin","listeners","Set","notifyListeners","forEach","listener","subscribe","callback","add","delete","getLocaleData","domain","data","doSetLocaleData","pluralForms","setLocaleData","addLocaleData","resetLocaleData","dcnpgettext","context","single","plural","number","undefined","getFilterDomain","__","text","translation","applyFilters","_x","_n","_nx","isRTL","hasTranslation","key","result","onHookAddedOrRemoved","hookName","test","addAction"],"mappings":";;;;;;;;;AAGA;;AAHA;AACA;AACA;;AAGA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,mBAAmB,GAAG;AAC3B,MAAI;AACH;AACAC,IAAAA,YAAY,CAAEC,CAAF,EAAM;AACjB,aAAOA,CAAC,KAAK,CAAN,GAAU,CAAV,GAAc,CAArB;AACA;;AAJE;AADuB,CAA5B;AASA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,yCAAzB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,MAAMC,UAAU,GAAG,CAAEC,WAAF,EAAeC,aAAf,EAA8BC,KAA9B,KAAyC;AAClE;AACD;AACA;AACA;AACA;AACC,QAAMC,MAAM,GAAG,IAAIC,eAAJ,CAAY,EAAZ,CAAf;AAEA,QAAMC,SAAS,GAAG,IAAIC,GAAJ,EAAlB;;AAEA,QAAMC,eAAe,GAAG,MAAM;AAC7BF,IAAAA,SAAS,CAACG,OAAV,CAAqBC,QAAF,IAAgBA,QAAQ,EAA3C;AACA,GAFD;AAIA;AACD;AACA;AACA;AACA;AACA;;;AACC,QAAMC,SAAS,GAAKC,QAAF,IAAgB;AACjCN,IAAAA,SAAS,CAACO,GAAV,CAAeD,QAAf;AACA,WAAO,MAAMN,SAAS,CAACQ,MAAV,CAAkBF,QAAlB,CAAb;AACA,GAHD;AAKA;;;AACA,QAAMG,aAAa,GAAG,CAAEC,MAAM,GAAG,SAAX,KAA0BZ,MAAM,CAACa,IAAP,CAAaD,MAAb,CAAhD;AAEA;AACD;AACA;AACA;;;AACC,QAAME,eAAe,GAAG,CAAED,IAAF,EAAQD,MAAM,GAAG,SAAjB,KAAgC;AACvDZ,IAAAA,MAAM,CAACa,IAAP,CAAaD,MAAb,IAAwB,EACvB,GAAGZ,MAAM,CAACa,IAAP,CAAaD,MAAb,CADoB;AAEvB,SAAGC;AAFoB,KAAxB,CADuD,CAMvD;AACA;;AACAb,IAAAA,MAAM,CAACa,IAAP,CAAaD,MAAb,EAAuB,EAAvB,IAA8B,EAC7B,GAAGpB,mBAAmB,CAAE,EAAF,CADO;AAE7B,SAAGQ,MAAM,CAACa,IAAP,CAAaD,MAAb,IAAyB,EAAzB;AAF0B,KAA9B,CARuD,CAavD;;AACA,WAAOZ,MAAM,CAACe,WAAP,CAAoBH,MAApB,CAAP;AACA,GAfD;AAiBA;;;AACA,QAAMI,aAAa,GAAG,CAAEH,IAAF,EAAQD,MAAR,KAAoB;AACzCE,IAAAA,eAAe,CAAED,IAAF,EAAQD,MAAR,CAAf;AACAR,IAAAA,eAAe;AACf,GAHD;AAKA;;;AACA,QAAMa,aAAa,GAAG,CAAEJ,IAAF,EAAQD,MAAM,GAAG,SAAjB,KAAgC;AACrDZ,IAAAA,MAAM,CAACa,IAAP,CAAaD,MAAb,IAAwB,EACvB,GAAGZ,MAAM,CAACa,IAAP,CAAaD,MAAb,CADoB;AAEvB,SAAGC,IAFoB;AAGvB;AACA;AACA,UAAI,EACH,GAAGrB,mBAAmB,CAAE,EAAF,CADnB;AAEH,WAAGQ,MAAM,CAACa,IAAP,CAAaD,MAAb,IAAyB,EAAzB,CAFA;AAGH,WAAGC,IAAI,GAAI,EAAJ;AAHJ;AALmB,KAAxB,CADqD,CAarD;;AACA,WAAOb,MAAM,CAACe,WAAP,CAAoBH,MAApB,CAAP;AAEAR,IAAAA,eAAe;AACf,GAjBD;AAmBA;;;AACA,QAAMc,eAAe,GAAG,CAAEL,IAAF,EAAQD,MAAR,KAAoB;AAC3C;AACAZ,IAAAA,MAAM,CAACa,IAAP,GAAc,EAAd,CAF2C,CAI3C;;AACAb,IAAAA,MAAM,CAACe,WAAP,GAAqB,EAArB;AAEAC,IAAAA,aAAa,CAAEH,IAAF,EAAQD,MAAR,CAAb;AACA,GARD;AAUA;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACC,QAAMO,WAAW,GAAG,CACnBP,MAAM,GAAG,SADU,EAEnBQ,OAFmB,EAGnBC,MAHmB,EAInBC,MAJmB,EAKnBC,MALmB,KAMf;AACJ,QAAK,CAAEvB,MAAM,CAACa,IAAP,CAAaD,MAAb,CAAP,EAA+B;AAC9B;AACAE,MAAAA,eAAe,CAAEU,SAAF,EAAaZ,MAAb,CAAf;AACA;;AAED,WAAOZ,MAAM,CAACmB,WAAP,CAAoBP,MAApB,EAA4BQ,OAA5B,EAAqCC,MAArC,EAA6CC,MAA7C,EAAqDC,MAArD,CAAP;AACA,GAbD;AAeA;;;AACA,QAAME,eAAe,GAAG,CAAEb,MAAM,GAAG,SAAX,KAA0BA,MAAlD;AAEA;;;AACA,QAAMc,EAAE,GAAG,CAAEC,IAAF,EAAQf,MAAR,KAAoB;AAC9B,QAAIgB,WAAW,GAAGT,WAAW,CAAEP,MAAF,EAAUY,SAAV,EAAqBG,IAArB,CAA7B;;AACA,QAAK,CAAE5B,KAAP,EAAe;AACd,aAAO6B,WAAP;AACA;AAED;AACF;AACA;AACA;AACA;AACA;AACA;;;AACEA,IAAAA,WAAW;AAAG;;AACb;AAAiB7B,IAAAA,KAAK,CAAC8B,YAAN,CAChB,cADgB,EAEhBD,WAFgB,EAGhBD,IAHgB,EAIhBf,MAJgB,CADlB;AAQA;AAAO;;AACN;AAAiBb,MAAAA,KAAK,CAAC8B,YAAN,CAChB,kBAAkBJ,eAAe,CAAEb,MAAF,CADjB,EAEhBgB,WAFgB,EAGhBD,IAHgB,EAIhBf,MAJgB;AADlB;AAQA,GA7BD;AA+BA;;;AACA,QAAMkB,EAAE,GAAG,CAAEH,IAAF,EAAQP,OAAR,EAAiBR,MAAjB,KAA6B;AACvC,QAAIgB,WAAW,GAAGT,WAAW,CAAEP,MAAF,EAAUQ,OAAV,EAAmBO,IAAnB,CAA7B;;AACA,QAAK,CAAE5B,KAAP,EAAe;AACd,aAAO6B,WAAP;AACA;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEA,IAAAA,WAAW;AAAG;;AACb;AAAiB7B,IAAAA,KAAK,CAAC8B,YAAN,CAChB,2BADgB,EAEhBD,WAFgB,EAGhBD,IAHgB,EAIhBP,OAJgB,EAKhBR,MALgB,CADlB;AASA;AAAO;;AACN;AAAiBb,MAAAA,KAAK,CAAC8B,YAAN,CAChB,+BAA+BJ,eAAe,CAAEb,MAAF,CAD9B,EAEhBgB,WAFgB,EAGhBD,IAHgB,EAIhBP,OAJgB,EAKhBR,MALgB;AADlB;AASA,GAhCD;AAkCA;;;AACA,QAAMmB,EAAE,GAAG,CAAEV,MAAF,EAAUC,MAAV,EAAkBC,MAAlB,EAA0BX,MAA1B,KAAsC;AAChD,QAAIgB,WAAW,GAAGT,WAAW,CAC5BP,MAD4B,EAE5BY,SAF4B,EAG5BH,MAH4B,EAI5BC,MAJ4B,EAK5BC,MAL4B,CAA7B;;AAOA,QAAK,CAAExB,KAAP,EAAe;AACd,aAAO6B,WAAP;AACA;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEA,IAAAA,WAAW;AAAG;;AACb;AAAiB7B,IAAAA,KAAK,CAAC8B,YAAN,CAChB,eADgB,EAEhBD,WAFgB,EAGhBP,MAHgB,EAIhBC,MAJgB,EAKhBC,MALgB,EAMhBX,MANgB,CADlB;AAUA;AAAO;;AACN;AAAiBb,MAAAA,KAAK,CAAC8B,YAAN,CAChB,mBAAmBJ,eAAe,CAAEb,MAAF,CADlB,EAEhBgB,WAFgB,EAGhBP,MAHgB,EAIhBC,MAJgB,EAKhBC,MALgB,EAMhBX,MANgB;AADlB;AAUA,GAzCD;AA2CA;;;AACA,QAAMoB,GAAG,GAAG,CAAEX,MAAF,EAAUC,MAAV,EAAkBC,MAAlB,EAA0BH,OAA1B,EAAmCR,MAAnC,KAA+C;AAC1D,QAAIgB,WAAW,GAAGT,WAAW,CAC5BP,MAD4B,EAE5BQ,OAF4B,EAG5BC,MAH4B,EAI5BC,MAJ4B,EAK5BC,MAL4B,CAA7B;;AAOA,QAAK,CAAExB,KAAP,EAAe;AACd,aAAO6B,WAAP;AACA;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEA,IAAAA,WAAW;AAAG;;AACb;AAAiB7B,IAAAA,KAAK,CAAC8B,YAAN,CAChB,4BADgB,EAEhBD,WAFgB,EAGhBP,MAHgB,EAIhBC,MAJgB,EAKhBC,MALgB,EAMhBH,OANgB,EAOhBR,MAPgB,CADlB;AAYA;AAAO;;AACN;AAAiBb,MAAAA,KAAK,CAAC8B,YAAN,CAChB,gCAAgCJ,eAAe,CAAEb,MAAF,CAD/B,EAEhBgB,WAFgB,EAGhBP,MAHgB,EAIhBC,MAJgB,EAKhBC,MALgB,EAMhBH,OANgB,EAOhBR,MAPgB;AADlB;AAWA,GA7CD;AA+CA;;;AACA,QAAMqB,KAAK,GAAG,MAAM;AACnB,WAAO,UAAUH,EAAE,CAAE,KAAF,EAAS,gBAAT,CAAnB;AACA,GAFD;AAIA;;;AACA,QAAMI,cAAc,GAAG,CAAEb,MAAF,EAAUD,OAAV,EAAmBR,MAAnB,KAA+B;AACrD,UAAMuB,GAAG,GAAGf,OAAO,GAAGA,OAAO,GAAG,QAAV,GAAqBC,MAAxB,GAAiCA,MAApD;AACA,QAAIe,MAAM,GAAG,CAAC,CAAEpC,MAAM,CAACa,IAAP,GAAeD,MAAf,aAAeA,MAAf,cAAeA,MAAf,GAAyB,SAAzB,IAAwCuB,GAAxC,CAAhB;;AACA,QAAKpC,KAAL,EAAa;AACZ;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACGqC,MAAAA,MAAM;AAAG;;AACR;AAAiBrC,MAAAA,KAAK,CAAC8B,YAAN,CAChB,sBADgB,EAEhBO,MAFgB,EAGhBf,MAHgB,EAIhBD,OAJgB,EAKhBR,MALgB,CADlB;AAUAwB,MAAAA,MAAM;AAAG;;AACR;AAAiBrC,MAAAA,KAAK,CAAC8B,YAAN,CAChB,0BAA0BJ,eAAe,CAAEb,MAAF,CADzB,EAEhBwB,MAFgB,EAGhBf,MAHgB,EAIhBD,OAJgB,EAKhBR,MALgB,CADlB;AASA;;AACD,WAAOwB,MAAP;AACA,GAjCD;;AAmCA,MAAKvC,WAAL,EAAmB;AAClBmB,IAAAA,aAAa,CAAEnB,WAAF,EAAeC,aAAf,CAAb;AACA;;AAED,MAAKC,KAAL,EAAa;AACZ;AACF;AACA;AACE,UAAMsC,oBAAoB,GAAKC,QAAF,IAAgB;AAC5C,UAAK3C,gBAAgB,CAAC4C,IAAjB,CAAuBD,QAAvB,CAAL,EAAyC;AACxClC,QAAAA,eAAe;AACf;AACD,KAJD;;AAMAL,IAAAA,KAAK,CAACyC,SAAN,CAAiB,WAAjB,EAA8B,WAA9B,EAA2CH,oBAA3C;AACAtC,IAAAA,KAAK,CAACyC,SAAN,CAAiB,aAAjB,EAAgC,WAAhC,EAA6CH,oBAA7C;AACA;;AAED,SAAO;AACN1B,IAAAA,aADM;AAENK,IAAAA,aAFM;AAGNC,IAAAA,aAHM;AAINC,IAAAA,eAJM;AAKNX,IAAAA,SALM;AAMNmB,IAAAA,EANM;AAONI,IAAAA,EAPM;AAQNC,IAAAA,EARM;AASNC,IAAAA,GATM;AAUNC,IAAAA,KAVM;AAWNC,IAAAA;AAXM,GAAP;AAaA,CA9VM","sourcesContent":["/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n\t'': {\n\t\t/** @param {number} n */\n\t\tplural_forms( n ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {AddLocaleData} addLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data.\n * @property {__} __ Retrieve the translation of text.\n * @property {_x} _x Retrieve translated string with gettext context.\n * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied\n * number.\n * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n * @property {IsRtl} isRTL Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData] Locale data configuration.\n * @param {string} [initialDomain] Domain for which configuration applies.\n * @param {Hooks} [hooks] Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nexport const createI18n = ( initialData, initialDomain, hooks ) => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t *\n\t * @type {Tannin}\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param {SubscribeCallback} callback Subscription callback.\n\t * @return {UnsubscribeCallback} Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback ) => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\t/** @type {GetLocaleData} */\n\tconst getLocaleData = ( domain = 'default' ) => tannin.data[ domain ];\n\n\t/**\n\t * @param {LocaleData} [data]\n\t * @param {string} [domain]\n\t */\n\tconst doSetLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t};\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\t/** @type {SetLocaleData} */\n\tconst setLocaleData = ( data, domain ) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {AddLocaleData} */\n\tconst addLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {ResetLocaleData} */\n\tconst resetLocaleData = ( data, domain ) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param {string|undefined} domain Domain to retrieve the translated text.\n\t * @param {string|undefined} context Context information for the translators.\n\t * @param {string} single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param {string} [plural] The text to be used if the number is\n\t * plural.\n\t * @param {number} [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return {string} The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default',\n\t\tcontext,\n\t\tsingle,\n\t\tplural,\n\t\tnumber\n\t) => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\t/** @type {GetFilterDomain} */\n\tconst getFilterDomain = ( domain = 'default' ) => domain;\n\n\t/** @type {__} */\n\tconst __ = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_x} */\n\tconst _x = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_n} */\n\tconst _n = ( single, plural, number, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_nx} */\n\tconst _nx = ( single, plural, number, context, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {IsRtl} */\n\tconst isRTL = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\t/** @type {HasTranslation} */\n\tconst hasTranslation = ( single, context, domain ) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param {boolean} hasTranslation Whether the translation is present or not..\n\t\t\t * @param {string} single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param {string} context Context information for the translators.\n\t\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation',\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param {string} hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n"]}
package/build/sprintf.js CHANGED
@@ -36,12 +36,8 @@ const logErrorOnce = (0, _memize.default)(console.error); // eslint-disable-line
36
36
  * @return {string} The formatted string.
37
37
  */
38
38
 
39
- function sprintf(format) {
39
+ function sprintf(format, ...args) {
40
40
  try {
41
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
42
- args[_key - 1] = arguments[_key];
43
- }
44
-
45
41
  return _sprintfJs.default.sprintf(format, ...args);
46
42
  } catch (error) {
47
43
  if (error instanceof Error) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/i18n/src/sprintf.js"],"names":["logErrorOnce","console","error","sprintf","format","args","sprintfjs","Error","toString"],"mappings":";;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,YAAY,GAAG,qBAASC,OAAO,CAACC,KAAjB,CAArB,C,CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASC,OAAT,CAAkBC,MAAlB,EAAoC;AAC1C,MAAI;AAAA,sCAD+BC,IAC/B;AAD+BA,MAAAA,IAC/B;AAAA;;AACH,WAAOC,mBAAUH,OAAV,CAAmBC,MAAnB,EAA2B,GAAGC,IAA9B,CAAP;AACA,GAFD,CAEE,OAAQH,KAAR,EAAgB;AACjB,QAAKA,KAAK,YAAYK,KAAtB,EAA8B;AAC7BP,MAAAA,YAAY,CAAE,wBAAwBE,KAAK,CAACM,QAAN,EAA1B,CAAZ;AACA;;AACD,WAAOJ,MAAP;AACA;AACD","sourcesContent":["/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memoize( console.error ); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nexport function sprintf( format, ...args ) {\n\ttry {\n\t\treturn sprintfjs.sprintf( format, ...args );\n\t} catch ( error ) {\n\t\tif ( error instanceof Error ) {\n\t\t\tlogErrorOnce( 'sprintf error: \\n\\n' + error.toString() );\n\t\t}\n\t\treturn format;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/i18n/src/sprintf.js"],"names":["logErrorOnce","console","error","sprintf","format","args","sprintfjs","Error","toString"],"mappings":";;;;;;;;;AAGA;;AACA;;AAJA;AACA;AACA;;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,YAAY,GAAG,qBAASC,OAAO,CAACC,KAAjB,CAArB,C,CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACO,SAASC,OAAT,CAAkBC,MAAlB,EAA0B,GAAGC,IAA7B,EAAoC;AAC1C,MAAI;AACH,WAAOC,mBAAUH,OAAV,CAAmBC,MAAnB,EAA2B,GAAGC,IAA9B,CAAP;AACA,GAFD,CAEE,OAAQH,KAAR,EAAgB;AACjB,QAAKA,KAAK,YAAYK,KAAtB,EAA8B;AAC7BP,MAAAA,YAAY,CAAE,wBAAwBE,KAAK,CAACM,QAAN,EAA1B,CAAZ;AACA;;AACD,WAAOJ,MAAP;AACA;AACD","sourcesContent":["/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memoize( console.error ); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nexport function sprintf( format, ...args ) {\n\ttry {\n\t\treturn sprintfjs.sprintf( format, ...args );\n\t} catch ( error ) {\n\t\tif ( error instanceof Error ) {\n\t\t\tlogErrorOnce( 'sprintf error: \\n\\n' + error.toString() );\n\t\t}\n\t\treturn format;\n\t}\n}\n"]}
@@ -195,27 +195,21 @@ export const createI18n = (initialData, initialDomain, hooks) => {
195
195
  /** @type {GetLocaleData} */
196
196
 
197
197
 
198
- const getLocaleData = function () {
199
- let domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
200
- return tannin.data[domain];
201
- };
198
+ const getLocaleData = (domain = 'default') => tannin.data[domain];
202
199
  /**
203
200
  * @param {LocaleData} [data]
204
201
  * @param {string} [domain]
205
202
  */
206
203
 
207
204
 
208
- const doSetLocaleData = function (data) {
209
- var _tannin$data$domain;
210
-
211
- let domain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';
205
+ const doSetLocaleData = (data, domain = 'default') => {
212
206
  tannin.data[domain] = { ...tannin.data[domain],
213
207
  ...data
214
208
  }; // Populate default domain configuration (supported locale date which omits
215
209
  // a plural forms expression).
216
210
 
217
211
  tannin.data[domain][''] = { ...DEFAULT_LOCALE_DATA[''],
218
- ...((_tannin$data$domain = tannin.data[domain]) === null || _tannin$data$domain === void 0 ? void 0 : _tannin$data$domain[''])
212
+ ...tannin.data[domain]?.['']
219
213
  }; // Clean up cached plural forms functions cache as it might be updated.
220
214
 
221
215
  delete tannin.pluralForms[domain];
@@ -230,17 +224,14 @@ export const createI18n = (initialData, initialDomain, hooks) => {
230
224
  /** @type {AddLocaleData} */
231
225
 
232
226
 
233
- const addLocaleData = function (data) {
234
- var _tannin$data$domain2;
235
-
236
- let domain = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'default';
227
+ const addLocaleData = (data, domain = 'default') => {
237
228
  tannin.data[domain] = { ...tannin.data[domain],
238
229
  ...data,
239
230
  // Populate default domain configuration (supported locale date which omits
240
231
  // a plural forms expression).
241
232
  '': { ...DEFAULT_LOCALE_DATA[''],
242
- ...((_tannin$data$domain2 = tannin.data[domain]) === null || _tannin$data$domain2 === void 0 ? void 0 : _tannin$data$domain2['']),
243
- ...(data === null || data === void 0 ? void 0 : data[''])
233
+ ...tannin.data[domain]?.[''],
234
+ ...data?.['']
244
235
  }
245
236
  }; // Clean up cached plural forms functions cache as it might be updated.
246
237
 
@@ -274,13 +265,7 @@ export const createI18n = (initialData, initialDomain, hooks) => {
274
265
  */
275
266
 
276
267
 
277
- const dcnpgettext = function () {
278
- let domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
279
- let context = arguments.length > 1 ? arguments[1] : undefined;
280
- let single = arguments.length > 2 ? arguments[2] : undefined;
281
- let plural = arguments.length > 3 ? arguments[3] : undefined;
282
- let number = arguments.length > 4 ? arguments[4] : undefined;
283
-
268
+ const dcnpgettext = (domain = 'default', context, single, plural, number) => {
284
269
  if (!tannin.data[domain]) {
285
270
  // Use `doSetLocaleData` to set silently, without notifying listeners.
286
271
  doSetLocaleData(undefined, domain);
@@ -291,10 +276,7 @@ export const createI18n = (initialData, initialDomain, hooks) => {
291
276
  /** @type {GetFilterDomain} */
292
277
 
293
278
 
294
- const getFilterDomain = function () {
295
- let domain = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'default';
296
- return domain;
297
- };
279
+ const getFilterDomain = (domain = 'default') => domain;
298
280
  /** @type {__} */
299
281
 
300
282
 
@@ -431,10 +413,8 @@ export const createI18n = (initialData, initialDomain, hooks) => {
431
413
 
432
414
 
433
415
  const hasTranslation = (single, context, domain) => {
434
- var _tannin$data, _tannin$data2;
435
-
436
416
  const key = context ? context + '\u0004' + single : single;
437
- let result = !!((_tannin$data = tannin.data) !== null && _tannin$data !== void 0 && (_tannin$data2 = _tannin$data[domain !== null && domain !== void 0 ? domain : 'default']) !== null && _tannin$data2 !== void 0 && _tannin$data2[key]);
417
+ let result = !!tannin.data?.[domain !== null && domain !== void 0 ? domain : 'default']?.[key];
438
418
 
439
419
  if (hooks) {
440
420
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/i18n/src/create-i18n.js"],"names":["Tannin","DEFAULT_LOCALE_DATA","plural_forms","n","I18N_HOOK_REGEXP","createI18n","initialData","initialDomain","hooks","tannin","listeners","Set","notifyListeners","forEach","listener","subscribe","callback","add","delete","getLocaleData","domain","data","doSetLocaleData","pluralForms","setLocaleData","addLocaleData","resetLocaleData","dcnpgettext","context","single","plural","number","undefined","getFilterDomain","__","text","translation","applyFilters","_x","_n","_nx","isRTL","hasTranslation","key","result","onHookAddedOrRemoved","hookName","test","addAction"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,MAAP,MAAmB,QAAnB;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,mBAAmB,GAAG;AAC3B,MAAI;AACH;AACAC,IAAAA,YAAY,CAAEC,CAAF,EAAM;AACjB,aAAOA,CAAC,KAAK,CAAN,GAAU,CAAV,GAAc,CAArB;AACA;;AAJE;AADuB,CAA5B;AASA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,yCAAzB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,UAAU,GAAG,CAAEC,WAAF,EAAeC,aAAf,EAA8BC,KAA9B,KAAyC;AAClE;AACD;AACA;AACA;AACA;AACC,QAAMC,MAAM,GAAG,IAAIT,MAAJ,CAAY,EAAZ,CAAf;AAEA,QAAMU,SAAS,GAAG,IAAIC,GAAJ,EAAlB;;AAEA,QAAMC,eAAe,GAAG,MAAM;AAC7BF,IAAAA,SAAS,CAACG,OAAV,CAAqBC,QAAF,IAAgBA,QAAQ,EAA3C;AACA,GAFD;AAIA;AACD;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","sourcesContent":["/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n\t'': {\n\t\t/** @param {number} n */\n\t\tplural_forms( n ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {AddLocaleData} addLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data.\n * @property {__} __ Retrieve the translation of text.\n * @property {_x} _x Retrieve translated string with gettext context.\n * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied\n * number.\n * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n * @property {IsRtl} isRTL Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData] Locale data configuration.\n * @param {string} [initialDomain] Domain for which configuration applies.\n * @param {Hooks} [hooks] Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nexport const createI18n = ( initialData, initialDomain, hooks ) => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t *\n\t * @type {Tannin}\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param {SubscribeCallback} callback Subscription callback.\n\t * @return {UnsubscribeCallback} Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback ) => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\t/** @type {GetLocaleData} */\n\tconst getLocaleData = ( domain = 'default' ) => tannin.data[ domain ];\n\n\t/**\n\t * @param {LocaleData} [data]\n\t * @param {string} [domain]\n\t */\n\tconst doSetLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t};\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\t/** @type {SetLocaleData} */\n\tconst setLocaleData = ( data, domain ) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {AddLocaleData} */\n\tconst addLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {ResetLocaleData} */\n\tconst resetLocaleData = ( data, domain ) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param {string|undefined} domain Domain to retrieve the translated text.\n\t * @param {string|undefined} context Context information for the translators.\n\t * @param {string} single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param {string} [plural] The text to be used if the number is\n\t * plural.\n\t * @param {number} [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return {string} The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default',\n\t\tcontext,\n\t\tsingle,\n\t\tplural,\n\t\tnumber\n\t) => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\t/** @type {GetFilterDomain} */\n\tconst getFilterDomain = ( domain = 'default' ) => domain;\n\n\t/** @type {__} */\n\tconst __ = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_x} */\n\tconst _x = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_n} */\n\tconst _n = ( single, plural, number, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_nx} */\n\tconst _nx = ( single, plural, number, context, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {IsRtl} */\n\tconst isRTL = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\t/** @type {HasTranslation} */\n\tconst hasTranslation = ( single, context, domain ) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param {boolean} hasTranslation Whether the translation is present or not..\n\t\t\t * @param {string} single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param {string} context Context information for the translators.\n\t\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation',\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param {string} hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n"]}
1
+ {"version":3,"sources":["@wordpress/i18n/src/create-i18n.js"],"names":["Tannin","DEFAULT_LOCALE_DATA","plural_forms","n","I18N_HOOK_REGEXP","createI18n","initialData","initialDomain","hooks","tannin","listeners","Set","notifyListeners","forEach","listener","subscribe","callback","add","delete","getLocaleData","domain","data","doSetLocaleData","pluralForms","setLocaleData","addLocaleData","resetLocaleData","dcnpgettext","context","single","plural","number","undefined","getFilterDomain","__","text","translation","applyFilters","_x","_n","_nx","isRTL","hasTranslation","key","result","onHookAddedOrRemoved","hookName","test","addAction"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,MAAP,MAAmB,QAAnB;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,mBAAmB,GAAG;AAC3B,MAAI;AACH;AACAC,IAAAA,YAAY,CAAEC,CAAF,EAAM;AACjB,aAAOA,CAAC,KAAK,CAAN,GAAU,CAAV,GAAc,CAArB;AACA;;AAJE;AADuB,CAA5B;AASA;AACA;AACA;AACA;;AACA,MAAMC,gBAAgB,GAAG,yCAAzB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA;;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,MAAMC,UAAU,GAAG,CAAEC,WAAF,EAAeC,aAAf,EAA8BC,KAA9B,KAAyC;AAClE;AACD;AACA;AACA;AACA;AACC,QAAMC,MAAM,GAAG,IAAIT,MAAJ,CAAY,EAAZ,CAAf;AAEA,QAAMU,SAAS,GAAG,IAAIC,GAAJ,EAAlB;;AAEA,QAAMC,eAAe,GAAG,MAAM;AAC7BF,IAAAA,SAAS,CAACG,OAAV,CAAqBC,QAAF,IAAgBA,QAAQ,EAA3C;AACA,GAFD;AAIA;AACD;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","sourcesContent":["/**\n * External dependencies\n */\nimport Tannin from 'tannin';\n\n/**\n * @typedef {Record<string,any>} LocaleData\n */\n\n/**\n * Default locale data to use for Tannin domain when not otherwise provided.\n * Assumes an English plural forms expression.\n *\n * @type {LocaleData}\n */\nconst DEFAULT_LOCALE_DATA = {\n\t'': {\n\t\t/** @param {number} n */\n\t\tplural_forms( n ) {\n\t\t\treturn n === 1 ? 0 : 1;\n\t\t},\n\t},\n};\n\n/*\n * Regular expression that matches i18n hooks like `i18n.gettext`, `i18n.ngettext`,\n * `i18n.gettext_domain` or `i18n.ngettext_with_context` or `i18n.has_translation`.\n */\nconst I18N_HOOK_REGEXP = /^i18n\\.(n?gettext|has_translation)(_|$)/;\n\n/**\n * @typedef {(domain?: string) => LocaleData} GetLocaleData\n *\n * Returns locale data by domain in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} SetLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} AddLocaleData\n *\n * Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/**\n * @typedef {(data?: LocaleData, domain?: string) => void} ResetLocaleData\n *\n * Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n *\n * @see http://messageformat.github.io/Jed/\n */\n/** @typedef {() => void} SubscribeCallback */\n/** @typedef {() => void} UnsubscribeCallback */\n/**\n * @typedef {(callback: SubscribeCallback) => UnsubscribeCallback} Subscribe\n *\n * Subscribes to changes of locale data\n */\n/**\n * @typedef {(domain?: string) => string} GetFilterDomain\n * Retrieve the domain to use when calling domain-specific filters.\n */\n/**\n * @typedef {(text: string, domain?: string) => string} __\n *\n * Retrieve the translation of text.\n *\n * @see https://developer.wordpress.org/reference/functions/__/\n */\n/**\n * @typedef {(text: string, context: string, domain?: string) => string} _x\n *\n * Retrieve translated string with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_x/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, domain?: string) => string} _n\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number.\n *\n * @see https://developer.wordpress.org/reference/functions/_n/\n */\n/**\n * @typedef {(single: string, plural: string, number: number, context: string, domain?: string) => string} _nx\n *\n * Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n *\n * @see https://developer.wordpress.org/reference/functions/_nx/\n */\n/**\n * @typedef {() => boolean} IsRtl\n *\n * Check if current locale is RTL.\n *\n * **RTL (Right To Left)** is a locale property indicating that text is written from right to left.\n * For example, the `he` locale (for Hebrew) specifies right-to-left. Arabic (ar) is another common\n * language written RTL. The opposite of RTL, LTR (Left To Right) is used in other languages,\n * including English (`en`, `en-US`, `en-GB`, etc.), Spanish (`es`), and French (`fr`).\n */\n/**\n * @typedef {(single: string, context?: string, domain?: string) => boolean} HasTranslation\n *\n * Check if there is a translation for a given string in singular form.\n */\n/** @typedef {import('@wordpress/hooks').Hooks} Hooks */\n\n/**\n * An i18n instance\n *\n * @typedef I18n\n * @property {GetLocaleData} getLocaleData Returns locale data by domain in a Jed-formatted JSON object shape.\n * @property {SetLocaleData} setLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will overwrite the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {AddLocaleData} addLocaleData Merges locale data into the Tannin instance by domain. Note that this\n * function will also merge the domain configuration. Accepts data in a\n * Jed-formatted JSON object shape.\n * @property {ResetLocaleData} resetLocaleData Resets all current Tannin instance locale data and sets the specified\n * locale data for the domain. Accepts data in a Jed-formatted JSON object shape.\n * @property {Subscribe} subscribe Subscribes to changes of Tannin locale data.\n * @property {__} __ Retrieve the translation of text.\n * @property {_x} _x Retrieve translated string with gettext context.\n * @property {_n} _n Translates and retrieves the singular or plural form based on the supplied\n * number.\n * @property {_nx} _nx Translates and retrieves the singular or plural form based on the supplied\n * number, with gettext context.\n * @property {IsRtl} isRTL Check if current locale is RTL.\n * @property {HasTranslation} hasTranslation Check if there is a translation for a given string.\n */\n\n/**\n * Create an i18n instance\n *\n * @param {LocaleData} [initialData] Locale data configuration.\n * @param {string} [initialDomain] Domain for which configuration applies.\n * @param {Hooks} [hooks] Hooks implementation.\n *\n * @return {I18n} I18n instance.\n */\nexport const createI18n = ( initialData, initialDomain, hooks ) => {\n\t/**\n\t * The underlying instance of Tannin to which exported functions interface.\n\t *\n\t * @type {Tannin}\n\t */\n\tconst tannin = new Tannin( {} );\n\n\tconst listeners = new Set();\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach( ( listener ) => listener() );\n\t};\n\n\t/**\n\t * Subscribe to changes of locale data.\n\t *\n\t * @param {SubscribeCallback} callback Subscription callback.\n\t * @return {UnsubscribeCallback} Unsubscribe callback.\n\t */\n\tconst subscribe = ( callback ) => {\n\t\tlisteners.add( callback );\n\t\treturn () => listeners.delete( callback );\n\t};\n\n\t/** @type {GetLocaleData} */\n\tconst getLocaleData = ( domain = 'default' ) => tannin.data[ domain ];\n\n\t/**\n\t * @param {LocaleData} [data]\n\t * @param {string} [domain]\n\t */\n\tconst doSetLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t};\n\n\t\t// Populate default domain configuration (supported locale date which omits\n\t\t// a plural forms expression).\n\t\ttannin.data[ domain ][ '' ] = {\n\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\t};\n\n\t/** @type {SetLocaleData} */\n\tconst setLocaleData = ( data, domain ) => {\n\t\tdoSetLocaleData( data, domain );\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {AddLocaleData} */\n\tconst addLocaleData = ( data, domain = 'default' ) => {\n\t\ttannin.data[ domain ] = {\n\t\t\t...tannin.data[ domain ],\n\t\t\t...data,\n\t\t\t// Populate default domain configuration (supported locale date which omits\n\t\t\t// a plural forms expression).\n\t\t\t'': {\n\t\t\t\t...DEFAULT_LOCALE_DATA[ '' ],\n\t\t\t\t...tannin.data[ domain ]?.[ '' ],\n\t\t\t\t...data?.[ '' ],\n\t\t\t},\n\t\t};\n\n\t\t// Clean up cached plural forms functions cache as it might be updated.\n\t\tdelete tannin.pluralForms[ domain ];\n\n\t\tnotifyListeners();\n\t};\n\n\t/** @type {ResetLocaleData} */\n\tconst resetLocaleData = ( data, domain ) => {\n\t\t// Reset all current Tannin locale data.\n\t\ttannin.data = {};\n\n\t\t// Reset cached plural forms functions cache.\n\t\ttannin.pluralForms = {};\n\n\t\tsetLocaleData( data, domain );\n\t};\n\n\t/**\n\t * Wrapper for Tannin's `dcnpgettext`. Populates default locale data if not\n\t * otherwise previously assigned.\n\t *\n\t * @param {string|undefined} domain Domain to retrieve the translated text.\n\t * @param {string|undefined} context Context information for the translators.\n\t * @param {string} single Text to translate if non-plural. Used as\n\t * fallback return value on a caught error.\n\t * @param {string} [plural] The text to be used if the number is\n\t * plural.\n\t * @param {number} [number] The number to compare against to use\n\t * either the singular or plural form.\n\t *\n\t * @return {string} The translated string.\n\t */\n\tconst dcnpgettext = (\n\t\tdomain = 'default',\n\t\tcontext,\n\t\tsingle,\n\t\tplural,\n\t\tnumber\n\t) => {\n\t\tif ( ! tannin.data[ domain ] ) {\n\t\t\t// Use `doSetLocaleData` to set silently, without notifying listeners.\n\t\t\tdoSetLocaleData( undefined, domain );\n\t\t}\n\n\t\treturn tannin.dcnpgettext( domain, context, single, plural, number );\n\t};\n\n\t/** @type {GetFilterDomain} */\n\tconst getFilterDomain = ( domain = 'default' ) => domain;\n\n\t/** @type {__} */\n\tconst __ = ( text, domain ) => {\n\t\tlet translation = dcnpgettext( domain, undefined, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_x} */\n\tconst _x = ( text, context, domain ) => {\n\t\tlet translation = dcnpgettext( domain, context, text );\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters text with its translation based on context information.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} text Text to translate.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.gettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\ttext,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_n} */\n\tconst _n = ( single, plural, number, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tundefined,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {_nx} */\n\tconst _nx = ( single, plural, number, context, domain ) => {\n\t\tlet translation = dcnpgettext(\n\t\t\tdomain,\n\t\t\tcontext,\n\t\t\tsingle,\n\t\t\tplural,\n\t\t\tnumber\n\t\t);\n\t\tif ( ! hooks ) {\n\t\t\treturn translation;\n\t\t}\n\n\t\t/**\n\t\t * Filters the singular or plural form of a string with gettext context.\n\t\t *\n\t\t * @param {string} translation Translated text.\n\t\t * @param {string} single The text to be used if the number is singular.\n\t\t * @param {string} plural The text to be used if the number is plural.\n\t\t * @param {string} number The number to compare against to use either the singular or plural form.\n\t\t * @param {string} context Context information for the translators.\n\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t */\n\t\ttranslation = /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context',\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\n\t\treturn /** @type {string} */ (\n\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t'i18n.ngettext_with_context_' + getFilterDomain( domain ),\n\t\t\t\ttranslation,\n\t\t\t\tsingle,\n\t\t\t\tplural,\n\t\t\t\tnumber,\n\t\t\t\tcontext,\n\t\t\t\tdomain\n\t\t\t)\n\t\t);\n\t};\n\n\t/** @type {IsRtl} */\n\tconst isRTL = () => {\n\t\treturn 'rtl' === _x( 'ltr', 'text direction' );\n\t};\n\n\t/** @type {HasTranslation} */\n\tconst hasTranslation = ( single, context, domain ) => {\n\t\tconst key = context ? context + '\\u0004' + single : single;\n\t\tlet result = !! tannin.data?.[ domain ?? 'default' ]?.[ key ];\n\t\tif ( hooks ) {\n\t\t\t/**\n\t\t\t * Filters the presence of a translation in the locale data.\n\t\t\t *\n\t\t\t * @param {boolean} hasTranslation Whether the translation is present or not..\n\t\t\t * @param {string} single The singular form of the translated text (used as key in locale data)\n\t\t\t * @param {string} context Context information for the translators.\n\t\t\t * @param {string} domain Text domain. Unique identifier for retrieving translated strings.\n\t\t\t */\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation',\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tresult = /** @type { boolean } */ (\n\t\t\t\t/** @type {*} */ hooks.applyFilters(\n\t\t\t\t\t'i18n.has_translation_' + getFilterDomain( domain ),\n\t\t\t\t\tresult,\n\t\t\t\t\tsingle,\n\t\t\t\t\tcontext,\n\t\t\t\t\tdomain\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t\treturn result;\n\t};\n\n\tif ( initialData ) {\n\t\tsetLocaleData( initialData, initialDomain );\n\t}\n\n\tif ( hooks ) {\n\t\t/**\n\t\t * @param {string} hookName\n\t\t */\n\t\tconst onHookAddedOrRemoved = ( hookName ) => {\n\t\t\tif ( I18N_HOOK_REGEXP.test( hookName ) ) {\n\t\t\t\tnotifyListeners();\n\t\t\t}\n\t\t};\n\n\t\thooks.addAction( 'hookAdded', 'core/i18n', onHookAddedOrRemoved );\n\t\thooks.addAction( 'hookRemoved', 'core/i18n', onHookAddedOrRemoved );\n\t}\n\n\treturn {\n\t\tgetLocaleData,\n\t\tsetLocaleData,\n\t\taddLocaleData,\n\t\tresetLocaleData,\n\t\tsubscribe,\n\t\t__,\n\t\t_x,\n\t\t_n,\n\t\t_nx,\n\t\tisRTL,\n\t\thasTranslation,\n\t};\n};\n"]}
@@ -25,12 +25,8 @@ const logErrorOnce = memoize(console.error); // eslint-disable-line no-console
25
25
  * @return {string} The formatted string.
26
26
  */
27
27
 
28
- export function sprintf(format) {
28
+ export function sprintf(format, ...args) {
29
29
  try {
30
- for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
31
- args[_key - 1] = arguments[_key];
32
- }
33
-
34
30
  return sprintfjs.sprintf(format, ...args);
35
31
  } catch (error) {
36
32
  if (error instanceof Error) {
@@ -1 +1 @@
1
- {"version":3,"sources":["@wordpress/i18n/src/sprintf.js"],"names":["memoize","sprintfjs","logErrorOnce","console","error","sprintf","format","args","Error","toString"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,OAAP,MAAoB,QAApB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,YAAY,GAAGF,OAAO,CAAEG,OAAO,CAACC,KAAV,CAA5B,C,CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,OAAT,CAAkBC,MAAlB,EAAoC;AAC1C,MAAI;AAAA,sCAD+BC,IAC/B;AAD+BA,MAAAA,IAC/B;AAAA;;AACH,WAAON,SAAS,CAACI,OAAV,CAAmBC,MAAnB,EAA2B,GAAGC,IAA9B,CAAP;AACA,GAFD,CAEE,OAAQH,KAAR,EAAgB;AACjB,QAAKA,KAAK,YAAYI,KAAtB,EAA8B;AAC7BN,MAAAA,YAAY,CAAE,wBAAwBE,KAAK,CAACK,QAAN,EAA1B,CAAZ;AACA;;AACD,WAAOH,MAAP;AACA;AACD","sourcesContent":["/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memoize( console.error ); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nexport function sprintf( format, ...args ) {\n\ttry {\n\t\treturn sprintfjs.sprintf( format, ...args );\n\t} catch ( error ) {\n\t\tif ( error instanceof Error ) {\n\t\t\tlogErrorOnce( 'sprintf error: \\n\\n' + error.toString() );\n\t\t}\n\t\treturn format;\n\t}\n}\n"]}
1
+ {"version":3,"sources":["@wordpress/i18n/src/sprintf.js"],"names":["memoize","sprintfjs","logErrorOnce","console","error","sprintf","format","args","Error","toString"],"mappings":"AAAA;AACA;AACA;AACA,OAAOA,OAAP,MAAoB,QAApB;AACA,OAAOC,SAAP,MAAsB,YAAtB;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,MAAMC,YAAY,GAAGF,OAAO,CAAEG,OAAO,CAACC,KAAV,CAA5B,C,CAA+C;;AAE/C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,OAAO,SAASC,OAAT,CAAkBC,MAAlB,EAA0B,GAAGC,IAA7B,EAAoC;AAC1C,MAAI;AACH,WAAON,SAAS,CAACI,OAAV,CAAmBC,MAAnB,EAA2B,GAAGC,IAA9B,CAAP;AACA,GAFD,CAEE,OAAQH,KAAR,EAAgB;AACjB,QAAKA,KAAK,YAAYI,KAAtB,EAA8B;AAC7BN,MAAAA,YAAY,CAAE,wBAAwBE,KAAK,CAACK,QAAN,EAA1B,CAAZ;AACA;;AACD,WAAOH,MAAP;AACA;AACD","sourcesContent":["/**\n * External dependencies\n */\nimport memoize from 'memize';\nimport sprintfjs from 'sprintf-js';\n\n/**\n * Log to console, once per message; or more precisely, per referentially equal\n * argument set. Because Jed throws errors, we log these to the console instead\n * to avoid crashing the application.\n *\n * @param {...*} args Arguments to pass to `console.error`\n */\nconst logErrorOnce = memoize( console.error ); // eslint-disable-line no-console\n\n/**\n * Returns a formatted string. If an error occurs in applying the format, the\n * original format string is returned.\n *\n * @param {string} format The format of the string to generate.\n * @param {...*} args Arguments to apply to the format.\n *\n * @see https://www.npmjs.com/package/sprintf-js\n *\n * @return {string} The formatted string.\n */\nexport function sprintf( format, ...args ) {\n\ttry {\n\t\treturn sprintfjs.sprintf( format, ...args );\n\t} catch ( error ) {\n\t\tif ( error instanceof Error ) {\n\t\t\tlogErrorOnce( 'sprintf error: \\n\\n' + error.toString() );\n\t\t}\n\t\treturn format;\n\t}\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wordpress/i18n",
3
- "version": "4.34.0",
3
+ "version": "4.35.0",
4
4
  "description": "WordPress internationalization (i18n) library.",
5
5
  "author": "The WordPress Contributors",
6
6
  "license": "GPL-2.0-or-later",
@@ -30,7 +30,7 @@
30
30
  },
31
31
  "dependencies": {
32
32
  "@babel/runtime": "^7.16.0",
33
- "@wordpress/hooks": "^3.34.0",
33
+ "@wordpress/hooks": "^3.35.0",
34
34
  "gettext-parser": "^1.3.1",
35
35
  "memize": "^2.1.0",
36
36
  "sprintf-js": "^1.1.1",
@@ -39,5 +39,5 @@
39
39
  "publishConfig": {
40
40
  "access": "public"
41
41
  },
42
- "gitHead": "c7c79cb11b677adcbf06cf5f8cfb6c5ec1699f19"
42
+ "gitHead": "a92f606309b1541b834ff9b0a76ed2a466fc45ed"
43
43
  }