@formatjs/intl-getcanonicallocales 1.2.1 → 1.2.6

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.
@@ -2135,6 +2135,13 @@
2135
2135
  }
2136
2136
  };
2137
2137
 
2138
+ var __spreadArrays$1 = (undefined && undefined.__spreadArrays) || function () {
2139
+ for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
2140
+ for (var r = Array(s), k = 0, i = 0; i < il; i++)
2141
+ for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
2142
+ r[k] = a[j];
2143
+ return r;
2144
+ };
2138
2145
  function canonicalizeAttrs(strs) {
2139
2146
  return Object.keys(strs.reduce(function (all, str) {
2140
2147
  all[str.toLowerCase()] = 1;
@@ -2165,6 +2172,16 @@
2165
2172
  function compareExtension(e1, e2) {
2166
2173
  return e1.type < e2.type ? -1 : e1.type > e2.type ? 1 : 0;
2167
2174
  }
2175
+ function mergeVariants(v1, v2) {
2176
+ var result = __spreadArrays$1(v1);
2177
+ for (var _i = 0, v2_1 = v2; _i < v2_1.length; _i++) {
2178
+ var v = v2_1[_i];
2179
+ if (v1.indexOf(v) < 0) {
2180
+ result.push(v);
2181
+ }
2182
+ }
2183
+ return result;
2184
+ }
2168
2185
  /**
2169
2186
  * CAVEAT: We don't do this section in the spec bc they have no JSON data
2170
2187
  * Use the bcp47 data to replace keys, types, tfields, and tvalues by their canonical forms. See Section 3.6.4 U Extension Data Files) and Section 3.7.1 T Extension Data Files. The aliases are in the alias attribute value, while the canonical is in the name attribute value. For example,
@@ -2174,29 +2191,99 @@
2174
2191
  en-u-ms-imperial ⇒ en-u-ms-uksystem
2175
2192
  * @param lang
2176
2193
  */
2177
- function canonicalizeUnicodeLanguageId(lang) {
2194
+ function canonicalizeUnicodeLanguageId(unicodeLanguageId) {
2178
2195
  /**
2179
- * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data,
2180
- * replace the language subtag with the replacement value.
2181
- * - If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
2182
- * - Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
2196
+ * If the language subtag matches the type attribute of a languageAlias element in Supplemental Data, replace the language subtag with the replacement value.
2197
+ * 1. If there are additional subtags in the replacement value, add them to the result, but only if there is no corresponding subtag already in the tag.
2198
+ * 2. Five special deprecated grandfathered codes (such as i-default) are in type attributes, and are also replaced.
2183
2199
  */
2184
- var sourceLang = lang.lang.toLowerCase();
2185
- var langAlias = languageAlias[sourceLang];
2186
- if (langAlias) {
2187
- var langAliasAst = parseUnicodeLanguageId(langAlias.split('-'));
2188
- lang.lang = langAliasAst.lang;
2189
- lang.script = lang.script || langAliasAst.script;
2190
- lang.region = lang.region || langAliasAst.region;
2200
+ // From https://github.com/unicode-org/icu/blob/master/icu4j/main/classes/core/src/com/ibm/icu/util/ULocale.java#L1246
2201
+ // Try language _ variant
2202
+ var finalLangAst = unicodeLanguageId;
2203
+ if (unicodeLanguageId.variants.length) {
2204
+ var replacedLang_1 = '';
2205
+ for (var _i = 0, _a = unicodeLanguageId.variants; _i < _a.length; _i++) {
2206
+ var variant = _a[_i];
2207
+ if ((replacedLang_1 =
2208
+ languageAlias[emitUnicodeLanguageId({
2209
+ lang: unicodeLanguageId.lang,
2210
+ variants: [variant],
2211
+ })])) {
2212
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang_1.split(SEPARATOR));
2213
+ finalLangAst = {
2214
+ lang: replacedLangAst.lang,
2215
+ script: finalLangAst.script || replacedLangAst.script,
2216
+ region: finalLangAst.region || replacedLangAst.region,
2217
+ variants: mergeVariants(finalLangAst.variants, replacedLangAst.variants),
2218
+ };
2219
+ break;
2220
+ }
2221
+ }
2222
+ }
2223
+ // language _ script _ country
2224
+ // ug-Arab-CN -> ug-CN
2225
+ if (finalLangAst.script && finalLangAst.region) {
2226
+ var replacedLang_2 = languageAlias[emitUnicodeLanguageId({
2227
+ lang: finalLangAst.lang,
2228
+ script: finalLangAst.script,
2229
+ region: finalLangAst.region,
2230
+ variants: [],
2231
+ })];
2232
+ if (replacedLang_2) {
2233
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang_2.split(SEPARATOR));
2234
+ finalLangAst = {
2235
+ lang: replacedLangAst.lang,
2236
+ script: replacedLangAst.script,
2237
+ region: replacedLangAst.region,
2238
+ variants: finalLangAst.variants,
2239
+ };
2240
+ }
2241
+ }
2242
+ // language _ country
2243
+ // eg. az_AZ -> az_Latn_A
2244
+ if (finalLangAst.region) {
2245
+ var replacedLang_3 = languageAlias[emitUnicodeLanguageId({
2246
+ lang: finalLangAst.lang,
2247
+ region: finalLangAst.region,
2248
+ variants: [],
2249
+ })];
2250
+ if (replacedLang_3) {
2251
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang_3.split(SEPARATOR));
2252
+ finalLangAst = {
2253
+ lang: replacedLangAst.lang,
2254
+ script: finalLangAst.script || replacedLangAst.script,
2255
+ region: replacedLangAst.region,
2256
+ variants: finalLangAst.variants,
2257
+ };
2258
+ }
2191
2259
  }
2192
- if (lang.region) {
2193
- var region = lang.region.toUpperCase();
2260
+ // only language
2261
+ // e.g. twi -> ak
2262
+ var replacedLang = languageAlias[emitUnicodeLanguageId({
2263
+ lang: finalLangAst.lang,
2264
+ variants: [],
2265
+ })];
2266
+ if (replacedLang) {
2267
+ var replacedLangAst = parseUnicodeLanguageId(replacedLang.split(SEPARATOR));
2268
+ finalLangAst = {
2269
+ lang: replacedLangAst.lang,
2270
+ script: finalLangAst.script || replacedLangAst.script,
2271
+ region: finalLangAst.region || replacedLangAst.region,
2272
+ variants: finalLangAst.variants,
2273
+ };
2274
+ }
2275
+ if (finalLangAst.region) {
2276
+ var region = finalLangAst.region.toUpperCase();
2194
2277
  var regionAlias = territoryAlias[region];
2195
2278
  var replacedRegion = void 0;
2196
2279
  if (regionAlias) {
2197
2280
  var regions = regionAlias.split(' ');
2198
2281
  replacedRegion = regions[0];
2199
- var likelySubtag = supplemental.likelySubtags[lang.lang];
2282
+ var likelySubtag = supplemental.likelySubtags[emitUnicodeLanguageId({
2283
+ lang: finalLangAst.lang,
2284
+ script: finalLangAst.script,
2285
+ variants: [],
2286
+ })];
2200
2287
  if (likelySubtag) {
2201
2288
  var likelyRegion = parseUnicodeLanguageId(likelySubtag.split(SEPARATOR)).region;
2202
2289
  if (likelyRegion && regions.indexOf(likelyRegion) > -1) {
@@ -2205,32 +2292,35 @@
2205
2292
  }
2206
2293
  }
2207
2294
  if (replacedRegion) {
2208
- lang.region = replacedRegion;
2295
+ finalLangAst.region = replacedRegion;
2209
2296
  }
2297
+ finalLangAst.region = finalLangAst.region.toUpperCase();
2210
2298
  }
2211
- if (lang.script) {
2212
- lang.script =
2213
- lang.script[0].toUpperCase() + lang.script.slice(1).toLowerCase();
2214
- if (scriptAlias[lang.script]) {
2215
- lang.script = scriptAlias[lang.script];
2299
+ if (finalLangAst.script) {
2300
+ finalLangAst.script =
2301
+ finalLangAst.script[0].toUpperCase() +
2302
+ finalLangAst.script.slice(1).toLowerCase();
2303
+ if (scriptAlias[finalLangAst.script]) {
2304
+ finalLangAst.script = scriptAlias[finalLangAst.script];
2216
2305
  }
2217
2306
  }
2218
- if (lang.variants.length) {
2219
- for (var i = 0; i < lang.variants.length; i++) {
2220
- var variant = lang.variants[i].toLowerCase();
2307
+ if (finalLangAst.variants.length) {
2308
+ for (var i = 0; i < finalLangAst.variants.length; i++) {
2309
+ var variant = finalLangAst.variants[i].toLowerCase();
2221
2310
  if (variantAlias[variant]) {
2222
2311
  var alias = variantAlias[variant];
2223
2312
  if (isUnicodeVariantSubtag(alias)) {
2224
- lang.variants[i] = alias;
2313
+ finalLangAst.variants[i] = alias;
2225
2314
  }
2226
2315
  else if (isUnicodeLanguageSubtag(alias)) {
2227
2316
  // Yes this can happen per the spec
2228
- lang.lang = alias;
2317
+ finalLangAst.lang = alias;
2229
2318
  }
2230
2319
  }
2231
2320
  }
2232
- lang.variants.sort();
2321
+ finalLangAst.variants.sort();
2233
2322
  }
2323
+ return finalLangAst;
2234
2324
  }
2235
2325
  /**
2236
2326
  * Canonicalize based on
@@ -2240,7 +2330,7 @@
2240
2330
  * @param locale
2241
2331
  */
2242
2332
  function canonicalizeUnicodeLocaleId(locale) {
2243
- canonicalizeUnicodeLanguageId(locale.lang);
2333
+ locale.lang = canonicalizeUnicodeLanguageId(locale.lang);
2244
2334
  if (locale.extensions) {
2245
2335
  for (var _i = 0, _a = locale.extensions; _i < _a.length; _i++) {
2246
2336
  var extension = _a[_i];
@@ -2253,7 +2343,7 @@
2253
2343
  break;
2254
2344
  case 't':
2255
2345
  if (extension.lang) {
2256
- canonicalizeUnicodeLanguageId(extension.lang);
2346
+ extension.lang = canonicalizeUnicodeLanguageId(extension.lang);
2257
2347
  }
2258
2348
  extension.fields = canonicalizeKVs(extension.fields);
2259
2349
  break;
@@ -2288,7 +2378,21 @@
2288
2378
  return canonicalizeLocaleList(locales);
2289
2379
  }
2290
2380
 
2291
- if (!('getCanonicalLocales' in Intl)) {
2381
+ if (typeof Intl === 'undefined') {
2382
+ if (typeof window !== 'undefined') {
2383
+ Object.defineProperty(window, 'Intl', {
2384
+ value: {},
2385
+ });
2386
+ }
2387
+ else if (typeof global !== 'undefined') {
2388
+ Object.defineProperty(global, 'Intl', {
2389
+ value: {},
2390
+ });
2391
+ }
2392
+ }
2393
+ if (!('getCanonicalLocales' in Intl) ||
2394
+ // Native Intl.getCanonicalLocales is just buggy
2395
+ Intl.getCanonicalLocales('und-x-private')[0] === 'x-private') {
2292
2396
  Object.defineProperty(Intl, 'getCanonicalLocales', {
2293
2397
  value: getCanonicalLocales,
2294
2398
  writable: true,