From 204162a9ac0ac114b5ba9bed0b4f1bd9931d458b Mon Sep 17 00:00:00 2001 From: Caridy Date: Fri, 13 May 2016 14:10:44 -0400 Subject: [PATCH] dist/ for 1.2 --- dist/Intl.js | 3 ++- dist/Intl.js.map | 2 +- dist/Intl.min.js.map | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/dist/Intl.js b/dist/Intl.js index 615d21cb1..5a1b2c4a6 100644 --- a/dist/Intl.js +++ b/dist/Intl.js @@ -2126,7 +2126,8 @@ var m = n === 0 ? "0" : n.toFixed(0); // divering... { - // this diversion is needed to take into consideration big numbers + // this diversion is needed to take into consideration big numbers, e.g.: + // 1.2344501e+37 -> 12344501000000000000000000000000000000 var idx = void 0; var exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0; if (exp) { diff --git a/dist/Intl.js.map b/dist/Intl.js.map index 93ef164b5..9ef32cfef 100644 --- a/dist/Intl.js.map +++ b/dist/Intl.js.map @@ -1 +1 @@ -{"version":3,"file":"Intl.js","sources":["../src/util.js","../src/exp.js","../src/6.locales-currencies-tz.js","../src/9.negotiation.js","../src/8.intl.js","../src/11.numberformat.js","../src/cldr.js","../src/12.datetimeformat.js","../src/13.locale-sensitive-functions.js","../src/core.js","../src/main.js"],"sourcesContent":["const realDefineProp = (function () {\n let sentinel = {};\n try {\n Object.defineProperty(sentinel, 'a', {});\n return 'a' in sentinel;\n } catch (e) {\n return false;\n }\n })();\n\n// Need a workaround for getters in ES3\nexport const es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\n// We use this a lot (and need it for proto-less objects)\nexport const hop = Object.prototype.hasOwnProperty;\n\n// Naive defineProperty for compatibility\nexport const defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {\n if ('get' in desc && obj.__defineGetter__)\n obj.__defineGetter__(name, desc.get);\n\n else if (!hop.call(obj, name) || 'value' in desc)\n obj[name] = desc.value;\n};\n\n// Array.prototype.indexOf, as good as we need it to be\nexport const arrIndexOf = Array.prototype.indexOf || function (search) {\n /*jshint validthis:true */\n let t = this;\n if (!t.length)\n return -1;\n\n for (let i = arguments[1] || 0, max = t.length; i < max; i++) {\n if (t[i] === search)\n return i;\n }\n\n return -1;\n};\n\n// Create an object with the specified prototype (2nd arg required for Record)\nexport const objCreate = Object.create || function (proto, props) {\n let obj;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (let k in props) {\n if (hop.call(props, k))\n defineProperty(obj, k, props[k]);\n }\n\n return obj;\n};\n\n// Snapshot some (hopefully still) native built-ins\nexport const arrSlice = Array.prototype.slice;\nexport const arrConcat = Array.prototype.concat;\nexport const arrPush = Array.prototype.push;\nexport const arrJoin = Array.prototype.join;\nexport const arrShift = Array.prototype.shift;\n\n// Naive Function.prototype.bind for compatibility\nexport const fnBind = Function.prototype.bind || function (thisObj) {\n let fn = this,\n args = arrSlice.call(arguments, 1);\n\n // All our (presently) bound functions have either 1 or 0 arguments. By returning\n // different function signatures, we can pass some tests in ES3 environments\n if (fn.length === 1) {\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n }\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n};\n\n// Object housing internal properties for constructors\nexport const internals = objCreate(null);\n\n// Keep internal properties internal\nexport const secret = Math.random();\n\n// Helper functions\n// ================\n\n/**\n * A function to deal with the inaccuracy of calculating log10 in pre-ES6\n * JavaScript environments. Math.log(num) / Math.LN10 was responsible for\n * causing issue #62.\n */\nexport function log10Floor (n) {\n // ES6 provides the more accurate Math.log10\n if (typeof Math.log10 === 'function')\n return Math.floor(Math.log10(n));\n\n let x = Math.round(Math.log(n) * Math.LOG10E);\n return x - (Number('1e' + x) > n);\n}\n\n/**\n * A map that doesn't contain Object in its prototype chain\n */\nexport function Record (obj) {\n // Copy only own properties over unless this object is already a Record instance\n for (let k in obj) {\n if (obj instanceof Record || hop.call(obj, k))\n defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });\n }\n}\nRecord.prototype = objCreate(null);\n\n/**\n * An ordered list\n */\nexport function List() {\n defineProperty(this, 'length', { writable:true, value: 0 });\n\n if (arguments.length)\n arrPush.apply(this, arrSlice.call(arguments));\n}\nList.prototype = objCreate(null);\n\n/**\n * Constructs a regular expression to restore tainted RegExp properties\n */\nexport function createRegExpRestore () {\n let esc = /[.?*+^$[\\]\\\\(){}|-]/g,\n lm = RegExp.lastMatch || '',\n ml = RegExp.multiline ? 'm' : '',\n ret = { input: RegExp.input },\n reg = new List(),\n has = false,\n cap = {};\n\n // Create a snapshot of all the 'captured' properties\n for (let i = 1; i <= 9; i++)\n has = (cap['$'+i] = RegExp['$'+i]) || has;\n\n // Now we've snapshotted some properties, escape the lastMatch string\n lm = lm.replace(esc, '\\\\$&');\n\n // If any of the captured strings were non-empty, iterate over them all\n if (has) {\n for (let i = 1; i <= 9; i++) {\n let m = cap['$'+i];\n\n // If it's empty, add an empty capturing group\n if (!m)\n lm = '()' + lm;\n\n // Else find the string in lm and escape & wrap it to capture it\n else {\n m = m.replace(esc, '\\\\$&');\n lm = lm.replace(m, '(' + m + ')');\n }\n\n // Push it to the reg and chop lm to make sure further groups come after\n arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));\n lm = lm.slice(lm.indexOf('(') + 1);\n }\n }\n\n // Create the regular expression that will reconstruct the RegExp properties\n ret.exp = new RegExp(arrJoin.call(reg, '') + lm, ml);\n\n return ret;\n}\n\n/**\n * Mimics ES5's abstract ToObject() function\n */\nexport function toObject (arg) {\n if (arg === null)\n throw new TypeError('Cannot convert null or undefined to object');\n\n return Object(arg);\n}\n\n/**\n * Returns \"internal\" properties for an object\n */\nexport function getInternalProperties (obj) {\n if (hop.call(obj, '__getInternalProperties'))\n return obj.__getInternalProperties(secret);\n\n return objCreate(null);\n}\n","/**\n* Defines regular expressions for various operations related to the BCP 47 syntax,\n* as defined at http://tools.ietf.org/html/bcp47#section-2.1\n*/\n\n// extlang = 3ALPHA ; selected ISO 639 codes\n// *2(\"-\" 3ALPHA) ; permanently reserved\nconst extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';\n\n// language = 2*3ALPHA ; shortest ISO 639 code\n// [\"-\" extlang] ; sometimes followed by\n// ; extended language subtags\n// / 4ALPHA ; or reserved for future use\n// / 5*8ALPHA ; or registered language subtag\nconst language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';\n\n// script = 4ALPHA ; ISO 15924 code\nconst script = '[a-z]{4}';\n\n// region = 2ALPHA ; ISO 3166-1 code\n// / 3DIGIT ; UN M.49 code\nconst region = '(?:[a-z]{2}|\\\\d{3})';\n\n// variant = 5*8alphanum ; registered variants\n// / (DIGIT 3alphanum)\nconst variant = '(?:[a-z0-9]{5,8}|\\\\d[a-z0-9]{3})';\n\n// ; Single alphanumerics\n// ; \"x\" reserved for private use\n// singleton = DIGIT ; 0 - 9\n// / %x41-57 ; A - W\n// / %x59-5A ; Y - Z\n// / %x61-77 ; a - w\n// / %x79-7A ; y - z\nconst singleton = '[0-9a-wy-z]';\n\n// extension = singleton 1*(\"-\" (2*8alphanum))\nconst extension = singleton + '(?:-[a-z0-9]{2,8})+';\n\n// privateuse = \"x\" 1*(\"-\" (1*8alphanum))\nconst privateuse = 'x(?:-[a-z0-9]{1,8})+';\n\n// irregular = \"en-GB-oed\" ; irregular tags do not match\n// / \"i-ami\" ; the 'langtag' production and\n// / \"i-bnn\" ; would not otherwise be\n// / \"i-default\" ; considered 'well-formed'\n// / \"i-enochian\" ; These tags are all valid,\n// / \"i-hak\" ; but most are deprecated\n// / \"i-klingon\" ; in favor of more modern\n// / \"i-lux\" ; subtags or subtag\n// / \"i-mingo\" ; combination\n// / \"i-navajo\"\n// / \"i-pwn\"\n// / \"i-tao\"\n// / \"i-tay\"\n// / \"i-tsu\"\n// / \"sgn-BE-FR\"\n// / \"sgn-BE-NL\"\n// / \"sgn-CH-DE\"\nconst irregular = '(?:en-GB-oed'\n + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)'\n + '|sgn-(?:BE-FR|BE-NL|CH-DE))';\n\n// regular = \"art-lojban\" ; these tags match the 'langtag'\n// / \"cel-gaulish\" ; production, but their subtags\n// / \"no-bok\" ; are not extended language\n// / \"no-nyn\" ; or variant subtags: their meaning\n// / \"zh-guoyu\" ; is defined by their registration\n// / \"zh-hakka\" ; and all of these are deprecated\n// / \"zh-min\" ; in favor of a more modern\n// / \"zh-min-nan\" ; subtag or sequence of subtags\n// / \"zh-xiang\"\nconst regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn'\n + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';\n\n// grandfathered = irregular ; non-redundant tags registered\n// / regular ; during the RFC 3066 era\nconst grandfathered = '(?:' + irregular + '|' + regular + ')';\n\n// langtag = language\n// [\"-\" script]\n// [\"-\" region]\n// *(\"-\" variant)\n// *(\"-\" extension)\n// [\"-\" privateuse]\nconst langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-'\n + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';\n\n// Language-Tag = langtag ; normal language tags\n// / privateuse ; private use tag\n// / grandfathered ; grandfathered tags\nexport let expBCP47Syntax = RegExp('^(?:'+langtag+'|'+privateuse+'|'+grandfathered+')$', 'i');\n\n// Match duplicate variants in a language tag\nexport let expVariantDupes = RegExp('^(?!x).*?-('+variant+')-(?:\\\\w{4,8}-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match duplicate singletons in a language tag (except in private use)\nexport let expSingletonDupes = RegExp('^(?!x).*?-('+singleton+')-(?:\\\\w+-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match all extension sequences\nexport let expExtSequences = RegExp('-'+extension, 'ig');\n","// Sect 6.2 Language Tags\n// ======================\n\nimport {\n expBCP47Syntax,\n expExtSequences,\n expVariantDupes,\n expSingletonDupes,\n} from './exp';\n\nimport {\n hop,\n arrJoin,\n arrSlice,\n} from \"./util.js\";\n\n// Default locale is the first-added locale data for us\nexport let defaultLocale;\nexport function setDefaultLocale(locale) {\n defaultLocale = locale;\n}\n\n// IANA Subtag Registry redundant tag and subtag maps\nconst redundantTags = {\n tags: {\n \"art-lojban\": \"jbo\",\n \"i-ami\": \"ami\",\n \"i-bnn\": \"bnn\",\n \"i-hak\": \"hak\",\n \"i-klingon\": \"tlh\",\n \"i-lux\": \"lb\",\n \"i-navajo\": \"nv\",\n \"i-pwn\": \"pwn\",\n \"i-tao\": \"tao\",\n \"i-tay\": \"tay\",\n \"i-tsu\": \"tsu\",\n \"no-bok\": \"nb\",\n \"no-nyn\": \"nn\",\n \"sgn-BE-FR\": \"sfb\",\n \"sgn-BE-NL\": \"vgt\",\n \"sgn-CH-DE\": \"sgg\",\n \"zh-guoyu\": \"cmn\",\n \"zh-hakka\": \"hak\",\n \"zh-min-nan\": \"nan\",\n \"zh-xiang\": \"hsn\",\n \"sgn-BR\": \"bzs\",\n \"sgn-CO\": \"csn\",\n \"sgn-DE\": \"gsg\",\n \"sgn-DK\": \"dsl\",\n \"sgn-ES\": \"ssp\",\n \"sgn-FR\": \"fsl\",\n \"sgn-GB\": \"bfi\",\n \"sgn-GR\": \"gss\",\n \"sgn-IE\": \"isg\",\n \"sgn-IT\": \"ise\",\n \"sgn-JP\": \"jsl\",\n \"sgn-MX\": \"mfs\",\n \"sgn-NI\": \"ncs\",\n \"sgn-NL\": \"dse\",\n \"sgn-NO\": \"nsl\",\n \"sgn-PT\": \"psr\",\n \"sgn-SE\": \"swl\",\n \"sgn-US\": \"ase\",\n \"sgn-ZA\": \"sfs\",\n \"zh-cmn\": \"cmn\",\n \"zh-cmn-Hans\": \"cmn-Hans\",\n \"zh-cmn-Hant\": \"cmn-Hant\",\n \"zh-gan\": \"gan\",\n \"zh-wuu\": \"wuu\",\n \"zh-yue\": \"yue\",\n },\n subtags: {\n BU: \"MM\",\n DD: \"DE\",\n FX: \"FR\",\n TP: \"TL\",\n YD: \"YE\",\n ZR: \"CD\",\n heploc: \"alalc97\",\n 'in': \"id\",\n iw: \"he\",\n ji: \"yi\",\n jw: \"jv\",\n mo: \"ro\",\n ayx: \"nun\",\n bjd: \"drl\",\n ccq: \"rki\",\n cjr: \"mom\",\n cka: \"cmr\",\n cmk: \"xch\",\n drh: \"khk\",\n drw: \"prs\",\n gav: \"dev\",\n hrr: \"jal\",\n ibi: \"opa\",\n kgh: \"kml\",\n lcq: \"ppr\",\n mst: \"mry\",\n myt: \"mry\",\n sca: \"hle\",\n tie: \"ras\",\n tkk: \"twm\",\n tlw: \"weo\",\n tnf: \"prs\",\n ybd: \"rki\",\n yma: \"lrr\",\n },\n extLang: {\n aao: [\"aao\", \"ar\"],\n abh: [\"abh\", \"ar\"],\n abv: [\"abv\", \"ar\"],\n acm: [\"acm\", \"ar\"],\n acq: [\"acq\", \"ar\"],\n acw: [\"acw\", \"ar\"],\n acx: [\"acx\", \"ar\"],\n acy: [\"acy\", \"ar\"],\n adf: [\"adf\", \"ar\"],\n ads: [\"ads\", \"sgn\"],\n aeb: [\"aeb\", \"ar\"],\n aec: [\"aec\", \"ar\"],\n aed: [\"aed\", \"sgn\"],\n aen: [\"aen\", \"sgn\"],\n afb: [\"afb\", \"ar\"],\n afg: [\"afg\", \"sgn\"],\n ajp: [\"ajp\", \"ar\"],\n apc: [\"apc\", \"ar\"],\n apd: [\"apd\", \"ar\"],\n arb: [\"arb\", \"ar\"],\n arq: [\"arq\", \"ar\"],\n ars: [\"ars\", \"ar\"],\n ary: [\"ary\", \"ar\"],\n arz: [\"arz\", \"ar\"],\n ase: [\"ase\", \"sgn\"],\n asf: [\"asf\", \"sgn\"],\n asp: [\"asp\", \"sgn\"],\n asq: [\"asq\", \"sgn\"],\n asw: [\"asw\", \"sgn\"],\n auz: [\"auz\", \"ar\"],\n avl: [\"avl\", \"ar\"],\n ayh: [\"ayh\", \"ar\"],\n ayl: [\"ayl\", \"ar\"],\n ayn: [\"ayn\", \"ar\"],\n ayp: [\"ayp\", \"ar\"],\n bbz: [\"bbz\", \"ar\"],\n bfi: [\"bfi\", \"sgn\"],\n bfk: [\"bfk\", \"sgn\"],\n bjn: [\"bjn\", \"ms\"],\n bog: [\"bog\", \"sgn\"],\n bqn: [\"bqn\", \"sgn\"],\n bqy: [\"bqy\", \"sgn\"],\n btj: [\"btj\", \"ms\"],\n bve: [\"bve\", \"ms\"],\n bvl: [\"bvl\", \"sgn\"],\n bvu: [\"bvu\", \"ms\"],\n bzs: [\"bzs\", \"sgn\"],\n cdo: [\"cdo\", \"zh\"],\n cds: [\"cds\", \"sgn\"],\n cjy: [\"cjy\", \"zh\"],\n cmn: [\"cmn\", \"zh\"],\n coa: [\"coa\", \"ms\"],\n cpx: [\"cpx\", \"zh\"],\n csc: [\"csc\", \"sgn\"],\n csd: [\"csd\", \"sgn\"],\n cse: [\"cse\", \"sgn\"],\n csf: [\"csf\", \"sgn\"],\n csg: [\"csg\", \"sgn\"],\n csl: [\"csl\", \"sgn\"],\n csn: [\"csn\", \"sgn\"],\n csq: [\"csq\", \"sgn\"],\n csr: [\"csr\", \"sgn\"],\n czh: [\"czh\", \"zh\"],\n czo: [\"czo\", \"zh\"],\n doq: [\"doq\", \"sgn\"],\n dse: [\"dse\", \"sgn\"],\n dsl: [\"dsl\", \"sgn\"],\n dup: [\"dup\", \"ms\"],\n ecs: [\"ecs\", \"sgn\"],\n esl: [\"esl\", \"sgn\"],\n esn: [\"esn\", \"sgn\"],\n eso: [\"eso\", \"sgn\"],\n eth: [\"eth\", \"sgn\"],\n fcs: [\"fcs\", \"sgn\"],\n fse: [\"fse\", \"sgn\"],\n fsl: [\"fsl\", \"sgn\"],\n fss: [\"fss\", \"sgn\"],\n gan: [\"gan\", \"zh\"],\n gds: [\"gds\", \"sgn\"],\n gom: [\"gom\", \"kok\"],\n gse: [\"gse\", \"sgn\"],\n gsg: [\"gsg\", \"sgn\"],\n gsm: [\"gsm\", \"sgn\"],\n gss: [\"gss\", \"sgn\"],\n gus: [\"gus\", \"sgn\"],\n hab: [\"hab\", \"sgn\"],\n haf: [\"haf\", \"sgn\"],\n hak: [\"hak\", \"zh\"],\n hds: [\"hds\", \"sgn\"],\n hji: [\"hji\", \"ms\"],\n hks: [\"hks\", \"sgn\"],\n hos: [\"hos\", \"sgn\"],\n hps: [\"hps\", \"sgn\"],\n hsh: [\"hsh\", \"sgn\"],\n hsl: [\"hsl\", \"sgn\"],\n hsn: [\"hsn\", \"zh\"],\n icl: [\"icl\", \"sgn\"],\n ils: [\"ils\", \"sgn\"],\n inl: [\"inl\", \"sgn\"],\n ins: [\"ins\", \"sgn\"],\n ise: [\"ise\", \"sgn\"],\n isg: [\"isg\", \"sgn\"],\n isr: [\"isr\", \"sgn\"],\n jak: [\"jak\", \"ms\"],\n jax: [\"jax\", \"ms\"],\n jcs: [\"jcs\", \"sgn\"],\n jhs: [\"jhs\", \"sgn\"],\n jls: [\"jls\", \"sgn\"],\n jos: [\"jos\", \"sgn\"],\n jsl: [\"jsl\", \"sgn\"],\n jus: [\"jus\", \"sgn\"],\n kgi: [\"kgi\", \"sgn\"],\n knn: [\"knn\", \"kok\"],\n kvb: [\"kvb\", \"ms\"],\n kvk: [\"kvk\", \"sgn\"],\n kvr: [\"kvr\", \"ms\"],\n kxd: [\"kxd\", \"ms\"],\n lbs: [\"lbs\", \"sgn\"],\n lce: [\"lce\", \"ms\"],\n lcf: [\"lcf\", \"ms\"],\n liw: [\"liw\", \"ms\"],\n lls: [\"lls\", \"sgn\"],\n lsg: [\"lsg\", \"sgn\"],\n lsl: [\"lsl\", \"sgn\"],\n lso: [\"lso\", \"sgn\"],\n lsp: [\"lsp\", \"sgn\"],\n lst: [\"lst\", \"sgn\"],\n lsy: [\"lsy\", \"sgn\"],\n ltg: [\"ltg\", \"lv\"],\n lvs: [\"lvs\", \"lv\"],\n lzh: [\"lzh\", \"zh\"],\n max: [\"max\", \"ms\"],\n mdl: [\"mdl\", \"sgn\"],\n meo: [\"meo\", \"ms\"],\n mfa: [\"mfa\", \"ms\"],\n mfb: [\"mfb\", \"ms\"],\n mfs: [\"mfs\", \"sgn\"],\n min: [\"min\", \"ms\"],\n mnp: [\"mnp\", \"zh\"],\n mqg: [\"mqg\", \"ms\"],\n mre: [\"mre\", \"sgn\"],\n msd: [\"msd\", \"sgn\"],\n msi: [\"msi\", \"ms\"],\n msr: [\"msr\", \"sgn\"],\n mui: [\"mui\", \"ms\"],\n mzc: [\"mzc\", \"sgn\"],\n mzg: [\"mzg\", \"sgn\"],\n mzy: [\"mzy\", \"sgn\"],\n nan: [\"nan\", \"zh\"],\n nbs: [\"nbs\", \"sgn\"],\n ncs: [\"ncs\", \"sgn\"],\n nsi: [\"nsi\", \"sgn\"],\n nsl: [\"nsl\", \"sgn\"],\n nsp: [\"nsp\", \"sgn\"],\n nsr: [\"nsr\", \"sgn\"],\n nzs: [\"nzs\", \"sgn\"],\n okl: [\"okl\", \"sgn\"],\n orn: [\"orn\", \"ms\"],\n ors: [\"ors\", \"ms\"],\n pel: [\"pel\", \"ms\"],\n pga: [\"pga\", \"ar\"],\n pks: [\"pks\", \"sgn\"],\n prl: [\"prl\", \"sgn\"],\n prz: [\"prz\", \"sgn\"],\n psc: [\"psc\", \"sgn\"],\n psd: [\"psd\", \"sgn\"],\n pse: [\"pse\", \"ms\"],\n psg: [\"psg\", \"sgn\"],\n psl: [\"psl\", \"sgn\"],\n pso: [\"pso\", \"sgn\"],\n psp: [\"psp\", \"sgn\"],\n psr: [\"psr\", \"sgn\"],\n pys: [\"pys\", \"sgn\"],\n rms: [\"rms\", \"sgn\"],\n rsi: [\"rsi\", \"sgn\"],\n rsl: [\"rsl\", \"sgn\"],\n sdl: [\"sdl\", \"sgn\"],\n sfb: [\"sfb\", \"sgn\"],\n sfs: [\"sfs\", \"sgn\"],\n sgg: [\"sgg\", \"sgn\"],\n sgx: [\"sgx\", \"sgn\"],\n shu: [\"shu\", \"ar\"],\n slf: [\"slf\", \"sgn\"],\n sls: [\"sls\", \"sgn\"],\n sqk: [\"sqk\", \"sgn\"],\n sqs: [\"sqs\", \"sgn\"],\n ssh: [\"ssh\", \"ar\"],\n ssp: [\"ssp\", \"sgn\"],\n ssr: [\"ssr\", \"sgn\"],\n svk: [\"svk\", \"sgn\"],\n swc: [\"swc\", \"sw\"],\n swh: [\"swh\", \"sw\"],\n swl: [\"swl\", \"sgn\"],\n syy: [\"syy\", \"sgn\"],\n tmw: [\"tmw\", \"ms\"],\n tse: [\"tse\", \"sgn\"],\n tsm: [\"tsm\", \"sgn\"],\n tsq: [\"tsq\", \"sgn\"],\n tss: [\"tss\", \"sgn\"],\n tsy: [\"tsy\", \"sgn\"],\n tza: [\"tza\", \"sgn\"],\n ugn: [\"ugn\", \"sgn\"],\n ugy: [\"ugy\", \"sgn\"],\n ukl: [\"ukl\", \"sgn\"],\n uks: [\"uks\", \"sgn\"],\n urk: [\"urk\", \"ms\"],\n uzn: [\"uzn\", \"uz\"],\n uzs: [\"uzs\", \"uz\"],\n vgt: [\"vgt\", \"sgn\"],\n vkk: [\"vkk\", \"ms\"],\n vkt: [\"vkt\", \"ms\"],\n vsi: [\"vsi\", \"sgn\"],\n vsl: [\"vsl\", \"sgn\"],\n vsv: [\"vsv\", \"sgn\"],\n wuu: [\"wuu\", \"zh\"],\n xki: [\"xki\", \"sgn\"],\n xml: [\"xml\", \"sgn\"],\n xmm: [\"xmm\", \"ms\"],\n xms: [\"xms\", \"sgn\"],\n yds: [\"yds\", \"sgn\"],\n ysl: [\"ysl\", \"sgn\"],\n yue: [\"yue\", \"zh\"],\n zib: [\"zib\", \"sgn\"],\n zlm: [\"zlm\", \"ms\"],\n zmi: [\"zmi\", \"ms\"],\n zsl: [\"zsl\", \"sgn\"],\n zsm: [\"zsm\", \"ms\"],\n },\n};\n\n/**\n * Convert only a-z to uppercase as per section 6.1 of the spec\n */\nexport function toLatinUpperCase (str) {\n let i = str.length;\n\n while (i--) {\n let ch = str.charAt(i);\n\n if (ch >= \"a\" && ch <= \"z\")\n str = str.slice(0, i) + ch.toUpperCase() + str.slice(i+1);\n }\n\n return str;\n}\n\n/**\n * The IsStructurallyValidLanguageTag abstract operation verifies that the locale\n * argument (which must be a String value)\n *\n * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section\n * 2.1, or successor,\n * - does not include duplicate variant subtags, and\n * - does not include duplicate singleton subtags.\n *\n * The abstract operation returns true if locale can be generated from the ABNF\n * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not\n * contain duplicate variant or singleton subtags (other than as a private use\n * subtag). It returns false otherwise. Terminal value characters in the grammar are\n * interpreted as the Unicode equivalents of the ASCII octet values given.\n */\nexport function /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {\n // represents a well-formed BCP 47 language tag as specified in RFC 5646\n if (!expBCP47Syntax.test(locale))\n return false;\n\n // does not include duplicate variant subtags, and\n if (expVariantDupes.test(locale))\n return false;\n\n // does not include duplicate singleton subtags.\n if (expSingletonDupes.test(locale))\n return false;\n\n return true;\n}\n\n/**\n * The CanonicalizeLanguageTag abstract operation returns the canonical and case-\n * regularized form of the locale argument (which must be a String value that is\n * a structurally valid BCP 47 language tag as verified by the\n * IsStructurallyValidLanguageTag abstract operation). It takes the steps\n * specified in RFC 5646 section 4.5, or successor, to bring the language tag\n * into canonical form, and to regularize the case of the subtags, but does not\n * take the steps to bring a language tag into “extlang form” and to reorder\n * variant subtags.\n\n * The specifications for extensions to BCP 47 language tags, such as RFC 6067,\n * may include canonicalization rules for the extension subtag sequences they\n * define that go beyond the canonicalization rules of RFC 5646 section 4.5.\n * Implementations are allowed, but not required, to apply these additional rules.\n */\nexport function /* 6.2.3 */CanonicalizeLanguageTag (locale) {\n let match, parts;\n\n // A language tag is in 'canonical form' when the tag is well-formed\n // according to the rules in Sections 2.1 and 2.2\n\n // Section 2.1 says all subtags use lowercase...\n locale = locale.toLowerCase();\n\n // ...with 2 exceptions: 'two-letter and four-letter subtags that neither\n // appear at the start of the tag nor occur after singletons. Such two-letter\n // subtags are all uppercase (as in the tags \"en-CA-x-ca\" or \"sgn-BE-FR\") and\n // four-letter subtags are titlecase (as in the tag \"az-Latn-x-latn\").\n parts = locale.split('-');\n for (let i = 1, max = parts.length; i < max; i++) {\n // Two-letter subtags are all uppercase\n if (parts[i].length === 2)\n parts[i] = parts[i].toUpperCase();\n\n // Four-letter subtags are titlecase\n else if (parts[i].length === 4)\n parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n\n // Is it a singleton?\n else if (parts[i].length === 1 && parts[i] !== 'x')\n break;\n }\n locale = arrJoin.call(parts, '-');\n\n // The steps laid out in RFC 5646 section 4.5 are as follows:\n\n // 1. Extension sequences are ordered into case-insensitive ASCII order\n // by singleton subtag.\n if ((match = locale.match(expExtSequences)) && match.length > 1) {\n // The built-in sort() sorts by ASCII order, so use that\n match.sort();\n\n // Replace all extensions with the joined, sorted array\n locale = locale.replace(\n RegExp('(?:' + expExtSequences.source + ')+', 'i'),\n arrJoin.call(match, '')\n );\n }\n\n // 2. Redundant or grandfathered tags are replaced by their 'Preferred-\n // Value', if there is one.\n if (hop.call(redundantTags.tags, locale))\n locale = redundantTags.tags[locale];\n\n // 3. Subtags are replaced by their 'Preferred-Value', if there is one.\n // For extlangs, the original primary language subtag is also\n // replaced if there is a primary language subtag in the 'Preferred-\n // Value'.\n parts = locale.split('-');\n\n for (let i = 1, max = parts.length; i < max; i++) {\n if (hop.call(redundantTags.subtags, parts[i]))\n parts[i] = redundantTags.subtags[parts[i]];\n\n else if (hop.call(redundantTags.extLang, parts[i])) {\n parts[i] = redundantTags.extLang[parts[i]][0];\n\n // For extlang tags, the prefix needs to be removed if it is redundant\n if (i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {\n parts = arrSlice.call(parts, i++);\n max -= 1;\n }\n }\n }\n\n return arrJoin.call(parts, '-');\n}\n\n/**\n * The DefaultLocale abstract operation returns a String value representing the\n * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the\n * host environment’s current locale.\n */\nexport function /* 6.2.4 */DefaultLocale () {\n return defaultLocale;\n}\n\n// Sect 6.3 Currency Codes\n// =======================\n\nconst expCurrencyCode = /^[A-Z]{3}$/;\n\n/**\n * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument\n * (after conversion to a String value) represents a well-formed 3-letter ISO currency\n * code. The following steps are taken:\n */\nexport function /* 6.3.1 */IsWellFormedCurrencyCode(currency) {\n // 1. Let `c` be ToString(currency)\n let c = String(currency);\n\n // 2. Let `normalized` be the result of mapping c to upper case as described\n // in 6.1.\n let normalized = toLatinUpperCase(c);\n\n // 3. If the string length of normalized is not 3, return false.\n // 4. If normalized contains any character that is not in the range \"A\" to \"Z\"\n // (U+0041 to U+005A), return false.\n if (expCurrencyCode.test(normalized) === false)\n return false;\n\n // 5. Return true\n return true;\n}\n","// Sect 9.2 Abstract Operations\n// ============================\n\nimport {\n List,\n toObject,\n arrIndexOf,\n arrPush,\n arrSlice,\n Record,\n hop,\n defineProperty,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n CanonicalizeLanguageTag,\n DefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nconst expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below\n\nexport function /* 9.2.1 */CanonicalizeLocaleList (locales) {\n// The abstract operation CanonicalizeLocaleList takes the following steps:\n\n // 1. If locales is undefined, then a. Return a new empty List\n if (locales === undefined)\n return new List();\n\n // 2. Let seen be a new empty List.\n let seen = new List();\n\n // 3. If locales is a String value, then\n // a. Let locales be a new array created as if by the expression new\n // Array(locales) where Array is the standard built-in constructor with\n // that name and locales is the value of locales.\n locales = typeof locales === 'string' ? [ locales ] : locales;\n\n // 4. Let O be ToObject(locales).\n let O = toObject(locales);\n\n // 5. Let lenValue be the result of calling the [[Get]] internal method of\n // O with the argument \"length\".\n // 6. Let len be ToUint32(lenValue).\n let len = O.length;\n\n // 7. Let k be 0.\n let k = 0;\n\n // 8. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n let Pk = String(k);\n\n // b. Let kPresent be the result of calling the [[HasProperty]] internal\n // method of O with argument Pk.\n let kPresent = Pk in O;\n\n // c. If kPresent is true, then\n if (kPresent) {\n // i. Let kValue be the result of calling the [[Get]] internal\n // method of O with argument Pk.\n let kValue = O[Pk];\n\n // ii. If the type of kValue is not String or Object, then throw a\n // TypeError exception.\n if (kValue === null || (typeof kValue !== 'string' && typeof kValue !== 'object'))\n throw new TypeError('String or Object type expected');\n\n // iii. Let tag be ToString(kValue).\n let tag = String(kValue);\n\n // iv. If the result of calling the abstract operation\n // IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as\n // the argument, is false, then throw a RangeError exception.\n if (!IsStructurallyValidLanguageTag(tag))\n throw new RangeError(\"'\" + tag + \"' is not a structurally valid language tag\");\n\n // v. Let tag be the result of calling the abstract operation\n // CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the\n // argument.\n tag = CanonicalizeLanguageTag(tag);\n\n // vi. If tag is not an element of seen, then append tag as the last\n // element of seen.\n if (arrIndexOf.call(seen, tag) === -1)\n arrPush.call(seen, tag);\n }\n\n // d. Increase k by 1.\n k++;\n }\n\n // 9. Return seen.\n return seen;\n}\n\n/**\n * The BestAvailableLocale abstract operation compares the provided argument\n * locale, which must be a String value with a structurally valid and\n * canonicalized BCP 47 language tag, against the locales in availableLocales and\n * returns either the longest non-empty prefix of locale that is an element of\n * availableLocales, or undefined if there is no such element. It uses the\n * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:\n */\nexport function /* 9.2.2 */BestAvailableLocale (availableLocales, locale) {\n // 1. Let candidate be locale\n let candidate = locale;\n\n // 2. Repeat\n while (candidate) {\n // a. If availableLocales contains an element equal to candidate, then return\n // candidate.\n if (arrIndexOf.call(availableLocales, candidate) > -1)\n return candidate;\n\n // b. Let pos be the character index of the last occurrence of \"-\"\n // (U+002D) within candidate. If that character does not occur, return\n // undefined.\n let pos = candidate.lastIndexOf('-');\n\n if (pos < 0)\n return;\n\n // c. If pos ≥ 2 and the character \"-\" occurs at index pos-2 of candidate,\n // then decrease pos by 2.\n if (pos >= 2 && candidate.charAt(pos - 2) === '-')\n pos -= 2;\n\n // d. Let candidate be the substring of candidate from position 0, inclusive,\n // to position pos, exclusive.\n candidate = candidate.substring(0, pos);\n }\n}\n\n/**\n * The LookupMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The following steps are taken:\n */\nexport function /* 9.2.3 */LookupMatcher (availableLocales, requestedLocales) {\n // 1. Let i be 0.\n let i = 0;\n\n // 2. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n\n // 3. Let availableLocale be undefined.\n let availableLocale;\n\n let locale, noExtensionsLocale;\n\n // 4. Repeat while i < len and availableLocale is undefined:\n while (i < len && !availableLocale) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position i.\n locale = requestedLocales[i];\n\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. Increase i by 1.\n i++;\n }\n\n // 5. Let result be a new Record.\n let result = new Record();\n\n // 6. If availableLocale is not undefined, then\n if (availableLocale !== undefined) {\n // a. Set result.[[locale]] to availableLocale.\n result['[[locale]]'] = availableLocale;\n\n // b. If locale and noExtensionsLocale are not the same String value, then\n if (String(locale) !== String(noExtensionsLocale)) {\n // i. Let extension be the String value consisting of the first\n // substring of locale that is a Unicode locale extension sequence.\n let extension = locale.match(expUnicodeExSeq)[0];\n\n // ii. Let extensionIndex be the character position of the initial\n // \"-\" of the first Unicode locale extension sequence within locale.\n let extensionIndex = locale.indexOf('-u-');\n\n // iii. Set result.[[extension]] to extension.\n result['[[extension]]'] = extension;\n\n // iv. Set result.[[extensionIndex]] to extensionIndex.\n result['[[extensionIndex]]'] = extensionIndex;\n }\n }\n // 7. Else\n else\n // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract\n // operation (defined in 6.2.4).\n result['[[locale]]'] = DefaultLocale();\n\n // 8. Return result\n return result;\n}\n\n/**\n * The BestFitMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The algorithm is implementation dependent, but should produce results\n * that a typical user of the requested locales would perceive as at least as\n * good as those produced by the LookupMatcher abstract operation. Options\n * specified through Unicode locale extension sequences must be ignored by the\n * algorithm. Information about such subsequences is returned separately.\n * The abstract operation returns a record with a [[locale]] field, whose value\n * is the language tag of the selected locale, which must be an element of\n * availableLocales. If the language tag of the request locale that led to the\n * selected locale contained a Unicode locale extension sequence, then the\n * returned record also contains an [[extension]] field whose value is the first\n * Unicode locale extension sequence, and an [[extensionIndex]] field whose value\n * is the index of the first Unicode locale extension sequence within the request\n * locale language tag.\n */\nexport function /* 9.2.4 */BestFitMatcher (availableLocales, requestedLocales) {\n return LookupMatcher(availableLocales, requestedLocales);\n}\n\n/**\n * The ResolveLocale abstract operation compares a BCP 47 language priority list\n * requestedLocales against the locales in availableLocales and determines the\n * best available language to meet the request. availableLocales and\n * requestedLocales must be provided as List values, options as a Record.\n */\nexport function /* 9.2.5 */ResolveLocale (availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n if (availableLocales.length === 0) {\n throw new ReferenceError('No locale data has been provided for this object yet.');\n }\n\n // The following steps are taken:\n // 1. Let matcher be the value of options.[[localeMatcher]].\n let matcher = options['[[localeMatcher]]'];\n\n let r;\n\n // 2. If matcher is \"lookup\", then\n if (matcher === 'lookup')\n // a. Let r be the result of calling the LookupMatcher abstract operation\n // (defined in 9.2.3) with arguments availableLocales and\n // requestedLocales.\n r = LookupMatcher(availableLocales, requestedLocales);\n\n // 3. Else\n else\n // a. Let r be the result of calling the BestFitMatcher abstract\n // operation (defined in 9.2.4) with arguments availableLocales and\n // requestedLocales.\n r = BestFitMatcher(availableLocales, requestedLocales);\n\n // 4. Let foundLocale be the value of r.[[locale]].\n let foundLocale = r['[[locale]]'];\n\n let extensionSubtags, extensionSubtagsLength;\n\n // 5. If r has an [[extension]] field, then\n if (hop.call(r, '[[extension]]')) {\n // a. Let extension be the value of r.[[extension]].\n let extension = r['[[extension]]'];\n // b. Let split be the standard built-in function object defined in ES5,\n // 15.5.4.14.\n let split = String.prototype.split;\n // c. Let extensionSubtags be the result of calling the [[Call]] internal\n // method of split with extension as the this value and an argument\n // list containing the single item \"-\".\n extensionSubtags = split.call(extension, '-');\n // d. Let extensionSubtagsLength be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument \"length\".\n extensionSubtagsLength = extensionSubtags.length;\n }\n\n // 6. Let result be a new Record.\n let result = new Record();\n\n // 7. Set result.[[dataLocale]] to foundLocale.\n result['[[dataLocale]]'] = foundLocale;\n\n // 8. Let supportedExtension be \"-u\".\n let supportedExtension = '-u';\n // 9. Let i be 0.\n let i = 0;\n // 10. Let len be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument \"length\".\n let len = relevantExtensionKeys.length;\n\n // 11 Repeat while i < len:\n while (i < len) {\n // a. Let key be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument ToString(i).\n let key = relevantExtensionKeys[i];\n // b. Let foundLocaleData be the result of calling the [[Get]] internal\n // method of localeData with the argument foundLocale.\n let foundLocaleData = localeData[foundLocale];\n // c. Let keyLocaleData be the result of calling the [[Get]] internal\n // method of foundLocaleData with the argument key.\n let keyLocaleData = foundLocaleData[key];\n // d. Let value be the result of calling the [[Get]] internal method of\n // keyLocaleData with argument \"0\".\n let value = keyLocaleData['0'];\n // e. Let supportedExtensionAddition be \"\".\n let supportedExtensionAddition = '';\n // f. Let indexOf be the standard built-in function object defined in\n // ES5, 15.4.4.14.\n let indexOf = arrIndexOf;\n\n // g. If extensionSubtags is not undefined, then\n if (extensionSubtags !== undefined) {\n // i. Let keyPos be the result of calling the [[Call]] internal\n // method of indexOf with extensionSubtags as the this value and\n // an argument list containing the single item key.\n let keyPos = indexOf.call(extensionSubtags, key);\n\n // ii. If keyPos ≠ -1, then\n if (keyPos !== -1) {\n // 1. If keyPos + 1 < extensionSubtagsLength and the length of the\n // result of calling the [[Get]] internal method of\n // extensionSubtags with argument ToString(keyPos +1) is greater\n // than 2, then\n if (keyPos + 1 < extensionSubtagsLength\n && extensionSubtags[keyPos + 1].length > 2) {\n // a. Let requestedValue be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument\n // ToString(keyPos + 1).\n let requestedValue = extensionSubtags[keyPos + 1];\n // b. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the\n // this value and an argument list containing the single\n // item requestedValue.\n let valuePos = indexOf.call(keyLocaleData, requestedValue);\n\n // c. If valuePos ≠ -1, then\n if (valuePos !== -1) {\n // i. Let value be requestedValue.\n value = requestedValue,\n // ii. Let supportedExtensionAddition be the\n // concatenation of \"-\", key, \"-\", and value.\n supportedExtensionAddition = '-' + key + '-' + value;\n }\n }\n // 2. Else\n else {\n // a. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the this\n // value and an argument list containing the single item\n // \"true\".\n let valuePos = indexOf(keyLocaleData, 'true');\n\n // b. If valuePos ≠ -1, then\n if (valuePos !== -1)\n // i. Let value be \"true\".\n value = 'true';\n }\n }\n }\n // h. If options has a field [[]], then\n if (hop.call(options, '[[' + key + ']]')) {\n // i. Let optionsValue be the value of options.[[]].\n let optionsValue = options['[[' + key + ']]'];\n\n // ii. If the result of calling the [[Call]] internal method of indexOf\n // with keyLocaleData as the this value and an argument list\n // containing the single item optionsValue is not -1, then\n if (indexOf.call(keyLocaleData, optionsValue) !== -1) {\n // 1. If optionsValue is not equal to value, then\n if (optionsValue !== value) {\n // a. Let value be optionsValue.\n value = optionsValue;\n // b. Let supportedExtensionAddition be \"\".\n supportedExtensionAddition = '';\n }\n }\n }\n // i. Set result.[[]] to value.\n result['[[' + key + ']]'] = value;\n\n // j. Append supportedExtensionAddition to supportedExtension.\n supportedExtension += supportedExtensionAddition;\n\n // k. Increase i by 1.\n i++;\n }\n // 12. If the length of supportedExtension is greater than 2, then\n if (supportedExtension.length > 2) {\n // a.\n let privateIndex = foundLocale.indexOf(\"-x-\");\n // b.\n if (privateIndex === -1) {\n // i.\n foundLocale = foundLocale + supportedExtension;\n }\n // c.\n else {\n // i.\n let preExtension = foundLocale.substring(0, privateIndex);\n // ii.\n let postExtension = foundLocale.substring(privateIndex);\n // iii.\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n // d. asserting - skipping\n // e.\n foundLocale = CanonicalizeLanguageTag(foundLocale);\n }\n // 13. Set result.[[locale]] to foundLocale.\n result['[[locale]]'] = foundLocale;\n\n // 14. Return result.\n return result;\n}\n\n/**\n * The LookupSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.\n * Locales appear in the same order in the returned list as in requestedLocales.\n * The following steps are taken:\n */\nexport function /* 9.2.6 */LookupSupportedLocales (availableLocales, requestedLocales) {\n // 1. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n // 2. Let subset be a new empty List.\n let subset = new List();\n // 3. Let k be 0.\n let k = 0;\n\n // 4. Repeat while k < len\n while (k < len) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position k.\n let locale = requestedLocales[k];\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n let noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n let availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. If availableLocale is not undefined, then append locale to the end of\n // subset.\n if (availableLocale !== undefined)\n arrPush.call(subset, locale);\n\n // e. Increment k by 1.\n k++;\n }\n\n // 5. Let subsetArray be a new Array object whose elements are the same\n // values in the same order as the elements of subset.\n let subsetArray = arrSlice.call(subset);\n\n // 6. Return subsetArray.\n return subsetArray;\n}\n\n/**\n * The BestFitSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the Best Fit Matcher\n * algorithm. Locales appear in the same order in the returned list as in\n * requestedLocales. The steps taken are implementation dependent.\n */\nexport function /*9.2.7 */BestFitSupportedLocales (availableLocales, requestedLocales) {\n // ###TODO: implement this function as described by the specification###\n return LookupSupportedLocales(availableLocales, requestedLocales);\n}\n\n/**\n * The SupportedLocales abstract operation returns the subset of the provided BCP\n * 47 language priority list requestedLocales for which availableLocales has a\n * matching locale. Two algorithms are available to match the locales: the Lookup\n * algorithm described in RFC 4647 section 3.4, and an implementation dependent\n * best-fit algorithm. Locales appear in the same order in the returned list as\n * in requestedLocales. The following steps are taken:\n */\nexport function /*9.2.8 */SupportedLocales (availableLocales, requestedLocales, options) {\n let matcher, subset;\n\n // 1. If options is not undefined, then\n if (options !== undefined) {\n // a. Let options be ToObject(options).\n options = new Record(toObject(options));\n // b. Let matcher be the result of calling the [[Get]] internal method of\n // options with argument \"localeMatcher\".\n matcher = options.localeMatcher;\n\n // c. If matcher is not undefined, then\n if (matcher !== undefined) {\n // i. Let matcher be ToString(matcher).\n matcher = String(matcher);\n\n // ii. If matcher is not \"lookup\" or \"best fit\", then throw a RangeError\n // exception.\n if (matcher !== 'lookup' && matcher !== 'best fit')\n throw new RangeError('matcher should be \"lookup\" or \"best fit\"');\n }\n }\n // 2. If matcher is undefined or \"best fit\", then\n if (matcher === undefined || matcher === 'best fit')\n // a. Let subset be the result of calling the BestFitSupportedLocales\n // abstract operation (defined in 9.2.7) with arguments\n // availableLocales and requestedLocales.\n subset = BestFitSupportedLocales(availableLocales, requestedLocales);\n // 3. Else\n else\n // a. Let subset be the result of calling the LookupSupportedLocales\n // abstract operation (defined in 9.2.6) with arguments\n // availableLocales and requestedLocales.\n subset = LookupSupportedLocales(availableLocales, requestedLocales);\n\n // 4. For each named own property name P of subset,\n for (let P in subset) {\n if (!hop.call(subset, P))\n continue;\n\n // a. Let desc be the result of calling the [[GetOwnProperty]] internal\n // method of subset with P.\n // b. Set desc.[[Writable]] to false.\n // c. Set desc.[[Configurable]] to false.\n // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,\n // and true as arguments.\n defineProperty(subset, P, {\n writable: false, configurable: false, value: subset[P],\n });\n }\n // \"Freeze\" the array so no new elements can be added\n defineProperty(subset, 'length', { writable: false });\n\n // 5. Return subset\n return subset;\n}\n\n/**\n * The GetOption abstract operation extracts the value of the property named\n * property from the provided options object, converts it to the required type,\n * checks whether it is one of a List of allowed values, and fills in a fallback\n * value if necessary.\n */\nexport function /*9.2.9 */GetOption (options, property, type, values, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Assert: type is \"boolean\" or \"string\".\n // b. If type is \"boolean\", then let value be ToBoolean(value).\n // c. If type is \"string\", then let value be ToString(value).\n value = type === 'boolean' ? Boolean(value)\n : (type === 'string' ? String(value) : value);\n\n // d. If values is not undefined, then\n if (values !== undefined) {\n // i. If values does not contain an element equal to value, then throw a\n // RangeError exception.\n if (arrIndexOf.call(values, value) === -1)\n throw new RangeError(\"'\" + value + \"' is not an allowed value for `\" + property +'`');\n }\n\n // e. Return value.\n return value;\n }\n // Else return fallback.\n return fallback;\n}\n\n/**\n * The GetNumberOption abstract operation extracts a property value from the\n * provided options object, converts it to a Number value, checks whether it is\n * in the allowed range, and fills in a fallback value if necessary.\n */\nexport function /* 9.2.10 */GetNumberOption (options, property, minimum, maximum, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Let value be ToNumber(value).\n value = Number(value);\n\n // b. If value is NaN or less than minimum or greater than maximum, throw a\n // RangeError exception.\n if (isNaN(value) || value < minimum || value > maximum)\n throw new RangeError('Value is not a number or outside accepted range');\n\n // c. Return floor(value).\n return Math.floor(value);\n }\n // 3. Else return fallback.\n return fallback;\n}\n","import {\n CanonicalizeLocaleList,\n} from \"./9.negotiation.js\";\n\n// 8 The Intl Object\nexport const Intl = {};\n\n// 8.2 Function Properties of the Intl Object\n\n// 8.2.1\n// @spec[tc39/ecma402/master/spec/intl.html]\n// @clause[sec-intl.getcanonicallocales]\nIntl.getCanonicalLocales = function (locales) {\n // 1. Let ll be ? CanonicalizeLocaleList(locales).\n let ll = CanonicalizeLocaleList(locales);\n // 2. Return CreateArrayFromList(ll).\n {\n let result = [];\n for (let code in ll) {\n result.push(ll[code]);\n }\n return result;\n }\n};\n","// 11.1 The Intl.NumberFormat constructor\n// ======================================\n\nimport {\n IsWellFormedCurrencyCode,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n SupportedLocales,\n ResolveLocale,\n GetNumberOption,\n GetOption,\n} from \"./9.negotiation.js\";\n\nimport {\n internals,\n log10Floor,\n List,\n toObject,\n arrPush,\n arrJoin,\n arrShift,\n Record,\n hop,\n defineProperty,\n es3,\n fnBind,\n getInternalProperties,\n createRegExpRestore,\n secret,\n objCreate,\n} from \"./util.js\";\n\n// Currency minor units output from get-4217 grunt task, formatted\nconst currencyMinorUnits = {\n BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,\n XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,\n OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0,\n};\n\n// Define the NumberFormat constructor internally so it cannot be tainted\nexport function NumberFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.NumberFormat(locales, options);\n }\n\n return InitializeNumberFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'NumberFormat', {\n configurable: true,\n writable: true,\n value: NumberFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(Intl.NumberFormat, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeNumberFormat accepts the arguments\n * numberFormat (which must be an object), locales, and options. It initializes\n * numberFormat as a NumberFormat object.\n */\nexport function /*11.1.1.1 */InitializeNumberFormat (numberFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(numberFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If numberFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(numberFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. If options is undefined, then\n if (options === undefined)\n // a. Let options be the result of creating a new object as if by the\n // expression new Object() where Object is the standard built-in constructor\n // with that name.\n options = {};\n\n // 5. Else\n else\n // a. Let options be ToObject(options).\n options = toObject(options);\n\n // 6. Let opt be a new Record.\n let opt = new Record(),\n\n // 7. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with the arguments options, \"localeMatcher\", \"string\",\n // a List containing the two String values \"lookup\" and \"best fit\", and\n // \"best fit\".\n matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 8. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 9. Let NumberFormat be the standard built-in object that is the initial value\n // of Intl.NumberFormat.\n // 10. Let localeData be the value of the [[localeData]] internal property of\n // NumberFormat.\n let localeData = internals.NumberFormat['[[localeData]]'];\n\n // 11. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of NumberFormat, and localeData.\n let r = ResolveLocale(\n internals.NumberFormat['[[availableLocales]]'], requestedLocales,\n opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData\n );\n\n // 12. Set the [[locale]] internal property of numberFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 13. Set the [[numberingSystem]] internal property of numberFormat to the value\n // of r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let s be the result of calling the GetOption abstract operation with the\n // arguments options, \"style\", \"string\", a List containing the three String\n // values \"decimal\", \"percent\", and \"currency\", and \"decimal\".\n let s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');\n\n // 16. Set the [[style]] internal property of numberFormat to s.\n internal['[[style]]'] = s;\n\n // 17. Let c be the result of calling the GetOption abstract operation with the\n // arguments options, \"currency\", \"string\", undefined, and undefined.\n let c = GetOption(options, 'currency', 'string');\n\n // 18. If c is not undefined and the result of calling the\n // IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with\n // argument c is false, then throw a RangeError exception.\n if (c !== undefined && !IsWellFormedCurrencyCode(c))\n throw new RangeError(\"'\" + c + \"' is not a valid currency code\");\n\n // 19. If s is \"currency\" and c is undefined, throw a TypeError exception.\n if (s === 'currency' && c === undefined)\n throw new TypeError('Currency code is required when style is currency');\n\n let cDigits;\n\n // 20. If s is \"currency\", then\n if (s === 'currency') {\n // a. Let c be the result of converting c to upper case as specified in 6.1.\n c = c.toUpperCase();\n\n // b. Set the [[currency]] internal property of numberFormat to c.\n internal['[[currency]]'] = c;\n\n // c. Let cDigits be the result of calling the CurrencyDigits abstract\n // operation (defined below) with argument c.\n cDigits = CurrencyDigits(c);\n }\n\n // 21. Let cd be the result of calling the GetOption abstract operation with the\n // arguments options, \"currencyDisplay\", \"string\", a List containing the\n // three String values \"code\", \"symbol\", and \"name\", and \"symbol\".\n let cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');\n\n // 22. If s is \"currency\", then set the [[currencyDisplay]] internal property of\n // numberFormat to cd.\n if (s === 'currency')\n internal['[[currencyDisplay]]'] = cd;\n\n // 23. Let mnid be the result of calling the GetNumberOption abstract operation\n // (defined in 9.2.10) with arguments options, \"minimumIntegerDigits\", 1, 21,\n // and 1.\n let mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);\n\n // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.\n internal['[[minimumIntegerDigits]]'] = mnid;\n\n // 25. If s is \"currency\", then let mnfdDefault be cDigits; else let mnfdDefault\n // be 0.\n let mnfdDefault = s === 'currency' ? cDigits : 0;\n\n // 26. Let mnfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"minimumFractionDigits\", 0, 20, and mnfdDefault.\n let mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);\n\n // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.\n internal['[[minimumFractionDigits]]'] = mnfd;\n\n // 28. If s is \"currency\", then let mxfdDefault be max(mnfd, cDigits); else if s\n // is \"percent\", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault\n // be max(mnfd, 3).\n let mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits)\n : (s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3));\n\n // 29. Let mxfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"maximumFractionDigits\", mnfd, 20, and mxfdDefault.\n let mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);\n\n // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.\n internal['[[maximumFractionDigits]]'] = mxfd;\n\n // 31. Let mnsd be the result of calling the [[Get]] internal method of options\n // with argument \"minimumSignificantDigits\".\n let mnsd = options.minimumSignificantDigits;\n\n // 32. Let mxsd be the result of calling the [[Get]] internal method of options\n // with argument \"maximumSignificantDigits\".\n let mxsd = options.maximumSignificantDigits;\n\n // 33. If mnsd is not undefined or mxsd is not undefined, then:\n if (mnsd !== undefined || mxsd !== undefined) {\n // a. Let mnsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"minimumSignificantDigits\", 1, 21,\n // and 1.\n mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);\n\n // b. Let mxsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"maximumSignificantDigits\", mnsd,\n // 21, and 21.\n mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);\n\n // c. Set the [[minimumSignificantDigits]] internal property of numberFormat\n // to mnsd, and the [[maximumSignificantDigits]] internal property of\n // numberFormat to mxsd.\n internal['[[minimumSignificantDigits]]'] = mnsd;\n internal['[[maximumSignificantDigits]]'] = mxsd;\n }\n // 34. Let g be the result of calling the GetOption abstract operation with the\n // arguments options, \"useGrouping\", \"boolean\", undefined, and true.\n let g = GetOption(options, 'useGrouping', 'boolean', undefined, true);\n\n // 35. Set the [[useGrouping]] internal property of numberFormat to g.\n internal['[[useGrouping]]'] = g;\n\n // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 37. Let patterns be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"patterns\".\n let patterns = dataLocaleData.patterns;\n\n // 38. Assert: patterns is an object (see 11.2.3)\n\n // 39. Let stylePatterns be the result of calling the [[Get]] internal method of\n // patterns with argument s.\n let stylePatterns = patterns[s];\n\n // 40. Set the [[positivePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"positivePattern\".\n internal['[[positivePattern]]'] = stylePatterns.positivePattern;\n\n // 41. Set the [[negativePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"negativePattern\".\n internal['[[negativePattern]]'] = stylePatterns.negativePattern;\n\n // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to\n // true.\n internal['[[initializedNumberFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n numberFormat.format = GetFormatNumber.call(numberFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return numberFormat;\n}\n\nfunction CurrencyDigits(currency) {\n // When the CurrencyDigits abstract operation is called with an argument currency\n // (which must be an upper case String value), the following steps are taken:\n\n // 1. If the ISO 4217 currency and funds code list contains currency as an\n // alphabetic code, then return the minor unit value corresponding to the\n // currency from the list; else return 2.\n return currencyMinorUnits[currency] !== undefined\n ? currencyMinorUnits[currency]\n : 2;\n}\n\n/* 11.2.3 */internals.NumberFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.NumberFormat is called, the\n * following steps are taken:\n */\n/* 11.2.2 */\ndefineProperty(Intl.NumberFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * NumberFormat object.\n */\n/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatNumber,\n});\n\nfunction GetFormatNumber() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this NumberFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 1, that takes the argument value and\n // performs the following steps:\n let F = function (value) {\n // i. If value is not provided, then let value be undefined.\n // ii. Let x be ToNumber(value).\n // iii. Return the result of calling the FormatNumber abstract\n // operation (defined below) with arguments this and x.\n return FormatNumber(this, /* x = */Number(value));\n };\n\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n }\n\nIntl.NumberFormat.prototype.formatToParts = function(value) {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');\n\n let x = Number(value);\n return FormatNumberToParts(this, x);\n};\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumbertoparts]\n */\nfunction FormatNumberToParts(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be ArrayCreate(0).\n let result = [];\n // 3. Let n be 0.\n let n = 0;\n // 4. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Let O be ObjectCreate(%ObjectPrototype%).\n let O = {};\n // a. Perform ? CreateDataPropertyOrThrow(O, \"type\", part.[[type]]).\n O.type = part['[[type]]'];\n // a. Perform ? CreateDataPropertyOrThrow(O, \"value\", part.[[value]]).\n O.value = part['[[value]]'];\n // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).\n result[n] = O;\n // a. Increment n by 1.\n n += 1;\n }\n // 5. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-partitionnumberpattern]\n */\nfunction PartitionNumberPattern(numberFormat, x) {\n\n let internal = getInternalProperties(numberFormat),\n locale = internal['[[dataLocale]]'],\n nums = internal['[[numberingSystem]]'],\n data = internals.NumberFormat['[[localeData]]'][locale],\n ild = data.symbols[nums] || data.symbols.latn,\n pattern;\n\n // 1. If x is not NaN and x < 0, then:\n if (!isNaN(x) && x < 0) {\n // a. Let x be -x.\n x = -x;\n // a. Let pattern be the value of numberFormat.[[negativePattern]].\n pattern = internal['[[negativePattern]]'];\n }\n // 2. Else,\n else {\n // a. Let pattern be the value of numberFormat.[[positivePattern]].\n pattern = internal['[[positivePattern]]'];\n }\n // 3. Let result be a new empty List.\n let result = new List();\n // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, \"{\", 0).\n let beginIndex = pattern.indexOf('{', 0);\n // 5. Let endIndex be 0.\n let endIndex = 0;\n // 6. Let nextIndex be 0.\n let nextIndex = 0;\n // 7. Let length be the number of code units in pattern.\n let length = pattern.length;\n // 8. Repeat while beginIndex is an integer index into pattern:\n while (beginIndex > -1 && beginIndex < length) {\n // a. Set endIndex to Call(%StringProto_indexOf%, pattern, \"}\", beginIndex)\n endIndex = pattern.indexOf('}', beginIndex);\n // a. If endIndex = -1, throw new Error exception.\n if (endIndex === -1) throw new Error();\n // a. If beginIndex is greater than nextIndex, then:\n if (beginIndex > nextIndex) {\n // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.\n let literal = pattern.substring(nextIndex, beginIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // a. If p is equal \"number\", then:\n if (p === \"number\") {\n // i. If x is NaN,\n if (isNaN(x)) {\n // 1. Let n be an ILD String value indicating the NaN value.\n let n = ild.nan;\n // 2. Add new part record { [[type]]: \"nan\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });\n }\n // ii. Else if isFinite(x) is false,\n else if (!isFinite(x)) {\n // 1. Let n be an ILD String value indicating infinity.\n let n = ild.infinity;\n // 2. Add new part record { [[type]]: \"infinity\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': n });\n }\n // iii. Else,\n else {\n // 1. If the value of numberFormat.[[style]] is \"percent\" and isFinite(x), let x be 100 × x.\n if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;\n\n let n;\n // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then\n if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {\n // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).\n n = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);\n }\n // 3. Else,\n else {\n // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).\n n = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);\n }\n // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the \"Numbering System\" column of Table 2 below, then\n if (numSys[nums]) {\n // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the \"Digits\" column of the matching row in Table 2.\n let digits = numSys[nums];\n // a. Replace each digit in n with the value of digits[digit].\n n = String(n).replace(/\\d/g, (digit) => {\n return digits[digit];\n });\n }\n // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.\n else n = String(n); // ###TODO###\n\n let integer;\n let fraction;\n // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, \".\", 0).\n let decimalSepIndex = n.indexOf('.', 0);\n // 7. If decimalSepIndex > 0, then:\n if (decimalSepIndex > 0) {\n // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.\n integer = n.substring(0, decimalSepIndex);\n // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.\n fraction = n.substring(decimalSepIndex + 1, decimalSepIndex.length);\n }\n // 8. Else:\n else {\n // a. Let integer be n.\n integer = n;\n // a. Let fraction be undefined.\n fraction = undefined;\n }\n // 9. If the value of the numberFormat.[[useGrouping]] is true,\n if (internal['[[useGrouping]]'] === true) {\n // a. Let groupSepSymbol be the ILND String representing the grouping separator.\n let groupSepSymbol = ild.group;\n // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.\n let groups = new List();\n // ----> implementation:\n // Primary group represents the group closest to the decimal\n let pgSize = data.patterns.primaryGroupSize || 3;\n // Secondary group is every other group\n let sgSize = data.patterns.secondaryGroupSize || pgSize;\n // Group only if necessary\n if (integer.length > pgSize) {\n // Index of the primary grouping separator\n let end = integer.length - pgSize;\n // Starting index for our loop\n let idx = end % sgSize;\n let start = integer.slice(0, idx);\n if (start.length) arrPush.call(groups, start);\n // Loop to separate into secondary grouping digits\n while (idx < end) {\n arrPush.call(groups, integer.slice(idx, idx + sgSize));\n idx += sgSize;\n }\n // Add the primary grouping digits\n arrPush.call(groups, integer.slice(end));\n } else {\n arrPush.call(groups, integer);\n }\n // a. Assert: The number of elements in groups List is greater than 0.\n if (groups.length === 0) throw new Error();\n // a. Repeat, while groups List is not empty:\n while (groups.length) {\n // i. Remove the first element from groups and let integerGroup be the value of that element.\n let integerGroup = arrShift.call(groups);\n // ii. Add new part record { [[type]]: \"integer\", [[value]]: integerGroup } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });\n // iii. If groups List is not empty, then:\n if (groups.length) {\n // 1. Add new part record { [[type]]: \"group\", [[value]]: groupSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });\n }\n }\n }\n // 10. Else,\n else {\n // a. Add new part record { [[type]]: \"integer\", [[value]]: integer } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });\n }\n // 11. If fraction is not undefined, then:\n if (fraction !== undefined) {\n // a. Let decimalSepSymbol be the ILND String representing the decimal separator.\n let decimalSepSymbol = ild.decimal;\n // a. Add new part record { [[type]]: \"decimal\", [[value]]: decimalSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });\n // a. Add new part record { [[type]]: \"fraction\", [[value]]: fraction } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });\n }\n }\n }\n // a. Else if p is equal \"plusSign\", then:\n else if (p === \"plusSign\") {\n // i. Let plusSignSymbol be the ILND String representing the plus sign.\n let plusSignSymbol = ild.plusSign;\n // ii. Add new part record { [[type]]: \"plusSign\", [[value]]: plusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });\n }\n // a. Else if p is equal \"minusSign\", then:\n else if (p === \"minusSign\") {\n // i. Let minusSignSymbol be the ILND String representing the minus sign.\n let minusSignSymbol = ild.minusSign;\n // ii. Add new part record { [[type]]: \"minusSign\", [[value]]: minusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });\n }\n // a. Else if p is equal \"percentSign\" and numberFormat.[[style]] is \"percent\", then:\n else if (p === \"percentSign\" && internal['[[style]]'] === \"percent\") {\n // i. Let percentSignSymbol be the ILND String representing the percent sign.\n let percentSignSymbol = ild.percentSign;\n // ii. Add new part record { [[type]]: \"percentSign\", [[value]]: percentSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });\n }\n // a. Else if p is equal \"currency\" and numberFormat.[[style]] is \"currency\", then:\n else if (p === \"currency\" && internal['[[style]]'] === \"currency\") {\n // i. Let currency be the value of numberFormat.[[currency]].\n let currency = internal['[[currency]]'];\n\n let cd;\n\n // ii. If numberFormat.[[currencyDisplay]] is \"code\", then\n if (internal['[[currencyDisplay]]'] === \"code\") {\n // 1. Let cd be currency.\n cd = currency;\n }\n // iii. Else if numberFormat.[[currencyDisplay]] is \"symbol\", then\n else if (internal['[[currencyDisplay]]'] === \"symbol\") {\n // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.\n cd = data.currencies[currency] || currency;\n }\n // iv. Else if numberFormat.[[currencyDisplay]] is \"name\", then\n else if (internal['[[currencyDisplay]]'] === \"name\") {\n // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.\n cd = currency;\n }\n // v. Add new part record { [[type]]: \"currency\", [[value]]: cd } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });\n }\n // a. Else,\n else {\n // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.\n let literal = pattern.substring(beginIndex, endIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Set nextIndex to endIndex + 1.\n nextIndex = endIndex + 1;\n // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, \"{\", nextIndex)\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n // 9. If nextIndex is less than length, then:\n if (nextIndex < length) {\n // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.\n let literal = pattern.substring(nextIndex, length);\n // a. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // 10. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumber]\n */\nexport function FormatNumber(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be an empty String.\n let result = '';\n // 3. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Set result to a String value produced by concatenating result and part.[[value]].\n result += part['[[value]]'];\n }\n // 4. Return result.\n return result;\n}\n\n/**\n * When the ToRawPrecision abstract operation is called with arguments x (which\n * must be a finite non-negative number), minPrecision, and maxPrecision (both\n * must be integers between 1 and 21) the following steps are taken:\n */\nfunction ToRawPrecision (x, minPrecision, maxPrecision) {\n // 1. Let p be maxPrecision.\n let p = maxPrecision;\n\n let m, e;\n\n // 2. If x = 0, then\n if (x === 0) {\n // a. Let m be the String consisting of p occurrences of the character \"0\".\n m = arrJoin.call(Array (p + 1), '0');\n // b. Let e be 0.\n e = 0;\n }\n // 3. Else\n else {\n // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the\n // exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as\n // possible. If there are two such sets of e and n, pick the e and n for\n // which n × 10ᵉ⁻ᵖ⁺¹ is larger.\n e = log10Floor(Math.abs(x));\n\n // Easier to get to m from here\n let f = Math.round(Math.exp((Math.abs(e - p + 1)) * Math.LN10));\n\n // b. Let m be the String consisting of the digits of the decimal\n // representation of n (in order, with no leading zeroes)\n m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));\n }\n\n // 4. If e ≥ p, then\n if (e >= p)\n // a. Return the concatenation of m and e-p+1 occurrences of the character \"0\".\n return m + arrJoin.call(Array(e-p+1 + 1), '0');\n\n // 5. If e = p-1, then\n else if (e === p - 1)\n // a. Return m.\n return m;\n\n // 6. If e ≥ 0, then\n else if (e >= 0)\n // a. Let m be the concatenation of the first e+1 characters of m, the character\n // \".\", and the remaining p–(e+1) characters of m.\n m = m.slice(0, e + 1) + '.' + m.slice(e + 1);\n\n // 7. If e < 0, then\n else if (e < 0)\n // a. Let m be the concatenation of the String \"0.\", –(e+1) occurrences of the\n // character \"0\", and the string m.\n m = '0.' + arrJoin.call(Array (-(e+1) + 1), '0') + m;\n\n // 8. If m contains the character \".\", and maxPrecision > minPrecision, then\n if (m.indexOf(\".\") >= 0 && maxPrecision > minPrecision) {\n // a. Let cut be maxPrecision – minPrecision.\n let cut = maxPrecision - minPrecision;\n\n // b. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.charAt(m.length-1) === '0') {\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n\n // ii. Decrease cut by 1.\n cut--;\n }\n\n // c. If the last character of m is \".\", then\n if (m.charAt(m.length-1) === '.')\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. Return m.\n return m;\n}\n\n/**\n * @spec[tc39/ecma402/master/spec/numberformat.html]\n * @clause[sec-torawfixed]\n * When the ToRawFixed abstract operation is called with arguments x (which must\n * be a finite non-negative number), minInteger (which must be an integer between\n * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and\n * 20) the following steps are taken:\n */\nfunction ToRawFixed(x, minInteger, minFraction, maxFraction) {\n // 1. Let f be maxFraction.\n let f = maxFraction;\n // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.\n let n = Math.pow(10, f) * x; // diverging...\n // 3. If n = 0, let m be the String \"0\". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).\n let m = (n === 0 ? \"0\" : n.toFixed(0)); // divering...\n\n {\n // this diversion is needed to take into consideration big numbers\n let idx;\n let exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;\n if (exp) {\n m = m.slice(0, idx).replace('.', '');\n m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');\n }\n }\n\n let int;\n // 4. If f ≠ 0, then\n if (f !== 0) {\n // a. Let k be the number of characters in m.\n let k = m.length;\n // a. If k ≤ f, then\n if (k <= f) {\n // i. Let z be the String consisting of f+1–k occurrences of the character \"0\".\n let z = arrJoin.call(Array(f + 1 - k + 1), '0');\n // ii. Let m be the concatenation of Strings z and m.\n m = z + m;\n // iii. Let k be f+1.\n k = f + 1;\n }\n // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.\n let a = m.substring(0, k - f), b = m.substring(k - f, m.length);\n // a. Let m be the concatenation of the three Strings a, \".\", and b.\n m = a + \".\" + b;\n // a. Let int be the number of characters in a.\n int = a.length;\n }\n // 5. Else, let int be the number of characters in m.\n else int = m.length;\n // 6. Let cut be maxFraction – minFraction.\n let cut = maxFraction - minFraction;\n // 7. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.slice(-1) === \"0\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n // a. Decrease cut by 1.\n cut--;\n }\n // 8. If the last character of m is \".\", then\n if (m.slice(-1) === \".\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. If int < minInteger, then\n if (int < minInteger) {\n // a. Let z be the String consisting of minInteger–int occurrences of the character \"0\".\n let z = arrJoin.call(Array(minInteger - int + 1), '0');\n // a. Let m be the concatenation of Strings z and m.\n m = z + m;\n }\n // 10. Return m.\n return m;\n}\n\n// Sect 11.3.2 Table 2, Numbering systems\n// ======================================\nlet numSys = {\n arab: ['\\u0660', '\\u0661', '\\u0662', '\\u0663', '\\u0664', '\\u0665', '\\u0666', '\\u0667', '\\u0668', '\\u0669'],\n arabext: ['\\u06F0', '\\u06F1', '\\u06F2', '\\u06F3', '\\u06F4', '\\u06F5', '\\u06F6', '\\u06F7', '\\u06F8', '\\u06F9'],\n bali: ['\\u1B50', '\\u1B51', '\\u1B52', '\\u1B53', '\\u1B54', '\\u1B55', '\\u1B56', '\\u1B57', '\\u1B58', '\\u1B59'],\n beng: ['\\u09E6', '\\u09E7', '\\u09E8', '\\u09E9', '\\u09EA', '\\u09EB', '\\u09EC', '\\u09ED', '\\u09EE', '\\u09EF'],\n deva: ['\\u0966', '\\u0967', '\\u0968', '\\u0969', '\\u096A', '\\u096B', '\\u096C', '\\u096D', '\\u096E', '\\u096F'],\n fullwide: ['\\uFF10', '\\uFF11', '\\uFF12', '\\uFF13', '\\uFF14', '\\uFF15', '\\uFF16', '\\uFF17', '\\uFF18', '\\uFF19'],\n gujr: ['\\u0AE6', '\\u0AE7', '\\u0AE8', '\\u0AE9', '\\u0AEA', '\\u0AEB', '\\u0AEC', '\\u0AED', '\\u0AEE', '\\u0AEF'],\n guru: ['\\u0A66', '\\u0A67', '\\u0A68', '\\u0A69', '\\u0A6A', '\\u0A6B', '\\u0A6C', '\\u0A6D', '\\u0A6E', '\\u0A6F'],\n hanidec: ['\\u3007', '\\u4E00', '\\u4E8C', '\\u4E09', '\\u56DB', '\\u4E94', '\\u516D', '\\u4E03', '\\u516B', '\\u4E5D'],\n khmr: ['\\u17E0', '\\u17E1', '\\u17E2', '\\u17E3', '\\u17E4', '\\u17E5', '\\u17E6', '\\u17E7', '\\u17E8', '\\u17E9'],\n knda: ['\\u0CE6', '\\u0CE7', '\\u0CE8', '\\u0CE9', '\\u0CEA', '\\u0CEB', '\\u0CEC', '\\u0CED', '\\u0CEE', '\\u0CEF'],\n laoo: ['\\u0ED0', '\\u0ED1', '\\u0ED2', '\\u0ED3', '\\u0ED4', '\\u0ED5', '\\u0ED6', '\\u0ED7', '\\u0ED8', '\\u0ED9'],\n latn: ['\\u0030', '\\u0031', '\\u0032', '\\u0033', '\\u0034', '\\u0035', '\\u0036', '\\u0037', '\\u0038', '\\u0039'],\n limb: ['\\u1946', '\\u1947', '\\u1948', '\\u1949', '\\u194A', '\\u194B', '\\u194C', '\\u194D', '\\u194E', '\\u194F'],\n mlym: ['\\u0D66', '\\u0D67', '\\u0D68', '\\u0D69', '\\u0D6A', '\\u0D6B', '\\u0D6C', '\\u0D6D', '\\u0D6E', '\\u0D6F'],\n mong: ['\\u1810', '\\u1811', '\\u1812', '\\u1813', '\\u1814', '\\u1815', '\\u1816', '\\u1817', '\\u1818', '\\u1819'],\n mymr: ['\\u1040', '\\u1041', '\\u1042', '\\u1043', '\\u1044', '\\u1045', '\\u1046', '\\u1047', '\\u1048', '\\u1049'],\n orya: ['\\u0B66', '\\u0B67', '\\u0B68', '\\u0B69', '\\u0B6A', '\\u0B6B', '\\u0B6C', '\\u0B6D', '\\u0B6E', '\\u0B6F'],\n tamldec: ['\\u0BE6', '\\u0BE7', '\\u0BE8', '\\u0BE9', '\\u0BEA', '\\u0BEB', '\\u0BEC', '\\u0BED', '\\u0BEE', '\\u0BEF'],\n telu: ['\\u0C66', '\\u0C67', '\\u0C68', '\\u0C69', '\\u0C6A', '\\u0C6B', '\\u0C6C', '\\u0C6D', '\\u0C6E', '\\u0C6F'],\n thai: ['\\u0E50', '\\u0E51', '\\u0E52', '\\u0E53', '\\u0E54', '\\u0E55', '\\u0E56', '\\u0E57', '\\u0E58', '\\u0E59'],\n tibt: ['\\u0F20', '\\u0F21', '\\u0F22', '\\u0F23', '\\u0F24', '\\u0F25', '\\u0F26', '\\u0F27', '\\u0F28', '\\u0F29'],\n};\n\n/**\n * This function provides access to the locale and formatting options computed\n * during initialization of the object.\n *\n * The function returns a new object whose properties and attributes are set as\n * if constructed by an object literal assigning to each of the following\n * properties the value of the corresponding internal property of this\n * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,\n * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and\n * useGrouping. Properties whose corresponding internal properties are not present\n * are not assigned.\n */\n/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {\n configurable: true,\n writable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay',\n 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits',\n 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[['+ props[i] +']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","/* jslint esnext: true */\n\n// Match these datetime components in a CLDR pattern, except those in single quotes\nlet expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n// trim patterns after transformations\nlet expPatternTrimmer = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n// Skip over patterns with these datetime components because we don't have data\n// to back them up:\n// timezone, weekday, amoung others\nlet unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string\n\nlet dtKeys = [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"weekday\", \"quarter\"];\nlet tmKeys = [\"hour\", \"minute\", \"second\", \"hour12\", \"timeZoneName\"];\n\nfunction isDateFormatOnly(obj) {\n for (let i = 0; i < tmKeys.length; i += 1) {\n if (obj.hasOwnProperty(tmKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isTimeFormatOnly(obj) {\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (obj.hasOwnProperty(dtKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {\n let o = { _: {} };\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (dateFormatObj[dtKeys[i]]) {\n o[dtKeys[i]] = dateFormatObj[dtKeys[i]];\n }\n if (dateFormatObj._[dtKeys[i]]) {\n o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];\n }\n }\n for (let j = 0; j < tmKeys.length; j += 1) {\n if (timeFormatObj[tmKeys[j]]) {\n o[tmKeys[j]] = timeFormatObj[tmKeys[j]];\n }\n if (timeFormatObj._[tmKeys[j]]) {\n o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];\n }\n }\n return o;\n}\n\nfunction computeFinalPatterns(formatObj) {\n // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:\n // 'In patterns, two single quotes represents a literal single quote, either\n // inside or outside single quotes. Text within single quotes is not\n // interpreted in any way (except for two adjacent single quotes).'\n formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, ($0, literal) => {\n return literal ? literal : \"'\";\n });\n\n // pattern 12 is always the default. we can produce the 24 by removing {ampm}\n formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');\n return formatObj;\n}\n\nfunction expDTComponentsMeta($0, formatObj) {\n switch ($0.charAt(0)) {\n // --- Era\n case 'G':\n formatObj.era = [ 'short', 'short', 'short', 'long', 'narrow' ][$0.length-1];\n return '{era}';\n\n // --- Year\n case 'y':\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';\n return '{year}';\n\n // --- Quarter (not supported in this polyfill)\n case 'Q':\n case 'q':\n formatObj.quarter = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{quarter}';\n\n // --- Month\n case 'M':\n case 'L':\n formatObj.month = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{month}';\n\n // --- Week (not supported in this polyfill)\n case 'w':\n // week of the year\n formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';\n return '{weekday}';\n case 'W':\n // week of the month\n formatObj.week = 'numeric';\n return '{weekday}';\n\n // --- Day\n case 'd':\n // day of the month\n formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';\n return '{day}';\n case 'D': // day of the year\n case 'F': // day of the week\n case 'g':\n // 1..n: Modified Julian day\n formatObj.day = 'numeric';\n return '{day}';\n\n // --- Week Day\n case 'E':\n // day of the week\n formatObj.weekday = [ 'short', 'short', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'e':\n // local day of the week\n formatObj.weekday = [ 'numeric', '2-digit', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'c':\n // stand alone local day of the week\n formatObj.weekday = [ 'numeric', undefined, 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n\n // --- Period\n case 'a': // AM, PM\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n formatObj.hour12 = true;\n return '{ampm}';\n\n // --- Hour\n case 'h':\n case 'H':\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n case 'k':\n case 'K':\n formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n\n // --- Minute\n case 'm':\n formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';\n return '{minute}';\n\n // --- Second\n case 's':\n formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';\n return '{second}';\n case 'S':\n case 'A':\n formatObj.second = 'numeric';\n return '{second}';\n\n // --- Timezone\n case 'z': // 1..3, 4: specific non-location format\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n // this polyfill only supports much, for now, we are just doing something dummy\n formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';\n return '{timeZoneName}';\n }\n}\n\n\n/**\n * Converts the CLDR availableFormats into the objects and patterns required by\n * the ECMAScript Internationalization API specification.\n */\nexport function createDateTimeFormat(skeleton, pattern) {\n // we ignore certain patterns that are unsupported to avoid this expensive op.\n if (unwantedDTCs.test(pattern))\n return undefined;\n\n let formatObj = {\n originalPattern: pattern,\n _: {},\n };\n\n // Replace the pattern string with the one required by the specification, whilst\n // at the same time evaluating it for the subsets and formats\n formatObj.extendedPattern = pattern.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj._);\n });\n\n // Match the skeleton string with the one required by the specification\n // this implementation is based on the Date Field Symbol Table:\n // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n // Note: we are adding extra data to the formatObject even though this polyfill\n // might not support it.\n skeleton.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj);\n });\n\n return computeFinalPatterns(formatObj);\n}\n\n/**\n * Processes DateTime formats from CLDR to an easier-to-parse format.\n * the result of this operation should be cached the first time a particular\n * calendar is analyzed.\n *\n * The specification requires we support at least the following subsets of\n * date/time components:\n *\n * - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'\n * - 'weekday', 'year', 'month', 'day'\n * - 'year', 'month', 'day'\n * - 'year', 'month'\n * - 'month', 'day'\n * - 'hour', 'minute', 'second'\n * - 'hour', 'minute'\n *\n * We need to cherry pick at least these subsets from the CLDR data and convert\n * them into the pattern objects used in the ECMA-402 API.\n */\nexport function createDateTimeFormats(formats) {\n let availableFormats = formats.availableFormats;\n let timeFormats = formats.timeFormats;\n let dateFormats = formats.dateFormats;\n let result = [];\n let skeleton, pattern, computed, i, j;\n let timeRelatedFormats = [];\n let dateRelatedFormats = [];\n\n // Map available (custom) formats into a pattern for createDateTimeFormats\n for (skeleton in availableFormats) {\n if (availableFormats.hasOwnProperty(skeleton)) {\n pattern = availableFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n // in some cases, the format is only displaying date specific props\n // or time specific props, in which case we need to also produce the\n // combined formats.\n if (isDateFormatOnly(computed)) {\n dateRelatedFormats.push(computed);\n } else if (isTimeFormatOnly(computed)) {\n timeRelatedFormats.push(computed);\n }\n }\n }\n }\n\n // Map time formats into a pattern for createDateTimeFormats\n for (skeleton in timeFormats) {\n if (timeFormats.hasOwnProperty(skeleton)) {\n pattern = timeFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n timeRelatedFormats.push(computed);\n }\n }\n }\n\n // Map date formats into a pattern for createDateTimeFormats\n for (skeleton in dateFormats) {\n if (dateFormats.hasOwnProperty(skeleton)) {\n pattern = dateFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n dateRelatedFormats.push(computed);\n }\n }\n }\n\n // combine custom time and custom date formats when they are orthogonals to complete the\n // formats supported by CLDR.\n // This Algo is based on section \"Missing Skeleton Fields\" from:\n // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n for (i = 0; i < timeRelatedFormats.length; i += 1) {\n for (j = 0; j < dateRelatedFormats.length; j += 1) {\n if (dateRelatedFormats[j].month === 'long') {\n pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;\n } else if (dateRelatedFormats[j].month === 'short') {\n pattern = formats.medium;\n } else {\n pattern = formats.short;\n }\n computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);\n computed.originalPattern = pattern;\n computed.extendedPattern = pattern\n .replace('{0}', timeRelatedFormats[i].extendedPattern)\n .replace('{1}', dateRelatedFormats[j].extendedPattern)\n .replace(/^[,\\s]+|[,\\s]+$/gi, '');\n result.push(computeFinalPatterns(computed));\n }\n }\n\n return result;\n}\n","// 12.1 The Intl.DateTimeFormat constructor\n// ==================================\n\nimport {\n toLatinUpperCase,\n} from './6.locales-currencies-tz.js';\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n ResolveLocale,\n GetOption,\n SupportedLocales,\n} from \"./9.negotiation.js\";\n\nimport {\n FormatNumber,\n} from \"./11.numberformat.js\";\n\nimport {\n createDateTimeFormats,\n} from \"./cldr\";\n\nimport {\n internals,\n es3,\n fnBind,\n defineProperty,\n toObject,\n getInternalProperties,\n createRegExpRestore,\n secret,\n Record,\n List,\n hop,\n objCreate,\n arrPush,\n arrIndexOf,\n} from './util.js';\n\n// An object map of date component keys, saves using a regex later\nconst dateWidths = objCreate(null, { narrow:{}, short:{}, long:{} });\n\n/**\n * Returns a string for a date component, resolved using multiple inheritance as specified\n * as specified in the Unicode Technical Standard 35.\n */\nfunction resolveDateString(data, ca, component, width, key) {\n // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:\n // 'In clearly specified instances, resources may inherit from within the same locale.\n // For example, ... the Buddhist calendar inherits from the Gregorian calendar.'\n let obj = data[ca] && data[ca][component]\n ? data[ca][component]\n : data.gregory[component],\n\n // \"sideways\" inheritance resolves strings when a key doesn't exist\n alts = {\n narrow: ['short', 'long'],\n short: ['long', 'narrow'],\n long: ['short', 'narrow'],\n },\n\n //\n resolved = hop.call(obj, width)\n ? obj[width]\n : hop.call(obj, alts[width][0])\n ? obj[alts[width][0]]\n : obj[alts[width][1]];\n\n // `key` wouldn't be specified for components 'dayPeriods'\n return key !== null ? resolved[key] : resolved;\n}\n\n// Define the DateTimeFormat constructor internally so it cannot be tainted\nexport function DateTimeFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.DateTimeFormat(locales, options);\n }\n return InitializeDateTimeFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'DateTimeFormat', {\n configurable: true,\n writable: true,\n value: DateTimeFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(DateTimeFormatConstructor, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat\n * (which must be an object), locales, and options. It initializes dateTimeFormat as a\n * DateTimeFormat object.\n */\nexport function/* 12.1.1.1 */InitializeDateTimeFormat (dateTimeFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(dateTimeFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(dateTimeFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined below) with arguments options, \"any\", and \"date\".\n options = ToDateTimeOptions(options, 'any', 'date');\n\n // 5. Let opt be a new Record.\n let opt = new Record();\n\n // 6. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with arguments options, \"localeMatcher\", \"string\", a List\n // containing the two String values \"lookup\" and \"best fit\", and \"best fit\".\n let matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 7. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 8. Let DateTimeFormat be the standard built-in object that is the initial\n // value of Intl.DateTimeFormat.\n let DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need\n\n // 9. Let localeData be the value of the [[localeData]] internal property of\n // DateTimeFormat.\n let localeData = DateTimeFormat['[[localeData]]'];\n\n // 10. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of DateTimeFormat, and localeData.\n let r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales,\n opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 11. Set the [[locale]] internal property of dateTimeFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of\n // r.[[ca]].\n internal['[[calendar]]'] = r['[[ca]]'];\n\n // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of\n // r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let tz be the result of calling the [[Get]] internal method of options with\n // argument \"timeZone\".\n let tz = options.timeZone;\n\n // 16. If tz is not undefined, then\n if (tz !== undefined) {\n // a. Let tz be ToString(tz).\n // b. Convert tz to upper case as described in 6.1.\n // NOTE: If an implementation accepts additional time zone values, as permitted\n // under certain conditions by the Conformance clause, different casing\n // rules apply.\n tz = toLatinUpperCase(tz);\n\n // c. If tz is not \"UTC\", then throw a RangeError exception.\n // ###TODO: accept more time zones###\n if (tz !== 'UTC')\n throw new RangeError('timeZone is not supported.');\n }\n\n // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.\n internal['[[timeZone]]'] = tz;\n\n // 18. Let opt be a new Record.\n opt = new Record();\n\n // 19. For each row of Table 3, except the header row, do:\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // 20. Let prop be the name given in the Property column of the row.\n // 21. Let value be the result of calling the GetOption abstract operation,\n // passing as argument options, the name given in the Property column of the\n // row, \"string\", a List containing the strings given in the Values column of\n // the row, and undefined.\n let value = GetOption(options, prop, 'string', dateTimeComponents[prop]);\n\n // 22. Set opt.[[]] to value.\n opt['[['+prop+']]'] = value;\n }\n\n // Assigned a value below\n let bestFormat;\n\n // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 24. Let formats be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"formats\".\n // Note: we process the CLDR formats into the spec'd structure\n let formats = ToDateTimeFormats(dataLocaleData.formats);\n\n // 25. Let matcher be the result of calling the GetOption abstract operation with\n // arguments options, \"formatMatcher\", \"string\", a List containing the two String\n // values \"basic\" and \"best fit\", and \"best fit\".\n matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');\n\n // Optimization: caching the processed formats as a one time operation by\n // replacing the initial structure from localeData\n dataLocaleData.formats = formats;\n\n // 26. If matcher is \"basic\", then\n if (matcher === 'basic') {\n // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract\n // operation (defined below) with opt and formats.\n bestFormat = BasicFormatMatcher(opt, formats);\n\n // 28. Else\n } else {\n {\n // diverging\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n opt.hour12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n }\n // 29. Let bestFormat be the result of calling the BestFitFormatMatcher\n // abstract operation (defined below) with opt and formats.\n bestFormat = BestFitFormatMatcher(opt, formats);\n }\n\n // 30. For each row in Table 3, except the header row, do\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // a. Let prop be the name given in the Property column of the row.\n // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of\n // bestFormat with argument prop.\n // c. If pDesc is not undefined, then\n if (hop.call(bestFormat, prop)) {\n // i. Let p be the result of calling the [[Get]] internal method of bestFormat\n // with argument prop.\n let p = bestFormat[prop];\n {\n // diverging\n p = bestFormat._ && hop.call(bestFormat._, prop) ? bestFormat._[prop] : p;\n }\n\n // ii. Set the [[]] internal property of dateTimeFormat to p.\n internal['[['+prop+']]'] = p;\n }\n }\n\n let pattern; // Assigned a value below\n\n // 31. Let hr12 be the result of calling the GetOption abstract operation with\n // arguments options, \"hour12\", \"boolean\", undefined, and undefined.\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n\n // 32. If dateTimeFormat has an internal property [[hour]], then\n if (internal['[[hour]]']) {\n // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]\n // internal method of dataLocaleData with argument \"hour12\".\n hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n\n // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.\n internal['[[hour12]]'] = hr12;\n\n // c. If hr12 is true, then\n if (hr12 === true) {\n // i. Let hourNo0 be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"hourNo0\".\n let hourNo0 = dataLocaleData.hourNo0;\n\n // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.\n internal['[[hourNo0]]'] = hourNo0;\n\n // iii. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern12\".\n pattern = bestFormat.pattern12;\n }\n\n // d. Else\n else\n // i. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n }\n\n // 33. Else\n else\n // a. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n\n // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.\n internal['[[pattern]]'] = pattern;\n\n // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to\n // true.\n internal['[[initializedDateTimeFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return dateTimeFormat;\n}\n\n/**\n * Several DateTimeFormat algorithms use values from the following table, which provides\n * property names and allowable values for the components of date and time formats:\n */\nlet dateTimeComponents = {\n weekday: [ \"narrow\", \"short\", \"long\" ],\n era: [ \"narrow\", \"short\", \"long\" ],\n year: [ \"2-digit\", \"numeric\" ],\n month: [ \"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\" ],\n day: [ \"2-digit\", \"numeric\" ],\n hour: [ \"2-digit\", \"numeric\" ],\n minute: [ \"2-digit\", \"numeric\" ],\n second: [ \"2-digit\", \"numeric\" ],\n timeZoneName: [ \"short\", \"long\" ],\n};\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeFormats(formats) {\n if (Object.prototype.toString.call(formats) === '[object Array]') {\n return formats;\n }\n return createDateTimeFormats(formats);\n}\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nexport function ToDateTimeOptions (options, required, defaults) {\n // 1. If options is undefined, then let options be null, else let options be\n // ToObject(options).\n if (options === undefined)\n options = null;\n\n else {\n // (#12) options needs to be a Record, but it also needs to inherit properties\n let opt2 = toObject(options);\n options = new Record();\n\n for (let k in opt2)\n options[k] = opt2[k];\n }\n\n // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.\n let create = objCreate;\n\n // 3. Let options be the result of calling the [[Call]] internal method of create with\n // undefined as the this value and an argument list containing the single item\n // options.\n options = create(options);\n\n // 4. Let needDefaults be true.\n let needDefaults = true;\n\n // 5. If required is \"date\" or \"any\", then\n if (required === 'date' || required === 'any') {\n // a. For each of the property names \"weekday\", \"year\", \"month\", \"day\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.weekday !== undefined || options.year !== undefined\n || options.month !== undefined || options.day !== undefined)\n needDefaults = false;\n }\n\n // 6. If required is \"time\" or \"any\", then\n if (required === 'time' || required === 'any') {\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined)\n needDefaults = false;\n }\n\n // 7. If needDefaults is true and defaults is either \"date\" or \"all\", then\n if (needDefaults && (defaults === 'date' || defaults === 'all'))\n // a. For each of the property names \"year\", \"month\", \"day\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.year = options.month = options.day = 'numeric';\n\n // 8. If needDefaults is true and defaults is either \"time\" or \"all\", then\n if (needDefaults && (defaults === 'time' || defaults === 'all'))\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.hour = options.minute = options.second = 'numeric';\n\n // 9. Return options.\n return options;\n}\n\n/**\n * When the BasicFormatMatcher abstract operation is called with two arguments options and\n * formats, the following steps are taken:\n */\nfunction BasicFormatMatcher (options, formats) {\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta === 2)\n score -= longMorePenalty;\n\n // 6. Else if delta = 1, decrease score by shortMorePenalty.\n else if (delta === 1)\n score -= shortMorePenalty;\n\n // 7. Else if delta = -1, decrease score by shortLessPenalty.\n else if (delta === -1)\n score -= shortLessPenalty;\n\n // 8. Else if delta = -2, decrease score by longLessPenalty.\n else if (delta === -2)\n score -= longLessPenalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/**\n * When the BestFitFormatMatcher abstract operation is called with two arguments options\n * and formats, it performs implementation dependent steps, which should return a set of\n * component representations that a typical user of the selected locale would perceive as\n * at least as good as the one returned by BasicFormatMatcher.\n *\n * This polyfill defines the algorithm to be the same as BasicFormatMatcher,\n * with the addition of bonus points awarded where the requested format is of\n * the same data type as the potentially matching format.\n *\n * This algo relies on the concept of closest distance matching described here:\n * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\n * Typically a “best match” is found using a closest distance match, such as:\n *\n * Symbols requesting a best choice for the locale are replaced.\n * j → one of {H, k, h, K}; C → one of {a, b, B}\n * -> Covered by cldr.js matching process\n *\n * For fields with symbols representing the same type (year, month, day, etc):\n * Most symbols have a small distance from each other.\n * M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...\n * -> Covered by cldr.js matching process\n *\n * Width differences among fields, other than those marking text vs numeric, are given small distance from each other.\n * MMM ≅ MMMM\n * MM ≅ M\n * Numeric and text fields are given a larger distance from each other.\n * MMM ≈ MM\n * Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.\n * d ≋ D; ...\n * Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).\n *\n *\n * For example,\n *\n * { month: 'numeric', day: 'numeric' }\n *\n * should match\n *\n * { month: '2-digit', day: '2-digit' }\n *\n * rather than\n *\n * { month: 'short', day: 'numeric' }\n *\n * This makes sense because a user requesting a formatted date with numeric parts would\n * not expect to see the returned format containing narrow, short or long part names\n */\nfunction BestFitFormatMatcher (options, formats) {\n\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n let hour12Penalty = 1;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n {\n // diverging from spec\n // When the bestFit argument is true, subtract additional penalty where data types are not the same\n if ((formatPropIndex <= 1 && optionsPropIndex >= 2) || (formatPropIndex >= 2 && optionsPropIndex <= 1)) {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 0)\n score -= longMorePenalty;\n else if (delta < 0)\n score -= longLessPenalty;\n } else {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 1)\n score -= shortMorePenalty;\n else if (delta < -1)\n score -= shortLessPenalty;\n }\n }\n }\n }\n\n {\n // diverging to also take into consideration differences between 12 or 24 hours\n // which is special for the best fit only.\n if (format._.hour12 !== options.hour12) {\n score -= hour12Penalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/* 12.2.3 */internals.DateTimeFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['ca', 'nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the\n * following steps are taken:\n */\n/* 12.2.2 */\ndefineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * DateTimeFormat object.\n */\n/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatDateTime,\n});\n\ndefineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {\n configurable: true,\n get: GetFormatToPartsDateTime,\n});\n\nfunction GetFormatDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this DateTimeFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 0, that takes the argument date and\n // performs the following steps:\n let F = function () {\n // i. If date is not provided or is undefined, then let x be the\n // result as if by the expression Date.now() where Date.now is\n // the standard built-in function defined in ES5, 15.9.4.4.\n // ii. Else let x be ToNumber(date).\n // iii. Return the result of calling the FormatDateTime abstract\n // operation (defined below) with arguments this and x.\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatDateTime(this, x);\n };\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction GetFormatToPartsDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');\n\n if (internal['[[boundFormatToParts]]'] === undefined) {\n let F = function () {\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatToPartsDateTime(this, x);\n };\n let bf = fnBind.call(F, this);\n internal['[[boundFormatToParts]]'] = bf;\n }\n return internal['[[boundFormatToParts]]'];\n}\n\nfunction CreateDateTimeParts(dateTimeFormat, x) {\n // 1. If x is not a finite Number, then throw a RangeError exception.\n if (!isFinite(x))\n throw new RangeError('Invalid valid date passed to format');\n\n let internal = dateTimeFormat.__getInternalProperties(secret);\n\n // Creating restore point for properties on the RegExp object... please wait\n /* let regexpState = */createRegExpRestore(); // ###TODO: review this\n\n // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.\n let locale = internal['[[locale]]'];\n\n // 3. Let nf be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {useGrouping: false}) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n let nf = new Intl.NumberFormat([locale], {useGrouping: false});\n\n // 4. Let nf2 be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:\n // false}) where Intl.NumberFormat is the standard built-in constructor defined in\n // 11.1.3.\n let nf2 = new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping: false});\n\n // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined\n // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,\n // and the value of the [[timeZone]] internal property of dateTimeFormat.\n let tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);\n\n // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.\n let pattern = internal['[[pattern]]'];\n\n // 7.\n let result = new List();\n\n // 8.\n let index = 0;\n\n // 9.\n let beginIndex = pattern.indexOf('{');\n\n // 10.\n let endIndex = 0;\n\n // Need the locale minus any extensions\n let dataLocale = internal['[[dataLocale]]'];\n\n // Need the calendar data from CLDR\n let localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;\n let ca = internal['[[calendar]]'];\n\n // 11.\n while (beginIndex !== -1) {\n let fv;\n // a.\n endIndex = pattern.indexOf('}', beginIndex);\n // b.\n if (endIndex === -1) {\n throw new Error('Unclosed pattern');\n }\n // c.\n if (beginIndex > index) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(index, beginIndex),\n });\n }\n // d.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // e.\n if (dateTimeComponents.hasOwnProperty(p)) {\n // i. Let f be the value of the [[

]] internal property of dateTimeFormat.\n let f = internal['[['+ p +']]'];\n // ii. Let v be the value of tm.[[

]].\n let v = tm['[['+ p +']]'];\n // iii. If p is \"year\" and v ≤ 0, then let v be 1 - v.\n if (p === 'year' && v <= 0) {\n v = 1 - v;\n }\n // iv. If p is \"month\", then increase v by 1.\n else if (p === 'month') {\n v++;\n }\n // v. If p is \"hour\" and the value of the [[hour12]] internal property of\n // dateTimeFormat is true, then\n else if (p === 'hour' && internal['[[hour12]]'] === true) {\n // 1. Let v be v modulo 12.\n v = v % 12;\n // 2. If v is 0 and the value of the [[hourNo0]] internal property of\n // dateTimeFormat is true, then let v be 12.\n if (v === 0 && internal['[[hourNo0]]'] === true) {\n v = 12;\n }\n }\n\n // vi. If f is \"numeric\", then\n if (f === 'numeric') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments nf and v.\n fv = FormatNumber(nf, v);\n }\n // vii. Else if f is \"2-digit\", then\n else if (f === '2-digit') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // with arguments nf2 and v.\n fv = FormatNumber(nf2, v);\n // 2. If the length of fv is greater than 2, let fv be the substring of fv\n // containing the last two characters.\n if (fv.length > 2) {\n fv = fv.slice(-2);\n }\n }\n // viii. Else if f is \"narrow\", \"short\", or \"long\", then let fv be a String\n // value representing f in the desired form; the String value depends upon\n // the implementation and the effective locale and calendar of\n // dateTimeFormat. If p is \"month\", then the String value may also depend\n // on whether dateTimeFormat has a [[day]] internal property. If p is\n // \"timeZoneName\", then the String value may also depend on the value of\n // the [[inDST]] field of tm.\n else if (f in dateWidths) {\n switch (p) {\n case 'month':\n fv = resolveDateString(localeData, ca, 'months', f, tm['[['+ p +']]']);\n break;\n\n case 'weekday':\n try {\n fv = resolveDateString(localeData, ca, 'days', f, tm['[['+ p +']]']);\n // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];\n } catch (e) {\n throw new Error('Could not find weekday data for locale '+locale);\n }\n break;\n\n case 'timeZoneName':\n fv = ''; // ###TODO\n break;\n\n case 'era':\n try {\n fv = resolveDateString(localeData, ca, 'eras', f, tm['[['+ p +']]']);\n } catch (e) {\n throw new Error('Could not find era data for locale '+locale);\n }\n break;\n\n default:\n fv = tm['[['+ p +']]'];\n }\n }\n // ix\n arrPush.call(result, {\n type: p,\n value: fv,\n });\n // f.\n } else if (p === 'ampm') {\n // i.\n let v = tm['[[hour]]'];\n // ii./iii.\n fv = resolveDateString(localeData, ca, 'dayPeriods', v > 11 ? 'pm' : 'am', null);\n // iv.\n arrPush.call(result, {\n type: 'dayPeriod',\n value: fv,\n });\n // g.\n } else {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(beginIndex, endIndex + 1),\n });\n }\n // h.\n index = endIndex + 1;\n // i.\n beginIndex = pattern.indexOf('{', index);\n }\n // 12.\n if (endIndex < pattern.length - 1) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substr(endIndex + 1),\n });\n }\n // 13.\n return result;\n}\n\n/**\n * When the FormatDateTime abstract operation is called with arguments dateTimeFormat\n * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number\n * value), it returns a String value representing x (interpreted as a time value as\n * specified in ES5, 15.9.1.1) according to the effective locale and the formatting\n * options of dateTimeFormat.\n */\nexport function FormatDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = '';\n\n for (let part in parts) {\n result += parts[part].value;\n }\n return result;\n}\n\nfunction FormatToPartsDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = [];\n for (let part in parts) {\n result.push({\n type: parts[part].type,\n value: parts[part].value,\n });\n }\n return result;\n}\n\n\n/**\n * When the ToLocalTime abstract operation is called with arguments date, calendar, and\n * timeZone, the following steps are taken:\n */\nfunction ToLocalTime(date, calendar, timeZone) {\n // 1. Apply calendrical calculations on date for the given calendar and time zone to\n // produce weekday, era, year, month, day, hour, minute, second, and inDST values.\n // The calculations should use best available information about the specified\n // calendar and time zone. If the calendar is \"gregory\", then the calculations must\n // match the algorithms specified in ES5, 15.9.1, except that calculations are not\n // bound by the restrictions on the use of best available information on time zones\n // for local time zone adjustment and daylight saving time adjustment imposed by\n // ES5, 15.9.1.7 and 15.9.1.8.\n // ###TODO###\n let d = new Date(date),\n m = 'get' + (timeZone || '');\n\n // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],\n // [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding\n // calculated value.\n return new Record({\n '[[weekday]]': d[m + 'Day'](),\n '[[era]]' : +(d[m + 'FullYear']() >= 0),\n '[[year]]' : d[m + 'FullYear'](),\n '[[month]]' : d[m + 'Month'](),\n '[[day]]' : d[m + 'Date'](),\n '[[hour]]' : d[m + 'Hours'](),\n '[[minute]]' : d[m + 'Minutes'](),\n '[[second]]' : d[m + 'Seconds'](),\n '[[inDST]]' : false, // ###TODO###\n });\n}\n\n/**\n * The function returns a new object whose properties and attributes are set as if\n * constructed by an object literal assigning to each of the following properties the\n * value of the corresponding internal property of this DateTimeFormat object (see 12.4):\n * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,\n * hour, minute, second, and timeZoneName. Properties whose corresponding internal\n * properties are not present are not assigned.\n */\n/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {\n writable: true,\n configurable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday',\n 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","// Sect 13 Locale Sensitive Functions of the ECMAScript Language Specification\n// ===========================================================================\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n FormatNumber,\n NumberFormatConstructor,\n} from \"./11.numberformat.js\";\n\nimport {\n ToDateTimeOptions,\n DateTimeFormatConstructor,\n FormatDateTime,\n} from \"./12.datetimeformat.js\";\n\nlet ls = Intl.__localeSensitiveProtos = {\n Number: {},\n Date: {},\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.2.1 */ls.Number.toLocaleString = function () {\n // Satisfy test 13.2.1_1\n if (Object.prototype.toString.call(this) !== '[object Number]')\n throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');\n\n // 1. Let x be this Number value (as defined in ES5, 15.7.4).\n // 2. If locales is not provided, then let locales be undefined.\n // 3. If options is not provided, then let options be undefined.\n // 4. Let numberFormat be the result of creating a new object as if by the\n // expression new Intl.NumberFormat(locales, options) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n // 5. Return the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments numberFormat and x.\n return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.3.1 */ls.Date.toLocaleString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"any\", and \"all\".\n options = ToDateTimeOptions(options, 'any', 'all');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleDateString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.2 */ls.Date.toLocaleDateString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0],\n\n // 4. If options is not provided, then let options be undefined.\n options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"date\", and \"date\".\n options = ToDateTimeOptions(options, 'date', 'date');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleTimeString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.3 */ls.Date.toLocaleTimeString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"time\", and \"time\".\n options = ToDateTimeOptions(options, 'time', 'time');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\nexport default ls;\n","/**\n * @license Copyright 2013 Andy Earnshaw, MIT License\n *\n * Implements the ECMAScript Internationalization API in ES5-compatible environments,\n * following the ECMA-402 specification as closely as possible\n *\n * ECMA-402: http://ecma-international.org/ecma-402/1.0/\n *\n * CLDR format locale data should be provided using IntlPolyfill.__addLocaleData().\n */\n\nimport {\n defineProperty,\n hop,\n arrPush,\n arrShift,\n internals,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n defaultLocale,\n setDefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport \"./11.numberformat.js\";\n\nimport \"./12.datetimeformat.js\";\n\nimport ls from \"./13.locale-sensitive-functions.js\";\n\ndefineProperty(Intl, '__applyLocaleSensitivePrototypes', {\n writable: true,\n configurable: true,\n value: function () {\n defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });\n // Need this here for IE 8, to avoid the _DontEnum_ bug\n defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });\n\n for (let k in ls.Date) {\n if (hop.call(ls.Date, k))\n defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });\n }\n },\n});\n\n/**\n * Can't really ship a single script with data for hundreds of locales, so we provide\n * this __addLocaleData method as a means for the developer to add the data on an\n * as-needed basis\n */\ndefineProperty(Intl, '__addLocaleData', {\n value: function (data) {\n if (!IsStructurallyValidLanguageTag(data.locale))\n throw new Error(\"Object passed doesn't identify itself with a valid language tag\");\n\n addLocaleData(data, data.locale);\n },\n});\n\nfunction addLocaleData (data, tag) {\n // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present\n if (!data.number)\n throw new Error(\"Object passed doesn't contain locale data for Intl.NumberFormat\");\n\n let locale,\n locales = [ tag ],\n parts = tag.split('-');\n\n // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc\n if (parts.length > 2 && parts[1].length === 4)\n arrPush.call(locales, parts[0] + '-' + parts[2]);\n\n while ((locale = arrShift.call(locales))) {\n // Add to NumberFormat internal properties as per 11.2.3\n arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);\n internals.NumberFormat['[[localeData]]'][locale] = data.number;\n\n // ...and DateTimeFormat internal properties as per 12.2.3\n if (data.date) {\n data.date.nu = data.number.nu;\n arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);\n internals.DateTimeFormat['[[localeData]]'][locale] = data.date;\n }\n }\n\n // If this is the first set of locale data added, make it the default\n if (defaultLocale === undefined)\n setDefaultLocale(tag);\n}\n\nexport default Intl;\n","import IntlPolyfill from \"./core.js\";\n\n// hack to export the polyfill as global Intl if needed\nif (typeof Intl !== 'undefined') {\n try {\n Intl = IntlPolyfill;\n IntlPolyfill.__applyLocaleSensitivePrototypes();\n } catch (e) {\n // can be read only property\n }\n}\n\nexport default IntlPolyfill;\n"],"names":["Intl","IntlPolyfill"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"Intl.js","sources":["../src/util.js","../src/exp.js","../src/6.locales-currencies-tz.js","../src/9.negotiation.js","../src/8.intl.js","../src/11.numberformat.js","../src/cldr.js","../src/12.datetimeformat.js","../src/13.locale-sensitive-functions.js","../src/core.js","../src/main.js"],"sourcesContent":["const realDefineProp = (function () {\n let sentinel = {};\n try {\n Object.defineProperty(sentinel, 'a', {});\n return 'a' in sentinel;\n } catch (e) {\n return false;\n }\n })();\n\n// Need a workaround for getters in ES3\nexport const es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\n// We use this a lot (and need it for proto-less objects)\nexport const hop = Object.prototype.hasOwnProperty;\n\n// Naive defineProperty for compatibility\nexport const defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {\n if ('get' in desc && obj.__defineGetter__)\n obj.__defineGetter__(name, desc.get);\n\n else if (!hop.call(obj, name) || 'value' in desc)\n obj[name] = desc.value;\n};\n\n// Array.prototype.indexOf, as good as we need it to be\nexport const arrIndexOf = Array.prototype.indexOf || function (search) {\n /*jshint validthis:true */\n let t = this;\n if (!t.length)\n return -1;\n\n for (let i = arguments[1] || 0, max = t.length; i < max; i++) {\n if (t[i] === search)\n return i;\n }\n\n return -1;\n};\n\n// Create an object with the specified prototype (2nd arg required for Record)\nexport const objCreate = Object.create || function (proto, props) {\n let obj;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (let k in props) {\n if (hop.call(props, k))\n defineProperty(obj, k, props[k]);\n }\n\n return obj;\n};\n\n// Snapshot some (hopefully still) native built-ins\nexport const arrSlice = Array.prototype.slice;\nexport const arrConcat = Array.prototype.concat;\nexport const arrPush = Array.prototype.push;\nexport const arrJoin = Array.prototype.join;\nexport const arrShift = Array.prototype.shift;\n\n// Naive Function.prototype.bind for compatibility\nexport const fnBind = Function.prototype.bind || function (thisObj) {\n let fn = this,\n args = arrSlice.call(arguments, 1);\n\n // All our (presently) bound functions have either 1 or 0 arguments. By returning\n // different function signatures, we can pass some tests in ES3 environments\n if (fn.length === 1) {\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n }\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n};\n\n// Object housing internal properties for constructors\nexport const internals = objCreate(null);\n\n// Keep internal properties internal\nexport const secret = Math.random();\n\n// Helper functions\n// ================\n\n/**\n * A function to deal with the inaccuracy of calculating log10 in pre-ES6\n * JavaScript environments. Math.log(num) / Math.LN10 was responsible for\n * causing issue #62.\n */\nexport function log10Floor (n) {\n // ES6 provides the more accurate Math.log10\n if (typeof Math.log10 === 'function')\n return Math.floor(Math.log10(n));\n\n let x = Math.round(Math.log(n) * Math.LOG10E);\n return x - (Number('1e' + x) > n);\n}\n\n/**\n * A map that doesn't contain Object in its prototype chain\n */\nexport function Record (obj) {\n // Copy only own properties over unless this object is already a Record instance\n for (let k in obj) {\n if (obj instanceof Record || hop.call(obj, k))\n defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });\n }\n}\nRecord.prototype = objCreate(null);\n\n/**\n * An ordered list\n */\nexport function List() {\n defineProperty(this, 'length', { writable:true, value: 0 });\n\n if (arguments.length)\n arrPush.apply(this, arrSlice.call(arguments));\n}\nList.prototype = objCreate(null);\n\n/**\n * Constructs a regular expression to restore tainted RegExp properties\n */\nexport function createRegExpRestore () {\n let esc = /[.?*+^$[\\]\\\\(){}|-]/g,\n lm = RegExp.lastMatch || '',\n ml = RegExp.multiline ? 'm' : '',\n ret = { input: RegExp.input },\n reg = new List(),\n has = false,\n cap = {};\n\n // Create a snapshot of all the 'captured' properties\n for (let i = 1; i <= 9; i++)\n has = (cap['$'+i] = RegExp['$'+i]) || has;\n\n // Now we've snapshotted some properties, escape the lastMatch string\n lm = lm.replace(esc, '\\\\$&');\n\n // If any of the captured strings were non-empty, iterate over them all\n if (has) {\n for (let i = 1; i <= 9; i++) {\n let m = cap['$'+i];\n\n // If it's empty, add an empty capturing group\n if (!m)\n lm = '()' + lm;\n\n // Else find the string in lm and escape & wrap it to capture it\n else {\n m = m.replace(esc, '\\\\$&');\n lm = lm.replace(m, '(' + m + ')');\n }\n\n // Push it to the reg and chop lm to make sure further groups come after\n arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));\n lm = lm.slice(lm.indexOf('(') + 1);\n }\n }\n\n // Create the regular expression that will reconstruct the RegExp properties\n ret.exp = new RegExp(arrJoin.call(reg, '') + lm, ml);\n\n return ret;\n}\n\n/**\n * Mimics ES5's abstract ToObject() function\n */\nexport function toObject (arg) {\n if (arg === null)\n throw new TypeError('Cannot convert null or undefined to object');\n\n return Object(arg);\n}\n\n/**\n * Returns \"internal\" properties for an object\n */\nexport function getInternalProperties (obj) {\n if (hop.call(obj, '__getInternalProperties'))\n return obj.__getInternalProperties(secret);\n\n return objCreate(null);\n}\n","/**\n* Defines regular expressions for various operations related to the BCP 47 syntax,\n* as defined at http://tools.ietf.org/html/bcp47#section-2.1\n*/\n\n// extlang = 3ALPHA ; selected ISO 639 codes\n// *2(\"-\" 3ALPHA) ; permanently reserved\nconst extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';\n\n// language = 2*3ALPHA ; shortest ISO 639 code\n// [\"-\" extlang] ; sometimes followed by\n// ; extended language subtags\n// / 4ALPHA ; or reserved for future use\n// / 5*8ALPHA ; or registered language subtag\nconst language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';\n\n// script = 4ALPHA ; ISO 15924 code\nconst script = '[a-z]{4}';\n\n// region = 2ALPHA ; ISO 3166-1 code\n// / 3DIGIT ; UN M.49 code\nconst region = '(?:[a-z]{2}|\\\\d{3})';\n\n// variant = 5*8alphanum ; registered variants\n// / (DIGIT 3alphanum)\nconst variant = '(?:[a-z0-9]{5,8}|\\\\d[a-z0-9]{3})';\n\n// ; Single alphanumerics\n// ; \"x\" reserved for private use\n// singleton = DIGIT ; 0 - 9\n// / %x41-57 ; A - W\n// / %x59-5A ; Y - Z\n// / %x61-77 ; a - w\n// / %x79-7A ; y - z\nconst singleton = '[0-9a-wy-z]';\n\n// extension = singleton 1*(\"-\" (2*8alphanum))\nconst extension = singleton + '(?:-[a-z0-9]{2,8})+';\n\n// privateuse = \"x\" 1*(\"-\" (1*8alphanum))\nconst privateuse = 'x(?:-[a-z0-9]{1,8})+';\n\n// irregular = \"en-GB-oed\" ; irregular tags do not match\n// / \"i-ami\" ; the 'langtag' production and\n// / \"i-bnn\" ; would not otherwise be\n// / \"i-default\" ; considered 'well-formed'\n// / \"i-enochian\" ; These tags are all valid,\n// / \"i-hak\" ; but most are deprecated\n// / \"i-klingon\" ; in favor of more modern\n// / \"i-lux\" ; subtags or subtag\n// / \"i-mingo\" ; combination\n// / \"i-navajo\"\n// / \"i-pwn\"\n// / \"i-tao\"\n// / \"i-tay\"\n// / \"i-tsu\"\n// / \"sgn-BE-FR\"\n// / \"sgn-BE-NL\"\n// / \"sgn-CH-DE\"\nconst irregular = '(?:en-GB-oed'\n + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)'\n + '|sgn-(?:BE-FR|BE-NL|CH-DE))';\n\n// regular = \"art-lojban\" ; these tags match the 'langtag'\n// / \"cel-gaulish\" ; production, but their subtags\n// / \"no-bok\" ; are not extended language\n// / \"no-nyn\" ; or variant subtags: their meaning\n// / \"zh-guoyu\" ; is defined by their registration\n// / \"zh-hakka\" ; and all of these are deprecated\n// / \"zh-min\" ; in favor of a more modern\n// / \"zh-min-nan\" ; subtag or sequence of subtags\n// / \"zh-xiang\"\nconst regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn'\n + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';\n\n// grandfathered = irregular ; non-redundant tags registered\n// / regular ; during the RFC 3066 era\nconst grandfathered = '(?:' + irregular + '|' + regular + ')';\n\n// langtag = language\n// [\"-\" script]\n// [\"-\" region]\n// *(\"-\" variant)\n// *(\"-\" extension)\n// [\"-\" privateuse]\nconst langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-'\n + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';\n\n// Language-Tag = langtag ; normal language tags\n// / privateuse ; private use tag\n// / grandfathered ; grandfathered tags\nexport let expBCP47Syntax = RegExp('^(?:'+langtag+'|'+privateuse+'|'+grandfathered+')$', 'i');\n\n// Match duplicate variants in a language tag\nexport let expVariantDupes = RegExp('^(?!x).*?-('+variant+')-(?:\\\\w{4,8}-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match duplicate singletons in a language tag (except in private use)\nexport let expSingletonDupes = RegExp('^(?!x).*?-('+singleton+')-(?:\\\\w+-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match all extension sequences\nexport let expExtSequences = RegExp('-'+extension, 'ig');\n","// Sect 6.2 Language Tags\n// ======================\n\nimport {\n expBCP47Syntax,\n expExtSequences,\n expVariantDupes,\n expSingletonDupes,\n} from './exp';\n\nimport {\n hop,\n arrJoin,\n arrSlice,\n} from \"./util.js\";\n\n// Default locale is the first-added locale data for us\nexport let defaultLocale;\nexport function setDefaultLocale(locale) {\n defaultLocale = locale;\n}\n\n// IANA Subtag Registry redundant tag and subtag maps\nconst redundantTags = {\n tags: {\n \"art-lojban\": \"jbo\",\n \"i-ami\": \"ami\",\n \"i-bnn\": \"bnn\",\n \"i-hak\": \"hak\",\n \"i-klingon\": \"tlh\",\n \"i-lux\": \"lb\",\n \"i-navajo\": \"nv\",\n \"i-pwn\": \"pwn\",\n \"i-tao\": \"tao\",\n \"i-tay\": \"tay\",\n \"i-tsu\": \"tsu\",\n \"no-bok\": \"nb\",\n \"no-nyn\": \"nn\",\n \"sgn-BE-FR\": \"sfb\",\n \"sgn-BE-NL\": \"vgt\",\n \"sgn-CH-DE\": \"sgg\",\n \"zh-guoyu\": \"cmn\",\n \"zh-hakka\": \"hak\",\n \"zh-min-nan\": \"nan\",\n \"zh-xiang\": \"hsn\",\n \"sgn-BR\": \"bzs\",\n \"sgn-CO\": \"csn\",\n \"sgn-DE\": \"gsg\",\n \"sgn-DK\": \"dsl\",\n \"sgn-ES\": \"ssp\",\n \"sgn-FR\": \"fsl\",\n \"sgn-GB\": \"bfi\",\n \"sgn-GR\": \"gss\",\n \"sgn-IE\": \"isg\",\n \"sgn-IT\": \"ise\",\n \"sgn-JP\": \"jsl\",\n \"sgn-MX\": \"mfs\",\n \"sgn-NI\": \"ncs\",\n \"sgn-NL\": \"dse\",\n \"sgn-NO\": \"nsl\",\n \"sgn-PT\": \"psr\",\n \"sgn-SE\": \"swl\",\n \"sgn-US\": \"ase\",\n \"sgn-ZA\": \"sfs\",\n \"zh-cmn\": \"cmn\",\n \"zh-cmn-Hans\": \"cmn-Hans\",\n \"zh-cmn-Hant\": \"cmn-Hant\",\n \"zh-gan\": \"gan\",\n \"zh-wuu\": \"wuu\",\n \"zh-yue\": \"yue\",\n },\n subtags: {\n BU: \"MM\",\n DD: \"DE\",\n FX: \"FR\",\n TP: \"TL\",\n YD: \"YE\",\n ZR: \"CD\",\n heploc: \"alalc97\",\n 'in': \"id\",\n iw: \"he\",\n ji: \"yi\",\n jw: \"jv\",\n mo: \"ro\",\n ayx: \"nun\",\n bjd: \"drl\",\n ccq: \"rki\",\n cjr: \"mom\",\n cka: \"cmr\",\n cmk: \"xch\",\n drh: \"khk\",\n drw: \"prs\",\n gav: \"dev\",\n hrr: \"jal\",\n ibi: \"opa\",\n kgh: \"kml\",\n lcq: \"ppr\",\n mst: \"mry\",\n myt: \"mry\",\n sca: \"hle\",\n tie: \"ras\",\n tkk: \"twm\",\n tlw: \"weo\",\n tnf: \"prs\",\n ybd: \"rki\",\n yma: \"lrr\",\n },\n extLang: {\n aao: [\"aao\", \"ar\"],\n abh: [\"abh\", \"ar\"],\n abv: [\"abv\", \"ar\"],\n acm: [\"acm\", \"ar\"],\n acq: [\"acq\", \"ar\"],\n acw: [\"acw\", \"ar\"],\n acx: [\"acx\", \"ar\"],\n acy: [\"acy\", \"ar\"],\n adf: [\"adf\", \"ar\"],\n ads: [\"ads\", \"sgn\"],\n aeb: [\"aeb\", \"ar\"],\n aec: [\"aec\", \"ar\"],\n aed: [\"aed\", \"sgn\"],\n aen: [\"aen\", \"sgn\"],\n afb: [\"afb\", \"ar\"],\n afg: [\"afg\", \"sgn\"],\n ajp: [\"ajp\", \"ar\"],\n apc: [\"apc\", \"ar\"],\n apd: [\"apd\", \"ar\"],\n arb: [\"arb\", \"ar\"],\n arq: [\"arq\", \"ar\"],\n ars: [\"ars\", \"ar\"],\n ary: [\"ary\", \"ar\"],\n arz: [\"arz\", \"ar\"],\n ase: [\"ase\", \"sgn\"],\n asf: [\"asf\", \"sgn\"],\n asp: [\"asp\", \"sgn\"],\n asq: [\"asq\", \"sgn\"],\n asw: [\"asw\", \"sgn\"],\n auz: [\"auz\", \"ar\"],\n avl: [\"avl\", \"ar\"],\n ayh: [\"ayh\", \"ar\"],\n ayl: [\"ayl\", \"ar\"],\n ayn: [\"ayn\", \"ar\"],\n ayp: [\"ayp\", \"ar\"],\n bbz: [\"bbz\", \"ar\"],\n bfi: [\"bfi\", \"sgn\"],\n bfk: [\"bfk\", \"sgn\"],\n bjn: [\"bjn\", \"ms\"],\n bog: [\"bog\", \"sgn\"],\n bqn: [\"bqn\", \"sgn\"],\n bqy: [\"bqy\", \"sgn\"],\n btj: [\"btj\", \"ms\"],\n bve: [\"bve\", \"ms\"],\n bvl: [\"bvl\", \"sgn\"],\n bvu: [\"bvu\", \"ms\"],\n bzs: [\"bzs\", \"sgn\"],\n cdo: [\"cdo\", \"zh\"],\n cds: [\"cds\", \"sgn\"],\n cjy: [\"cjy\", \"zh\"],\n cmn: [\"cmn\", \"zh\"],\n coa: [\"coa\", \"ms\"],\n cpx: [\"cpx\", \"zh\"],\n csc: [\"csc\", \"sgn\"],\n csd: [\"csd\", \"sgn\"],\n cse: [\"cse\", \"sgn\"],\n csf: [\"csf\", \"sgn\"],\n csg: [\"csg\", \"sgn\"],\n csl: [\"csl\", \"sgn\"],\n csn: [\"csn\", \"sgn\"],\n csq: [\"csq\", \"sgn\"],\n csr: [\"csr\", \"sgn\"],\n czh: [\"czh\", \"zh\"],\n czo: [\"czo\", \"zh\"],\n doq: [\"doq\", \"sgn\"],\n dse: [\"dse\", \"sgn\"],\n dsl: [\"dsl\", \"sgn\"],\n dup: [\"dup\", \"ms\"],\n ecs: [\"ecs\", \"sgn\"],\n esl: [\"esl\", \"sgn\"],\n esn: [\"esn\", \"sgn\"],\n eso: [\"eso\", \"sgn\"],\n eth: [\"eth\", \"sgn\"],\n fcs: [\"fcs\", \"sgn\"],\n fse: [\"fse\", \"sgn\"],\n fsl: [\"fsl\", \"sgn\"],\n fss: [\"fss\", \"sgn\"],\n gan: [\"gan\", \"zh\"],\n gds: [\"gds\", \"sgn\"],\n gom: [\"gom\", \"kok\"],\n gse: [\"gse\", \"sgn\"],\n gsg: [\"gsg\", \"sgn\"],\n gsm: [\"gsm\", \"sgn\"],\n gss: [\"gss\", \"sgn\"],\n gus: [\"gus\", \"sgn\"],\n hab: [\"hab\", \"sgn\"],\n haf: [\"haf\", \"sgn\"],\n hak: [\"hak\", \"zh\"],\n hds: [\"hds\", \"sgn\"],\n hji: [\"hji\", \"ms\"],\n hks: [\"hks\", \"sgn\"],\n hos: [\"hos\", \"sgn\"],\n hps: [\"hps\", \"sgn\"],\n hsh: [\"hsh\", \"sgn\"],\n hsl: [\"hsl\", \"sgn\"],\n hsn: [\"hsn\", \"zh\"],\n icl: [\"icl\", \"sgn\"],\n ils: [\"ils\", \"sgn\"],\n inl: [\"inl\", \"sgn\"],\n ins: [\"ins\", \"sgn\"],\n ise: [\"ise\", \"sgn\"],\n isg: [\"isg\", \"sgn\"],\n isr: [\"isr\", \"sgn\"],\n jak: [\"jak\", \"ms\"],\n jax: [\"jax\", \"ms\"],\n jcs: [\"jcs\", \"sgn\"],\n jhs: [\"jhs\", \"sgn\"],\n jls: [\"jls\", \"sgn\"],\n jos: [\"jos\", \"sgn\"],\n jsl: [\"jsl\", \"sgn\"],\n jus: [\"jus\", \"sgn\"],\n kgi: [\"kgi\", \"sgn\"],\n knn: [\"knn\", \"kok\"],\n kvb: [\"kvb\", \"ms\"],\n kvk: [\"kvk\", \"sgn\"],\n kvr: [\"kvr\", \"ms\"],\n kxd: [\"kxd\", \"ms\"],\n lbs: [\"lbs\", \"sgn\"],\n lce: [\"lce\", \"ms\"],\n lcf: [\"lcf\", \"ms\"],\n liw: [\"liw\", \"ms\"],\n lls: [\"lls\", \"sgn\"],\n lsg: [\"lsg\", \"sgn\"],\n lsl: [\"lsl\", \"sgn\"],\n lso: [\"lso\", \"sgn\"],\n lsp: [\"lsp\", \"sgn\"],\n lst: [\"lst\", \"sgn\"],\n lsy: [\"lsy\", \"sgn\"],\n ltg: [\"ltg\", \"lv\"],\n lvs: [\"lvs\", \"lv\"],\n lzh: [\"lzh\", \"zh\"],\n max: [\"max\", \"ms\"],\n mdl: [\"mdl\", \"sgn\"],\n meo: [\"meo\", \"ms\"],\n mfa: [\"mfa\", \"ms\"],\n mfb: [\"mfb\", \"ms\"],\n mfs: [\"mfs\", \"sgn\"],\n min: [\"min\", \"ms\"],\n mnp: [\"mnp\", \"zh\"],\n mqg: [\"mqg\", \"ms\"],\n mre: [\"mre\", \"sgn\"],\n msd: [\"msd\", \"sgn\"],\n msi: [\"msi\", \"ms\"],\n msr: [\"msr\", \"sgn\"],\n mui: [\"mui\", \"ms\"],\n mzc: [\"mzc\", \"sgn\"],\n mzg: [\"mzg\", \"sgn\"],\n mzy: [\"mzy\", \"sgn\"],\n nan: [\"nan\", \"zh\"],\n nbs: [\"nbs\", \"sgn\"],\n ncs: [\"ncs\", \"sgn\"],\n nsi: [\"nsi\", \"sgn\"],\n nsl: [\"nsl\", \"sgn\"],\n nsp: [\"nsp\", \"sgn\"],\n nsr: [\"nsr\", \"sgn\"],\n nzs: [\"nzs\", \"sgn\"],\n okl: [\"okl\", \"sgn\"],\n orn: [\"orn\", \"ms\"],\n ors: [\"ors\", \"ms\"],\n pel: [\"pel\", \"ms\"],\n pga: [\"pga\", \"ar\"],\n pks: [\"pks\", \"sgn\"],\n prl: [\"prl\", \"sgn\"],\n prz: [\"prz\", \"sgn\"],\n psc: [\"psc\", \"sgn\"],\n psd: [\"psd\", \"sgn\"],\n pse: [\"pse\", \"ms\"],\n psg: [\"psg\", \"sgn\"],\n psl: [\"psl\", \"sgn\"],\n pso: [\"pso\", \"sgn\"],\n psp: [\"psp\", \"sgn\"],\n psr: [\"psr\", \"sgn\"],\n pys: [\"pys\", \"sgn\"],\n rms: [\"rms\", \"sgn\"],\n rsi: [\"rsi\", \"sgn\"],\n rsl: [\"rsl\", \"sgn\"],\n sdl: [\"sdl\", \"sgn\"],\n sfb: [\"sfb\", \"sgn\"],\n sfs: [\"sfs\", \"sgn\"],\n sgg: [\"sgg\", \"sgn\"],\n sgx: [\"sgx\", \"sgn\"],\n shu: [\"shu\", \"ar\"],\n slf: [\"slf\", \"sgn\"],\n sls: [\"sls\", \"sgn\"],\n sqk: [\"sqk\", \"sgn\"],\n sqs: [\"sqs\", \"sgn\"],\n ssh: [\"ssh\", \"ar\"],\n ssp: [\"ssp\", \"sgn\"],\n ssr: [\"ssr\", \"sgn\"],\n svk: [\"svk\", \"sgn\"],\n swc: [\"swc\", \"sw\"],\n swh: [\"swh\", \"sw\"],\n swl: [\"swl\", \"sgn\"],\n syy: [\"syy\", \"sgn\"],\n tmw: [\"tmw\", \"ms\"],\n tse: [\"tse\", \"sgn\"],\n tsm: [\"tsm\", \"sgn\"],\n tsq: [\"tsq\", \"sgn\"],\n tss: [\"tss\", \"sgn\"],\n tsy: [\"tsy\", \"sgn\"],\n tza: [\"tza\", \"sgn\"],\n ugn: [\"ugn\", \"sgn\"],\n ugy: [\"ugy\", \"sgn\"],\n ukl: [\"ukl\", \"sgn\"],\n uks: [\"uks\", \"sgn\"],\n urk: [\"urk\", \"ms\"],\n uzn: [\"uzn\", \"uz\"],\n uzs: [\"uzs\", \"uz\"],\n vgt: [\"vgt\", \"sgn\"],\n vkk: [\"vkk\", \"ms\"],\n vkt: [\"vkt\", \"ms\"],\n vsi: [\"vsi\", \"sgn\"],\n vsl: [\"vsl\", \"sgn\"],\n vsv: [\"vsv\", \"sgn\"],\n wuu: [\"wuu\", \"zh\"],\n xki: [\"xki\", \"sgn\"],\n xml: [\"xml\", \"sgn\"],\n xmm: [\"xmm\", \"ms\"],\n xms: [\"xms\", \"sgn\"],\n yds: [\"yds\", \"sgn\"],\n ysl: [\"ysl\", \"sgn\"],\n yue: [\"yue\", \"zh\"],\n zib: [\"zib\", \"sgn\"],\n zlm: [\"zlm\", \"ms\"],\n zmi: [\"zmi\", \"ms\"],\n zsl: [\"zsl\", \"sgn\"],\n zsm: [\"zsm\", \"ms\"],\n },\n};\n\n/**\n * Convert only a-z to uppercase as per section 6.1 of the spec\n */\nexport function toLatinUpperCase (str) {\n let i = str.length;\n\n while (i--) {\n let ch = str.charAt(i);\n\n if (ch >= \"a\" && ch <= \"z\")\n str = str.slice(0, i) + ch.toUpperCase() + str.slice(i+1);\n }\n\n return str;\n}\n\n/**\n * The IsStructurallyValidLanguageTag abstract operation verifies that the locale\n * argument (which must be a String value)\n *\n * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section\n * 2.1, or successor,\n * - does not include duplicate variant subtags, and\n * - does not include duplicate singleton subtags.\n *\n * The abstract operation returns true if locale can be generated from the ABNF\n * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not\n * contain duplicate variant or singleton subtags (other than as a private use\n * subtag). It returns false otherwise. Terminal value characters in the grammar are\n * interpreted as the Unicode equivalents of the ASCII octet values given.\n */\nexport function /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {\n // represents a well-formed BCP 47 language tag as specified in RFC 5646\n if (!expBCP47Syntax.test(locale))\n return false;\n\n // does not include duplicate variant subtags, and\n if (expVariantDupes.test(locale))\n return false;\n\n // does not include duplicate singleton subtags.\n if (expSingletonDupes.test(locale))\n return false;\n\n return true;\n}\n\n/**\n * The CanonicalizeLanguageTag abstract operation returns the canonical and case-\n * regularized form of the locale argument (which must be a String value that is\n * a structurally valid BCP 47 language tag as verified by the\n * IsStructurallyValidLanguageTag abstract operation). It takes the steps\n * specified in RFC 5646 section 4.5, or successor, to bring the language tag\n * into canonical form, and to regularize the case of the subtags, but does not\n * take the steps to bring a language tag into “extlang form” and to reorder\n * variant subtags.\n\n * The specifications for extensions to BCP 47 language tags, such as RFC 6067,\n * may include canonicalization rules for the extension subtag sequences they\n * define that go beyond the canonicalization rules of RFC 5646 section 4.5.\n * Implementations are allowed, but not required, to apply these additional rules.\n */\nexport function /* 6.2.3 */CanonicalizeLanguageTag (locale) {\n let match, parts;\n\n // A language tag is in 'canonical form' when the tag is well-formed\n // according to the rules in Sections 2.1 and 2.2\n\n // Section 2.1 says all subtags use lowercase...\n locale = locale.toLowerCase();\n\n // ...with 2 exceptions: 'two-letter and four-letter subtags that neither\n // appear at the start of the tag nor occur after singletons. Such two-letter\n // subtags are all uppercase (as in the tags \"en-CA-x-ca\" or \"sgn-BE-FR\") and\n // four-letter subtags are titlecase (as in the tag \"az-Latn-x-latn\").\n parts = locale.split('-');\n for (let i = 1, max = parts.length; i < max; i++) {\n // Two-letter subtags are all uppercase\n if (parts[i].length === 2)\n parts[i] = parts[i].toUpperCase();\n\n // Four-letter subtags are titlecase\n else if (parts[i].length === 4)\n parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n\n // Is it a singleton?\n else if (parts[i].length === 1 && parts[i] !== 'x')\n break;\n }\n locale = arrJoin.call(parts, '-');\n\n // The steps laid out in RFC 5646 section 4.5 are as follows:\n\n // 1. Extension sequences are ordered into case-insensitive ASCII order\n // by singleton subtag.\n if ((match = locale.match(expExtSequences)) && match.length > 1) {\n // The built-in sort() sorts by ASCII order, so use that\n match.sort();\n\n // Replace all extensions with the joined, sorted array\n locale = locale.replace(\n RegExp('(?:' + expExtSequences.source + ')+', 'i'),\n arrJoin.call(match, '')\n );\n }\n\n // 2. Redundant or grandfathered tags are replaced by their 'Preferred-\n // Value', if there is one.\n if (hop.call(redundantTags.tags, locale))\n locale = redundantTags.tags[locale];\n\n // 3. Subtags are replaced by their 'Preferred-Value', if there is one.\n // For extlangs, the original primary language subtag is also\n // replaced if there is a primary language subtag in the 'Preferred-\n // Value'.\n parts = locale.split('-');\n\n for (let i = 1, max = parts.length; i < max; i++) {\n if (hop.call(redundantTags.subtags, parts[i]))\n parts[i] = redundantTags.subtags[parts[i]];\n\n else if (hop.call(redundantTags.extLang, parts[i])) {\n parts[i] = redundantTags.extLang[parts[i]][0];\n\n // For extlang tags, the prefix needs to be removed if it is redundant\n if (i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {\n parts = arrSlice.call(parts, i++);\n max -= 1;\n }\n }\n }\n\n return arrJoin.call(parts, '-');\n}\n\n/**\n * The DefaultLocale abstract operation returns a String value representing the\n * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the\n * host environment’s current locale.\n */\nexport function /* 6.2.4 */DefaultLocale () {\n return defaultLocale;\n}\n\n// Sect 6.3 Currency Codes\n// =======================\n\nconst expCurrencyCode = /^[A-Z]{3}$/;\n\n/**\n * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument\n * (after conversion to a String value) represents a well-formed 3-letter ISO currency\n * code. The following steps are taken:\n */\nexport function /* 6.3.1 */IsWellFormedCurrencyCode(currency) {\n // 1. Let `c` be ToString(currency)\n let c = String(currency);\n\n // 2. Let `normalized` be the result of mapping c to upper case as described\n // in 6.1.\n let normalized = toLatinUpperCase(c);\n\n // 3. If the string length of normalized is not 3, return false.\n // 4. If normalized contains any character that is not in the range \"A\" to \"Z\"\n // (U+0041 to U+005A), return false.\n if (expCurrencyCode.test(normalized) === false)\n return false;\n\n // 5. Return true\n return true;\n}\n","// Sect 9.2 Abstract Operations\n// ============================\n\nimport {\n List,\n toObject,\n arrIndexOf,\n arrPush,\n arrSlice,\n Record,\n hop,\n defineProperty,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n CanonicalizeLanguageTag,\n DefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nconst expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below\n\nexport function /* 9.2.1 */CanonicalizeLocaleList (locales) {\n// The abstract operation CanonicalizeLocaleList takes the following steps:\n\n // 1. If locales is undefined, then a. Return a new empty List\n if (locales === undefined)\n return new List();\n\n // 2. Let seen be a new empty List.\n let seen = new List();\n\n // 3. If locales is a String value, then\n // a. Let locales be a new array created as if by the expression new\n // Array(locales) where Array is the standard built-in constructor with\n // that name and locales is the value of locales.\n locales = typeof locales === 'string' ? [ locales ] : locales;\n\n // 4. Let O be ToObject(locales).\n let O = toObject(locales);\n\n // 5. Let lenValue be the result of calling the [[Get]] internal method of\n // O with the argument \"length\".\n // 6. Let len be ToUint32(lenValue).\n let len = O.length;\n\n // 7. Let k be 0.\n let k = 0;\n\n // 8. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n let Pk = String(k);\n\n // b. Let kPresent be the result of calling the [[HasProperty]] internal\n // method of O with argument Pk.\n let kPresent = Pk in O;\n\n // c. If kPresent is true, then\n if (kPresent) {\n // i. Let kValue be the result of calling the [[Get]] internal\n // method of O with argument Pk.\n let kValue = O[Pk];\n\n // ii. If the type of kValue is not String or Object, then throw a\n // TypeError exception.\n if (kValue === null || (typeof kValue !== 'string' && typeof kValue !== 'object'))\n throw new TypeError('String or Object type expected');\n\n // iii. Let tag be ToString(kValue).\n let tag = String(kValue);\n\n // iv. If the result of calling the abstract operation\n // IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as\n // the argument, is false, then throw a RangeError exception.\n if (!IsStructurallyValidLanguageTag(tag))\n throw new RangeError(\"'\" + tag + \"' is not a structurally valid language tag\");\n\n // v. Let tag be the result of calling the abstract operation\n // CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the\n // argument.\n tag = CanonicalizeLanguageTag(tag);\n\n // vi. If tag is not an element of seen, then append tag as the last\n // element of seen.\n if (arrIndexOf.call(seen, tag) === -1)\n arrPush.call(seen, tag);\n }\n\n // d. Increase k by 1.\n k++;\n }\n\n // 9. Return seen.\n return seen;\n}\n\n/**\n * The BestAvailableLocale abstract operation compares the provided argument\n * locale, which must be a String value with a structurally valid and\n * canonicalized BCP 47 language tag, against the locales in availableLocales and\n * returns either the longest non-empty prefix of locale that is an element of\n * availableLocales, or undefined if there is no such element. It uses the\n * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:\n */\nexport function /* 9.2.2 */BestAvailableLocale (availableLocales, locale) {\n // 1. Let candidate be locale\n let candidate = locale;\n\n // 2. Repeat\n while (candidate) {\n // a. If availableLocales contains an element equal to candidate, then return\n // candidate.\n if (arrIndexOf.call(availableLocales, candidate) > -1)\n return candidate;\n\n // b. Let pos be the character index of the last occurrence of \"-\"\n // (U+002D) within candidate. If that character does not occur, return\n // undefined.\n let pos = candidate.lastIndexOf('-');\n\n if (pos < 0)\n return;\n\n // c. If pos ≥ 2 and the character \"-\" occurs at index pos-2 of candidate,\n // then decrease pos by 2.\n if (pos >= 2 && candidate.charAt(pos - 2) === '-')\n pos -= 2;\n\n // d. Let candidate be the substring of candidate from position 0, inclusive,\n // to position pos, exclusive.\n candidate = candidate.substring(0, pos);\n }\n}\n\n/**\n * The LookupMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The following steps are taken:\n */\nexport function /* 9.2.3 */LookupMatcher (availableLocales, requestedLocales) {\n // 1. Let i be 0.\n let i = 0;\n\n // 2. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n\n // 3. Let availableLocale be undefined.\n let availableLocale;\n\n let locale, noExtensionsLocale;\n\n // 4. Repeat while i < len and availableLocale is undefined:\n while (i < len && !availableLocale) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position i.\n locale = requestedLocales[i];\n\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. Increase i by 1.\n i++;\n }\n\n // 5. Let result be a new Record.\n let result = new Record();\n\n // 6. If availableLocale is not undefined, then\n if (availableLocale !== undefined) {\n // a. Set result.[[locale]] to availableLocale.\n result['[[locale]]'] = availableLocale;\n\n // b. If locale and noExtensionsLocale are not the same String value, then\n if (String(locale) !== String(noExtensionsLocale)) {\n // i. Let extension be the String value consisting of the first\n // substring of locale that is a Unicode locale extension sequence.\n let extension = locale.match(expUnicodeExSeq)[0];\n\n // ii. Let extensionIndex be the character position of the initial\n // \"-\" of the first Unicode locale extension sequence within locale.\n let extensionIndex = locale.indexOf('-u-');\n\n // iii. Set result.[[extension]] to extension.\n result['[[extension]]'] = extension;\n\n // iv. Set result.[[extensionIndex]] to extensionIndex.\n result['[[extensionIndex]]'] = extensionIndex;\n }\n }\n // 7. Else\n else\n // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract\n // operation (defined in 6.2.4).\n result['[[locale]]'] = DefaultLocale();\n\n // 8. Return result\n return result;\n}\n\n/**\n * The BestFitMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The algorithm is implementation dependent, but should produce results\n * that a typical user of the requested locales would perceive as at least as\n * good as those produced by the LookupMatcher abstract operation. Options\n * specified through Unicode locale extension sequences must be ignored by the\n * algorithm. Information about such subsequences is returned separately.\n * The abstract operation returns a record with a [[locale]] field, whose value\n * is the language tag of the selected locale, which must be an element of\n * availableLocales. If the language tag of the request locale that led to the\n * selected locale contained a Unicode locale extension sequence, then the\n * returned record also contains an [[extension]] field whose value is the first\n * Unicode locale extension sequence, and an [[extensionIndex]] field whose value\n * is the index of the first Unicode locale extension sequence within the request\n * locale language tag.\n */\nexport function /* 9.2.4 */BestFitMatcher (availableLocales, requestedLocales) {\n return LookupMatcher(availableLocales, requestedLocales);\n}\n\n/**\n * The ResolveLocale abstract operation compares a BCP 47 language priority list\n * requestedLocales against the locales in availableLocales and determines the\n * best available language to meet the request. availableLocales and\n * requestedLocales must be provided as List values, options as a Record.\n */\nexport function /* 9.2.5 */ResolveLocale (availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n if (availableLocales.length === 0) {\n throw new ReferenceError('No locale data has been provided for this object yet.');\n }\n\n // The following steps are taken:\n // 1. Let matcher be the value of options.[[localeMatcher]].\n let matcher = options['[[localeMatcher]]'];\n\n let r;\n\n // 2. If matcher is \"lookup\", then\n if (matcher === 'lookup')\n // a. Let r be the result of calling the LookupMatcher abstract operation\n // (defined in 9.2.3) with arguments availableLocales and\n // requestedLocales.\n r = LookupMatcher(availableLocales, requestedLocales);\n\n // 3. Else\n else\n // a. Let r be the result of calling the BestFitMatcher abstract\n // operation (defined in 9.2.4) with arguments availableLocales and\n // requestedLocales.\n r = BestFitMatcher(availableLocales, requestedLocales);\n\n // 4. Let foundLocale be the value of r.[[locale]].\n let foundLocale = r['[[locale]]'];\n\n let extensionSubtags, extensionSubtagsLength;\n\n // 5. If r has an [[extension]] field, then\n if (hop.call(r, '[[extension]]')) {\n // a. Let extension be the value of r.[[extension]].\n let extension = r['[[extension]]'];\n // b. Let split be the standard built-in function object defined in ES5,\n // 15.5.4.14.\n let split = String.prototype.split;\n // c. Let extensionSubtags be the result of calling the [[Call]] internal\n // method of split with extension as the this value and an argument\n // list containing the single item \"-\".\n extensionSubtags = split.call(extension, '-');\n // d. Let extensionSubtagsLength be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument \"length\".\n extensionSubtagsLength = extensionSubtags.length;\n }\n\n // 6. Let result be a new Record.\n let result = new Record();\n\n // 7. Set result.[[dataLocale]] to foundLocale.\n result['[[dataLocale]]'] = foundLocale;\n\n // 8. Let supportedExtension be \"-u\".\n let supportedExtension = '-u';\n // 9. Let i be 0.\n let i = 0;\n // 10. Let len be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument \"length\".\n let len = relevantExtensionKeys.length;\n\n // 11 Repeat while i < len:\n while (i < len) {\n // a. Let key be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument ToString(i).\n let key = relevantExtensionKeys[i];\n // b. Let foundLocaleData be the result of calling the [[Get]] internal\n // method of localeData with the argument foundLocale.\n let foundLocaleData = localeData[foundLocale];\n // c. Let keyLocaleData be the result of calling the [[Get]] internal\n // method of foundLocaleData with the argument key.\n let keyLocaleData = foundLocaleData[key];\n // d. Let value be the result of calling the [[Get]] internal method of\n // keyLocaleData with argument \"0\".\n let value = keyLocaleData['0'];\n // e. Let supportedExtensionAddition be \"\".\n let supportedExtensionAddition = '';\n // f. Let indexOf be the standard built-in function object defined in\n // ES5, 15.4.4.14.\n let indexOf = arrIndexOf;\n\n // g. If extensionSubtags is not undefined, then\n if (extensionSubtags !== undefined) {\n // i. Let keyPos be the result of calling the [[Call]] internal\n // method of indexOf with extensionSubtags as the this value and\n // an argument list containing the single item key.\n let keyPos = indexOf.call(extensionSubtags, key);\n\n // ii. If keyPos ≠ -1, then\n if (keyPos !== -1) {\n // 1. If keyPos + 1 < extensionSubtagsLength and the length of the\n // result of calling the [[Get]] internal method of\n // extensionSubtags with argument ToString(keyPos +1) is greater\n // than 2, then\n if (keyPos + 1 < extensionSubtagsLength\n && extensionSubtags[keyPos + 1].length > 2) {\n // a. Let requestedValue be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument\n // ToString(keyPos + 1).\n let requestedValue = extensionSubtags[keyPos + 1];\n // b. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the\n // this value and an argument list containing the single\n // item requestedValue.\n let valuePos = indexOf.call(keyLocaleData, requestedValue);\n\n // c. If valuePos ≠ -1, then\n if (valuePos !== -1) {\n // i. Let value be requestedValue.\n value = requestedValue,\n // ii. Let supportedExtensionAddition be the\n // concatenation of \"-\", key, \"-\", and value.\n supportedExtensionAddition = '-' + key + '-' + value;\n }\n }\n // 2. Else\n else {\n // a. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the this\n // value and an argument list containing the single item\n // \"true\".\n let valuePos = indexOf(keyLocaleData, 'true');\n\n // b. If valuePos ≠ -1, then\n if (valuePos !== -1)\n // i. Let value be \"true\".\n value = 'true';\n }\n }\n }\n // h. If options has a field [[]], then\n if (hop.call(options, '[[' + key + ']]')) {\n // i. Let optionsValue be the value of options.[[]].\n let optionsValue = options['[[' + key + ']]'];\n\n // ii. If the result of calling the [[Call]] internal method of indexOf\n // with keyLocaleData as the this value and an argument list\n // containing the single item optionsValue is not -1, then\n if (indexOf.call(keyLocaleData, optionsValue) !== -1) {\n // 1. If optionsValue is not equal to value, then\n if (optionsValue !== value) {\n // a. Let value be optionsValue.\n value = optionsValue;\n // b. Let supportedExtensionAddition be \"\".\n supportedExtensionAddition = '';\n }\n }\n }\n // i. Set result.[[]] to value.\n result['[[' + key + ']]'] = value;\n\n // j. Append supportedExtensionAddition to supportedExtension.\n supportedExtension += supportedExtensionAddition;\n\n // k. Increase i by 1.\n i++;\n }\n // 12. If the length of supportedExtension is greater than 2, then\n if (supportedExtension.length > 2) {\n // a.\n let privateIndex = foundLocale.indexOf(\"-x-\");\n // b.\n if (privateIndex === -1) {\n // i.\n foundLocale = foundLocale + supportedExtension;\n }\n // c.\n else {\n // i.\n let preExtension = foundLocale.substring(0, privateIndex);\n // ii.\n let postExtension = foundLocale.substring(privateIndex);\n // iii.\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n // d. asserting - skipping\n // e.\n foundLocale = CanonicalizeLanguageTag(foundLocale);\n }\n // 13. Set result.[[locale]] to foundLocale.\n result['[[locale]]'] = foundLocale;\n\n // 14. Return result.\n return result;\n}\n\n/**\n * The LookupSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.\n * Locales appear in the same order in the returned list as in requestedLocales.\n * The following steps are taken:\n */\nexport function /* 9.2.6 */LookupSupportedLocales (availableLocales, requestedLocales) {\n // 1. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n // 2. Let subset be a new empty List.\n let subset = new List();\n // 3. Let k be 0.\n let k = 0;\n\n // 4. Repeat while k < len\n while (k < len) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position k.\n let locale = requestedLocales[k];\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n let noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n let availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. If availableLocale is not undefined, then append locale to the end of\n // subset.\n if (availableLocale !== undefined)\n arrPush.call(subset, locale);\n\n // e. Increment k by 1.\n k++;\n }\n\n // 5. Let subsetArray be a new Array object whose elements are the same\n // values in the same order as the elements of subset.\n let subsetArray = arrSlice.call(subset);\n\n // 6. Return subsetArray.\n return subsetArray;\n}\n\n/**\n * The BestFitSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the Best Fit Matcher\n * algorithm. Locales appear in the same order in the returned list as in\n * requestedLocales. The steps taken are implementation dependent.\n */\nexport function /*9.2.7 */BestFitSupportedLocales (availableLocales, requestedLocales) {\n // ###TODO: implement this function as described by the specification###\n return LookupSupportedLocales(availableLocales, requestedLocales);\n}\n\n/**\n * The SupportedLocales abstract operation returns the subset of the provided BCP\n * 47 language priority list requestedLocales for which availableLocales has a\n * matching locale. Two algorithms are available to match the locales: the Lookup\n * algorithm described in RFC 4647 section 3.4, and an implementation dependent\n * best-fit algorithm. Locales appear in the same order in the returned list as\n * in requestedLocales. The following steps are taken:\n */\nexport function /*9.2.8 */SupportedLocales (availableLocales, requestedLocales, options) {\n let matcher, subset;\n\n // 1. If options is not undefined, then\n if (options !== undefined) {\n // a. Let options be ToObject(options).\n options = new Record(toObject(options));\n // b. Let matcher be the result of calling the [[Get]] internal method of\n // options with argument \"localeMatcher\".\n matcher = options.localeMatcher;\n\n // c. If matcher is not undefined, then\n if (matcher !== undefined) {\n // i. Let matcher be ToString(matcher).\n matcher = String(matcher);\n\n // ii. If matcher is not \"lookup\" or \"best fit\", then throw a RangeError\n // exception.\n if (matcher !== 'lookup' && matcher !== 'best fit')\n throw new RangeError('matcher should be \"lookup\" or \"best fit\"');\n }\n }\n // 2. If matcher is undefined or \"best fit\", then\n if (matcher === undefined || matcher === 'best fit')\n // a. Let subset be the result of calling the BestFitSupportedLocales\n // abstract operation (defined in 9.2.7) with arguments\n // availableLocales and requestedLocales.\n subset = BestFitSupportedLocales(availableLocales, requestedLocales);\n // 3. Else\n else\n // a. Let subset be the result of calling the LookupSupportedLocales\n // abstract operation (defined in 9.2.6) with arguments\n // availableLocales and requestedLocales.\n subset = LookupSupportedLocales(availableLocales, requestedLocales);\n\n // 4. For each named own property name P of subset,\n for (let P in subset) {\n if (!hop.call(subset, P))\n continue;\n\n // a. Let desc be the result of calling the [[GetOwnProperty]] internal\n // method of subset with P.\n // b. Set desc.[[Writable]] to false.\n // c. Set desc.[[Configurable]] to false.\n // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,\n // and true as arguments.\n defineProperty(subset, P, {\n writable: false, configurable: false, value: subset[P],\n });\n }\n // \"Freeze\" the array so no new elements can be added\n defineProperty(subset, 'length', { writable: false });\n\n // 5. Return subset\n return subset;\n}\n\n/**\n * The GetOption abstract operation extracts the value of the property named\n * property from the provided options object, converts it to the required type,\n * checks whether it is one of a List of allowed values, and fills in a fallback\n * value if necessary.\n */\nexport function /*9.2.9 */GetOption (options, property, type, values, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Assert: type is \"boolean\" or \"string\".\n // b. If type is \"boolean\", then let value be ToBoolean(value).\n // c. If type is \"string\", then let value be ToString(value).\n value = type === 'boolean' ? Boolean(value)\n : (type === 'string' ? String(value) : value);\n\n // d. If values is not undefined, then\n if (values !== undefined) {\n // i. If values does not contain an element equal to value, then throw a\n // RangeError exception.\n if (arrIndexOf.call(values, value) === -1)\n throw new RangeError(\"'\" + value + \"' is not an allowed value for `\" + property +'`');\n }\n\n // e. Return value.\n return value;\n }\n // Else return fallback.\n return fallback;\n}\n\n/**\n * The GetNumberOption abstract operation extracts a property value from the\n * provided options object, converts it to a Number value, checks whether it is\n * in the allowed range, and fills in a fallback value if necessary.\n */\nexport function /* 9.2.10 */GetNumberOption (options, property, minimum, maximum, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Let value be ToNumber(value).\n value = Number(value);\n\n // b. If value is NaN or less than minimum or greater than maximum, throw a\n // RangeError exception.\n if (isNaN(value) || value < minimum || value > maximum)\n throw new RangeError('Value is not a number or outside accepted range');\n\n // c. Return floor(value).\n return Math.floor(value);\n }\n // 3. Else return fallback.\n return fallback;\n}\n","import {\n CanonicalizeLocaleList,\n} from \"./9.negotiation.js\";\n\n// 8 The Intl Object\nexport const Intl = {};\n\n// 8.2 Function Properties of the Intl Object\n\n// 8.2.1\n// @spec[tc39/ecma402/master/spec/intl.html]\n// @clause[sec-intl.getcanonicallocales]\nIntl.getCanonicalLocales = function (locales) {\n // 1. Let ll be ? CanonicalizeLocaleList(locales).\n let ll = CanonicalizeLocaleList(locales);\n // 2. Return CreateArrayFromList(ll).\n {\n let result = [];\n for (let code in ll) {\n result.push(ll[code]);\n }\n return result;\n }\n};\n","// 11.1 The Intl.NumberFormat constructor\n// ======================================\n\nimport {\n IsWellFormedCurrencyCode,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n SupportedLocales,\n ResolveLocale,\n GetNumberOption,\n GetOption,\n} from \"./9.negotiation.js\";\n\nimport {\n internals,\n log10Floor,\n List,\n toObject,\n arrPush,\n arrJoin,\n arrShift,\n Record,\n hop,\n defineProperty,\n es3,\n fnBind,\n getInternalProperties,\n createRegExpRestore,\n secret,\n objCreate,\n} from \"./util.js\";\n\n// Currency minor units output from get-4217 grunt task, formatted\nconst currencyMinorUnits = {\n BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,\n XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,\n OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0,\n};\n\n// Define the NumberFormat constructor internally so it cannot be tainted\nexport function NumberFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.NumberFormat(locales, options);\n }\n\n return InitializeNumberFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'NumberFormat', {\n configurable: true,\n writable: true,\n value: NumberFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(Intl.NumberFormat, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeNumberFormat accepts the arguments\n * numberFormat (which must be an object), locales, and options. It initializes\n * numberFormat as a NumberFormat object.\n */\nexport function /*11.1.1.1 */InitializeNumberFormat (numberFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(numberFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If numberFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(numberFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. If options is undefined, then\n if (options === undefined)\n // a. Let options be the result of creating a new object as if by the\n // expression new Object() where Object is the standard built-in constructor\n // with that name.\n options = {};\n\n // 5. Else\n else\n // a. Let options be ToObject(options).\n options = toObject(options);\n\n // 6. Let opt be a new Record.\n let opt = new Record(),\n\n // 7. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with the arguments options, \"localeMatcher\", \"string\",\n // a List containing the two String values \"lookup\" and \"best fit\", and\n // \"best fit\".\n matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 8. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 9. Let NumberFormat be the standard built-in object that is the initial value\n // of Intl.NumberFormat.\n // 10. Let localeData be the value of the [[localeData]] internal property of\n // NumberFormat.\n let localeData = internals.NumberFormat['[[localeData]]'];\n\n // 11. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of NumberFormat, and localeData.\n let r = ResolveLocale(\n internals.NumberFormat['[[availableLocales]]'], requestedLocales,\n opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData\n );\n\n // 12. Set the [[locale]] internal property of numberFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 13. Set the [[numberingSystem]] internal property of numberFormat to the value\n // of r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let s be the result of calling the GetOption abstract operation with the\n // arguments options, \"style\", \"string\", a List containing the three String\n // values \"decimal\", \"percent\", and \"currency\", and \"decimal\".\n let s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');\n\n // 16. Set the [[style]] internal property of numberFormat to s.\n internal['[[style]]'] = s;\n\n // 17. Let c be the result of calling the GetOption abstract operation with the\n // arguments options, \"currency\", \"string\", undefined, and undefined.\n let c = GetOption(options, 'currency', 'string');\n\n // 18. If c is not undefined and the result of calling the\n // IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with\n // argument c is false, then throw a RangeError exception.\n if (c !== undefined && !IsWellFormedCurrencyCode(c))\n throw new RangeError(\"'\" + c + \"' is not a valid currency code\");\n\n // 19. If s is \"currency\" and c is undefined, throw a TypeError exception.\n if (s === 'currency' && c === undefined)\n throw new TypeError('Currency code is required when style is currency');\n\n let cDigits;\n\n // 20. If s is \"currency\", then\n if (s === 'currency') {\n // a. Let c be the result of converting c to upper case as specified in 6.1.\n c = c.toUpperCase();\n\n // b. Set the [[currency]] internal property of numberFormat to c.\n internal['[[currency]]'] = c;\n\n // c. Let cDigits be the result of calling the CurrencyDigits abstract\n // operation (defined below) with argument c.\n cDigits = CurrencyDigits(c);\n }\n\n // 21. Let cd be the result of calling the GetOption abstract operation with the\n // arguments options, \"currencyDisplay\", \"string\", a List containing the\n // three String values \"code\", \"symbol\", and \"name\", and \"symbol\".\n let cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');\n\n // 22. If s is \"currency\", then set the [[currencyDisplay]] internal property of\n // numberFormat to cd.\n if (s === 'currency')\n internal['[[currencyDisplay]]'] = cd;\n\n // 23. Let mnid be the result of calling the GetNumberOption abstract operation\n // (defined in 9.2.10) with arguments options, \"minimumIntegerDigits\", 1, 21,\n // and 1.\n let mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);\n\n // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.\n internal['[[minimumIntegerDigits]]'] = mnid;\n\n // 25. If s is \"currency\", then let mnfdDefault be cDigits; else let mnfdDefault\n // be 0.\n let mnfdDefault = s === 'currency' ? cDigits : 0;\n\n // 26. Let mnfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"minimumFractionDigits\", 0, 20, and mnfdDefault.\n let mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);\n\n // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.\n internal['[[minimumFractionDigits]]'] = mnfd;\n\n // 28. If s is \"currency\", then let mxfdDefault be max(mnfd, cDigits); else if s\n // is \"percent\", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault\n // be max(mnfd, 3).\n let mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits)\n : (s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3));\n\n // 29. Let mxfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"maximumFractionDigits\", mnfd, 20, and mxfdDefault.\n let mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);\n\n // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.\n internal['[[maximumFractionDigits]]'] = mxfd;\n\n // 31. Let mnsd be the result of calling the [[Get]] internal method of options\n // with argument \"minimumSignificantDigits\".\n let mnsd = options.minimumSignificantDigits;\n\n // 32. Let mxsd be the result of calling the [[Get]] internal method of options\n // with argument \"maximumSignificantDigits\".\n let mxsd = options.maximumSignificantDigits;\n\n // 33. If mnsd is not undefined or mxsd is not undefined, then:\n if (mnsd !== undefined || mxsd !== undefined) {\n // a. Let mnsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"minimumSignificantDigits\", 1, 21,\n // and 1.\n mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);\n\n // b. Let mxsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"maximumSignificantDigits\", mnsd,\n // 21, and 21.\n mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);\n\n // c. Set the [[minimumSignificantDigits]] internal property of numberFormat\n // to mnsd, and the [[maximumSignificantDigits]] internal property of\n // numberFormat to mxsd.\n internal['[[minimumSignificantDigits]]'] = mnsd;\n internal['[[maximumSignificantDigits]]'] = mxsd;\n }\n // 34. Let g be the result of calling the GetOption abstract operation with the\n // arguments options, \"useGrouping\", \"boolean\", undefined, and true.\n let g = GetOption(options, 'useGrouping', 'boolean', undefined, true);\n\n // 35. Set the [[useGrouping]] internal property of numberFormat to g.\n internal['[[useGrouping]]'] = g;\n\n // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 37. Let patterns be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"patterns\".\n let patterns = dataLocaleData.patterns;\n\n // 38. Assert: patterns is an object (see 11.2.3)\n\n // 39. Let stylePatterns be the result of calling the [[Get]] internal method of\n // patterns with argument s.\n let stylePatterns = patterns[s];\n\n // 40. Set the [[positivePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"positivePattern\".\n internal['[[positivePattern]]'] = stylePatterns.positivePattern;\n\n // 41. Set the [[negativePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"negativePattern\".\n internal['[[negativePattern]]'] = stylePatterns.negativePattern;\n\n // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to\n // true.\n internal['[[initializedNumberFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n numberFormat.format = GetFormatNumber.call(numberFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return numberFormat;\n}\n\nfunction CurrencyDigits(currency) {\n // When the CurrencyDigits abstract operation is called with an argument currency\n // (which must be an upper case String value), the following steps are taken:\n\n // 1. If the ISO 4217 currency and funds code list contains currency as an\n // alphabetic code, then return the minor unit value corresponding to the\n // currency from the list; else return 2.\n return currencyMinorUnits[currency] !== undefined\n ? currencyMinorUnits[currency]\n : 2;\n}\n\n/* 11.2.3 */internals.NumberFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.NumberFormat is called, the\n * following steps are taken:\n */\n/* 11.2.2 */\ndefineProperty(Intl.NumberFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * NumberFormat object.\n */\n/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatNumber,\n});\n\nfunction GetFormatNumber() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this NumberFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 1, that takes the argument value and\n // performs the following steps:\n let F = function (value) {\n // i. If value is not provided, then let value be undefined.\n // ii. Let x be ToNumber(value).\n // iii. Return the result of calling the FormatNumber abstract\n // operation (defined below) with arguments this and x.\n return FormatNumber(this, /* x = */Number(value));\n };\n\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n }\n\nIntl.NumberFormat.prototype.formatToParts = function(value) {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');\n\n let x = Number(value);\n return FormatNumberToParts(this, x);\n};\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumbertoparts]\n */\nfunction FormatNumberToParts(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be ArrayCreate(0).\n let result = [];\n // 3. Let n be 0.\n let n = 0;\n // 4. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Let O be ObjectCreate(%ObjectPrototype%).\n let O = {};\n // a. Perform ? CreateDataPropertyOrThrow(O, \"type\", part.[[type]]).\n O.type = part['[[type]]'];\n // a. Perform ? CreateDataPropertyOrThrow(O, \"value\", part.[[value]]).\n O.value = part['[[value]]'];\n // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).\n result[n] = O;\n // a. Increment n by 1.\n n += 1;\n }\n // 5. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-partitionnumberpattern]\n */\nfunction PartitionNumberPattern(numberFormat, x) {\n\n let internal = getInternalProperties(numberFormat),\n locale = internal['[[dataLocale]]'],\n nums = internal['[[numberingSystem]]'],\n data = internals.NumberFormat['[[localeData]]'][locale],\n ild = data.symbols[nums] || data.symbols.latn,\n pattern;\n\n // 1. If x is not NaN and x < 0, then:\n if (!isNaN(x) && x < 0) {\n // a. Let x be -x.\n x = -x;\n // a. Let pattern be the value of numberFormat.[[negativePattern]].\n pattern = internal['[[negativePattern]]'];\n }\n // 2. Else,\n else {\n // a. Let pattern be the value of numberFormat.[[positivePattern]].\n pattern = internal['[[positivePattern]]'];\n }\n // 3. Let result be a new empty List.\n let result = new List();\n // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, \"{\", 0).\n let beginIndex = pattern.indexOf('{', 0);\n // 5. Let endIndex be 0.\n let endIndex = 0;\n // 6. Let nextIndex be 0.\n let nextIndex = 0;\n // 7. Let length be the number of code units in pattern.\n let length = pattern.length;\n // 8. Repeat while beginIndex is an integer index into pattern:\n while (beginIndex > -1 && beginIndex < length) {\n // a. Set endIndex to Call(%StringProto_indexOf%, pattern, \"}\", beginIndex)\n endIndex = pattern.indexOf('}', beginIndex);\n // a. If endIndex = -1, throw new Error exception.\n if (endIndex === -1) throw new Error();\n // a. If beginIndex is greater than nextIndex, then:\n if (beginIndex > nextIndex) {\n // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.\n let literal = pattern.substring(nextIndex, beginIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // a. If p is equal \"number\", then:\n if (p === \"number\") {\n // i. If x is NaN,\n if (isNaN(x)) {\n // 1. Let n be an ILD String value indicating the NaN value.\n let n = ild.nan;\n // 2. Add new part record { [[type]]: \"nan\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });\n }\n // ii. Else if isFinite(x) is false,\n else if (!isFinite(x)) {\n // 1. Let n be an ILD String value indicating infinity.\n let n = ild.infinity;\n // 2. Add new part record { [[type]]: \"infinity\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': n });\n }\n // iii. Else,\n else {\n // 1. If the value of numberFormat.[[style]] is \"percent\" and isFinite(x), let x be 100 × x.\n if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;\n\n let n;\n // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then\n if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {\n // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).\n n = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);\n }\n // 3. Else,\n else {\n // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).\n n = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);\n }\n // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the \"Numbering System\" column of Table 2 below, then\n if (numSys[nums]) {\n // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the \"Digits\" column of the matching row in Table 2.\n let digits = numSys[nums];\n // a. Replace each digit in n with the value of digits[digit].\n n = String(n).replace(/\\d/g, (digit) => {\n return digits[digit];\n });\n }\n // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.\n else n = String(n); // ###TODO###\n\n let integer;\n let fraction;\n // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, \".\", 0).\n let decimalSepIndex = n.indexOf('.', 0);\n // 7. If decimalSepIndex > 0, then:\n if (decimalSepIndex > 0) {\n // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.\n integer = n.substring(0, decimalSepIndex);\n // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.\n fraction = n.substring(decimalSepIndex + 1, decimalSepIndex.length);\n }\n // 8. Else:\n else {\n // a. Let integer be n.\n integer = n;\n // a. Let fraction be undefined.\n fraction = undefined;\n }\n // 9. If the value of the numberFormat.[[useGrouping]] is true,\n if (internal['[[useGrouping]]'] === true) {\n // a. Let groupSepSymbol be the ILND String representing the grouping separator.\n let groupSepSymbol = ild.group;\n // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.\n let groups = new List();\n // ----> implementation:\n // Primary group represents the group closest to the decimal\n let pgSize = data.patterns.primaryGroupSize || 3;\n // Secondary group is every other group\n let sgSize = data.patterns.secondaryGroupSize || pgSize;\n // Group only if necessary\n if (integer.length > pgSize) {\n // Index of the primary grouping separator\n let end = integer.length - pgSize;\n // Starting index for our loop\n let idx = end % sgSize;\n let start = integer.slice(0, idx);\n if (start.length) arrPush.call(groups, start);\n // Loop to separate into secondary grouping digits\n while (idx < end) {\n arrPush.call(groups, integer.slice(idx, idx + sgSize));\n idx += sgSize;\n }\n // Add the primary grouping digits\n arrPush.call(groups, integer.slice(end));\n } else {\n arrPush.call(groups, integer);\n }\n // a. Assert: The number of elements in groups List is greater than 0.\n if (groups.length === 0) throw new Error();\n // a. Repeat, while groups List is not empty:\n while (groups.length) {\n // i. Remove the first element from groups and let integerGroup be the value of that element.\n let integerGroup = arrShift.call(groups);\n // ii. Add new part record { [[type]]: \"integer\", [[value]]: integerGroup } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });\n // iii. If groups List is not empty, then:\n if (groups.length) {\n // 1. Add new part record { [[type]]: \"group\", [[value]]: groupSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });\n }\n }\n }\n // 10. Else,\n else {\n // a. Add new part record { [[type]]: \"integer\", [[value]]: integer } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });\n }\n // 11. If fraction is not undefined, then:\n if (fraction !== undefined) {\n // a. Let decimalSepSymbol be the ILND String representing the decimal separator.\n let decimalSepSymbol = ild.decimal;\n // a. Add new part record { [[type]]: \"decimal\", [[value]]: decimalSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });\n // a. Add new part record { [[type]]: \"fraction\", [[value]]: fraction } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });\n }\n }\n }\n // a. Else if p is equal \"plusSign\", then:\n else if (p === \"plusSign\") {\n // i. Let plusSignSymbol be the ILND String representing the plus sign.\n let plusSignSymbol = ild.plusSign;\n // ii. Add new part record { [[type]]: \"plusSign\", [[value]]: plusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });\n }\n // a. Else if p is equal \"minusSign\", then:\n else if (p === \"minusSign\") {\n // i. Let minusSignSymbol be the ILND String representing the minus sign.\n let minusSignSymbol = ild.minusSign;\n // ii. Add new part record { [[type]]: \"minusSign\", [[value]]: minusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });\n }\n // a. Else if p is equal \"percentSign\" and numberFormat.[[style]] is \"percent\", then:\n else if (p === \"percentSign\" && internal['[[style]]'] === \"percent\") {\n // i. Let percentSignSymbol be the ILND String representing the percent sign.\n let percentSignSymbol = ild.percentSign;\n // ii. Add new part record { [[type]]: \"percentSign\", [[value]]: percentSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });\n }\n // a. Else if p is equal \"currency\" and numberFormat.[[style]] is \"currency\", then:\n else if (p === \"currency\" && internal['[[style]]'] === \"currency\") {\n // i. Let currency be the value of numberFormat.[[currency]].\n let currency = internal['[[currency]]'];\n\n let cd;\n\n // ii. If numberFormat.[[currencyDisplay]] is \"code\", then\n if (internal['[[currencyDisplay]]'] === \"code\") {\n // 1. Let cd be currency.\n cd = currency;\n }\n // iii. Else if numberFormat.[[currencyDisplay]] is \"symbol\", then\n else if (internal['[[currencyDisplay]]'] === \"symbol\") {\n // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.\n cd = data.currencies[currency] || currency;\n }\n // iv. Else if numberFormat.[[currencyDisplay]] is \"name\", then\n else if (internal['[[currencyDisplay]]'] === \"name\") {\n // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.\n cd = currency;\n }\n // v. Add new part record { [[type]]: \"currency\", [[value]]: cd } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });\n }\n // a. Else,\n else {\n // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.\n let literal = pattern.substring(beginIndex, endIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Set nextIndex to endIndex + 1.\n nextIndex = endIndex + 1;\n // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, \"{\", nextIndex)\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n // 9. If nextIndex is less than length, then:\n if (nextIndex < length) {\n // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.\n let literal = pattern.substring(nextIndex, length);\n // a. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // 10. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumber]\n */\nexport function FormatNumber(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be an empty String.\n let result = '';\n // 3. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Set result to a String value produced by concatenating result and part.[[value]].\n result += part['[[value]]'];\n }\n // 4. Return result.\n return result;\n}\n\n/**\n * When the ToRawPrecision abstract operation is called with arguments x (which\n * must be a finite non-negative number), minPrecision, and maxPrecision (both\n * must be integers between 1 and 21) the following steps are taken:\n */\nfunction ToRawPrecision (x, minPrecision, maxPrecision) {\n // 1. Let p be maxPrecision.\n let p = maxPrecision;\n\n let m, e;\n\n // 2. If x = 0, then\n if (x === 0) {\n // a. Let m be the String consisting of p occurrences of the character \"0\".\n m = arrJoin.call(Array (p + 1), '0');\n // b. Let e be 0.\n e = 0;\n }\n // 3. Else\n else {\n // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the\n // exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as\n // possible. If there are two such sets of e and n, pick the e and n for\n // which n × 10ᵉ⁻ᵖ⁺¹ is larger.\n e = log10Floor(Math.abs(x));\n\n // Easier to get to m from here\n let f = Math.round(Math.exp((Math.abs(e - p + 1)) * Math.LN10));\n\n // b. Let m be the String consisting of the digits of the decimal\n // representation of n (in order, with no leading zeroes)\n m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));\n }\n\n // 4. If e ≥ p, then\n if (e >= p)\n // a. Return the concatenation of m and e-p+1 occurrences of the character \"0\".\n return m + arrJoin.call(Array(e-p+1 + 1), '0');\n\n // 5. If e = p-1, then\n else if (e === p - 1)\n // a. Return m.\n return m;\n\n // 6. If e ≥ 0, then\n else if (e >= 0)\n // a. Let m be the concatenation of the first e+1 characters of m, the character\n // \".\", and the remaining p–(e+1) characters of m.\n m = m.slice(0, e + 1) + '.' + m.slice(e + 1);\n\n // 7. If e < 0, then\n else if (e < 0)\n // a. Let m be the concatenation of the String \"0.\", –(e+1) occurrences of the\n // character \"0\", and the string m.\n m = '0.' + arrJoin.call(Array (-(e+1) + 1), '0') + m;\n\n // 8. If m contains the character \".\", and maxPrecision > minPrecision, then\n if (m.indexOf(\".\") >= 0 && maxPrecision > minPrecision) {\n // a. Let cut be maxPrecision – minPrecision.\n let cut = maxPrecision - minPrecision;\n\n // b. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.charAt(m.length-1) === '0') {\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n\n // ii. Decrease cut by 1.\n cut--;\n }\n\n // c. If the last character of m is \".\", then\n if (m.charAt(m.length-1) === '.')\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. Return m.\n return m;\n}\n\n/**\n * @spec[tc39/ecma402/master/spec/numberformat.html]\n * @clause[sec-torawfixed]\n * When the ToRawFixed abstract operation is called with arguments x (which must\n * be a finite non-negative number), minInteger (which must be an integer between\n * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and\n * 20) the following steps are taken:\n */\nfunction ToRawFixed(x, minInteger, minFraction, maxFraction) {\n // 1. Let f be maxFraction.\n let f = maxFraction;\n // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.\n let n = Math.pow(10, f) * x; // diverging...\n // 3. If n = 0, let m be the String \"0\". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).\n let m = (n === 0 ? \"0\" : n.toFixed(0)); // divering...\n\n {\n // this diversion is needed to take into consideration big numbers, e.g.:\n // 1.2344501e+37 -> 12344501000000000000000000000000000000\n let idx;\n let exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;\n if (exp) {\n m = m.slice(0, idx).replace('.', '');\n m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');\n }\n }\n\n let int;\n // 4. If f ≠ 0, then\n if (f !== 0) {\n // a. Let k be the number of characters in m.\n let k = m.length;\n // a. If k ≤ f, then\n if (k <= f) {\n // i. Let z be the String consisting of f+1–k occurrences of the character \"0\".\n let z = arrJoin.call(Array(f + 1 - k + 1), '0');\n // ii. Let m be the concatenation of Strings z and m.\n m = z + m;\n // iii. Let k be f+1.\n k = f + 1;\n }\n // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.\n let a = m.substring(0, k - f), b = m.substring(k - f, m.length);\n // a. Let m be the concatenation of the three Strings a, \".\", and b.\n m = a + \".\" + b;\n // a. Let int be the number of characters in a.\n int = a.length;\n }\n // 5. Else, let int be the number of characters in m.\n else int = m.length;\n // 6. Let cut be maxFraction – minFraction.\n let cut = maxFraction - minFraction;\n // 7. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.slice(-1) === \"0\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n // a. Decrease cut by 1.\n cut--;\n }\n // 8. If the last character of m is \".\", then\n if (m.slice(-1) === \".\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. If int < minInteger, then\n if (int < minInteger) {\n // a. Let z be the String consisting of minInteger–int occurrences of the character \"0\".\n let z = arrJoin.call(Array(minInteger - int + 1), '0');\n // a. Let m be the concatenation of Strings z and m.\n m = z + m;\n }\n // 10. Return m.\n return m;\n}\n\n// Sect 11.3.2 Table 2, Numbering systems\n// ======================================\nlet numSys = {\n arab: ['\\u0660', '\\u0661', '\\u0662', '\\u0663', '\\u0664', '\\u0665', '\\u0666', '\\u0667', '\\u0668', '\\u0669'],\n arabext: ['\\u06F0', '\\u06F1', '\\u06F2', '\\u06F3', '\\u06F4', '\\u06F5', '\\u06F6', '\\u06F7', '\\u06F8', '\\u06F9'],\n bali: ['\\u1B50', '\\u1B51', '\\u1B52', '\\u1B53', '\\u1B54', '\\u1B55', '\\u1B56', '\\u1B57', '\\u1B58', '\\u1B59'],\n beng: ['\\u09E6', '\\u09E7', '\\u09E8', '\\u09E9', '\\u09EA', '\\u09EB', '\\u09EC', '\\u09ED', '\\u09EE', '\\u09EF'],\n deva: ['\\u0966', '\\u0967', '\\u0968', '\\u0969', '\\u096A', '\\u096B', '\\u096C', '\\u096D', '\\u096E', '\\u096F'],\n fullwide: ['\\uFF10', '\\uFF11', '\\uFF12', '\\uFF13', '\\uFF14', '\\uFF15', '\\uFF16', '\\uFF17', '\\uFF18', '\\uFF19'],\n gujr: ['\\u0AE6', '\\u0AE7', '\\u0AE8', '\\u0AE9', '\\u0AEA', '\\u0AEB', '\\u0AEC', '\\u0AED', '\\u0AEE', '\\u0AEF'],\n guru: ['\\u0A66', '\\u0A67', '\\u0A68', '\\u0A69', '\\u0A6A', '\\u0A6B', '\\u0A6C', '\\u0A6D', '\\u0A6E', '\\u0A6F'],\n hanidec: ['\\u3007', '\\u4E00', '\\u4E8C', '\\u4E09', '\\u56DB', '\\u4E94', '\\u516D', '\\u4E03', '\\u516B', '\\u4E5D'],\n khmr: ['\\u17E0', '\\u17E1', '\\u17E2', '\\u17E3', '\\u17E4', '\\u17E5', '\\u17E6', '\\u17E7', '\\u17E8', '\\u17E9'],\n knda: ['\\u0CE6', '\\u0CE7', '\\u0CE8', '\\u0CE9', '\\u0CEA', '\\u0CEB', '\\u0CEC', '\\u0CED', '\\u0CEE', '\\u0CEF'],\n laoo: ['\\u0ED0', '\\u0ED1', '\\u0ED2', '\\u0ED3', '\\u0ED4', '\\u0ED5', '\\u0ED6', '\\u0ED7', '\\u0ED8', '\\u0ED9'],\n latn: ['\\u0030', '\\u0031', '\\u0032', '\\u0033', '\\u0034', '\\u0035', '\\u0036', '\\u0037', '\\u0038', '\\u0039'],\n limb: ['\\u1946', '\\u1947', '\\u1948', '\\u1949', '\\u194A', '\\u194B', '\\u194C', '\\u194D', '\\u194E', '\\u194F'],\n mlym: ['\\u0D66', '\\u0D67', '\\u0D68', '\\u0D69', '\\u0D6A', '\\u0D6B', '\\u0D6C', '\\u0D6D', '\\u0D6E', '\\u0D6F'],\n mong: ['\\u1810', '\\u1811', '\\u1812', '\\u1813', '\\u1814', '\\u1815', '\\u1816', '\\u1817', '\\u1818', '\\u1819'],\n mymr: ['\\u1040', '\\u1041', '\\u1042', '\\u1043', '\\u1044', '\\u1045', '\\u1046', '\\u1047', '\\u1048', '\\u1049'],\n orya: ['\\u0B66', '\\u0B67', '\\u0B68', '\\u0B69', '\\u0B6A', '\\u0B6B', '\\u0B6C', '\\u0B6D', '\\u0B6E', '\\u0B6F'],\n tamldec: ['\\u0BE6', '\\u0BE7', '\\u0BE8', '\\u0BE9', '\\u0BEA', '\\u0BEB', '\\u0BEC', '\\u0BED', '\\u0BEE', '\\u0BEF'],\n telu: ['\\u0C66', '\\u0C67', '\\u0C68', '\\u0C69', '\\u0C6A', '\\u0C6B', '\\u0C6C', '\\u0C6D', '\\u0C6E', '\\u0C6F'],\n thai: ['\\u0E50', '\\u0E51', '\\u0E52', '\\u0E53', '\\u0E54', '\\u0E55', '\\u0E56', '\\u0E57', '\\u0E58', '\\u0E59'],\n tibt: ['\\u0F20', '\\u0F21', '\\u0F22', '\\u0F23', '\\u0F24', '\\u0F25', '\\u0F26', '\\u0F27', '\\u0F28', '\\u0F29'],\n};\n\n/**\n * This function provides access to the locale and formatting options computed\n * during initialization of the object.\n *\n * The function returns a new object whose properties and attributes are set as\n * if constructed by an object literal assigning to each of the following\n * properties the value of the corresponding internal property of this\n * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,\n * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and\n * useGrouping. Properties whose corresponding internal properties are not present\n * are not assigned.\n */\n/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {\n configurable: true,\n writable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay',\n 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits',\n 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[['+ props[i] +']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","/* jslint esnext: true */\n\n// Match these datetime components in a CLDR pattern, except those in single quotes\nlet expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n// trim patterns after transformations\nlet expPatternTrimmer = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n// Skip over patterns with these datetime components because we don't have data\n// to back them up:\n// timezone, weekday, amoung others\nlet unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string\n\nlet dtKeys = [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"weekday\", \"quarter\"];\nlet tmKeys = [\"hour\", \"minute\", \"second\", \"hour12\", \"timeZoneName\"];\n\nfunction isDateFormatOnly(obj) {\n for (let i = 0; i < tmKeys.length; i += 1) {\n if (obj.hasOwnProperty(tmKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isTimeFormatOnly(obj) {\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (obj.hasOwnProperty(dtKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {\n let o = { _: {} };\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (dateFormatObj[dtKeys[i]]) {\n o[dtKeys[i]] = dateFormatObj[dtKeys[i]];\n }\n if (dateFormatObj._[dtKeys[i]]) {\n o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];\n }\n }\n for (let j = 0; j < tmKeys.length; j += 1) {\n if (timeFormatObj[tmKeys[j]]) {\n o[tmKeys[j]] = timeFormatObj[tmKeys[j]];\n }\n if (timeFormatObj._[tmKeys[j]]) {\n o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];\n }\n }\n return o;\n}\n\nfunction computeFinalPatterns(formatObj) {\n // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:\n // 'In patterns, two single quotes represents a literal single quote, either\n // inside or outside single quotes. Text within single quotes is not\n // interpreted in any way (except for two adjacent single quotes).'\n formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, ($0, literal) => {\n return literal ? literal : \"'\";\n });\n\n // pattern 12 is always the default. we can produce the 24 by removing {ampm}\n formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');\n return formatObj;\n}\n\nfunction expDTComponentsMeta($0, formatObj) {\n switch ($0.charAt(0)) {\n // --- Era\n case 'G':\n formatObj.era = [ 'short', 'short', 'short', 'long', 'narrow' ][$0.length-1];\n return '{era}';\n\n // --- Year\n case 'y':\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';\n return '{year}';\n\n // --- Quarter (not supported in this polyfill)\n case 'Q':\n case 'q':\n formatObj.quarter = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{quarter}';\n\n // --- Month\n case 'M':\n case 'L':\n formatObj.month = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{month}';\n\n // --- Week (not supported in this polyfill)\n case 'w':\n // week of the year\n formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';\n return '{weekday}';\n case 'W':\n // week of the month\n formatObj.week = 'numeric';\n return '{weekday}';\n\n // --- Day\n case 'd':\n // day of the month\n formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';\n return '{day}';\n case 'D': // day of the year\n case 'F': // day of the week\n case 'g':\n // 1..n: Modified Julian day\n formatObj.day = 'numeric';\n return '{day}';\n\n // --- Week Day\n case 'E':\n // day of the week\n formatObj.weekday = [ 'short', 'short', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'e':\n // local day of the week\n formatObj.weekday = [ 'numeric', '2-digit', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'c':\n // stand alone local day of the week\n formatObj.weekday = [ 'numeric', undefined, 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n\n // --- Period\n case 'a': // AM, PM\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n formatObj.hour12 = true;\n return '{ampm}';\n\n // --- Hour\n case 'h':\n case 'H':\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n case 'k':\n case 'K':\n formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n\n // --- Minute\n case 'm':\n formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';\n return '{minute}';\n\n // --- Second\n case 's':\n formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';\n return '{second}';\n case 'S':\n case 'A':\n formatObj.second = 'numeric';\n return '{second}';\n\n // --- Timezone\n case 'z': // 1..3, 4: specific non-location format\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n // this polyfill only supports much, for now, we are just doing something dummy\n formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';\n return '{timeZoneName}';\n }\n}\n\n\n/**\n * Converts the CLDR availableFormats into the objects and patterns required by\n * the ECMAScript Internationalization API specification.\n */\nexport function createDateTimeFormat(skeleton, pattern) {\n // we ignore certain patterns that are unsupported to avoid this expensive op.\n if (unwantedDTCs.test(pattern))\n return undefined;\n\n let formatObj = {\n originalPattern: pattern,\n _: {},\n };\n\n // Replace the pattern string with the one required by the specification, whilst\n // at the same time evaluating it for the subsets and formats\n formatObj.extendedPattern = pattern.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj._);\n });\n\n // Match the skeleton string with the one required by the specification\n // this implementation is based on the Date Field Symbol Table:\n // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n // Note: we are adding extra data to the formatObject even though this polyfill\n // might not support it.\n skeleton.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj);\n });\n\n return computeFinalPatterns(formatObj);\n}\n\n/**\n * Processes DateTime formats from CLDR to an easier-to-parse format.\n * the result of this operation should be cached the first time a particular\n * calendar is analyzed.\n *\n * The specification requires we support at least the following subsets of\n * date/time components:\n *\n * - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'\n * - 'weekday', 'year', 'month', 'day'\n * - 'year', 'month', 'day'\n * - 'year', 'month'\n * - 'month', 'day'\n * - 'hour', 'minute', 'second'\n * - 'hour', 'minute'\n *\n * We need to cherry pick at least these subsets from the CLDR data and convert\n * them into the pattern objects used in the ECMA-402 API.\n */\nexport function createDateTimeFormats(formats) {\n let availableFormats = formats.availableFormats;\n let timeFormats = formats.timeFormats;\n let dateFormats = formats.dateFormats;\n let result = [];\n let skeleton, pattern, computed, i, j;\n let timeRelatedFormats = [];\n let dateRelatedFormats = [];\n\n // Map available (custom) formats into a pattern for createDateTimeFormats\n for (skeleton in availableFormats) {\n if (availableFormats.hasOwnProperty(skeleton)) {\n pattern = availableFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n // in some cases, the format is only displaying date specific props\n // or time specific props, in which case we need to also produce the\n // combined formats.\n if (isDateFormatOnly(computed)) {\n dateRelatedFormats.push(computed);\n } else if (isTimeFormatOnly(computed)) {\n timeRelatedFormats.push(computed);\n }\n }\n }\n }\n\n // Map time formats into a pattern for createDateTimeFormats\n for (skeleton in timeFormats) {\n if (timeFormats.hasOwnProperty(skeleton)) {\n pattern = timeFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n timeRelatedFormats.push(computed);\n }\n }\n }\n\n // Map date formats into a pattern for createDateTimeFormats\n for (skeleton in dateFormats) {\n if (dateFormats.hasOwnProperty(skeleton)) {\n pattern = dateFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n dateRelatedFormats.push(computed);\n }\n }\n }\n\n // combine custom time and custom date formats when they are orthogonals to complete the\n // formats supported by CLDR.\n // This Algo is based on section \"Missing Skeleton Fields\" from:\n // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n for (i = 0; i < timeRelatedFormats.length; i += 1) {\n for (j = 0; j < dateRelatedFormats.length; j += 1) {\n if (dateRelatedFormats[j].month === 'long') {\n pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;\n } else if (dateRelatedFormats[j].month === 'short') {\n pattern = formats.medium;\n } else {\n pattern = formats.short;\n }\n computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);\n computed.originalPattern = pattern;\n computed.extendedPattern = pattern\n .replace('{0}', timeRelatedFormats[i].extendedPattern)\n .replace('{1}', dateRelatedFormats[j].extendedPattern)\n .replace(/^[,\\s]+|[,\\s]+$/gi, '');\n result.push(computeFinalPatterns(computed));\n }\n }\n\n return result;\n}\n","// 12.1 The Intl.DateTimeFormat constructor\n// ==================================\n\nimport {\n toLatinUpperCase,\n} from './6.locales-currencies-tz.js';\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n ResolveLocale,\n GetOption,\n SupportedLocales,\n} from \"./9.negotiation.js\";\n\nimport {\n FormatNumber,\n} from \"./11.numberformat.js\";\n\nimport {\n createDateTimeFormats,\n} from \"./cldr\";\n\nimport {\n internals,\n es3,\n fnBind,\n defineProperty,\n toObject,\n getInternalProperties,\n createRegExpRestore,\n secret,\n Record,\n List,\n hop,\n objCreate,\n arrPush,\n arrIndexOf,\n} from './util.js';\n\n// An object map of date component keys, saves using a regex later\nconst dateWidths = objCreate(null, { narrow:{}, short:{}, long:{} });\n\n/**\n * Returns a string for a date component, resolved using multiple inheritance as specified\n * as specified in the Unicode Technical Standard 35.\n */\nfunction resolveDateString(data, ca, component, width, key) {\n // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:\n // 'In clearly specified instances, resources may inherit from within the same locale.\n // For example, ... the Buddhist calendar inherits from the Gregorian calendar.'\n let obj = data[ca] && data[ca][component]\n ? data[ca][component]\n : data.gregory[component],\n\n // \"sideways\" inheritance resolves strings when a key doesn't exist\n alts = {\n narrow: ['short', 'long'],\n short: ['long', 'narrow'],\n long: ['short', 'narrow'],\n },\n\n //\n resolved = hop.call(obj, width)\n ? obj[width]\n : hop.call(obj, alts[width][0])\n ? obj[alts[width][0]]\n : obj[alts[width][1]];\n\n // `key` wouldn't be specified for components 'dayPeriods'\n return key !== null ? resolved[key] : resolved;\n}\n\n// Define the DateTimeFormat constructor internally so it cannot be tainted\nexport function DateTimeFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.DateTimeFormat(locales, options);\n }\n return InitializeDateTimeFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'DateTimeFormat', {\n configurable: true,\n writable: true,\n value: DateTimeFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(DateTimeFormatConstructor, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat\n * (which must be an object), locales, and options. It initializes dateTimeFormat as a\n * DateTimeFormat object.\n */\nexport function/* 12.1.1.1 */InitializeDateTimeFormat (dateTimeFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(dateTimeFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(dateTimeFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined below) with arguments options, \"any\", and \"date\".\n options = ToDateTimeOptions(options, 'any', 'date');\n\n // 5. Let opt be a new Record.\n let opt = new Record();\n\n // 6. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with arguments options, \"localeMatcher\", \"string\", a List\n // containing the two String values \"lookup\" and \"best fit\", and \"best fit\".\n let matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 7. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 8. Let DateTimeFormat be the standard built-in object that is the initial\n // value of Intl.DateTimeFormat.\n let DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need\n\n // 9. Let localeData be the value of the [[localeData]] internal property of\n // DateTimeFormat.\n let localeData = DateTimeFormat['[[localeData]]'];\n\n // 10. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of DateTimeFormat, and localeData.\n let r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales,\n opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 11. Set the [[locale]] internal property of dateTimeFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of\n // r.[[ca]].\n internal['[[calendar]]'] = r['[[ca]]'];\n\n // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of\n // r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let tz be the result of calling the [[Get]] internal method of options with\n // argument \"timeZone\".\n let tz = options.timeZone;\n\n // 16. If tz is not undefined, then\n if (tz !== undefined) {\n // a. Let tz be ToString(tz).\n // b. Convert tz to upper case as described in 6.1.\n // NOTE: If an implementation accepts additional time zone values, as permitted\n // under certain conditions by the Conformance clause, different casing\n // rules apply.\n tz = toLatinUpperCase(tz);\n\n // c. If tz is not \"UTC\", then throw a RangeError exception.\n // ###TODO: accept more time zones###\n if (tz !== 'UTC')\n throw new RangeError('timeZone is not supported.');\n }\n\n // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.\n internal['[[timeZone]]'] = tz;\n\n // 18. Let opt be a new Record.\n opt = new Record();\n\n // 19. For each row of Table 3, except the header row, do:\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // 20. Let prop be the name given in the Property column of the row.\n // 21. Let value be the result of calling the GetOption abstract operation,\n // passing as argument options, the name given in the Property column of the\n // row, \"string\", a List containing the strings given in the Values column of\n // the row, and undefined.\n let value = GetOption(options, prop, 'string', dateTimeComponents[prop]);\n\n // 22. Set opt.[[]] to value.\n opt['[['+prop+']]'] = value;\n }\n\n // Assigned a value below\n let bestFormat;\n\n // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 24. Let formats be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"formats\".\n // Note: we process the CLDR formats into the spec'd structure\n let formats = ToDateTimeFormats(dataLocaleData.formats);\n\n // 25. Let matcher be the result of calling the GetOption abstract operation with\n // arguments options, \"formatMatcher\", \"string\", a List containing the two String\n // values \"basic\" and \"best fit\", and \"best fit\".\n matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');\n\n // Optimization: caching the processed formats as a one time operation by\n // replacing the initial structure from localeData\n dataLocaleData.formats = formats;\n\n // 26. If matcher is \"basic\", then\n if (matcher === 'basic') {\n // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract\n // operation (defined below) with opt and formats.\n bestFormat = BasicFormatMatcher(opt, formats);\n\n // 28. Else\n } else {\n {\n // diverging\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n opt.hour12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n }\n // 29. Let bestFormat be the result of calling the BestFitFormatMatcher\n // abstract operation (defined below) with opt and formats.\n bestFormat = BestFitFormatMatcher(opt, formats);\n }\n\n // 30. For each row in Table 3, except the header row, do\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // a. Let prop be the name given in the Property column of the row.\n // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of\n // bestFormat with argument prop.\n // c. If pDesc is not undefined, then\n if (hop.call(bestFormat, prop)) {\n // i. Let p be the result of calling the [[Get]] internal method of bestFormat\n // with argument prop.\n let p = bestFormat[prop];\n {\n // diverging\n p = bestFormat._ && hop.call(bestFormat._, prop) ? bestFormat._[prop] : p;\n }\n\n // ii. Set the [[]] internal property of dateTimeFormat to p.\n internal['[['+prop+']]'] = p;\n }\n }\n\n let pattern; // Assigned a value below\n\n // 31. Let hr12 be the result of calling the GetOption abstract operation with\n // arguments options, \"hour12\", \"boolean\", undefined, and undefined.\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n\n // 32. If dateTimeFormat has an internal property [[hour]], then\n if (internal['[[hour]]']) {\n // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]\n // internal method of dataLocaleData with argument \"hour12\".\n hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n\n // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.\n internal['[[hour12]]'] = hr12;\n\n // c. If hr12 is true, then\n if (hr12 === true) {\n // i. Let hourNo0 be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"hourNo0\".\n let hourNo0 = dataLocaleData.hourNo0;\n\n // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.\n internal['[[hourNo0]]'] = hourNo0;\n\n // iii. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern12\".\n pattern = bestFormat.pattern12;\n }\n\n // d. Else\n else\n // i. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n }\n\n // 33. Else\n else\n // a. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n\n // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.\n internal['[[pattern]]'] = pattern;\n\n // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to\n // true.\n internal['[[initializedDateTimeFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return dateTimeFormat;\n}\n\n/**\n * Several DateTimeFormat algorithms use values from the following table, which provides\n * property names and allowable values for the components of date and time formats:\n */\nlet dateTimeComponents = {\n weekday: [ \"narrow\", \"short\", \"long\" ],\n era: [ \"narrow\", \"short\", \"long\" ],\n year: [ \"2-digit\", \"numeric\" ],\n month: [ \"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\" ],\n day: [ \"2-digit\", \"numeric\" ],\n hour: [ \"2-digit\", \"numeric\" ],\n minute: [ \"2-digit\", \"numeric\" ],\n second: [ \"2-digit\", \"numeric\" ],\n timeZoneName: [ \"short\", \"long\" ],\n};\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeFormats(formats) {\n if (Object.prototype.toString.call(formats) === '[object Array]') {\n return formats;\n }\n return createDateTimeFormats(formats);\n}\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nexport function ToDateTimeOptions (options, required, defaults) {\n // 1. If options is undefined, then let options be null, else let options be\n // ToObject(options).\n if (options === undefined)\n options = null;\n\n else {\n // (#12) options needs to be a Record, but it also needs to inherit properties\n let opt2 = toObject(options);\n options = new Record();\n\n for (let k in opt2)\n options[k] = opt2[k];\n }\n\n // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.\n let create = objCreate;\n\n // 3. Let options be the result of calling the [[Call]] internal method of create with\n // undefined as the this value and an argument list containing the single item\n // options.\n options = create(options);\n\n // 4. Let needDefaults be true.\n let needDefaults = true;\n\n // 5. If required is \"date\" or \"any\", then\n if (required === 'date' || required === 'any') {\n // a. For each of the property names \"weekday\", \"year\", \"month\", \"day\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.weekday !== undefined || options.year !== undefined\n || options.month !== undefined || options.day !== undefined)\n needDefaults = false;\n }\n\n // 6. If required is \"time\" or \"any\", then\n if (required === 'time' || required === 'any') {\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined)\n needDefaults = false;\n }\n\n // 7. If needDefaults is true and defaults is either \"date\" or \"all\", then\n if (needDefaults && (defaults === 'date' || defaults === 'all'))\n // a. For each of the property names \"year\", \"month\", \"day\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.year = options.month = options.day = 'numeric';\n\n // 8. If needDefaults is true and defaults is either \"time\" or \"all\", then\n if (needDefaults && (defaults === 'time' || defaults === 'all'))\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.hour = options.minute = options.second = 'numeric';\n\n // 9. Return options.\n return options;\n}\n\n/**\n * When the BasicFormatMatcher abstract operation is called with two arguments options and\n * formats, the following steps are taken:\n */\nfunction BasicFormatMatcher (options, formats) {\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta === 2)\n score -= longMorePenalty;\n\n // 6. Else if delta = 1, decrease score by shortMorePenalty.\n else if (delta === 1)\n score -= shortMorePenalty;\n\n // 7. Else if delta = -1, decrease score by shortLessPenalty.\n else if (delta === -1)\n score -= shortLessPenalty;\n\n // 8. Else if delta = -2, decrease score by longLessPenalty.\n else if (delta === -2)\n score -= longLessPenalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/**\n * When the BestFitFormatMatcher abstract operation is called with two arguments options\n * and formats, it performs implementation dependent steps, which should return a set of\n * component representations that a typical user of the selected locale would perceive as\n * at least as good as the one returned by BasicFormatMatcher.\n *\n * This polyfill defines the algorithm to be the same as BasicFormatMatcher,\n * with the addition of bonus points awarded where the requested format is of\n * the same data type as the potentially matching format.\n *\n * This algo relies on the concept of closest distance matching described here:\n * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\n * Typically a “best match” is found using a closest distance match, such as:\n *\n * Symbols requesting a best choice for the locale are replaced.\n * j → one of {H, k, h, K}; C → one of {a, b, B}\n * -> Covered by cldr.js matching process\n *\n * For fields with symbols representing the same type (year, month, day, etc):\n * Most symbols have a small distance from each other.\n * M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...\n * -> Covered by cldr.js matching process\n *\n * Width differences among fields, other than those marking text vs numeric, are given small distance from each other.\n * MMM ≅ MMMM\n * MM ≅ M\n * Numeric and text fields are given a larger distance from each other.\n * MMM ≈ MM\n * Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.\n * d ≋ D; ...\n * Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).\n *\n *\n * For example,\n *\n * { month: 'numeric', day: 'numeric' }\n *\n * should match\n *\n * { month: '2-digit', day: '2-digit' }\n *\n * rather than\n *\n * { month: 'short', day: 'numeric' }\n *\n * This makes sense because a user requesting a formatted date with numeric parts would\n * not expect to see the returned format containing narrow, short or long part names\n */\nfunction BestFitFormatMatcher (options, formats) {\n\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n let hour12Penalty = 1;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n {\n // diverging from spec\n // When the bestFit argument is true, subtract additional penalty where data types are not the same\n if ((formatPropIndex <= 1 && optionsPropIndex >= 2) || (formatPropIndex >= 2 && optionsPropIndex <= 1)) {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 0)\n score -= longMorePenalty;\n else if (delta < 0)\n score -= longLessPenalty;\n } else {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 1)\n score -= shortMorePenalty;\n else if (delta < -1)\n score -= shortLessPenalty;\n }\n }\n }\n }\n\n {\n // diverging to also take into consideration differences between 12 or 24 hours\n // which is special for the best fit only.\n if (format._.hour12 !== options.hour12) {\n score -= hour12Penalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/* 12.2.3 */internals.DateTimeFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['ca', 'nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the\n * following steps are taken:\n */\n/* 12.2.2 */\ndefineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * DateTimeFormat object.\n */\n/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatDateTime,\n});\n\ndefineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {\n configurable: true,\n get: GetFormatToPartsDateTime,\n});\n\nfunction GetFormatDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this DateTimeFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 0, that takes the argument date and\n // performs the following steps:\n let F = function () {\n // i. If date is not provided or is undefined, then let x be the\n // result as if by the expression Date.now() where Date.now is\n // the standard built-in function defined in ES5, 15.9.4.4.\n // ii. Else let x be ToNumber(date).\n // iii. Return the result of calling the FormatDateTime abstract\n // operation (defined below) with arguments this and x.\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatDateTime(this, x);\n };\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction GetFormatToPartsDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');\n\n if (internal['[[boundFormatToParts]]'] === undefined) {\n let F = function () {\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatToPartsDateTime(this, x);\n };\n let bf = fnBind.call(F, this);\n internal['[[boundFormatToParts]]'] = bf;\n }\n return internal['[[boundFormatToParts]]'];\n}\n\nfunction CreateDateTimeParts(dateTimeFormat, x) {\n // 1. If x is not a finite Number, then throw a RangeError exception.\n if (!isFinite(x))\n throw new RangeError('Invalid valid date passed to format');\n\n let internal = dateTimeFormat.__getInternalProperties(secret);\n\n // Creating restore point for properties on the RegExp object... please wait\n /* let regexpState = */createRegExpRestore(); // ###TODO: review this\n\n // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.\n let locale = internal['[[locale]]'];\n\n // 3. Let nf be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {useGrouping: false}) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n let nf = new Intl.NumberFormat([locale], {useGrouping: false});\n\n // 4. Let nf2 be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:\n // false}) where Intl.NumberFormat is the standard built-in constructor defined in\n // 11.1.3.\n let nf2 = new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping: false});\n\n // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined\n // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,\n // and the value of the [[timeZone]] internal property of dateTimeFormat.\n let tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);\n\n // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.\n let pattern = internal['[[pattern]]'];\n\n // 7.\n let result = new List();\n\n // 8.\n let index = 0;\n\n // 9.\n let beginIndex = pattern.indexOf('{');\n\n // 10.\n let endIndex = 0;\n\n // Need the locale minus any extensions\n let dataLocale = internal['[[dataLocale]]'];\n\n // Need the calendar data from CLDR\n let localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;\n let ca = internal['[[calendar]]'];\n\n // 11.\n while (beginIndex !== -1) {\n let fv;\n // a.\n endIndex = pattern.indexOf('}', beginIndex);\n // b.\n if (endIndex === -1) {\n throw new Error('Unclosed pattern');\n }\n // c.\n if (beginIndex > index) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(index, beginIndex),\n });\n }\n // d.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // e.\n if (dateTimeComponents.hasOwnProperty(p)) {\n // i. Let f be the value of the [[

]] internal property of dateTimeFormat.\n let f = internal['[['+ p +']]'];\n // ii. Let v be the value of tm.[[

]].\n let v = tm['[['+ p +']]'];\n // iii. If p is \"year\" and v ≤ 0, then let v be 1 - v.\n if (p === 'year' && v <= 0) {\n v = 1 - v;\n }\n // iv. If p is \"month\", then increase v by 1.\n else if (p === 'month') {\n v++;\n }\n // v. If p is \"hour\" and the value of the [[hour12]] internal property of\n // dateTimeFormat is true, then\n else if (p === 'hour' && internal['[[hour12]]'] === true) {\n // 1. Let v be v modulo 12.\n v = v % 12;\n // 2. If v is 0 and the value of the [[hourNo0]] internal property of\n // dateTimeFormat is true, then let v be 12.\n if (v === 0 && internal['[[hourNo0]]'] === true) {\n v = 12;\n }\n }\n\n // vi. If f is \"numeric\", then\n if (f === 'numeric') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments nf and v.\n fv = FormatNumber(nf, v);\n }\n // vii. Else if f is \"2-digit\", then\n else if (f === '2-digit') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // with arguments nf2 and v.\n fv = FormatNumber(nf2, v);\n // 2. If the length of fv is greater than 2, let fv be the substring of fv\n // containing the last two characters.\n if (fv.length > 2) {\n fv = fv.slice(-2);\n }\n }\n // viii. Else if f is \"narrow\", \"short\", or \"long\", then let fv be a String\n // value representing f in the desired form; the String value depends upon\n // the implementation and the effective locale and calendar of\n // dateTimeFormat. If p is \"month\", then the String value may also depend\n // on whether dateTimeFormat has a [[day]] internal property. If p is\n // \"timeZoneName\", then the String value may also depend on the value of\n // the [[inDST]] field of tm.\n else if (f in dateWidths) {\n switch (p) {\n case 'month':\n fv = resolveDateString(localeData, ca, 'months', f, tm['[['+ p +']]']);\n break;\n\n case 'weekday':\n try {\n fv = resolveDateString(localeData, ca, 'days', f, tm['[['+ p +']]']);\n // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];\n } catch (e) {\n throw new Error('Could not find weekday data for locale '+locale);\n }\n break;\n\n case 'timeZoneName':\n fv = ''; // ###TODO\n break;\n\n case 'era':\n try {\n fv = resolveDateString(localeData, ca, 'eras', f, tm['[['+ p +']]']);\n } catch (e) {\n throw new Error('Could not find era data for locale '+locale);\n }\n break;\n\n default:\n fv = tm['[['+ p +']]'];\n }\n }\n // ix\n arrPush.call(result, {\n type: p,\n value: fv,\n });\n // f.\n } else if (p === 'ampm') {\n // i.\n let v = tm['[[hour]]'];\n // ii./iii.\n fv = resolveDateString(localeData, ca, 'dayPeriods', v > 11 ? 'pm' : 'am', null);\n // iv.\n arrPush.call(result, {\n type: 'dayPeriod',\n value: fv,\n });\n // g.\n } else {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(beginIndex, endIndex + 1),\n });\n }\n // h.\n index = endIndex + 1;\n // i.\n beginIndex = pattern.indexOf('{', index);\n }\n // 12.\n if (endIndex < pattern.length - 1) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substr(endIndex + 1),\n });\n }\n // 13.\n return result;\n}\n\n/**\n * When the FormatDateTime abstract operation is called with arguments dateTimeFormat\n * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number\n * value), it returns a String value representing x (interpreted as a time value as\n * specified in ES5, 15.9.1.1) according to the effective locale and the formatting\n * options of dateTimeFormat.\n */\nexport function FormatDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = '';\n\n for (let part in parts) {\n result += parts[part].value;\n }\n return result;\n}\n\nfunction FormatToPartsDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = [];\n for (let part in parts) {\n result.push({\n type: parts[part].type,\n value: parts[part].value,\n });\n }\n return result;\n}\n\n\n/**\n * When the ToLocalTime abstract operation is called with arguments date, calendar, and\n * timeZone, the following steps are taken:\n */\nfunction ToLocalTime(date, calendar, timeZone) {\n // 1. Apply calendrical calculations on date for the given calendar and time zone to\n // produce weekday, era, year, month, day, hour, minute, second, and inDST values.\n // The calculations should use best available information about the specified\n // calendar and time zone. If the calendar is \"gregory\", then the calculations must\n // match the algorithms specified in ES5, 15.9.1, except that calculations are not\n // bound by the restrictions on the use of best available information on time zones\n // for local time zone adjustment and daylight saving time adjustment imposed by\n // ES5, 15.9.1.7 and 15.9.1.8.\n // ###TODO###\n let d = new Date(date),\n m = 'get' + (timeZone || '');\n\n // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],\n // [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding\n // calculated value.\n return new Record({\n '[[weekday]]': d[m + 'Day'](),\n '[[era]]' : +(d[m + 'FullYear']() >= 0),\n '[[year]]' : d[m + 'FullYear'](),\n '[[month]]' : d[m + 'Month'](),\n '[[day]]' : d[m + 'Date'](),\n '[[hour]]' : d[m + 'Hours'](),\n '[[minute]]' : d[m + 'Minutes'](),\n '[[second]]' : d[m + 'Seconds'](),\n '[[inDST]]' : false, // ###TODO###\n });\n}\n\n/**\n * The function returns a new object whose properties and attributes are set as if\n * constructed by an object literal assigning to each of the following properties the\n * value of the corresponding internal property of this DateTimeFormat object (see 12.4):\n * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,\n * hour, minute, second, and timeZoneName. Properties whose corresponding internal\n * properties are not present are not assigned.\n */\n/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {\n writable: true,\n configurable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday',\n 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","// Sect 13 Locale Sensitive Functions of the ECMAScript Language Specification\n// ===========================================================================\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n FormatNumber,\n NumberFormatConstructor,\n} from \"./11.numberformat.js\";\n\nimport {\n ToDateTimeOptions,\n DateTimeFormatConstructor,\n FormatDateTime,\n} from \"./12.datetimeformat.js\";\n\nlet ls = Intl.__localeSensitiveProtos = {\n Number: {},\n Date: {},\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.2.1 */ls.Number.toLocaleString = function () {\n // Satisfy test 13.2.1_1\n if (Object.prototype.toString.call(this) !== '[object Number]')\n throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');\n\n // 1. Let x be this Number value (as defined in ES5, 15.7.4).\n // 2. If locales is not provided, then let locales be undefined.\n // 3. If options is not provided, then let options be undefined.\n // 4. Let numberFormat be the result of creating a new object as if by the\n // expression new Intl.NumberFormat(locales, options) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n // 5. Return the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments numberFormat and x.\n return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.3.1 */ls.Date.toLocaleString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"any\", and \"all\".\n options = ToDateTimeOptions(options, 'any', 'all');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleDateString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.2 */ls.Date.toLocaleDateString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0],\n\n // 4. If options is not provided, then let options be undefined.\n options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"date\", and \"date\".\n options = ToDateTimeOptions(options, 'date', 'date');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleTimeString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.3 */ls.Date.toLocaleTimeString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"time\", and \"time\".\n options = ToDateTimeOptions(options, 'time', 'time');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\nexport default ls;\n","/**\n * @license Copyright 2013 Andy Earnshaw, MIT License\n *\n * Implements the ECMAScript Internationalization API in ES5-compatible environments,\n * following the ECMA-402 specification as closely as possible\n *\n * ECMA-402: http://ecma-international.org/ecma-402/1.0/\n *\n * CLDR format locale data should be provided using IntlPolyfill.__addLocaleData().\n */\n\nimport {\n defineProperty,\n hop,\n arrPush,\n arrShift,\n internals,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n defaultLocale,\n setDefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport \"./11.numberformat.js\";\n\nimport \"./12.datetimeformat.js\";\n\nimport ls from \"./13.locale-sensitive-functions.js\";\n\ndefineProperty(Intl, '__applyLocaleSensitivePrototypes', {\n writable: true,\n configurable: true,\n value: function () {\n defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });\n // Need this here for IE 8, to avoid the _DontEnum_ bug\n defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });\n\n for (let k in ls.Date) {\n if (hop.call(ls.Date, k))\n defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });\n }\n },\n});\n\n/**\n * Can't really ship a single script with data for hundreds of locales, so we provide\n * this __addLocaleData method as a means for the developer to add the data on an\n * as-needed basis\n */\ndefineProperty(Intl, '__addLocaleData', {\n value: function (data) {\n if (!IsStructurallyValidLanguageTag(data.locale))\n throw new Error(\"Object passed doesn't identify itself with a valid language tag\");\n\n addLocaleData(data, data.locale);\n },\n});\n\nfunction addLocaleData (data, tag) {\n // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present\n if (!data.number)\n throw new Error(\"Object passed doesn't contain locale data for Intl.NumberFormat\");\n\n let locale,\n locales = [ tag ],\n parts = tag.split('-');\n\n // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc\n if (parts.length > 2 && parts[1].length === 4)\n arrPush.call(locales, parts[0] + '-' + parts[2]);\n\n while ((locale = arrShift.call(locales))) {\n // Add to NumberFormat internal properties as per 11.2.3\n arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);\n internals.NumberFormat['[[localeData]]'][locale] = data.number;\n\n // ...and DateTimeFormat internal properties as per 12.2.3\n if (data.date) {\n data.date.nu = data.number.nu;\n arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);\n internals.DateTimeFormat['[[localeData]]'][locale] = data.date;\n }\n }\n\n // If this is the first set of locale data added, make it the default\n if (defaultLocale === undefined)\n setDefaultLocale(tag);\n}\n\nexport default Intl;\n","import IntlPolyfill from \"./core.js\";\n\n// hack to export the polyfill as global Intl if needed\nif (typeof Intl !== 'undefined') {\n try {\n Intl = IntlPolyfill;\n IntlPolyfill.__applyLocaleSensitivePrototypes();\n } catch (e) {\n // can be read only property\n }\n}\n\nexport default IntlPolyfill;\n"],"names":["Intl","IntlPolyfill"],"mappings":"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"} \ No newline at end of file diff --git a/dist/Intl.min.js.map b/dist/Intl.min.js.map index b543d4353..bca12f96f 100644 --- a/dist/Intl.min.js.map +++ b/dist/Intl.min.js.map @@ -1 +1 @@ -{"version":3,"file":"Intl.min.js","sources":["../src/util.js","../src/exp.js","../src/6.locales-currencies-tz.js","../src/9.negotiation.js","../src/8.intl.js","../src/11.numberformat.js","../src/cldr.js","../src/12.datetimeformat.js","../src/13.locale-sensitive-functions.js","../src/core.js","../src/main.js"],"sourcesContent":["const realDefineProp = (function () {\n let sentinel = {};\n try {\n Object.defineProperty(sentinel, 'a', {});\n return 'a' in sentinel;\n } catch (e) {\n return false;\n }\n })();\n\n// Need a workaround for getters in ES3\nexport const es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\n// We use this a lot (and need it for proto-less objects)\nexport const hop = Object.prototype.hasOwnProperty;\n\n// Naive defineProperty for compatibility\nexport const defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {\n if ('get' in desc && obj.__defineGetter__)\n obj.__defineGetter__(name, desc.get);\n\n else if (!hop.call(obj, name) || 'value' in desc)\n obj[name] = desc.value;\n};\n\n// Array.prototype.indexOf, as good as we need it to be\nexport const arrIndexOf = Array.prototype.indexOf || function (search) {\n /*jshint validthis:true */\n let t = this;\n if (!t.length)\n return -1;\n\n for (let i = arguments[1] || 0, max = t.length; i < max; i++) {\n if (t[i] === search)\n return i;\n }\n\n return -1;\n};\n\n// Create an object with the specified prototype (2nd arg required for Record)\nexport const objCreate = Object.create || function (proto, props) {\n let obj;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (let k in props) {\n if (hop.call(props, k))\n defineProperty(obj, k, props[k]);\n }\n\n return obj;\n};\n\n// Snapshot some (hopefully still) native built-ins\nexport const arrSlice = Array.prototype.slice;\nexport const arrConcat = Array.prototype.concat;\nexport const arrPush = Array.prototype.push;\nexport const arrJoin = Array.prototype.join;\nexport const arrShift = Array.prototype.shift;\n\n// Naive Function.prototype.bind for compatibility\nexport const fnBind = Function.prototype.bind || function (thisObj) {\n let fn = this,\n args = arrSlice.call(arguments, 1);\n\n // All our (presently) bound functions have either 1 or 0 arguments. By returning\n // different function signatures, we can pass some tests in ES3 environments\n if (fn.length === 1) {\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n }\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n};\n\n// Object housing internal properties for constructors\nexport const internals = objCreate(null);\n\n// Keep internal properties internal\nexport const secret = Math.random();\n\n// Helper functions\n// ================\n\n/**\n * A function to deal with the inaccuracy of calculating log10 in pre-ES6\n * JavaScript environments. Math.log(num) / Math.LN10 was responsible for\n * causing issue #62.\n */\nexport function log10Floor (n) {\n // ES6 provides the more accurate Math.log10\n if (typeof Math.log10 === 'function')\n return Math.floor(Math.log10(n));\n\n let x = Math.round(Math.log(n) * Math.LOG10E);\n return x - (Number('1e' + x) > n);\n}\n\n/**\n * A map that doesn't contain Object in its prototype chain\n */\nexport function Record (obj) {\n // Copy only own properties over unless this object is already a Record instance\n for (let k in obj) {\n if (obj instanceof Record || hop.call(obj, k))\n defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });\n }\n}\nRecord.prototype = objCreate(null);\n\n/**\n * An ordered list\n */\nexport function List() {\n defineProperty(this, 'length', { writable:true, value: 0 });\n\n if (arguments.length)\n arrPush.apply(this, arrSlice.call(arguments));\n}\nList.prototype = objCreate(null);\n\n/**\n * Constructs a regular expression to restore tainted RegExp properties\n */\nexport function createRegExpRestore () {\n let esc = /[.?*+^$[\\]\\\\(){}|-]/g,\n lm = RegExp.lastMatch || '',\n ml = RegExp.multiline ? 'm' : '',\n ret = { input: RegExp.input },\n reg = new List(),\n has = false,\n cap = {};\n\n // Create a snapshot of all the 'captured' properties\n for (let i = 1; i <= 9; i++)\n has = (cap['$'+i] = RegExp['$'+i]) || has;\n\n // Now we've snapshotted some properties, escape the lastMatch string\n lm = lm.replace(esc, '\\\\$&');\n\n // If any of the captured strings were non-empty, iterate over them all\n if (has) {\n for (let i = 1; i <= 9; i++) {\n let m = cap['$'+i];\n\n // If it's empty, add an empty capturing group\n if (!m)\n lm = '()' + lm;\n\n // Else find the string in lm and escape & wrap it to capture it\n else {\n m = m.replace(esc, '\\\\$&');\n lm = lm.replace(m, '(' + m + ')');\n }\n\n // Push it to the reg and chop lm to make sure further groups come after\n arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));\n lm = lm.slice(lm.indexOf('(') + 1);\n }\n }\n\n // Create the regular expression that will reconstruct the RegExp properties\n ret.exp = new RegExp(arrJoin.call(reg, '') + lm, ml);\n\n return ret;\n}\n\n/**\n * Mimics ES5's abstract ToObject() function\n */\nexport function toObject (arg) {\n if (arg === null)\n throw new TypeError('Cannot convert null or undefined to object');\n\n return Object(arg);\n}\n\n/**\n * Returns \"internal\" properties for an object\n */\nexport function getInternalProperties (obj) {\n if (hop.call(obj, '__getInternalProperties'))\n return obj.__getInternalProperties(secret);\n\n return objCreate(null);\n}\n","/**\n* Defines regular expressions for various operations related to the BCP 47 syntax,\n* as defined at http://tools.ietf.org/html/bcp47#section-2.1\n*/\n\n// extlang = 3ALPHA ; selected ISO 639 codes\n// *2(\"-\" 3ALPHA) ; permanently reserved\nconst extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';\n\n// language = 2*3ALPHA ; shortest ISO 639 code\n// [\"-\" extlang] ; sometimes followed by\n// ; extended language subtags\n// / 4ALPHA ; or reserved for future use\n// / 5*8ALPHA ; or registered language subtag\nconst language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';\n\n// script = 4ALPHA ; ISO 15924 code\nconst script = '[a-z]{4}';\n\n// region = 2ALPHA ; ISO 3166-1 code\n// / 3DIGIT ; UN M.49 code\nconst region = '(?:[a-z]{2}|\\\\d{3})';\n\n// variant = 5*8alphanum ; registered variants\n// / (DIGIT 3alphanum)\nconst variant = '(?:[a-z0-9]{5,8}|\\\\d[a-z0-9]{3})';\n\n// ; Single alphanumerics\n// ; \"x\" reserved for private use\n// singleton = DIGIT ; 0 - 9\n// / %x41-57 ; A - W\n// / %x59-5A ; Y - Z\n// / %x61-77 ; a - w\n// / %x79-7A ; y - z\nconst singleton = '[0-9a-wy-z]';\n\n// extension = singleton 1*(\"-\" (2*8alphanum))\nconst extension = singleton + '(?:-[a-z0-9]{2,8})+';\n\n// privateuse = \"x\" 1*(\"-\" (1*8alphanum))\nconst privateuse = 'x(?:-[a-z0-9]{1,8})+';\n\n// irregular = \"en-GB-oed\" ; irregular tags do not match\n// / \"i-ami\" ; the 'langtag' production and\n// / \"i-bnn\" ; would not otherwise be\n// / \"i-default\" ; considered 'well-formed'\n// / \"i-enochian\" ; These tags are all valid,\n// / \"i-hak\" ; but most are deprecated\n// / \"i-klingon\" ; in favor of more modern\n// / \"i-lux\" ; subtags or subtag\n// / \"i-mingo\" ; combination\n// / \"i-navajo\"\n// / \"i-pwn\"\n// / \"i-tao\"\n// / \"i-tay\"\n// / \"i-tsu\"\n// / \"sgn-BE-FR\"\n// / \"sgn-BE-NL\"\n// / \"sgn-CH-DE\"\nconst irregular = '(?:en-GB-oed'\n + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)'\n + '|sgn-(?:BE-FR|BE-NL|CH-DE))';\n\n// regular = \"art-lojban\" ; these tags match the 'langtag'\n// / \"cel-gaulish\" ; production, but their subtags\n// / \"no-bok\" ; are not extended language\n// / \"no-nyn\" ; or variant subtags: their meaning\n// / \"zh-guoyu\" ; is defined by their registration\n// / \"zh-hakka\" ; and all of these are deprecated\n// / \"zh-min\" ; in favor of a more modern\n// / \"zh-min-nan\" ; subtag or sequence of subtags\n// / \"zh-xiang\"\nconst regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn'\n + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';\n\n// grandfathered = irregular ; non-redundant tags registered\n// / regular ; during the RFC 3066 era\nconst grandfathered = '(?:' + irregular + '|' + regular + ')';\n\n// langtag = language\n// [\"-\" script]\n// [\"-\" region]\n// *(\"-\" variant)\n// *(\"-\" extension)\n// [\"-\" privateuse]\nconst langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-'\n + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';\n\n// Language-Tag = langtag ; normal language tags\n// / privateuse ; private use tag\n// / grandfathered ; grandfathered tags\nexport let expBCP47Syntax = RegExp('^(?:'+langtag+'|'+privateuse+'|'+grandfathered+')$', 'i');\n\n// Match duplicate variants in a language tag\nexport let expVariantDupes = RegExp('^(?!x).*?-('+variant+')-(?:\\\\w{4,8}-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match duplicate singletons in a language tag (except in private use)\nexport let expSingletonDupes = RegExp('^(?!x).*?-('+singleton+')-(?:\\\\w+-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match all extension sequences\nexport let expExtSequences = RegExp('-'+extension, 'ig');\n","// Sect 6.2 Language Tags\n// ======================\n\nimport {\n expBCP47Syntax,\n expExtSequences,\n expVariantDupes,\n expSingletonDupes,\n} from './exp';\n\nimport {\n hop,\n arrJoin,\n arrSlice,\n} from \"./util.js\";\n\n// Default locale is the first-added locale data for us\nexport let defaultLocale;\nexport function setDefaultLocale(locale) {\n defaultLocale = locale;\n}\n\n// IANA Subtag Registry redundant tag and subtag maps\nconst redundantTags = {\n tags: {\n \"art-lojban\": \"jbo\",\n \"i-ami\": \"ami\",\n \"i-bnn\": \"bnn\",\n \"i-hak\": \"hak\",\n \"i-klingon\": \"tlh\",\n \"i-lux\": \"lb\",\n \"i-navajo\": \"nv\",\n \"i-pwn\": \"pwn\",\n \"i-tao\": \"tao\",\n \"i-tay\": \"tay\",\n \"i-tsu\": \"tsu\",\n \"no-bok\": \"nb\",\n \"no-nyn\": \"nn\",\n \"sgn-BE-FR\": \"sfb\",\n \"sgn-BE-NL\": \"vgt\",\n \"sgn-CH-DE\": \"sgg\",\n \"zh-guoyu\": \"cmn\",\n \"zh-hakka\": \"hak\",\n \"zh-min-nan\": \"nan\",\n \"zh-xiang\": \"hsn\",\n \"sgn-BR\": \"bzs\",\n \"sgn-CO\": \"csn\",\n \"sgn-DE\": \"gsg\",\n \"sgn-DK\": \"dsl\",\n \"sgn-ES\": \"ssp\",\n \"sgn-FR\": \"fsl\",\n \"sgn-GB\": \"bfi\",\n \"sgn-GR\": \"gss\",\n \"sgn-IE\": \"isg\",\n \"sgn-IT\": \"ise\",\n \"sgn-JP\": \"jsl\",\n \"sgn-MX\": \"mfs\",\n \"sgn-NI\": \"ncs\",\n \"sgn-NL\": \"dse\",\n \"sgn-NO\": \"nsl\",\n \"sgn-PT\": \"psr\",\n \"sgn-SE\": \"swl\",\n \"sgn-US\": \"ase\",\n \"sgn-ZA\": \"sfs\",\n \"zh-cmn\": \"cmn\",\n \"zh-cmn-Hans\": \"cmn-Hans\",\n \"zh-cmn-Hant\": \"cmn-Hant\",\n \"zh-gan\": \"gan\",\n \"zh-wuu\": \"wuu\",\n \"zh-yue\": \"yue\",\n },\n subtags: {\n BU: \"MM\",\n DD: \"DE\",\n FX: \"FR\",\n TP: \"TL\",\n YD: \"YE\",\n ZR: \"CD\",\n heploc: \"alalc97\",\n 'in': \"id\",\n iw: \"he\",\n ji: \"yi\",\n jw: \"jv\",\n mo: \"ro\",\n ayx: \"nun\",\n bjd: \"drl\",\n ccq: \"rki\",\n cjr: \"mom\",\n cka: \"cmr\",\n cmk: \"xch\",\n drh: \"khk\",\n drw: \"prs\",\n gav: \"dev\",\n hrr: \"jal\",\n ibi: \"opa\",\n kgh: \"kml\",\n lcq: \"ppr\",\n mst: \"mry\",\n myt: \"mry\",\n sca: \"hle\",\n tie: \"ras\",\n tkk: \"twm\",\n tlw: \"weo\",\n tnf: \"prs\",\n ybd: \"rki\",\n yma: \"lrr\",\n },\n extLang: {\n aao: [\"aao\", \"ar\"],\n abh: [\"abh\", \"ar\"],\n abv: [\"abv\", \"ar\"],\n acm: [\"acm\", \"ar\"],\n acq: [\"acq\", \"ar\"],\n acw: [\"acw\", \"ar\"],\n acx: [\"acx\", \"ar\"],\n acy: [\"acy\", \"ar\"],\n adf: [\"adf\", \"ar\"],\n ads: [\"ads\", \"sgn\"],\n aeb: [\"aeb\", \"ar\"],\n aec: [\"aec\", \"ar\"],\n aed: [\"aed\", \"sgn\"],\n aen: [\"aen\", \"sgn\"],\n afb: [\"afb\", \"ar\"],\n afg: [\"afg\", \"sgn\"],\n ajp: [\"ajp\", \"ar\"],\n apc: [\"apc\", \"ar\"],\n apd: [\"apd\", \"ar\"],\n arb: [\"arb\", \"ar\"],\n arq: [\"arq\", \"ar\"],\n ars: [\"ars\", \"ar\"],\n ary: [\"ary\", \"ar\"],\n arz: [\"arz\", \"ar\"],\n ase: [\"ase\", \"sgn\"],\n asf: [\"asf\", \"sgn\"],\n asp: [\"asp\", \"sgn\"],\n asq: [\"asq\", \"sgn\"],\n asw: [\"asw\", \"sgn\"],\n auz: [\"auz\", \"ar\"],\n avl: [\"avl\", \"ar\"],\n ayh: [\"ayh\", \"ar\"],\n ayl: [\"ayl\", \"ar\"],\n ayn: [\"ayn\", \"ar\"],\n ayp: [\"ayp\", \"ar\"],\n bbz: [\"bbz\", \"ar\"],\n bfi: [\"bfi\", \"sgn\"],\n bfk: [\"bfk\", \"sgn\"],\n bjn: [\"bjn\", \"ms\"],\n bog: [\"bog\", \"sgn\"],\n bqn: [\"bqn\", \"sgn\"],\n bqy: [\"bqy\", \"sgn\"],\n btj: [\"btj\", \"ms\"],\n bve: [\"bve\", \"ms\"],\n bvl: [\"bvl\", \"sgn\"],\n bvu: [\"bvu\", \"ms\"],\n bzs: [\"bzs\", \"sgn\"],\n cdo: [\"cdo\", \"zh\"],\n cds: [\"cds\", \"sgn\"],\n cjy: [\"cjy\", \"zh\"],\n cmn: [\"cmn\", \"zh\"],\n coa: [\"coa\", \"ms\"],\n cpx: [\"cpx\", \"zh\"],\n csc: [\"csc\", \"sgn\"],\n csd: [\"csd\", \"sgn\"],\n cse: [\"cse\", \"sgn\"],\n csf: [\"csf\", \"sgn\"],\n csg: [\"csg\", \"sgn\"],\n csl: [\"csl\", \"sgn\"],\n csn: [\"csn\", \"sgn\"],\n csq: [\"csq\", \"sgn\"],\n csr: [\"csr\", \"sgn\"],\n czh: [\"czh\", \"zh\"],\n czo: [\"czo\", \"zh\"],\n doq: [\"doq\", \"sgn\"],\n dse: [\"dse\", \"sgn\"],\n dsl: [\"dsl\", \"sgn\"],\n dup: [\"dup\", \"ms\"],\n ecs: [\"ecs\", \"sgn\"],\n esl: [\"esl\", \"sgn\"],\n esn: [\"esn\", \"sgn\"],\n eso: [\"eso\", \"sgn\"],\n eth: [\"eth\", \"sgn\"],\n fcs: [\"fcs\", \"sgn\"],\n fse: [\"fse\", \"sgn\"],\n fsl: [\"fsl\", \"sgn\"],\n fss: [\"fss\", \"sgn\"],\n gan: [\"gan\", \"zh\"],\n gds: [\"gds\", \"sgn\"],\n gom: [\"gom\", \"kok\"],\n gse: [\"gse\", \"sgn\"],\n gsg: [\"gsg\", \"sgn\"],\n gsm: [\"gsm\", \"sgn\"],\n gss: [\"gss\", \"sgn\"],\n gus: [\"gus\", \"sgn\"],\n hab: [\"hab\", \"sgn\"],\n haf: [\"haf\", \"sgn\"],\n hak: [\"hak\", \"zh\"],\n hds: [\"hds\", \"sgn\"],\n hji: [\"hji\", \"ms\"],\n hks: [\"hks\", \"sgn\"],\n hos: [\"hos\", \"sgn\"],\n hps: [\"hps\", \"sgn\"],\n hsh: [\"hsh\", \"sgn\"],\n hsl: [\"hsl\", \"sgn\"],\n hsn: [\"hsn\", \"zh\"],\n icl: [\"icl\", \"sgn\"],\n ils: [\"ils\", \"sgn\"],\n inl: [\"inl\", \"sgn\"],\n ins: [\"ins\", \"sgn\"],\n ise: [\"ise\", \"sgn\"],\n isg: [\"isg\", \"sgn\"],\n isr: [\"isr\", \"sgn\"],\n jak: [\"jak\", \"ms\"],\n jax: [\"jax\", \"ms\"],\n jcs: [\"jcs\", \"sgn\"],\n jhs: [\"jhs\", \"sgn\"],\n jls: [\"jls\", \"sgn\"],\n jos: [\"jos\", \"sgn\"],\n jsl: [\"jsl\", \"sgn\"],\n jus: [\"jus\", \"sgn\"],\n kgi: [\"kgi\", \"sgn\"],\n knn: [\"knn\", \"kok\"],\n kvb: [\"kvb\", \"ms\"],\n kvk: [\"kvk\", \"sgn\"],\n kvr: [\"kvr\", \"ms\"],\n kxd: [\"kxd\", \"ms\"],\n lbs: [\"lbs\", \"sgn\"],\n lce: [\"lce\", \"ms\"],\n lcf: [\"lcf\", \"ms\"],\n liw: [\"liw\", \"ms\"],\n lls: [\"lls\", \"sgn\"],\n lsg: [\"lsg\", \"sgn\"],\n lsl: [\"lsl\", \"sgn\"],\n lso: [\"lso\", \"sgn\"],\n lsp: [\"lsp\", \"sgn\"],\n lst: [\"lst\", \"sgn\"],\n lsy: [\"lsy\", \"sgn\"],\n ltg: [\"ltg\", \"lv\"],\n lvs: [\"lvs\", \"lv\"],\n lzh: [\"lzh\", \"zh\"],\n max: [\"max\", \"ms\"],\n mdl: [\"mdl\", \"sgn\"],\n meo: [\"meo\", \"ms\"],\n mfa: [\"mfa\", \"ms\"],\n mfb: [\"mfb\", \"ms\"],\n mfs: [\"mfs\", \"sgn\"],\n min: [\"min\", \"ms\"],\n mnp: [\"mnp\", \"zh\"],\n mqg: [\"mqg\", \"ms\"],\n mre: [\"mre\", \"sgn\"],\n msd: [\"msd\", \"sgn\"],\n msi: [\"msi\", \"ms\"],\n msr: [\"msr\", \"sgn\"],\n mui: [\"mui\", \"ms\"],\n mzc: [\"mzc\", \"sgn\"],\n mzg: [\"mzg\", \"sgn\"],\n mzy: [\"mzy\", \"sgn\"],\n nan: [\"nan\", \"zh\"],\n nbs: [\"nbs\", \"sgn\"],\n ncs: [\"ncs\", \"sgn\"],\n nsi: [\"nsi\", \"sgn\"],\n nsl: [\"nsl\", \"sgn\"],\n nsp: [\"nsp\", \"sgn\"],\n nsr: [\"nsr\", \"sgn\"],\n nzs: [\"nzs\", \"sgn\"],\n okl: [\"okl\", \"sgn\"],\n orn: [\"orn\", \"ms\"],\n ors: [\"ors\", \"ms\"],\n pel: [\"pel\", \"ms\"],\n pga: [\"pga\", \"ar\"],\n pks: [\"pks\", \"sgn\"],\n prl: [\"prl\", \"sgn\"],\n prz: [\"prz\", \"sgn\"],\n psc: [\"psc\", \"sgn\"],\n psd: [\"psd\", \"sgn\"],\n pse: [\"pse\", \"ms\"],\n psg: [\"psg\", \"sgn\"],\n psl: [\"psl\", \"sgn\"],\n pso: [\"pso\", \"sgn\"],\n psp: [\"psp\", \"sgn\"],\n psr: [\"psr\", \"sgn\"],\n pys: [\"pys\", \"sgn\"],\n rms: [\"rms\", \"sgn\"],\n rsi: [\"rsi\", \"sgn\"],\n rsl: [\"rsl\", \"sgn\"],\n sdl: [\"sdl\", \"sgn\"],\n sfb: [\"sfb\", \"sgn\"],\n sfs: [\"sfs\", \"sgn\"],\n sgg: [\"sgg\", \"sgn\"],\n sgx: [\"sgx\", \"sgn\"],\n shu: [\"shu\", \"ar\"],\n slf: [\"slf\", \"sgn\"],\n sls: [\"sls\", \"sgn\"],\n sqk: [\"sqk\", \"sgn\"],\n sqs: [\"sqs\", \"sgn\"],\n ssh: [\"ssh\", \"ar\"],\n ssp: [\"ssp\", \"sgn\"],\n ssr: [\"ssr\", \"sgn\"],\n svk: [\"svk\", \"sgn\"],\n swc: [\"swc\", \"sw\"],\n swh: [\"swh\", \"sw\"],\n swl: [\"swl\", \"sgn\"],\n syy: [\"syy\", \"sgn\"],\n tmw: [\"tmw\", \"ms\"],\n tse: [\"tse\", \"sgn\"],\n tsm: [\"tsm\", \"sgn\"],\n tsq: [\"tsq\", \"sgn\"],\n tss: [\"tss\", \"sgn\"],\n tsy: [\"tsy\", \"sgn\"],\n tza: [\"tza\", \"sgn\"],\n ugn: [\"ugn\", \"sgn\"],\n ugy: [\"ugy\", \"sgn\"],\n ukl: [\"ukl\", \"sgn\"],\n uks: [\"uks\", \"sgn\"],\n urk: [\"urk\", \"ms\"],\n uzn: [\"uzn\", \"uz\"],\n uzs: [\"uzs\", \"uz\"],\n vgt: [\"vgt\", \"sgn\"],\n vkk: [\"vkk\", \"ms\"],\n vkt: [\"vkt\", \"ms\"],\n vsi: [\"vsi\", \"sgn\"],\n vsl: [\"vsl\", \"sgn\"],\n vsv: [\"vsv\", \"sgn\"],\n wuu: [\"wuu\", \"zh\"],\n xki: [\"xki\", \"sgn\"],\n xml: [\"xml\", \"sgn\"],\n xmm: [\"xmm\", \"ms\"],\n xms: [\"xms\", \"sgn\"],\n yds: [\"yds\", \"sgn\"],\n ysl: [\"ysl\", \"sgn\"],\n yue: [\"yue\", \"zh\"],\n zib: [\"zib\", \"sgn\"],\n zlm: [\"zlm\", \"ms\"],\n zmi: [\"zmi\", \"ms\"],\n zsl: [\"zsl\", \"sgn\"],\n zsm: [\"zsm\", \"ms\"],\n },\n};\n\n/**\n * Convert only a-z to uppercase as per section 6.1 of the spec\n */\nexport function toLatinUpperCase (str) {\n let i = str.length;\n\n while (i--) {\n let ch = str.charAt(i);\n\n if (ch >= \"a\" && ch <= \"z\")\n str = str.slice(0, i) + ch.toUpperCase() + str.slice(i+1);\n }\n\n return str;\n}\n\n/**\n * The IsStructurallyValidLanguageTag abstract operation verifies that the locale\n * argument (which must be a String value)\n *\n * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section\n * 2.1, or successor,\n * - does not include duplicate variant subtags, and\n * - does not include duplicate singleton subtags.\n *\n * The abstract operation returns true if locale can be generated from the ABNF\n * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not\n * contain duplicate variant or singleton subtags (other than as a private use\n * subtag). It returns false otherwise. Terminal value characters in the grammar are\n * interpreted as the Unicode equivalents of the ASCII octet values given.\n */\nexport function /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {\n // represents a well-formed BCP 47 language tag as specified in RFC 5646\n if (!expBCP47Syntax.test(locale))\n return false;\n\n // does not include duplicate variant subtags, and\n if (expVariantDupes.test(locale))\n return false;\n\n // does not include duplicate singleton subtags.\n if (expSingletonDupes.test(locale))\n return false;\n\n return true;\n}\n\n/**\n * The CanonicalizeLanguageTag abstract operation returns the canonical and case-\n * regularized form of the locale argument (which must be a String value that is\n * a structurally valid BCP 47 language tag as verified by the\n * IsStructurallyValidLanguageTag abstract operation). It takes the steps\n * specified in RFC 5646 section 4.5, or successor, to bring the language tag\n * into canonical form, and to regularize the case of the subtags, but does not\n * take the steps to bring a language tag into “extlang form” and to reorder\n * variant subtags.\n\n * The specifications for extensions to BCP 47 language tags, such as RFC 6067,\n * may include canonicalization rules for the extension subtag sequences they\n * define that go beyond the canonicalization rules of RFC 5646 section 4.5.\n * Implementations are allowed, but not required, to apply these additional rules.\n */\nexport function /* 6.2.3 */CanonicalizeLanguageTag (locale) {\n let match, parts;\n\n // A language tag is in 'canonical form' when the tag is well-formed\n // according to the rules in Sections 2.1 and 2.2\n\n // Section 2.1 says all subtags use lowercase...\n locale = locale.toLowerCase();\n\n // ...with 2 exceptions: 'two-letter and four-letter subtags that neither\n // appear at the start of the tag nor occur after singletons. Such two-letter\n // subtags are all uppercase (as in the tags \"en-CA-x-ca\" or \"sgn-BE-FR\") and\n // four-letter subtags are titlecase (as in the tag \"az-Latn-x-latn\").\n parts = locale.split('-');\n for (let i = 1, max = parts.length; i < max; i++) {\n // Two-letter subtags are all uppercase\n if (parts[i].length === 2)\n parts[i] = parts[i].toUpperCase();\n\n // Four-letter subtags are titlecase\n else if (parts[i].length === 4)\n parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n\n // Is it a singleton?\n else if (parts[i].length === 1 && parts[i] !== 'x')\n break;\n }\n locale = arrJoin.call(parts, '-');\n\n // The steps laid out in RFC 5646 section 4.5 are as follows:\n\n // 1. Extension sequences are ordered into case-insensitive ASCII order\n // by singleton subtag.\n if ((match = locale.match(expExtSequences)) && match.length > 1) {\n // The built-in sort() sorts by ASCII order, so use that\n match.sort();\n\n // Replace all extensions with the joined, sorted array\n locale = locale.replace(\n RegExp('(?:' + expExtSequences.source + ')+', 'i'),\n arrJoin.call(match, '')\n );\n }\n\n // 2. Redundant or grandfathered tags are replaced by their 'Preferred-\n // Value', if there is one.\n if (hop.call(redundantTags.tags, locale))\n locale = redundantTags.tags[locale];\n\n // 3. Subtags are replaced by their 'Preferred-Value', if there is one.\n // For extlangs, the original primary language subtag is also\n // replaced if there is a primary language subtag in the 'Preferred-\n // Value'.\n parts = locale.split('-');\n\n for (let i = 1, max = parts.length; i < max; i++) {\n if (hop.call(redundantTags.subtags, parts[i]))\n parts[i] = redundantTags.subtags[parts[i]];\n\n else if (hop.call(redundantTags.extLang, parts[i])) {\n parts[i] = redundantTags.extLang[parts[i]][0];\n\n // For extlang tags, the prefix needs to be removed if it is redundant\n if (i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {\n parts = arrSlice.call(parts, i++);\n max -= 1;\n }\n }\n }\n\n return arrJoin.call(parts, '-');\n}\n\n/**\n * The DefaultLocale abstract operation returns a String value representing the\n * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the\n * host environment’s current locale.\n */\nexport function /* 6.2.4 */DefaultLocale () {\n return defaultLocale;\n}\n\n// Sect 6.3 Currency Codes\n// =======================\n\nconst expCurrencyCode = /^[A-Z]{3}$/;\n\n/**\n * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument\n * (after conversion to a String value) represents a well-formed 3-letter ISO currency\n * code. The following steps are taken:\n */\nexport function /* 6.3.1 */IsWellFormedCurrencyCode(currency) {\n // 1. Let `c` be ToString(currency)\n let c = String(currency);\n\n // 2. Let `normalized` be the result of mapping c to upper case as described\n // in 6.1.\n let normalized = toLatinUpperCase(c);\n\n // 3. If the string length of normalized is not 3, return false.\n // 4. If normalized contains any character that is not in the range \"A\" to \"Z\"\n // (U+0041 to U+005A), return false.\n if (expCurrencyCode.test(normalized) === false)\n return false;\n\n // 5. Return true\n return true;\n}\n","// Sect 9.2 Abstract Operations\n// ============================\n\nimport {\n List,\n toObject,\n arrIndexOf,\n arrPush,\n arrSlice,\n Record,\n hop,\n defineProperty,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n CanonicalizeLanguageTag,\n DefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nconst expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below\n\nexport function /* 9.2.1 */CanonicalizeLocaleList (locales) {\n// The abstract operation CanonicalizeLocaleList takes the following steps:\n\n // 1. If locales is undefined, then a. Return a new empty List\n if (locales === undefined)\n return new List();\n\n // 2. Let seen be a new empty List.\n let seen = new List();\n\n // 3. If locales is a String value, then\n // a. Let locales be a new array created as if by the expression new\n // Array(locales) where Array is the standard built-in constructor with\n // that name and locales is the value of locales.\n locales = typeof locales === 'string' ? [ locales ] : locales;\n\n // 4. Let O be ToObject(locales).\n let O = toObject(locales);\n\n // 5. Let lenValue be the result of calling the [[Get]] internal method of\n // O with the argument \"length\".\n // 6. Let len be ToUint32(lenValue).\n let len = O.length;\n\n // 7. Let k be 0.\n let k = 0;\n\n // 8. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n let Pk = String(k);\n\n // b. Let kPresent be the result of calling the [[HasProperty]] internal\n // method of O with argument Pk.\n let kPresent = Pk in O;\n\n // c. If kPresent is true, then\n if (kPresent) {\n // i. Let kValue be the result of calling the [[Get]] internal\n // method of O with argument Pk.\n let kValue = O[Pk];\n\n // ii. If the type of kValue is not String or Object, then throw a\n // TypeError exception.\n if (kValue === null || (typeof kValue !== 'string' && typeof kValue !== 'object'))\n throw new TypeError('String or Object type expected');\n\n // iii. Let tag be ToString(kValue).\n let tag = String(kValue);\n\n // iv. If the result of calling the abstract operation\n // IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as\n // the argument, is false, then throw a RangeError exception.\n if (!IsStructurallyValidLanguageTag(tag))\n throw new RangeError(\"'\" + tag + \"' is not a structurally valid language tag\");\n\n // v. Let tag be the result of calling the abstract operation\n // CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the\n // argument.\n tag = CanonicalizeLanguageTag(tag);\n\n // vi. If tag is not an element of seen, then append tag as the last\n // element of seen.\n if (arrIndexOf.call(seen, tag) === -1)\n arrPush.call(seen, tag);\n }\n\n // d. Increase k by 1.\n k++;\n }\n\n // 9. Return seen.\n return seen;\n}\n\n/**\n * The BestAvailableLocale abstract operation compares the provided argument\n * locale, which must be a String value with a structurally valid and\n * canonicalized BCP 47 language tag, against the locales in availableLocales and\n * returns either the longest non-empty prefix of locale that is an element of\n * availableLocales, or undefined if there is no such element. It uses the\n * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:\n */\nexport function /* 9.2.2 */BestAvailableLocale (availableLocales, locale) {\n // 1. Let candidate be locale\n let candidate = locale;\n\n // 2. Repeat\n while (candidate) {\n // a. If availableLocales contains an element equal to candidate, then return\n // candidate.\n if (arrIndexOf.call(availableLocales, candidate) > -1)\n return candidate;\n\n // b. Let pos be the character index of the last occurrence of \"-\"\n // (U+002D) within candidate. If that character does not occur, return\n // undefined.\n let pos = candidate.lastIndexOf('-');\n\n if (pos < 0)\n return;\n\n // c. If pos ≥ 2 and the character \"-\" occurs at index pos-2 of candidate,\n // then decrease pos by 2.\n if (pos >= 2 && candidate.charAt(pos - 2) === '-')\n pos -= 2;\n\n // d. Let candidate be the substring of candidate from position 0, inclusive,\n // to position pos, exclusive.\n candidate = candidate.substring(0, pos);\n }\n}\n\n/**\n * The LookupMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The following steps are taken:\n */\nexport function /* 9.2.3 */LookupMatcher (availableLocales, requestedLocales) {\n // 1. Let i be 0.\n let i = 0;\n\n // 2. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n\n // 3. Let availableLocale be undefined.\n let availableLocale;\n\n let locale, noExtensionsLocale;\n\n // 4. Repeat while i < len and availableLocale is undefined:\n while (i < len && !availableLocale) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position i.\n locale = requestedLocales[i];\n\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. Increase i by 1.\n i++;\n }\n\n // 5. Let result be a new Record.\n let result = new Record();\n\n // 6. If availableLocale is not undefined, then\n if (availableLocale !== undefined) {\n // a. Set result.[[locale]] to availableLocale.\n result['[[locale]]'] = availableLocale;\n\n // b. If locale and noExtensionsLocale are not the same String value, then\n if (String(locale) !== String(noExtensionsLocale)) {\n // i. Let extension be the String value consisting of the first\n // substring of locale that is a Unicode locale extension sequence.\n let extension = locale.match(expUnicodeExSeq)[0];\n\n // ii. Let extensionIndex be the character position of the initial\n // \"-\" of the first Unicode locale extension sequence within locale.\n let extensionIndex = locale.indexOf('-u-');\n\n // iii. Set result.[[extension]] to extension.\n result['[[extension]]'] = extension;\n\n // iv. Set result.[[extensionIndex]] to extensionIndex.\n result['[[extensionIndex]]'] = extensionIndex;\n }\n }\n // 7. Else\n else\n // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract\n // operation (defined in 6.2.4).\n result['[[locale]]'] = DefaultLocale();\n\n // 8. Return result\n return result;\n}\n\n/**\n * The BestFitMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The algorithm is implementation dependent, but should produce results\n * that a typical user of the requested locales would perceive as at least as\n * good as those produced by the LookupMatcher abstract operation. Options\n * specified through Unicode locale extension sequences must be ignored by the\n * algorithm. Information about such subsequences is returned separately.\n * The abstract operation returns a record with a [[locale]] field, whose value\n * is the language tag of the selected locale, which must be an element of\n * availableLocales. If the language tag of the request locale that led to the\n * selected locale contained a Unicode locale extension sequence, then the\n * returned record also contains an [[extension]] field whose value is the first\n * Unicode locale extension sequence, and an [[extensionIndex]] field whose value\n * is the index of the first Unicode locale extension sequence within the request\n * locale language tag.\n */\nexport function /* 9.2.4 */BestFitMatcher (availableLocales, requestedLocales) {\n return LookupMatcher(availableLocales, requestedLocales);\n}\n\n/**\n * The ResolveLocale abstract operation compares a BCP 47 language priority list\n * requestedLocales against the locales in availableLocales and determines the\n * best available language to meet the request. availableLocales and\n * requestedLocales must be provided as List values, options as a Record.\n */\nexport function /* 9.2.5 */ResolveLocale (availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n if (availableLocales.length === 0) {\n throw new ReferenceError('No locale data has been provided for this object yet.');\n }\n\n // The following steps are taken:\n // 1. Let matcher be the value of options.[[localeMatcher]].\n let matcher = options['[[localeMatcher]]'];\n\n let r;\n\n // 2. If matcher is \"lookup\", then\n if (matcher === 'lookup')\n // a. Let r be the result of calling the LookupMatcher abstract operation\n // (defined in 9.2.3) with arguments availableLocales and\n // requestedLocales.\n r = LookupMatcher(availableLocales, requestedLocales);\n\n // 3. Else\n else\n // a. Let r be the result of calling the BestFitMatcher abstract\n // operation (defined in 9.2.4) with arguments availableLocales and\n // requestedLocales.\n r = BestFitMatcher(availableLocales, requestedLocales);\n\n // 4. Let foundLocale be the value of r.[[locale]].\n let foundLocale = r['[[locale]]'];\n\n let extensionSubtags, extensionSubtagsLength;\n\n // 5. If r has an [[extension]] field, then\n if (hop.call(r, '[[extension]]')) {\n // a. Let extension be the value of r.[[extension]].\n let extension = r['[[extension]]'];\n // b. Let split be the standard built-in function object defined in ES5,\n // 15.5.4.14.\n let split = String.prototype.split;\n // c. Let extensionSubtags be the result of calling the [[Call]] internal\n // method of split with extension as the this value and an argument\n // list containing the single item \"-\".\n extensionSubtags = split.call(extension, '-');\n // d. Let extensionSubtagsLength be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument \"length\".\n extensionSubtagsLength = extensionSubtags.length;\n }\n\n // 6. Let result be a new Record.\n let result = new Record();\n\n // 7. Set result.[[dataLocale]] to foundLocale.\n result['[[dataLocale]]'] = foundLocale;\n\n // 8. Let supportedExtension be \"-u\".\n let supportedExtension = '-u';\n // 9. Let i be 0.\n let i = 0;\n // 10. Let len be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument \"length\".\n let len = relevantExtensionKeys.length;\n\n // 11 Repeat while i < len:\n while (i < len) {\n // a. Let key be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument ToString(i).\n let key = relevantExtensionKeys[i];\n // b. Let foundLocaleData be the result of calling the [[Get]] internal\n // method of localeData with the argument foundLocale.\n let foundLocaleData = localeData[foundLocale];\n // c. Let keyLocaleData be the result of calling the [[Get]] internal\n // method of foundLocaleData with the argument key.\n let keyLocaleData = foundLocaleData[key];\n // d. Let value be the result of calling the [[Get]] internal method of\n // keyLocaleData with argument \"0\".\n let value = keyLocaleData['0'];\n // e. Let supportedExtensionAddition be \"\".\n let supportedExtensionAddition = '';\n // f. Let indexOf be the standard built-in function object defined in\n // ES5, 15.4.4.14.\n let indexOf = arrIndexOf;\n\n // g. If extensionSubtags is not undefined, then\n if (extensionSubtags !== undefined) {\n // i. Let keyPos be the result of calling the [[Call]] internal\n // method of indexOf with extensionSubtags as the this value and\n // an argument list containing the single item key.\n let keyPos = indexOf.call(extensionSubtags, key);\n\n // ii. If keyPos ≠ -1, then\n if (keyPos !== -1) {\n // 1. If keyPos + 1 < extensionSubtagsLength and the length of the\n // result of calling the [[Get]] internal method of\n // extensionSubtags with argument ToString(keyPos +1) is greater\n // than 2, then\n if (keyPos + 1 < extensionSubtagsLength\n && extensionSubtags[keyPos + 1].length > 2) {\n // a. Let requestedValue be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument\n // ToString(keyPos + 1).\n let requestedValue = extensionSubtags[keyPos + 1];\n // b. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the\n // this value and an argument list containing the single\n // item requestedValue.\n let valuePos = indexOf.call(keyLocaleData, requestedValue);\n\n // c. If valuePos ≠ -1, then\n if (valuePos !== -1) {\n // i. Let value be requestedValue.\n value = requestedValue,\n // ii. Let supportedExtensionAddition be the\n // concatenation of \"-\", key, \"-\", and value.\n supportedExtensionAddition = '-' + key + '-' + value;\n }\n }\n // 2. Else\n else {\n // a. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the this\n // value and an argument list containing the single item\n // \"true\".\n let valuePos = indexOf(keyLocaleData, 'true');\n\n // b. If valuePos ≠ -1, then\n if (valuePos !== -1)\n // i. Let value be \"true\".\n value = 'true';\n }\n }\n }\n // h. If options has a field [[]], then\n if (hop.call(options, '[[' + key + ']]')) {\n // i. Let optionsValue be the value of options.[[]].\n let optionsValue = options['[[' + key + ']]'];\n\n // ii. If the result of calling the [[Call]] internal method of indexOf\n // with keyLocaleData as the this value and an argument list\n // containing the single item optionsValue is not -1, then\n if (indexOf.call(keyLocaleData, optionsValue) !== -1) {\n // 1. If optionsValue is not equal to value, then\n if (optionsValue !== value) {\n // a. Let value be optionsValue.\n value = optionsValue;\n // b. Let supportedExtensionAddition be \"\".\n supportedExtensionAddition = '';\n }\n }\n }\n // i. Set result.[[]] to value.\n result['[[' + key + ']]'] = value;\n\n // j. Append supportedExtensionAddition to supportedExtension.\n supportedExtension += supportedExtensionAddition;\n\n // k. Increase i by 1.\n i++;\n }\n // 12. If the length of supportedExtension is greater than 2, then\n if (supportedExtension.length > 2) {\n // a.\n let privateIndex = foundLocale.indexOf(\"-x-\");\n // b.\n if (privateIndex === -1) {\n // i.\n foundLocale = foundLocale + supportedExtension;\n }\n // c.\n else {\n // i.\n let preExtension = foundLocale.substring(0, privateIndex);\n // ii.\n let postExtension = foundLocale.substring(privateIndex);\n // iii.\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n // d. asserting - skipping\n // e.\n foundLocale = CanonicalizeLanguageTag(foundLocale);\n }\n // 13. Set result.[[locale]] to foundLocale.\n result['[[locale]]'] = foundLocale;\n\n // 14. Return result.\n return result;\n}\n\n/**\n * The LookupSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.\n * Locales appear in the same order in the returned list as in requestedLocales.\n * The following steps are taken:\n */\nexport function /* 9.2.6 */LookupSupportedLocales (availableLocales, requestedLocales) {\n // 1. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n // 2. Let subset be a new empty List.\n let subset = new List();\n // 3. Let k be 0.\n let k = 0;\n\n // 4. Repeat while k < len\n while (k < len) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position k.\n let locale = requestedLocales[k];\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n let noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n let availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. If availableLocale is not undefined, then append locale to the end of\n // subset.\n if (availableLocale !== undefined)\n arrPush.call(subset, locale);\n\n // e. Increment k by 1.\n k++;\n }\n\n // 5. Let subsetArray be a new Array object whose elements are the same\n // values in the same order as the elements of subset.\n let subsetArray = arrSlice.call(subset);\n\n // 6. Return subsetArray.\n return subsetArray;\n}\n\n/**\n * The BestFitSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the Best Fit Matcher\n * algorithm. Locales appear in the same order in the returned list as in\n * requestedLocales. The steps taken are implementation dependent.\n */\nexport function /*9.2.7 */BestFitSupportedLocales (availableLocales, requestedLocales) {\n // ###TODO: implement this function as described by the specification###\n return LookupSupportedLocales(availableLocales, requestedLocales);\n}\n\n/**\n * The SupportedLocales abstract operation returns the subset of the provided BCP\n * 47 language priority list requestedLocales for which availableLocales has a\n * matching locale. Two algorithms are available to match the locales: the Lookup\n * algorithm described in RFC 4647 section 3.4, and an implementation dependent\n * best-fit algorithm. Locales appear in the same order in the returned list as\n * in requestedLocales. The following steps are taken:\n */\nexport function /*9.2.8 */SupportedLocales (availableLocales, requestedLocales, options) {\n let matcher, subset;\n\n // 1. If options is not undefined, then\n if (options !== undefined) {\n // a. Let options be ToObject(options).\n options = new Record(toObject(options));\n // b. Let matcher be the result of calling the [[Get]] internal method of\n // options with argument \"localeMatcher\".\n matcher = options.localeMatcher;\n\n // c. If matcher is not undefined, then\n if (matcher !== undefined) {\n // i. Let matcher be ToString(matcher).\n matcher = String(matcher);\n\n // ii. If matcher is not \"lookup\" or \"best fit\", then throw a RangeError\n // exception.\n if (matcher !== 'lookup' && matcher !== 'best fit')\n throw new RangeError('matcher should be \"lookup\" or \"best fit\"');\n }\n }\n // 2. If matcher is undefined or \"best fit\", then\n if (matcher === undefined || matcher === 'best fit')\n // a. Let subset be the result of calling the BestFitSupportedLocales\n // abstract operation (defined in 9.2.7) with arguments\n // availableLocales and requestedLocales.\n subset = BestFitSupportedLocales(availableLocales, requestedLocales);\n // 3. Else\n else\n // a. Let subset be the result of calling the LookupSupportedLocales\n // abstract operation (defined in 9.2.6) with arguments\n // availableLocales and requestedLocales.\n subset = LookupSupportedLocales(availableLocales, requestedLocales);\n\n // 4. For each named own property name P of subset,\n for (let P in subset) {\n if (!hop.call(subset, P))\n continue;\n\n // a. Let desc be the result of calling the [[GetOwnProperty]] internal\n // method of subset with P.\n // b. Set desc.[[Writable]] to false.\n // c. Set desc.[[Configurable]] to false.\n // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,\n // and true as arguments.\n defineProperty(subset, P, {\n writable: false, configurable: false, value: subset[P],\n });\n }\n // \"Freeze\" the array so no new elements can be added\n defineProperty(subset, 'length', { writable: false });\n\n // 5. Return subset\n return subset;\n}\n\n/**\n * The GetOption abstract operation extracts the value of the property named\n * property from the provided options object, converts it to the required type,\n * checks whether it is one of a List of allowed values, and fills in a fallback\n * value if necessary.\n */\nexport function /*9.2.9 */GetOption (options, property, type, values, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Assert: type is \"boolean\" or \"string\".\n // b. If type is \"boolean\", then let value be ToBoolean(value).\n // c. If type is \"string\", then let value be ToString(value).\n value = type === 'boolean' ? Boolean(value)\n : (type === 'string' ? String(value) : value);\n\n // d. If values is not undefined, then\n if (values !== undefined) {\n // i. If values does not contain an element equal to value, then throw a\n // RangeError exception.\n if (arrIndexOf.call(values, value) === -1)\n throw new RangeError(\"'\" + value + \"' is not an allowed value for `\" + property +'`');\n }\n\n // e. Return value.\n return value;\n }\n // Else return fallback.\n return fallback;\n}\n\n/**\n * The GetNumberOption abstract operation extracts a property value from the\n * provided options object, converts it to a Number value, checks whether it is\n * in the allowed range, and fills in a fallback value if necessary.\n */\nexport function /* 9.2.10 */GetNumberOption (options, property, minimum, maximum, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Let value be ToNumber(value).\n value = Number(value);\n\n // b. If value is NaN or less than minimum or greater than maximum, throw a\n // RangeError exception.\n if (isNaN(value) || value < minimum || value > maximum)\n throw new RangeError('Value is not a number or outside accepted range');\n\n // c. Return floor(value).\n return Math.floor(value);\n }\n // 3. Else return fallback.\n return fallback;\n}\n","import {\n CanonicalizeLocaleList,\n} from \"./9.negotiation.js\";\n\n// 8 The Intl Object\nexport const Intl = {};\n\n// 8.2 Function Properties of the Intl Object\n\n// 8.2.1\n// @spec[tc39/ecma402/master/spec/intl.html]\n// @clause[sec-intl.getcanonicallocales]\nIntl.getCanonicalLocales = function (locales) {\n // 1. Let ll be ? CanonicalizeLocaleList(locales).\n let ll = CanonicalizeLocaleList(locales);\n // 2. Return CreateArrayFromList(ll).\n {\n let result = [];\n for (let code in ll) {\n result.push(ll[code]);\n }\n return result;\n }\n};\n","// 11.1 The Intl.NumberFormat constructor\n// ======================================\n\nimport {\n IsWellFormedCurrencyCode,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n SupportedLocales,\n ResolveLocale,\n GetNumberOption,\n GetOption,\n} from \"./9.negotiation.js\";\n\nimport {\n internals,\n log10Floor,\n List,\n toObject,\n arrPush,\n arrJoin,\n arrShift,\n Record,\n hop,\n defineProperty,\n es3,\n fnBind,\n getInternalProperties,\n createRegExpRestore,\n secret,\n objCreate,\n} from \"./util.js\";\n\n// Currency minor units output from get-4217 grunt task, formatted\nconst currencyMinorUnits = {\n BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,\n XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,\n OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0,\n};\n\n// Define the NumberFormat constructor internally so it cannot be tainted\nexport function NumberFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.NumberFormat(locales, options);\n }\n\n return InitializeNumberFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'NumberFormat', {\n configurable: true,\n writable: true,\n value: NumberFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(Intl.NumberFormat, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeNumberFormat accepts the arguments\n * numberFormat (which must be an object), locales, and options. It initializes\n * numberFormat as a NumberFormat object.\n */\nexport function /*11.1.1.1 */InitializeNumberFormat (numberFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(numberFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If numberFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(numberFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. If options is undefined, then\n if (options === undefined)\n // a. Let options be the result of creating a new object as if by the\n // expression new Object() where Object is the standard built-in constructor\n // with that name.\n options = {};\n\n // 5. Else\n else\n // a. Let options be ToObject(options).\n options = toObject(options);\n\n // 6. Let opt be a new Record.\n let opt = new Record(),\n\n // 7. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with the arguments options, \"localeMatcher\", \"string\",\n // a List containing the two String values \"lookup\" and \"best fit\", and\n // \"best fit\".\n matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 8. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 9. Let NumberFormat be the standard built-in object that is the initial value\n // of Intl.NumberFormat.\n // 10. Let localeData be the value of the [[localeData]] internal property of\n // NumberFormat.\n let localeData = internals.NumberFormat['[[localeData]]'];\n\n // 11. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of NumberFormat, and localeData.\n let r = ResolveLocale(\n internals.NumberFormat['[[availableLocales]]'], requestedLocales,\n opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData\n );\n\n // 12. Set the [[locale]] internal property of numberFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 13. Set the [[numberingSystem]] internal property of numberFormat to the value\n // of r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let s be the result of calling the GetOption abstract operation with the\n // arguments options, \"style\", \"string\", a List containing the three String\n // values \"decimal\", \"percent\", and \"currency\", and \"decimal\".\n let s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');\n\n // 16. Set the [[style]] internal property of numberFormat to s.\n internal['[[style]]'] = s;\n\n // 17. Let c be the result of calling the GetOption abstract operation with the\n // arguments options, \"currency\", \"string\", undefined, and undefined.\n let c = GetOption(options, 'currency', 'string');\n\n // 18. If c is not undefined and the result of calling the\n // IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with\n // argument c is false, then throw a RangeError exception.\n if (c !== undefined && !IsWellFormedCurrencyCode(c))\n throw new RangeError(\"'\" + c + \"' is not a valid currency code\");\n\n // 19. If s is \"currency\" and c is undefined, throw a TypeError exception.\n if (s === 'currency' && c === undefined)\n throw new TypeError('Currency code is required when style is currency');\n\n let cDigits;\n\n // 20. If s is \"currency\", then\n if (s === 'currency') {\n // a. Let c be the result of converting c to upper case as specified in 6.1.\n c = c.toUpperCase();\n\n // b. Set the [[currency]] internal property of numberFormat to c.\n internal['[[currency]]'] = c;\n\n // c. Let cDigits be the result of calling the CurrencyDigits abstract\n // operation (defined below) with argument c.\n cDigits = CurrencyDigits(c);\n }\n\n // 21. Let cd be the result of calling the GetOption abstract operation with the\n // arguments options, \"currencyDisplay\", \"string\", a List containing the\n // three String values \"code\", \"symbol\", and \"name\", and \"symbol\".\n let cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');\n\n // 22. If s is \"currency\", then set the [[currencyDisplay]] internal property of\n // numberFormat to cd.\n if (s === 'currency')\n internal['[[currencyDisplay]]'] = cd;\n\n // 23. Let mnid be the result of calling the GetNumberOption abstract operation\n // (defined in 9.2.10) with arguments options, \"minimumIntegerDigits\", 1, 21,\n // and 1.\n let mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);\n\n // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.\n internal['[[minimumIntegerDigits]]'] = mnid;\n\n // 25. If s is \"currency\", then let mnfdDefault be cDigits; else let mnfdDefault\n // be 0.\n let mnfdDefault = s === 'currency' ? cDigits : 0;\n\n // 26. Let mnfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"minimumFractionDigits\", 0, 20, and mnfdDefault.\n let mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);\n\n // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.\n internal['[[minimumFractionDigits]]'] = mnfd;\n\n // 28. If s is \"currency\", then let mxfdDefault be max(mnfd, cDigits); else if s\n // is \"percent\", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault\n // be max(mnfd, 3).\n let mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits)\n : (s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3));\n\n // 29. Let mxfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"maximumFractionDigits\", mnfd, 20, and mxfdDefault.\n let mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);\n\n // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.\n internal['[[maximumFractionDigits]]'] = mxfd;\n\n // 31. Let mnsd be the result of calling the [[Get]] internal method of options\n // with argument \"minimumSignificantDigits\".\n let mnsd = options.minimumSignificantDigits;\n\n // 32. Let mxsd be the result of calling the [[Get]] internal method of options\n // with argument \"maximumSignificantDigits\".\n let mxsd = options.maximumSignificantDigits;\n\n // 33. If mnsd is not undefined or mxsd is not undefined, then:\n if (mnsd !== undefined || mxsd !== undefined) {\n // a. Let mnsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"minimumSignificantDigits\", 1, 21,\n // and 1.\n mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);\n\n // b. Let mxsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"maximumSignificantDigits\", mnsd,\n // 21, and 21.\n mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);\n\n // c. Set the [[minimumSignificantDigits]] internal property of numberFormat\n // to mnsd, and the [[maximumSignificantDigits]] internal property of\n // numberFormat to mxsd.\n internal['[[minimumSignificantDigits]]'] = mnsd;\n internal['[[maximumSignificantDigits]]'] = mxsd;\n }\n // 34. Let g be the result of calling the GetOption abstract operation with the\n // arguments options, \"useGrouping\", \"boolean\", undefined, and true.\n let g = GetOption(options, 'useGrouping', 'boolean', undefined, true);\n\n // 35. Set the [[useGrouping]] internal property of numberFormat to g.\n internal['[[useGrouping]]'] = g;\n\n // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 37. Let patterns be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"patterns\".\n let patterns = dataLocaleData.patterns;\n\n // 38. Assert: patterns is an object (see 11.2.3)\n\n // 39. Let stylePatterns be the result of calling the [[Get]] internal method of\n // patterns with argument s.\n let stylePatterns = patterns[s];\n\n // 40. Set the [[positivePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"positivePattern\".\n internal['[[positivePattern]]'] = stylePatterns.positivePattern;\n\n // 41. Set the [[negativePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"negativePattern\".\n internal['[[negativePattern]]'] = stylePatterns.negativePattern;\n\n // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to\n // true.\n internal['[[initializedNumberFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n numberFormat.format = GetFormatNumber.call(numberFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return numberFormat;\n}\n\nfunction CurrencyDigits(currency) {\n // When the CurrencyDigits abstract operation is called with an argument currency\n // (which must be an upper case String value), the following steps are taken:\n\n // 1. If the ISO 4217 currency and funds code list contains currency as an\n // alphabetic code, then return the minor unit value corresponding to the\n // currency from the list; else return 2.\n return currencyMinorUnits[currency] !== undefined\n ? currencyMinorUnits[currency]\n : 2;\n}\n\n/* 11.2.3 */internals.NumberFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.NumberFormat is called, the\n * following steps are taken:\n */\n/* 11.2.2 */\ndefineProperty(Intl.NumberFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * NumberFormat object.\n */\n/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatNumber,\n});\n\nfunction GetFormatNumber() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this NumberFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 1, that takes the argument value and\n // performs the following steps:\n let F = function (value) {\n // i. If value is not provided, then let value be undefined.\n // ii. Let x be ToNumber(value).\n // iii. Return the result of calling the FormatNumber abstract\n // operation (defined below) with arguments this and x.\n return FormatNumber(this, /* x = */Number(value));\n };\n\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n }\n\nIntl.NumberFormat.prototype.formatToParts = function(value) {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');\n\n let x = Number(value);\n return FormatNumberToParts(this, x);\n};\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumbertoparts]\n */\nfunction FormatNumberToParts(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be ArrayCreate(0).\n let result = [];\n // 3. Let n be 0.\n let n = 0;\n // 4. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Let O be ObjectCreate(%ObjectPrototype%).\n let O = {};\n // a. Perform ? CreateDataPropertyOrThrow(O, \"type\", part.[[type]]).\n O.type = part['[[type]]'];\n // a. Perform ? CreateDataPropertyOrThrow(O, \"value\", part.[[value]]).\n O.value = part['[[value]]'];\n // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).\n result[n] = O;\n // a. Increment n by 1.\n n += 1;\n }\n // 5. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-partitionnumberpattern]\n */\nfunction PartitionNumberPattern(numberFormat, x) {\n\n let internal = getInternalProperties(numberFormat),\n locale = internal['[[dataLocale]]'],\n nums = internal['[[numberingSystem]]'],\n data = internals.NumberFormat['[[localeData]]'][locale],\n ild = data.symbols[nums] || data.symbols.latn,\n pattern;\n\n // 1. If x is not NaN and x < 0, then:\n if (!isNaN(x) && x < 0) {\n // a. Let x be -x.\n x = -x;\n // a. Let pattern be the value of numberFormat.[[negativePattern]].\n pattern = internal['[[negativePattern]]'];\n }\n // 2. Else,\n else {\n // a. Let pattern be the value of numberFormat.[[positivePattern]].\n pattern = internal['[[positivePattern]]'];\n }\n // 3. Let result be a new empty List.\n let result = new List();\n // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, \"{\", 0).\n let beginIndex = pattern.indexOf('{', 0);\n // 5. Let endIndex be 0.\n let endIndex = 0;\n // 6. Let nextIndex be 0.\n let nextIndex = 0;\n // 7. Let length be the number of code units in pattern.\n let length = pattern.length;\n // 8. Repeat while beginIndex is an integer index into pattern:\n while (beginIndex > -1 && beginIndex < length) {\n // a. Set endIndex to Call(%StringProto_indexOf%, pattern, \"}\", beginIndex)\n endIndex = pattern.indexOf('}', beginIndex);\n // a. If endIndex = -1, throw new Error exception.\n if (endIndex === -1) throw new Error();\n // a. If beginIndex is greater than nextIndex, then:\n if (beginIndex > nextIndex) {\n // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.\n let literal = pattern.substring(nextIndex, beginIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // a. If p is equal \"number\", then:\n if (p === \"number\") {\n // i. If x is NaN,\n if (isNaN(x)) {\n // 1. Let n be an ILD String value indicating the NaN value.\n let n = ild.nan;\n // 2. Add new part record { [[type]]: \"nan\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });\n }\n // ii. Else if isFinite(x) is false,\n else if (!isFinite(x)) {\n // 1. Let n be an ILD String value indicating infinity.\n let n = ild.infinity;\n // 2. Add new part record { [[type]]: \"infinity\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': n });\n }\n // iii. Else,\n else {\n // 1. If the value of numberFormat.[[style]] is \"percent\" and isFinite(x), let x be 100 × x.\n if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;\n\n let n;\n // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then\n if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {\n // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).\n n = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);\n }\n // 3. Else,\n else {\n // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).\n n = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);\n }\n // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the \"Numbering System\" column of Table 2 below, then\n if (numSys[nums]) {\n // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the \"Digits\" column of the matching row in Table 2.\n let digits = numSys[nums];\n // a. Replace each digit in n with the value of digits[digit].\n n = String(n).replace(/\\d/g, (digit) => {\n return digits[digit];\n });\n }\n // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.\n else n = String(n); // ###TODO###\n\n let integer;\n let fraction;\n // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, \".\", 0).\n let decimalSepIndex = n.indexOf('.', 0);\n // 7. If decimalSepIndex > 0, then:\n if (decimalSepIndex > 0) {\n // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.\n integer = n.substring(0, decimalSepIndex);\n // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.\n fraction = n.substring(decimalSepIndex + 1, decimalSepIndex.length);\n }\n // 8. Else:\n else {\n // a. Let integer be n.\n integer = n;\n // a. Let fraction be undefined.\n fraction = undefined;\n }\n // 9. If the value of the numberFormat.[[useGrouping]] is true,\n if (internal['[[useGrouping]]'] === true) {\n // a. Let groupSepSymbol be the ILND String representing the grouping separator.\n let groupSepSymbol = ild.group;\n // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.\n let groups = new List();\n // ----> implementation:\n // Primary group represents the group closest to the decimal\n let pgSize = data.patterns.primaryGroupSize || 3;\n // Secondary group is every other group\n let sgSize = data.patterns.secondaryGroupSize || pgSize;\n // Group only if necessary\n if (integer.length > pgSize) {\n // Index of the primary grouping separator\n let end = integer.length - pgSize;\n // Starting index for our loop\n let idx = end % sgSize;\n let start = integer.slice(0, idx);\n if (start.length) arrPush.call(groups, start);\n // Loop to separate into secondary grouping digits\n while (idx < end) {\n arrPush.call(groups, integer.slice(idx, idx + sgSize));\n idx += sgSize;\n }\n // Add the primary grouping digits\n arrPush.call(groups, integer.slice(end));\n } else {\n arrPush.call(groups, integer);\n }\n // a. Assert: The number of elements in groups List is greater than 0.\n if (groups.length === 0) throw new Error();\n // a. Repeat, while groups List is not empty:\n while (groups.length) {\n // i. Remove the first element from groups and let integerGroup be the value of that element.\n let integerGroup = arrShift.call(groups);\n // ii. Add new part record { [[type]]: \"integer\", [[value]]: integerGroup } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });\n // iii. If groups List is not empty, then:\n if (groups.length) {\n // 1. Add new part record { [[type]]: \"group\", [[value]]: groupSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });\n }\n }\n }\n // 10. Else,\n else {\n // a. Add new part record { [[type]]: \"integer\", [[value]]: integer } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });\n }\n // 11. If fraction is not undefined, then:\n if (fraction !== undefined) {\n // a. Let decimalSepSymbol be the ILND String representing the decimal separator.\n let decimalSepSymbol = ild.decimal;\n // a. Add new part record { [[type]]: \"decimal\", [[value]]: decimalSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });\n // a. Add new part record { [[type]]: \"fraction\", [[value]]: fraction } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });\n }\n }\n }\n // a. Else if p is equal \"plusSign\", then:\n else if (p === \"plusSign\") {\n // i. Let plusSignSymbol be the ILND String representing the plus sign.\n let plusSignSymbol = ild.plusSign;\n // ii. Add new part record { [[type]]: \"plusSign\", [[value]]: plusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });\n }\n // a. Else if p is equal \"minusSign\", then:\n else if (p === \"minusSign\") {\n // i. Let minusSignSymbol be the ILND String representing the minus sign.\n let minusSignSymbol = ild.minusSign;\n // ii. Add new part record { [[type]]: \"minusSign\", [[value]]: minusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });\n }\n // a. Else if p is equal \"percentSign\" and numberFormat.[[style]] is \"percent\", then:\n else if (p === \"percentSign\" && internal['[[style]]'] === \"percent\") {\n // i. Let percentSignSymbol be the ILND String representing the percent sign.\n let percentSignSymbol = ild.percentSign;\n // ii. Add new part record { [[type]]: \"percentSign\", [[value]]: percentSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });\n }\n // a. Else if p is equal \"currency\" and numberFormat.[[style]] is \"currency\", then:\n else if (p === \"currency\" && internal['[[style]]'] === \"currency\") {\n // i. Let currency be the value of numberFormat.[[currency]].\n let currency = internal['[[currency]]'];\n\n let cd;\n\n // ii. If numberFormat.[[currencyDisplay]] is \"code\", then\n if (internal['[[currencyDisplay]]'] === \"code\") {\n // 1. Let cd be currency.\n cd = currency;\n }\n // iii. Else if numberFormat.[[currencyDisplay]] is \"symbol\", then\n else if (internal['[[currencyDisplay]]'] === \"symbol\") {\n // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.\n cd = data.currencies[currency] || currency;\n }\n // iv. Else if numberFormat.[[currencyDisplay]] is \"name\", then\n else if (internal['[[currencyDisplay]]'] === \"name\") {\n // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.\n cd = currency;\n }\n // v. Add new part record { [[type]]: \"currency\", [[value]]: cd } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });\n }\n // a. Else,\n else {\n // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.\n let literal = pattern.substring(beginIndex, endIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Set nextIndex to endIndex + 1.\n nextIndex = endIndex + 1;\n // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, \"{\", nextIndex)\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n // 9. If nextIndex is less than length, then:\n if (nextIndex < length) {\n // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.\n let literal = pattern.substring(nextIndex, length);\n // a. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // 10. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumber]\n */\nexport function FormatNumber(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be an empty String.\n let result = '';\n // 3. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Set result to a String value produced by concatenating result and part.[[value]].\n result += part['[[value]]'];\n }\n // 4. Return result.\n return result;\n}\n\n/**\n * When the ToRawPrecision abstract operation is called with arguments x (which\n * must be a finite non-negative number), minPrecision, and maxPrecision (both\n * must be integers between 1 and 21) the following steps are taken:\n */\nfunction ToRawPrecision (x, minPrecision, maxPrecision) {\n // 1. Let p be maxPrecision.\n let p = maxPrecision;\n\n let m, e;\n\n // 2. If x = 0, then\n if (x === 0) {\n // a. Let m be the String consisting of p occurrences of the character \"0\".\n m = arrJoin.call(Array (p + 1), '0');\n // b. Let e be 0.\n e = 0;\n }\n // 3. Else\n else {\n // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the\n // exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as\n // possible. If there are two such sets of e and n, pick the e and n for\n // which n × 10ᵉ⁻ᵖ⁺¹ is larger.\n e = log10Floor(Math.abs(x));\n\n // Easier to get to m from here\n let f = Math.round(Math.exp((Math.abs(e - p + 1)) * Math.LN10));\n\n // b. Let m be the String consisting of the digits of the decimal\n // representation of n (in order, with no leading zeroes)\n m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));\n }\n\n // 4. If e ≥ p, then\n if (e >= p)\n // a. Return the concatenation of m and e-p+1 occurrences of the character \"0\".\n return m + arrJoin.call(Array(e-p+1 + 1), '0');\n\n // 5. If e = p-1, then\n else if (e === p - 1)\n // a. Return m.\n return m;\n\n // 6. If e ≥ 0, then\n else if (e >= 0)\n // a. Let m be the concatenation of the first e+1 characters of m, the character\n // \".\", and the remaining p–(e+1) characters of m.\n m = m.slice(0, e + 1) + '.' + m.slice(e + 1);\n\n // 7. If e < 0, then\n else if (e < 0)\n // a. Let m be the concatenation of the String \"0.\", –(e+1) occurrences of the\n // character \"0\", and the string m.\n m = '0.' + arrJoin.call(Array (-(e+1) + 1), '0') + m;\n\n // 8. If m contains the character \".\", and maxPrecision > minPrecision, then\n if (m.indexOf(\".\") >= 0 && maxPrecision > minPrecision) {\n // a. Let cut be maxPrecision – minPrecision.\n let cut = maxPrecision - minPrecision;\n\n // b. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.charAt(m.length-1) === '0') {\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n\n // ii. Decrease cut by 1.\n cut--;\n }\n\n // c. If the last character of m is \".\", then\n if (m.charAt(m.length-1) === '.')\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. Return m.\n return m;\n}\n\n/**\n * @spec[tc39/ecma402/master/spec/numberformat.html]\n * @clause[sec-torawfixed]\n * When the ToRawFixed abstract operation is called with arguments x (which must\n * be a finite non-negative number), minInteger (which must be an integer between\n * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and\n * 20) the following steps are taken:\n */\nfunction ToRawFixed(x, minInteger, minFraction, maxFraction) {\n // 1. Let f be maxFraction.\n let f = maxFraction;\n // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.\n let n = Math.pow(10, f) * x; // diverging...\n // 3. If n = 0, let m be the String \"0\". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).\n let m = (n === 0 ? \"0\" : n.toFixed(0)); // divering...\n\n {\n // this diversion is needed to take into consideration big numbers\n let idx;\n let exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;\n if (exp) {\n m = m.slice(0, idx).replace('.', '');\n m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');\n }\n }\n\n let int;\n // 4. If f ≠ 0, then\n if (f !== 0) {\n // a. Let k be the number of characters in m.\n let k = m.length;\n // a. If k ≤ f, then\n if (k <= f) {\n // i. Let z be the String consisting of f+1–k occurrences of the character \"0\".\n let z = arrJoin.call(Array(f + 1 - k + 1), '0');\n // ii. Let m be the concatenation of Strings z and m.\n m = z + m;\n // iii. Let k be f+1.\n k = f + 1;\n }\n // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.\n let a = m.substring(0, k - f), b = m.substring(k - f, m.length);\n // a. Let m be the concatenation of the three Strings a, \".\", and b.\n m = a + \".\" + b;\n // a. Let int be the number of characters in a.\n int = a.length;\n }\n // 5. Else, let int be the number of characters in m.\n else int = m.length;\n // 6. Let cut be maxFraction – minFraction.\n let cut = maxFraction - minFraction;\n // 7. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.slice(-1) === \"0\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n // a. Decrease cut by 1.\n cut--;\n }\n // 8. If the last character of m is \".\", then\n if (m.slice(-1) === \".\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. If int < minInteger, then\n if (int < minInteger) {\n // a. Let z be the String consisting of minInteger–int occurrences of the character \"0\".\n let z = arrJoin.call(Array(minInteger - int + 1), '0');\n // a. Let m be the concatenation of Strings z and m.\n m = z + m;\n }\n // 10. Return m.\n return m;\n}\n\n// Sect 11.3.2 Table 2, Numbering systems\n// ======================================\nlet numSys = {\n arab: ['\\u0660', '\\u0661', '\\u0662', '\\u0663', '\\u0664', '\\u0665', '\\u0666', '\\u0667', '\\u0668', '\\u0669'],\n arabext: ['\\u06F0', '\\u06F1', '\\u06F2', '\\u06F3', '\\u06F4', '\\u06F5', '\\u06F6', '\\u06F7', '\\u06F8', '\\u06F9'],\n bali: ['\\u1B50', '\\u1B51', '\\u1B52', '\\u1B53', '\\u1B54', '\\u1B55', '\\u1B56', '\\u1B57', '\\u1B58', '\\u1B59'],\n beng: ['\\u09E6', '\\u09E7', '\\u09E8', '\\u09E9', '\\u09EA', '\\u09EB', '\\u09EC', '\\u09ED', '\\u09EE', '\\u09EF'],\n deva: ['\\u0966', '\\u0967', '\\u0968', '\\u0969', '\\u096A', '\\u096B', '\\u096C', '\\u096D', '\\u096E', '\\u096F'],\n fullwide: ['\\uFF10', '\\uFF11', '\\uFF12', '\\uFF13', '\\uFF14', '\\uFF15', '\\uFF16', '\\uFF17', '\\uFF18', '\\uFF19'],\n gujr: ['\\u0AE6', '\\u0AE7', '\\u0AE8', '\\u0AE9', '\\u0AEA', '\\u0AEB', '\\u0AEC', '\\u0AED', '\\u0AEE', '\\u0AEF'],\n guru: ['\\u0A66', '\\u0A67', '\\u0A68', '\\u0A69', '\\u0A6A', '\\u0A6B', '\\u0A6C', '\\u0A6D', '\\u0A6E', '\\u0A6F'],\n hanidec: ['\\u3007', '\\u4E00', '\\u4E8C', '\\u4E09', '\\u56DB', '\\u4E94', '\\u516D', '\\u4E03', '\\u516B', '\\u4E5D'],\n khmr: ['\\u17E0', '\\u17E1', '\\u17E2', '\\u17E3', '\\u17E4', '\\u17E5', '\\u17E6', '\\u17E7', '\\u17E8', '\\u17E9'],\n knda: ['\\u0CE6', '\\u0CE7', '\\u0CE8', '\\u0CE9', '\\u0CEA', '\\u0CEB', '\\u0CEC', '\\u0CED', '\\u0CEE', '\\u0CEF'],\n laoo: ['\\u0ED0', '\\u0ED1', '\\u0ED2', '\\u0ED3', '\\u0ED4', '\\u0ED5', '\\u0ED6', '\\u0ED7', '\\u0ED8', '\\u0ED9'],\n latn: ['\\u0030', '\\u0031', '\\u0032', '\\u0033', '\\u0034', '\\u0035', '\\u0036', '\\u0037', '\\u0038', '\\u0039'],\n limb: ['\\u1946', '\\u1947', '\\u1948', '\\u1949', '\\u194A', '\\u194B', '\\u194C', '\\u194D', '\\u194E', '\\u194F'],\n mlym: ['\\u0D66', '\\u0D67', '\\u0D68', '\\u0D69', '\\u0D6A', '\\u0D6B', '\\u0D6C', '\\u0D6D', '\\u0D6E', '\\u0D6F'],\n mong: ['\\u1810', '\\u1811', '\\u1812', '\\u1813', '\\u1814', '\\u1815', '\\u1816', '\\u1817', '\\u1818', '\\u1819'],\n mymr: ['\\u1040', '\\u1041', '\\u1042', '\\u1043', '\\u1044', '\\u1045', '\\u1046', '\\u1047', '\\u1048', '\\u1049'],\n orya: ['\\u0B66', '\\u0B67', '\\u0B68', '\\u0B69', '\\u0B6A', '\\u0B6B', '\\u0B6C', '\\u0B6D', '\\u0B6E', '\\u0B6F'],\n tamldec: ['\\u0BE6', '\\u0BE7', '\\u0BE8', '\\u0BE9', '\\u0BEA', '\\u0BEB', '\\u0BEC', '\\u0BED', '\\u0BEE', '\\u0BEF'],\n telu: ['\\u0C66', '\\u0C67', '\\u0C68', '\\u0C69', '\\u0C6A', '\\u0C6B', '\\u0C6C', '\\u0C6D', '\\u0C6E', '\\u0C6F'],\n thai: ['\\u0E50', '\\u0E51', '\\u0E52', '\\u0E53', '\\u0E54', '\\u0E55', '\\u0E56', '\\u0E57', '\\u0E58', '\\u0E59'],\n tibt: ['\\u0F20', '\\u0F21', '\\u0F22', '\\u0F23', '\\u0F24', '\\u0F25', '\\u0F26', '\\u0F27', '\\u0F28', '\\u0F29'],\n};\n\n/**\n * This function provides access to the locale and formatting options computed\n * during initialization of the object.\n *\n * The function returns a new object whose properties and attributes are set as\n * if constructed by an object literal assigning to each of the following\n * properties the value of the corresponding internal property of this\n * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,\n * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and\n * useGrouping. Properties whose corresponding internal properties are not present\n * are not assigned.\n */\n/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {\n configurable: true,\n writable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay',\n 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits',\n 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[['+ props[i] +']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","/* jslint esnext: true */\n\n// Match these datetime components in a CLDR pattern, except those in single quotes\nlet expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n// trim patterns after transformations\nlet expPatternTrimmer = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n// Skip over patterns with these datetime components because we don't have data\n// to back them up:\n// timezone, weekday, amoung others\nlet unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string\n\nlet dtKeys = [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"weekday\", \"quarter\"];\nlet tmKeys = [\"hour\", \"minute\", \"second\", \"hour12\", \"timeZoneName\"];\n\nfunction isDateFormatOnly(obj) {\n for (let i = 0; i < tmKeys.length; i += 1) {\n if (obj.hasOwnProperty(tmKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isTimeFormatOnly(obj) {\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (obj.hasOwnProperty(dtKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {\n let o = { _: {} };\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (dateFormatObj[dtKeys[i]]) {\n o[dtKeys[i]] = dateFormatObj[dtKeys[i]];\n }\n if (dateFormatObj._[dtKeys[i]]) {\n o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];\n }\n }\n for (let j = 0; j < tmKeys.length; j += 1) {\n if (timeFormatObj[tmKeys[j]]) {\n o[tmKeys[j]] = timeFormatObj[tmKeys[j]];\n }\n if (timeFormatObj._[tmKeys[j]]) {\n o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];\n }\n }\n return o;\n}\n\nfunction computeFinalPatterns(formatObj) {\n // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:\n // 'In patterns, two single quotes represents a literal single quote, either\n // inside or outside single quotes. Text within single quotes is not\n // interpreted in any way (except for two adjacent single quotes).'\n formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, ($0, literal) => {\n return literal ? literal : \"'\";\n });\n\n // pattern 12 is always the default. we can produce the 24 by removing {ampm}\n formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');\n return formatObj;\n}\n\nfunction expDTComponentsMeta($0, formatObj) {\n switch ($0.charAt(0)) {\n // --- Era\n case 'G':\n formatObj.era = [ 'short', 'short', 'short', 'long', 'narrow' ][$0.length-1];\n return '{era}';\n\n // --- Year\n case 'y':\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';\n return '{year}';\n\n // --- Quarter (not supported in this polyfill)\n case 'Q':\n case 'q':\n formatObj.quarter = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{quarter}';\n\n // --- Month\n case 'M':\n case 'L':\n formatObj.month = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{month}';\n\n // --- Week (not supported in this polyfill)\n case 'w':\n // week of the year\n formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';\n return '{weekday}';\n case 'W':\n // week of the month\n formatObj.week = 'numeric';\n return '{weekday}';\n\n // --- Day\n case 'd':\n // day of the month\n formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';\n return '{day}';\n case 'D': // day of the year\n case 'F': // day of the week\n case 'g':\n // 1..n: Modified Julian day\n formatObj.day = 'numeric';\n return '{day}';\n\n // --- Week Day\n case 'E':\n // day of the week\n formatObj.weekday = [ 'short', 'short', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'e':\n // local day of the week\n formatObj.weekday = [ 'numeric', '2-digit', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'c':\n // stand alone local day of the week\n formatObj.weekday = [ 'numeric', undefined, 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n\n // --- Period\n case 'a': // AM, PM\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n formatObj.hour12 = true;\n return '{ampm}';\n\n // --- Hour\n case 'h':\n case 'H':\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n case 'k':\n case 'K':\n formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n\n // --- Minute\n case 'm':\n formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';\n return '{minute}';\n\n // --- Second\n case 's':\n formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';\n return '{second}';\n case 'S':\n case 'A':\n formatObj.second = 'numeric';\n return '{second}';\n\n // --- Timezone\n case 'z': // 1..3, 4: specific non-location format\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n // this polyfill only supports much, for now, we are just doing something dummy\n formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';\n return '{timeZoneName}';\n }\n}\n\n\n/**\n * Converts the CLDR availableFormats into the objects and patterns required by\n * the ECMAScript Internationalization API specification.\n */\nexport function createDateTimeFormat(skeleton, pattern) {\n // we ignore certain patterns that are unsupported to avoid this expensive op.\n if (unwantedDTCs.test(pattern))\n return undefined;\n\n let formatObj = {\n originalPattern: pattern,\n _: {},\n };\n\n // Replace the pattern string with the one required by the specification, whilst\n // at the same time evaluating it for the subsets and formats\n formatObj.extendedPattern = pattern.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj._);\n });\n\n // Match the skeleton string with the one required by the specification\n // this implementation is based on the Date Field Symbol Table:\n // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n // Note: we are adding extra data to the formatObject even though this polyfill\n // might not support it.\n skeleton.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj);\n });\n\n return computeFinalPatterns(formatObj);\n}\n\n/**\n * Processes DateTime formats from CLDR to an easier-to-parse format.\n * the result of this operation should be cached the first time a particular\n * calendar is analyzed.\n *\n * The specification requires we support at least the following subsets of\n * date/time components:\n *\n * - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'\n * - 'weekday', 'year', 'month', 'day'\n * - 'year', 'month', 'day'\n * - 'year', 'month'\n * - 'month', 'day'\n * - 'hour', 'minute', 'second'\n * - 'hour', 'minute'\n *\n * We need to cherry pick at least these subsets from the CLDR data and convert\n * them into the pattern objects used in the ECMA-402 API.\n */\nexport function createDateTimeFormats(formats) {\n let availableFormats = formats.availableFormats;\n let timeFormats = formats.timeFormats;\n let dateFormats = formats.dateFormats;\n let result = [];\n let skeleton, pattern, computed, i, j;\n let timeRelatedFormats = [];\n let dateRelatedFormats = [];\n\n // Map available (custom) formats into a pattern for createDateTimeFormats\n for (skeleton in availableFormats) {\n if (availableFormats.hasOwnProperty(skeleton)) {\n pattern = availableFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n // in some cases, the format is only displaying date specific props\n // or time specific props, in which case we need to also produce the\n // combined formats.\n if (isDateFormatOnly(computed)) {\n dateRelatedFormats.push(computed);\n } else if (isTimeFormatOnly(computed)) {\n timeRelatedFormats.push(computed);\n }\n }\n }\n }\n\n // Map time formats into a pattern for createDateTimeFormats\n for (skeleton in timeFormats) {\n if (timeFormats.hasOwnProperty(skeleton)) {\n pattern = timeFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n timeRelatedFormats.push(computed);\n }\n }\n }\n\n // Map date formats into a pattern for createDateTimeFormats\n for (skeleton in dateFormats) {\n if (dateFormats.hasOwnProperty(skeleton)) {\n pattern = dateFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n dateRelatedFormats.push(computed);\n }\n }\n }\n\n // combine custom time and custom date formats when they are orthogonals to complete the\n // formats supported by CLDR.\n // This Algo is based on section \"Missing Skeleton Fields\" from:\n // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n for (i = 0; i < timeRelatedFormats.length; i += 1) {\n for (j = 0; j < dateRelatedFormats.length; j += 1) {\n if (dateRelatedFormats[j].month === 'long') {\n pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;\n } else if (dateRelatedFormats[j].month === 'short') {\n pattern = formats.medium;\n } else {\n pattern = formats.short;\n }\n computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);\n computed.originalPattern = pattern;\n computed.extendedPattern = pattern\n .replace('{0}', timeRelatedFormats[i].extendedPattern)\n .replace('{1}', dateRelatedFormats[j].extendedPattern)\n .replace(/^[,\\s]+|[,\\s]+$/gi, '');\n result.push(computeFinalPatterns(computed));\n }\n }\n\n return result;\n}\n","// 12.1 The Intl.DateTimeFormat constructor\n// ==================================\n\nimport {\n toLatinUpperCase,\n} from './6.locales-currencies-tz.js';\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n ResolveLocale,\n GetOption,\n SupportedLocales,\n} from \"./9.negotiation.js\";\n\nimport {\n FormatNumber,\n} from \"./11.numberformat.js\";\n\nimport {\n createDateTimeFormats,\n} from \"./cldr\";\n\nimport {\n internals,\n es3,\n fnBind,\n defineProperty,\n toObject,\n getInternalProperties,\n createRegExpRestore,\n secret,\n Record,\n List,\n hop,\n objCreate,\n arrPush,\n arrIndexOf,\n} from './util.js';\n\n// An object map of date component keys, saves using a regex later\nconst dateWidths = objCreate(null, { narrow:{}, short:{}, long:{} });\n\n/**\n * Returns a string for a date component, resolved using multiple inheritance as specified\n * as specified in the Unicode Technical Standard 35.\n */\nfunction resolveDateString(data, ca, component, width, key) {\n // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:\n // 'In clearly specified instances, resources may inherit from within the same locale.\n // For example, ... the Buddhist calendar inherits from the Gregorian calendar.'\n let obj = data[ca] && data[ca][component]\n ? data[ca][component]\n : data.gregory[component],\n\n // \"sideways\" inheritance resolves strings when a key doesn't exist\n alts = {\n narrow: ['short', 'long'],\n short: ['long', 'narrow'],\n long: ['short', 'narrow'],\n },\n\n //\n resolved = hop.call(obj, width)\n ? obj[width]\n : hop.call(obj, alts[width][0])\n ? obj[alts[width][0]]\n : obj[alts[width][1]];\n\n // `key` wouldn't be specified for components 'dayPeriods'\n return key !== null ? resolved[key] : resolved;\n}\n\n// Define the DateTimeFormat constructor internally so it cannot be tainted\nexport function DateTimeFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.DateTimeFormat(locales, options);\n }\n return InitializeDateTimeFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'DateTimeFormat', {\n configurable: true,\n writable: true,\n value: DateTimeFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(DateTimeFormatConstructor, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat\n * (which must be an object), locales, and options. It initializes dateTimeFormat as a\n * DateTimeFormat object.\n */\nexport function/* 12.1.1.1 */InitializeDateTimeFormat (dateTimeFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(dateTimeFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(dateTimeFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined below) with arguments options, \"any\", and \"date\".\n options = ToDateTimeOptions(options, 'any', 'date');\n\n // 5. Let opt be a new Record.\n let opt = new Record();\n\n // 6. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with arguments options, \"localeMatcher\", \"string\", a List\n // containing the two String values \"lookup\" and \"best fit\", and \"best fit\".\n let matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 7. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 8. Let DateTimeFormat be the standard built-in object that is the initial\n // value of Intl.DateTimeFormat.\n let DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need\n\n // 9. Let localeData be the value of the [[localeData]] internal property of\n // DateTimeFormat.\n let localeData = DateTimeFormat['[[localeData]]'];\n\n // 10. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of DateTimeFormat, and localeData.\n let r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales,\n opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 11. Set the [[locale]] internal property of dateTimeFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of\n // r.[[ca]].\n internal['[[calendar]]'] = r['[[ca]]'];\n\n // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of\n // r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let tz be the result of calling the [[Get]] internal method of options with\n // argument \"timeZone\".\n let tz = options.timeZone;\n\n // 16. If tz is not undefined, then\n if (tz !== undefined) {\n // a. Let tz be ToString(tz).\n // b. Convert tz to upper case as described in 6.1.\n // NOTE: If an implementation accepts additional time zone values, as permitted\n // under certain conditions by the Conformance clause, different casing\n // rules apply.\n tz = toLatinUpperCase(tz);\n\n // c. If tz is not \"UTC\", then throw a RangeError exception.\n // ###TODO: accept more time zones###\n if (tz !== 'UTC')\n throw new RangeError('timeZone is not supported.');\n }\n\n // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.\n internal['[[timeZone]]'] = tz;\n\n // 18. Let opt be a new Record.\n opt = new Record();\n\n // 19. For each row of Table 3, except the header row, do:\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // 20. Let prop be the name given in the Property column of the row.\n // 21. Let value be the result of calling the GetOption abstract operation,\n // passing as argument options, the name given in the Property column of the\n // row, \"string\", a List containing the strings given in the Values column of\n // the row, and undefined.\n let value = GetOption(options, prop, 'string', dateTimeComponents[prop]);\n\n // 22. Set opt.[[]] to value.\n opt['[['+prop+']]'] = value;\n }\n\n // Assigned a value below\n let bestFormat;\n\n // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 24. Let formats be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"formats\".\n // Note: we process the CLDR formats into the spec'd structure\n let formats = ToDateTimeFormats(dataLocaleData.formats);\n\n // 25. Let matcher be the result of calling the GetOption abstract operation with\n // arguments options, \"formatMatcher\", \"string\", a List containing the two String\n // values \"basic\" and \"best fit\", and \"best fit\".\n matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');\n\n // Optimization: caching the processed formats as a one time operation by\n // replacing the initial structure from localeData\n dataLocaleData.formats = formats;\n\n // 26. If matcher is \"basic\", then\n if (matcher === 'basic') {\n // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract\n // operation (defined below) with opt and formats.\n bestFormat = BasicFormatMatcher(opt, formats);\n\n // 28. Else\n } else {\n {\n // diverging\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n opt.hour12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n }\n // 29. Let bestFormat be the result of calling the BestFitFormatMatcher\n // abstract operation (defined below) with opt and formats.\n bestFormat = BestFitFormatMatcher(opt, formats);\n }\n\n // 30. For each row in Table 3, except the header row, do\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // a. Let prop be the name given in the Property column of the row.\n // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of\n // bestFormat with argument prop.\n // c. If pDesc is not undefined, then\n if (hop.call(bestFormat, prop)) {\n // i. Let p be the result of calling the [[Get]] internal method of bestFormat\n // with argument prop.\n let p = bestFormat[prop];\n {\n // diverging\n p = bestFormat._ && hop.call(bestFormat._, prop) ? bestFormat._[prop] : p;\n }\n\n // ii. Set the [[]] internal property of dateTimeFormat to p.\n internal['[['+prop+']]'] = p;\n }\n }\n\n let pattern; // Assigned a value below\n\n // 31. Let hr12 be the result of calling the GetOption abstract operation with\n // arguments options, \"hour12\", \"boolean\", undefined, and undefined.\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n\n // 32. If dateTimeFormat has an internal property [[hour]], then\n if (internal['[[hour]]']) {\n // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]\n // internal method of dataLocaleData with argument \"hour12\".\n hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n\n // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.\n internal['[[hour12]]'] = hr12;\n\n // c. If hr12 is true, then\n if (hr12 === true) {\n // i. Let hourNo0 be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"hourNo0\".\n let hourNo0 = dataLocaleData.hourNo0;\n\n // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.\n internal['[[hourNo0]]'] = hourNo0;\n\n // iii. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern12\".\n pattern = bestFormat.pattern12;\n }\n\n // d. Else\n else\n // i. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n }\n\n // 33. Else\n else\n // a. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n\n // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.\n internal['[[pattern]]'] = pattern;\n\n // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to\n // true.\n internal['[[initializedDateTimeFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return dateTimeFormat;\n}\n\n/**\n * Several DateTimeFormat algorithms use values from the following table, which provides\n * property names and allowable values for the components of date and time formats:\n */\nlet dateTimeComponents = {\n weekday: [ \"narrow\", \"short\", \"long\" ],\n era: [ \"narrow\", \"short\", \"long\" ],\n year: [ \"2-digit\", \"numeric\" ],\n month: [ \"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\" ],\n day: [ \"2-digit\", \"numeric\" ],\n hour: [ \"2-digit\", \"numeric\" ],\n minute: [ \"2-digit\", \"numeric\" ],\n second: [ \"2-digit\", \"numeric\" ],\n timeZoneName: [ \"short\", \"long\" ],\n};\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeFormats(formats) {\n if (Object.prototype.toString.call(formats) === '[object Array]') {\n return formats;\n }\n return createDateTimeFormats(formats);\n}\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nexport function ToDateTimeOptions (options, required, defaults) {\n // 1. If options is undefined, then let options be null, else let options be\n // ToObject(options).\n if (options === undefined)\n options = null;\n\n else {\n // (#12) options needs to be a Record, but it also needs to inherit properties\n let opt2 = toObject(options);\n options = new Record();\n\n for (let k in opt2)\n options[k] = opt2[k];\n }\n\n // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.\n let create = objCreate;\n\n // 3. Let options be the result of calling the [[Call]] internal method of create with\n // undefined as the this value and an argument list containing the single item\n // options.\n options = create(options);\n\n // 4. Let needDefaults be true.\n let needDefaults = true;\n\n // 5. If required is \"date\" or \"any\", then\n if (required === 'date' || required === 'any') {\n // a. For each of the property names \"weekday\", \"year\", \"month\", \"day\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.weekday !== undefined || options.year !== undefined\n || options.month !== undefined || options.day !== undefined)\n needDefaults = false;\n }\n\n // 6. If required is \"time\" or \"any\", then\n if (required === 'time' || required === 'any') {\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined)\n needDefaults = false;\n }\n\n // 7. If needDefaults is true and defaults is either \"date\" or \"all\", then\n if (needDefaults && (defaults === 'date' || defaults === 'all'))\n // a. For each of the property names \"year\", \"month\", \"day\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.year = options.month = options.day = 'numeric';\n\n // 8. If needDefaults is true and defaults is either \"time\" or \"all\", then\n if (needDefaults && (defaults === 'time' || defaults === 'all'))\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.hour = options.minute = options.second = 'numeric';\n\n // 9. Return options.\n return options;\n}\n\n/**\n * When the BasicFormatMatcher abstract operation is called with two arguments options and\n * formats, the following steps are taken:\n */\nfunction BasicFormatMatcher (options, formats) {\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta === 2)\n score -= longMorePenalty;\n\n // 6. Else if delta = 1, decrease score by shortMorePenalty.\n else if (delta === 1)\n score -= shortMorePenalty;\n\n // 7. Else if delta = -1, decrease score by shortLessPenalty.\n else if (delta === -1)\n score -= shortLessPenalty;\n\n // 8. Else if delta = -2, decrease score by longLessPenalty.\n else if (delta === -2)\n score -= longLessPenalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/**\n * When the BestFitFormatMatcher abstract operation is called with two arguments options\n * and formats, it performs implementation dependent steps, which should return a set of\n * component representations that a typical user of the selected locale would perceive as\n * at least as good as the one returned by BasicFormatMatcher.\n *\n * This polyfill defines the algorithm to be the same as BasicFormatMatcher,\n * with the addition of bonus points awarded where the requested format is of\n * the same data type as the potentially matching format.\n *\n * This algo relies on the concept of closest distance matching described here:\n * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\n * Typically a “best match” is found using a closest distance match, such as:\n *\n * Symbols requesting a best choice for the locale are replaced.\n * j → one of {H, k, h, K}; C → one of {a, b, B}\n * -> Covered by cldr.js matching process\n *\n * For fields with symbols representing the same type (year, month, day, etc):\n * Most symbols have a small distance from each other.\n * M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...\n * -> Covered by cldr.js matching process\n *\n * Width differences among fields, other than those marking text vs numeric, are given small distance from each other.\n * MMM ≅ MMMM\n * MM ≅ M\n * Numeric and text fields are given a larger distance from each other.\n * MMM ≈ MM\n * Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.\n * d ≋ D; ...\n * Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).\n *\n *\n * For example,\n *\n * { month: 'numeric', day: 'numeric' }\n *\n * should match\n *\n * { month: '2-digit', day: '2-digit' }\n *\n * rather than\n *\n * { month: 'short', day: 'numeric' }\n *\n * This makes sense because a user requesting a formatted date with numeric parts would\n * not expect to see the returned format containing narrow, short or long part names\n */\nfunction BestFitFormatMatcher (options, formats) {\n\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n let hour12Penalty = 1;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n {\n // diverging from spec\n // When the bestFit argument is true, subtract additional penalty where data types are not the same\n if ((formatPropIndex <= 1 && optionsPropIndex >= 2) || (formatPropIndex >= 2 && optionsPropIndex <= 1)) {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 0)\n score -= longMorePenalty;\n else if (delta < 0)\n score -= longLessPenalty;\n } else {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 1)\n score -= shortMorePenalty;\n else if (delta < -1)\n score -= shortLessPenalty;\n }\n }\n }\n }\n\n {\n // diverging to also take into consideration differences between 12 or 24 hours\n // which is special for the best fit only.\n if (format._.hour12 !== options.hour12) {\n score -= hour12Penalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/* 12.2.3 */internals.DateTimeFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['ca', 'nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the\n * following steps are taken:\n */\n/* 12.2.2 */\ndefineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * DateTimeFormat object.\n */\n/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatDateTime,\n});\n\ndefineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {\n configurable: true,\n get: GetFormatToPartsDateTime,\n});\n\nfunction GetFormatDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this DateTimeFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 0, that takes the argument date and\n // performs the following steps:\n let F = function () {\n // i. If date is not provided or is undefined, then let x be the\n // result as if by the expression Date.now() where Date.now is\n // the standard built-in function defined in ES5, 15.9.4.4.\n // ii. Else let x be ToNumber(date).\n // iii. Return the result of calling the FormatDateTime abstract\n // operation (defined below) with arguments this and x.\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatDateTime(this, x);\n };\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction GetFormatToPartsDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');\n\n if (internal['[[boundFormatToParts]]'] === undefined) {\n let F = function () {\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatToPartsDateTime(this, x);\n };\n let bf = fnBind.call(F, this);\n internal['[[boundFormatToParts]]'] = bf;\n }\n return internal['[[boundFormatToParts]]'];\n}\n\nfunction CreateDateTimeParts(dateTimeFormat, x) {\n // 1. If x is not a finite Number, then throw a RangeError exception.\n if (!isFinite(x))\n throw new RangeError('Invalid valid date passed to format');\n\n let internal = dateTimeFormat.__getInternalProperties(secret);\n\n // Creating restore point for properties on the RegExp object... please wait\n /* let regexpState = */createRegExpRestore(); // ###TODO: review this\n\n // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.\n let locale = internal['[[locale]]'];\n\n // 3. Let nf be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {useGrouping: false}) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n let nf = new Intl.NumberFormat([locale], {useGrouping: false});\n\n // 4. Let nf2 be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:\n // false}) where Intl.NumberFormat is the standard built-in constructor defined in\n // 11.1.3.\n let nf2 = new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping: false});\n\n // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined\n // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,\n // and the value of the [[timeZone]] internal property of dateTimeFormat.\n let tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);\n\n // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.\n let pattern = internal['[[pattern]]'];\n\n // 7.\n let result = new List();\n\n // 8.\n let index = 0;\n\n // 9.\n let beginIndex = pattern.indexOf('{');\n\n // 10.\n let endIndex = 0;\n\n // Need the locale minus any extensions\n let dataLocale = internal['[[dataLocale]]'];\n\n // Need the calendar data from CLDR\n let localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;\n let ca = internal['[[calendar]]'];\n\n // 11.\n while (beginIndex !== -1) {\n let fv;\n // a.\n endIndex = pattern.indexOf('}', beginIndex);\n // b.\n if (endIndex === -1) {\n throw new Error('Unclosed pattern');\n }\n // c.\n if (beginIndex > index) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(index, beginIndex),\n });\n }\n // d.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // e.\n if (dateTimeComponents.hasOwnProperty(p)) {\n // i. Let f be the value of the [[

]] internal property of dateTimeFormat.\n let f = internal['[['+ p +']]'];\n // ii. Let v be the value of tm.[[

]].\n let v = tm['[['+ p +']]'];\n // iii. If p is \"year\" and v ≤ 0, then let v be 1 - v.\n if (p === 'year' && v <= 0) {\n v = 1 - v;\n }\n // iv. If p is \"month\", then increase v by 1.\n else if (p === 'month') {\n v++;\n }\n // v. If p is \"hour\" and the value of the [[hour12]] internal property of\n // dateTimeFormat is true, then\n else if (p === 'hour' && internal['[[hour12]]'] === true) {\n // 1. Let v be v modulo 12.\n v = v % 12;\n // 2. If v is 0 and the value of the [[hourNo0]] internal property of\n // dateTimeFormat is true, then let v be 12.\n if (v === 0 && internal['[[hourNo0]]'] === true) {\n v = 12;\n }\n }\n\n // vi. If f is \"numeric\", then\n if (f === 'numeric') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments nf and v.\n fv = FormatNumber(nf, v);\n }\n // vii. Else if f is \"2-digit\", then\n else if (f === '2-digit') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // with arguments nf2 and v.\n fv = FormatNumber(nf2, v);\n // 2. If the length of fv is greater than 2, let fv be the substring of fv\n // containing the last two characters.\n if (fv.length > 2) {\n fv = fv.slice(-2);\n }\n }\n // viii. Else if f is \"narrow\", \"short\", or \"long\", then let fv be a String\n // value representing f in the desired form; the String value depends upon\n // the implementation and the effective locale and calendar of\n // dateTimeFormat. If p is \"month\", then the String value may also depend\n // on whether dateTimeFormat has a [[day]] internal property. If p is\n // \"timeZoneName\", then the String value may also depend on the value of\n // the [[inDST]] field of tm.\n else if (f in dateWidths) {\n switch (p) {\n case 'month':\n fv = resolveDateString(localeData, ca, 'months', f, tm['[['+ p +']]']);\n break;\n\n case 'weekday':\n try {\n fv = resolveDateString(localeData, ca, 'days', f, tm['[['+ p +']]']);\n // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];\n } catch (e) {\n throw new Error('Could not find weekday data for locale '+locale);\n }\n break;\n\n case 'timeZoneName':\n fv = ''; // ###TODO\n break;\n\n case 'era':\n try {\n fv = resolveDateString(localeData, ca, 'eras', f, tm['[['+ p +']]']);\n } catch (e) {\n throw new Error('Could not find era data for locale '+locale);\n }\n break;\n\n default:\n fv = tm['[['+ p +']]'];\n }\n }\n // ix\n arrPush.call(result, {\n type: p,\n value: fv,\n });\n // f.\n } else if (p === 'ampm') {\n // i.\n let v = tm['[[hour]]'];\n // ii./iii.\n fv = resolveDateString(localeData, ca, 'dayPeriods', v > 11 ? 'pm' : 'am', null);\n // iv.\n arrPush.call(result, {\n type: 'dayPeriod',\n value: fv,\n });\n // g.\n } else {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(beginIndex, endIndex + 1),\n });\n }\n // h.\n index = endIndex + 1;\n // i.\n beginIndex = pattern.indexOf('{', index);\n }\n // 12.\n if (endIndex < pattern.length - 1) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substr(endIndex + 1),\n });\n }\n // 13.\n return result;\n}\n\n/**\n * When the FormatDateTime abstract operation is called with arguments dateTimeFormat\n * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number\n * value), it returns a String value representing x (interpreted as a time value as\n * specified in ES5, 15.9.1.1) according to the effective locale and the formatting\n * options of dateTimeFormat.\n */\nexport function FormatDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = '';\n\n for (let part in parts) {\n result += parts[part].value;\n }\n return result;\n}\n\nfunction FormatToPartsDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = [];\n for (let part in parts) {\n result.push({\n type: parts[part].type,\n value: parts[part].value,\n });\n }\n return result;\n}\n\n\n/**\n * When the ToLocalTime abstract operation is called with arguments date, calendar, and\n * timeZone, the following steps are taken:\n */\nfunction ToLocalTime(date, calendar, timeZone) {\n // 1. Apply calendrical calculations on date for the given calendar and time zone to\n // produce weekday, era, year, month, day, hour, minute, second, and inDST values.\n // The calculations should use best available information about the specified\n // calendar and time zone. If the calendar is \"gregory\", then the calculations must\n // match the algorithms specified in ES5, 15.9.1, except that calculations are not\n // bound by the restrictions on the use of best available information on time zones\n // for local time zone adjustment and daylight saving time adjustment imposed by\n // ES5, 15.9.1.7 and 15.9.1.8.\n // ###TODO###\n let d = new Date(date),\n m = 'get' + (timeZone || '');\n\n // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],\n // [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding\n // calculated value.\n return new Record({\n '[[weekday]]': d[m + 'Day'](),\n '[[era]]' : +(d[m + 'FullYear']() >= 0),\n '[[year]]' : d[m + 'FullYear'](),\n '[[month]]' : d[m + 'Month'](),\n '[[day]]' : d[m + 'Date'](),\n '[[hour]]' : d[m + 'Hours'](),\n '[[minute]]' : d[m + 'Minutes'](),\n '[[second]]' : d[m + 'Seconds'](),\n '[[inDST]]' : false, // ###TODO###\n });\n}\n\n/**\n * The function returns a new object whose properties and attributes are set as if\n * constructed by an object literal assigning to each of the following properties the\n * value of the corresponding internal property of this DateTimeFormat object (see 12.4):\n * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,\n * hour, minute, second, and timeZoneName. Properties whose corresponding internal\n * properties are not present are not assigned.\n */\n/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {\n writable: true,\n configurable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday',\n 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","// Sect 13 Locale Sensitive Functions of the ECMAScript Language Specification\n// ===========================================================================\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n FormatNumber,\n NumberFormatConstructor,\n} from \"./11.numberformat.js\";\n\nimport {\n ToDateTimeOptions,\n DateTimeFormatConstructor,\n FormatDateTime,\n} from \"./12.datetimeformat.js\";\n\nlet ls = Intl.__localeSensitiveProtos = {\n Number: {},\n Date: {},\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.2.1 */ls.Number.toLocaleString = function () {\n // Satisfy test 13.2.1_1\n if (Object.prototype.toString.call(this) !== '[object Number]')\n throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');\n\n // 1. Let x be this Number value (as defined in ES5, 15.7.4).\n // 2. If locales is not provided, then let locales be undefined.\n // 3. If options is not provided, then let options be undefined.\n // 4. Let numberFormat be the result of creating a new object as if by the\n // expression new Intl.NumberFormat(locales, options) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n // 5. Return the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments numberFormat and x.\n return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.3.1 */ls.Date.toLocaleString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"any\", and \"all\".\n options = ToDateTimeOptions(options, 'any', 'all');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleDateString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.2 */ls.Date.toLocaleDateString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0],\n\n // 4. If options is not provided, then let options be undefined.\n options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"date\", and \"date\".\n options = ToDateTimeOptions(options, 'date', 'date');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleTimeString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.3 */ls.Date.toLocaleTimeString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"time\", and \"time\".\n options = ToDateTimeOptions(options, 'time', 'time');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\nexport default ls;\n","/**\n * @license Copyright 2013 Andy Earnshaw, MIT License\n *\n * Implements the ECMAScript Internationalization API in ES5-compatible environments,\n * following the ECMA-402 specification as closely as possible\n *\n * ECMA-402: http://ecma-international.org/ecma-402/1.0/\n *\n * CLDR format locale data should be provided using IntlPolyfill.__addLocaleData().\n */\n\nimport {\n defineProperty,\n hop,\n arrPush,\n arrShift,\n internals,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n defaultLocale,\n setDefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport \"./11.numberformat.js\";\n\nimport \"./12.datetimeformat.js\";\n\nimport ls from \"./13.locale-sensitive-functions.js\";\n\ndefineProperty(Intl, '__applyLocaleSensitivePrototypes', {\n writable: true,\n configurable: true,\n value: function () {\n defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });\n // Need this here for IE 8, to avoid the _DontEnum_ bug\n defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });\n\n for (let k in ls.Date) {\n if (hop.call(ls.Date, k))\n defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });\n }\n },\n});\n\n/**\n * Can't really ship a single script with data for hundreds of locales, so we provide\n * this __addLocaleData method as a means for the developer to add the data on an\n * as-needed basis\n */\ndefineProperty(Intl, '__addLocaleData', {\n value: function (data) {\n if (!IsStructurallyValidLanguageTag(data.locale))\n throw new Error(\"Object passed doesn't identify itself with a valid language tag\");\n\n addLocaleData(data, data.locale);\n },\n});\n\nfunction addLocaleData (data, tag) {\n // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present\n if (!data.number)\n throw new Error(\"Object passed doesn't contain locale data for Intl.NumberFormat\");\n\n let locale,\n locales = [ tag ],\n parts = tag.split('-');\n\n // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc\n if (parts.length > 2 && parts[1].length === 4)\n arrPush.call(locales, parts[0] + '-' + parts[2]);\n\n while ((locale = arrShift.call(locales))) {\n // Add to NumberFormat internal properties as per 11.2.3\n arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);\n internals.NumberFormat['[[localeData]]'][locale] = data.number;\n\n // ...and DateTimeFormat internal properties as per 12.2.3\n if (data.date) {\n data.date.nu = data.number.nu;\n arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);\n internals.DateTimeFormat['[[localeData]]'][locale] = data.date;\n }\n }\n\n // If this is the first set of locale data added, make it the default\n if (defaultLocale === undefined)\n setDefaultLocale(tag);\n}\n\nexport default Intl;\n","import IntlPolyfill from \"./core.js\";\n\n// hack to export the polyfill as global Intl if needed\nif (typeof Intl !== 'undefined') {\n try {\n Intl = IntlPolyfill;\n IntlPolyfill.__applyLocaleSensitivePrototypes();\n } catch (e) {\n // can be read only property\n }\n}\n\nexport default IntlPolyfill;\n"],"names":["log10Floor","n","Math","log10","floor","x","round","log","LOG10E","Number","Record","obj","k","hop","call","defineProperty","this","value","enumerable","writable","configurable","List","arguments","length","arrPush","apply","arrSlice","createRegExpRestore","esc","lm","RegExp","lastMatch","ml","multiline","ret","input","reg","has","cap","i","replace","_i","m","slice","indexOf","exp","arrJoin","toObject","arg","TypeError","Object","getInternalProperties","__getInternalProperties","secret","objCreate","setDefaultLocale","locale","toLatinUpperCase","str","ch","charAt","toUpperCase","IsStructurallyValidLanguageTag","expBCP47Syntax","test","expVariantDupes","expSingletonDupes","CanonicalizeLanguageTag","match","parts","toLowerCase","split","max","expExtSequences","sort","source","redundantTags","tags","_max","subtags","extLang","DefaultLocale","defaultLocale","IsWellFormedCurrencyCode","currency","c","String","normalized","expCurrencyCode","CanonicalizeLocaleList","locales","undefined","seen","O","len","Pk","kPresent","kValue","tag","RangeError","arrIndexOf","BestAvailableLocale","availableLocales","candidate","pos","lastIndexOf","substring","LookupMatcher","requestedLocales","availableLocale","noExtensionsLocale","expUnicodeExSeq","result","extension","extensionIndex","BestFitMatcher","ResolveLocale","options","relevantExtensionKeys","localeData","ReferenceError","matcher","r","foundLocale","extensionSubtags","extensionSubtagsLength","prototype","supportedExtension","key","foundLocaleData","keyLocaleData","supportedExtensionAddition","keyPos","requestedValue","valuePos","_valuePos","optionsValue","privateIndex","preExtension","postExtension","LookupSupportedLocales","subset","subsetArray","BestFitSupportedLocales","SupportedLocales","localeMatcher","P","GetOption","property","type","values","fallback","Boolean","GetNumberOption","minimum","maximum","isNaN","NumberFormatConstructor","Intl","InitializeNumberFormat","NumberFormat","numberFormat","internal","regexpState","opt","internals","dataLocale","s","cDigits","CurrencyDigits","cd","mnid","mnfdDefault","mnfd","mxfdDefault","mxfd","mnsd","minimumSignificantDigits","mxsd","maximumSignificantDigits","g","dataLocaleData","patterns","stylePatterns","positivePattern","negativePattern","es3","format","GetFormatNumber","currencyMinorUnits","babelHelpers","F","FormatNumber","bf","fnBind","FormatNumberToParts","PartitionNumberPattern","idx","part","nums","data","ild","symbols","latn","pattern","beginIndex","endIndex","nextIndex","Error","literal","[[type]]","[[value]]","p","nan","isFinite","_n2","ToRawPrecision","ToRawFixed","numSys","digits","digit","integer","fraction","decimalSepIndex","groupSepSymbol","group","groups","pgSize","primaryGroupSize","sgSize","secondaryGroupSize","end","start","integerGroup","arrShift","decimalSepSymbol","decimal","_n","infinity","plusSignSymbol","plusSign","minusSignSymbol","minusSign","percentSignSymbol","percentSign","currencies","_literal","_literal2","minPrecision","maxPrecision","e","Array","abs","f","LN10","cut","minInteger","minFraction","maxFraction","pow","toFixed","int","z","a","b","_z","isDateFormatOnly","tmKeys","hasOwnProperty","isTimeFormatOnly","dtKeys","joinDateAndTimeFormats","dateFormatObj","timeFormatObj","o","_","j","computeFinalPatterns","formatObj","pattern12","extendedPattern","$0","expPatternTrimmer","expDTComponentsMeta","era","year","quarter","month","week","day","weekday","hour12","hour","minute","second","timeZoneName","createDateTimeFormat","skeleton","unwantedDTCs","expDTComponents","createDateTimeFormats","formats","availableFormats","timeFormats","dateFormats","computed","timeRelatedFormats","dateRelatedFormats","push","full","medium","originalPattern","resolveDateString","ca","component","width","gregory","alts","resolved","DateTimeFormatConstructor","InitializeDateTimeFormat","DateTimeFormat","dateTimeFormat","ToDateTimeOptions","tz","timeZone","prop","dateTimeComponents","bestFormat","ToDateTimeFormats","BasicFormatMatcher","_hr","BestFitFormatMatcher","_prop","hr12","hourNo0","GetFormatDateTime","toString","required","defaults","opt2","create","needDefaults","removalPenalty","additionPenalty","longLessPenalty","longMorePenalty","shortLessPenalty","shortMorePenalty","bestScore","Infinity","score","optionsProp","formatProp","optionsPropIndex","formatPropIndex","delta","min","hour12Penalty","Date","now","FormatDateTime","GetFormatToPartsDateTime","FormatToPartsDateTime","CreateDateTimeParts","nf","useGrouping","nf2","minimumIntegerDigits","tm","ToLocalTime","index","calendars","fv","v","dateWidths","_v","substr","date","calendar","d","addLocaleData","number","nu","realDefineProp","sentinel","__defineGetter__","name","desc","get","search","t","proto","props","arrConcat","concat","join","shift","Function","bind","thisObj","fn","args","random","extlang","language","script","region","variant","singleton","privateuse","irregular","regular","grandfathered","langtag","getCanonicalLocales","ll","code","BYR","XOF","BIF","XAF","CLF","CLP","KMF","DJF","GNF","ISK","IQD","JPY","JOD","KRW","KWD","LYD","PYG","RWF","TND","UGX","UYI","VUV","VND","formatToParts","descs","narrow","short","long","ls","__localeSensitiveProtos","toLocaleString","toLocaleDateString","toLocaleTimeString","IntlPolyfill","__applyLocaleSensitivePrototypes"],"mappings":"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,SAAWvS,GAAY,SAAWyS,GAAa,KAKxD3V,GAAiBjC,OAAO,OAAOgY,GAAQ,IAAIJ,GAAW,IAAIG,GAAc,KAAM,KAG9E5V,GAAkBnC,OAAO,cAAc0X,GAAQ,+BAAgC,KAG/EtV,GAAoBpC,OAAO,cAAc2X,GAAU,2BAA4B,KAG/EhV,GAAkB3C,OAAO,IAAImF,GAAW,MCnFxC/B,UAMLN,uBAEgB,cACL,cACA,cACA,kBACI,cACJ,gBACG,aACH,cACA,cACA,cACA,eACC,cACA,iBACG,kBACA,kBACA,iBACD,iBACA,mBACE,iBACF,eACF,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,oBACK,yBACA,oBACL,eACA,eACA,mBAGN,QACA,QACA,QACA,QACA,QACA,YACI,eACF,QACF,QACA,QACA,QACA,SACC,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,qBAGC,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,M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"} \ No newline at end of file +{"version":3,"file":"Intl.min.js","sources":["../src/util.js","../src/exp.js","../src/6.locales-currencies-tz.js","../src/9.negotiation.js","../src/8.intl.js","../src/11.numberformat.js","../src/cldr.js","../src/12.datetimeformat.js","../src/13.locale-sensitive-functions.js","../src/core.js","../src/main.js"],"sourcesContent":["const realDefineProp = (function () {\n let sentinel = {};\n try {\n Object.defineProperty(sentinel, 'a', {});\n return 'a' in sentinel;\n } catch (e) {\n return false;\n }\n })();\n\n// Need a workaround for getters in ES3\nexport const es3 = !realDefineProp && !Object.prototype.__defineGetter__;\n\n// We use this a lot (and need it for proto-less objects)\nexport const hop = Object.prototype.hasOwnProperty;\n\n// Naive defineProperty for compatibility\nexport const defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {\n if ('get' in desc && obj.__defineGetter__)\n obj.__defineGetter__(name, desc.get);\n\n else if (!hop.call(obj, name) || 'value' in desc)\n obj[name] = desc.value;\n};\n\n// Array.prototype.indexOf, as good as we need it to be\nexport const arrIndexOf = Array.prototype.indexOf || function (search) {\n /*jshint validthis:true */\n let t = this;\n if (!t.length)\n return -1;\n\n for (let i = arguments[1] || 0, max = t.length; i < max; i++) {\n if (t[i] === search)\n return i;\n }\n\n return -1;\n};\n\n// Create an object with the specified prototype (2nd arg required for Record)\nexport const objCreate = Object.create || function (proto, props) {\n let obj;\n\n function F() {}\n F.prototype = proto;\n obj = new F();\n\n for (let k in props) {\n if (hop.call(props, k))\n defineProperty(obj, k, props[k]);\n }\n\n return obj;\n};\n\n// Snapshot some (hopefully still) native built-ins\nexport const arrSlice = Array.prototype.slice;\nexport const arrConcat = Array.prototype.concat;\nexport const arrPush = Array.prototype.push;\nexport const arrJoin = Array.prototype.join;\nexport const arrShift = Array.prototype.shift;\n\n// Naive Function.prototype.bind for compatibility\nexport const fnBind = Function.prototype.bind || function (thisObj) {\n let fn = this,\n args = arrSlice.call(arguments, 1);\n\n // All our (presently) bound functions have either 1 or 0 arguments. By returning\n // different function signatures, we can pass some tests in ES3 environments\n if (fn.length === 1) {\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n }\n return function () {\n return fn.apply(thisObj, arrConcat.call(args, arrSlice.call(arguments)));\n };\n};\n\n// Object housing internal properties for constructors\nexport const internals = objCreate(null);\n\n// Keep internal properties internal\nexport const secret = Math.random();\n\n// Helper functions\n// ================\n\n/**\n * A function to deal with the inaccuracy of calculating log10 in pre-ES6\n * JavaScript environments. Math.log(num) / Math.LN10 was responsible for\n * causing issue #62.\n */\nexport function log10Floor (n) {\n // ES6 provides the more accurate Math.log10\n if (typeof Math.log10 === 'function')\n return Math.floor(Math.log10(n));\n\n let x = Math.round(Math.log(n) * Math.LOG10E);\n return x - (Number('1e' + x) > n);\n}\n\n/**\n * A map that doesn't contain Object in its prototype chain\n */\nexport function Record (obj) {\n // Copy only own properties over unless this object is already a Record instance\n for (let k in obj) {\n if (obj instanceof Record || hop.call(obj, k))\n defineProperty(this, k, { value: obj[k], enumerable: true, writable: true, configurable: true });\n }\n}\nRecord.prototype = objCreate(null);\n\n/**\n * An ordered list\n */\nexport function List() {\n defineProperty(this, 'length', { writable:true, value: 0 });\n\n if (arguments.length)\n arrPush.apply(this, arrSlice.call(arguments));\n}\nList.prototype = objCreate(null);\n\n/**\n * Constructs a regular expression to restore tainted RegExp properties\n */\nexport function createRegExpRestore () {\n let esc = /[.?*+^$[\\]\\\\(){}|-]/g,\n lm = RegExp.lastMatch || '',\n ml = RegExp.multiline ? 'm' : '',\n ret = { input: RegExp.input },\n reg = new List(),\n has = false,\n cap = {};\n\n // Create a snapshot of all the 'captured' properties\n for (let i = 1; i <= 9; i++)\n has = (cap['$'+i] = RegExp['$'+i]) || has;\n\n // Now we've snapshotted some properties, escape the lastMatch string\n lm = lm.replace(esc, '\\\\$&');\n\n // If any of the captured strings were non-empty, iterate over them all\n if (has) {\n for (let i = 1; i <= 9; i++) {\n let m = cap['$'+i];\n\n // If it's empty, add an empty capturing group\n if (!m)\n lm = '()' + lm;\n\n // Else find the string in lm and escape & wrap it to capture it\n else {\n m = m.replace(esc, '\\\\$&');\n lm = lm.replace(m, '(' + m + ')');\n }\n\n // Push it to the reg and chop lm to make sure further groups come after\n arrPush.call(reg, lm.slice(0, lm.indexOf('(') + 1));\n lm = lm.slice(lm.indexOf('(') + 1);\n }\n }\n\n // Create the regular expression that will reconstruct the RegExp properties\n ret.exp = new RegExp(arrJoin.call(reg, '') + lm, ml);\n\n return ret;\n}\n\n/**\n * Mimics ES5's abstract ToObject() function\n */\nexport function toObject (arg) {\n if (arg === null)\n throw new TypeError('Cannot convert null or undefined to object');\n\n return Object(arg);\n}\n\n/**\n * Returns \"internal\" properties for an object\n */\nexport function getInternalProperties (obj) {\n if (hop.call(obj, '__getInternalProperties'))\n return obj.__getInternalProperties(secret);\n\n return objCreate(null);\n}\n","/**\n* Defines regular expressions for various operations related to the BCP 47 syntax,\n* as defined at http://tools.ietf.org/html/bcp47#section-2.1\n*/\n\n// extlang = 3ALPHA ; selected ISO 639 codes\n// *2(\"-\" 3ALPHA) ; permanently reserved\nconst extlang = '[a-z]{3}(?:-[a-z]{3}){0,2}';\n\n// language = 2*3ALPHA ; shortest ISO 639 code\n// [\"-\" extlang] ; sometimes followed by\n// ; extended language subtags\n// / 4ALPHA ; or reserved for future use\n// / 5*8ALPHA ; or registered language subtag\nconst language = '(?:[a-z]{2,3}(?:-' + extlang + ')?|[a-z]{4}|[a-z]{5,8})';\n\n// script = 4ALPHA ; ISO 15924 code\nconst script = '[a-z]{4}';\n\n// region = 2ALPHA ; ISO 3166-1 code\n// / 3DIGIT ; UN M.49 code\nconst region = '(?:[a-z]{2}|\\\\d{3})';\n\n// variant = 5*8alphanum ; registered variants\n// / (DIGIT 3alphanum)\nconst variant = '(?:[a-z0-9]{5,8}|\\\\d[a-z0-9]{3})';\n\n// ; Single alphanumerics\n// ; \"x\" reserved for private use\n// singleton = DIGIT ; 0 - 9\n// / %x41-57 ; A - W\n// / %x59-5A ; Y - Z\n// / %x61-77 ; a - w\n// / %x79-7A ; y - z\nconst singleton = '[0-9a-wy-z]';\n\n// extension = singleton 1*(\"-\" (2*8alphanum))\nconst extension = singleton + '(?:-[a-z0-9]{2,8})+';\n\n// privateuse = \"x\" 1*(\"-\" (1*8alphanum))\nconst privateuse = 'x(?:-[a-z0-9]{1,8})+';\n\n// irregular = \"en-GB-oed\" ; irregular tags do not match\n// / \"i-ami\" ; the 'langtag' production and\n// / \"i-bnn\" ; would not otherwise be\n// / \"i-default\" ; considered 'well-formed'\n// / \"i-enochian\" ; These tags are all valid,\n// / \"i-hak\" ; but most are deprecated\n// / \"i-klingon\" ; in favor of more modern\n// / \"i-lux\" ; subtags or subtag\n// / \"i-mingo\" ; combination\n// / \"i-navajo\"\n// / \"i-pwn\"\n// / \"i-tao\"\n// / \"i-tay\"\n// / \"i-tsu\"\n// / \"sgn-BE-FR\"\n// / \"sgn-BE-NL\"\n// / \"sgn-CH-DE\"\nconst irregular = '(?:en-GB-oed'\n + '|i-(?:ami|bnn|default|enochian|hak|klingon|lux|mingo|navajo|pwn|tao|tay|tsu)'\n + '|sgn-(?:BE-FR|BE-NL|CH-DE))';\n\n// regular = \"art-lojban\" ; these tags match the 'langtag'\n// / \"cel-gaulish\" ; production, but their subtags\n// / \"no-bok\" ; are not extended language\n// / \"no-nyn\" ; or variant subtags: their meaning\n// / \"zh-guoyu\" ; is defined by their registration\n// / \"zh-hakka\" ; and all of these are deprecated\n// / \"zh-min\" ; in favor of a more modern\n// / \"zh-min-nan\" ; subtag or sequence of subtags\n// / \"zh-xiang\"\nconst regular = '(?:art-lojban|cel-gaulish|no-bok|no-nyn'\n + '|zh-(?:guoyu|hakka|min|min-nan|xiang))';\n\n// grandfathered = irregular ; non-redundant tags registered\n// / regular ; during the RFC 3066 era\nconst grandfathered = '(?:' + irregular + '|' + regular + ')';\n\n// langtag = language\n// [\"-\" script]\n// [\"-\" region]\n// *(\"-\" variant)\n// *(\"-\" extension)\n// [\"-\" privateuse]\nconst langtag = language + '(?:-' + script + ')?(?:-' + region + ')?(?:-'\n + variant + ')*(?:-' + extension + ')*(?:-' + privateuse + ')?';\n\n// Language-Tag = langtag ; normal language tags\n// / privateuse ; private use tag\n// / grandfathered ; grandfathered tags\nexport let expBCP47Syntax = RegExp('^(?:'+langtag+'|'+privateuse+'|'+grandfathered+')$', 'i');\n\n// Match duplicate variants in a language tag\nexport let expVariantDupes = RegExp('^(?!x).*?-('+variant+')-(?:\\\\w{4,8}-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match duplicate singletons in a language tag (except in private use)\nexport let expSingletonDupes = RegExp('^(?!x).*?-('+singleton+')-(?:\\\\w+-(?!x-))*\\\\1\\\\b', 'i');\n\n// Match all extension sequences\nexport let expExtSequences = RegExp('-'+extension, 'ig');\n","// Sect 6.2 Language Tags\n// ======================\n\nimport {\n expBCP47Syntax,\n expExtSequences,\n expVariantDupes,\n expSingletonDupes,\n} from './exp';\n\nimport {\n hop,\n arrJoin,\n arrSlice,\n} from \"./util.js\";\n\n// Default locale is the first-added locale data for us\nexport let defaultLocale;\nexport function setDefaultLocale(locale) {\n defaultLocale = locale;\n}\n\n// IANA Subtag Registry redundant tag and subtag maps\nconst redundantTags = {\n tags: {\n \"art-lojban\": \"jbo\",\n \"i-ami\": \"ami\",\n \"i-bnn\": \"bnn\",\n \"i-hak\": \"hak\",\n \"i-klingon\": \"tlh\",\n \"i-lux\": \"lb\",\n \"i-navajo\": \"nv\",\n \"i-pwn\": \"pwn\",\n \"i-tao\": \"tao\",\n \"i-tay\": \"tay\",\n \"i-tsu\": \"tsu\",\n \"no-bok\": \"nb\",\n \"no-nyn\": \"nn\",\n \"sgn-BE-FR\": \"sfb\",\n \"sgn-BE-NL\": \"vgt\",\n \"sgn-CH-DE\": \"sgg\",\n \"zh-guoyu\": \"cmn\",\n \"zh-hakka\": \"hak\",\n \"zh-min-nan\": \"nan\",\n \"zh-xiang\": \"hsn\",\n \"sgn-BR\": \"bzs\",\n \"sgn-CO\": \"csn\",\n \"sgn-DE\": \"gsg\",\n \"sgn-DK\": \"dsl\",\n \"sgn-ES\": \"ssp\",\n \"sgn-FR\": \"fsl\",\n \"sgn-GB\": \"bfi\",\n \"sgn-GR\": \"gss\",\n \"sgn-IE\": \"isg\",\n \"sgn-IT\": \"ise\",\n \"sgn-JP\": \"jsl\",\n \"sgn-MX\": \"mfs\",\n \"sgn-NI\": \"ncs\",\n \"sgn-NL\": \"dse\",\n \"sgn-NO\": \"nsl\",\n \"sgn-PT\": \"psr\",\n \"sgn-SE\": \"swl\",\n \"sgn-US\": \"ase\",\n \"sgn-ZA\": \"sfs\",\n \"zh-cmn\": \"cmn\",\n \"zh-cmn-Hans\": \"cmn-Hans\",\n \"zh-cmn-Hant\": \"cmn-Hant\",\n \"zh-gan\": \"gan\",\n \"zh-wuu\": \"wuu\",\n \"zh-yue\": \"yue\",\n },\n subtags: {\n BU: \"MM\",\n DD: \"DE\",\n FX: \"FR\",\n TP: \"TL\",\n YD: \"YE\",\n ZR: \"CD\",\n heploc: \"alalc97\",\n 'in': \"id\",\n iw: \"he\",\n ji: \"yi\",\n jw: \"jv\",\n mo: \"ro\",\n ayx: \"nun\",\n bjd: \"drl\",\n ccq: \"rki\",\n cjr: \"mom\",\n cka: \"cmr\",\n cmk: \"xch\",\n drh: \"khk\",\n drw: \"prs\",\n gav: \"dev\",\n hrr: \"jal\",\n ibi: \"opa\",\n kgh: \"kml\",\n lcq: \"ppr\",\n mst: \"mry\",\n myt: \"mry\",\n sca: \"hle\",\n tie: \"ras\",\n tkk: \"twm\",\n tlw: \"weo\",\n tnf: \"prs\",\n ybd: \"rki\",\n yma: \"lrr\",\n },\n extLang: {\n aao: [\"aao\", \"ar\"],\n abh: [\"abh\", \"ar\"],\n abv: [\"abv\", \"ar\"],\n acm: [\"acm\", \"ar\"],\n acq: [\"acq\", \"ar\"],\n acw: [\"acw\", \"ar\"],\n acx: [\"acx\", \"ar\"],\n acy: [\"acy\", \"ar\"],\n adf: [\"adf\", \"ar\"],\n ads: [\"ads\", \"sgn\"],\n aeb: [\"aeb\", \"ar\"],\n aec: [\"aec\", \"ar\"],\n aed: [\"aed\", \"sgn\"],\n aen: [\"aen\", \"sgn\"],\n afb: [\"afb\", \"ar\"],\n afg: [\"afg\", \"sgn\"],\n ajp: [\"ajp\", \"ar\"],\n apc: [\"apc\", \"ar\"],\n apd: [\"apd\", \"ar\"],\n arb: [\"arb\", \"ar\"],\n arq: [\"arq\", \"ar\"],\n ars: [\"ars\", \"ar\"],\n ary: [\"ary\", \"ar\"],\n arz: [\"arz\", \"ar\"],\n ase: [\"ase\", \"sgn\"],\n asf: [\"asf\", \"sgn\"],\n asp: [\"asp\", \"sgn\"],\n asq: [\"asq\", \"sgn\"],\n asw: [\"asw\", \"sgn\"],\n auz: [\"auz\", \"ar\"],\n avl: [\"avl\", \"ar\"],\n ayh: [\"ayh\", \"ar\"],\n ayl: [\"ayl\", \"ar\"],\n ayn: [\"ayn\", \"ar\"],\n ayp: [\"ayp\", \"ar\"],\n bbz: [\"bbz\", \"ar\"],\n bfi: [\"bfi\", \"sgn\"],\n bfk: [\"bfk\", \"sgn\"],\n bjn: [\"bjn\", \"ms\"],\n bog: [\"bog\", \"sgn\"],\n bqn: [\"bqn\", \"sgn\"],\n bqy: [\"bqy\", \"sgn\"],\n btj: [\"btj\", \"ms\"],\n bve: [\"bve\", \"ms\"],\n bvl: [\"bvl\", \"sgn\"],\n bvu: [\"bvu\", \"ms\"],\n bzs: [\"bzs\", \"sgn\"],\n cdo: [\"cdo\", \"zh\"],\n cds: [\"cds\", \"sgn\"],\n cjy: [\"cjy\", \"zh\"],\n cmn: [\"cmn\", \"zh\"],\n coa: [\"coa\", \"ms\"],\n cpx: [\"cpx\", \"zh\"],\n csc: [\"csc\", \"sgn\"],\n csd: [\"csd\", \"sgn\"],\n cse: [\"cse\", \"sgn\"],\n csf: [\"csf\", \"sgn\"],\n csg: [\"csg\", \"sgn\"],\n csl: [\"csl\", \"sgn\"],\n csn: [\"csn\", \"sgn\"],\n csq: [\"csq\", \"sgn\"],\n csr: [\"csr\", \"sgn\"],\n czh: [\"czh\", \"zh\"],\n czo: [\"czo\", \"zh\"],\n doq: [\"doq\", \"sgn\"],\n dse: [\"dse\", \"sgn\"],\n dsl: [\"dsl\", \"sgn\"],\n dup: [\"dup\", \"ms\"],\n ecs: [\"ecs\", \"sgn\"],\n esl: [\"esl\", \"sgn\"],\n esn: [\"esn\", \"sgn\"],\n eso: [\"eso\", \"sgn\"],\n eth: [\"eth\", \"sgn\"],\n fcs: [\"fcs\", \"sgn\"],\n fse: [\"fse\", \"sgn\"],\n fsl: [\"fsl\", \"sgn\"],\n fss: [\"fss\", \"sgn\"],\n gan: [\"gan\", \"zh\"],\n gds: [\"gds\", \"sgn\"],\n gom: [\"gom\", \"kok\"],\n gse: [\"gse\", \"sgn\"],\n gsg: [\"gsg\", \"sgn\"],\n gsm: [\"gsm\", \"sgn\"],\n gss: [\"gss\", \"sgn\"],\n gus: [\"gus\", \"sgn\"],\n hab: [\"hab\", \"sgn\"],\n haf: [\"haf\", \"sgn\"],\n hak: [\"hak\", \"zh\"],\n hds: [\"hds\", \"sgn\"],\n hji: [\"hji\", \"ms\"],\n hks: [\"hks\", \"sgn\"],\n hos: [\"hos\", \"sgn\"],\n hps: [\"hps\", \"sgn\"],\n hsh: [\"hsh\", \"sgn\"],\n hsl: [\"hsl\", \"sgn\"],\n hsn: [\"hsn\", \"zh\"],\n icl: [\"icl\", \"sgn\"],\n ils: [\"ils\", \"sgn\"],\n inl: [\"inl\", \"sgn\"],\n ins: [\"ins\", \"sgn\"],\n ise: [\"ise\", \"sgn\"],\n isg: [\"isg\", \"sgn\"],\n isr: [\"isr\", \"sgn\"],\n jak: [\"jak\", \"ms\"],\n jax: [\"jax\", \"ms\"],\n jcs: [\"jcs\", \"sgn\"],\n jhs: [\"jhs\", \"sgn\"],\n jls: [\"jls\", \"sgn\"],\n jos: [\"jos\", \"sgn\"],\n jsl: [\"jsl\", \"sgn\"],\n jus: [\"jus\", \"sgn\"],\n kgi: [\"kgi\", \"sgn\"],\n knn: [\"knn\", \"kok\"],\n kvb: [\"kvb\", \"ms\"],\n kvk: [\"kvk\", \"sgn\"],\n kvr: [\"kvr\", \"ms\"],\n kxd: [\"kxd\", \"ms\"],\n lbs: [\"lbs\", \"sgn\"],\n lce: [\"lce\", \"ms\"],\n lcf: [\"lcf\", \"ms\"],\n liw: [\"liw\", \"ms\"],\n lls: [\"lls\", \"sgn\"],\n lsg: [\"lsg\", \"sgn\"],\n lsl: [\"lsl\", \"sgn\"],\n lso: [\"lso\", \"sgn\"],\n lsp: [\"lsp\", \"sgn\"],\n lst: [\"lst\", \"sgn\"],\n lsy: [\"lsy\", \"sgn\"],\n ltg: [\"ltg\", \"lv\"],\n lvs: [\"lvs\", \"lv\"],\n lzh: [\"lzh\", \"zh\"],\n max: [\"max\", \"ms\"],\n mdl: [\"mdl\", \"sgn\"],\n meo: [\"meo\", \"ms\"],\n mfa: [\"mfa\", \"ms\"],\n mfb: [\"mfb\", \"ms\"],\n mfs: [\"mfs\", \"sgn\"],\n min: [\"min\", \"ms\"],\n mnp: [\"mnp\", \"zh\"],\n mqg: [\"mqg\", \"ms\"],\n mre: [\"mre\", \"sgn\"],\n msd: [\"msd\", \"sgn\"],\n msi: [\"msi\", \"ms\"],\n msr: [\"msr\", \"sgn\"],\n mui: [\"mui\", \"ms\"],\n mzc: [\"mzc\", \"sgn\"],\n mzg: [\"mzg\", \"sgn\"],\n mzy: [\"mzy\", \"sgn\"],\n nan: [\"nan\", \"zh\"],\n nbs: [\"nbs\", \"sgn\"],\n ncs: [\"ncs\", \"sgn\"],\n nsi: [\"nsi\", \"sgn\"],\n nsl: [\"nsl\", \"sgn\"],\n nsp: [\"nsp\", \"sgn\"],\n nsr: [\"nsr\", \"sgn\"],\n nzs: [\"nzs\", \"sgn\"],\n okl: [\"okl\", \"sgn\"],\n orn: [\"orn\", \"ms\"],\n ors: [\"ors\", \"ms\"],\n pel: [\"pel\", \"ms\"],\n pga: [\"pga\", \"ar\"],\n pks: [\"pks\", \"sgn\"],\n prl: [\"prl\", \"sgn\"],\n prz: [\"prz\", \"sgn\"],\n psc: [\"psc\", \"sgn\"],\n psd: [\"psd\", \"sgn\"],\n pse: [\"pse\", \"ms\"],\n psg: [\"psg\", \"sgn\"],\n psl: [\"psl\", \"sgn\"],\n pso: [\"pso\", \"sgn\"],\n psp: [\"psp\", \"sgn\"],\n psr: [\"psr\", \"sgn\"],\n pys: [\"pys\", \"sgn\"],\n rms: [\"rms\", \"sgn\"],\n rsi: [\"rsi\", \"sgn\"],\n rsl: [\"rsl\", \"sgn\"],\n sdl: [\"sdl\", \"sgn\"],\n sfb: [\"sfb\", \"sgn\"],\n sfs: [\"sfs\", \"sgn\"],\n sgg: [\"sgg\", \"sgn\"],\n sgx: [\"sgx\", \"sgn\"],\n shu: [\"shu\", \"ar\"],\n slf: [\"slf\", \"sgn\"],\n sls: [\"sls\", \"sgn\"],\n sqk: [\"sqk\", \"sgn\"],\n sqs: [\"sqs\", \"sgn\"],\n ssh: [\"ssh\", \"ar\"],\n ssp: [\"ssp\", \"sgn\"],\n ssr: [\"ssr\", \"sgn\"],\n svk: [\"svk\", \"sgn\"],\n swc: [\"swc\", \"sw\"],\n swh: [\"swh\", \"sw\"],\n swl: [\"swl\", \"sgn\"],\n syy: [\"syy\", \"sgn\"],\n tmw: [\"tmw\", \"ms\"],\n tse: [\"tse\", \"sgn\"],\n tsm: [\"tsm\", \"sgn\"],\n tsq: [\"tsq\", \"sgn\"],\n tss: [\"tss\", \"sgn\"],\n tsy: [\"tsy\", \"sgn\"],\n tza: [\"tza\", \"sgn\"],\n ugn: [\"ugn\", \"sgn\"],\n ugy: [\"ugy\", \"sgn\"],\n ukl: [\"ukl\", \"sgn\"],\n uks: [\"uks\", \"sgn\"],\n urk: [\"urk\", \"ms\"],\n uzn: [\"uzn\", \"uz\"],\n uzs: [\"uzs\", \"uz\"],\n vgt: [\"vgt\", \"sgn\"],\n vkk: [\"vkk\", \"ms\"],\n vkt: [\"vkt\", \"ms\"],\n vsi: [\"vsi\", \"sgn\"],\n vsl: [\"vsl\", \"sgn\"],\n vsv: [\"vsv\", \"sgn\"],\n wuu: [\"wuu\", \"zh\"],\n xki: [\"xki\", \"sgn\"],\n xml: [\"xml\", \"sgn\"],\n xmm: [\"xmm\", \"ms\"],\n xms: [\"xms\", \"sgn\"],\n yds: [\"yds\", \"sgn\"],\n ysl: [\"ysl\", \"sgn\"],\n yue: [\"yue\", \"zh\"],\n zib: [\"zib\", \"sgn\"],\n zlm: [\"zlm\", \"ms\"],\n zmi: [\"zmi\", \"ms\"],\n zsl: [\"zsl\", \"sgn\"],\n zsm: [\"zsm\", \"ms\"],\n },\n};\n\n/**\n * Convert only a-z to uppercase as per section 6.1 of the spec\n */\nexport function toLatinUpperCase (str) {\n let i = str.length;\n\n while (i--) {\n let ch = str.charAt(i);\n\n if (ch >= \"a\" && ch <= \"z\")\n str = str.slice(0, i) + ch.toUpperCase() + str.slice(i+1);\n }\n\n return str;\n}\n\n/**\n * The IsStructurallyValidLanguageTag abstract operation verifies that the locale\n * argument (which must be a String value)\n *\n * - represents a well-formed BCP 47 language tag as specified in RFC 5646 section\n * 2.1, or successor,\n * - does not include duplicate variant subtags, and\n * - does not include duplicate singleton subtags.\n *\n * The abstract operation returns true if locale can be generated from the ABNF\n * grammar in section 2.1 of the RFC, starting with Language-Tag, and does not\n * contain duplicate variant or singleton subtags (other than as a private use\n * subtag). It returns false otherwise. Terminal value characters in the grammar are\n * interpreted as the Unicode equivalents of the ASCII octet values given.\n */\nexport function /* 6.2.2 */IsStructurallyValidLanguageTag(locale) {\n // represents a well-formed BCP 47 language tag as specified in RFC 5646\n if (!expBCP47Syntax.test(locale))\n return false;\n\n // does not include duplicate variant subtags, and\n if (expVariantDupes.test(locale))\n return false;\n\n // does not include duplicate singleton subtags.\n if (expSingletonDupes.test(locale))\n return false;\n\n return true;\n}\n\n/**\n * The CanonicalizeLanguageTag abstract operation returns the canonical and case-\n * regularized form of the locale argument (which must be a String value that is\n * a structurally valid BCP 47 language tag as verified by the\n * IsStructurallyValidLanguageTag abstract operation). It takes the steps\n * specified in RFC 5646 section 4.5, or successor, to bring the language tag\n * into canonical form, and to regularize the case of the subtags, but does not\n * take the steps to bring a language tag into “extlang form” and to reorder\n * variant subtags.\n\n * The specifications for extensions to BCP 47 language tags, such as RFC 6067,\n * may include canonicalization rules for the extension subtag sequences they\n * define that go beyond the canonicalization rules of RFC 5646 section 4.5.\n * Implementations are allowed, but not required, to apply these additional rules.\n */\nexport function /* 6.2.3 */CanonicalizeLanguageTag (locale) {\n let match, parts;\n\n // A language tag is in 'canonical form' when the tag is well-formed\n // according to the rules in Sections 2.1 and 2.2\n\n // Section 2.1 says all subtags use lowercase...\n locale = locale.toLowerCase();\n\n // ...with 2 exceptions: 'two-letter and four-letter subtags that neither\n // appear at the start of the tag nor occur after singletons. Such two-letter\n // subtags are all uppercase (as in the tags \"en-CA-x-ca\" or \"sgn-BE-FR\") and\n // four-letter subtags are titlecase (as in the tag \"az-Latn-x-latn\").\n parts = locale.split('-');\n for (let i = 1, max = parts.length; i < max; i++) {\n // Two-letter subtags are all uppercase\n if (parts[i].length === 2)\n parts[i] = parts[i].toUpperCase();\n\n // Four-letter subtags are titlecase\n else if (parts[i].length === 4)\n parts[i] = parts[i].charAt(0).toUpperCase() + parts[i].slice(1);\n\n // Is it a singleton?\n else if (parts[i].length === 1 && parts[i] !== 'x')\n break;\n }\n locale = arrJoin.call(parts, '-');\n\n // The steps laid out in RFC 5646 section 4.5 are as follows:\n\n // 1. Extension sequences are ordered into case-insensitive ASCII order\n // by singleton subtag.\n if ((match = locale.match(expExtSequences)) && match.length > 1) {\n // The built-in sort() sorts by ASCII order, so use that\n match.sort();\n\n // Replace all extensions with the joined, sorted array\n locale = locale.replace(\n RegExp('(?:' + expExtSequences.source + ')+', 'i'),\n arrJoin.call(match, '')\n );\n }\n\n // 2. Redundant or grandfathered tags are replaced by their 'Preferred-\n // Value', if there is one.\n if (hop.call(redundantTags.tags, locale))\n locale = redundantTags.tags[locale];\n\n // 3. Subtags are replaced by their 'Preferred-Value', if there is one.\n // For extlangs, the original primary language subtag is also\n // replaced if there is a primary language subtag in the 'Preferred-\n // Value'.\n parts = locale.split('-');\n\n for (let i = 1, max = parts.length; i < max; i++) {\n if (hop.call(redundantTags.subtags, parts[i]))\n parts[i] = redundantTags.subtags[parts[i]];\n\n else if (hop.call(redundantTags.extLang, parts[i])) {\n parts[i] = redundantTags.extLang[parts[i]][0];\n\n // For extlang tags, the prefix needs to be removed if it is redundant\n if (i === 1 && redundantTags.extLang[parts[1]][1] === parts[0]) {\n parts = arrSlice.call(parts, i++);\n max -= 1;\n }\n }\n }\n\n return arrJoin.call(parts, '-');\n}\n\n/**\n * The DefaultLocale abstract operation returns a String value representing the\n * structurally valid (6.2.2) and canonicalized (6.2.3) BCP 47 language tag for the\n * host environment’s current locale.\n */\nexport function /* 6.2.4 */DefaultLocale () {\n return defaultLocale;\n}\n\n// Sect 6.3 Currency Codes\n// =======================\n\nconst expCurrencyCode = /^[A-Z]{3}$/;\n\n/**\n * The IsWellFormedCurrencyCode abstract operation verifies that the currency argument\n * (after conversion to a String value) represents a well-formed 3-letter ISO currency\n * code. The following steps are taken:\n */\nexport function /* 6.3.1 */IsWellFormedCurrencyCode(currency) {\n // 1. Let `c` be ToString(currency)\n let c = String(currency);\n\n // 2. Let `normalized` be the result of mapping c to upper case as described\n // in 6.1.\n let normalized = toLatinUpperCase(c);\n\n // 3. If the string length of normalized is not 3, return false.\n // 4. If normalized contains any character that is not in the range \"A\" to \"Z\"\n // (U+0041 to U+005A), return false.\n if (expCurrencyCode.test(normalized) === false)\n return false;\n\n // 5. Return true\n return true;\n}\n","// Sect 9.2 Abstract Operations\n// ============================\n\nimport {\n List,\n toObject,\n arrIndexOf,\n arrPush,\n arrSlice,\n Record,\n hop,\n defineProperty,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n CanonicalizeLanguageTag,\n DefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nconst expUnicodeExSeq = /-u(?:-[0-9a-z]{2,8})+/gi; // See `extension` below\n\nexport function /* 9.2.1 */CanonicalizeLocaleList (locales) {\n// The abstract operation CanonicalizeLocaleList takes the following steps:\n\n // 1. If locales is undefined, then a. Return a new empty List\n if (locales === undefined)\n return new List();\n\n // 2. Let seen be a new empty List.\n let seen = new List();\n\n // 3. If locales is a String value, then\n // a. Let locales be a new array created as if by the expression new\n // Array(locales) where Array is the standard built-in constructor with\n // that name and locales is the value of locales.\n locales = typeof locales === 'string' ? [ locales ] : locales;\n\n // 4. Let O be ToObject(locales).\n let O = toObject(locales);\n\n // 5. Let lenValue be the result of calling the [[Get]] internal method of\n // O with the argument \"length\".\n // 6. Let len be ToUint32(lenValue).\n let len = O.length;\n\n // 7. Let k be 0.\n let k = 0;\n\n // 8. Repeat, while k < len\n while (k < len) {\n // a. Let Pk be ToString(k).\n let Pk = String(k);\n\n // b. Let kPresent be the result of calling the [[HasProperty]] internal\n // method of O with argument Pk.\n let kPresent = Pk in O;\n\n // c. If kPresent is true, then\n if (kPresent) {\n // i. Let kValue be the result of calling the [[Get]] internal\n // method of O with argument Pk.\n let kValue = O[Pk];\n\n // ii. If the type of kValue is not String or Object, then throw a\n // TypeError exception.\n if (kValue === null || (typeof kValue !== 'string' && typeof kValue !== 'object'))\n throw new TypeError('String or Object type expected');\n\n // iii. Let tag be ToString(kValue).\n let tag = String(kValue);\n\n // iv. If the result of calling the abstract operation\n // IsStructurallyValidLanguageTag (defined in 6.2.2), passing tag as\n // the argument, is false, then throw a RangeError exception.\n if (!IsStructurallyValidLanguageTag(tag))\n throw new RangeError(\"'\" + tag + \"' is not a structurally valid language tag\");\n\n // v. Let tag be the result of calling the abstract operation\n // CanonicalizeLanguageTag (defined in 6.2.3), passing tag as the\n // argument.\n tag = CanonicalizeLanguageTag(tag);\n\n // vi. If tag is not an element of seen, then append tag as the last\n // element of seen.\n if (arrIndexOf.call(seen, tag) === -1)\n arrPush.call(seen, tag);\n }\n\n // d. Increase k by 1.\n k++;\n }\n\n // 9. Return seen.\n return seen;\n}\n\n/**\n * The BestAvailableLocale abstract operation compares the provided argument\n * locale, which must be a String value with a structurally valid and\n * canonicalized BCP 47 language tag, against the locales in availableLocales and\n * returns either the longest non-empty prefix of locale that is an element of\n * availableLocales, or undefined if there is no such element. It uses the\n * fallback mechanism of RFC 4647, section 3.4. The following steps are taken:\n */\nexport function /* 9.2.2 */BestAvailableLocale (availableLocales, locale) {\n // 1. Let candidate be locale\n let candidate = locale;\n\n // 2. Repeat\n while (candidate) {\n // a. If availableLocales contains an element equal to candidate, then return\n // candidate.\n if (arrIndexOf.call(availableLocales, candidate) > -1)\n return candidate;\n\n // b. Let pos be the character index of the last occurrence of \"-\"\n // (U+002D) within candidate. If that character does not occur, return\n // undefined.\n let pos = candidate.lastIndexOf('-');\n\n if (pos < 0)\n return;\n\n // c. If pos ≥ 2 and the character \"-\" occurs at index pos-2 of candidate,\n // then decrease pos by 2.\n if (pos >= 2 && candidate.charAt(pos - 2) === '-')\n pos -= 2;\n\n // d. Let candidate be the substring of candidate from position 0, inclusive,\n // to position pos, exclusive.\n candidate = candidate.substring(0, pos);\n }\n}\n\n/**\n * The LookupMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The following steps are taken:\n */\nexport function /* 9.2.3 */LookupMatcher (availableLocales, requestedLocales) {\n // 1. Let i be 0.\n let i = 0;\n\n // 2. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n\n // 3. Let availableLocale be undefined.\n let availableLocale;\n\n let locale, noExtensionsLocale;\n\n // 4. Repeat while i < len and availableLocale is undefined:\n while (i < len && !availableLocale) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position i.\n locale = requestedLocales[i];\n\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. Increase i by 1.\n i++;\n }\n\n // 5. Let result be a new Record.\n let result = new Record();\n\n // 6. If availableLocale is not undefined, then\n if (availableLocale !== undefined) {\n // a. Set result.[[locale]] to availableLocale.\n result['[[locale]]'] = availableLocale;\n\n // b. If locale and noExtensionsLocale are not the same String value, then\n if (String(locale) !== String(noExtensionsLocale)) {\n // i. Let extension be the String value consisting of the first\n // substring of locale that is a Unicode locale extension sequence.\n let extension = locale.match(expUnicodeExSeq)[0];\n\n // ii. Let extensionIndex be the character position of the initial\n // \"-\" of the first Unicode locale extension sequence within locale.\n let extensionIndex = locale.indexOf('-u-');\n\n // iii. Set result.[[extension]] to extension.\n result['[[extension]]'] = extension;\n\n // iv. Set result.[[extensionIndex]] to extensionIndex.\n result['[[extensionIndex]]'] = extensionIndex;\n }\n }\n // 7. Else\n else\n // a. Set result.[[locale]] to the value returned by the DefaultLocale abstract\n // operation (defined in 6.2.4).\n result['[[locale]]'] = DefaultLocale();\n\n // 8. Return result\n return result;\n}\n\n/**\n * The BestFitMatcher abstract operation compares requestedLocales, which must be\n * a List as returned by CanonicalizeLocaleList, against the locales in\n * availableLocales and determines the best available language to meet the\n * request. The algorithm is implementation dependent, but should produce results\n * that a typical user of the requested locales would perceive as at least as\n * good as those produced by the LookupMatcher abstract operation. Options\n * specified through Unicode locale extension sequences must be ignored by the\n * algorithm. Information about such subsequences is returned separately.\n * The abstract operation returns a record with a [[locale]] field, whose value\n * is the language tag of the selected locale, which must be an element of\n * availableLocales. If the language tag of the request locale that led to the\n * selected locale contained a Unicode locale extension sequence, then the\n * returned record also contains an [[extension]] field whose value is the first\n * Unicode locale extension sequence, and an [[extensionIndex]] field whose value\n * is the index of the first Unicode locale extension sequence within the request\n * locale language tag.\n */\nexport function /* 9.2.4 */BestFitMatcher (availableLocales, requestedLocales) {\n return LookupMatcher(availableLocales, requestedLocales);\n}\n\n/**\n * The ResolveLocale abstract operation compares a BCP 47 language priority list\n * requestedLocales against the locales in availableLocales and determines the\n * best available language to meet the request. availableLocales and\n * requestedLocales must be provided as List values, options as a Record.\n */\nexport function /* 9.2.5 */ResolveLocale (availableLocales, requestedLocales, options, relevantExtensionKeys, localeData) {\n if (availableLocales.length === 0) {\n throw new ReferenceError('No locale data has been provided for this object yet.');\n }\n\n // The following steps are taken:\n // 1. Let matcher be the value of options.[[localeMatcher]].\n let matcher = options['[[localeMatcher]]'];\n\n let r;\n\n // 2. If matcher is \"lookup\", then\n if (matcher === 'lookup')\n // a. Let r be the result of calling the LookupMatcher abstract operation\n // (defined in 9.2.3) with arguments availableLocales and\n // requestedLocales.\n r = LookupMatcher(availableLocales, requestedLocales);\n\n // 3. Else\n else\n // a. Let r be the result of calling the BestFitMatcher abstract\n // operation (defined in 9.2.4) with arguments availableLocales and\n // requestedLocales.\n r = BestFitMatcher(availableLocales, requestedLocales);\n\n // 4. Let foundLocale be the value of r.[[locale]].\n let foundLocale = r['[[locale]]'];\n\n let extensionSubtags, extensionSubtagsLength;\n\n // 5. If r has an [[extension]] field, then\n if (hop.call(r, '[[extension]]')) {\n // a. Let extension be the value of r.[[extension]].\n let extension = r['[[extension]]'];\n // b. Let split be the standard built-in function object defined in ES5,\n // 15.5.4.14.\n let split = String.prototype.split;\n // c. Let extensionSubtags be the result of calling the [[Call]] internal\n // method of split with extension as the this value and an argument\n // list containing the single item \"-\".\n extensionSubtags = split.call(extension, '-');\n // d. Let extensionSubtagsLength be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument \"length\".\n extensionSubtagsLength = extensionSubtags.length;\n }\n\n // 6. Let result be a new Record.\n let result = new Record();\n\n // 7. Set result.[[dataLocale]] to foundLocale.\n result['[[dataLocale]]'] = foundLocale;\n\n // 8. Let supportedExtension be \"-u\".\n let supportedExtension = '-u';\n // 9. Let i be 0.\n let i = 0;\n // 10. Let len be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument \"length\".\n let len = relevantExtensionKeys.length;\n\n // 11 Repeat while i < len:\n while (i < len) {\n // a. Let key be the result of calling the [[Get]] internal method of\n // relevantExtensionKeys with argument ToString(i).\n let key = relevantExtensionKeys[i];\n // b. Let foundLocaleData be the result of calling the [[Get]] internal\n // method of localeData with the argument foundLocale.\n let foundLocaleData = localeData[foundLocale];\n // c. Let keyLocaleData be the result of calling the [[Get]] internal\n // method of foundLocaleData with the argument key.\n let keyLocaleData = foundLocaleData[key];\n // d. Let value be the result of calling the [[Get]] internal method of\n // keyLocaleData with argument \"0\".\n let value = keyLocaleData['0'];\n // e. Let supportedExtensionAddition be \"\".\n let supportedExtensionAddition = '';\n // f. Let indexOf be the standard built-in function object defined in\n // ES5, 15.4.4.14.\n let indexOf = arrIndexOf;\n\n // g. If extensionSubtags is not undefined, then\n if (extensionSubtags !== undefined) {\n // i. Let keyPos be the result of calling the [[Call]] internal\n // method of indexOf with extensionSubtags as the this value and\n // an argument list containing the single item key.\n let keyPos = indexOf.call(extensionSubtags, key);\n\n // ii. If keyPos ≠ -1, then\n if (keyPos !== -1) {\n // 1. If keyPos + 1 < extensionSubtagsLength and the length of the\n // result of calling the [[Get]] internal method of\n // extensionSubtags with argument ToString(keyPos +1) is greater\n // than 2, then\n if (keyPos + 1 < extensionSubtagsLength\n && extensionSubtags[keyPos + 1].length > 2) {\n // a. Let requestedValue be the result of calling the [[Get]]\n // internal method of extensionSubtags with argument\n // ToString(keyPos + 1).\n let requestedValue = extensionSubtags[keyPos + 1];\n // b. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the\n // this value and an argument list containing the single\n // item requestedValue.\n let valuePos = indexOf.call(keyLocaleData, requestedValue);\n\n // c. If valuePos ≠ -1, then\n if (valuePos !== -1) {\n // i. Let value be requestedValue.\n value = requestedValue,\n // ii. Let supportedExtensionAddition be the\n // concatenation of \"-\", key, \"-\", and value.\n supportedExtensionAddition = '-' + key + '-' + value;\n }\n }\n // 2. Else\n else {\n // a. Let valuePos be the result of calling the [[Call]]\n // internal method of indexOf with keyLocaleData as the this\n // value and an argument list containing the single item\n // \"true\".\n let valuePos = indexOf(keyLocaleData, 'true');\n\n // b. If valuePos ≠ -1, then\n if (valuePos !== -1)\n // i. Let value be \"true\".\n value = 'true';\n }\n }\n }\n // h. If options has a field [[]], then\n if (hop.call(options, '[[' + key + ']]')) {\n // i. Let optionsValue be the value of options.[[]].\n let optionsValue = options['[[' + key + ']]'];\n\n // ii. If the result of calling the [[Call]] internal method of indexOf\n // with keyLocaleData as the this value and an argument list\n // containing the single item optionsValue is not -1, then\n if (indexOf.call(keyLocaleData, optionsValue) !== -1) {\n // 1. If optionsValue is not equal to value, then\n if (optionsValue !== value) {\n // a. Let value be optionsValue.\n value = optionsValue;\n // b. Let supportedExtensionAddition be \"\".\n supportedExtensionAddition = '';\n }\n }\n }\n // i. Set result.[[]] to value.\n result['[[' + key + ']]'] = value;\n\n // j. Append supportedExtensionAddition to supportedExtension.\n supportedExtension += supportedExtensionAddition;\n\n // k. Increase i by 1.\n i++;\n }\n // 12. If the length of supportedExtension is greater than 2, then\n if (supportedExtension.length > 2) {\n // a.\n let privateIndex = foundLocale.indexOf(\"-x-\");\n // b.\n if (privateIndex === -1) {\n // i.\n foundLocale = foundLocale + supportedExtension;\n }\n // c.\n else {\n // i.\n let preExtension = foundLocale.substring(0, privateIndex);\n // ii.\n let postExtension = foundLocale.substring(privateIndex);\n // iii.\n foundLocale = preExtension + supportedExtension + postExtension;\n }\n // d. asserting - skipping\n // e.\n foundLocale = CanonicalizeLanguageTag(foundLocale);\n }\n // 13. Set result.[[locale]] to foundLocale.\n result['[[locale]]'] = foundLocale;\n\n // 14. Return result.\n return result;\n}\n\n/**\n * The LookupSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the BCP 47 Lookup algorithm.\n * Locales appear in the same order in the returned list as in requestedLocales.\n * The following steps are taken:\n */\nexport function /* 9.2.6 */LookupSupportedLocales (availableLocales, requestedLocales) {\n // 1. Let len be the number of elements in requestedLocales.\n let len = requestedLocales.length;\n // 2. Let subset be a new empty List.\n let subset = new List();\n // 3. Let k be 0.\n let k = 0;\n\n // 4. Repeat while k < len\n while (k < len) {\n // a. Let locale be the element of requestedLocales at 0-origined list\n // position k.\n let locale = requestedLocales[k];\n // b. Let noExtensionsLocale be the String value that is locale with all\n // Unicode locale extension sequences removed.\n let noExtensionsLocale = String(locale).replace(expUnicodeExSeq, '');\n // c. Let availableLocale be the result of calling the\n // BestAvailableLocale abstract operation (defined in 9.2.2) with\n // arguments availableLocales and noExtensionsLocale.\n let availableLocale = BestAvailableLocale(availableLocales, noExtensionsLocale);\n\n // d. If availableLocale is not undefined, then append locale to the end of\n // subset.\n if (availableLocale !== undefined)\n arrPush.call(subset, locale);\n\n // e. Increment k by 1.\n k++;\n }\n\n // 5. Let subsetArray be a new Array object whose elements are the same\n // values in the same order as the elements of subset.\n let subsetArray = arrSlice.call(subset);\n\n // 6. Return subsetArray.\n return subsetArray;\n}\n\n/**\n * The BestFitSupportedLocales abstract operation returns the subset of the\n * provided BCP 47 language priority list requestedLocales for which\n * availableLocales has a matching locale when using the Best Fit Matcher\n * algorithm. Locales appear in the same order in the returned list as in\n * requestedLocales. The steps taken are implementation dependent.\n */\nexport function /*9.2.7 */BestFitSupportedLocales (availableLocales, requestedLocales) {\n // ###TODO: implement this function as described by the specification###\n return LookupSupportedLocales(availableLocales, requestedLocales);\n}\n\n/**\n * The SupportedLocales abstract operation returns the subset of the provided BCP\n * 47 language priority list requestedLocales for which availableLocales has a\n * matching locale. Two algorithms are available to match the locales: the Lookup\n * algorithm described in RFC 4647 section 3.4, and an implementation dependent\n * best-fit algorithm. Locales appear in the same order in the returned list as\n * in requestedLocales. The following steps are taken:\n */\nexport function /*9.2.8 */SupportedLocales (availableLocales, requestedLocales, options) {\n let matcher, subset;\n\n // 1. If options is not undefined, then\n if (options !== undefined) {\n // a. Let options be ToObject(options).\n options = new Record(toObject(options));\n // b. Let matcher be the result of calling the [[Get]] internal method of\n // options with argument \"localeMatcher\".\n matcher = options.localeMatcher;\n\n // c. If matcher is not undefined, then\n if (matcher !== undefined) {\n // i. Let matcher be ToString(matcher).\n matcher = String(matcher);\n\n // ii. If matcher is not \"lookup\" or \"best fit\", then throw a RangeError\n // exception.\n if (matcher !== 'lookup' && matcher !== 'best fit')\n throw new RangeError('matcher should be \"lookup\" or \"best fit\"');\n }\n }\n // 2. If matcher is undefined or \"best fit\", then\n if (matcher === undefined || matcher === 'best fit')\n // a. Let subset be the result of calling the BestFitSupportedLocales\n // abstract operation (defined in 9.2.7) with arguments\n // availableLocales and requestedLocales.\n subset = BestFitSupportedLocales(availableLocales, requestedLocales);\n // 3. Else\n else\n // a. Let subset be the result of calling the LookupSupportedLocales\n // abstract operation (defined in 9.2.6) with arguments\n // availableLocales and requestedLocales.\n subset = LookupSupportedLocales(availableLocales, requestedLocales);\n\n // 4. For each named own property name P of subset,\n for (let P in subset) {\n if (!hop.call(subset, P))\n continue;\n\n // a. Let desc be the result of calling the [[GetOwnProperty]] internal\n // method of subset with P.\n // b. Set desc.[[Writable]] to false.\n // c. Set desc.[[Configurable]] to false.\n // d. Call the [[DefineOwnProperty]] internal method of subset with P, desc,\n // and true as arguments.\n defineProperty(subset, P, {\n writable: false, configurable: false, value: subset[P],\n });\n }\n // \"Freeze\" the array so no new elements can be added\n defineProperty(subset, 'length', { writable: false });\n\n // 5. Return subset\n return subset;\n}\n\n/**\n * The GetOption abstract operation extracts the value of the property named\n * property from the provided options object, converts it to the required type,\n * checks whether it is one of a List of allowed values, and fills in a fallback\n * value if necessary.\n */\nexport function /*9.2.9 */GetOption (options, property, type, values, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Assert: type is \"boolean\" or \"string\".\n // b. If type is \"boolean\", then let value be ToBoolean(value).\n // c. If type is \"string\", then let value be ToString(value).\n value = type === 'boolean' ? Boolean(value)\n : (type === 'string' ? String(value) : value);\n\n // d. If values is not undefined, then\n if (values !== undefined) {\n // i. If values does not contain an element equal to value, then throw a\n // RangeError exception.\n if (arrIndexOf.call(values, value) === -1)\n throw new RangeError(\"'\" + value + \"' is not an allowed value for `\" + property +'`');\n }\n\n // e. Return value.\n return value;\n }\n // Else return fallback.\n return fallback;\n}\n\n/**\n * The GetNumberOption abstract operation extracts a property value from the\n * provided options object, converts it to a Number value, checks whether it is\n * in the allowed range, and fills in a fallback value if necessary.\n */\nexport function /* 9.2.10 */GetNumberOption (options, property, minimum, maximum, fallback) {\n // 1. Let value be the result of calling the [[Get]] internal method of\n // options with argument property.\n let value = options[property];\n\n // 2. If value is not undefined, then\n if (value !== undefined) {\n // a. Let value be ToNumber(value).\n value = Number(value);\n\n // b. If value is NaN or less than minimum or greater than maximum, throw a\n // RangeError exception.\n if (isNaN(value) || value < minimum || value > maximum)\n throw new RangeError('Value is not a number or outside accepted range');\n\n // c. Return floor(value).\n return Math.floor(value);\n }\n // 3. Else return fallback.\n return fallback;\n}\n","import {\n CanonicalizeLocaleList,\n} from \"./9.negotiation.js\";\n\n// 8 The Intl Object\nexport const Intl = {};\n\n// 8.2 Function Properties of the Intl Object\n\n// 8.2.1\n// @spec[tc39/ecma402/master/spec/intl.html]\n// @clause[sec-intl.getcanonicallocales]\nIntl.getCanonicalLocales = function (locales) {\n // 1. Let ll be ? CanonicalizeLocaleList(locales).\n let ll = CanonicalizeLocaleList(locales);\n // 2. Return CreateArrayFromList(ll).\n {\n let result = [];\n for (let code in ll) {\n result.push(ll[code]);\n }\n return result;\n }\n};\n","// 11.1 The Intl.NumberFormat constructor\n// ======================================\n\nimport {\n IsWellFormedCurrencyCode,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n SupportedLocales,\n ResolveLocale,\n GetNumberOption,\n GetOption,\n} from \"./9.negotiation.js\";\n\nimport {\n internals,\n log10Floor,\n List,\n toObject,\n arrPush,\n arrJoin,\n arrShift,\n Record,\n hop,\n defineProperty,\n es3,\n fnBind,\n getInternalProperties,\n createRegExpRestore,\n secret,\n objCreate,\n} from \"./util.js\";\n\n// Currency minor units output from get-4217 grunt task, formatted\nconst currencyMinorUnits = {\n BHD: 3, BYR: 0, XOF: 0, BIF: 0, XAF: 0, CLF: 4, CLP: 0, KMF: 0, DJF: 0,\n XPF: 0, GNF: 0, ISK: 0, IQD: 3, JPY: 0, JOD: 3, KRW: 0, KWD: 3, LYD: 3,\n OMR: 3, PYG: 0, RWF: 0, TND: 3, UGX: 0, UYI: 0, VUV: 0, VND: 0,\n};\n\n// Define the NumberFormat constructor internally so it cannot be tainted\nexport function NumberFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.NumberFormat(locales, options);\n }\n\n return InitializeNumberFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'NumberFormat', {\n configurable: true,\n writable: true,\n value: NumberFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(Intl.NumberFormat, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeNumberFormat accepts the arguments\n * numberFormat (which must be an object), locales, and options. It initializes\n * numberFormat as a NumberFormat object.\n */\nexport function /*11.1.1.1 */InitializeNumberFormat (numberFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(numberFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If numberFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(numberFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. If options is undefined, then\n if (options === undefined)\n // a. Let options be the result of creating a new object as if by the\n // expression new Object() where Object is the standard built-in constructor\n // with that name.\n options = {};\n\n // 5. Else\n else\n // a. Let options be ToObject(options).\n options = toObject(options);\n\n // 6. Let opt be a new Record.\n let opt = new Record(),\n\n // 7. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with the arguments options, \"localeMatcher\", \"string\",\n // a List containing the two String values \"lookup\" and \"best fit\", and\n // \"best fit\".\n matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 8. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 9. Let NumberFormat be the standard built-in object that is the initial value\n // of Intl.NumberFormat.\n // 10. Let localeData be the value of the [[localeData]] internal property of\n // NumberFormat.\n let localeData = internals.NumberFormat['[[localeData]]'];\n\n // 11. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // NumberFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of NumberFormat, and localeData.\n let r = ResolveLocale(\n internals.NumberFormat['[[availableLocales]]'], requestedLocales,\n opt, internals.NumberFormat['[[relevantExtensionKeys]]'], localeData\n );\n\n // 12. Set the [[locale]] internal property of numberFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 13. Set the [[numberingSystem]] internal property of numberFormat to the value\n // of r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let s be the result of calling the GetOption abstract operation with the\n // arguments options, \"style\", \"string\", a List containing the three String\n // values \"decimal\", \"percent\", and \"currency\", and \"decimal\".\n let s = GetOption(options, 'style', 'string', new List('decimal', 'percent', 'currency'), 'decimal');\n\n // 16. Set the [[style]] internal property of numberFormat to s.\n internal['[[style]]'] = s;\n\n // 17. Let c be the result of calling the GetOption abstract operation with the\n // arguments options, \"currency\", \"string\", undefined, and undefined.\n let c = GetOption(options, 'currency', 'string');\n\n // 18. If c is not undefined and the result of calling the\n // IsWellFormedCurrencyCode abstract operation (defined in 6.3.1) with\n // argument c is false, then throw a RangeError exception.\n if (c !== undefined && !IsWellFormedCurrencyCode(c))\n throw new RangeError(\"'\" + c + \"' is not a valid currency code\");\n\n // 19. If s is \"currency\" and c is undefined, throw a TypeError exception.\n if (s === 'currency' && c === undefined)\n throw new TypeError('Currency code is required when style is currency');\n\n let cDigits;\n\n // 20. If s is \"currency\", then\n if (s === 'currency') {\n // a. Let c be the result of converting c to upper case as specified in 6.1.\n c = c.toUpperCase();\n\n // b. Set the [[currency]] internal property of numberFormat to c.\n internal['[[currency]]'] = c;\n\n // c. Let cDigits be the result of calling the CurrencyDigits abstract\n // operation (defined below) with argument c.\n cDigits = CurrencyDigits(c);\n }\n\n // 21. Let cd be the result of calling the GetOption abstract operation with the\n // arguments options, \"currencyDisplay\", \"string\", a List containing the\n // three String values \"code\", \"symbol\", and \"name\", and \"symbol\".\n let cd = GetOption(options, 'currencyDisplay', 'string', new List('code', 'symbol', 'name'), 'symbol');\n\n // 22. If s is \"currency\", then set the [[currencyDisplay]] internal property of\n // numberFormat to cd.\n if (s === 'currency')\n internal['[[currencyDisplay]]'] = cd;\n\n // 23. Let mnid be the result of calling the GetNumberOption abstract operation\n // (defined in 9.2.10) with arguments options, \"minimumIntegerDigits\", 1, 21,\n // and 1.\n let mnid = GetNumberOption(options, 'minimumIntegerDigits', 1, 21, 1);\n\n // 24. Set the [[minimumIntegerDigits]] internal property of numberFormat to mnid.\n internal['[[minimumIntegerDigits]]'] = mnid;\n\n // 25. If s is \"currency\", then let mnfdDefault be cDigits; else let mnfdDefault\n // be 0.\n let mnfdDefault = s === 'currency' ? cDigits : 0;\n\n // 26. Let mnfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"minimumFractionDigits\", 0, 20, and mnfdDefault.\n let mnfd = GetNumberOption(options, 'minimumFractionDigits', 0, 20, mnfdDefault);\n\n // 27. Set the [[minimumFractionDigits]] internal property of numberFormat to mnfd.\n internal['[[minimumFractionDigits]]'] = mnfd;\n\n // 28. If s is \"currency\", then let mxfdDefault be max(mnfd, cDigits); else if s\n // is \"percent\", then let mxfdDefault be max(mnfd, 0); else let mxfdDefault\n // be max(mnfd, 3).\n let mxfdDefault = s === 'currency' ? Math.max(mnfd, cDigits)\n : (s === 'percent' ? Math.max(mnfd, 0) : Math.max(mnfd, 3));\n\n // 29. Let mxfd be the result of calling the GetNumberOption abstract operation\n // with arguments options, \"maximumFractionDigits\", mnfd, 20, and mxfdDefault.\n let mxfd = GetNumberOption(options, 'maximumFractionDigits', mnfd, 20, mxfdDefault);\n\n // 30. Set the [[maximumFractionDigits]] internal property of numberFormat to mxfd.\n internal['[[maximumFractionDigits]]'] = mxfd;\n\n // 31. Let mnsd be the result of calling the [[Get]] internal method of options\n // with argument \"minimumSignificantDigits\".\n let mnsd = options.minimumSignificantDigits;\n\n // 32. Let mxsd be the result of calling the [[Get]] internal method of options\n // with argument \"maximumSignificantDigits\".\n let mxsd = options.maximumSignificantDigits;\n\n // 33. If mnsd is not undefined or mxsd is not undefined, then:\n if (mnsd !== undefined || mxsd !== undefined) {\n // a. Let mnsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"minimumSignificantDigits\", 1, 21,\n // and 1.\n mnsd = GetNumberOption(options, 'minimumSignificantDigits', 1, 21, 1);\n\n // b. Let mxsd be the result of calling the GetNumberOption abstract\n // operation with arguments options, \"maximumSignificantDigits\", mnsd,\n // 21, and 21.\n mxsd = GetNumberOption(options, 'maximumSignificantDigits', mnsd, 21, 21);\n\n // c. Set the [[minimumSignificantDigits]] internal property of numberFormat\n // to mnsd, and the [[maximumSignificantDigits]] internal property of\n // numberFormat to mxsd.\n internal['[[minimumSignificantDigits]]'] = mnsd;\n internal['[[maximumSignificantDigits]]'] = mxsd;\n }\n // 34. Let g be the result of calling the GetOption abstract operation with the\n // arguments options, \"useGrouping\", \"boolean\", undefined, and true.\n let g = GetOption(options, 'useGrouping', 'boolean', undefined, true);\n\n // 35. Set the [[useGrouping]] internal property of numberFormat to g.\n internal['[[useGrouping]]'] = g;\n\n // 36. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 37. Let patterns be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"patterns\".\n let patterns = dataLocaleData.patterns;\n\n // 38. Assert: patterns is an object (see 11.2.3)\n\n // 39. Let stylePatterns be the result of calling the [[Get]] internal method of\n // patterns with argument s.\n let stylePatterns = patterns[s];\n\n // 40. Set the [[positivePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"positivePattern\".\n internal['[[positivePattern]]'] = stylePatterns.positivePattern;\n\n // 41. Set the [[negativePattern]] internal property of numberFormat to the\n // result of calling the [[Get]] internal method of stylePatterns with the\n // argument \"negativePattern\".\n internal['[[negativePattern]]'] = stylePatterns.negativePattern;\n\n // 42. Set the [[boundFormat]] internal property of numberFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 43. Set the [[initializedNumberFormat]] internal property of numberFormat to\n // true.\n internal['[[initializedNumberFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n numberFormat.format = GetFormatNumber.call(numberFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return numberFormat;\n}\n\nfunction CurrencyDigits(currency) {\n // When the CurrencyDigits abstract operation is called with an argument currency\n // (which must be an upper case String value), the following steps are taken:\n\n // 1. If the ISO 4217 currency and funds code list contains currency as an\n // alphabetic code, then return the minor unit value corresponding to the\n // currency from the list; else return 2.\n return currencyMinorUnits[currency] !== undefined\n ? currencyMinorUnits[currency]\n : 2;\n}\n\n/* 11.2.3 */internals.NumberFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.NumberFormat is called, the\n * following steps are taken:\n */\n/* 11.2.2 */\ndefineProperty(Intl.NumberFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * NumberFormat object.\n */\n/* 11.3.2 */defineProperty(Intl.NumberFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatNumber,\n});\n\nfunction GetFormatNumber() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.NumberFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this NumberFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 1, that takes the argument value and\n // performs the following steps:\n let F = function (value) {\n // i. If value is not provided, then let value be undefined.\n // ii. Let x be ToNumber(value).\n // iii. Return the result of calling the FormatNumber abstract\n // operation (defined below) with arguments this and x.\n return FormatNumber(this, /* x = */Number(value));\n };\n\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n }\n\nIntl.NumberFormat.prototype.formatToParts = function(value) {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.NumberFormat object.');\n\n let x = Number(value);\n return FormatNumberToParts(this, x);\n};\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumbertoparts]\n */\nfunction FormatNumberToParts(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be ArrayCreate(0).\n let result = [];\n // 3. Let n be 0.\n let n = 0;\n // 4. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Let O be ObjectCreate(%ObjectPrototype%).\n let O = {};\n // a. Perform ? CreateDataPropertyOrThrow(O, \"type\", part.[[type]]).\n O.type = part['[[type]]'];\n // a. Perform ? CreateDataPropertyOrThrow(O, \"value\", part.[[value]]).\n O.value = part['[[value]]'];\n // a. Perform ? CreateDataPropertyOrThrow(result, ? ToString(n), O).\n result[n] = O;\n // a. Increment n by 1.\n n += 1;\n }\n // 5. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-partitionnumberpattern]\n */\nfunction PartitionNumberPattern(numberFormat, x) {\n\n let internal = getInternalProperties(numberFormat),\n locale = internal['[[dataLocale]]'],\n nums = internal['[[numberingSystem]]'],\n data = internals.NumberFormat['[[localeData]]'][locale],\n ild = data.symbols[nums] || data.symbols.latn,\n pattern;\n\n // 1. If x is not NaN and x < 0, then:\n if (!isNaN(x) && x < 0) {\n // a. Let x be -x.\n x = -x;\n // a. Let pattern be the value of numberFormat.[[negativePattern]].\n pattern = internal['[[negativePattern]]'];\n }\n // 2. Else,\n else {\n // a. Let pattern be the value of numberFormat.[[positivePattern]].\n pattern = internal['[[positivePattern]]'];\n }\n // 3. Let result be a new empty List.\n let result = new List();\n // 4. Let beginIndex be Call(%StringProto_indexOf%, pattern, \"{\", 0).\n let beginIndex = pattern.indexOf('{', 0);\n // 5. Let endIndex be 0.\n let endIndex = 0;\n // 6. Let nextIndex be 0.\n let nextIndex = 0;\n // 7. Let length be the number of code units in pattern.\n let length = pattern.length;\n // 8. Repeat while beginIndex is an integer index into pattern:\n while (beginIndex > -1 && beginIndex < length) {\n // a. Set endIndex to Call(%StringProto_indexOf%, pattern, \"}\", beginIndex)\n endIndex = pattern.indexOf('}', beginIndex);\n // a. If endIndex = -1, throw new Error exception.\n if (endIndex === -1) throw new Error();\n // a. If beginIndex is greater than nextIndex, then:\n if (beginIndex > nextIndex) {\n // i. Let literal be a substring of pattern from position nextIndex, inclusive, to position beginIndex, exclusive.\n let literal = pattern.substring(nextIndex, beginIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Let p be the substring of pattern from position beginIndex, exclusive, to position endIndex, exclusive.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // a. If p is equal \"number\", then:\n if (p === \"number\") {\n // i. If x is NaN,\n if (isNaN(x)) {\n // 1. Let n be an ILD String value indicating the NaN value.\n let n = ild.nan;\n // 2. Add new part record { [[type]]: \"nan\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'nan', '[[value]]': n });\n }\n // ii. Else if isFinite(x) is false,\n else if (!isFinite(x)) {\n // 1. Let n be an ILD String value indicating infinity.\n let n = ild.infinity;\n // 2. Add new part record { [[type]]: \"infinity\", [[value]]: n } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'infinity', '[[value]]': n });\n }\n // iii. Else,\n else {\n // 1. If the value of numberFormat.[[style]] is \"percent\" and isFinite(x), let x be 100 × x.\n if (internal['[[style]]'] === 'percent' && isFinite(x)) x *= 100;\n\n let n;\n // 2. If the numberFormat.[[minimumSignificantDigits]] and numberFormat.[[maximumSignificantDigits]] are present, then\n if (hop.call(internal, '[[minimumSignificantDigits]]') && hop.call(internal, '[[maximumSignificantDigits]]')) {\n // a. Let n be ToRawPrecision(x, numberFormat.[[minimumSignificantDigits]], numberFormat.[[maximumSignificantDigits]]).\n n = ToRawPrecision(x, internal['[[minimumSignificantDigits]]'], internal['[[maximumSignificantDigits]]']);\n }\n // 3. Else,\n else {\n // a. Let n be ToRawFixed(x, numberFormat.[[minimumIntegerDigits]], numberFormat.[[minimumFractionDigits]], numberFormat.[[maximumFractionDigits]]).\n n = ToRawFixed(x, internal['[[minimumIntegerDigits]]'], internal['[[minimumFractionDigits]]'], internal['[[maximumFractionDigits]]']);\n }\n // 4. If the value of the numberFormat.[[numberingSystem]] matches one of the values in the \"Numbering System\" column of Table 2 below, then\n if (numSys[nums]) {\n // a. Let digits be an array whose 10 String valued elements are the UTF-16 string representations of the 10 digits specified in the \"Digits\" column of the matching row in Table 2.\n let digits = numSys[nums];\n // a. Replace each digit in n with the value of digits[digit].\n n = String(n).replace(/\\d/g, (digit) => {\n return digits[digit];\n });\n }\n // 5. Else use an implementation dependent algorithm to map n to the appropriate representation of n in the given numbering system.\n else n = String(n); // ###TODO###\n\n let integer;\n let fraction;\n // 6. Let decimalSepIndex be Call(%StringProto_indexOf%, n, \".\", 0).\n let decimalSepIndex = n.indexOf('.', 0);\n // 7. If decimalSepIndex > 0, then:\n if (decimalSepIndex > 0) {\n // a. Let integer be the substring of n from position 0, inclusive, to position decimalSepIndex, exclusive.\n integer = n.substring(0, decimalSepIndex);\n // a. Let fraction be the substring of n from position decimalSepIndex, exclusive, to the end of n.\n fraction = n.substring(decimalSepIndex + 1, decimalSepIndex.length);\n }\n // 8. Else:\n else {\n // a. Let integer be n.\n integer = n;\n // a. Let fraction be undefined.\n fraction = undefined;\n }\n // 9. If the value of the numberFormat.[[useGrouping]] is true,\n if (internal['[[useGrouping]]'] === true) {\n // a. Let groupSepSymbol be the ILND String representing the grouping separator.\n let groupSepSymbol = ild.group;\n // a. Let groups be a List whose elements are, in left to right order, the substrings defined by ILND set of locations within the integer.\n let groups = new List();\n // ----> implementation:\n // Primary group represents the group closest to the decimal\n let pgSize = data.patterns.primaryGroupSize || 3;\n // Secondary group is every other group\n let sgSize = data.patterns.secondaryGroupSize || pgSize;\n // Group only if necessary\n if (integer.length > pgSize) {\n // Index of the primary grouping separator\n let end = integer.length - pgSize;\n // Starting index for our loop\n let idx = end % sgSize;\n let start = integer.slice(0, idx);\n if (start.length) arrPush.call(groups, start);\n // Loop to separate into secondary grouping digits\n while (idx < end) {\n arrPush.call(groups, integer.slice(idx, idx + sgSize));\n idx += sgSize;\n }\n // Add the primary grouping digits\n arrPush.call(groups, integer.slice(end));\n } else {\n arrPush.call(groups, integer);\n }\n // a. Assert: The number of elements in groups List is greater than 0.\n if (groups.length === 0) throw new Error();\n // a. Repeat, while groups List is not empty:\n while (groups.length) {\n // i. Remove the first element from groups and let integerGroup be the value of that element.\n let integerGroup = arrShift.call(groups);\n // ii. Add new part record { [[type]]: \"integer\", [[value]]: integerGroup } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integerGroup });\n // iii. If groups List is not empty, then:\n if (groups.length) {\n // 1. Add new part record { [[type]]: \"group\", [[value]]: groupSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'group', '[[value]]': groupSepSymbol });\n }\n }\n }\n // 10. Else,\n else {\n // a. Add new part record { [[type]]: \"integer\", [[value]]: integer } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'integer', '[[value]]': integer });\n }\n // 11. If fraction is not undefined, then:\n if (fraction !== undefined) {\n // a. Let decimalSepSymbol be the ILND String representing the decimal separator.\n let decimalSepSymbol = ild.decimal;\n // a. Add new part record { [[type]]: \"decimal\", [[value]]: decimalSepSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'decimal', '[[value]]': decimalSepSymbol });\n // a. Add new part record { [[type]]: \"fraction\", [[value]]: fraction } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'fraction', '[[value]]': fraction });\n }\n }\n }\n // a. Else if p is equal \"plusSign\", then:\n else if (p === \"plusSign\") {\n // i. Let plusSignSymbol be the ILND String representing the plus sign.\n let plusSignSymbol = ild.plusSign;\n // ii. Add new part record { [[type]]: \"plusSign\", [[value]]: plusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'plusSign', '[[value]]': plusSignSymbol });\n }\n // a. Else if p is equal \"minusSign\", then:\n else if (p === \"minusSign\") {\n // i. Let minusSignSymbol be the ILND String representing the minus sign.\n let minusSignSymbol = ild.minusSign;\n // ii. Add new part record { [[type]]: \"minusSign\", [[value]]: minusSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'minusSign', '[[value]]': minusSignSymbol });\n }\n // a. Else if p is equal \"percentSign\" and numberFormat.[[style]] is \"percent\", then:\n else if (p === \"percentSign\" && internal['[[style]]'] === \"percent\") {\n // i. Let percentSignSymbol be the ILND String representing the percent sign.\n let percentSignSymbol = ild.percentSign;\n // ii. Add new part record { [[type]]: \"percentSign\", [[value]]: percentSignSymbol } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': percentSignSymbol });\n }\n // a. Else if p is equal \"currency\" and numberFormat.[[style]] is \"currency\", then:\n else if (p === \"currency\" && internal['[[style]]'] === \"currency\") {\n // i. Let currency be the value of numberFormat.[[currency]].\n let currency = internal['[[currency]]'];\n\n let cd;\n\n // ii. If numberFormat.[[currencyDisplay]] is \"code\", then\n if (internal['[[currencyDisplay]]'] === \"code\") {\n // 1. Let cd be currency.\n cd = currency;\n }\n // iii. Else if numberFormat.[[currencyDisplay]] is \"symbol\", then\n else if (internal['[[currencyDisplay]]'] === \"symbol\") {\n // 1. Let cd be an ILD string representing currency in short form. If the implementation does not have such a representation of currency, use currency itself.\n cd = data.currencies[currency] || currency;\n }\n // iv. Else if numberFormat.[[currencyDisplay]] is \"name\", then\n else if (internal['[[currencyDisplay]]'] === \"name\") {\n // 1. Let cd be an ILD string representing currency in long form. If the implementation does not have such a representation of currency, then use currency itself.\n cd = currency;\n }\n // v. Add new part record { [[type]]: \"currency\", [[value]]: cd } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'currency', '[[value]]': cd });\n }\n // a. Else,\n else {\n // i. Let literal be the substring of pattern from position beginIndex, inclusive, to position endIndex, inclusive.\n let literal = pattern.substring(beginIndex, endIndex);\n // ii. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // a. Set nextIndex to endIndex + 1.\n nextIndex = endIndex + 1;\n // a. Set beginIndex to Call(%StringProto_indexOf%, pattern, \"{\", nextIndex)\n beginIndex = pattern.indexOf('{', nextIndex);\n }\n // 9. If nextIndex is less than length, then:\n if (nextIndex < length) {\n // a. Let literal be the substring of pattern from position nextIndex, inclusive, to position length, exclusive.\n let literal = pattern.substring(nextIndex, length);\n // a. Add new part record { [[type]]: \"literal\", [[value]]: literal } as a new element of the list result.\n arrPush.call(result, { '[[type]]': 'literal', '[[value]]': literal });\n }\n // 10. Return result.\n return result;\n}\n\n/*\n * @spec[stasm/ecma402/number-format-to-parts/spec/numberformat.html]\n * @clause[sec-formatnumber]\n */\nexport function FormatNumber(numberFormat, x) {\n // 1. Let parts be ? PartitionNumberPattern(numberFormat, x).\n let parts = PartitionNumberPattern(numberFormat, x);\n // 2. Let result be an empty String.\n let result = '';\n // 3. For each part in parts, do:\n for (let idx in parts) {\n let part = parts[idx];\n // a. Set result to a String value produced by concatenating result and part.[[value]].\n result += part['[[value]]'];\n }\n // 4. Return result.\n return result;\n}\n\n/**\n * When the ToRawPrecision abstract operation is called with arguments x (which\n * must be a finite non-negative number), minPrecision, and maxPrecision (both\n * must be integers between 1 and 21) the following steps are taken:\n */\nfunction ToRawPrecision (x, minPrecision, maxPrecision) {\n // 1. Let p be maxPrecision.\n let p = maxPrecision;\n\n let m, e;\n\n // 2. If x = 0, then\n if (x === 0) {\n // a. Let m be the String consisting of p occurrences of the character \"0\".\n m = arrJoin.call(Array (p + 1), '0');\n // b. Let e be 0.\n e = 0;\n }\n // 3. Else\n else {\n // a. Let e and n be integers such that 10ᵖ⁻¹ ≤ n < 10ᵖ and for which the\n // exact mathematical value of n × 10ᵉ⁻ᵖ⁺¹ – x is as close to zero as\n // possible. If there are two such sets of e and n, pick the e and n for\n // which n × 10ᵉ⁻ᵖ⁺¹ is larger.\n e = log10Floor(Math.abs(x));\n\n // Easier to get to m from here\n let f = Math.round(Math.exp((Math.abs(e - p + 1)) * Math.LN10));\n\n // b. Let m be the String consisting of the digits of the decimal\n // representation of n (in order, with no leading zeroes)\n m = String(Math.round(e - p + 1 < 0 ? x * f : x / f));\n }\n\n // 4. If e ≥ p, then\n if (e >= p)\n // a. Return the concatenation of m and e-p+1 occurrences of the character \"0\".\n return m + arrJoin.call(Array(e-p+1 + 1), '0');\n\n // 5. If e = p-1, then\n else if (e === p - 1)\n // a. Return m.\n return m;\n\n // 6. If e ≥ 0, then\n else if (e >= 0)\n // a. Let m be the concatenation of the first e+1 characters of m, the character\n // \".\", and the remaining p–(e+1) characters of m.\n m = m.slice(0, e + 1) + '.' + m.slice(e + 1);\n\n // 7. If e < 0, then\n else if (e < 0)\n // a. Let m be the concatenation of the String \"0.\", –(e+1) occurrences of the\n // character \"0\", and the string m.\n m = '0.' + arrJoin.call(Array (-(e+1) + 1), '0') + m;\n\n // 8. If m contains the character \".\", and maxPrecision > minPrecision, then\n if (m.indexOf(\".\") >= 0 && maxPrecision > minPrecision) {\n // a. Let cut be maxPrecision – minPrecision.\n let cut = maxPrecision - minPrecision;\n\n // b. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.charAt(m.length-1) === '0') {\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n\n // ii. Decrease cut by 1.\n cut--;\n }\n\n // c. If the last character of m is \".\", then\n if (m.charAt(m.length-1) === '.')\n // i. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. Return m.\n return m;\n}\n\n/**\n * @spec[tc39/ecma402/master/spec/numberformat.html]\n * @clause[sec-torawfixed]\n * When the ToRawFixed abstract operation is called with arguments x (which must\n * be a finite non-negative number), minInteger (which must be an integer between\n * 1 and 21), minFraction, and maxFraction (which must be integers between 0 and\n * 20) the following steps are taken:\n */\nfunction ToRawFixed(x, minInteger, minFraction, maxFraction) {\n // 1. Let f be maxFraction.\n let f = maxFraction;\n // 2. Let n be an integer for which the exact mathematical value of n ÷ 10f – x is as close to zero as possible. If there are two such n, pick the larger n.\n let n = Math.pow(10, f) * x; // diverging...\n // 3. If n = 0, let m be the String \"0\". Otherwise, let m be the String consisting of the digits of the decimal representation of n (in order, with no leading zeroes).\n let m = (n === 0 ? \"0\" : n.toFixed(0)); // divering...\n\n {\n // this diversion is needed to take into consideration big numbers, e.g.:\n // 1.2344501e+37 -> 12344501000000000000000000000000000000\n let idx;\n let exp = (idx = m.indexOf('e')) > -1 ? m.slice(idx + 1) : 0;\n if (exp) {\n m = m.slice(0, idx).replace('.', '');\n m += arrJoin.call(Array(exp - (m.length - 1) + 1), '0');\n }\n }\n\n let int;\n // 4. If f ≠ 0, then\n if (f !== 0) {\n // a. Let k be the number of characters in m.\n let k = m.length;\n // a. If k ≤ f, then\n if (k <= f) {\n // i. Let z be the String consisting of f+1–k occurrences of the character \"0\".\n let z = arrJoin.call(Array(f + 1 - k + 1), '0');\n // ii. Let m be the concatenation of Strings z and m.\n m = z + m;\n // iii. Let k be f+1.\n k = f + 1;\n }\n // a. Let a be the first k–f characters of m, and let b be the remaining f characters of m.\n let a = m.substring(0, k - f), b = m.substring(k - f, m.length);\n // a. Let m be the concatenation of the three Strings a, \".\", and b.\n m = a + \".\" + b;\n // a. Let int be the number of characters in a.\n int = a.length;\n }\n // 5. Else, let int be the number of characters in m.\n else int = m.length;\n // 6. Let cut be maxFraction – minFraction.\n let cut = maxFraction - minFraction;\n // 7. Repeat while cut > 0 and the last character of m is \"0\":\n while (cut > 0 && m.slice(-1) === \"0\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n // a. Decrease cut by 1.\n cut--;\n }\n // 8. If the last character of m is \".\", then\n if (m.slice(-1) === \".\") {\n // a. Remove the last character from m.\n m = m.slice(0, -1);\n }\n // 9. If int < minInteger, then\n if (int < minInteger) {\n // a. Let z be the String consisting of minInteger–int occurrences of the character \"0\".\n let z = arrJoin.call(Array(minInteger - int + 1), '0');\n // a. Let m be the concatenation of Strings z and m.\n m = z + m;\n }\n // 10. Return m.\n return m;\n}\n\n// Sect 11.3.2 Table 2, Numbering systems\n// ======================================\nlet numSys = {\n arab: ['\\u0660', '\\u0661', '\\u0662', '\\u0663', '\\u0664', '\\u0665', '\\u0666', '\\u0667', '\\u0668', '\\u0669'],\n arabext: ['\\u06F0', '\\u06F1', '\\u06F2', '\\u06F3', '\\u06F4', '\\u06F5', '\\u06F6', '\\u06F7', '\\u06F8', '\\u06F9'],\n bali: ['\\u1B50', '\\u1B51', '\\u1B52', '\\u1B53', '\\u1B54', '\\u1B55', '\\u1B56', '\\u1B57', '\\u1B58', '\\u1B59'],\n beng: ['\\u09E6', '\\u09E7', '\\u09E8', '\\u09E9', '\\u09EA', '\\u09EB', '\\u09EC', '\\u09ED', '\\u09EE', '\\u09EF'],\n deva: ['\\u0966', '\\u0967', '\\u0968', '\\u0969', '\\u096A', '\\u096B', '\\u096C', '\\u096D', '\\u096E', '\\u096F'],\n fullwide: ['\\uFF10', '\\uFF11', '\\uFF12', '\\uFF13', '\\uFF14', '\\uFF15', '\\uFF16', '\\uFF17', '\\uFF18', '\\uFF19'],\n gujr: ['\\u0AE6', '\\u0AE7', '\\u0AE8', '\\u0AE9', '\\u0AEA', '\\u0AEB', '\\u0AEC', '\\u0AED', '\\u0AEE', '\\u0AEF'],\n guru: ['\\u0A66', '\\u0A67', '\\u0A68', '\\u0A69', '\\u0A6A', '\\u0A6B', '\\u0A6C', '\\u0A6D', '\\u0A6E', '\\u0A6F'],\n hanidec: ['\\u3007', '\\u4E00', '\\u4E8C', '\\u4E09', '\\u56DB', '\\u4E94', '\\u516D', '\\u4E03', '\\u516B', '\\u4E5D'],\n khmr: ['\\u17E0', '\\u17E1', '\\u17E2', '\\u17E3', '\\u17E4', '\\u17E5', '\\u17E6', '\\u17E7', '\\u17E8', '\\u17E9'],\n knda: ['\\u0CE6', '\\u0CE7', '\\u0CE8', '\\u0CE9', '\\u0CEA', '\\u0CEB', '\\u0CEC', '\\u0CED', '\\u0CEE', '\\u0CEF'],\n laoo: ['\\u0ED0', '\\u0ED1', '\\u0ED2', '\\u0ED3', '\\u0ED4', '\\u0ED5', '\\u0ED6', '\\u0ED7', '\\u0ED8', '\\u0ED9'],\n latn: ['\\u0030', '\\u0031', '\\u0032', '\\u0033', '\\u0034', '\\u0035', '\\u0036', '\\u0037', '\\u0038', '\\u0039'],\n limb: ['\\u1946', '\\u1947', '\\u1948', '\\u1949', '\\u194A', '\\u194B', '\\u194C', '\\u194D', '\\u194E', '\\u194F'],\n mlym: ['\\u0D66', '\\u0D67', '\\u0D68', '\\u0D69', '\\u0D6A', '\\u0D6B', '\\u0D6C', '\\u0D6D', '\\u0D6E', '\\u0D6F'],\n mong: ['\\u1810', '\\u1811', '\\u1812', '\\u1813', '\\u1814', '\\u1815', '\\u1816', '\\u1817', '\\u1818', '\\u1819'],\n mymr: ['\\u1040', '\\u1041', '\\u1042', '\\u1043', '\\u1044', '\\u1045', '\\u1046', '\\u1047', '\\u1048', '\\u1049'],\n orya: ['\\u0B66', '\\u0B67', '\\u0B68', '\\u0B69', '\\u0B6A', '\\u0B6B', '\\u0B6C', '\\u0B6D', '\\u0B6E', '\\u0B6F'],\n tamldec: ['\\u0BE6', '\\u0BE7', '\\u0BE8', '\\u0BE9', '\\u0BEA', '\\u0BEB', '\\u0BEC', '\\u0BED', '\\u0BEE', '\\u0BEF'],\n telu: ['\\u0C66', '\\u0C67', '\\u0C68', '\\u0C69', '\\u0C6A', '\\u0C6B', '\\u0C6C', '\\u0C6D', '\\u0C6E', '\\u0C6F'],\n thai: ['\\u0E50', '\\u0E51', '\\u0E52', '\\u0E53', '\\u0E54', '\\u0E55', '\\u0E56', '\\u0E57', '\\u0E58', '\\u0E59'],\n tibt: ['\\u0F20', '\\u0F21', '\\u0F22', '\\u0F23', '\\u0F24', '\\u0F25', '\\u0F26', '\\u0F27', '\\u0F28', '\\u0F29'],\n};\n\n/**\n * This function provides access to the locale and formatting options computed\n * during initialization of the object.\n *\n * The function returns a new object whose properties and attributes are set as\n * if constructed by an object literal assigning to each of the following\n * properties the value of the corresponding internal property of this\n * NumberFormat object (see 11.4): locale, numberingSystem, style, currency,\n * currencyDisplay, minimumIntegerDigits, minimumFractionDigits,\n * maximumFractionDigits, minimumSignificantDigits, maximumSignificantDigits, and\n * useGrouping. Properties whose corresponding internal properties are not present\n * are not assigned.\n */\n/* 11.3.3 */defineProperty(Intl.NumberFormat.prototype, 'resolvedOptions', {\n configurable: true,\n writable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'numberingSystem', 'style', 'currency', 'currencyDisplay',\n 'minimumIntegerDigits', 'minimumFractionDigits', 'maximumFractionDigits',\n 'minimumSignificantDigits', 'maximumSignificantDigits', 'useGrouping',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 11.3_b\n if (!internal || !internal['[[initializedNumberFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.NumberFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[['+ props[i] +']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","/* jslint esnext: true */\n\n// Match these datetime components in a CLDR pattern, except those in single quotes\nlet expDTComponents = /(?:[Eec]{1,6}|G{1,5}|[Qq]{1,5}|(?:[yYur]+|U{1,5})|[ML]{1,5}|d{1,2}|D{1,3}|F{1}|[abB]{1,5}|[hkHK]{1,2}|w{1,2}|W{1}|m{1,2}|s{1,2}|[zZOvVxX]{1,4})(?=([^']*'[^']*')*[^']*$)/g;\n// trim patterns after transformations\nlet expPatternTrimmer = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n// Skip over patterns with these datetime components because we don't have data\n// to back them up:\n// timezone, weekday, amoung others\nlet unwantedDTCs = /[rqQASjJgwWIQq]/; // xXVO were removed from this list in favor of computing matches with timeZoneName values but printing as empty string\n\nlet dtKeys = [\"weekday\", \"era\", \"year\", \"month\", \"day\", \"weekday\", \"quarter\"];\nlet tmKeys = [\"hour\", \"minute\", \"second\", \"hour12\", \"timeZoneName\"];\n\nfunction isDateFormatOnly(obj) {\n for (let i = 0; i < tmKeys.length; i += 1) {\n if (obj.hasOwnProperty(tmKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction isTimeFormatOnly(obj) {\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (obj.hasOwnProperty(dtKeys[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction joinDateAndTimeFormats(dateFormatObj, timeFormatObj) {\n let o = { _: {} };\n for (let i = 0; i < dtKeys.length; i += 1) {\n if (dateFormatObj[dtKeys[i]]) {\n o[dtKeys[i]] = dateFormatObj[dtKeys[i]];\n }\n if (dateFormatObj._[dtKeys[i]]) {\n o._[dtKeys[i]] = dateFormatObj._[dtKeys[i]];\n }\n }\n for (let j = 0; j < tmKeys.length; j += 1) {\n if (timeFormatObj[tmKeys[j]]) {\n o[tmKeys[j]] = timeFormatObj[tmKeys[j]];\n }\n if (timeFormatObj._[tmKeys[j]]) {\n o._[tmKeys[j]] = timeFormatObj._[tmKeys[j]];\n }\n }\n return o;\n}\n\nfunction computeFinalPatterns(formatObj) {\n // From http://www.unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns:\n // 'In patterns, two single quotes represents a literal single quote, either\n // inside or outside single quotes. Text within single quotes is not\n // interpreted in any way (except for two adjacent single quotes).'\n formatObj.pattern12 = formatObj.extendedPattern.replace(/'([^']*)'/g, ($0, literal) => {\n return literal ? literal : \"'\";\n });\n\n // pattern 12 is always the default. we can produce the 24 by removing {ampm}\n formatObj.pattern = formatObj.pattern12.replace('{ampm}', '').replace(expPatternTrimmer, '');\n return formatObj;\n}\n\nfunction expDTComponentsMeta($0, formatObj) {\n switch ($0.charAt(0)) {\n // --- Era\n case 'G':\n formatObj.era = [ 'short', 'short', 'short', 'long', 'narrow' ][$0.length-1];\n return '{era}';\n\n // --- Year\n case 'y':\n case 'Y':\n case 'u':\n case 'U':\n case 'r':\n formatObj.year = $0.length === 2 ? '2-digit' : 'numeric';\n return '{year}';\n\n // --- Quarter (not supported in this polyfill)\n case 'Q':\n case 'q':\n formatObj.quarter = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{quarter}';\n\n // --- Month\n case 'M':\n case 'L':\n formatObj.month = [ 'numeric', '2-digit', 'short', 'long', 'narrow' ][$0.length-1];\n return '{month}';\n\n // --- Week (not supported in this polyfill)\n case 'w':\n // week of the year\n formatObj.week = $0.length === 2 ? '2-digit' : 'numeric';\n return '{weekday}';\n case 'W':\n // week of the month\n formatObj.week = 'numeric';\n return '{weekday}';\n\n // --- Day\n case 'd':\n // day of the month\n formatObj.day = $0.length === 2 ? '2-digit' : 'numeric';\n return '{day}';\n case 'D': // day of the year\n case 'F': // day of the week\n case 'g':\n // 1..n: Modified Julian day\n formatObj.day = 'numeric';\n return '{day}';\n\n // --- Week Day\n case 'E':\n // day of the week\n formatObj.weekday = [ 'short', 'short', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'e':\n // local day of the week\n formatObj.weekday = [ 'numeric', '2-digit', 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n case 'c':\n // stand alone local day of the week\n formatObj.weekday = [ 'numeric', undefined, 'short', 'long', 'narrow', 'short' ][$0.length-1];\n return '{weekday}';\n\n // --- Period\n case 'a': // AM, PM\n case 'b': // am, pm, noon, midnight\n case 'B': // flexible day periods\n formatObj.hour12 = true;\n return '{ampm}';\n\n // --- Hour\n case 'h':\n case 'H':\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n case 'k':\n case 'K':\n formatObj.hour12 = true; // 12-hour-cycle time formats (using h or K)\n formatObj.hour = $0.length === 2 ? '2-digit' : 'numeric';\n return '{hour}';\n\n // --- Minute\n case 'm':\n formatObj.minute = $0.length === 2 ? '2-digit' : 'numeric';\n return '{minute}';\n\n // --- Second\n case 's':\n formatObj.second = $0.length === 2 ? '2-digit' : 'numeric';\n return '{second}';\n case 'S':\n case 'A':\n formatObj.second = 'numeric';\n return '{second}';\n\n // --- Timezone\n case 'z': // 1..3, 4: specific non-location format\n case 'Z': // 1..3, 4, 5: The ISO8601 varios formats\n case 'O': // 1, 4: miliseconds in day short, long\n case 'v': // 1, 4: generic non-location format\n case 'V': // 1, 2, 3, 4: time zone ID or city\n case 'X': // 1, 2, 3, 4: The ISO8601 varios formats\n case 'x': // 1, 2, 3, 4: The ISO8601 varios formats\n // this polyfill only supports much, for now, we are just doing something dummy\n formatObj.timeZoneName = $0.length < 4 ? 'short' : 'long';\n return '{timeZoneName}';\n }\n}\n\n\n/**\n * Converts the CLDR availableFormats into the objects and patterns required by\n * the ECMAScript Internationalization API specification.\n */\nexport function createDateTimeFormat(skeleton, pattern) {\n // we ignore certain patterns that are unsupported to avoid this expensive op.\n if (unwantedDTCs.test(pattern))\n return undefined;\n\n let formatObj = {\n originalPattern: pattern,\n _: {},\n };\n\n // Replace the pattern string with the one required by the specification, whilst\n // at the same time evaluating it for the subsets and formats\n formatObj.extendedPattern = pattern.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj._);\n });\n\n // Match the skeleton string with the one required by the specification\n // this implementation is based on the Date Field Symbol Table:\n // http://unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n // Note: we are adding extra data to the formatObject even though this polyfill\n // might not support it.\n skeleton.replace(expDTComponents, ($0) => {\n // See which symbol we're dealing with\n return expDTComponentsMeta($0, formatObj);\n });\n\n return computeFinalPatterns(formatObj);\n}\n\n/**\n * Processes DateTime formats from CLDR to an easier-to-parse format.\n * the result of this operation should be cached the first time a particular\n * calendar is analyzed.\n *\n * The specification requires we support at least the following subsets of\n * date/time components:\n *\n * - 'weekday', 'year', 'month', 'day', 'hour', 'minute', 'second'\n * - 'weekday', 'year', 'month', 'day'\n * - 'year', 'month', 'day'\n * - 'year', 'month'\n * - 'month', 'day'\n * - 'hour', 'minute', 'second'\n * - 'hour', 'minute'\n *\n * We need to cherry pick at least these subsets from the CLDR data and convert\n * them into the pattern objects used in the ECMA-402 API.\n */\nexport function createDateTimeFormats(formats) {\n let availableFormats = formats.availableFormats;\n let timeFormats = formats.timeFormats;\n let dateFormats = formats.dateFormats;\n let result = [];\n let skeleton, pattern, computed, i, j;\n let timeRelatedFormats = [];\n let dateRelatedFormats = [];\n\n // Map available (custom) formats into a pattern for createDateTimeFormats\n for (skeleton in availableFormats) {\n if (availableFormats.hasOwnProperty(skeleton)) {\n pattern = availableFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n // in some cases, the format is only displaying date specific props\n // or time specific props, in which case we need to also produce the\n // combined formats.\n if (isDateFormatOnly(computed)) {\n dateRelatedFormats.push(computed);\n } else if (isTimeFormatOnly(computed)) {\n timeRelatedFormats.push(computed);\n }\n }\n }\n }\n\n // Map time formats into a pattern for createDateTimeFormats\n for (skeleton in timeFormats) {\n if (timeFormats.hasOwnProperty(skeleton)) {\n pattern = timeFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n timeRelatedFormats.push(computed);\n }\n }\n }\n\n // Map date formats into a pattern for createDateTimeFormats\n for (skeleton in dateFormats) {\n if (dateFormats.hasOwnProperty(skeleton)) {\n pattern = dateFormats[skeleton];\n computed = createDateTimeFormat(skeleton, pattern);\n if (computed) {\n result.push(computed);\n dateRelatedFormats.push(computed);\n }\n }\n }\n\n // combine custom time and custom date formats when they are orthogonals to complete the\n // formats supported by CLDR.\n // This Algo is based on section \"Missing Skeleton Fields\" from:\n // http://unicode.org/reports/tr35/tr35-dates.html#availableFormats_appendItems\n for (i = 0; i < timeRelatedFormats.length; i += 1) {\n for (j = 0; j < dateRelatedFormats.length; j += 1) {\n if (dateRelatedFormats[j].month === 'long') {\n pattern = dateRelatedFormats[j].weekday ? formats.full : formats.long;\n } else if (dateRelatedFormats[j].month === 'short') {\n pattern = formats.medium;\n } else {\n pattern = formats.short;\n }\n computed = joinDateAndTimeFormats(dateRelatedFormats[j], timeRelatedFormats[i]);\n computed.originalPattern = pattern;\n computed.extendedPattern = pattern\n .replace('{0}', timeRelatedFormats[i].extendedPattern)\n .replace('{1}', dateRelatedFormats[j].extendedPattern)\n .replace(/^[,\\s]+|[,\\s]+$/gi, '');\n result.push(computeFinalPatterns(computed));\n }\n }\n\n return result;\n}\n","// 12.1 The Intl.DateTimeFormat constructor\n// ==================================\n\nimport {\n toLatinUpperCase,\n} from './6.locales-currencies-tz.js';\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n CanonicalizeLocaleList,\n ResolveLocale,\n GetOption,\n SupportedLocales,\n} from \"./9.negotiation.js\";\n\nimport {\n FormatNumber,\n} from \"./11.numberformat.js\";\n\nimport {\n createDateTimeFormats,\n} from \"./cldr\";\n\nimport {\n internals,\n es3,\n fnBind,\n defineProperty,\n toObject,\n getInternalProperties,\n createRegExpRestore,\n secret,\n Record,\n List,\n hop,\n objCreate,\n arrPush,\n arrIndexOf,\n} from './util.js';\n\n// An object map of date component keys, saves using a regex later\nconst dateWidths = objCreate(null, { narrow:{}, short:{}, long:{} });\n\n/**\n * Returns a string for a date component, resolved using multiple inheritance as specified\n * as specified in the Unicode Technical Standard 35.\n */\nfunction resolveDateString(data, ca, component, width, key) {\n // From http://www.unicode.org/reports/tr35/tr35.html#Multiple_Inheritance:\n // 'In clearly specified instances, resources may inherit from within the same locale.\n // For example, ... the Buddhist calendar inherits from the Gregorian calendar.'\n let obj = data[ca] && data[ca][component]\n ? data[ca][component]\n : data.gregory[component],\n\n // \"sideways\" inheritance resolves strings when a key doesn't exist\n alts = {\n narrow: ['short', 'long'],\n short: ['long', 'narrow'],\n long: ['short', 'narrow'],\n },\n\n //\n resolved = hop.call(obj, width)\n ? obj[width]\n : hop.call(obj, alts[width][0])\n ? obj[alts[width][0]]\n : obj[alts[width][1]];\n\n // `key` wouldn't be specified for components 'dayPeriods'\n return key !== null ? resolved[key] : resolved;\n}\n\n// Define the DateTimeFormat constructor internally so it cannot be tainted\nexport function DateTimeFormatConstructor () {\n let locales = arguments[0];\n let options = arguments[1];\n\n if (!this || this === Intl) {\n return new Intl.DateTimeFormat(locales, options);\n }\n return InitializeDateTimeFormat(toObject(this), locales, options);\n}\n\ndefineProperty(Intl, 'DateTimeFormat', {\n configurable: true,\n writable: true,\n value: DateTimeFormatConstructor,\n});\n\n// Must explicitly set prototypes as unwritable\ndefineProperty(DateTimeFormatConstructor, 'prototype', {\n writable: false,\n});\n\n/**\n * The abstract operation InitializeDateTimeFormat accepts the arguments dateTimeFormat\n * (which must be an object), locales, and options. It initializes dateTimeFormat as a\n * DateTimeFormat object.\n */\nexport function/* 12.1.1.1 */InitializeDateTimeFormat (dateTimeFormat, locales, options) {\n // This will be a internal properties object if we're not already initialized\n let internal = getInternalProperties(dateTimeFormat);\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore();\n\n // 1. If dateTimeFormat has an [[initializedIntlObject]] internal property with\n // value true, throw a TypeError exception.\n if (internal['[[initializedIntlObject]]'] === true)\n throw new TypeError('`this` object has already been initialized as an Intl object');\n\n // Need this to access the `internal` object\n defineProperty(dateTimeFormat, '__getInternalProperties', {\n value: function () {\n // NOTE: Non-standard, for internal use only\n if (arguments[0] === secret)\n return internal;\n },\n });\n\n // 2. Set the [[initializedIntlObject]] internal property of numberFormat to true.\n internal['[[initializedIntlObject]]'] = true;\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n let requestedLocales = CanonicalizeLocaleList(locales);\n\n // 4. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined below) with arguments options, \"any\", and \"date\".\n options = ToDateTimeOptions(options, 'any', 'date');\n\n // 5. Let opt be a new Record.\n let opt = new Record();\n\n // 6. Let matcher be the result of calling the GetOption abstract operation\n // (defined in 9.2.9) with arguments options, \"localeMatcher\", \"string\", a List\n // containing the two String values \"lookup\" and \"best fit\", and \"best fit\".\n let matcher = GetOption(options, 'localeMatcher', 'string', new List('lookup', 'best fit'), 'best fit');\n\n // 7. Set opt.[[localeMatcher]] to matcher.\n opt['[[localeMatcher]]'] = matcher;\n\n // 8. Let DateTimeFormat be the standard built-in object that is the initial\n // value of Intl.DateTimeFormat.\n let DateTimeFormat = internals.DateTimeFormat; // This is what we *really* need\n\n // 9. Let localeData be the value of the [[localeData]] internal property of\n // DateTimeFormat.\n let localeData = DateTimeFormat['[[localeData]]'];\n\n // 10. Let r be the result of calling the ResolveLocale abstract operation\n // (defined in 9.2.5) with the [[availableLocales]] internal property of\n // DateTimeFormat, requestedLocales, opt, the [[relevantExtensionKeys]]\n // internal property of DateTimeFormat, and localeData.\n let r = ResolveLocale(DateTimeFormat['[[availableLocales]]'], requestedLocales,\n opt, DateTimeFormat['[[relevantExtensionKeys]]'], localeData);\n\n // 11. Set the [[locale]] internal property of dateTimeFormat to the value of\n // r.[[locale]].\n internal['[[locale]]'] = r['[[locale]]'];\n\n // 12. Set the [[calendar]] internal property of dateTimeFormat to the value of\n // r.[[ca]].\n internal['[[calendar]]'] = r['[[ca]]'];\n\n // 13. Set the [[numberingSystem]] internal property of dateTimeFormat to the value of\n // r.[[nu]].\n internal['[[numberingSystem]]'] = r['[[nu]]'];\n\n // The specification doesn't tell us to do this, but it's helpful later on\n internal['[[dataLocale]]'] = r['[[dataLocale]]'];\n\n // 14. Let dataLocale be the value of r.[[dataLocale]].\n let dataLocale = r['[[dataLocale]]'];\n\n // 15. Let tz be the result of calling the [[Get]] internal method of options with\n // argument \"timeZone\".\n let tz = options.timeZone;\n\n // 16. If tz is not undefined, then\n if (tz !== undefined) {\n // a. Let tz be ToString(tz).\n // b. Convert tz to upper case as described in 6.1.\n // NOTE: If an implementation accepts additional time zone values, as permitted\n // under certain conditions by the Conformance clause, different casing\n // rules apply.\n tz = toLatinUpperCase(tz);\n\n // c. If tz is not \"UTC\", then throw a RangeError exception.\n // ###TODO: accept more time zones###\n if (tz !== 'UTC')\n throw new RangeError('timeZone is not supported.');\n }\n\n // 17. Set the [[timeZone]] internal property of dateTimeFormat to tz.\n internal['[[timeZone]]'] = tz;\n\n // 18. Let opt be a new Record.\n opt = new Record();\n\n // 19. For each row of Table 3, except the header row, do:\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // 20. Let prop be the name given in the Property column of the row.\n // 21. Let value be the result of calling the GetOption abstract operation,\n // passing as argument options, the name given in the Property column of the\n // row, \"string\", a List containing the strings given in the Values column of\n // the row, and undefined.\n let value = GetOption(options, prop, 'string', dateTimeComponents[prop]);\n\n // 22. Set opt.[[]] to value.\n opt['[['+prop+']]'] = value;\n }\n\n // Assigned a value below\n let bestFormat;\n\n // 23. Let dataLocaleData be the result of calling the [[Get]] internal method of\n // localeData with argument dataLocale.\n let dataLocaleData = localeData[dataLocale];\n\n // 24. Let formats be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"formats\".\n // Note: we process the CLDR formats into the spec'd structure\n let formats = ToDateTimeFormats(dataLocaleData.formats);\n\n // 25. Let matcher be the result of calling the GetOption abstract operation with\n // arguments options, \"formatMatcher\", \"string\", a List containing the two String\n // values \"basic\" and \"best fit\", and \"best fit\".\n matcher = GetOption(options, 'formatMatcher', 'string', new List('basic', 'best fit'), 'best fit');\n\n // Optimization: caching the processed formats as a one time operation by\n // replacing the initial structure from localeData\n dataLocaleData.formats = formats;\n\n // 26. If matcher is \"basic\", then\n if (matcher === 'basic') {\n // 27. Let bestFormat be the result of calling the BasicFormatMatcher abstract\n // operation (defined below) with opt and formats.\n bestFormat = BasicFormatMatcher(opt, formats);\n\n // 28. Else\n } else {\n {\n // diverging\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n opt.hour12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n }\n // 29. Let bestFormat be the result of calling the BestFitFormatMatcher\n // abstract operation (defined below) with opt and formats.\n bestFormat = BestFitFormatMatcher(opt, formats);\n }\n\n // 30. For each row in Table 3, except the header row, do\n for (let prop in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, prop))\n continue;\n\n // a. Let prop be the name given in the Property column of the row.\n // b. Let pDesc be the result of calling the [[GetOwnProperty]] internal method of\n // bestFormat with argument prop.\n // c. If pDesc is not undefined, then\n if (hop.call(bestFormat, prop)) {\n // i. Let p be the result of calling the [[Get]] internal method of bestFormat\n // with argument prop.\n let p = bestFormat[prop];\n {\n // diverging\n p = bestFormat._ && hop.call(bestFormat._, prop) ? bestFormat._[prop] : p;\n }\n\n // ii. Set the [[]] internal property of dateTimeFormat to p.\n internal['[['+prop+']]'] = p;\n }\n }\n\n let pattern; // Assigned a value below\n\n // 31. Let hr12 be the result of calling the GetOption abstract operation with\n // arguments options, \"hour12\", \"boolean\", undefined, and undefined.\n let hr12 = GetOption(options, 'hour12', 'boolean'/*, undefined, undefined*/);\n\n // 32. If dateTimeFormat has an internal property [[hour]], then\n if (internal['[[hour]]']) {\n // a. If hr12 is undefined, then let hr12 be the result of calling the [[Get]]\n // internal method of dataLocaleData with argument \"hour12\".\n hr12 = hr12 === undefined ? dataLocaleData.hour12 : hr12;\n\n // b. Set the [[hour12]] internal property of dateTimeFormat to hr12.\n internal['[[hour12]]'] = hr12;\n\n // c. If hr12 is true, then\n if (hr12 === true) {\n // i. Let hourNo0 be the result of calling the [[Get]] internal method of\n // dataLocaleData with argument \"hourNo0\".\n let hourNo0 = dataLocaleData.hourNo0;\n\n // ii. Set the [[hourNo0]] internal property of dateTimeFormat to hourNo0.\n internal['[[hourNo0]]'] = hourNo0;\n\n // iii. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern12\".\n pattern = bestFormat.pattern12;\n }\n\n // d. Else\n else\n // i. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n }\n\n // 33. Else\n else\n // a. Let pattern be the result of calling the [[Get]] internal method of\n // bestFormat with argument \"pattern\".\n pattern = bestFormat.pattern;\n\n // 34. Set the [[pattern]] internal property of dateTimeFormat to pattern.\n internal['[[pattern]]'] = pattern;\n\n // 35. Set the [[boundFormat]] internal property of dateTimeFormat to undefined.\n internal['[[boundFormat]]'] = undefined;\n\n // 36. Set the [[initializedDateTimeFormat]] internal property of dateTimeFormat to\n // true.\n internal['[[initializedDateTimeFormat]]'] = true;\n\n // In ES3, we need to pre-bind the format() function\n if (es3)\n dateTimeFormat.format = GetFormatDateTime.call(dateTimeFormat);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // Return the newly initialised object\n return dateTimeFormat;\n}\n\n/**\n * Several DateTimeFormat algorithms use values from the following table, which provides\n * property names and allowable values for the components of date and time formats:\n */\nlet dateTimeComponents = {\n weekday: [ \"narrow\", \"short\", \"long\" ],\n era: [ \"narrow\", \"short\", \"long\" ],\n year: [ \"2-digit\", \"numeric\" ],\n month: [ \"2-digit\", \"numeric\", \"narrow\", \"short\", \"long\" ],\n day: [ \"2-digit\", \"numeric\" ],\n hour: [ \"2-digit\", \"numeric\" ],\n minute: [ \"2-digit\", \"numeric\" ],\n second: [ \"2-digit\", \"numeric\" ],\n timeZoneName: [ \"short\", \"long\" ],\n};\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nfunction ToDateTimeFormats(formats) {\n if (Object.prototype.toString.call(formats) === '[object Array]') {\n return formats;\n }\n return createDateTimeFormats(formats);\n}\n\n/**\n * When the ToDateTimeOptions abstract operation is called with arguments options,\n * required, and defaults, the following steps are taken:\n */\nexport function ToDateTimeOptions (options, required, defaults) {\n // 1. If options is undefined, then let options be null, else let options be\n // ToObject(options).\n if (options === undefined)\n options = null;\n\n else {\n // (#12) options needs to be a Record, but it also needs to inherit properties\n let opt2 = toObject(options);\n options = new Record();\n\n for (let k in opt2)\n options[k] = opt2[k];\n }\n\n // 2. Let create be the standard built-in function object defined in ES5, 15.2.3.5.\n let create = objCreate;\n\n // 3. Let options be the result of calling the [[Call]] internal method of create with\n // undefined as the this value and an argument list containing the single item\n // options.\n options = create(options);\n\n // 4. Let needDefaults be true.\n let needDefaults = true;\n\n // 5. If required is \"date\" or \"any\", then\n if (required === 'date' || required === 'any') {\n // a. For each of the property names \"weekday\", \"year\", \"month\", \"day\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.weekday !== undefined || options.year !== undefined\n || options.month !== undefined || options.day !== undefined)\n needDefaults = false;\n }\n\n // 6. If required is \"time\" or \"any\", then\n if (required === 'time' || required === 'any') {\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. If the result of calling the [[Get]] internal method of options with the\n // property name is not undefined, then let needDefaults be false.\n if (options.hour !== undefined || options.minute !== undefined || options.second !== undefined)\n needDefaults = false;\n }\n\n // 7. If needDefaults is true and defaults is either \"date\" or \"all\", then\n if (needDefaults && (defaults === 'date' || defaults === 'all'))\n // a. For each of the property names \"year\", \"month\", \"day\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.year = options.month = options.day = 'numeric';\n\n // 8. If needDefaults is true and defaults is either \"time\" or \"all\", then\n if (needDefaults && (defaults === 'time' || defaults === 'all'))\n // a. For each of the property names \"hour\", \"minute\", \"second\":\n // i. Call the [[DefineOwnProperty]] internal method of options with the\n // property name, Property Descriptor {[[Value]]: \"numeric\", [[Writable]]:\n // true, [[Enumerable]]: true, [[Configurable]]: true}, and false.\n options.hour = options.minute = options.second = 'numeric';\n\n // 9. Return options.\n return options;\n}\n\n/**\n * When the BasicFormatMatcher abstract operation is called with two arguments options and\n * formats, the following steps are taken:\n */\nfunction BasicFormatMatcher (options, formats) {\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta === 2)\n score -= longMorePenalty;\n\n // 6. Else if delta = 1, decrease score by shortMorePenalty.\n else if (delta === 1)\n score -= shortMorePenalty;\n\n // 7. Else if delta = -1, decrease score by shortLessPenalty.\n else if (delta === -1)\n score -= shortLessPenalty;\n\n // 8. Else if delta = -2, decrease score by longLessPenalty.\n else if (delta === -2)\n score -= longLessPenalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/**\n * When the BestFitFormatMatcher abstract operation is called with two arguments options\n * and formats, it performs implementation dependent steps, which should return a set of\n * component representations that a typical user of the selected locale would perceive as\n * at least as good as the one returned by BasicFormatMatcher.\n *\n * This polyfill defines the algorithm to be the same as BasicFormatMatcher,\n * with the addition of bonus points awarded where the requested format is of\n * the same data type as the potentially matching format.\n *\n * This algo relies on the concept of closest distance matching described here:\n * http://unicode.org/reports/tr35/tr35-dates.html#Matching_Skeletons\n * Typically a “best match” is found using a closest distance match, such as:\n *\n * Symbols requesting a best choice for the locale are replaced.\n * j → one of {H, k, h, K}; C → one of {a, b, B}\n * -> Covered by cldr.js matching process\n *\n * For fields with symbols representing the same type (year, month, day, etc):\n * Most symbols have a small distance from each other.\n * M ≅ L; E ≅ c; a ≅ b ≅ B; H ≅ k ≅ h ≅ K; ...\n * -> Covered by cldr.js matching process\n *\n * Width differences among fields, other than those marking text vs numeric, are given small distance from each other.\n * MMM ≅ MMMM\n * MM ≅ M\n * Numeric and text fields are given a larger distance from each other.\n * MMM ≈ MM\n * Symbols representing substantial differences (week of year vs week of month) are given much larger a distances from each other.\n * d ≋ D; ...\n * Missing or extra fields cause a match to fail. (But see Missing Skeleton Fields).\n *\n *\n * For example,\n *\n * { month: 'numeric', day: 'numeric' }\n *\n * should match\n *\n * { month: '2-digit', day: '2-digit' }\n *\n * rather than\n *\n * { month: 'short', day: 'numeric' }\n *\n * This makes sense because a user requesting a formatted date with numeric parts would\n * not expect to see the returned format containing narrow, short or long part names\n */\nfunction BestFitFormatMatcher (options, formats) {\n\n // 1. Let removalPenalty be 120.\n let removalPenalty = 120;\n\n // 2. Let additionPenalty be 20.\n let additionPenalty = 20;\n\n // 3. Let longLessPenalty be 8.\n let longLessPenalty = 8;\n\n // 4. Let longMorePenalty be 6.\n let longMorePenalty = 6;\n\n // 5. Let shortLessPenalty be 6.\n let shortLessPenalty = 6;\n\n // 6. Let shortMorePenalty be 3.\n let shortMorePenalty = 3;\n\n let hour12Penalty = 1;\n\n // 7. Let bestScore be -Infinity.\n let bestScore = -Infinity;\n\n // 8. Let bestFormat be undefined.\n let bestFormat;\n\n // 9. Let i be 0.\n let i = 0;\n\n // 10. Assert: formats is an Array object.\n\n // 11. Let len be the result of calling the [[Get]] internal method of formats with argument \"length\".\n let len = formats.length;\n\n // 12. Repeat while i < len:\n while (i < len) {\n // a. Let format be the result of calling the [[Get]] internal method of formats with argument ToString(i).\n let format = formats[i];\n\n // b. Let score be 0.\n let score = 0;\n\n // c. For each property shown in Table 3:\n for (let property in dateTimeComponents) {\n if (!hop.call(dateTimeComponents, property))\n continue;\n\n // i. Let optionsProp be options.[[]].\n let optionsProp = options['[['+ property +']]'];\n\n // ii. Let formatPropDesc be the result of calling the [[GetOwnProperty]] internal method of format\n // with argument property.\n // iii. If formatPropDesc is not undefined, then\n // 1. Let formatProp be the result of calling the [[Get]] internal method of format with argument property.\n let formatProp = hop.call(format, property) ? format[property] : undefined;\n\n // iv. If optionsProp is undefined and formatProp is not undefined, then decrease score by\n // additionPenalty.\n if (optionsProp === undefined && formatProp !== undefined)\n score -= additionPenalty;\n\n // v. Else if optionsProp is not undefined and formatProp is undefined, then decrease score by\n // removalPenalty.\n else if (optionsProp !== undefined && formatProp === undefined)\n score -= removalPenalty;\n\n // vi. Else\n else {\n // 1. Let values be the array [\"2-digit\", \"numeric\", \"narrow\", \"short\",\n // \"long\"].\n let values = [ '2-digit', 'numeric', 'narrow', 'short', 'long' ];\n\n // 2. Let optionsPropIndex be the index of optionsProp within values.\n let optionsPropIndex = arrIndexOf.call(values, optionsProp);\n\n // 3. Let formatPropIndex be the index of formatProp within values.\n let formatPropIndex = arrIndexOf.call(values, formatProp);\n\n // 4. Let delta be max(min(formatPropIndex - optionsPropIndex, 2), -2).\n let delta = Math.max(Math.min(formatPropIndex - optionsPropIndex, 2), -2);\n\n {\n // diverging from spec\n // When the bestFit argument is true, subtract additional penalty where data types are not the same\n if ((formatPropIndex <= 1 && optionsPropIndex >= 2) || (formatPropIndex >= 2 && optionsPropIndex <= 1)) {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 0)\n score -= longMorePenalty;\n else if (delta < 0)\n score -= longLessPenalty;\n } else {\n // 5. If delta = 2, decrease score by longMorePenalty.\n if (delta > 1)\n score -= shortMorePenalty;\n else if (delta < -1)\n score -= shortLessPenalty;\n }\n }\n }\n }\n\n {\n // diverging to also take into consideration differences between 12 or 24 hours\n // which is special for the best fit only.\n if (format._.hour12 !== options.hour12) {\n score -= hour12Penalty;\n }\n }\n\n // d. If score > bestScore, then\n if (score > bestScore) {\n // i. Let bestScore be score.\n bestScore = score;\n // ii. Let bestFormat be format.\n bestFormat = format;\n }\n\n // e. Increase i by 1.\n i++;\n }\n\n // 13. Return bestFormat.\n return bestFormat;\n}\n\n/* 12.2.3 */internals.DateTimeFormat = {\n '[[availableLocales]]': [],\n '[[relevantExtensionKeys]]': ['ca', 'nu'],\n '[[localeData]]': {},\n};\n\n/**\n * When the supportedLocalesOf method of Intl.DateTimeFormat is called, the\n * following steps are taken:\n */\n/* 12.2.2 */\ndefineProperty(Intl.DateTimeFormat, 'supportedLocalesOf', {\n configurable: true,\n writable: true,\n value: fnBind.call(function (locales) {\n // Bound functions only have the `this` value altered if being used as a constructor,\n // this lets us imitate a native function that has no constructor\n if (!hop.call(this, '[[availableLocales]]'))\n throw new TypeError('supportedLocalesOf() is not a constructor');\n\n // Create an object whose props can be used to restore the values of RegExp props\n let regexpState = createRegExpRestore(),\n\n // 1. If options is not provided, then let options be undefined.\n options = arguments[1],\n\n // 2. Let availableLocales be the value of the [[availableLocales]] internal\n // property of the standard built-in object that is the initial value of\n // Intl.NumberFormat.\n\n availableLocales = this['[[availableLocales]]'],\n\n // 3. Let requestedLocales be the result of calling the CanonicalizeLocaleList\n // abstract operation (defined in 9.2.1) with argument locales.\n requestedLocales = CanonicalizeLocaleList(locales);\n\n // Restore the RegExp properties\n regexpState.exp.test(regexpState.input);\n\n // 4. Return the result of calling the SupportedLocales abstract operation\n // (defined in 9.2.8) with arguments availableLocales, requestedLocales,\n // and options.\n return SupportedLocales(availableLocales, requestedLocales, options);\n }, internals.NumberFormat),\n});\n\n/**\n * This named accessor property returns a function that formats a number\n * according to the effective locale and the formatting options of this\n * DateTimeFormat object.\n */\n/* 12.3.2 */defineProperty(Intl.DateTimeFormat.prototype, 'format', {\n configurable: true,\n get: GetFormatDateTime,\n});\n\ndefineProperty(Intl.DateTimeFormat.prototype, 'formatToParts', {\n configurable: true,\n get: GetFormatToPartsDateTime,\n});\n\nfunction GetFormatDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for format() is not an initialized Intl.DateTimeFormat object.');\n\n // The value of the [[Get]] attribute is a function that takes the following\n // steps:\n\n // 1. If the [[boundFormat]] internal property of this DateTimeFormat object\n // is undefined, then:\n if (internal['[[boundFormat]]'] === undefined) {\n // a. Let F be a Function object, with internal properties set as\n // specified for built-in functions in ES5, 15, or successor, and the\n // length property set to 0, that takes the argument date and\n // performs the following steps:\n let F = function () {\n // i. If date is not provided or is undefined, then let x be the\n // result as if by the expression Date.now() where Date.now is\n // the standard built-in function defined in ES5, 15.9.4.4.\n // ii. Else let x be ToNumber(date).\n // iii. Return the result of calling the FormatDateTime abstract\n // operation (defined below) with arguments this and x.\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatDateTime(this, x);\n };\n // b. Let bind be the standard built-in function object defined in ES5,\n // 15.3.4.5.\n // c. Let bf be the result of calling the [[Call]] internal method of\n // bind with F as the this value and an argument list containing\n // the single item this.\n let bf = fnBind.call(F, this);\n // d. Set the [[boundFormat]] internal property of this NumberFormat\n // object to bf.\n internal['[[boundFormat]]'] = bf;\n }\n // Return the value of the [[boundFormat]] internal property of this\n // NumberFormat object.\n return internal['[[boundFormat]]'];\n}\n\nfunction GetFormatToPartsDateTime() {\n let internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for formatToParts() is not an initialized Intl.DateTimeFormat object.');\n\n if (internal['[[boundFormatToParts]]'] === undefined) {\n let F = function () {\n let x = Number(arguments.length === 0 ? Date.now() : arguments[0]);\n return FormatToPartsDateTime(this, x);\n };\n let bf = fnBind.call(F, this);\n internal['[[boundFormatToParts]]'] = bf;\n }\n return internal['[[boundFormatToParts]]'];\n}\n\nfunction CreateDateTimeParts(dateTimeFormat, x) {\n // 1. If x is not a finite Number, then throw a RangeError exception.\n if (!isFinite(x))\n throw new RangeError('Invalid valid date passed to format');\n\n let internal = dateTimeFormat.__getInternalProperties(secret);\n\n // Creating restore point for properties on the RegExp object... please wait\n /* let regexpState = */createRegExpRestore(); // ###TODO: review this\n\n // 2. Let locale be the value of the [[locale]] internal property of dateTimeFormat.\n let locale = internal['[[locale]]'];\n\n // 3. Let nf be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {useGrouping: false}) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n let nf = new Intl.NumberFormat([locale], {useGrouping: false});\n\n // 4. Let nf2 be the result of creating a new NumberFormat object as if by the\n // expression new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping:\n // false}) where Intl.NumberFormat is the standard built-in constructor defined in\n // 11.1.3.\n let nf2 = new Intl.NumberFormat([locale], {minimumIntegerDigits: 2, useGrouping: false});\n\n // 5. Let tm be the result of calling the ToLocalTime abstract operation (defined\n // below) with x, the value of the [[calendar]] internal property of dateTimeFormat,\n // and the value of the [[timeZone]] internal property of dateTimeFormat.\n let tm = ToLocalTime(x, internal['[[calendar]]'], internal['[[timeZone]]']);\n\n // 6. Let result be the value of the [[pattern]] internal property of dateTimeFormat.\n let pattern = internal['[[pattern]]'];\n\n // 7.\n let result = new List();\n\n // 8.\n let index = 0;\n\n // 9.\n let beginIndex = pattern.indexOf('{');\n\n // 10.\n let endIndex = 0;\n\n // Need the locale minus any extensions\n let dataLocale = internal['[[dataLocale]]'];\n\n // Need the calendar data from CLDR\n let localeData = internals.DateTimeFormat['[[localeData]]'][dataLocale].calendars;\n let ca = internal['[[calendar]]'];\n\n // 11.\n while (beginIndex !== -1) {\n let fv;\n // a.\n endIndex = pattern.indexOf('}', beginIndex);\n // b.\n if (endIndex === -1) {\n throw new Error('Unclosed pattern');\n }\n // c.\n if (beginIndex > index) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(index, beginIndex),\n });\n }\n // d.\n let p = pattern.substring(beginIndex + 1, endIndex);\n // e.\n if (dateTimeComponents.hasOwnProperty(p)) {\n // i. Let f be the value of the [[

]] internal property of dateTimeFormat.\n let f = internal['[['+ p +']]'];\n // ii. Let v be the value of tm.[[

]].\n let v = tm['[['+ p +']]'];\n // iii. If p is \"year\" and v ≤ 0, then let v be 1 - v.\n if (p === 'year' && v <= 0) {\n v = 1 - v;\n }\n // iv. If p is \"month\", then increase v by 1.\n else if (p === 'month') {\n v++;\n }\n // v. If p is \"hour\" and the value of the [[hour12]] internal property of\n // dateTimeFormat is true, then\n else if (p === 'hour' && internal['[[hour12]]'] === true) {\n // 1. Let v be v modulo 12.\n v = v % 12;\n // 2. If v is 0 and the value of the [[hourNo0]] internal property of\n // dateTimeFormat is true, then let v be 12.\n if (v === 0 && internal['[[hourNo0]]'] === true) {\n v = 12;\n }\n }\n\n // vi. If f is \"numeric\", then\n if (f === 'numeric') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments nf and v.\n fv = FormatNumber(nf, v);\n }\n // vii. Else if f is \"2-digit\", then\n else if (f === '2-digit') {\n // 1. Let fv be the result of calling the FormatNumber abstract operation\n // with arguments nf2 and v.\n fv = FormatNumber(nf2, v);\n // 2. If the length of fv is greater than 2, let fv be the substring of fv\n // containing the last two characters.\n if (fv.length > 2) {\n fv = fv.slice(-2);\n }\n }\n // viii. Else if f is \"narrow\", \"short\", or \"long\", then let fv be a String\n // value representing f in the desired form; the String value depends upon\n // the implementation and the effective locale and calendar of\n // dateTimeFormat. If p is \"month\", then the String value may also depend\n // on whether dateTimeFormat has a [[day]] internal property. If p is\n // \"timeZoneName\", then the String value may also depend on the value of\n // the [[inDST]] field of tm.\n else if (f in dateWidths) {\n switch (p) {\n case 'month':\n fv = resolveDateString(localeData, ca, 'months', f, tm['[['+ p +']]']);\n break;\n\n case 'weekday':\n try {\n fv = resolveDateString(localeData, ca, 'days', f, tm['[['+ p +']]']);\n // fv = resolveDateString(ca.days, f)[tm['[['+ p +']]']];\n } catch (e) {\n throw new Error('Could not find weekday data for locale '+locale);\n }\n break;\n\n case 'timeZoneName':\n fv = ''; // ###TODO\n break;\n\n case 'era':\n try {\n fv = resolveDateString(localeData, ca, 'eras', f, tm['[['+ p +']]']);\n } catch (e) {\n throw new Error('Could not find era data for locale '+locale);\n }\n break;\n\n default:\n fv = tm['[['+ p +']]'];\n }\n }\n // ix\n arrPush.call(result, {\n type: p,\n value: fv,\n });\n // f.\n } else if (p === 'ampm') {\n // i.\n let v = tm['[[hour]]'];\n // ii./iii.\n fv = resolveDateString(localeData, ca, 'dayPeriods', v > 11 ? 'pm' : 'am', null);\n // iv.\n arrPush.call(result, {\n type: 'dayPeriod',\n value: fv,\n });\n // g.\n } else {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substring(beginIndex, endIndex + 1),\n });\n }\n // h.\n index = endIndex + 1;\n // i.\n beginIndex = pattern.indexOf('{', index);\n }\n // 12.\n if (endIndex < pattern.length - 1) {\n arrPush.call(result, {\n type: 'literal',\n value: pattern.substr(endIndex + 1),\n });\n }\n // 13.\n return result;\n}\n\n/**\n * When the FormatDateTime abstract operation is called with arguments dateTimeFormat\n * (which must be an object initialized as a DateTimeFormat) and x (which must be a Number\n * value), it returns a String value representing x (interpreted as a time value as\n * specified in ES5, 15.9.1.1) according to the effective locale and the formatting\n * options of dateTimeFormat.\n */\nexport function FormatDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = '';\n\n for (let part in parts) {\n result += parts[part].value;\n }\n return result;\n}\n\nfunction FormatToPartsDateTime(dateTimeFormat, x) {\n let parts = CreateDateTimeParts(dateTimeFormat, x);\n let result = [];\n for (let part in parts) {\n result.push({\n type: parts[part].type,\n value: parts[part].value,\n });\n }\n return result;\n}\n\n\n/**\n * When the ToLocalTime abstract operation is called with arguments date, calendar, and\n * timeZone, the following steps are taken:\n */\nfunction ToLocalTime(date, calendar, timeZone) {\n // 1. Apply calendrical calculations on date for the given calendar and time zone to\n // produce weekday, era, year, month, day, hour, minute, second, and inDST values.\n // The calculations should use best available information about the specified\n // calendar and time zone. If the calendar is \"gregory\", then the calculations must\n // match the algorithms specified in ES5, 15.9.1, except that calculations are not\n // bound by the restrictions on the use of best available information on time zones\n // for local time zone adjustment and daylight saving time adjustment imposed by\n // ES5, 15.9.1.7 and 15.9.1.8.\n // ###TODO###\n let d = new Date(date),\n m = 'get' + (timeZone || '');\n\n // 2. Return a Record with fields [[weekday]], [[era]], [[year]], [[month]], [[day]],\n // [[hour]], [[minute]], [[second]], and [[inDST]], each with the corresponding\n // calculated value.\n return new Record({\n '[[weekday]]': d[m + 'Day'](),\n '[[era]]' : +(d[m + 'FullYear']() >= 0),\n '[[year]]' : d[m + 'FullYear'](),\n '[[month]]' : d[m + 'Month'](),\n '[[day]]' : d[m + 'Date'](),\n '[[hour]]' : d[m + 'Hours'](),\n '[[minute]]' : d[m + 'Minutes'](),\n '[[second]]' : d[m + 'Seconds'](),\n '[[inDST]]' : false, // ###TODO###\n });\n}\n\n/**\n * The function returns a new object whose properties and attributes are set as if\n * constructed by an object literal assigning to each of the following properties the\n * value of the corresponding internal property of this DateTimeFormat object (see 12.4):\n * locale, calendar, numberingSystem, timeZone, hour12, weekday, era, year, month, day,\n * hour, minute, second, and timeZoneName. Properties whose corresponding internal\n * properties are not present are not assigned.\n */\n/* 12.3.3 */defineProperty(Intl.DateTimeFormat.prototype, 'resolvedOptions', {\n writable: true,\n configurable: true,\n value: function () {\n let prop,\n descs = new Record(),\n props = [\n 'locale', 'calendar', 'numberingSystem', 'timeZone', 'hour12', 'weekday',\n 'era', 'year', 'month', 'day', 'hour', 'minute', 'second', 'timeZoneName',\n ],\n internal = this !== null && typeof this === 'object' && getInternalProperties(this);\n\n // Satisfy test 12.3_b\n if (!internal || !internal['[[initializedDateTimeFormat]]'])\n throw new TypeError('`this` value for resolvedOptions() is not an initialized Intl.DateTimeFormat object.');\n\n for (let i = 0, max = props.length; i < max; i++) {\n if (hop.call(internal, prop = '[[' + props[i] + ']]'))\n descs[props[i]] = { value: internal[prop], writable: true, configurable: true, enumerable: true };\n }\n\n return objCreate({}, descs);\n },\n});\n","// Sect 13 Locale Sensitive Functions of the ECMAScript Language Specification\n// ===========================================================================\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport {\n FormatNumber,\n NumberFormatConstructor,\n} from \"./11.numberformat.js\";\n\nimport {\n ToDateTimeOptions,\n DateTimeFormatConstructor,\n FormatDateTime,\n} from \"./12.datetimeformat.js\";\n\nlet ls = Intl.__localeSensitiveProtos = {\n Number: {},\n Date: {},\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.2.1 */ls.Number.toLocaleString = function () {\n // Satisfy test 13.2.1_1\n if (Object.prototype.toString.call(this) !== '[object Number]')\n throw new TypeError('`this` value must be a number for Number.prototype.toLocaleString()');\n\n // 1. Let x be this Number value (as defined in ES5, 15.7.4).\n // 2. If locales is not provided, then let locales be undefined.\n // 3. If options is not provided, then let options be undefined.\n // 4. Let numberFormat be the result of creating a new object as if by the\n // expression new Intl.NumberFormat(locales, options) where\n // Intl.NumberFormat is the standard built-in constructor defined in 11.1.3.\n // 5. Return the result of calling the FormatNumber abstract operation\n // (defined in 11.3.2) with arguments numberFormat and x.\n return FormatNumber(new NumberFormatConstructor(arguments[0], arguments[1]), this);\n};\n\n/**\n * When the toLocaleString method is called with optional arguments locales and options,\n * the following steps are taken:\n */\n/* 13.3.1 */ls.Date.toLocaleString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"any\", and \"all\".\n options = ToDateTimeOptions(options, 'any', 'all');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleDateString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.2 */ls.Date.toLocaleDateString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleDateString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0],\n\n // 4. If options is not provided, then let options be undefined.\n options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"date\", and \"date\".\n options = ToDateTimeOptions(options, 'date', 'date');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\n/**\n * When the toLocaleTimeString method is called with optional arguments locales and\n * options, the following steps are taken:\n */\n/* 13.3.3 */ls.Date.toLocaleTimeString = function () {\n // Satisfy test 13.3.0_1\n if (Object.prototype.toString.call(this) !== '[object Date]')\n throw new TypeError('`this` value must be a Date instance for Date.prototype.toLocaleTimeString()');\n\n // 1. Let x be this time value (as defined in ES5, 15.9.5).\n let x = +this;\n\n // 2. If x is NaN, then return \"Invalid Date\".\n if (isNaN(x))\n return 'Invalid Date';\n\n // 3. If locales is not provided, then let locales be undefined.\n let locales = arguments[0];\n\n // 4. If options is not provided, then let options be undefined.\n let options = arguments[1];\n\n // 5. Let options be the result of calling the ToDateTimeOptions abstract\n // operation (defined in 12.1.1) with arguments options, \"time\", and \"time\".\n options = ToDateTimeOptions(options, 'time', 'time');\n\n // 6. Let dateTimeFormat be the result of creating a new object as if by the\n // expression new Intl.DateTimeFormat(locales, options) where\n // Intl.DateTimeFormat is the standard built-in constructor defined in 12.1.3.\n let dateTimeFormat = new DateTimeFormatConstructor(locales, options);\n\n // 7. Return the result of calling the FormatDateTime abstract operation (defined\n // in 12.3.2) with arguments dateTimeFormat and x.\n return FormatDateTime(dateTimeFormat, x);\n};\n\nexport default ls;\n","/**\n * @license Copyright 2013 Andy Earnshaw, MIT License\n *\n * Implements the ECMAScript Internationalization API in ES5-compatible environments,\n * following the ECMA-402 specification as closely as possible\n *\n * ECMA-402: http://ecma-international.org/ecma-402/1.0/\n *\n * CLDR format locale data should be provided using IntlPolyfill.__addLocaleData().\n */\n\nimport {\n defineProperty,\n hop,\n arrPush,\n arrShift,\n internals,\n} from \"./util.js\";\n\nimport {\n IsStructurallyValidLanguageTag,\n defaultLocale,\n setDefaultLocale,\n} from \"./6.locales-currencies-tz.js\";\n\nimport {\n Intl,\n} from \"./8.intl.js\";\n\nimport \"./11.numberformat.js\";\n\nimport \"./12.datetimeformat.js\";\n\nimport ls from \"./13.locale-sensitive-functions.js\";\n\ndefineProperty(Intl, '__applyLocaleSensitivePrototypes', {\n writable: true,\n configurable: true,\n value: function () {\n defineProperty(Number.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Number.toLocaleString });\n // Need this here for IE 8, to avoid the _DontEnum_ bug\n defineProperty(Date.prototype, 'toLocaleString', { writable: true, configurable: true, value: ls.Date.toLocaleString });\n\n for (let k in ls.Date) {\n if (hop.call(ls.Date, k))\n defineProperty(Date.prototype, k, { writable: true, configurable: true, value: ls.Date[k] });\n }\n },\n});\n\n/**\n * Can't really ship a single script with data for hundreds of locales, so we provide\n * this __addLocaleData method as a means for the developer to add the data on an\n * as-needed basis\n */\ndefineProperty(Intl, '__addLocaleData', {\n value: function (data) {\n if (!IsStructurallyValidLanguageTag(data.locale))\n throw new Error(\"Object passed doesn't identify itself with a valid language tag\");\n\n addLocaleData(data, data.locale);\n },\n});\n\nfunction addLocaleData (data, tag) {\n // Both NumberFormat and DateTimeFormat require number data, so throw if it isn't present\n if (!data.number)\n throw new Error(\"Object passed doesn't contain locale data for Intl.NumberFormat\");\n\n let locale,\n locales = [ tag ],\n parts = tag.split('-');\n\n // Create fallbacks for locale data with scripts, e.g. Latn, Hans, Vaii, etc\n if (parts.length > 2 && parts[1].length === 4)\n arrPush.call(locales, parts[0] + '-' + parts[2]);\n\n while ((locale = arrShift.call(locales))) {\n // Add to NumberFormat internal properties as per 11.2.3\n arrPush.call(internals.NumberFormat['[[availableLocales]]'], locale);\n internals.NumberFormat['[[localeData]]'][locale] = data.number;\n\n // ...and DateTimeFormat internal properties as per 12.2.3\n if (data.date) {\n data.date.nu = data.number.nu;\n arrPush.call(internals.DateTimeFormat['[[availableLocales]]'], locale);\n internals.DateTimeFormat['[[localeData]]'][locale] = data.date;\n }\n }\n\n // If this is the first set of locale data added, make it the default\n if (defaultLocale === undefined)\n setDefaultLocale(tag);\n}\n\nexport default Intl;\n","import IntlPolyfill from \"./core.js\";\n\n// hack to export the polyfill as global Intl if needed\nif (typeof Intl !== 'undefined') {\n try {\n Intl = IntlPolyfill;\n IntlPolyfill.__applyLocaleSensitivePrototypes();\n } catch (e) {\n // can be read only property\n }\n}\n\nexport default IntlPolyfill;\n"],"names":["log10Floor","n","Math","log10","floor","x","round","log","LOG10E","Number","Record","obj","k","hop","call","defineProperty","this","value","enumerable","writable","configurable","List","arguments","length","arrPush","apply","arrSlice","createRegExpRestore","esc","lm","RegExp","lastMatch","ml","multiline","ret","input","reg","has","cap","i","replace","_i","m","slice","indexOf","exp","arrJoin","toObject","arg","TypeError","Object","getInternalProperties","__getInternalProperties","secret","objCreate","setDefaultLocale","locale","toLatinUpperCase","str","ch","charAt","toUpperCase","IsStructurallyValidLanguageTag","expBCP47Syntax","test","expVariantDupes","expSingletonDupes","CanonicalizeLanguageTag","match","parts","toLowerCase","split","max","expExtSequences","sort","source","redundantTags","tags","_max","subtags","extLang","DefaultLocale","defaultLocale","IsWellFormedCurrencyCode","currency","c","String","normalized","expCurrencyCode","CanonicalizeLocaleList","locales","undefined","seen","O","len","Pk","kPresent","kValue","tag","RangeError","arrIndexOf","BestAvailableLocale","availableLocales","candidate","pos","lastIndexOf","substring","LookupMatcher","requestedLocales","availableLocale","noExtensionsLocale","expUnicodeExSeq","result","extension","extensionIndex","BestFitMatcher","ResolveLocale","options","relevantExtensionKeys","localeData","ReferenceError","matcher","r","foundLocale","extensionSubtags","extensionSubtagsLength","prototype","supportedExtension","key","foundLocaleData","keyLocaleData","supportedExtensionAddition","keyPos","requestedValue","valuePos","_valuePos","optionsValue","privateIndex","preExtension","postExtension","LookupSupportedLocales","subset","subsetArray","BestFitSupportedLocales","SupportedLocales","localeMatcher","P","GetOption","property","type","values","fallback","Boolean","GetNumberOption","minimum","maximum","isNaN","NumberFormatConstructor","Intl","InitializeNumberFormat","NumberFormat","numberFormat","internal","regexpState","opt","internals","dataLocale","s","cDigits","CurrencyDigits","cd","mnid","mnfdDefault","mnfd","mxfdDefault","mxfd","mnsd","minimumSignificantDigits","mxsd","maximumSignificantDigits","g","dataLocaleData","patterns","stylePatterns","positivePattern","negativePattern","es3","format","GetFormatNumber","currencyMinorUnits","babelHelpers","F","FormatNumber","bf","fnBind","FormatNumberToParts","PartitionNumberPattern","idx","part","nums","data","ild","symbols","latn","pattern","beginIndex","endIndex","nextIndex","Error","literal","[[type]]","[[value]]","p","nan","isFinite","_n2","ToRawPrecision","ToRawFixed","numSys","digits","digit","integer","fraction","decimalSepIndex","groupSepSymbol","group","groups","pgSize","primaryGroupSize","sgSize","secondaryGroupSize","end","start","integerGroup","arrShift","decimalSepSymbol","decimal","_n","infinity","plusSignSymbol","plusSign","minusSignSymbol","minusSign","percentSignSymbol","percentSign","currencies","_literal","_literal2","minPrecision","maxPrecision","e","Array","abs","f","LN10","cut","minInteger","minFraction","maxFraction","pow","toFixed","int","z","a","b","_z","isDateFormatOnly","tmKeys","hasOwnProperty","isTimeFormatOnly","dtKeys","joinDateAndTimeFormats","dateFormatObj","timeFormatObj","o","_","j","computeFinalPatterns","formatObj","pattern12","extendedPattern","$0","expPatternTrimmer","expDTComponentsMeta","era","year","quarter","month","week","day","weekday","hour12","hour","minute","second","timeZoneName","createDateTimeFormat","skeleton","unwantedDTCs","expDTComponents","createDateTimeFormats","formats","availableFormats","timeFormats","dateFormats","computed","timeRelatedFormats","dateRelatedFormats","push","full","medium","originalPattern","resolveDateString","ca","component","width","gregory","alts","resolved","DateTimeFormatConstructor","InitializeDateTimeFormat","DateTimeFormat","dateTimeFormat","ToDateTimeOptions","tz","timeZone","prop","dateTimeComponents","bestFormat","ToDateTimeFormats","BasicFormatMatcher","_hr","BestFitFormatMatcher","_prop","hr12","hourNo0","GetFormatDateTime","toString","required","defaults","opt2","create","needDefaults","removalPenalty","additionPenalty","longLessPenalty","longMorePenalty","shortLessPenalty","shortMorePenalty","bestScore","Infinity","score","optionsProp","formatProp","optionsPropIndex","formatPropIndex","delta","min","hour12Penalty","Date","now","FormatDateTime","GetFormatToPartsDateTime","FormatToPartsDateTime","CreateDateTimeParts","nf","useGrouping","nf2","minimumIntegerDigits","tm","ToLocalTime","index","calendars","fv","v","dateWidths","_v","substr","date","calendar","d","addLocaleData","number","nu","realDefineProp","sentinel","__defineGetter__","name","desc","get","search","t","proto","props","arrConcat","concat","join","shift","Function","bind","thisObj","fn","args","random","extlang","language","script","region","variant","singleton","privateuse","irregular","regular","grandfathered","langtag","getCanonicalLocales","ll","code","BYR","XOF","BIF","XAF","CLF","CLP","KMF","DJF","GNF","ISK","IQD","JPY","JOD","KRW","KWD","LYD","PYG","RWF","TND","UGX","UYI","VUV","VND","formatToParts","descs","narrow","short","long","ls","__localeSensitiveProtos","toLocaleString","toLocaleDateString","toLocaleTimeString","IntlPolyfill","__applyLocaleSensitivePrototypes"],"mappings":"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,SAAWvS,GAAY,SAAWyS,GAAa,KAKxD3V,GAAiBjC,OAAO,OAAOgY,GAAQ,IAAIJ,GAAW,IAAIG,GAAc,KAAM,KAG9E5V,GAAkBnC,OAAO,cAAc0X,GAAQ,+BAAgC,KAG/EtV,GAAoBpC,OAAO,cAAc2X,GAAU,2BAA4B,KAG/EhV,GAAkB3C,OAAO,IAAImF,GAAW,MCnFxC/B,UAMLN,uBAEgB,cACL,cACA,cACA,kBACI,cACJ,gBACG,aACH,cACA,cACA,cACA,eACC,cACA,iBACG,kBACA,kBACA,iBACD,iBACA,mBACE,iBACF,eACF,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,eACA,oBACK,yBACA,oBACL,eACA,eACA,mBAGN,QACA,QACA,QACA,QACA,QACA,YACI,eACF,QACF,QACA,QACA,QACA,SACC,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,qBAGC,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,YACP,MAAO,YACP,MAAO,WACP,MAAO,YACP,MAAO,WACP,MAAO,WACP,MAAO,YACP,MAAO,QAuJfY,GAAkB,aCjdlBuB,GAAkB,0BCfX+C,SAORiQ,oBAAsB,SAAUrU,MAE7BsU,GAAKvU,EAAuBC,GAGxBsB,SACC,GAAIiT,KAAQD,KACR5G,KAAK4G,EAAGC,UAEVjT,GCkBf,IAAM6E,SACG,EAAGqO,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,MAChE,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,MAChE,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAAGC,IAAK,EAejEza,IAAe+I,GAAM,8BACH,YACJ,QACHD,IAIX9I,GAAe+I,GAAKE,aAAc,uBACpB,IA+PFK,GAAUL,qEAEY,2BASlCjJ,GAAe+I,GAAKE,aAAc,oCAChB,YACJ,QACHkC,GAAOpL,KAAK,SAAU4E,OAGpB7E,GAAIC,KAAKE,KAAM,wBAChB,KAAM,IAAIiC,WAAU,gDAGpBkH,GAAcxI,MAGJL,UAAU,KAMDN,KAAK,0BAILyE,EAAuBC,YAGlC7C,IAAImB,KAAKmG,EAAYhI,OAK1B6G,EAAiB1C,EAAkBM,EAAkBS,IAC7DgD,GAAUL,gBAQLjJ,GAAe+I,GAAKE,aAAalC,UAAW,wBACtC,MACT8D,OA4CJ5B,aAAalC,UAAU2T,cAAgB,SAASxa,MAC/CiJ,GAAoB,OAATlJ,MAAiC,WAAhB8K,YAAO9K,OAAqBmC,EAAsBnC,UAC7EkJ,IAAaA,EAAS,+BACvB,KAAM,IAAIjH,WAAU,uFAEpB5C,GAAII,OAAOQ,SACRkL,GAAoBnL,KAAMX,GAgcnC,IAAIqN,WACO,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,cACvF,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC7F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,eACtF,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC9F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,cACvF,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC7F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,cACvF,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC7F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,WAC1F,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,IAAU,KAgBzF3M,IAAe+I,GAAKE,aAAalC,UAAW,iCACtC,YACJ,QACH,cACCwM,UACAoH,EAAQ,GAAIhb,GACZ+X,GACI,SAAU,kBAAmB,QAAS,WAAY,kBAClD,uBAAwB,wBAAyB,wBACjD,2BAA4B,2BAA4B,eAE5DvO,EAAoB,OAATlJ,MAAiC,WAAhB8K,YAAO9K,OAAqBmC,EAAsBnC,UAG7EkJ,IAAaA,EAAS,+BACvB,KAAM,IAAIjH,WAAU,0FAEnB,GAAIV,GAAI,EAAGiC,EAAMiU,EAAMlX,OAAYiD,EAAJjC,EAASA,IACrC1B,GAAIC,KAAKoJ,EAAUoK,EAAO,KAAMmE,EAAMlW,GAAI,QAC1CmZ,EAAMjD,EAAMlW,KAAQtB,MAAOiJ,EAASoK,GAAOnT,UAAU,EAAMC,cAAc,EAAMF,YAAY,UAG5FoC,OAAcoY,KCh6B7B,IAAI/I,IAAkB,4KAElBjB,GAAoB,qCAIpBgB,GAAe,kBAEf5B,IAAU,UAAW,MAAO,OAAQ,QAAS,MAAO,UAAW,WAC/DH,IAAU,OAAQ,SAAU,SAAU,SAAU,gBCgC9C4G,GAAajU,GAAU,MAAQqY,UAAWC,WAAUC,WA2C1D9a,IAAe+I,GAAM,gCACH,YACJ,QACHiK,IAIXhT,GAAegT,EAA2B,uBAC5B,GA8Pd,IAAIQ,cACgB,SAAU,QAAS,aACnB,SAAU,QAAS,cACnB,UAAW,kBACX,UAAW,UAAW,SAAU,QAAS,aACzC,UAAW,iBACX,UAAW,mBACX,UAAW,mBACX,UAAW,yBACX,QAAS,QAyXjBlK,IAAU4J,uEAEY,KAAM,2BASxClT,GAAe+I,GAAKmK,eAAgB,oCAClB,YACJ,QACH/H,GAAOpL,KAAK,SAAU4E,OAGpB7E,GAAIC,KAAKE,KAAM,wBAChB,KAAM,IAAIiC,WAAU,gDAGpBkH,GAAcxI,MAGJL,UAAU,KAMDN,KAAK,0BAILyE,EAAuBC,YAGlC7C,IAAImB,KAAKmG,EAAYhI,OAK1B6G,EAAiB1C,EAAkBM,EAAkBS,IAC7DgD,GAAUL;AAQLjJ,GAAe+I,GAAKmK,eAAenM,UAAW,wBACxC,MACTkN,IAGTjU,GAAe+I,GAAKmK,eAAenM,UAAW,+BAC5B,MACT4O,IAkUG3V,GAAe+I,GAAKmK,eAAenM,UAAW,6BAC5C,gBACI,QACP,cACCwM,UACAoH,EAAQ,GAAIhb,GACZ+X,GACI,SAAU,WAAY,kBAAmB,WAAY,SAAU,UAC/D,MAAO,OAAQ,QAAS,MAAO,OAAQ,SAAU,SAAU,gBAE/DvO,EAAoB,OAATlJ,MAAiC,WAAhB8K,YAAO9K,OAAqBmC,EAAsBnC,UAG7EkJ,IAAaA,EAAS,iCACvB,KAAM,IAAIjH,WAAU,4FAEnB,GAAIV,GAAI,EAAGiC,EAAMiU,EAAMlX,OAAYiD,EAAJjC,EAASA,IACrC1B,GAAIC,KAAKoJ,EAAUoK,EAAO,KAAOmE,EAAMlW,GAAK,QAC5CmZ,EAAMjD,EAAMlW,KAAQtB,MAAOiJ,EAASoK,GAAOnT,UAAU,EAAMC,cAAc,EAAMF,YAAY,UAG5FoC,OAAcoY,KC9lC7B,IAAII,IAAKhS,GAAKiS,2CEfd,IFwBYD,GAAGrb,OAAOub,eAAiB,cAEU,oBAAzC9Y,OAAO4E,UAAUmN,SAASnU,KAAKE,MAC/B,KAAM,IAAIiC,WAAU,6EAUjB+I,GAAa,GAAInC,GAAwBvI,UAAU,GAAIA,UAAU,IAAKN,OAOrE8a,GAAGvF,KAAKyF,eAAiB,cAEY,kBAAzC9Y,OAAO4E,UAAUmN,SAASnU,KAAKE,MAC/B,KAAM,IAAIiC,WAAU,+EAGpB5C,IAAKW,QAGL4I,MAAMvJ,GACN,MAAO,kBAGPqF,GAAUpE,UAAU,GAGpB+F,EAAU/F,UAAU,KAId6S,EAAkB9M,EAAS,MAAO,UAKxC6M,GAAiB,GAAIH,GAA0BrO,EAAS2B,SAIrDoP,GAAevC,EAAgB7T,IAO9Byb,GAAGvF,KAAK0F,mBAAqB,cAEQ,kBAAzC/Y,OAAO4E,UAAUmN,SAASnU,KAAKE,MAC/B,KAAM,IAAIiC,WAAU,mFAGpB5C,IAAKW,QAGL4I,MAAMvJ,GACN,MAAO,kBAGPqF,GAAUpE,UAAU,KAGdA,UAAU,KAIV6S,EAAkB9M,EAAS,OAAQ,WAKzC6M,GAAiB,GAAIH,GAA0BrO,EAAS2B,SAIrDoP,GAAevC,EAAgB7T,IAO9Byb,GAAGvF,KAAK2F,mBAAqB,cAEQ,kBAAzChZ,OAAO4E,UAAUmN,SAASnU,KAAKE,MAC/B,KAAM,IAAIiC,WAAU,mFAGpB5C,IAAKW,QAGL4I,MAAMvJ,GACN,MAAO,kBAGPqF,GAAUpE,UAAU,GAGpB+F,EAAU/F,UAAU,KAId6S,EAAkB9M,EAAS,OAAQ,WAKzC6M,GAAiB,GAAIH,GAA0BrO,EAAS2B,SAIrDoP,GAAevC,EAAgB7T,ICjH1CU,GAAe+I,GAAM,8CACP,gBACI,QACP,cACYrJ,OAAOqH,UAAW,kBAAoB3G,UAAU,EAAMC,cAAc,EAAMH,MAAO6a,GAAGrb,OAAOub,oBAE3FzF,KAAKzO,UAAW,kBAAoB3G,UAAU,EAAMC,cAAc,EAAMH,MAAO6a,GAAGvF,KAAKyF,qBAEjG,GAAIpb,KAAKkb,IAAGvF,KACT1V,GAAIC,KAAKgb,GAAGvF,KAAM3V,IAClBG,GAAewV,KAAKzO,UAAWlH,GAAKO,UAAU,EAAMC,cAAc,EAAMH,MAAO6a,GAAGvF,KAAK3V,QAUvGG,GAAe+I,GAAM,yBACV,SAAU0C,OACR1I,EAA+B0I,EAAKhJ,QACrC,KAAM,IAAIwJ,OAAM,qEAENR,EAAMA,EAAKhJ,WCzDb,mBAATsG,eAEIqS,MACMC,mCACf,MAAO1M"} \ No newline at end of file