bcp-47-normalize
Advanced tools
Comparing version 1.0.0 to 1.1.0
[ | ||
"aa-et", | ||
"af-za", | ||
"mni-beng-in", | ||
"mni-mtei-in", | ||
"sat-deva-in", | ||
"sat-olck-in", | ||
"shi-latn-ma", | ||
"shi-tfng-ma", | ||
"vai-latn-lr", | ||
"vai-vaii-lr", | ||
"yue-hans-cn", | ||
"yue-hant-hk", | ||
"az-arab-ir", | ||
"az-cyrl-az", | ||
"az-latn-az", | ||
"bm-nkoo-ml", | ||
"bs-cyrl-ba", | ||
"bs-latn-ba", | ||
"en-dsrt-us", | ||
"ff-adlm-gn", | ||
"ff-latn-sn", | ||
"ha-arab-ng", | ||
"hi-latn-in", | ||
"iu-latn-ca", | ||
"ks-arab-in", | ||
"ks-deva-in", | ||
"mn-mong-cn", | ||
"ms-arab-my", | ||
"pa-arab-pk", | ||
"pa-guru-in", | ||
"sd-arab-pk", | ||
"sd-deva-in", | ||
"sr-cyrl-rs", | ||
"sr-latn-rs", | ||
"su-latn-id", | ||
"uz-arab-af", | ||
"uz-cyrl-uz", | ||
"uz-latn-uz", | ||
"zh-hans-cn", | ||
"zh-hant-tw", | ||
"mni-beng", | ||
"sat-olck", | ||
"shi-tfng", | ||
"vai-vaii", | ||
"yue-hant", | ||
"az-latn", | ||
"bs-latn", | ||
"ff-latn", | ||
"jbo-001", | ||
"ks-arab", | ||
"pa-guru", | ||
"prg-001", | ||
"sd-arab", | ||
"sr-cyrl", | ||
"su-latn", | ||
"uz-latn", | ||
"zh-hans", | ||
"agq-cm", | ||
"ak-gh", | ||
"am-et", | ||
"an-es", | ||
"ar-001", | ||
"arn-cl", | ||
"as-in", | ||
"asa-tz", | ||
"ast-es", | ||
"az-arab-ir", | ||
"az-cyrl-az", | ||
"az-latn", | ||
"az-latn-az", | ||
"ba-ru", | ||
"bas-cm", | ||
"be-by", | ||
"bem-zm", | ||
"bez-tz", | ||
"bg-bg", | ||
"bgn-pk", | ||
"blt-vn", | ||
"bm-ml", | ||
"bm-nkoo-ml", | ||
"bn-bd", | ||
"bo-cn", | ||
"br-fr", | ||
"brx-in", | ||
"bs-cyrl-ba", | ||
"bs-latn", | ||
"bs-latn-ba", | ||
"bss-cm", | ||
"byn-er", | ||
"ca-es", | ||
"cad-us", | ||
"cch-ng", | ||
"ccp-bd", | ||
"ce-ru", | ||
"ceb-ph", | ||
@@ -46,2 +78,113 @@ "cgg-ug", | ||
"ckb-iq", | ||
"dav-ke", | ||
"dje-ne", | ||
"doi-in", | ||
"dsb-de", | ||
"dua-cm", | ||
"dyo-sn", | ||
"ebu-ke", | ||
"eo-001", | ||
"ewo-cm", | ||
"fil-ph", | ||
"fur-it", | ||
"gaa-gh", | ||
"gez-et", | ||
"gsw-ch", | ||
"guz-ke", | ||
"haw-us", | ||
"hsb-de", | ||
"ia-001", | ||
"ife-tg", | ||
"io-001", | ||
"jgo-cm", | ||
"jmc-tz", | ||
"kab-dz", | ||
"kaj-ng", | ||
"kam-ke", | ||
"kcg-ng", | ||
"kde-tz", | ||
"kea-cv", | ||
"ken-cm", | ||
"khq-ml", | ||
"kkj-cm", | ||
"kln-ke", | ||
"kok-in", | ||
"kpe-lr", | ||
"ksb-tz", | ||
"ksf-cm", | ||
"ksh-de", | ||
"lag-tz", | ||
"lkt-us", | ||
"lrc-ir", | ||
"luo-ke", | ||
"luy-ke", | ||
"mai-in", | ||
"mas-ke", | ||
"mer-ke", | ||
"mfe-mu", | ||
"mgh-mz", | ||
"mgo-cm", | ||
"moh-ca", | ||
"mua-cm", | ||
"mus-us", | ||
"myv-ru", | ||
"mzn-ir", | ||
"naq-na", | ||
"nds-de", | ||
"nmg-cm", | ||
"nnh-cm", | ||
"nqo-gn", | ||
"nso-za", | ||
"nus-ss", | ||
"nyn-ug", | ||
"osa-us", | ||
"pcm-ng", | ||
"quc-gt", | ||
"rof-tz", | ||
"rwk-tz", | ||
"sah-ru", | ||
"saq-ke", | ||
"sbp-tz", | ||
"scn-it", | ||
"sdh-ir", | ||
"seh-mz", | ||
"ses-ml", | ||
"sid-et", | ||
"sma-se", | ||
"smj-se", | ||
"smn-fi", | ||
"sms-fi", | ||
"ssy-er", | ||
"syr-iq", | ||
"szl-pl", | ||
"teo-ug", | ||
"tig-er", | ||
"trv-tw", | ||
"trw-pk", | ||
"twq-ne", | ||
"tzm-ma", | ||
"vo-001", | ||
"vun-tz", | ||
"wae-ch", | ||
"wal-et", | ||
"wbp-au", | ||
"xog-ug", | ||
"yav-cm", | ||
"yi-001", | ||
"zgh-ma", | ||
"aa-et", | ||
"af-za", | ||
"ak-gh", | ||
"am-et", | ||
"an-es", | ||
"as-in", | ||
"ba-ru", | ||
"be-by", | ||
"bg-bg", | ||
"bm-ml", | ||
"bn-bd", | ||
"bo-cn", | ||
"br-fr", | ||
"ca-es", | ||
"ce-ru", | ||
"co-fr", | ||
@@ -53,112 +196,54 @@ "cs-cz", | ||
"da-dk", | ||
"dav-ke", | ||
"de-de", | ||
"dje-ne", | ||
"dsb-de", | ||
"dua-cm", | ||
"dv-mv", | ||
"dyo-sn", | ||
"dz-bt", | ||
"ebu-ke", | ||
"ee-gh", | ||
"el-gr", | ||
"en-dsrt-us", | ||
"en-us", | ||
"eo-001", | ||
"es-es", | ||
"et-ee", | ||
"eu-es", | ||
"ewo-cm", | ||
"fa-ir", | ||
"ff-adlm-gn", | ||
"ff-latn", | ||
"ff-latn-sn", | ||
"fi-fi", | ||
"fil-ph", | ||
"fo-fo", | ||
"fr-fr", | ||
"fur-it", | ||
"fy-nl", | ||
"ga-ie", | ||
"gaa-gh", | ||
"gd-gb", | ||
"gez-et", | ||
"gl-es", | ||
"gn-py", | ||
"gsw-ch", | ||
"gu-in", | ||
"guz-ke", | ||
"gv-im", | ||
"ha-arab-ng", | ||
"ha-ng", | ||
"haw-us", | ||
"he-il", | ||
"hi-in", | ||
"hi-latn-in", | ||
"hr-hr", | ||
"hsb-de", | ||
"hu-hu", | ||
"hy-am", | ||
"ia-001", | ||
"id-id", | ||
"ife-tg", | ||
"ig-ng", | ||
"ii-cn", | ||
"io-001", | ||
"is-is", | ||
"it-it", | ||
"iu-ca", | ||
"iu-latn-ca", | ||
"ja-jp", | ||
"jbo-001", | ||
"jgo-cm", | ||
"jmc-tz", | ||
"jv-id", | ||
"ka-ge", | ||
"kab-dz", | ||
"kaj-ng", | ||
"kam-ke", | ||
"kcg-ng", | ||
"kde-tz", | ||
"kea-cv", | ||
"ken-cm", | ||
"khq-ml", | ||
"ki-ke", | ||
"kk-kz", | ||
"kkj-cm", | ||
"kl-gl", | ||
"kln-ke", | ||
"km-kh", | ||
"kn-in", | ||
"ko-kr", | ||
"kok-in", | ||
"kpe-lr", | ||
"ks-arab", | ||
"ks-arab-in", | ||
"ks-deva-in", | ||
"ksb-tz", | ||
"ksf-cm", | ||
"ksh-de", | ||
"ku-tr", | ||
"kw-gb", | ||
"ky-kg", | ||
"lag-tz", | ||
"lb-lu", | ||
"lg-ug", | ||
"lkt-us", | ||
"ln-cd", | ||
"lo-la", | ||
"lrc-ir", | ||
"lt-lt", | ||
"lu-cd", | ||
"luo-ke", | ||
"luy-ke", | ||
"lv-lv", | ||
"mai-in", | ||
"mas-ke", | ||
"mer-ke", | ||
"mfe-mu", | ||
"mg-mg", | ||
"mgh-mz", | ||
"mgo-cm", | ||
"mi-nz", | ||
@@ -168,31 +253,14 @@ "mk-mk", | ||
"mn-mn", | ||
"mn-mong-cn", | ||
"mni-beng", | ||
"mni-beng-in", | ||
"mni-mtei-in", | ||
"moh-ca", | ||
"mr-in", | ||
"ms-arab-my", | ||
"ms-my", | ||
"mt-mt", | ||
"mua-cm", | ||
"mus-us", | ||
"my-mm", | ||
"myv-ru", | ||
"mzn-ir", | ||
"naq-na", | ||
"nb-no", | ||
"nd-zw", | ||
"nds-de", | ||
"ne-np", | ||
"nl-nl", | ||
"nmg-cm", | ||
"nn-no", | ||
"nnh-cm", | ||
"nqo-gn", | ||
"nr-za", | ||
"nso-za", | ||
"nus-ss", | ||
"nv-us", | ||
"ny-mw", | ||
"nyn-ug", | ||
"oc-fr", | ||
@@ -202,70 +270,30 @@ "om-et", | ||
"os-ge", | ||
"osa-us", | ||
"pa-arab-pk", | ||
"pa-guru", | ||
"pa-guru-in", | ||
"pcm-ng", | ||
"pl-pl", | ||
"prg-001", | ||
"ps-af", | ||
"pt-br", | ||
"qu-pe", | ||
"quc-gt", | ||
"rm-ch", | ||
"rn-bi", | ||
"ro-ro", | ||
"rof-tz", | ||
"ru-ru", | ||
"rw-rw", | ||
"rwk-tz", | ||
"sa-in", | ||
"sah-ru", | ||
"saq-ke", | ||
"sat-deva-in", | ||
"sat-olck", | ||
"sat-olck-in", | ||
"sbp-tz", | ||
"sc-it", | ||
"scn-it", | ||
"sd-arab", | ||
"sd-arab-pk", | ||
"sd-deva-in", | ||
"sdh-ir", | ||
"se-no", | ||
"seh-mz", | ||
"ses-ml", | ||
"sg-cf", | ||
"shi-latn-ma", | ||
"shi-tfng", | ||
"shi-tfng-ma", | ||
"si-lk", | ||
"sid-et", | ||
"sk-sk", | ||
"sl-si", | ||
"sma-se", | ||
"smj-se", | ||
"smn-fi", | ||
"sms-fi", | ||
"sn-zw", | ||
"so-so", | ||
"sq-al", | ||
"sr-cyrl", | ||
"sr-cyrl-rs", | ||
"sr-latn-rs", | ||
"ss-za", | ||
"ssy-er", | ||
"st-za", | ||
"su-latn", | ||
"su-latn-id", | ||
"sv-se", | ||
"sw-tz", | ||
"syr-iq", | ||
"szl-pl", | ||
"ta-in", | ||
"te-in", | ||
"teo-ug", | ||
"tg-tj", | ||
"th-th", | ||
"ti-et", | ||
"tig-er", | ||
"tk-tm", | ||
@@ -275,39 +303,14 @@ "tn-za", | ||
"tr-tr", | ||
"trv-tw", | ||
"ts-za", | ||
"tt-ru", | ||
"twq-ne", | ||
"tzm-ma", | ||
"ug-cn", | ||
"uk-ua", | ||
"ur-pk", | ||
"uz-arab-af", | ||
"uz-cyrl-uz", | ||
"uz-latn", | ||
"uz-latn-uz", | ||
"vai-latn-lr", | ||
"vai-vaii", | ||
"vai-vaii-lr", | ||
"ve-za", | ||
"vi-vn", | ||
"vo-001", | ||
"vun-tz", | ||
"wa-be", | ||
"wae-ch", | ||
"wal-et", | ||
"wbp-au", | ||
"wo-sn", | ||
"xh-za", | ||
"xog-ug", | ||
"yav-cm", | ||
"yi-001", | ||
"yo-ng", | ||
"yue-hans-cn", | ||
"yue-hant", | ||
"yue-hant-hk", | ||
"zgh-ma", | ||
"zh-hans", | ||
"zh-hans-cn", | ||
"zh-hant-tw", | ||
"zu-za" | ||
] |
@@ -13,2 +13,3 @@ 'use strict' | ||
var own = {}.hasOwnProperty | ||
var assign = Object.assign | ||
@@ -20,9 +21,21 @@ var parse = bcp47.parse | ||
var emptyExtraFields = { | ||
variants: [], | ||
extensions: [], | ||
privateuse: [], | ||
irregular: null, | ||
regular: null | ||
} | ||
function normalize(value, options) { | ||
var opts = options || {} | ||
var forgiving = opts.forgiving | ||
var warning = opts.warning | ||
var settings = options || {} | ||
var forgiving = settings.forgiving | ||
var warning = settings.warning | ||
// 1. normalize and lowercase the tag (`sgn-be-fr` -> `sfb`). | ||
var schema = parse(String(value || '').toLowerCase(), {forgiving, warning}) | ||
var schema = parse(String(value || '').toLowerCase(), { | ||
forgiving: forgiving, | ||
warning: warning | ||
}) | ||
var tag = stringify(schema) | ||
var coreTag | ||
// 2. Do fancy, expensive replaces (`ha-latn-gh` -> `ha-gh`). | ||
@@ -58,3 +71,3 @@ var length = matches.length | ||
// 4. Remove defaults (`nl-nl` -> `nl`). | ||
tag = stringify(schema) | ||
coreTag = stringify(assign({}, schema, emptyExtraFields)) | ||
length = defaults.length | ||
@@ -66,17 +79,14 @@ index = -1 | ||
if ( | ||
d === tag || | ||
(tag.charAt(d.length) === '-' && tag.slice(0, d.length) === d) | ||
) { | ||
tag = d.slice(0, d.lastIndexOf('-')) + tag.slice(d.length) | ||
if (coreTag === d) { | ||
replace(schema, d, d.split('-').slice(0, -1).join('-')) | ||
coreTag = stringify(assign({}, schema, emptyExtraFields)) | ||
} | ||
} | ||
// 5. Add proper casing back. | ||
schema = parse(tag) | ||
tag = stringify(schema) | ||
// 6. Sort extensions on singleton. | ||
// 5. Sort extensions on singleton. | ||
schema.extensions.sort(compareSingleton) | ||
// 7. Warn if fields (currently only regions) should be updated but have | ||
// 6. Warn if fields (currently only regions) should be updated but have | ||
// multiple choices. | ||
@@ -101,2 +111,3 @@ if (warning) { | ||
// 7. Add proper casing back. | ||
// Format script (ISO 15924) as titlecase (example: `Latn`): | ||
@@ -143,3 +154,3 @@ if (schema.script !== null) { | ||
function remove(obj, key, value) { | ||
function remove(object, key, value) { | ||
var removed = false | ||
@@ -150,3 +161,3 @@ var current | ||
var index | ||
var val | ||
var item | ||
@@ -157,3 +168,3 @@ /* istanbul ignore else - this is currently done by wrapping code, so else is | ||
if (value) { | ||
current = obj[key] | ||
current = object[key] | ||
result = current | ||
@@ -165,7 +176,8 @@ | ||
index = -1 | ||
while (++index < length) { | ||
val = current[index] | ||
item = current[index] | ||
if (value.indexOf(val) === -1) { | ||
result.push(val) | ||
if (value.indexOf(item) === -1) { | ||
result.push(item) | ||
} else { | ||
@@ -180,3 +192,3 @@ removed = true | ||
obj[key] = result | ||
object[key] = result | ||
} | ||
@@ -187,8 +199,8 @@ | ||
function add(obj, key, value) { | ||
var current = obj[key] | ||
function add(object, key, value) { | ||
var current = object[key] | ||
var list | ||
var length | ||
var index | ||
var val | ||
var item | ||
@@ -201,12 +213,12 @@ if (array(current)) { | ||
while (++index < length) { | ||
val = list[index] | ||
item = list[index] | ||
/* istanbul ignore else - this currently can’t happen, but guard for the | ||
* future. */ | ||
if (current.indexOf(val) === -1) { | ||
current.push(val) | ||
if (current.indexOf(item) === -1) { | ||
current.push(item) | ||
} | ||
} | ||
} else { | ||
obj[key] = value | ||
object[key] = value | ||
} | ||
@@ -213,0 +225,0 @@ } |
@@ -343,2 +343,74 @@ [ | ||
{ | ||
"from": "sgn-br", | ||
"to": "bzs" | ||
}, | ||
{ | ||
"from": "sgn-co", | ||
"to": "csn" | ||
}, | ||
{ | ||
"from": "sgn-de", | ||
"to": "gsg" | ||
}, | ||
{ | ||
"from": "sgn-dk", | ||
"to": "dsl" | ||
}, | ||
{ | ||
"from": "sgn-fr", | ||
"to": "fsl" | ||
}, | ||
{ | ||
"from": "sgn-gb", | ||
"to": "bfi" | ||
}, | ||
{ | ||
"from": "sgn-gr", | ||
"to": "gss" | ||
}, | ||
{ | ||
"from": "sgn-ie", | ||
"to": "isg" | ||
}, | ||
{ | ||
"from": "sgn-it", | ||
"to": "ise" | ||
}, | ||
{ | ||
"from": "sgn-jp", | ||
"to": "jsl" | ||
}, | ||
{ | ||
"from": "sgn-mx", | ||
"to": "mfs" | ||
}, | ||
{ | ||
"from": "sgn-ni", | ||
"to": "ncs" | ||
}, | ||
{ | ||
"from": "sgn-nl", | ||
"to": "dse" | ||
}, | ||
{ | ||
"from": "sgn-no", | ||
"to": "nsi" | ||
}, | ||
{ | ||
"from": "sgn-pt", | ||
"to": "psr" | ||
}, | ||
{ | ||
"from": "sgn-se", | ||
"to": "swl" | ||
}, | ||
{ | ||
"from": "sgn-us", | ||
"to": "ase" | ||
}, | ||
{ | ||
"from": "sgn-za", | ||
"to": "sfs" | ||
}, | ||
{ | ||
"from": "no-bokmal", | ||
@@ -345,0 +417,0 @@ "to": "nb" |
{ | ||
"name": "bcp-47-normalize", | ||
"version": "1.0.0", | ||
"version": "1.1.0", | ||
"description": "Normalize, canonicalize, and format BCP 47 tags", | ||
@@ -42,12 +42,12 @@ "license": "MIT", | ||
"nyc": "^15.0.0", | ||
"prettier": "^1.0.0", | ||
"remark-cli": "^7.0.0", | ||
"remark-preset-wooorm": "^6.0.0", | ||
"tape": "^4.0.0", | ||
"prettier": "^2.0.0", | ||
"remark-cli": "^8.0.0", | ||
"remark-preset-wooorm": "^7.0.0", | ||
"tape": "^5.0.0", | ||
"unist-util-visit": "^2.0.0", | ||
"xast-util-from-xml": "^1.0.0", | ||
"xo": "^0.26.0" | ||
"xo": "^0.32.0" | ||
}, | ||
"scripts": { | ||
"format": "remark . -qfo && prettier --write \"**/*.js\" && xo --fix", | ||
"format": "remark . -qfo && prettier --write . && xo --fix", | ||
"test-api": "node test", | ||
@@ -69,3 +69,5 @@ "test-coverage": "nyc --reporter lcov tape test.js", | ||
"rules": { | ||
"unicorn/prefer-includes": "off" | ||
"unicorn/prefer-includes": "off", | ||
"unicorn/prefer-number-properties": "off", | ||
"unicorn/prefer-set-has": "off" | ||
} | ||
@@ -72,0 +74,0 @@ }, |
@@ -89,2 +89,4 @@ # bcp-47-normalize | ||
— Match BCP 47 language tags with language ranges per RFC 4647 | ||
* [`iso-3166`](https://github.com/wooorm/iso-3166) | ||
— ISO 3166 codes | ||
* [`iso-639-2`](https://github.com/wooorm/iso-639-2) | ||
@@ -91,0 +93,0 @@ — ISO 639-2 codes |
80075
5551
135