unicode-input-toolconverter 0.2.0 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.nyc_output/out.json +8980 -1849
- package/CHANGES.md +15 -1
- package/README.md +6 -11
- package/_locales/en-US/messages.json +153 -6
- package/_locales/hu-HU/messages.json +153 -6
- package/_locales/pt-BR/messages.json +153 -6
- package/_locales/sv-SE/messages.json +153 -6
- package/babel.config.json +0 -1
- package/browser_action/characterSelection.js +18 -11
- package/browser_action/charrefConverters.js +286 -79
- package/browser_action/chartBuild.js +97 -27
- package/browser_action/encodingBehaviors.js +10 -7
- package/browser_action/entityBehaviors.js +42 -16
- package/browser_action/index-es.html +13 -1
- package/browser_action/index-instrumented.html +13 -1
- package/browser_action/index-pages.html +13 -1
- package/browser_action/index.html +13 -1
- package/browser_action/index.iife.min.js +9 -1
- package/browser_action/index.iife.min.js.map +1 -1
- package/browser_action/index.instrumented.iife.min.js +1 -1
- package/browser_action/index.instrumented.iife.min.js.map +1 -1
- package/browser_action/index.js +5 -5
- package/browser_action/preferences/prefDefaults.js +12 -3
- package/browser_action/service-worker/sw-activateCallback.js +1 -2
- package/browser_action/service-worker/sw-resources.json +6 -4
- package/browser_action/templateUtils/elements.js +12 -1
- package/browser_action/templateUtils/fill.js +6 -0
- package/browser_action/templateUtils/validation.js +4 -1
- package/browser_action/templates/chartBuild.js +167 -102
- package/browser_action/templates/index.js +227 -53
- package/browser_action/templatesElementCustomization/widgets.js +40 -15
- package/browser_action/unicode/UnicodeConverter.js +99 -73
- package/browser_action/unicode/charrefunicodeDb.js +100 -50
- package/browser_action/unicode/getScriptInfoForCodePoint.js +13 -4
- package/browser_action/unicode/hangul.js +27 -20
- package/browser_action/unicode/lastScriptNames.json +1 -1
- package/browser_action/unicode/parseUnihanFromTextFileStrings.js +44 -25
- package/browser_action/unicode/unicodeFieldInfo.js +112 -90
- package/browser_action/unicode/unicodeScripts.js +409 -35
- package/browser_action/unicode/unihan.js +4 -3
- package/browser_action/unicode/unihanDbPopulate.js +7 -2
- package/browser_action/unicode/unihanFields.js +34 -0
- package/browser_action/unicodecharref.js +353 -190
- package/browser_action/utils/DOMUtils.js +95 -34
- package/browser_action/utils/FetchUtils.js +7 -6
- package/browser_action/utils/TextUtils.js +4 -4
- package/browser_action/utils/TypedArrayUtils.js +9 -5
- package/browser_action/utils/semicolonSeparatedToArray.js +3 -3
- package/browser_action/utils/setupServiceWorker.js +2 -2
- package/eslint.config.js +11 -0
- package/icons/openWindow16.png +0 -0
- package/icons/openWindow24.png +0 -0
- package/lib/background.html +7 -0
- package/lib/background.js +2 -2
- package/package.json +80 -70
- package/pnpm-workspace.yaml +8 -0
- package/server.js +66 -51
- package/sw.js +97 -56
- package/tools/entities-import.js +4 -1
- package/tools/findEsResources.js +33 -10
- package/tools/fix-sw-resources-vendor-paths.js +60 -0
- package/tools/list-locales.js +2 -2
- package/tools/parseUnicodeCharts.js +126 -60
- package/tools/ucd-import.js +1 -10
- package/tools/unicode-charts.html +49 -20
- package/tools/unihan-import.js +45 -15
- package/tools/write-sw-version.js +16 -0
- package/tsconfig.json +23 -0
- package/typings/__coverage__.d.ts +5 -0
- package/typings/apple-system-profiler.d.ts +17 -0
- package/typings/commands.d.ts +19 -0
- package/typings/json-6.d.ts +4 -0
- package/typings/rollup-plugin-istanbul.d.ts +3 -0
- package/vendor/camelcase/index.d.ts +154 -0
- package/vendor/camelcase/index.js +137 -23
- package/vendor/fflate/esm/browser.d.ts +1539 -0
- package/vendor/fflate/esm/browser.js +82 -55
- package/vendor/intl-dom/dist/Formatter.d.ts +120 -0
- package/vendor/intl-dom/dist/Formatter.d.ts.map +1 -0
- package/vendor/intl-dom/dist/collation.d.ts +42 -0
- package/vendor/intl-dom/dist/collation.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultAllSubstitutions.d.ts +52 -0
- package/vendor/intl-dom/dist/defaultAllSubstitutions.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultInsertNodes.d.ts +96 -0
- package/vendor/intl-dom/dist/defaultInsertNodes.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultKeyCheckerConverter.d.ts +17 -0
- package/vendor/intl-dom/dist/defaultKeyCheckerConverter.d.ts.map +1 -0
- package/vendor/intl-dom/dist/defaultLocaleResolver.d.ts +285 -0
- package/vendor/intl-dom/dist/defaultLocaleResolver.d.ts.map +1 -0
- package/vendor/intl-dom/dist/findLocaleStrings.d.ts +88 -0
- package/vendor/intl-dom/dist/findLocaleStrings.d.ts.map +1 -0
- package/vendor/intl-dom/dist/getDOMForLocaleString.d.ts +67 -0
- package/vendor/intl-dom/dist/getDOMForLocaleString.d.ts.map +1 -0
- package/vendor/intl-dom/dist/getMessageForKeyByStyle.d.ts +73 -0
- package/vendor/intl-dom/dist/getMessageForKeyByStyle.d.ts.map +1 -0
- package/vendor/intl-dom/dist/getStringFromMessageAndDefaults.d.ts +26 -0
- package/vendor/intl-dom/dist/getStringFromMessageAndDefaults.d.ts.map +1 -0
- package/vendor/intl-dom/dist/i18n.d.ts +113 -0
- package/vendor/intl-dom/dist/i18n.d.ts.map +1 -0
- package/vendor/intl-dom/dist/index.d.ts +92 -0
- package/vendor/intl-dom/dist/index.d.ts.map +1 -0
- package/vendor/intl-dom/dist/index.esm.d.ts +34 -0
- package/vendor/intl-dom/dist/index.esm.js +854 -896
- package/vendor/intl-dom/dist/index.esm.min.js +4 -0
- package/vendor/intl-dom/dist/index.esm.min.js.map +1 -0
- package/vendor/intl-dom/dist/index.umd.js +2953 -0
- package/vendor/intl-dom/dist/index.umd.min.js +4 -0
- package/vendor/intl-dom/dist/index.umd.min.js.map +1 -0
- package/vendor/intl-dom/dist/promiseChainForValues.d.ts +34 -0
- package/vendor/intl-dom/dist/promiseChainForValues.d.ts.map +1 -0
- package/vendor/intl-dom/dist/shared.d.ts +20 -0
- package/vendor/intl-dom/dist/shared.d.ts.map +1 -0
- package/vendor/intl-dom/dist/utils.d.ts +53 -0
- package/vendor/intl-dom/dist/utils.d.ts.map +1 -0
- package/vendor/jamilih/dist/jml.d.mts +468 -0
- package/vendor/jamilih/dist/{jml-es.js → jml.mjs} +1489 -343
- package/vendor/jquery/dist/jquery.js +1677 -2713
- package/vendor/json-6/dist/index.mjs +2 -0
- package/vendor/miller-columns/CHANGES.md +185 -0
- package/vendor/miller-columns/LICENSE-MIT.txt +21 -0
- package/vendor/miller-columns/README.md +249 -0
- package/vendor/miller-columns/demos/index.html +69 -0
- package/vendor/miller-columns/demos/index.js +72 -0
- package/vendor/miller-columns/dist/index-es.js +748 -0
- package/vendor/miller-columns/dist/index-es.min.d.ts +25 -0
- package/vendor/miller-columns/dist/index-es.min.js +7 -1
- package/vendor/miller-columns/dist/index-umd.js +757 -0
- package/vendor/miller-columns/dist/index-umd.min.js +7 -0
- package/vendor/miller-columns/dist/index.d.ts +25 -0
- package/vendor/miller-columns/dist/millerColumns.d.ts +10 -0
- package/vendor/miller-columns/eslint.config.js +46 -0
- package/vendor/miller-columns/fix-declarations.js +18 -0
- package/vendor/miller-columns/miller-columns.css +24 -1
- package/vendor/miller-columns/package.json +73 -0
- package/vendor/miller-columns/pnpm-workspace.yaml +2 -0
- package/vendor/miller-columns/src/index.js +642 -0
- package/vendor/miller-columns/src/millerColumns.ts +12 -0
- package/vendor/miller-columns/tsconfig-prod.json +23 -0
- package/vendor/miller-columns/tsconfig.json +21 -0
- package/vendor/simple-prefs/dist/index.esm.d.ts +1 -0
- package/vendor/simple-prefs/dist/index.esm.js +164 -216
- package/vendor/simple-prefs/dist/simple-prefs.d.ts +117 -0
- package/lgtm.yml +0 -5
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).IntlDom={})}(this,(function(e){"use strict";function t(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function r(e,t,r,n,o,a,i){try{var u=e[a](i),s=u.value}catch(e){return void r(e)}u.done?t(s):Promise.resolve(s).then(n,o)}function n(e){return function(){var t=this,n=arguments;return new Promise((function(o,a){var i=e.apply(t,n);function u(e){r(i,o,a,u,s,"next",e)}function s(e){r(i,o,a,u,s,"throw",e)}u(void 0)}))}}function o(e,t,r){return t=c(t),function(e,t){if(t&&("object"==typeof t||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,[],c(e).constructor):t.apply(e,r))}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function i(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,w(n.key),n)}}function u(e,t,r){return t&&i(e.prototype,t),r&&i(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function s(e,t,r){return(t=w(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function l(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&d(e,t)}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(f=function(){return!!e})()}function p(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function y(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?p(Object(r),!0).forEach((function(t){s(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):p(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function h(){
|
|
2
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
3
|
+
var e,t,r="function"==typeof Symbol?Symbol:{},n=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,n,o,a){var s=n&&n.prototype instanceof u?n:u,c=Object.create(s.prototype);return v(c,"_invoke",function(r,n,o){var a,u,s,c=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:y,f:y.bind(e,4),d:function(t,r){return a=t,u=0,s=e,p.n=r,i}};function y(r,n){for(u=r,s=n,t=0;!f&&c&&!o&&t<l.length;t++){var o,a=l[t],y=p.p,h=a[2];r>3?(o=h===n)&&(s=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=e):a[0]<=y&&((o=r<2&&y<a[1])?(u=0,p.v=n,p.n=a[1]):y<h&&(o=r<3||a[0]>n||n>h)&&(a[4]=r,a[5]=n,p.n=h,u=0))}if(o||r>1)return i;throw f=!0,n}return function(o,l,h){if(c>1)throw TypeError("Generator is already running");for(f&&1===l&&y(l,h),u=l,s=h;(t=u<2?e:s)||!f;){a||(u?u<3?(u>1&&(p.n=-1),y(u,s)):p.n=s:p.v=s);try{if(c=2,a){if(u||(o="next"),t=a[o]){if(!(t=t.call(a,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,u<2&&(u=0)}else 1===u&&(t=a.return)&&t.call(a),u<2&&(s=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=e}else if((t=(f=p.n<0)?s:r.call(n,p))!==i)break}catch(t){a=e,u=1,s=t}finally{c=1}}return{value:t,done:f}}}(r,o,a),!0),c}var i={};function u(){}function s(){}function c(){}t=Object.getPrototypeOf;var l=[][n]?t(t([][n]())):(v(t={},n,(function(){return this})),t),f=c.prototype=u.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,c):(e.__proto__=c,v(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return s.prototype=c,v(f,"constructor",c),v(c,"constructor",s),s.displayName="GeneratorFunction",v(c,o,"GeneratorFunction"),v(f),v(f,o,"Generator"),v(f,n,(function(){return this})),v(f,"toString",(function(){return"[object Generator]"})),(h=function(){return{w:a,m:p}})()}function v(e,t,r,n){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,t,r,n){function a(t,r){v(e,t,(function(e){return this._invoke(t,r,e)}))}t?o?o(e,t,{value:r,enumerable:!n,configurable:!n,writable:!n}):e[t]=r:(a("next",0),a("throw",1),a("return",2))},v(e,t,r,n)}function d(e,t){return d=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},d(e,t)}function g(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,o,a,i,u=[],s=!0,c=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=a.call(r)).done)&&(u.push(n.value),u.length!==t);s=!0);}catch(e){c=!0,o=e}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(c)throw o}}return u}}(e,t)||S(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function b(e,t){return t||(t=e.slice(0)),Object.freeze(Object.defineProperties(e,{raw:{value:Object.freeze(t)}}))}function m(e){return function(e){if(Array.isArray(e))return t(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||S(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t);if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function S(e,r){if(e){if("string"==typeof e)return t(e,r);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?t(e,r):void 0}}function O(){O=function(e,t){return new r(e,void 0,t)};var e=RegExp.prototype,t=new WeakMap;function r(e,n,o){var a=RegExp(e,n);return t.set(a,o||t.get(e)),d(a,r.prototype)}function n(e,r){var n=t.get(r);return Object.keys(n).reduce((function(t,r){var o=n[r];if("number"==typeof o)t[r]=e[o];else{for(var a=0;void 0===e[o[a]]&&a+1<o.length;)a++;t[r]=e[o[a]]}return t}),Object.create(null))}return l(r,RegExp),r.prototype.exec=function(t){var r=e.exec.call(this,t);if(r){r.groups=n(r,this);var o=r.indices;o&&(o.groups=n(o,this))}return r},r.prototype[Symbol.replace]=function(r,o){if("string"==typeof o){var a=t.get(this);return e[Symbol.replace].call(this,r,o.replace(/\$<([^>]+)(>|$)/g,(function(e,t,r){if(""===r)return e;var n=a[t];return Array.isArray(n)?"$"+n.join("$"):"number"==typeof n?"$"+n:""})))}if("function"==typeof o){var i=this;return e[Symbol.replace].call(this,r,(function(){var e=arguments;return"object"!=typeof e[e.length-1]&&(e=[].slice.call(e)).push(n(e,i)),o.apply(this,e)}))}return e[Symbol.replace].call(this,r,o)},O.apply(this,arguments)}var E,j=globalThis.jsonExtra,D=function(e){return e.replaceAll(/\\+/g,(function(e){return e.slice(0,e.length/2)}))},k=function(e){return j.parse("{"+(e||"").replace(/^\{/,"").replace(/\}$/,"")+"}")},x=function(e,t,r){var n,o=r.onMatch,a=r.extra,i=r.betweenMatches,u=r.afterMatch,s=r.escapeAtOne;if(a&&(i=a,u=a,s=a),!i||!u)throw new Error("You must have `extra` or `betweenMatches` and `afterMatch` arguments.");for(var c=0;null!==(n=e.exec(t));){var l=g(n,2),f=l[0],p=l[1],y=e.lastIndex,h=y-f.length;h>c&&i(t.slice(c,h)),s&&p.length%2?(c=y,s(f)):(o.apply(void 0,m(n)),c=y)}c!==t.length&&u(t.slice(c))},T="undefined"!=typeof fetch?fetch:null,M=function(){return T},A="undefined"!=typeof document?document:null,R=function(){return A};var N,L,P,I,C=function(e,t,r){return t.sort(new Intl.Collator(e,r).compare)},B=function(e,t,r){return new Intl.ListFormat(e,r).format(t)},K=function(e,t,r,n,o){if("function"!=typeof r)return function(e,t,r,n){return C(e,t,n),B(e,t,r)}(e,t,r,n);C(e,t,o);var a,i=(a=Date.now(),"undefined"!=typeof performance&&"function"==typeof performance.now&&(a+=performance.now()),"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,(function(e){var t=Math.trunc((a+16*Math.random())%16);return a=Math.floor(a/16),("x"===e?t:3&t|8).toString(16)}))),u=m(t).map((function(e,t){return"<<".concat(i).concat(t,">>")})),s=[],c=function(e){s.push(e)};x(new RegExp(String.raw(E||(E=b(["<<","(d)>>"],["<<","(\\d)>>"])),i),"gv"),B(e,u,n),{betweenMatches:c,afterMatch:c,onMatch:function(e,n){c(r(t[Number(n)],Number(n)))}});var l=R().createDocumentFragment();return l.append.apply(l,s),l},U=function(e){var t=e.object;if(Array.isArray(t)){if("function"==typeof t[1]){var r=g(t,4);return{value:r[0],callback:r[1],options:r[2],extraOpts:r[3]}}var n=g(t,3);return{value:n[0],options:n[1],extraOpts:n[2]}}return{value:t}},_=function(e){var t,r=e.value,n=e.arg,o=e.locale;if("string"==typeof r||r&&"object"===F(r)&&"nodeType"in r)return r;var a=function(e){var r=e.type,o=e.options,a=void 0===o?t:o,i=e.checkArgOptions,u=void 0!==i&&i;if("string"==typeof n){var s=g(n.split("|",3),3),c=s[0],l=s[1],f=s[2];"DATE"===c&&(c="DATETIME"),c===r&&(l?u&&!f||(a=y(y({},a),k(u&&f?f:l))):a={})}return a},i=!1;if(r&&"object"===F(r)&&!Array.isArray(r)){var u=Object.keys(r)[0];if(["number","date","datetime","dateRange","datetimeRange","relative","region","language","script","currency","list","plural"].includes(u)){var s,c,l=r[u],f=U({object:l});switch(r=f.value,t=f.options,s=f.extraOpts,c=f.callback,u){case"date":case"datetime":i=!0;break;case"dateRange":case"datetimeRange":var p=new Intl.DateTimeFormat(o,a({type:"DATERANGE",options:s}));return p.formatRange.apply(p,m([r,t].map((function(e){return"number"==typeof e?new Date(e):e}))));case"region":case"language":case"script":case"currency":return new Intl.DisplayNames(o,y(y({},a({type:u.toUpperCase()})),{},{type:u})).of(r);case"relative":var h=[t,s];return s=h[0],t=h[1],new Intl.RelativeTimeFormat(o,a({type:"RELATIVE"})).format(r,s);case"list":return c?K(o,r,c,a({type:"LIST"}),a({type:"LIST",options:s,checkArgOptions:!0})):K(o,r,a({type:"LIST"}),a({type:"LIST",options:s,checkArgOptions:!0}))}}}if(r&&("number"==typeof r&&(i||/^DATE(?:TIME)(?:\||$)/.test(n))&&(r=new Date(r)),"object"===F(r)&&"getTime"in r&&"function"==typeof r.getTime))return new Intl.DateTimeFormat(o,a({type:"DATETIME"})).format(r);if(Array.isArray(r)){var v,d=r[2];return(v=new Intl.DateTimeFormat(o,a({type:"DATERANGE",options:d}))).formatRange.apply(v,m(r.slice(0,2).map((function(e){return"number"==typeof e?new Date(e):e}))))}if("number"==typeof r)return new Intl.NumberFormat(o,a({type:"NUMBER"})).format(r);throw new TypeError("Unknown formatter")},G=u((function e(){a(this,e)})),$=function(e){var t=e.key,r=e.body,n=e.type,o=e.messageStyle,a=q({messageStyle:void 0===o?"richNested":o})({body:r},t);if(!a)throw new Error("Key value not found for ".concat(n," key: (").concat(t,")"));return a.value},V=function(e){function t(e){var r;return a(this,t),(r=o(this,t)).locals=e,r}return l(t,e),u(t,[{key:"getSubstitution",value:function(e){return $({key:e.slice(1),body:this.locals,type:"local"})}},{key:"isMatch",value:function(e){var t=e.slice(1).split("."),r=this.locals;return this.constructor.isMatchingKey(e)&&t.every((function(e){var t=Object.hasOwn(r,e);return r=r[e],t}))}}],[{key:"isMatchingKey",value:function(e){return e.startsWith("-")}}])}(G),W=function(e){function t(e){var r;return a(this,t),(r=o(this,t)).substitutions=e,r}return l(t,e),u(t,[{key:"isMatch",value:function(e){return this.constructor.isMatchingKey(e)&&Object.hasOwn(this.substitutions,e)}}],[{key:"isMatchingKey",value:function(e){return/^[0-9A-Z_a-z]/.test(e)}}])}(G),z=function(e){function t(e,r){var n,i=r.substitutions;return a(this,t),(n=o(this,t)).switches=e,n.substitutions=i,n}return l(t,e),u(t,[{key:"getSubstitution",value:function(e,t){var r,n,o=t.locale,a=t.usedKeys,i=t.arg,u=t.missingSuppliedFormatters,s=this.constructor.getKey(e).slice(1),c=g(this.getMatch(s),3),l=c[0],f=c[1],p=c[2];if(a.push(p),l&&l.includes("|")){var h=g(l.split("|",3),3);r=h[1],n=h[2]}if(!f)return u({key:e,formatter:this}),String.raw(N||(N=b(["{"],["\\{"])))+e+"}";var v=function(e,t){var r=k(n);return new Intl.NumberFormat(o,y(y({},t),r)).format(e)},d=function(e,t){var r=k(n);return new Intl.PluralRules(o,y(y({},t),r)).select(e)},m=this.substitutions[p],w=m;if("number"==typeof m)switch(r){case"NUMBER":w=v(m);break;case"PLURAL":w=d(m);break;default:w=new Intl.PluralRules(o).select(m)}else if(m&&"object"===F(m)){var S=Object.keys(m)[0];if(["number","plural"].includes(S)){var O=U({object:m[S]}),E=O.value,j=O.options;if(r||(r=S.toUpperCase()),!(S.toUpperCase()===r))throw new TypeError('Expecting type "'.concat(r.toLowerCase(),'"; instead found "').concat(S,'".'));switch(r){case"NUMBER":w=v(E,j);break;case"PLURAL":w=d(E,j)}}}var D="richNested",x=function(e){return e.replaceAll("\\","\\\\").replaceAll(".",String.raw(L||(L=b(["."],["\\."]))))};try{return $({messageStyle:D,key:w?x(w):i,body:f,type:"switch"})}catch(e){try{return $({messageStyle:D,key:"*"+x(w),body:f,type:"switch"})}catch(e){var T=Object.keys(f).find((function(e){return e.startsWith("*")}));if(!T)throw new Error("No defaults found for switch ".concat(s),{cause:e});return $({messageStyle:D,key:x(T),body:f,type:"switch"})}}}},{key:"isMatch",value:function(e){return Boolean(e&&this.constructor.isMatchingKey(e)&&this.getMatch(e.slice(1)).length)}},{key:"getMatch",value:function(e){var t=this,r=e.split(".");return r.reduce((function(n,o,a){if(Array.isArray(n))return n;if(a<r.length-1){if(!Object.hasOwn(n,o))throw new Error('Switch key "'.concat(o,'" not found (from "~').concat(e,'")'));return n[o]}var i=Object.entries(n).find((function(e){var r=g(e,1)[0];return o===t.constructor.getKey(r)}));return i?[].concat(m(i),[o]):[]}),this.switches)}}],[{key:"isMatchingKey",value:function(e){return e.startsWith("~")}},{key:"getKey",value:function(e){var t=e.match(/^(?:[\0-\{\}-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*/);return t&&t[0]}}])}(G),J=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"Reached end of values array.";if(!Array.isArray(e))throw new TypeError("The `values` argument to `promiseChainForValues` must be an array.");if("function"!=typeof t)throw new TypeError("The `errBack` argument to `promiseChainForValues` must be a function.");return n(h().m((function n(){var o,a,i,u,s;return h().w((function(n){for(;;)switch(n.p=n.n){case 0:a=Promise.reject(new Error("Intentionally reject so as to begin checking chain"));case 1:return u=e.shift(),n.p=2,n.n=3,a;case 3:return o=n.v,n.a(3,7);case 4:if(n.p=4,s=n.v,!i){n.n=5;break}throw new Error(r,{cause:s});case 5:e.length||(i=!0),a=t(u);case 6:n.n=1;break;case 7:return n.a(2,o)}}),n,null,[[2,4]])})))()},Y=function(e,t){if("string"!=typeof e)throw new TypeError("`defaultLocaleResolver` expects a string `localesBasePath`.");if("string"!=typeof t)throw new TypeError("`defaultLocaleResolver` expects a string `locale`.");if(/[\.\/\\]/.test(t))throw new TypeError("Locales cannot use file-reserved characters, `.`, `/` or `\\`");return"".concat(e.replace(/\/$/,""),"/_locales/").concat(t,"/messages.json")},H=function(e){var t=e.string,r=e.dom,n=e.usedKeys,o=e.substitutions,a=e.allSubstitutions,i=e.locale,u=e.locals,s=e.switches,c=e.maximumLocalNestingDepth,l=void 0===c?3:c,f=e.missingSuppliedFormatters,p=e.checkExtraSuppliedFormatters;if("number"!=typeof l)throw new TypeError("`maximumLocalNestingDepth` must be a number.");var h=function(){Object.entries(o).forEach((function(e){var t=g(e,2),r=t[0];"function"==typeof t[1]&&n.push(r)}))};h();var v=new V(u),d=new W(o),b=new z(s,{substitutions:o}),w=/(\\*)\{((?:(?:[\0-\|~-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])|\\\})*?)(?:(\|)((?:[\0-\|~-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*))?\}/g;a&&(a=Array.isArray(a)?a:[a]);var S=function(e){var t,r=e.key,o=e.arg,u=e.substs;return v.constructor.isMatchingKey(r)?t=v.getSubstitution(r):b.constructor.isMatchingKey(r)?t=b.getSubstitution(r,{locale:i,usedKeys:n,arg:o,missingSuppliedFormatters:f}):"function"==typeof(t=u[r])&&(t=t({arg:o,key:r})),a?t=a.reduce((function(e,t){return t({value:e,arg:o,key:r,locale:i})}),t):o&&/^(?:NUMBER|DATE(?:TIME|RANGE|TIMERANGE)?|REGION|LANGUAGE|SCRIPT|CURRENCY|RELATIVE|LIST)(?:\||$)/.test(o)&&(t=_({value:t,arg:o,locale:i})),t},O=1,E=function(e){var t=e.substitution,r=e.ky,n=e.arg,a=e.processSubsts,i=t;if("string"==typeof t&&t.includes("{")){if(O++>l)throw new TypeError("Too much recursion in local variables.");if(v.constructor.isMatchingKey(r)){var u,s=o;n&&(u=k(n),s=y(y({},o),u)),i=a({str:t,substs:s,formatter:v}),u&&p({substitutions:u})}else b.constructor.isMatchingKey(r)&&(i=a({str:t}))}return i};if(!r){var j=!1,T=function(e){var t=e.str,r=e.substs,a=void 0===r?o:r,i=e.formatter,u=void 0===i?d:i;return t.replaceAll(w,(function(e,t,r,o,i){if(t.length%2)return e;if(f({key:r,formatter:u}))return e;var s=S({key:r,arg:i,substs:a});return s=E({substitution:s,ky:r,arg:i,processSubsts:T}),j||(j=null!==s&&"object"===F(s)&&"nodeType"in s),n.push(r),t+s}))},M=T({str:t});if(!j)return p({substitutions:o}),n.length=0,h(),D(M);n.length=0,h()}O=1;var A=function(e){var t=e.str,r=e.substs,a=void 0===r?o:r,i=e.formatter,u=void 0===i?d:i,s=[],c=new RegExp(w,"gv"),l=function(){s.push.apply(s,arguments)};return x(c,t,{extra:l,onMatch:function(e,t,r,o,i){if(f({key:r,formatter:u}))l(e);else{t.length&&l(t);var s=S({key:r,arg:i,substs:a});s=E({substitution:s,ky:r,arg:i,processSubsts:A}),Array.isArray(s)?l.apply(void 0,m(s)):s&&"object"===F(s)&&"nodeType"in s?l(s.cloneNode(!0)):l(s)}n.push(r)}}),s},R=A({str:t});return p({substitutions:o}),n.length=0,R.map((function(e){return"string"==typeof e?D(e):e}))},Z=function(e,t){if("string"==typeof t&&Array.isArray(e)&&e.every((function(e){return"string"==typeof e}))&&t.endsWith("Nested"))return e.map((function(e){return e.replaceAll(O(/(\\+)/g,{backslashes:1}),String.raw(P||(P=b(["$<backslashes>"],["\\$<backslashes>"])))).replaceAll(".",String.raw(I||(I=b(["."],["\\."]))))})).join(".");if("string"!=typeof e)throw new TypeError("`key` is expected to be a string (or array of strings for nested style)");return e},q=function(){var e=(arguments.length>0&&void 0!==arguments[0]?arguments[0]:{}).messageStyle,t=void 0===e?"richNested":e;return"function"==typeof t?t:"richNested"===t?function(e,t){var r=e&&"object"===F(e)&&e.body,n=[],o=function(e){n.length||(n[0]=""),n[n.length-1]+=e};x(/(\\*)\./g,t,{extra:o,onMatch:function(e,t){o(t),n.push("")}});var a=n.map((function(e){return D(e)})),i=!1,u=r;return a.some((function(e,t,r){return!u||"object"!==F(u)||(t===r.length-1&&Object.hasOwn(u,e)&&null!==u[e]&&"object"===F(u[e])&&"message"in u[e]&&"string"==typeof u[e].message&&(i={value:u[e].message,info:u[e]}),u=u[e],!1)})),i}:"rich"===t?function(e,t){var r=e&&"object"===F(e)&&e.body;return!!(r&&"object"===F(r)&&Object.hasOwn(r,t)&&null!==r[t]&&"object"===F(r[t])&&"message"in r[t]&&"string"==typeof r[t].message)&&{value:r[t].message,info:r[t]}}:"plain"===t?function(e,t){var r=e&&"object"===F(e)&&e.body;return!(!r||"object"!==F(r)||!Object.hasOwn(r,t)||null===r[t]||"string"!=typeof r[t])&&{value:r[t]}}:"plainNested"===t?function(e,t){var r=e&&"object"===F(e)&&e.body;if(r&&"object"===F(r)){var n=t.split(/(?<!\\)\./).reduce((function(e,t){return e&&"object"===F(e)&&e[t]?e[t]:null}),r);if(n&&"string"==typeof n)return{value:n}}return!1}:function(){throw new TypeError("Unknown `messageStyle` ".concat(t))}()},Q=function(e){var t,r=e.message,n=e.defaults,o=e.messageStyle,a=e.messageForKey,i=void 0===a?q({messageStyle:o}):a,u=e.key;if("string"==typeof r)t=r;else if(!1===n||null==n)t=!1;else{if(!n||"object"!==F(n))throw new TypeError("Default locale strings must resolve to `false`, nullish, or an object!");var s=i(n,u);t=s?s.value:s}if(!1===t)throw new Error("Key value not found for key: (".concat(u,")"));return t},X=function(e){var t=e.string,r=e.locale,n=e.locals,o=e.switches;e.maximumLocalNestingDepth;var a=e.allSubstitutions,i=void 0===a?[_]:a,u=e.insertNodes,s=void 0===u?H:u,c=e.substitutions,l=void 0!==c&&c,f=e.dom,p=void 0!==f&&f,y=e.forceNodeReturn,h=void 0!==y&&y,v=e.throwOnMissingSuppliedFormatters,d=void 0===v||v,g=e.throwOnExtraSuppliedFormatters,b=void 0===g||g;if("string"!=typeof t)throw new TypeError("An options object with a `string` property set to a string must be provided for `getDOMForLocaleString`.");var w=function(e){var t=R();return h?t.createTextNode(e):e};if(!l&&!i&&!d)return w(t);l||(l={});var F=[],S=s({string:t,dom:p,usedKeys:F,substitutions:l,allSubstitutions:i,locale:r,locals:n,switches:o,missingSuppliedFormatters:function(e){var t=e.key,r=e.formatter;if(!r.isMatch(t)&&r.constructor.isMatchingKey(t)){if(d)throw new Error("Missing formatting key: ".concat(t));return!0}return!1},checkExtraSuppliedFormatters:function(e){var t=e.substitutions;b&&Object.keys(t).forEach((function(e){if(!F.includes(e))throw new Error("Extra formatting key: ".concat(e))}))}});if("string"==typeof S)return w(S);var O=R().createDocumentFragment();return O.append.apply(O,m(S)),O},ee=function(e){if(!e.includes("-"))throw new Error("Locale not available");return e.replace(/-(?:[\0-,\.-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*$/,"")},te=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.locales,r=e.defaultLocales,n=e.localeResolver,o=e.localesBasePath,a=e.localeMatcher;return re({locales:t,defaultLocales:r,localeResolver:n,localesBasePath:o,localeMatcher:a})},re=function(){var e=n(h().m((function e(t){var r,o,a,i,u,s,c,l,f,p,y,v,d,g;return h().w((function(e){for(;;)switch(e.n){case 0:if(g=function(){return g=n(h().m((function e(t){var r,n,o,a,i,u;return h().w((function(e){for(;;)switch(e.p=e.n){case 0:if("string"==typeof t){e.n=1;break}throw new TypeError("Non-string locale type");case 1:if("string"==typeof(r=s(l,t))){e.n=2;break}throw new TypeError("`localeResolver` expected to resolve to (URL) string.");case 2:return e.p=2,n=M(),e.n=3,v?n(r,{method:"HEAD"}):n(r);case 3:if(404!==(o=e.v).status){e.n=4;break}throw new Error("Trying again");case 4:if(!v){e.n=5;break}return e.a(2,t);case 5:return e.n=6,o.json();case 6:return a=e.v,e.a(2,{locale:t,strings:a});case 7:if(e.p=7,"SyntaxError"!==(u=e.v).name){e.n=8;break}throw u;case 8:return e.n=9,p(t);case 9:return i=e.v,e.a(2,d(i))}}),e,null,[[2,7]])}))),g.apply(this,arguments)},d=function(e){return g.apply(this,arguments)},r=t.locales,o=void 0===r?"undefined"!=typeof intlDomLocale?[intlDomLocale]:"undefined"==typeof navigator?[]:navigator.languages:r,a=t.defaultLocales,i=void 0===a?["en-US"]:a,u=t.localeResolver,s=void 0===u?Y:u,c=t.localesBasePath,l=void 0===c?".":c,f=t.localeMatcher,p=void 0===f?"lookup":f,y=t.headOnly,v=void 0!==y&&y,"lookup"!==p){e.n=1;break}p=ee,e.n=2;break;case 1:if("function"==typeof p){e.n=2;break}throw new TypeError('`localeMatcher` must be "lookup" or a function!');case 2:return e.n=3,J([].concat(m(o),m(i)),d,"No matching locale found for "+[].concat(m(o),m(i)).join(", "));case 3:return e.a(2,e.v)}}),e)})));return function(t){return e.apply(this,arguments)}}(),ne=function(e){var t=e.strings,r=e.resolvedLocale,n=e.messageStyle,o=void 0===n?"richNested":n,a=e.allSubstitutions,i=e.insertNodes,u=e.keyCheckerConverter,s=void 0===u?Z:u,c=e.defaults,l=e.substitutions,f=e.maximumLocalNestingDepth,p=e.dom,h=void 0!==p&&p,v=e.forceNodeReturn,d=void 0!==v&&v,g=e.throwOnMissingSuppliedFormatters,b=void 0===g||g,m=e.throwOnExtraSuppliedFormatters,w=void 0===m||m;if(!t||"object"!==F(t))throw new TypeError("Locale strings must be an object!");var S=q({messageStyle:o}),O=function(e,n){var u=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},p=u.allSubstitutions,v=void 0===p?a:p,g=u.defaults,m=void 0===g?c:g,F=u.dom,O=void 0===F?h:F,E=u.forceNodeReturn,j=void 0===E?d:E,D=u.throwOnMissingSuppliedFormatters,k=void 0===D?b:D,x=u.throwOnExtraSuppliedFormatters,T=void 0===x?w:x;e=s(e,o);var M=S(t,e),A=Q({message:!(!M||"string"!=typeof M.value)&&M.value,defaults:m,messageForKey:S,key:e});return X({string:A,locals:t.head&&t.head.locals,switches:t.head&&t.head.switches,locale:r,maximumLocalNestingDepth:f,allSubstitutions:v,insertNodes:i,substitutions:y(y({},l),n),dom:O,forceNodeReturn:j,throwOnMissingSuppliedFormatters:k,throwOnExtraSuppliedFormatters:T})};return O.resolvedLocale=r,O.strings=t,O.sort=function(e,t){return C(r,e,t)},O.sortList=function(e,t,n,o){return K(r,e,t,n,o)},O.list=function(e,t){return B(r,e,t)},O},oe=function(){var e=n(h().m((function e(){var t,r,n,o,a,i,u,s,c,l,f,p,y,v,d,g,b,m,w,F,S,O,E,j=arguments;return h().w((function(e){for(;;)switch(e.n){case 0:return r=(t=j.length>0&&void 0!==j[0]?j[0]:{}).locales,n=t.defaultLocales,o=t.localeStringFinder,a=void 0===o?te:o,i=t.localesBasePath,u=t.localeResolver,s=t.localeMatcher,c=t.messageStyle,l=t.allSubstitutions,f=t.insertNodes,p=t.keyCheckerConverter,y=t.defaults,v=t.substitutions,d=t.maximumLocalNestingDepth,g=t.dom,b=t.forceNodeReturn,m=t.throwOnMissingSuppliedFormatters,w=t.throwOnExtraSuppliedFormatters,e.n=1,a({locales:r,defaultLocales:n,localeResolver:u,localesBasePath:i,localeMatcher:s});case 1:if(F=e.v,S=F.strings,O=F.locale,y||!n){e.n=3;break}return e.n=2,a({locales:n,defaultLocales:[],localeResolver:u,localesBasePath:i,localeMatcher:s});case 2:E=e.v,y=E.strings,E.locale===O&&(y=null);case 3:return e.a(2,ne({strings:S,resolvedLocale:O,messageStyle:c,allSubstitutions:l,insertNodes:f,keyCheckerConverter:p,defaults:y,substitutions:v,maximumLocalNestingDepth:d,dom:g,forceNodeReturn:b,throwOnMissingSuppliedFormatters:m,throwOnExtraSuppliedFormatters:w}))}}),e)})));return function(){return e.apply(this,arguments)}}();e.Formatter=G,e.LocalFormatter=V,e.RegularFormatter=W,e.SwitchFormatter=z,e.defaultAllSubstitutions=_,e.defaultInsertNodes=H,e.defaultKeyCheckerConverter=Z,e.defaultLocaleMatcher=ee,e.defaultLocaleResolver=Y,e.findLocale=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.locales,r=e.defaultLocales,n=e.localeResolver,o=e.localesBasePath,a=e.localeMatcher;return re({locales:t,defaultLocales:r,localeResolver:n,localesBasePath:o,localeMatcher:a,headOnly:!0})},e.findLocaleStrings=te,e.getDOMForLocaleString=X,e.getDocument=R,e.getFetch=M,e.getMatchingLocale=function(e){var t=e.locale,r=e.locales,n=e.localeMatcher,o=void 0===n?ee:n;try{for(;!r.includes(t);)t=o(t)}catch(e){return!1}return t},e.getMessageForKeyByStyle=q,e.getStringFromMessageAndDefaults=Q,e.i18n=oe,e.i18nServer=ne,e.parseJSONExtra=k,e.processRegex=x,e.promiseChainForValues=J,e.setDocument=function(e){A=e},e.setFetch=function(e){T=e},e.setJSONExtra=function(e){j=e},e.unescapeBackslashes=D}));
|
|
4
|
+
//# sourceMappingURL=index.umd.min.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.umd.min.js","sources":["../src/utils.js","../src/shared.js","../src/collation.js","../src/defaultAllSubstitutions.js","../src/Formatter.js","../src/promiseChainForValues.js","../src/defaultLocaleResolver.js","../src/defaultInsertNodes.js","../src/defaultKeyCheckerConverter.js","../src/getMessageForKeyByStyle.js","../src/getStringFromMessageAndDefaults.js","../src/getDOMForLocaleString.js","../src/findLocaleStrings.js","../src/i18n.js"],"sourcesContent":["/* eslint-disable unicorn/no-top-level-assignment-in-function -- Temporary */\n// We want it to work in the browser, so commenting out\n// import jsonExtra from 'json5';\n// import jsonExtra from 'json-6';\n\n/* eslint-disable jsdoc/reject-any-type -- Ok */\n/**\n * @typedef {any} JSON6\n */\n/**\n * @typedef {any} AnyValue\n */\n/* eslint-enable jsdoc/reject-any-type -- Ok */\n\n// Don't use ts-expect-error here, as result differs by tsconfig\n// @ts-ignore Need typing for JSON6\nlet _jsonExtra = globalThis.jsonExtra;\n\n/**\n * @param {JSON6} __jsonExtra\n */\nexport const setJSONExtra = (__jsonExtra) => {\n _jsonExtra = __jsonExtra;\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nexport const unescapeBackslashes = (str) => {\n return str.replaceAll(/\\\\+/gv, (esc) => {\n return esc.slice(0, esc.length / 2);\n });\n};\n\n/**\n * @param {string} args\n * @returns {AnyValue}\n */\nexport const parseJSONExtra = (args) => {\n return _jsonExtra.parse(\n // Doesn't actually currently allow explicit brackets,\n // but in case we change our regex to allow inner brackets\n '{' + (args || '').replace(/^\\{/v, '').replace(/\\}$/v, '') + '}'\n );\n};\n\n// Todo: Extract to own library (RegExtras?)\n\n/**\n * @callback BetweenMatches\n * @param {string} str\n * @returns {void}\n */\n\n/**\n * @callback AfterMatch\n * @param {string} str\n * @returns {void}\n */\n\n/**\n * @callback EscapeAtOne\n * @param {string} str\n * @returns {void}\n */\n\n/**\n * @param {RegExp} regex\n * @param {string} str\n * @param {{\n * onMatch: (...arg0: string[]) => void,\n * extra?: BetweenMatches|AfterMatch|EscapeAtOne\n * betweenMatches?: BetweenMatches,\n * afterMatch?: AfterMatch,\n * escapeAtOne?: EscapeAtOne\n * }} cfg\n */\nexport const processRegex = (regex, str, {\n onMatch,\n extra,\n betweenMatches,\n afterMatch,\n escapeAtOne\n}) => {\n if (extra) {\n betweenMatches = extra;\n afterMatch = extra;\n escapeAtOne = extra;\n }\n if (!betweenMatches || !afterMatch) {\n throw new Error(\n 'You must have `extra` or `betweenMatches` and `afterMatch` arguments.'\n );\n }\n let match;\n let previousIndex = 0;\n while ((match = regex.exec(str)) !== null) {\n const [_, esc] = match;\n const {lastIndex} = regex;\n\n const startMatchPos = lastIndex - _.length;\n if (startMatchPos > previousIndex) {\n betweenMatches(str.slice(previousIndex, startMatchPos));\n }\n\n if (escapeAtOne && esc.length % 2) {\n previousIndex = lastIndex;\n escapeAtOne(_);\n continue;\n }\n onMatch(...match);\n previousIndex = lastIndex;\n }\n if (previousIndex !== str.length) { // Get text at end\n afterMatch(str.slice(previousIndex));\n }\n};\n","/* globals document -- Polyglot variable */\n/* eslint-disable unicorn/no-top-level-assignment-in-function -- Necessary */\n/**\n * @typedef {(\n * input: RequestInfo|URL, init?: RequestInit\n * ) => Promise<Response>} Fetch\n */\n/**\n * @type {null|Fetch}\n */\nlet _fetch = typeof fetch !== 'undefined'\n ? fetch\n /* c8 ignore next -- Available in Node now too */\n : null;\n\n/**\n * @param {Fetch} f\n * @returns {void}\n */\nexport const setFetch = (f) => {\n _fetch = f;\n};\n\n/**\n * @returns {Fetch|null}\n */\nexport const getFetch = () => {\n return _fetch;\n};\n\n/** @type {Document|null} */\nlet _doc = typeof document !== 'undefined'\n /* c8 ignore next -- Not available by default in Node */\n ? document\n : null;\n\n/**\n * @param {Document} doc\n * @returns {void}\n */\nexport const setDocument = (doc) => {\n _doc = doc;\n};\n\n/**\n * @returns {Document|null}\n */\nexport const getDocument = () => {\n return _doc;\n};\n","import {processRegex} from './utils.js';\nimport {getDocument} from './shared.js';\n\nexport {setDocument, getDocument} from './shared.js';\n\n/**\n *\n * @returns {string}\n */\nfunction generateUUID () { // Adapted from original: public domain/MIT: https://stackoverflow.com/a/8809472/271577\n let d = Date.now();\n /* c8 ignore next 5 -- Available in Node */\n if (typeof performance !== 'undefined' &&\n typeof performance.now === 'function'\n ) {\n d += performance.now(); // use high-precision timer if available\n }\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replaceAll(/[xy]/gv, function (c) {\n /* eslint-disable no-bitwise, sonarjs/pseudo-random -- Convenient */\n const r = Math.trunc((d + (Math.random() * 16)) % 16);\n d = Math.floor(d / 16);\n return (c === 'x' ? r : ((r & 0x3) | 0x8)).toString(16);\n /* eslint-enable no-bitwise, sonarjs/pseudo-random -- Convenient */\n });\n}\n\n/**\n *\n * @param {string} locale\n * @param {string[]} arrayOfItems\n * @param {Intl.CollatorOptions|undefined} options\n * @returns {string[]}\n */\nexport const sort = (locale, arrayOfItems, options) => {\n // eslint-disable-next-line unicorn/no-array-sort -- Modifies\n return arrayOfItems.sort(new Intl.Collator(\n locale,\n options\n ).compare);\n};\n\n/**\n *\n * @param {string} locale\n * @param {string[]} arrayOfItems\n * @param {Intl.ListFormatOptions|undefined} [options]\n * @returns {string}\n */\nexport const list = (locale, arrayOfItems, options) => {\n return new Intl.ListFormat(\n locale, options\n ).format(arrayOfItems);\n};\n\n/**\n *\n * @param {string} locale\n * @param {string[]} arrayOfItems\n * @param {Intl.ListFormatOptions|undefined} [listOptions]\n * @param {Intl.CollatorOptions|undefined} [collationOptions]\n * @returns {string}\n */\nexport const sortListSimple = (\n locale, arrayOfItems, listOptions, collationOptions\n) => {\n sort(locale, arrayOfItems, collationOptions);\n return list(locale, arrayOfItems, listOptions);\n};\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n *\n * @param {string} locale\n * @param {string[]} arrayOfItems\n * @param {import('./index.js').SortListMapper|\n * Intl.ListFormatOptions|undefined} map\n * @param {Intl.ListFormatOptions|undefined} [listOptions]\n * @param {Intl.CollatorOptions|undefined} [collationOptions]\n * @returns {DocumentFragment|string}\n */\nexport const sortList = (\n locale, arrayOfItems, map, listOptions, collationOptions\n) => {\n if (typeof map !== 'function') {\n return sortListSimple(\n locale, /** @type {string[]} */ (arrayOfItems), map, listOptions\n );\n }\n sort(locale, arrayOfItems, collationOptions);\n\n const randomId = generateUUID();\n\n const placeholderArray = [...arrayOfItems].map(\n (_, i) => `<<${randomId}${i}>>`\n );\n\n /** @type {(string|Node)[]} */\n const nodes = [];\n\n /**\n * @param {string} arg\n * @returns {void}\n */\n const push = (arg) => {\n nodes.push(arg);\n };\n\n processRegex(\n // // eslint-disable-next-line prefer-named-capture-group\n new RegExp(String.raw`<<${randomId}(\\d)>>`, 'gv'),\n list(locale, placeholderArray, listOptions),\n {\n betweenMatches: push,\n afterMatch: push,\n onMatch (_, idx) {\n push(map(arrayOfItems[Number(idx)], Number(idx)));\n }\n }\n );\n const _doc = /** @type {Document} */ (getDocument());\n const container = _doc.createDocumentFragment();\n container.append(...nodes);\n return container;\n};\n","import {parseJSONExtra} from './utils.js';\nimport {sortList} from './collation.js';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @param {{\n * object: import('./defaultLocaleResolver.js').DateRangeValueArray|\n * import('./defaultLocaleResolver.js').ListValueArray|\n * import('./defaultLocaleResolver.js').RelativeValueArray|\n * import('./defaultLocaleResolver.js').ValueArray\n * }} cfg\n * @returns {{\n * value: number|string|string[]|Date,\n * options?: Intl.NumberFormatOptions|Intl.PluralRulesOptions|\n * string|Date|number,\n * extraOpts?: object,\n * callback?: (item: string, i: Integer) => Element\n * }}\n */\nexport const getFormatterInfo = ({object}) => {\n if (Array.isArray(object)) {\n if (typeof object[1] === 'function') {\n const [\n value, callback, options, extraOpts\n ] =\n /**\n * @type {[\n * string[], (item: string, i: Integer) => Element, object, object\n * ]}\n */ (object);\n return {value, callback, options, extraOpts};\n }\n const [value, options, extraOpts] = object;\n return {value, options, extraOpts};\n }\n return {value: object};\n};\n\n/**\n * Callback to give replacement text based on a substitution value.\n *\n * `value` - contains the value returned by the individual substitution.\n * `arg` - See `cfg.arg` of {@link SubstitutionCallback}.\n * `key` - The substitution key Not currently in use\n * `locale` - The locale.\n * @typedef {(info: {\n * value: import('./defaultLocaleResolver.js').SubstitutionObjectValue\n * arg?: string,\n * key?: string,\n * locale?: string\n * }) => string|Node} AllSubstitutionCallback\n */\n\n/**\n * @type {AllSubstitutionCallback}\n */\nexport const defaultAllSubstitutions = ({value, arg, /* , key */ locale}) => {\n // Strings or DOM Nodes\n if (\n typeof value === 'string' || (value && typeof value === 'object' &&\n 'nodeType' in value)\n ) {\n return value;\n }\n\n /** @type {object|string|Date|number|undefined} */\n let opts;\n\n /**\n * @param {{\n * type: string,\n * options?: object,\n * checkArgOptions?: boolean;\n * }} cfg\n * @returns {object|undefined}\n */\n const applyArgs = ({\n type,\n options = /** @type {object|undefined} */ (\n opts\n ),\n checkArgOptions = false\n }) => {\n if (typeof arg === 'string') {\n // eslint-disable-next-line prefer-const -- Convenient\n let [userType, extraArgs, argOptions] = arg.split('|', 3);\n // Alias\n if (userType === 'DATE') {\n userType = 'DATETIME';\n }\n if (userType === type) {\n if (!extraArgs) {\n options = {};\n } else if (!checkArgOptions || argOptions) {\n // Todo: Allow escaping and restoring of pipe symbol\n options = {\n ...options,\n ...parseJSONExtra(\n checkArgOptions && argOptions ? argOptions : extraArgs\n )\n };\n }\n }\n }\n return options;\n };\n\n let expectsDatetime = false;\n if (value && typeof value === 'object' && !Array.isArray(value)) {\n const singleKey = Object.keys(value)[0];\n /**\n * @typedef {\"number\"|\"date\"|\"datetime\"|\"dateRange\"|\n * \"datetimeRange\"|\"relative\"|\"region\"|\"language\"|\n * \"script\"|\"currency\"|\"list\"|\"plural\"} SpecialFormat\n */\n if ([\n 'number', 'date', 'datetime', 'dateRange', 'datetimeRange', 'relative',\n 'region', 'language', 'script', 'currency',\n 'list', 'plural'\n ].includes(singleKey)) {\n let extraOpts, callback;\n\n const obj = /** @type {unknown} */ (\n /** @type {Record<string, keyof SpecialFormat>} */\n (value)[\n /**\n * @type {SpecialFormat}\n */\n (singleKey)\n ]\n );\n\n ({\n value, options: opts, extraOpts, callback\n } = getFormatterInfo({\n object:\n /**\n * @type {import('./defaultLocaleResolver.js').DateRangeValueArray|\n * import('./defaultLocaleResolver.js').ListValueArray|\n * import('./defaultLocaleResolver.js').RelativeValueArray|\n * import('./defaultLocaleResolver.js').ValueArray\n * }\n */\n (obj)\n }));\n\n switch (singleKey) {\n case 'date': case 'datetime':\n expectsDatetime = true;\n break;\n case 'dateRange': case 'datetimeRange': {\n const dtf = new Intl.DateTimeFormat(\n locale,\n applyArgs({type: 'DATERANGE', options: extraOpts})\n );\n\n return dtf.formatRange(\n ...(\n /** @type {[Date, Date]} */\n ([\n /** @type {number|Date} */\n (value),\n /** @type {Date} */\n (opts)\n ].map((val) => {\n return typeof val === 'number' ? new Date(val) : val;\n }))\n )\n );\n } case 'region': case 'language': case 'script': case 'currency':\n return /** @type {string} */ (new Intl.DisplayNames(\n locale,\n {\n ...applyArgs({type: singleKey.toUpperCase()}),\n type: singleKey\n }\n ).of(/** @type {string} */ (value)));\n case 'relative':\n // The second argument actually contains the primary options, so swap\n // eslint-disable-next-line @stylistic/max-len -- Long\n [extraOpts, opts] = /** @type {[Intl.RelativeTimeFormatUnit, object?]} */ (\n [opts, extraOpts]\n );\n return new Intl.RelativeTimeFormat(\n locale, applyArgs({type: 'RELATIVE'})\n ).format(/** @type {number} */ (value), extraOpts);\n\n // ListFormat (with Collator)\n case 'list':\n if (callback) {\n return sortList(\n /** @type {string} */ (locale),\n /** @type {string[]} */\n (value),\n callback,\n applyArgs({type: 'LIST'}),\n applyArgs({\n type: 'LIST', options: extraOpts, checkArgOptions: true\n })\n );\n }\n return sortList(\n /** @type {string} */ (locale),\n /** @type {string[]} */\n (value),\n applyArgs({type: 'LIST'}),\n applyArgs({\n type: 'LIST', options: extraOpts, checkArgOptions: true\n })\n );\n default:\n // Let `number` and `date` types drop through so their options\n // can be applied\n // Let `plural` be treated as number (since value should be a number)\n break;\n }\n }\n }\n\n // Dates\n if (\n value\n ) {\n if (\n typeof value === 'number' &&\n (expectsDatetime || (/^DATE(?:TIME)(?:\\||$)/v).test(\n /** @type {string} */ (arg)\n ))\n ) {\n value = new Date(value);\n }\n if (typeof value === 'object' && 'getTime' in value &&\n typeof value.getTime === 'function') {\n return new Intl.DateTimeFormat(\n locale,\n applyArgs({type: 'DATETIME'})\n ).format(value);\n }\n }\n\n // Date range\n if (Array.isArray(value)) {\n const extraOpts = /** @type {Intl.DateTimeFormatOptions|undefined} */ (\n value[2]\n );\n return new Intl.DateTimeFormat(\n locale,\n applyArgs({type: 'DATERANGE', options: extraOpts})\n ).formatRange(...(\n /** @type {[Date, Date]} */\n (value.slice(0, 2).map((val) => {\n return typeof val === 'number' ? new Date(val) : val;\n }))\n ));\n }\n\n // Numbers\n if (typeof value === 'number') {\n return new Intl.NumberFormat(\n locale,\n applyArgs({type: 'NUMBER'})\n ).format(value);\n }\n\n // console.log('value', value);\n throw new TypeError('Unknown formatter');\n};\n","import {getMessageForKeyByStyle} from './index.js';\nimport {parseJSONExtra} from './utils.js';\nimport {getFormatterInfo} from './defaultAllSubstitutions.js';\n\n/**\n * Base class for formatting.\n */\nexport class Formatter {\n}\n\n/**\n * @param {object} cfg\n * @param {string} cfg.key\n * @param {import('./getMessageForKeyByStyle.js').LocaleBody} cfg.body\n * @param {string} cfg.type\n * @param {\"richNested\"|\"rich\"|\"plain\"|\n * \"plainNested\"|import('./getMessageForKeyByStyle.js').\n * MessageStyleCallback} [cfg.messageStyle]\n * @returns {string}\n */\nconst getSubstitution = ({key, body, type, messageStyle = 'richNested'}) => {\n const messageForKey = getMessageForKeyByStyle({messageStyle});\n const substitution = messageForKey({body}, key);\n if (!substitution) {\n throw new Error(`Key value not found for ${type} key: (${key})`);\n }\n // We don't allow a substitution function here or below as comes\n // from locale and locale content should not pose security concerns\n return substitution.value;\n};\n\n/**\n * Formatter for local variables.\n */\nexport class LocalFormatter extends Formatter {\n /**\n * @param {string} key\n * @returns {boolean}\n */\n static isMatchingKey (key) {\n return key.startsWith('-');\n }\n\n /**\n * @param {import('./getMessageForKeyByStyle.js').LocalObject} locals\n */\n constructor (locals) {\n super();\n this.locals = locals;\n }\n /**\n * @param {string} key\n * @returns {string|Element}\n */\n getSubstitution (key) {\n return getSubstitution({\n key: key.slice(1), body: this.locals, type: 'local'\n });\n }\n /**\n * @param {string} key\n * @returns {boolean}\n */\n isMatch (key) {\n const components = key.slice(1).split('.');\n /** @type {import('./getMessageForKeyByStyle.js').LocaleBody} */\n let parent = this.locals;\n return /** @type {typeof LocalFormatter} */ (\n this.constructor\n ).isMatchingKey(key) && components.every((cmpt) => {\n const result = Object.hasOwn(parent, cmpt);\n parent =\n /**\n * @type {import('./defaultLocaleResolver.js').\n * RichNestedLocaleStringBodyObject|\n * import('./defaultLocaleResolver.js').\n * PlainNestedLocaleStringBodyObject|\n * import('./defaultLocaleResolver.js').RichLocaleStringSubObject\n * }\n */ (\n /**\n * @type {import('./defaultLocaleResolver.js').\n * RichNestedLocaleStringBodyObject|\n * import('./defaultLocaleResolver.js').\n * PlainNestedLocaleStringBodyObject\n * }\n */ (parent)[cmpt]\n );\n return result;\n });\n }\n}\n\n/**\n * Formatter for regular variables.\n */\nexport class RegularFormatter extends Formatter {\n /**\n * @param {string} key\n * @returns {boolean}\n */\n static isMatchingKey (key) {\n return (/^\\w/v).test(key);\n }\n\n /**\n * @param {import('./defaultLocaleResolver.js').SubstitutionObject\n * } substitutions\n */\n constructor (substitutions) {\n super();\n this.substitutions = substitutions;\n }\n /**\n * @param {string} key\n * @returns {boolean}\n */\n isMatch (key) {\n return /** @type {typeof RegularFormatter} */ (\n this.constructor\n ).isMatchingKey(key) && Object.hasOwn(this.substitutions, key);\n }\n}\n\n/**\n * Formatter for switch variables.\n */\nexport class SwitchFormatter extends Formatter {\n /**\n * @param {string} key\n * @returns {boolean}\n */\n static isMatchingKey (key) {\n return key.startsWith('~');\n }\n /**\n * @param {string} key\n * @returns {string}\n */\n static getKey (key) {\n const match = key.match(/^[^\\|]*/v);\n return /** @type {string} */ (match && match[0]);\n }\n\n /**\n * @param {import('./defaultLocaleResolver.js').Switches} switches\n * @param {object} cfg\n * @param {import('./defaultLocaleResolver.js').\n * SubstitutionObject} cfg.substitutions\n */\n constructor (switches, {substitutions}) {\n super();\n this.switches = switches;\n this.substitutions = substitutions;\n }\n\n /**\n * @param {string} key\n * @param {object} cfg\n * @param {string} cfg.locale\n * @param {(string|undefined)[]} cfg.usedKeys\n * @param {string} cfg.arg\n * @param {import('./getDOMForLocaleString.js').\n * MissingSuppliedFormattersCallback} cfg.missingSuppliedFormatters\n * @returns {string}\n */\n getSubstitution (key, {locale, usedKeys, arg, missingSuppliedFormatters}) {\n const ky = /** @type {typeof SwitchFormatter} */ (\n this.constructor\n ).getKey(key).slice(1);\n // Expression might not actually use formatter, e.g., for singular,\n // the conditional might just write out \"one\"\n\n const [objKey, body, keySegment] = this.getMatch(ky);\n usedKeys.push(keySegment);\n\n let type;\n /** @type {string} */\n let opts;\n if (objKey && objKey.includes('|')) {\n [, type, opts] = objKey.split('|', 3);\n }\n if (!body) {\n missingSuppliedFormatters({\n key,\n formatter: this\n });\n return String.raw`\\{` + key + '}';\n }\n\n /*\n if (!(ky in this.substitutions)) {\n throw new Error(`Switch expecting formatter: ${ky}`);\n }\n */\n\n /**\n * @param {number} value\n * @param {Intl.NumberFormatOptions|undefined} [defaultOptions]\n * @returns {string}\n */\n const getNumberFormat = (value, defaultOptions) => {\n const numberOpts = parseJSONExtra(opts);\n return new Intl.NumberFormat(locale, {\n ...defaultOptions, ...numberOpts\n }).format(value);\n };\n\n /**\n * @param {number} value\n * @param {Intl.PluralRulesOptions|undefined} [defaultOptions]\n * @returns {Intl.LDMLPluralRule}\n */\n const getPluralFormat = (value, defaultOptions) => {\n const pluralOpts = parseJSONExtra(opts);\n return new Intl.PluralRules(locale, {\n ...defaultOptions, ...pluralOpts\n }).select(value);\n };\n const formatterValue = this.substitutions[\n /** @type {string} */ (keySegment)\n ];\n\n let match = formatterValue;\n if (typeof formatterValue === 'number') {\n switch (type) {\n case 'NUMBER':\n match = getNumberFormat(formatterValue);\n break;\n case 'PLURAL':\n match = getPluralFormat(formatterValue);\n break;\n default:\n match = new Intl.PluralRules(locale).select(formatterValue);\n break;\n }\n } else if (formatterValue && typeof formatterValue === 'object') {\n const singleKey = Object.keys(formatterValue)[0];\n if (['number', 'plural'].includes(singleKey)) {\n const {value, options} = getFormatterInfo({\n object:\n /**\n * @type {import('./defaultLocaleResolver.js').NumberInfo|\n * import('./defaultLocaleResolver.js').PluralInfo}\n */\n // @ts-expect-error Ok\n (formatterValue)[\n /** @type {\"number\"|\"plural\"} */ (singleKey)\n ]\n });\n if (!type) {\n type = singleKey.toUpperCase();\n }\n const typeMatches = singleKey.toUpperCase() === type;\n if (!typeMatches) {\n throw new TypeError(\n `Expecting type \"${\n type.toLowerCase()\n }\"; instead found \"${singleKey}\".`\n );\n }\n // eslint-disable-next-line default-case -- Just two cases\n switch (type) {\n case 'NUMBER':\n match = getNumberFormat(\n /** @type {number} */ (value),\n /** @type {Intl.NumberFormatOptions} */\n (options)\n );\n break;\n case 'PLURAL':\n match = getPluralFormat(\n /** @type {number} */ (value),\n /** @type {Intl.PluralRulesOptions} */\n (options)\n );\n break;\n }\n }\n }\n\n // We do not want the default `richNested` here as that will split\n // up the likes of `0.0`\n const messageStyle = 'richNested';\n\n /**\n * @param {string} s\n * @returns {string}\n */\n const preventNesting = (s) => {\n return s.replaceAll('\\\\', '\\\\\\\\').replaceAll('.', String.raw`\\.`);\n };\n\n try {\n return getSubstitution({\n messageStyle,\n key: match ? preventNesting(/** @type {string} */ (match)) : arg,\n body,\n type: 'switch'\n });\n } catch (err) {\n try {\n return getSubstitution({\n messageStyle,\n key: '*' +\n preventNesting(/** @type {string} */ (match)),\n body,\n type: 'switch'\n });\n } catch (error) {\n const k = Object.keys(body).find(\n (switchKey) => switchKey.startsWith('*')\n );\n if (!k) {\n throw new Error(`No defaults found for switch ${ky}`, {\n cause: error\n });\n }\n return getSubstitution({\n messageStyle, key: preventNesting(k), body, type: 'switch'\n });\n }\n }\n }\n\n /**\n * @param {string} key\n * @returns {boolean}\n */\n isMatch (key) {\n return Boolean(\n key && /** @type {typeof SwitchFormatter} */ (\n this.constructor\n ).isMatchingKey(key) &&\n this.getMatch(key.slice(1)).length\n );\n }\n\n /**\n * @typedef {[\n * objKey?: string,\n * body?: import('./getMessageForKeyByStyle.js').LocaleBody,\n * keySegment?: string\n * ]} SwitchMatch\n */\n\n /**\n * @typedef {number} Integer\n */\n\n /**\n * @param {string} ky\n * @returns {SwitchMatch}\n */\n getMatch (ky) {\n const ks = ky.split('.');\n const returnValue = /** @type {unknown} */ (ks.reduce(\n /**\n * @param {import('./defaultLocaleResolver.js').SwitchArrays|\n * import('./defaultLocaleResolver.js').SwitchArray|\n * import('./defaultLocaleResolver.js').SwitchCaseArray|SwitchMatch} obj\n * @param {string} k\n * @param {Integer} i\n * @throws {Error}\n * @returns {import('./defaultLocaleResolver.js').SwitchArrays|\n * import('./defaultLocaleResolver.js').SwitchArray|\n * import('./defaultLocaleResolver.js').SwitchCaseArray|\n * SwitchMatch}\n */\n (obj, k, i) => {\n if (Array.isArray(obj)) {\n return obj;\n }\n if (i < ks.length - 1) {\n if (!(Object.hasOwn(obj, k))) {\n throw new Error(`Switch key \"${k}\" not found (from \"~${ky}\")`);\n }\n return obj[k];\n }\n // Todo: Should throw on encountering duplicate fundamental keys (even\n // if there are different arguments, that should not be allowed)\n const ret = Object.entries(obj).find(([switchKey]) => {\n return k === /** @type {typeof SwitchFormatter} */ (\n this.constructor\n ).getKey(switchKey);\n });\n\n return ret ? [...ret, k] : [];\n },\n /**\n * @type {import('./defaultLocaleResolver.js').SwitchArrays|\n * import('./defaultLocaleResolver.js').SwitchArray|\n * import('./defaultLocaleResolver.js').SwitchCaseArray|SwitchMatch}\n */ (/** @type {unknown} */ (this.switches))\n ));\n\n return /** @type {SwitchMatch} */ (returnValue);\n }\n}\n","/* eslint-disable jsdoc/reject-any-type -- Generic API */\n/**\n * @typedef {(value: any) => Promise<any>|any} PromiseChainErrback\n */\n\n/**\n * The given array will have its items processed in series; if the supplied\n * `errBack` (which is guaranteed to run at least once), when passed the\n * current item, returns a `Promise` or value that resolves, that value will\n * be used for the return result of this function and no other items in\n * the array will continue to be processed; if it rejects, however, the\n * next item will be processed with `errBack`.\n * Accept an array of values to pass to an errback which should return\n * a promise (or final result value) which resolves to a result or which\n * rejects so that the next item in the array can be checked in series.\n * @param {Array<any>} values Array of values\n * @param {PromiseChainErrback} errBack Accepts an item of the array as its\n * single argument\n * @param {string} [errorMessage]\n * @returns {Promise<any>} Either resolves to a value derived from an item in\n * the array or rejects if all items reject\n * @example\npromiseChainForValues(['a', 'b', 'c'], (val) => {\n return new Promise(function (resolve, reject) {\n if (val === 'a') {\n reject(new Error('missing'));\n }\n setTimeout(() => {\n resolve(val);\n }, 100);\n });\n});\n */\nexport const promiseChainForValues = (\n values, errBack, errorMessage = 'Reached end of values array.'\n) => {\n if (!Array.isArray(values)) {\n throw new TypeError(\n 'The `values` argument to `promiseChainForValues` must be an array.'\n );\n }\n if (typeof errBack !== 'function') {\n throw new TypeError(\n 'The `errBack` argument to `promiseChainForValues` must be a function.'\n );\n }\n return (async () => {\n let ret;\n let p = Promise.reject(\n new Error('Intentionally reject so as to begin checking chain')\n );\n let breaking;\n while (true) {\n const value = values.shift();\n try {\n // eslint-disable-next-line no-await-in-loop -- Ok?\n ret = await p;\n break;\n } catch (err) {\n if (breaking) {\n throw new Error(errorMessage, {\n cause: err\n });\n }\n // We allow one more try\n if (!values.length) {\n breaking = true;\n }\n // // eslint-disable-next-line no-await-in-loop\n p = errBack(value);\n }\n }\n return ret;\n })();\n};\n","/**\n * `arg` - By default, accepts the third portion of the\n * `formattingRegex` within `insertNodes`, i.e., to allow the locale to\n * supply arguments back to the calling script.\n * `key` - The substitution key.\n * @callback SubstitutionCallback\n * @param {{\n * arg: string,\n * key: string\n * }} cfg\n * @returns {string|Element} The replacement text or element\n */\n\n/**\n * May have additional properties if supplying options to an underlying\n * formatter.\n * The first value is the main value.\n * The second are the options related to the main value.\n * The third are any additional options.\n * @typedef {[string|number|Date, object?, object?]} ValueArray\n */\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @typedef {[\n * string[],\n * (((item: string, i: Integer) => Element)|object)?,\n * object?,\n * object?\n * ]} ListValueArray\n */\n\n/**\n * @typedef {[\n * Date|number, Date|number, Intl.DateTimeFormatOptions|undefined\n * ]} DateRangeValueArray\n */\n\n/**\n * @typedef {[number, Intl.RelativeTimeFormatUnit, object?]} RelativeValueArray\n */\n\n/**\n * @typedef {object} RelativeTimeInfo\n * @property {RelativeValueArray} relative\n */\n\n/**\n * @typedef {object} ListInfo\n * @property {ListValueArray} list\n */\n\n/**\n * @typedef {object} NumberInfo\n * @property {ValueArray|number} number\n */\n\n/**\n * @typedef {object} DateInfo\n * @property {ValueArray} date\n */\n\n/**\n * @typedef {object} DateTimeInfo\n * @property {ValueArray} datetime\n */\n\n/**\n * @typedef {object} DateRangeInfo\n * @property {DateRangeValueArray} dateRange\n */\n\n/**\n * @typedef {object} DatetimeRangeInfo\n * @property {DateRangeValueArray} datetimeRange\n */\n\n/**\n * @typedef {object} RegionInfo\n * @property {ValueArray} region\n */\n\n/**\n * @typedef {object} LanguageInfo\n * @property {ValueArray} language\n */\n\n/**\n * @typedef {object} ScriptInfo\n * @property {ValueArray} script\n */\n\n/**\n * @typedef {object} CurrencyInfo\n * @property {ValueArray} currency\n */\n\n/**\n * @typedef {object} PluralInfo\n * @property {ValueArray} plural\n */\n\n/**\n * @typedef {{[key: string]: string}} PlainLocaleStringBodyObject\n */\n\n/**\n * @typedef {{\n * [key: string]: string|PlainNestedLocaleStringBodyObject\n * }} PlainNestedLocaleStringBodyObject\n */\n\n/**\n * @typedef {object} SwitchCaseInfo\n * @property {boolean} [default=false] Whether this conditional is the default\n */\n\n/**\n * Contains the type, the message, and optional info about the switch case.\n * @typedef {[string, string, SwitchCaseInfo?]} SwitchCaseArray\n */\n\n/**\n * @typedef {Record<string, SwitchCaseArray>} SwitchArray\n */\n\n/**\n * @typedef {Record<string, SwitchArray>} SwitchArrays\n */\n\n/**\n * @typedef {object} SwitchCase\n * @property {string} message The locale message with any formatting\n * place-holders; defaults to use of any single conditional\n * @property {string} [description] A description to add for translators\n */\n\n/**\n * @typedef {Record<string, SwitchCase>} SwitchGroup\n */\n\n/**\n * @typedef {Record<string, SwitchCase|SwitchGroup>} Switch\n */\n\n/**\n * @typedef {Record<string, Switch>} Switches\n */\n\n/**\n * @typedef {object} RichLocaleStringSubObject\n * @property {string} message The locale message with any formatting\n * place-holders; defaults to use of any single conditional\n * @property {string} [description] A description to add for translators\n * @property {Switches} [switches] Conditionals\n */\n\n/**\n * @typedef {{\n * [key: string]: RichLocaleStringSubObject\n * }} RichLocaleStringBodyObject\n */\n\n/**\n * @typedef {{\n * [key: string]: RichLocaleStringSubObject|RichNestedLocaleStringBodyObject\n * }} RichNestedLocaleStringBodyObject\n */\n\n/**\n * Takes a base path and locale and gives a URL.\n * @callback LocaleResolver\n * @param {string} localesBasePath (Trailing slash optional)\n * @param {string} locale BCP-47 language string\n * @returns {string|false} URL of the locale file to be fetched\n */\n\n/**\n * @typedef {[\n * Date|number, Date|number, (Intl.DateTimeFormatOptions|undefined)?\n * ]} DateRange\n */\n\n/**\n * @typedef {string|string[]|number|Date|DateRange|\n * Element|Node|SubstitutionCallback|\n * NumberInfo|PluralInfo|CurrencyInfo|LanguageInfo|ScriptInfo|\n * DatetimeRangeInfo|DateRangeInfo|RegionInfo|DateTimeInfo|DateInfo|\n * ListInfo|RelativeTimeInfo\n * } SubstitutionObjectValue\n */\n\n/**\n * @typedef {{\n * [key: string]: SubstitutionObjectValue\n * }} SubstitutionObject\n */\n\n/**\n * @type {LocaleResolver}\n */\nexport const defaultLocaleResolver = (localesBasePath, locale) => {\n if (typeof localesBasePath !== 'string') {\n throw new TypeError(\n '`defaultLocaleResolver` expects a string `localesBasePath`.'\n );\n }\n if (typeof locale !== 'string') {\n throw new TypeError(\n '`defaultLocaleResolver` expects a string `locale`.'\n );\n }\n if ((/[.\\/\\\\]/v).test(locale)) {\n throw new TypeError(\n 'Locales cannot use file-reserved characters, `.`, `/` or `\\\\`'\n );\n }\n return `${localesBasePath.replace(/\\/$/v, '')}/_locales/${locale}/messages.json`;\n};\n","import {\n LocalFormatter, RegularFormatter, SwitchFormatter\n} from './Formatter.js';\nimport {defaultAllSubstitutions} from './defaultAllSubstitutions.js';\nimport {unescapeBackslashes, parseJSONExtra, processRegex} from './utils.js';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @callback Replace\n * @param {{\n * str: string,\n * substs?: import('./defaultLocaleResolver.js').SubstitutionObject,\n * formatter?: import('./Formatter.js').RegularFormatter|\n * import('./Formatter.js').LocalFormatter|\n * import('./Formatter.js').SwitchFormatter\n * }} cfg\n * @returns {string}\n */\n\n/**\n * @callback ProcessSubstitutions\n * @param {{\n * str: string,\n * substs?: import('./defaultLocaleResolver.js').SubstitutionObject,\n * formatter?: import('./Formatter.js').RegularFormatter|\n * import('./Formatter.js').LocalFormatter|\n * import('./Formatter.js').SwitchFormatter\n * }} cfg\n * @returns {(string|Node)[]}\n */\n\n/**\n * Callback to return a string or array of nodes and strings based on\n * a localized string, substitutions object, and other metadata.\n *\n * `string` - The localized string.\n * `dom` - If substitutions known to contain DOM, can be set\n * to `true` to optimize.\n * `usedKeys` - Array for tracking which keys have been used. Defaults\n * to empty array.\n * `substitutions` - The formatting substitutions object.\n * `allSubstitutions` - The\n * callback or array composed thereof for applying to each substitution.\n * `locale` - The successfully resolved locale\n * `locals` - The local section.\n * `switches` - The switch section.\n * `maximumLocalNestingDepth` - Depth of local variable resolution to\n * check before reporting a recursion error. Defaults to 3.\n * `missingSuppliedFormatters` - Callback\n * supplied key to throw if the supplied key is present (if\n * `throwOnMissingSuppliedFormatters` is enabled). Defaults to no-op.\n * `checkExtraSuppliedFormatters` - No\n * argument callback to check if any formatters are not present in `string`\n * (if `throwOnExtraSuppliedFormatters` is enabled). Defaults to no-op.\n * @typedef {(cfg: {\n * string: string,\n * dom?: boolean,\n * usedKeys: string[],\n * substitutions: import('./defaultLocaleResolver.js').SubstitutionObject,\n * allSubstitutions?: ?(\n * import('./defaultAllSubstitutions.js').AllSubstitutionCallback|\n * import('./defaultAllSubstitutions.js').AllSubstitutionCallback[]\n * )\n * locale: string|undefined,\n * locals?: import('./getMessageForKeyByStyle.js').LocalObject|undefined,\n * switches: import('./defaultLocaleResolver.js').Switches|undefined,\n * maximumLocalNestingDepth?: Integer,\n * missingSuppliedFormatters: import('./getDOMForLocaleString.js').\n * MissingSuppliedFormattersCallback,\n * checkExtraSuppliedFormatters: import('./getDOMForLocaleString.js').\n * CheckExtraSuppliedFormattersCallback\n * }) => string|(Node|string)[]} InsertNodesCallback\n */\n\n/**\n * @type {InsertNodesCallback}\n */\nexport const defaultInsertNodes = ({\n string, dom, usedKeys, substitutions, allSubstitutions, locale,\n locals, switches,\n maximumLocalNestingDepth = 3,\n missingSuppliedFormatters,\n checkExtraSuppliedFormatters\n}) => {\n if (typeof maximumLocalNestingDepth !== 'number') {\n throw new TypeError('`maximumLocalNestingDepth` must be a number.');\n }\n\n const addFunctionKeys = () => {\n Object.entries(substitutions).forEach(([key, value]) => {\n if (typeof value === 'function') {\n usedKeys.push(key);\n }\n });\n };\n addFunctionKeys();\n\n const localFormatter = new LocalFormatter(\n /** @type {import('./getMessageForKeyByStyle.js').LocalObject} */ (locals)\n );\n const regularFormatter = new RegularFormatter(substitutions);\n const switchFormatter = new SwitchFormatter(\n /** @type {import('./defaultLocaleResolver.js').Switches} */\n (switches),\n {substitutions}\n );\n\n // eslint-disable-next-line prefer-named-capture-group -- Convenient for now\n const formattingRegex = /(\\\\*)\\{((?:[^\\}]|\\\\\\})*?)(?:(\\|)([^\\}]*))?\\}/gv;\n if (allSubstitutions) {\n allSubstitutions = Array.isArray(allSubstitutions)\n ? allSubstitutions\n : [allSubstitutions];\n }\n\n /**\n * @param {{\n * key: string,\n * arg: string,\n * substs: import('./defaultLocaleResolver.js').SubstitutionObject\n * }} cfg\n * @returns {string|Node}\n */\n const getSubstitution = ({key, arg, substs}) => {\n /** @type {import('./defaultLocaleResolver.js').SubstitutionObjectValue} */\n let substitution;\n const isLocalKey =\n /**\n * @type {typeof import('./Formatter.js').LocalFormatter}\n */ (\n localFormatter.constructor\n ).isMatchingKey(key);\n if (isLocalKey) {\n substitution = localFormatter.getSubstitution(key);\n } else if (\n /**\n * @type {typeof import('./Formatter.js').SwitchFormatter}\n */ (switchFormatter.constructor).isMatchingKey(key)\n ) {\n substitution = switchFormatter.getSubstitution(key, {\n\n locale: /** @type {string} */ (locale),\n usedKeys,\n arg,\n missingSuppliedFormatters\n });\n } else {\n substitution = substs[key];\n if (typeof substitution === 'function') {\n substitution = substitution({arg, key});\n }\n }\n // Todo: Could support resolving locals within arguments\n // Todo: Even for `null` `allSubstitutions`, we could have\n // a mode to throw for non-string/non-DOM (non-numbers?),\n // or whatever is not likely intended as a target for `toString()`.\n if (allSubstitutions) {\n substitution = /** @type {string|Node} */ (\n /**\n * @type {import('./defaultAllSubstitutions.js').\n * AllSubstitutionCallback[]\n * }\n */ (\n allSubstitutions\n ).reduce(\n /**\n * @param {import('./defaultLocaleResolver.js').\n * SubstitutionObjectValue} subst\n * @param {import('./defaultAllSubstitutions.js').\n * AllSubstitutionCallback} allSubst\n * @returns {string|Node}\n */\n (subst, allSubst) => {\n return allSubst({\n value: subst,\n arg,\n key,\n locale\n });\n }, substitution\n ));\n } else if (arg && (/^(?:NUMBER|DATE(?:TIME|RANGE|TIMERANGE)?|REGION|LANGUAGE|SCRIPT|CURRENCY|RELATIVE|LIST)(?:\\||$)/v).test(arg)) {\n substitution = defaultAllSubstitutions({\n value: substitution, arg, key, locale\n });\n }\n\n // Change this and return type if other substitutions possible\n return /** @type {string|Node} */ (substitution);\n };\n\n let recursiveLocalCount = 1;\n /**\n * @param {{\n * substitution: string|Node,\n * ky: string,\n * arg: string,\n * processSubsts: Replace|ProcessSubstitutions\n * }} cfg\n * @returns {number|string|Node|(string|Node)[]}\n */\n const checkLocalVars = ({substitution, ky, arg, processSubsts}) => {\n /** @type {number|string|Node|(string|Node)[]} */\n let subst = substitution;\n if (\n typeof substitution === 'string' &&\n substitution.includes('{')\n ) {\n if (recursiveLocalCount++ > maximumLocalNestingDepth) {\n throw new TypeError('Too much recursion in local variables.');\n }\n\n if (\n /** @type {typeof import('./Formatter.js').LocalFormatter} */ (\n localFormatter.constructor\n ).isMatchingKey(ky)\n ) {\n let extraSubsts = substitutions;\n let localFormatters;\n if (arg) {\n localFormatters = parseJSONExtra(arg);\n extraSubsts = {\n ...substitutions,\n ...localFormatters\n };\n }\n subst = processSubsts({\n str: substitution, substs: extraSubsts,\n formatter: localFormatter\n });\n if (localFormatters) {\n checkExtraSuppliedFormatters({substitutions: localFormatters});\n }\n } else if (\n /** @type {typeof import('./Formatter.js').SwitchFormatter} */\n (switchFormatter.constructor).isMatchingKey(ky)\n ) {\n subst = processSubsts({\n str: substitution\n });\n }\n }\n\n return subst;\n };\n\n // Give chance to avoid this block when known to contain DOM\n if (!dom) {\n // Run this block to optimize non-DOM substitutions\n let returnsDOM = false;\n\n /** @type {Replace} */\n const replace = ({\n str, substs = substitutions,\n formatter = regularFormatter\n }) => {\n return str.replaceAll(\n formattingRegex,\n /**\n * @param {string} _\n * @param {string} esc\n * @param {string} ky\n * @param {string} pipe\n * @param {string} arg\n * @returns {string}\n */\n (_, esc, ky, pipe, arg) => {\n if (esc.length % 2) {\n return _;\n }\n if (missingSuppliedFormatters({\n key: ky,\n formatter\n })) {\n return _;\n }\n /** @type {string|number|Node|(string|Node)[]} */\n let substitution = getSubstitution({key: ky, arg, substs});\n\n substitution = checkLocalVars({\n substitution, ky, arg, processSubsts: replace\n });\n\n returnsDOM ||= (substitution !== null &&\n typeof substitution === 'object' &&\n 'nodeType' in substitution);\n usedKeys.push(ky);\n return esc + substitution;\n }\n );\n };\n const ret = replace({str: string});\n if (!returnsDOM) {\n checkExtraSuppliedFormatters({substitutions});\n usedKeys.length = 0;\n addFunctionKeys();\n return unescapeBackslashes(ret);\n }\n usedKeys.length = 0;\n addFunctionKeys();\n }\n\n recursiveLocalCount = 1;\n\n /** @type {ProcessSubstitutions} */\n const processSubstitutions = ({\n str, substs = substitutions, formatter = regularFormatter\n }) => {\n /** @type {(string|Node)[]} */\n const nodes = [];\n\n // Copy to ensure we are resetting index on each instance (manually\n // resetting on `formattingRegex` is problematic with recursion that\n // uses the same regex copy)\n const regex = new RegExp(formattingRegex, 'gv');\n\n /**\n * @param {...(string|Node)} args\n */\n const push = (...args) => {\n nodes.push(...args);\n };\n\n processRegex(regex, str, {\n extra: push,\n onMatch (_, esc, ky, pipe, arg) {\n if (missingSuppliedFormatters({\n key: ky, formatter\n })) {\n push(_);\n } else {\n if (esc.length) {\n push(esc);\n }\n\n /** @type {string|number|Node|(string|Node)[]} */\n let substitution = getSubstitution({key: ky, arg, substs});\n substitution = checkLocalVars({\n substitution, ky, arg, processSubsts: processSubstitutions\n });\n if (Array.isArray(substitution)) {\n push(...substitution);\n } else if (\n // Clone so that multiple instances may be added (and no\n // side effects to user code)\n substitution && typeof substitution === 'object' &&\n 'nodeType' in substitution\n ) {\n push(substitution.cloneNode(true));\n } else {\n // Why no number here?\n push(/** @type {string} */ (substitution));\n }\n }\n usedKeys.push(ky);\n }\n });\n return nodes;\n };\n const nodes = processSubstitutions({str: string});\n\n checkExtraSuppliedFormatters({substitutions});\n usedKeys.length = 0;\n return nodes.map((node) => {\n if (typeof node === 'string') {\n return unescapeBackslashes(node);\n }\n return node;\n });\n};\n","/**\n * @callback KeyCheckerConverterCallback\n * @param {string|string[]} key By default may be an array (if the type ends\n * with \"Nested\") or a string, but a non-default validator may do otherwise.\n * @param {\"plain\"|\"plainNested\"|\"rich\"|\n * \"richNested\"|\n * import('./getMessageForKeyByStyle.js').MessageStyleCallback\n * } messageStyle\n * @throws {TypeError}\n * @returns {string} The converted (or unconverted) key\n */\n\n/**\n * @type {KeyCheckerConverterCallback}\n */\nexport const defaultKeyCheckerConverter = (key, messageStyle) => {\n if (typeof messageStyle === 'string' && Array.isArray(key) &&\n key.every((k) => {\n return typeof k === 'string';\n }) &&\n messageStyle.endsWith('Nested')\n ) {\n return key.map((k) => {\n return k.replaceAll(/(?<backslashes>\\\\+)/gv, String.raw`\\$<backslashes>`).\n replaceAll('.', String.raw`\\.`);\n }).join('.');\n }\n if (typeof key !== 'string') {\n throw new TypeError(\n '`key` is expected to be a string (or array of strings for nested style)'\n );\n }\n\n return key;\n};\n","import {unescapeBackslashes, processRegex} from './utils.js';\n\n/**\n * @typedef {LocaleBody} LocalObject\n */\n\n/**\n * May also contain language code and direction, translator name and\n * contact, etc., but no defaults currently apply besides reserving `locals`\n * @typedef {object} LocaleHead\n * @property {LocalObject} [locals]\n * @property {import('./defaultLocaleResolver.js').Switches} [switches]\n */\n\n/**\n * @typedef {import('./defaultLocaleResolver.js').\n * RichNestedLocaleStringBodyObject|\n * import('./defaultLocaleResolver.js').RichLocaleStringBodyObject|\n * import('./defaultLocaleResolver.js').PlainLocaleStringBodyObject|\n * import('./defaultLocaleResolver.js').PlainNestedLocaleStringBodyObject|\n * object\n * } LocaleBody\n */\n\n/**\n * @typedef {object} LocaleObject\n * @property {LocaleHead} [head]\n * @property {LocaleBody} body\n */\n\n/**\n * @typedef {object} MessageStyleCallbackResult\n * @property {string} value Regardless of message style, will contain\n * the string result\n * @property {import(\n * './defaultLocaleResolver.js'\n * ).RichLocaleStringSubObject} [info] Full info on the localized item\n * (for rich message styles only)\n */\n\n/**\n * @callback MessageStyleCallback\n * @param {LocaleObject} obj The exact\n * format depends on the `cfg.defaults` of `i18n`\n * @param {string} key\n * @returns {false|MessageStyleCallbackResult} If `false`, will resort to\n * default\n */\n\n/* eslint-disable @stylistic/max-len -- Long */\n/**\n * @param {object} [cfg]\n * @param {\"richNested\"|\"rich\"|\"plain\"|\"plainNested\"|MessageStyleCallback} [cfg.messageStyle]\n * @returns {MessageStyleCallback}\n */\nexport const getMessageForKeyByStyle = ({\n /* eslint-enable @stylistic/max-len -- Long */\n messageStyle = 'richNested'\n} = {}) => {\n return typeof messageStyle === 'function'\n ? messageStyle\n : (messageStyle === 'richNested'\n ? (mainObj, key) => {\n const obj =\n /**\n * @type {import('./defaultLocaleResolver.js').\n * RichNestedLocaleStringBodyObject\n * }\n */ (\n mainObj && typeof mainObj === 'object' && mainObj.body\n );\n\n /**\n * @type {string[]}\n */\n const keys = [];\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line prefer-named-capture-group -- Convenient for now\n const possiblyEscapedCharPattern = /(\\\\*)\\./gv;\n\n /**\n * @param {string} val\n * @returns {void}\n */\n const mergeWithPreviousOrStart = (val) => {\n if (!keys.length) {\n keys[0] = '';\n }\n keys[keys.length - 1] += val;\n };\n processRegex(possiblyEscapedCharPattern, key, {\n // If odd, this is just an escaped dot, so merge content with\n // any previous\n extra: mergeWithPreviousOrStart,\n onMatch (_, esc) {\n // If even, there are no backslashes, or they are just escaped\n // backslashes and not an escaped dot, so start anew, though\n // first merge any backslashes\n mergeWithPreviousOrStart(esc);\n keys.push('');\n }\n });\n const keysUnescaped = keys.map((ky) => {\n return unescapeBackslashes(ky);\n });\n\n /**\n * @type {false|{\n * value: string|undefined,\n * info: import('./defaultLocaleResolver.js').\n * RichLocaleStringSubObject\n * }}\n */\n let ret = false;\n let currObj = obj;\n\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line unicorn/no-unused-array-method-return -- Shortcircuiting\n keysUnescaped.some((ky, i, kys) => {\n if (!currObj || typeof currObj !== 'object') {\n return true;\n }\n if (\n // If specified key is too deep, we should fail\n i === kys.length - 1 && Object.hasOwn(currObj, ky) &&\n currObj[ky] !== null && typeof currObj[ky] === 'object' &&\n 'message' in currObj[ky] &&\n // NECESSARY FOR SECURITY ON UNTRUSTED LOCALES\n typeof currObj[ky].message === 'string'\n ) {\n ret = {\n value: /** @type {string} */ (currObj[ky].message),\n info:\n /**\n * @type {import('./defaultLocaleResolver.js').\n * RichLocaleStringSubObject}\n */ (currObj[ky])\n };\n }\n currObj =\n /**\n * @type {import('./defaultLocaleResolver.js').\n * RichNestedLocaleStringBodyObject\n * }\n */ (currObj[ky]);\n\n return false;\n });\n return ret;\n }\n : (messageStyle === 'rich'\n ? (mainObj, key) => {\n const obj =\n /**\n * @type {import('./defaultLocaleResolver.js').\n * RichLocaleStringBodyObject\n * }\n */ (mainObj && typeof mainObj === 'object' && mainObj.body);\n if (\n obj && typeof obj === 'object' &&\n Object.hasOwn(obj, key) && obj[key] !== null &&\n typeof obj[key] === 'object' &&\n 'message' in obj[key] &&\n // NECESSARY FOR SECURITY ON UNTRUSTED LOCALES\n typeof obj[key].message === 'string'\n ) {\n return {\n value: obj[key].message,\n info: obj[key]\n };\n }\n return false;\n }\n : (messageStyle === 'plain'\n ? (mainObj, key) => {\n const obj =\n /**\n * @type {import('./defaultLocaleResolver.js').\n * PlainLocaleStringBodyObject\n * }\n */ (\n mainObj && typeof mainObj === 'object' && mainObj.body\n );\n if (\n obj && typeof obj === 'object' &&\n Object.hasOwn(obj, key) && obj[key] !== null &&\n typeof obj[key] === 'string'\n ) {\n return {\n value: obj[key]\n };\n }\n return false;\n }\n : (messageStyle === 'plainNested'\n ? (mainObj, key) => {\n const obj =\n /**\n * @type {import('./defaultLocaleResolver.js').\n * PlainNestedLocaleStringBodyObject\n * }\n */ (\n mainObj && typeof mainObj === 'object' && mainObj.body\n );\n if (obj && typeof obj === 'object') {\n // Should really be counting that it is an odd number\n // of backslashes only\n const keys = key.split(/(?<!\\\\)\\./v);\n const value = keys.reduce(\n /**\n * @param {null|string|import('./defaultLocaleResolver.js').\n * PlainNestedLocaleStringBodyObject} o\n * @param {string} k\n * @returns {null|string|import('./defaultLocaleResolver.js').\n * PlainNestedLocaleStringBodyObject}\n */\n (o, k) => {\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line unicorn/no-computed-property-existence-check -- Ok\n if (o && typeof o === 'object' && o[k]) {\n return o[k];\n }\n return null;\n }, obj\n );\n if (value && typeof value === 'string') {\n return {value};\n }\n }\n return false;\n }\n : (() => {\n throw new TypeError(`Unknown \\`messageStyle\\` ${messageStyle}`);\n })()))\n )\n );\n};\n","import {getMessageForKeyByStyle} from './getMessageForKeyByStyle.js';\n\n/**\n * @param {object} cfg\n * @param {string|false} [cfg.message] If present, this string will be\n * the return value.\n * @param {false|null|undefined|\n * import('./getMessageForKeyByStyle.js').LocaleObject\n * } [cfg.defaults]\n * @param {\"richNested\"|\"rich\"|\"plain\"|\"plainNested\"|\n * import('./getMessageForKeyByStyle.js').MessageStyleCallback\n * } [cfg.messageStyle]\n * @param {import('./getMessageForKeyByStyle.js').\n * MessageStyleCallback\n * } [cfg.messageForKey] Defaults to getting `MessageStyleCallback` based\n * on `messageStyle`\n * @param {string} cfg.key Key to check against object of strings;\n * used to find a default if no string `message` is provided.\n * @returns {string}\n */\nexport const getStringFromMessageAndDefaults = ({\n message,\n defaults,\n messageStyle,\n messageForKey = getMessageForKeyByStyle({messageStyle}),\n key\n}) => {\n // NECESSARY CHECK FOR SECURITY ON UNTRUSTED LOCALES\n /** @type {string|false} */\n let str;\n if (typeof message === 'string') {\n str = message;\n } else if (\n // eslint-disable-next-line @stylistic/max-len -- Long\n // eslint-disable-next-line unicorn/prefer-includes-over-repeated-comparisons -- TS\n defaults === false || defaults === undefined || defaults === null\n ) {\n str = false;\n } else if (defaults && typeof defaults === 'object') {\n const msg = messageForKey(defaults, key);\n str = msg ? msg.value : msg;\n } else {\n throw new TypeError(\n `Default locale strings must resolve to \\`false\\`, ` +\n `nullish, or an object!`\n );\n }\n if (str === false) {\n throw new Error(`Key value not found for key: (${key})`);\n }\n return str;\n};\n","import {defaultAllSubstitutions} from './defaultAllSubstitutions.js';\nimport {defaultInsertNodes} from './defaultInsertNodes.js';\nimport {getDocument} from './shared.js';\n\nexport {setDocument, getDocument} from './shared.js';\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @callback CheckExtraSuppliedFormattersCallback\n * @param {import('./defaultLocaleResolver.js').SubstitutionObject|{\n * substitutions: import('./defaultLocaleResolver.js').SubstitutionObject\n * }} substs (Why is an arg. of `substitutions` being passed in?)\n * @throws {Error} Upon an extra formatting key being found\n * @returns {void}\n */\n\n/**\n * @typedef {(\n * cfg: {\n * key: string,\n * formatter: import('./Formatter.js').LocalFormatter|\n * import('./Formatter.js').RegularFormatter|\n * import('./Formatter.js').SwitchFormatter\n * }\n * ) => boolean} MissingSuppliedFormattersCallback\n */\n\n/**\n *\n * @param {object} cfg\n * @param {string} cfg.string\n * @param {string} [cfg.locale] The (possibly already resolved) locale\n * for use by configuring formatters\n * @param {import('./getMessageForKeyByStyle.js').LocalObject} [cfg.locals]\n * @param {import('./defaultLocaleResolver.js').Switches} [cfg.switches]\n * @param {Integer} [cfg.maximumLocalNestingDepth]\n * @param {?(import('./defaultAllSubstitutions.js').AllSubstitutionCallback|\n * import('./defaultAllSubstitutions.js').AllSubstitutionCallback[])\n * } [cfg.allSubstitutions]\n * @param {import('./defaultInsertNodes.js').InsertNodesCallback\n * } [cfg.insertNodes]\n * @param {false|import('./defaultLocaleResolver.js').SubstitutionObject\n * } [cfg.substitutions]\n * @param {boolean} [cfg.dom]\n * @param {boolean} [cfg.forceNodeReturn]\n * @param {boolean} [cfg.throwOnMissingSuppliedFormatters]\n * @param {boolean} [cfg.throwOnExtraSuppliedFormatters]\n * @returns {string|Text|DocumentFragment}\n */\nexport const getDOMForLocaleString = ({\n string,\n locale,\n locals,\n switches,\n // eslint-disable-next-line no-unused-vars -- Not currently used\n maximumLocalNestingDepth,\n allSubstitutions = [\n defaultAllSubstitutions\n ],\n insertNodes = defaultInsertNodes,\n substitutions = false,\n dom = false,\n forceNodeReturn = false,\n throwOnMissingSuppliedFormatters = true,\n throwOnExtraSuppliedFormatters = true\n}) => {\n if (typeof string !== 'string') {\n throw new TypeError(\n 'An options object with a `string` property set to a string must ' +\n 'be provided for `getDOMForLocaleString`.'\n );\n }\n\n /**\n * @param {string} str\n * @returns {Text|string}\n */\n const stringOrTextNode = (str) => {\n const _doc = getDocument();\n return forceNodeReturn\n ? /** @type {Document} */ (\n _doc\n ).createTextNode(str)\n : str;\n };\n\n if (\n !substitutions && !allSubstitutions &&\n !throwOnMissingSuppliedFormatters\n ) {\n return stringOrTextNode(string);\n }\n if (!substitutions) {\n substitutions = {};\n }\n\n /** @type {string[]} */\n const usedKeys = [];\n\n /**\n * @type {CheckExtraSuppliedFormattersCallback}\n */\n const checkExtraSuppliedFormatters = ({\n substitutions: substs\n }) => {\n if (throwOnExtraSuppliedFormatters) {\n Object.keys(substs).forEach((key) => {\n if (!usedKeys.includes(key)) {\n throw new Error(`Extra formatting key: ${key}`);\n }\n });\n }\n };\n\n /**\n * @type {MissingSuppliedFormattersCallback}\n */\n const missingSuppliedFormatters = ({\n key, formatter\n }) => {\n const matching = formatter.isMatch(key);\n if (\n !matching &&\n /**\n * @type {typeof import('./Formatter.js').LocalFormatter|\n * typeof import('./Formatter.js').RegularFormatter|\n * typeof import('./Formatter.js').SwitchFormatter}\n */ (\n formatter.constructor\n ).isMatchingKey(key)\n ) {\n if (throwOnMissingSuppliedFormatters) {\n throw new Error(`Missing formatting key: ${key}`);\n }\n return true;\n }\n return false;\n };\n\n const nodes = insertNodes({\n string, dom, usedKeys, substitutions, allSubstitutions, locale,\n locals,\n switches,\n missingSuppliedFormatters,\n checkExtraSuppliedFormatters\n });\n if (typeof nodes === 'string') {\n return stringOrTextNode(nodes);\n }\n\n const _doc = getDocument();\n const container = /** @type {Document} */ (_doc).createDocumentFragment();\n container.append(...nodes);\n\n return container;\n};\n","/* globals intlDomLocale -- Allow global setting */\n\nimport {defaultLocaleResolver} from './defaultLocaleResolver.js';\nimport {promiseChainForValues} from './promiseChainForValues.js';\nimport {getFetch} from './shared.js';\n\nexport {setFetch, getFetch} from './shared.js';\n\n/**\n * Takes a locale and returns a new locale to check.\n * @callback LocaleMatcher\n * @param {string} locale The failed locale\n * @throws {Error} If there are no further hyphens left to check\n * @returns {string|Promise<string>} The new locale to check\n */\n\n/**\n * @type {LocaleMatcher}\n */\nexport const defaultLocaleMatcher = (locale) => {\n if (!locale.includes('-')) {\n throw new Error('Locale not available');\n }\n // Try without hyphen, i.e., the \"lookup\" algorithm:\n // See https://tools.ietf.org/html/rfc4647#section-3.4 and\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl\n return locale.replace(/-[^\\-]*$/v, '');\n};\n\n/**\n * @param {object} cfg\n * @param {string} cfg.locale\n * @param {string[]} cfg.locales\n * @param {LocaleMatcher} [cfg.localeMatcher]\n * @returns {string|false}\n */\nexport const getMatchingLocale = ({\n locale, locales, localeMatcher = defaultLocaleMatcher\n}) => {\n try {\n while (!locales.includes(locale)) {\n // Catch as `defaultLocaleMatcher` will throw if no hyphen found\n locale = localeMatcher(locale);\n }\n } catch (err) {\n return false;\n }\n return locale;\n};\n\n/**\n * @typedef {object} LocaleObjectInfo\n * @property {import('./getMessageForKeyByStyle.js').\n * LocaleObject} strings The successfully retrieved locale strings\n * @property {string} locale The successfully resolved locale\n */\n\n/**\n * @typedef {{\n * locales?: string[],\n * defaultLocales?: string[],\n * localesBasePath?: string,\n * localeResolver?: import('./defaultLocaleResolver.js').LocaleResolver,\n * localeMatcher?: \"lookup\"|LocaleMatcher\n * }} LocaleStringArgs\n */\n\n/**\n * `locales` - BCP-47 language strings. Defaults to `navigator.languages`.\n * `defaultLocales` - Defaults to [\"en-US\"].\n * `localesBasePath` - Defaults to `.`.\n * `localeResolver` - Defaults to `defaultLocaleResolver`.\n * @typedef {(\n * cfg?: LocaleStringArgs\n * ) => Promise<LocaleObjectInfo>} LocaleStringFinder\n */\n\n/**\n *\n * @type {LocaleStringFinder}\n */\nexport const findLocaleStrings = ({\n locales,\n defaultLocales,\n localeResolver,\n localesBasePath,\n localeMatcher\n} = {}) => {\n return /** @type {Promise<LocaleObjectInfo>} */ (_findLocale({\n locales, defaultLocales, localeResolver, localesBasePath, localeMatcher\n }));\n};\n\n/**\n * Resolves to the successfully resolved locale.\n * `locales` - BCP-47 language strings. Defaults to `navigator.languages`.\n * `defaultLocales` - Defaults to [\"en-US\"].\n * `localesBasePath` - Defaults to `.`.\n * `localeResolver` - Defaults to `defaultLocaleResolver`.\n * `localeMatcher`.\n * @typedef {(cfg?: LocaleStringArgs) => Promise<string>} LocaleFinder\n */\n\n/**\n *\n * @type {LocaleFinder}\n */\nexport const findLocale = ({\n locales,\n defaultLocales,\n localeResolver,\n localesBasePath,\n localeMatcher\n} = {}) => {\n return /** @type {Promise<string>} */ (_findLocale({\n locales, defaultLocales, localeResolver, localesBasePath, localeMatcher,\n headOnly: true\n }));\n};\n\n/**\n * @type {(\n * cfg: LocaleStringArgs & {\n * headOnly?: boolean\n * }\n * ) => Promise<string|LocaleObjectInfo>} Also has a `headOnly` boolean\n * property to determine whether to make a simple HEAD and resolve to\n * the locale rather than locale and contents\n */\nconst _findLocale = async ({\n locales = typeof intlDomLocale !== 'undefined'\n ? [intlDomLocale]\n : typeof navigator === 'undefined' ? [] : navigator.languages,\n defaultLocales = ['en-US'],\n localeResolver = defaultLocaleResolver,\n localesBasePath = '.',\n localeMatcher = 'lookup',\n headOnly = false\n}) => {\n /**\n * @callback getLocale\n * @throws {SyntaxError|TypeError|Error}\n * @param {string} locale\n * @returns {Promise<LocaleObjectInfo|string>}\n */\n async function getLocale (locale) {\n if (typeof locale !== 'string') {\n throw new TypeError('Non-string locale type');\n }\n const url = localeResolver(localesBasePath, locale);\n if (typeof url !== 'string') {\n throw new TypeError(\n '`localeResolver` expected to resolve to (URL) string.'\n );\n }\n try {\n const _fetch = /** @type {import('./shared.js').Fetch} */ (getFetch());\n const resp = await (headOnly\n ? _fetch(url, {\n method: 'HEAD'\n })\n : _fetch(url)\n );\n\n if (resp.status === 404) {\n // Don't allow browser (tested in Firefox) to continue\n // and give `SyntaxError` with missing file or we won't be\n // able to try without the hyphen\n throw new Error('Trying again');\n }\n if (headOnly) {\n return locale;\n }\n const strings = await (resp.json());\n return {\n locale,\n strings\n };\n } catch (err) {\n if (/** @type {Error} */ (err).name === 'SyntaxError') {\n throw err;\n }\n const newLocale = await /** @type {LocaleMatcher} */ (\n localeMatcher\n )(locale);\n return getLocale(newLocale);\n }\n }\n if (localeMatcher === 'lookup') {\n localeMatcher = defaultLocaleMatcher;\n } else if (typeof localeMatcher !== 'function') {\n throw new TypeError('`localeMatcher` must be \"lookup\" or a function!');\n }\n return await promiseChainForValues(\n [...locales, ...defaultLocales],\n getLocale,\n 'No matching locale found for ' + [...locales, ...defaultLocales].join(', ')\n );\n};\n","import {getMessageForKeyByStyle} from './getMessageForKeyByStyle.js';\nimport {findLocaleStrings} from './findLocaleStrings.js';\nimport {getDOMForLocaleString} from './getDOMForLocaleString.js';\nimport {\n getStringFromMessageAndDefaults\n} from './getStringFromMessageAndDefaults.js';\nimport {sort, sortList, list} from './collation.js';\nimport {defaultKeyCheckerConverter} from './defaultKeyCheckerConverter.js';\n\n/**\n * @typedef {import('./index.js').Sort} Sort\n */\n/**\n * @typedef {import('./index.js').SortList} SortList\n */\n/**\n * @typedef {import('./index.js').List} List\n */\n\n/**\n * @typedef {import('./index.js').I18NCallback} I18NCallback\n */\n\n/**\n * @param {object} cfg\n * @param {import('./getMessageForKeyByStyle.js').LocaleObject} cfg.strings\n * @param {string} cfg.resolvedLocale\n * @param {\"richNested\"|\"rich\"|\"plain\"|\"plainNested\"|\n * import('./getMessageForKeyByStyle.js').\n * MessageStyleCallback} [cfg.messageStyle]\n * @param {?import('./defaultAllSubstitutions.js').AllSubstitutionCallback|\n * import('./defaultAllSubstitutions.js').\n * AllSubstitutionCallback[]} [cfg.allSubstitutions]\n * @param {import('./defaultInsertNodes.js').\n * InsertNodesCallback} [cfg.insertNodes]\n * @param {import('./defaultKeyCheckerConverter.js').\n * KeyCheckerConverterCallback} [cfg.keyCheckerConverter]\n * @param {false|null|undefined|\n * import('./getMessageForKeyByStyle.js').LocaleObject} [cfg.defaults]\n * @param {false|import('./defaultLocaleResolver.js').\n * SubstitutionObject} [cfg.substitutions]\n * @param {Integer} [cfg.maximumLocalNestingDepth]\n * @param {boolean} [cfg.dom]\n * @param {boolean} [cfg.forceNodeReturn]\n * @param {boolean} [cfg.throwOnMissingSuppliedFormatters]\n * @param {boolean} [cfg.throwOnExtraSuppliedFormatters]\n * @returns {I18NCallback} Rejects if no suitable locale is found.\n */\nexport const i18nServer = function i18nServer ({\n strings,\n resolvedLocale,\n messageStyle = 'richNested',\n allSubstitutions: defaultAllSubstitutionsValue,\n insertNodes,\n keyCheckerConverter = defaultKeyCheckerConverter,\n defaults: defaultDefaults,\n substitutions: defaultSubstitutions,\n maximumLocalNestingDepth,\n dom: domDefaults = false,\n forceNodeReturn: forceNodeReturnDefault = false,\n throwOnMissingSuppliedFormatters:\n throwOnMissingSuppliedFormattersDefault = true,\n throwOnExtraSuppliedFormatters:\n throwOnExtraSuppliedFormattersDefault = true\n}) {\n if (!strings || typeof strings !== 'object') {\n throw new TypeError(`Locale strings must be an object!`);\n }\n const messageForKey = getMessageForKeyByStyle({messageStyle});\n\n /**\n * @type {I18NCallback}\n */\n const formatter = (key, substitutions, {\n allSubstitutions = defaultAllSubstitutionsValue,\n defaults = defaultDefaults,\n dom = domDefaults,\n forceNodeReturn = forceNodeReturnDefault,\n throwOnMissingSuppliedFormatters = throwOnMissingSuppliedFormattersDefault,\n throwOnExtraSuppliedFormatters = throwOnExtraSuppliedFormattersDefault\n } = {}) => {\n key = /** @type {string} */ (keyCheckerConverter(key, messageStyle));\n const message = messageForKey(strings, key);\n const string = getStringFromMessageAndDefaults({\n message: message && typeof message.value === 'string'\n ? message.value\n : false,\n defaults,\n messageForKey,\n key\n });\n\n return getDOMForLocaleString({\n string,\n locals: strings.head && strings.head.locals,\n switches: strings.head && strings.head.switches,\n locale: resolvedLocale,\n maximumLocalNestingDepth,\n allSubstitutions,\n insertNodes,\n substitutions: {...defaultSubstitutions, ...substitutions},\n dom,\n forceNodeReturn,\n throwOnMissingSuppliedFormatters,\n throwOnExtraSuppliedFormatters\n });\n };\n\n formatter.resolvedLocale = resolvedLocale;\n formatter.strings = strings;\n\n /** @type {Sort} */\n formatter.sort = (arrayOfItems, options) => {\n return sort(resolvedLocale, arrayOfItems, options);\n };\n\n /** @type {SortList} */\n formatter.sortList = (arrayOfItems, map, listOptions, collationOptions) => {\n return sortList(\n resolvedLocale, arrayOfItems, map, listOptions, collationOptions\n );\n };\n\n /** @type {List} */\n formatter.list = (arrayOfItems, options) => {\n return list(\n resolvedLocale, arrayOfItems, options\n );\n };\n\n return formatter;\n};\n\n/**\n * @typedef {number} Integer\n */\n\n/**\n * @param {object} [cfg]\n * @param {string[]} [cfg.locales] BCP-47 language strings\n * @param {string[]} [cfg.defaultLocales]\n * @param {import('./findLocaleStrings.js').\n * LocaleStringFinder} [cfg.localeStringFinder]\n * @param {string} [cfg.localesBasePath]\n * @param {import('./defaultLocaleResolver.js').\n * LocaleResolver} [cfg.localeResolver]\n * @param {\"lookup\"|import('./findLocaleStrings.js').\n * LocaleMatcher} [cfg.localeMatcher]\n * @param {\"richNested\"|\"rich\"|\"plain\"|\"plainNested\"|\n * import('./getMessageForKeyByStyle.js').\n * MessageStyleCallback} [cfg.messageStyle]\n * @param {?(import('./defaultAllSubstitutions.js').AllSubstitutionCallback|\n * import('./defaultAllSubstitutions.js').\n * AllSubstitutionCallback[])} [cfg.allSubstitutions]\n * @param {import('./defaultInsertNodes.js').\n * InsertNodesCallback} [cfg.insertNodes]\n * @param {import('./defaultKeyCheckerConverter.js').\n * KeyCheckerConverterCallback} [cfg.keyCheckerConverter]\n * @param {false|null|undefined|\n * import('./getMessageForKeyByStyle.js').LocaleObject} [cfg.defaults]\n * @param {false|\n * import('./defaultLocaleResolver.js').\n * SubstitutionObject} [cfg.substitutions]\n * @param {Integer} [cfg.maximumLocalNestingDepth]\n * @param {boolean} [cfg.dom]\n * @param {boolean} [cfg.forceNodeReturn]\n * @param {boolean} [cfg.throwOnMissingSuppliedFormatters]\n * @param {boolean} [cfg.throwOnExtraSuppliedFormatters]\n * @returns {Promise<I18NCallback>} Rejects if no suitable locale is found.\n */\nexport const i18n = async function i18n ({\n locales,\n defaultLocales,\n localeStringFinder = findLocaleStrings,\n localesBasePath,\n localeResolver,\n localeMatcher,\n messageStyle,\n allSubstitutions,\n insertNodes,\n keyCheckerConverter,\n defaults,\n substitutions,\n maximumLocalNestingDepth,\n dom,\n forceNodeReturn,\n throwOnMissingSuppliedFormatters,\n throwOnExtraSuppliedFormatters\n} = {}) {\n const {strings, locale: resolvedLocale} = await localeStringFinder({\n locales, defaultLocales, localeResolver, localesBasePath, localeMatcher\n });\n if (!defaults && defaultLocales) {\n let defaultLocale;\n ({strings: defaults, locale: defaultLocale} = await localeStringFinder({\n locales: defaultLocales,\n defaultLocales: [],\n localeResolver, localesBasePath, localeMatcher\n }));\n if (defaultLocale === resolvedLocale) {\n defaults = null; // No need to fall back\n }\n }\n\n return i18nServer({\n strings,\n resolvedLocale,\n messageStyle,\n allSubstitutions,\n insertNodes,\n keyCheckerConverter,\n defaults,\n substitutions,\n maximumLocalNestingDepth,\n dom,\n forceNodeReturn,\n throwOnMissingSuppliedFormatters,\n throwOnExtraSuppliedFormatters\n });\n};\n"],"names":["_jsonExtra","globalThis","jsonExtra","unescapeBackslashes","str","replaceAll","esc","slice","length","parseJSONExtra","args","parse","replace","processRegex","regex","_ref","match","onMatch","extra","betweenMatches","afterMatch","escapeAtOne","Error","previousIndex","exec","_match2","_slicedToArray","_","lastIndex","startMatchPos","apply","_toConsumableArray","_fetch","fetch","getFetch","_doc","document","getDocument","sort","locale","arrayOfItems","options","Intl","Collator","compare","list","ListFormat","format","sortList","map","listOptions","collationOptions","sortListSimple","d","randomId","Date","now","performance","c","r","Math","trunc","random","floor","toString","placeholderArray","i","concat","nodes","push","arg","RegExp","String","raw","_templateObject","_taggedTemplateLiteral","idx","Number","container","createDocumentFragment","append","getFormatterInfo","object","Array","isArray","_object","value","callback","extraOpts","_object2","defaultAllSubstitutions","_ref2","opts","_typeof","applyArgs","_ref3","type","_ref3$options","_ref3$checkArgOptions","checkArgOptions","_arg$split2","split","userType","extraArgs","argOptions","_objectSpread","expectsDatetime","singleKey","Object","keys","includes","obj","_getFormatterInfo","dtf","DateTimeFormat","formatRange","val","DisplayNames","toUpperCase","of","_ref4","RelativeTimeFormat","test","getTime","_Intl$DateTimeFormat","NumberFormat","TypeError","Formatter","_createClass","_classCallCheck","this","getSubstitution","key","body","_ref$messageStyle","messageStyle","substitution","getMessageForKeyByStyle","messageForKey","LocalFormatter","_Formatter","locals","_this","_callSuper","_inherits","components","parent","constructor","isMatchingKey","every","cmpt","result","hasOwn","startsWith","RegularFormatter","_Formatter2","substitutions","_this2","SwitchFormatter","_Formatter3","switches","_this3","usedKeys","missingSuppliedFormatters","ky","getKey","_this$getMatch2","getMatch","objKey","keySegment","_objKey$split2","formatter","getNumberFormat","defaultOptions","numberOpts","getPluralFormat","pluralOpts","PluralRules","select","formatterValue","toLowerCase","preventNesting","s","err","error","k","find","switchKey","cause","Boolean","_this4","ks","reduce","ret","entries","promiseChainForValues","values","errBack","errorMessage","_asyncToGenerator","_regenerator","m","_callee","p","breaking","_t","w","_context","n","Promise","reject","shift","v","a","defaultLocaleResolver","localesBasePath","defaultInsertNodes","string","dom","allSubstitutions","_ref$maximumLocalNest","maximumLocalNestingDepth","checkExtraSuppliedFormatters","addFunctionKeys","forEach","localFormatter","regularFormatter","switchFormatter","formattingRegex","substs","subst","allSubst","recursiveLocalCount","checkLocalVars","_ref5","processSubsts","localFormatters","extraSubsts","returnsDOM","_ref6","_ref6$substs","_ref6$formatter","pipe","processSubstitutions","_ref7","_ref7$substs","_ref7$formatter","cloneNode","node","defaultKeyCheckerConverter","endsWith","_wrapRegExp","backslashes","join","arguments","undefined","mainObj","mergeWithPreviousOrStart","keysUnescaped","currObj","some","kys","message","info","o","getStringFromMessageAndDefaults","defaults","_ref$messageForKey","msg","getDOMForLocaleString","_ref$allSubstitutions","_ref$insertNodes","insertNodes","_ref$substitutions","_ref$dom","_ref$forceNodeReturn","forceNodeReturn","_ref$throwOnMissingSu","throwOnMissingSuppliedFormatters","_ref$throwOnExtraSupp","throwOnExtraSuppliedFormatters","stringOrTextNode","createTextNode","isMatch","defaultLocaleMatcher","findLocaleStrings","locales","defaultLocales","localeResolver","localeMatcher","_findLocale","_findLocale2","_callee2","_ref4$locales","_ref4$defaultLocales","_ref4$localeResolver","_ref4$localesBasePath","_ref4$localeMatcher","_ref4$headOnly","headOnly","getLocale","_getLocale","_context2","url","resp","strings","newLocale","method","status","json","name","_x2","intlDomLocale","navigator","languages","_x","i18nServer","resolvedLocale","defaultAllSubstitutionsValue","_ref$keyCheckerConver","keyCheckerConverter","defaultDefaults","defaultSubstitutions","domDefaults","forceNodeReturnDefault","throwOnMissingSuppliedFormattersDefault","throwOnExtraSuppliedFormattersDefault","_ref2$allSubstitution","_ref2$defaults","_ref2$dom","_ref2$forceNodeReturn","_ref2$throwOnMissingS","_ref2$throwOnExtraSup","head","i18n","_i18n","_ref3$localeStringFin","localeStringFinder","_yield$localeStringFi","_yield$localeStringFi2","_args","_ref$localeMatcher","doc","f","__jsonExtra"],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @typedef {(value: any) => Promise<any>|any} PromiseChainErrback
|
|
3
|
+
*/
|
|
4
|
+
export type PromiseChainErrback = (value: any) => Promise<any> | any;
|
|
5
|
+
/**
|
|
6
|
+
* The given array will have its items processed in series; if the supplied
|
|
7
|
+
* `errBack` (which is guaranteed to run at least once), when passed the
|
|
8
|
+
* current item, returns a `Promise` or value that resolves, that value will
|
|
9
|
+
* be used for the return result of this function and no other items in
|
|
10
|
+
* the array will continue to be processed; if it rejects, however, the
|
|
11
|
+
* next item will be processed with `errBack`.
|
|
12
|
+
* Accept an array of values to pass to an errback which should return
|
|
13
|
+
* a promise (or final result value) which resolves to a result or which
|
|
14
|
+
* rejects so that the next item in the array can be checked in series.
|
|
15
|
+
* @param {Array<any>} values Array of values
|
|
16
|
+
* @param {PromiseChainErrback} errBack Accepts an item of the array as its
|
|
17
|
+
* single argument
|
|
18
|
+
* @param {string} [errorMessage]
|
|
19
|
+
* @returns {Promise<any>} Either resolves to a value derived from an item in
|
|
20
|
+
* the array or rejects if all items reject
|
|
21
|
+
* @example
|
|
22
|
+
promiseChainForValues(['a', 'b', 'c'], (val) => {
|
|
23
|
+
return new Promise(function (resolve, reject) {
|
|
24
|
+
if (val === 'a') {
|
|
25
|
+
reject(new Error('missing'));
|
|
26
|
+
}
|
|
27
|
+
setTimeout(() => {
|
|
28
|
+
resolve(val);
|
|
29
|
+
}, 100);
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
*/
|
|
33
|
+
export declare const promiseChainForValues: (values: Array<any>, errBack: PromiseChainErrback, errorMessage?: string) => Promise<any>;
|
|
34
|
+
//# sourceMappingURL=promiseChainForValues.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promiseChainForValues.d.ts","sourceRoot":"","sources":["../src/promiseChainForValues.js"],"names":[],"mappings":"AACA;;GAEG;AADA,YAA4C,mBAAmB,GAArD,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,GAAC,GAAG,CAAqB;AAGlE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,qBAAqB,WAlBvB,KAAK,CAAC,GAAG,CAAC,WACV,mBAAmB,iBAEnB,MAAM,KACJ,OAAO,CAAC,GAAG,CAuDvB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Fetch = (input: RequestInfo | URL, init?: RequestInit) => Promise<Response>;
|
|
2
|
+
/**
|
|
3
|
+
* @param {Fetch} f
|
|
4
|
+
* @returns {void}
|
|
5
|
+
*/
|
|
6
|
+
export declare const setFetch: (f: Fetch) => void;
|
|
7
|
+
/**
|
|
8
|
+
* @returns {Fetch|null}
|
|
9
|
+
*/
|
|
10
|
+
export declare const getFetch: () => Fetch | null;
|
|
11
|
+
/**
|
|
12
|
+
* @param {Document} doc
|
|
13
|
+
* @returns {void}
|
|
14
|
+
*/
|
|
15
|
+
export declare const setDocument: (doc: Document) => void;
|
|
16
|
+
/**
|
|
17
|
+
* @returns {Document|null}
|
|
18
|
+
*/
|
|
19
|
+
export declare const getDocument: () => Document | null;
|
|
20
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.js"],"names":[],"mappings":"AAGG,YAEwB,KAAK,GAFnB,CACR,KAAK,EAAE,WAAW,GAAC,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KACvC,OAAO,CAAC,QAAQ,CAAC,CAAO;AAUhC;;;GAGG;AACH,eAAO,MAAM,QAAQ,MAHV,KAAK,KACH,IAIZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,QAAQ,QAFR,KAAK,GAAC,IAIlB,CAAC;AAQF;;;GAGG;AACH,eAAO,MAAM,WAAW,QAHb,QAAQ,KACN,IAIZ,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,QAFX,QAAQ,GAAC,IAIrB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
export type JSON6 = any;
|
|
2
|
+
export type AnyValue = any;
|
|
3
|
+
/**
|
|
4
|
+
* @param {JSON6} __jsonExtra
|
|
5
|
+
*/
|
|
6
|
+
export declare const setJSONExtra: (__jsonExtra: JSON6) => void;
|
|
7
|
+
/**
|
|
8
|
+
* @param {string} str
|
|
9
|
+
* @returns {string}
|
|
10
|
+
*/
|
|
11
|
+
export declare const unescapeBackslashes: (str: string) => string;
|
|
12
|
+
/**
|
|
13
|
+
* @param {string} args
|
|
14
|
+
* @returns {AnyValue}
|
|
15
|
+
*/
|
|
16
|
+
export declare const parseJSONExtra: (args: string) => AnyValue;
|
|
17
|
+
export type BetweenMatches = (str: string) => void;
|
|
18
|
+
export type AfterMatch = (str: string) => void;
|
|
19
|
+
export type EscapeAtOne = (str: string) => void;
|
|
20
|
+
/**
|
|
21
|
+
* @callback BetweenMatches
|
|
22
|
+
* @param {string} str
|
|
23
|
+
* @returns {void}
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* @callback AfterMatch
|
|
27
|
+
* @param {string} str
|
|
28
|
+
* @returns {void}
|
|
29
|
+
*/
|
|
30
|
+
/**
|
|
31
|
+
* @callback EscapeAtOne
|
|
32
|
+
* @param {string} str
|
|
33
|
+
* @returns {void}
|
|
34
|
+
*/
|
|
35
|
+
/**
|
|
36
|
+
* @param {RegExp} regex
|
|
37
|
+
* @param {string} str
|
|
38
|
+
* @param {{
|
|
39
|
+
* onMatch: (...arg0: string[]) => void,
|
|
40
|
+
* extra?: BetweenMatches|AfterMatch|EscapeAtOne
|
|
41
|
+
* betweenMatches?: BetweenMatches,
|
|
42
|
+
* afterMatch?: AfterMatch,
|
|
43
|
+
* escapeAtOne?: EscapeAtOne
|
|
44
|
+
* }} cfg
|
|
45
|
+
*/
|
|
46
|
+
export declare const processRegex: (regex: RegExp, str: string, { onMatch, extra, betweenMatches, afterMatch, escapeAtOne }: {
|
|
47
|
+
onMatch: (...arg0: string[]) => void;
|
|
48
|
+
extra?: BetweenMatches | AfterMatch | EscapeAtOne;
|
|
49
|
+
betweenMatches?: BetweenMatches;
|
|
50
|
+
afterMatch?: AfterMatch;
|
|
51
|
+
escapeAtOne?: EscapeAtOne;
|
|
52
|
+
}) => void;
|
|
53
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.js"],"names":[],"mappings":"AAOG,YAAe,KAAK,GAAV,GAAG,CAAO;AAGpB,YAAe,QAAQ,GAAb,GAAG,CAAU;AAQ1B;;GAEG;AACH,eAAO,MAAM,YAAY,gBAFd,KAAK,SAIf,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAHrB,MAAM,KACJ,MAMZ,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,SAHhB,MAAM,KACJ,QAQZ,CAAC;AAKC,YAAU,cAAc,GACxB,CAAgB,GAAG,EAAX,MACR,KAAU,IACZ,CAAA;AAGE,YAAU,UAAU,GACpB,CAAgB,GAAG,EAAX,MACR,KAAU,IACZ,CAAA;AAGE,YAAU,WAAW,GACrB,CAAgB,GAAG,EAAX,MACR,KAAU,IACZ,CAAA;AAhBD;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,UAVd,MAAM,OACN,MAAM,+DACN;IACN,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACrC,KAAK,CAAC,EAAE,cAAc,GAAC,UAAU,GAAC,WAAW,CAAA;IAC7C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,WAAW,CAAC,EAAE,WAAW,CAAA;CAC1B,SAyCH,CAAC"}
|